# -*- coding: utf-8 -*- """novelWriter GUI Document Highlighter novelWriter – GUI Document Highlighter ======================================== Syntax highlighting for MarkDown File History: Created: 2019-04-06 [0.0.1] """ import logging import nw from PyQt5.QtCore import QRegularExpression from PyQt5.QtGui import QColor, QTextCharFormat, QFont, QSyntaxHighlighter logger = logging.getLogger(__name__) class GuiDocHighlighter(QSyntaxHighlighter): def __init__(self, theDoc): QSyntaxHighlighter.__init__(self, theDoc) logger.debug("Initialising DocHighlighter ...") self.mainConf = nw.CONFIG self.theDoc = theDoc self.theDict = None self.spellCheck = False self.hRules = [] self.colHead = QColor( 0,155,200) self.colHeadH = QColor( 0,105,135) self.colEmph = QColor(200,120, 0) self.colDialN = QColor(200, 46, 0) self.colDialD = QColor(184,200, 0) self.colDialS = QColor(136,200, 0) self.colComm = QColor(150,150,150) self.colKey = QColor(200, 46, 0) self.colVal = QColor(184,200, 0) self.colSpell = QColor(200, 46, 0) self.hStyles = { "header1" : self._makeFormat(self.colHead, "bold",1.8), "header2" : self._makeFormat(self.colHead, "bold",1.6), "header3" : self._makeFormat(self.colHead, "bold",1.4), "header4" : self._makeFormat(self.colHead, "bold",1.2), "header1h" : self._makeFormat(self.colHeadH,"bold",1.8), "header2h" : self._makeFormat(self.colHeadH,"bold",1.6), "header3h" : self._makeFormat(self.colHeadH,"bold",1.4), "header4h" : self._makeFormat(self.colHeadH,"bold",1.2), "bold" : self._makeFormat(self.colEmph, "bold"), "italic" : self._makeFormat(self.colEmph, "italic"), "strike" : self._makeFormat(self.colEmph, "strike"), "underline" : self._makeFormat(self.colEmph, "underline"), "dialogue1" : self._makeFormat(self.colDialN), "dialogue2" : self._makeFormat(self.colDialD), "dialogue3" : self._makeFormat(self.colDialS), "hidden" : self._makeFormat(self.colComm), "keyword" : self._makeFormat(self.colKey), "value" : self._makeFormat(self.colVal), } # Headers self.hRules.append(( r"^(#{1}) (.*)[^\n]", { 0 : self.hStyles["header1"], 1 : self.hStyles["header1h"], } )) self.hRules.append(( r"^(#{2}) (.*)[^\n]", { 0 : self.hStyles["header2"], 1 : self.hStyles["header2h"], } )) self.hRules.append(( r"^(#{3}) (.*)[^\n]", { 0 : self.hStyles["header3"], 1 : self.hStyles["header3h"], } )) self.hRules.append(( r"^(#{4}) (.*)[^\n]", { 0 : self.hStyles["header4"], 1 : self.hStyles["header4h"], } )) # Keyword/Value self.hRules.append(( r"^(@.+?)\s*:\s*(.+?)$", { 1 : self.hStyles["keyword"], 2 : self.hStyles["value"], } )) # Comments self.hRules.append(( r"^%.*$", { 0 : self.hStyles["hidden"], } )) # Markdown self.hRules.append(( r"(?