Use stdlib re for Shortcode matching

This commit is contained in:
Veronica Berglyd Olsen
2024-09-22 17:06:57 +02:00
parent c3cb12e5e2
commit 9c63f621a8
2 changed files with 21 additions and 24 deletions
+7 -13
View File
@@ -1116,27 +1116,21 @@ class Tokenizer(ABC):
) )
# Match Shortcodes # Match Shortcodes
rxItt = self._rxShortCodes.globalMatch(text, 0) for match in re.finditer(REGEX_PATTERNS.shortcodePlain, text):
while rxItt.hasNext():
rxMatch = rxItt.next()
temp.append(( temp.append((
rxMatch.capturedStart(1), match.start(1), len(match.group(1)),
rxMatch.capturedLength(1), self._shortCodeFmt.get(match.group(1).lower(), 0),
self._shortCodeFmt.get(rxMatch.captured(1).lower(), 0),
"", "",
)) ))
# Match Shortcode w/Values # Match Shortcode w/Values
rxItt = self._rxShortCodeVals.globalMatch(text, 0)
tHandle = self._handle or "" tHandle = self._handle or ""
while rxItt.hasNext(): for match in re.finditer(REGEX_PATTERNS.shortcodeValue, text):
rxMatch = rxItt.next() kind = self._shortCodeVals.get(match.group(1).lower(), 0)
kind = self._shortCodeVals.get(rxMatch.captured(1).lower(), 0)
temp.append(( temp.append((
rxMatch.capturedStart(0), match.start(0), len(match.group(0)),
rxMatch.capturedLength(0),
self.FMT_STRIP if kind == skip else kind, self.FMT_STRIP if kind == skip else kind,
f"{tHandle}:{rxMatch.captured(2)}", f"{tHandle}:{match.group(2)}",
)) ))
# Match Dialogue # Match Dialogue
+14 -11
View File
@@ -34,34 +34,37 @@ from novelwriter.types import QRegExUnicode
class RegExPatterns: class RegExPatterns:
# Static RegExes
_rxItalic = re.compile(nwRegEx.FMT_EI, re.UNICODE)
_rxBold = re.compile(nwRegEx.FMT_EB, re.UNICODE)
_rxStrike = re.compile(nwRegEx.FMT_ST, re.UNICODE)
_rxSCPlain = re.compile(nwRegEx.FMT_SC, re.UNICODE)
_rxSCValue = re.compile(nwRegEx.FMT_SV, re.UNICODE)
@property @property
def markdownItalic(self) -> re.Pattern: def markdownItalic(self) -> re.Pattern:
"""Markdown italic style.""" """Markdown italic style."""
return re.compile(nwRegEx.FMT_EI, re.UNICODE) return self._rxItalic
@property @property
def markdownBold(self) -> re.Pattern: def markdownBold(self) -> re.Pattern:
"""Markdown bold style.""" """Markdown bold style."""
return re.compile(nwRegEx.FMT_EB, re.UNICODE) return self._rxBold
@property @property
def markdownStrike(self) -> re.Pattern: def markdownStrike(self) -> re.Pattern:
"""Markdown strikethrough style.""" """Markdown strikethrough style."""
return re.compile(nwRegEx.FMT_ST, re.UNICODE) return self._rxStrike
@property @property
def shortcodePlain(self) -> QRegularExpression: def shortcodePlain(self) -> re.Pattern:
"""Plain shortcode style.""" """Plain shortcode style."""
rxRule = QRegularExpression(nwRegEx.FMT_SC) return self._rxSCPlain
rxRule.setPatternOptions(QRegExUnicode)
return rxRule
@property @property
def shortcodeValue(self) -> QRegularExpression: def shortcodeValue(self) -> re.Pattern:
"""Plain shortcode style.""" """Plain shortcode style."""
rxRule = QRegularExpression(nwRegEx.FMT_SV) return self._rxSCValue
rxRule.setPatternOptions(QRegExUnicode)
return rxRule
@property @property
def dialogStyle(self) -> QRegularExpression: def dialogStyle(self) -> QRegularExpression: