# -*- 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.hRules = [] self.colHead = ( 0,155,200,255) self.colHeadH = ( 0,105,135,255) self.colEmph = (200,120, 0,255) self.colDialN = (200, 46, 0,255) self.colDialD = (184,200, 0,255) self.colDialS = (136,200, 0,255) self.colComm = (150,150,150,255) self.colKey = (200, 46, 0,255) self.colVal = (184,200, 0,255) 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"(?