diff --git a/manuskript/ui/highlighters/markdownEnums.py b/manuskript/ui/highlighters/markdownEnums.py index fefd424a..76cb32b4 100644 --- a/manuskript/ui/highlighters/markdownEnums.py +++ b/manuskript/ui/highlighters/markdownEnums.py @@ -1,6 +1,6 @@ #!/usr/bin/python # -*- coding: utf-8 -*- - + #============================================================================== # MARKDOWN STATES #============================================================================== @@ -36,10 +36,10 @@ class MarkdownState: #============================================================================== # MARKDOWN TOKEN TYPE #============================================================================== - + class MarkdownTokenType: TokenUnknown = -1 - + # Titles TokenAtxHeading1 = 0 TokenAtxHeading2 = 1 @@ -51,7 +51,7 @@ class MarkdownTokenType: TokenSetextHeading1Line2 = 7 TokenSetextHeading2Line1 = 8 TokenSetextHeading2Line2 = 9 - + TokenEmphasis = 10 TokenStrong = 11 TokenStrikethrough = 12 @@ -79,15 +79,21 @@ class MarkdownTokenType: TokenTablePipe = 34 TokenSuperScript = 35 TokenSubScript = 36 - TokenLast = 37 - + # CriticMarkup + TokenCMAddition = 37 # {++ ++} + TokenCMDeletion = 38 # {-- --} + TokenCMSubstitution = 39 #{~~ ~> ~~} + TokenCMComment = 40 # {>> <<} + TokenCMHighlight = 41 # {== ==}{>> <<} + TokenLast = 42 + TITLES = [TokenAtxHeading1, TokenAtxHeading2, TokenAtxHeading3, TokenAtxHeading4, TokenAtxHeading5, TokenAtxHeading6, TokenSetextHeading1Line1, TokenSetextHeading1Line2, TokenSetextHeading2Line1, TokenSetextHeading2Line2] - - - + + + class BlockquoteStyle: BlockquoteStylePlain = 0 BlockquoteStyleItalic = 1 diff --git a/manuskript/ui/highlighters/markdownHighlighter.py b/manuskript/ui/highlighters/markdownHighlighter.py index cb38e46f..52b46a2e 100644 --- a/manuskript/ui/highlighters/markdownHighlighter.py +++ b/manuskript/ui/highlighters/markdownHighlighter.py @@ -329,6 +329,31 @@ class MarkdownHighlighter(BasicHighlighter): theme[MTT.TokenTablePipe] = { "color": markup, "monospace":True} + # CriticMarkup + theme[MTT.TokenCMAddition] = { + "color": QColor("#00bb00"), + "markupColor": QColor(F.mixColors("#00bb00", background, .4)), + "markupMonospace": True,} + theme[MTT.TokenCMDeletion] = { + "color": QColor("#dd0000"), + "markupColor": QColor(F.mixColors("#dd0000", background, .4)), + "markupMonospace": True, + "strike": True} + theme[MTT.TokenCMSubstitution] = { + "color": QColor("#ff8600"), + "markupColor": QColor(F.mixColors("#ff8600", background, .4)), + "markupMonospace": True,} + theme[MTT.TokenCMComment] = { + "color": QColor("#0000bb"), + "markupColor": QColor(F.mixColors("#0000bb", background, .4)), + "markupMonospace": True,} + theme[MTT.TokenCMHighlight] = { + "color": QColor("#aa53a9"), + "background": QColor(F.mixColors("#aa53a9", background, .1)), + "markupBackground": QColor(F.mixColors("#aa53a9", background, .1)), + "markupColor": QColor(F.mixColors("#aa53a9", background, .5)), + "markupMonospace": True,} + return theme ########################################################################### diff --git a/manuskript/ui/highlighters/markdownTokenizer.py b/manuskript/ui/highlighters/markdownTokenizer.py index fd9c047d..ffb4d7ba 100644 --- a/manuskript/ui/highlighters/markdownTokenizer.py +++ b/manuskript/ui/highlighters/markdownTokenizer.py @@ -112,6 +112,16 @@ class MarkdownTokenizer(HighlightTokenizer): htmlInlineCommentRegex.setMinimal(True) mentionRegex = QRegExp("\\B@\\w+(\\-\\w+)*(/\\w+(\\-\\w+)*)?") pipeTableDividerRegex = QRegExp("^ {0,3}(\\|[ :]?)?-{3,}([ :]?\\|[ :]?-{3,}([ :]?\\|)?)+\\s*$") + CMAdditionRegex = QRegExp("(\\{\\+\\+.*\\+\\+\\})") + CMAdditionRegex.setMinimal(True) + CMDeletionRegex = QRegExp("(\\{--.*--\\})") + CMDeletionRegex.setMinimal(True) + CMSubstitutionRegex = QRegExp("(\\{~~.*~>.*~~\\})") + CMSubstitutionRegex.setMinimal(True) + CMCommentRegex = QRegExp("(\\{>>.*<<\\})") + CMCommentRegex.setMinimal(True) + CMHighlightRegex = QRegExp("(\\{==.*==\\})") + CMHighlightRegex.setMinimal(True) def __init__(self): HighlightTokenizer.__init__(self) @@ -601,13 +611,18 @@ class MarkdownTokenizer(HighlightTokenizer): escapedText = self.tokenizeMatches(MTT.TokenReferenceLink, escapedText, self.referenceLinkRegex, 0, 0, False, True) escapedText = self.tokenizeMatches(MTT.TokenHtmlEntity, escapedText, self.htmlEntityRegex) escapedText = self.tokenizeMatches(MTT.TokenAutomaticLink, escapedText, self.automaticLinkRegex, 0, 0, False, True) - escapedText = self.tokenizeMatches(MTT.TokenStrikethrough, escapedText, self.strikethroughRegex, 2, 2, True) escapedText = self.tokenizeMatches(MTT.TokenStrong, escapedText, self.strongRegex, 2, 2, True) escapedText = self.tokenizeMatches(MTT.TokenEmphasis, escapedText, self.emphasisRegex, 1, 1, True) - escapedText = self.tokenizeMatches(MTT.TokenSuperScript, escapedText, self.superScriptRegex, 1, 1, True) - escapedText = self.tokenizeMatches(MTT.TokenSubScript, escapedText, self.subScriptRegex, 1, 1, True) - escapedText = self.tokenizeMatches(MTT.TokenHtmlTag, escapedText, self.htmlTagRegex) escapedText = self.tokenizeMatches(MTT.TokenMention, escapedText, self.mentionRegex, 0, 0, False, True) + escapedText = self.tokenizeMatches(MTT.TokenCMAddition, escapedText, self.CMAdditionRegex, 3, 3, True) + escapedText = self.tokenizeMatches(MTT.TokenCMDeletion, escapedText, self.CMDeletionRegex, 3, 3, True) + escapedText = self.tokenizeMatches(MTT.TokenCMSubstitution, escapedText, self.CMSubstitutionRegex, 3, 3, True) + escapedText = self.tokenizeMatches(MTT.TokenCMComment, escapedText, self.CMCommentRegex, 3, 3, True) + escapedText = self.tokenizeMatches(MTT.TokenCMHighlight, escapedText, self.CMHighlightRegex, 3, 3, True) + escapedText = self.tokenizeMatches(MTT.TokenStrikethrough, escapedText, self.strikethroughRegex, 2, 2, True) + escapedText = self.tokenizeMatches(MTT.TokenHtmlTag, escapedText, self.htmlTagRegex) + escapedText = self.tokenizeMatches(MTT.TokenSubScript, escapedText, self.subScriptRegex, 1, 1, True) + escapedText = self.tokenizeMatches(MTT.TokenSuperScript, escapedText, self.superScriptRegex, 1, 1, True) return True