Fix issue with overlapping formatting (#2012)

This commit is contained in:
Veronica Berglyd Olsen
2024-09-01 17:22:54 +02:00
parent d2f422a441
commit 8dd9644c13
2 changed files with 21 additions and 2 deletions
+3 -2
View File
@@ -1150,8 +1150,9 @@ class Tokenizer(ABC):
formats = []
for pos, n, fmt, key in reversed(sorted(temp, key=lambda x: x[0])):
if fmt > 0:
result = result[:pos] + result[pos+n:]
formats = [(p-n, f, k) for p, f, k in formats]
if n > 0:
result = result[:pos] + result[pos+n:]
formats = [(p-n if p > pos else p, f, k) for p, f, k in formats]
formats.insert(0, (pos, fmt, key))
return result, formats
+18
View File
@@ -1161,6 +1161,24 @@ def testCoreToken_Dialogue(mockGUI):
Tokenizer.A_NONE
)]
# Special Cases
# =============
# Dialogue + formatting on same index (Issue #2012)
tokens._text = "[i]\u201cDialogue text.\u201d[/i]\n"
tokens.tokenizeText()
assert tokens._tokens == [(
Tokenizer.T_TEXT, 0,
"\u201cDialogue text.\u201d",
[
(0, Tokenizer.FMT_I_B, ""),
(0, Tokenizer.FMT_DL_B, ""),
(16, Tokenizer.FMT_I_E, ""),
(16, Tokenizer.FMT_DL_E, ""),
],
Tokenizer.A_NONE
)]
@pytest.mark.core
def testCoreToken_SpecialFormat(mockGUI):