Allow up to 4 dialogue line symbols
This commit is contained in:
@@ -34,7 +34,7 @@ from PyQt5.QtWidgets import (
|
||||
)
|
||||
|
||||
from novelwriter import CONFIG, SHARED
|
||||
from novelwriter.common import describeFont, uniqueCompact
|
||||
from novelwriter.common import compact, describeFont, uniqueCompact
|
||||
from novelwriter.constants import nwUnicode
|
||||
from novelwriter.dialogs.quotes import GuiQuoteSelect
|
||||
from novelwriter.extensions.configlayout import NColourLabel, NScrollableForm
|
||||
@@ -133,7 +133,7 @@ class GuiPreferences(NDialog):
|
||||
"""Build the settings form."""
|
||||
section = 0
|
||||
iSz = SHARED.theme.baseIconSize
|
||||
boxFixed = 5*SHARED.theme.textNWidth
|
||||
boxFixed = 6*SHARED.theme.textNWidth
|
||||
minWidth = CONFIG.pxInt(200)
|
||||
fontWidth = CONFIG.pxInt(162)
|
||||
|
||||
@@ -568,13 +568,13 @@ class GuiPreferences(NDialog):
|
||||
)
|
||||
|
||||
self.dialogLine = QLineEdit(self)
|
||||
self.dialogLine.setMaxLength(1)
|
||||
self.dialogLine.setMaxLength(4)
|
||||
self.dialogLine.setFixedWidth(boxFixed)
|
||||
self.dialogLine.setAlignment(QtAlignCenter)
|
||||
self.dialogLine.setText(CONFIG.dialogLine)
|
||||
self.mainForm.addRow(
|
||||
self.tr("Dialogue line symbol"), self.dialogLine,
|
||||
self.tr("Lines starting with this symbol are dialogue.")
|
||||
self.tr("Dialogue line symbols"), self.dialogLine,
|
||||
self.tr("Lines starting with these symbols are always dialogue.")
|
||||
)
|
||||
|
||||
self.narratorBreak = QLineEdit(self)
|
||||
@@ -953,9 +953,9 @@ class GuiPreferences(NDialog):
|
||||
dialogueStyle = self.dialogStyle.currentData()
|
||||
allowOpenDial = self.allowOpenDial.isChecked()
|
||||
narratorBreak = self.narratorBreak.text().strip()
|
||||
dialogueLine = self.dialogLine.text().strip()
|
||||
altDialogOpen = self.altDialogOpen.text()
|
||||
altDialogClose = self.altDialogClose.text()
|
||||
dialogueLine = uniqueCompact(self.dialogLine.text())
|
||||
altDialogOpen = compact(self.altDialogOpen.text())
|
||||
altDialogClose = compact(self.altDialogClose.text())
|
||||
highlightEmph = self.highlightEmph.isChecked()
|
||||
showMultiSpaces = self.showMultiSpaces.isChecked()
|
||||
|
||||
|
||||
@@ -26,6 +26,7 @@ from __future__ import annotations
|
||||
import re
|
||||
|
||||
from novelwriter import CONFIG
|
||||
from novelwriter.common import compact, uniqueCompact
|
||||
from novelwriter.constants import nwRegEx
|
||||
|
||||
|
||||
@@ -88,11 +89,11 @@ class RegExPatterns:
|
||||
symO = ""
|
||||
symC = ""
|
||||
if CONFIG.dialogStyle in (1, 3):
|
||||
symO += CONFIG.fmtSQuoteOpen
|
||||
symC += CONFIG.fmtSQuoteClose
|
||||
symO += CONFIG.fmtSQuoteOpen.strip()[:1]
|
||||
symC += CONFIG.fmtSQuoteClose.strip()[:1]
|
||||
if CONFIG.dialogStyle in (2, 3):
|
||||
symO += CONFIG.fmtDQuoteOpen
|
||||
symC += CONFIG.fmtDQuoteClose
|
||||
symO += CONFIG.fmtDQuoteOpen.strip()[:1]
|
||||
symC += CONFIG.fmtDQuoteClose.strip()[:1]
|
||||
|
||||
rxEnd = "|$" if CONFIG.allowOpenDial else ""
|
||||
return re.compile(f"\\B[{symO}].*?(?:[{symC}]\\B{rxEnd})", re.UNICODE)
|
||||
@@ -102,8 +103,8 @@ class RegExPatterns:
|
||||
def altDialogStyle(self) -> re.Pattern | None:
|
||||
"""Dialogue alternative rule based on user settings."""
|
||||
if CONFIG.altDialogOpen and CONFIG.altDialogClose:
|
||||
symO = re.escape(CONFIG.altDialogOpen)
|
||||
symC = re.escape(CONFIG.altDialogClose)
|
||||
symO = re.escape(compact(CONFIG.altDialogOpen))
|
||||
symC = re.escape(compact(CONFIG.altDialogClose))
|
||||
return re.compile(f"\\B{symO}.*?{symC}\\B", re.UNICODE)
|
||||
return None
|
||||
|
||||
@@ -132,7 +133,7 @@ class DialogParser:
|
||||
"""Init parser settings. Must be called when config changes."""
|
||||
punct = re.escape("!?.,:;")
|
||||
self._quotes = REGEX_PATTERNS.dialogStyle
|
||||
self._dialog = CONFIG.dialogLine
|
||||
self._dialog = uniqueCompact(CONFIG.dialogLine)
|
||||
self._narrator = CONFIG.narratorBreak.strip()[:1]
|
||||
self._break = re.compile(
|
||||
f"({self._narrator}\\s?.*?\\s?(?:{self._narrator}[{punct}]?|$))", re.UNICODE
|
||||
|
||||
Reference in New Issue
Block a user