Adds #233: highlighter for CriticMarkup

This commit is contained in:
Olivier Keshavjee 2017-11-26 21:23:34 +01:00
parent d27ce4dec6
commit 6193dfe8f5
3 changed files with 59 additions and 13 deletions

View file

@ -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

View file

@ -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
###########################################################################

View file

@ -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