Add new logic for dialogue narrator break

This commit is contained in:
Veronica Berglyd Olsen
2024-10-27 01:55:19 +02:00
parent f931148594
commit 8850161641
+19 -15
View File
@@ -59,7 +59,8 @@ class GuiDocHighlighter(QSyntaxHighlighter):
__slots__ = (
"_tHandle", "_isNovel", "_isInactive", "_spellCheck", "_spellErr",
"_hStyles", "_minRules", "_txtRules", "_cmnRules",
"_hStyles", "_minRules", "_txtRules", "_cmnRules", "_dialogLine",
"_narratorBreak",
)
def __init__(self, document: QTextDocument) -> None:
@@ -78,6 +79,9 @@ class GuiDocHighlighter(QSyntaxHighlighter):
self._txtRules: list[tuple[re.Pattern, dict[int, QTextCharFormat]]] = []
self._cmnRules: list[tuple[re.Pattern, dict[int, QTextCharFormat]]] = []
self._dialogLine = ""
self._narratorBreak = ""
self.initHighlighter()
logger.debug("Ready: GuiDocHighlighter")
@@ -132,6 +136,9 @@ class GuiDocHighlighter(QSyntaxHighlighter):
self._txtRules.clear()
self._cmnRules.clear()
self._dialogLine = CONFIG.dialogLine
self._narratorBreak = CONFIG.narratorBreak
# Multiple or Trailing Spaces
if CONFIG.showMultiSpaces:
rxRule = re.compile(r"[ ]{2,}|[ ]*$", re.UNICODE)
@@ -159,20 +166,6 @@ class GuiDocHighlighter(QSyntaxHighlighter):
}
self._txtRules.append((rxRule, hlRule))
if CONFIG.dialogLine:
rxRule = REGEX_PATTERNS.dialogLine
hlRule = {
0: self._hStyles["dialog"],
}
self._txtRules.append((rxRule, hlRule))
if CONFIG.narratorBreak:
rxRule = REGEX_PATTERNS.narratorBreak
hlRule = {
0: self._hStyles["text"],
}
self._txtRules.append((rxRule, hlRule))
if CONFIG.altDialogOpen and CONFIG.altDialogClose:
rxRule = REGEX_PATTERNS.altDialogStyle
hlRule = {
@@ -411,6 +404,17 @@ class GuiDocHighlighter(QSyntaxHighlighter):
self.setCurrentBlockState(BLOCK_TEXT)
hRules = self._txtRules if self._isNovel else self._minRules
if self._dialogLine and text.startswith(self._dialogLine):
if self._narratorBreak:
tPos = 0
for tNum, tBit in enumerate(text[1:].split(self._narratorBreak), 1):
tLen = len(tBit) + 1
if tNum%2:
self.setFormat(tPos, tLen, self._hStyles["dialog"])
tPos += tLen
else:
self.setFormat(0, len(text), self._hStyles["dialog"])
if hRules:
for rX, hRule in hRules:
for res in re.finditer(rX, text[xOff:]):