add HTML entity highlighter

This commit is contained in:
un-pogaz 2023-05-04 10:06:13 +02:00
parent 074bdd3330
commit cd888703b8
2 changed files with 17 additions and 4 deletions

View File

@ -183,7 +183,7 @@ if __name__ == '__main__':
w.setWindowFlag(Qt.WindowType.Dialog) w.setWindowFlag(Qt.WindowType.Dialog)
w.show() w.show()
w.markdown = '''\ w.markdown = '''\
test *italic* **bold** ***bold-italic*** `code` [link](https://calibre-ebook.com) <span style="font-weight: bold; color:red">span</span> normal&amp; *italic&#38;* **bold&#x0026;** ***bold-italic*** `code` [link](https://calibre-ebook.com) <span style="font-weight: bold; color:red">span</span>
> Blockquotes > Blockquotes

View File

@ -32,7 +32,8 @@ class MarkdownHighlighter(QSyntaxHighlighter):
'CodeSpan': re.compile(r'(?<!\\)(?P<delim>`+).+?(?P=delim)'), 'CodeSpan': re.compile(r'(?<!\\)(?P<delim>`+).+?(?P=delim)'),
'HeaderLine': re.compile(r'(?u)^(-|=)+\s*$'), 'HeaderLine': re.compile(r'(?u)^(-|=)+\s*$'),
'HR': re.compile(r'(?u)^(\s*(\*|-|_)\s*){3,}$'), 'HR': re.compile(r'(?u)^(\s*(\*|-|_)\s*){3,}$'),
'Html': re.compile(r'(?u)</?[^/\s].*?(?<!\\)>') 'Html': re.compile(r'(?u)</?[^/\s].*?(?<!\\)>'),
'Entity': re.compile(r'&([A-z]{2,7}|#\d{1,7}|#x[\dA-Fa-f]{1,6});'),
} }
key_theme_maps = { key_theme_maps = {
@ -55,6 +56,7 @@ class MarkdownHighlighter(QSyntaxHighlighter):
'CodeSpan': "codespan", 'CodeSpan': "codespan",
'HR': "line", 'HR': "line",
'Html': "html", 'Html': "html",
'Entity': "entity",
} }
light_theme = { light_theme = {
@ -70,7 +72,8 @@ class MarkdownHighlighter(QSyntaxHighlighter):
"codespan": {"color":"#ff5800", "font-weight":"normal", "font-style":"normal"}, "codespan": {"color":"#ff5800", "font-weight":"normal", "font-style":"normal"},
"codeblock": {"color":"#ff5800", "font-weight":"normal", "font-style":"normal"}, "codeblock": {"color":"#ff5800", "font-weight":"normal", "font-style":"normal"},
"line": {"color":"#2aa198", "font-weight":"normal", "font-style":"normal"}, "line": {"color":"#2aa198", "font-weight":"normal", "font-style":"normal"},
"html": {"color":"#c000c0", "font-weight":"normal", "font-style":"normal"} "html": {"color":"#c000c0", "font-weight":"normal", "font-style":"normal"},
"entity": {"color":"#006496", "font-weight":"normal", "font-style":"normal"},
} }
dark_theme = { dark_theme = {
@ -86,7 +89,8 @@ class MarkdownHighlighter(QSyntaxHighlighter):
"codespan": {"color":"#90ee90", "font-weight":"normal", "font-style":"normal"}, "codespan": {"color":"#90ee90", "font-weight":"normal", "font-style":"normal"},
"codeblock": {"color":"#ff9900", "font-weight":"normal", "font-style":"normal"}, "codeblock": {"color":"#ff9900", "font-weight":"normal", "font-style":"normal"},
"line": {"color":"#2aa198", "font-weight":"normal", "font-style":"normal"}, "line": {"color":"#2aa198", "font-weight":"normal", "font-style":"normal"},
"html": {"color":"#F653A6", "font-weight":"normal", "font-style":"normal"} "html": {"color":"#f653a6", "font-weight":"normal", "font-style":"normal"},
"entity": {"color":"#ff82ac", "font-weight":"normal", "font-style":"normal"},
} }
def __init__(self, parent): def __init__(self, parent):
@ -141,6 +145,8 @@ class MarkdownHighlighter(QSyntaxHighlighter):
self.highlightImage(text, cursor, bf) self.highlightImage(text, cursor, bf)
self.highlightEntity(text, cursor, bf)
self.highlightCodeSpan(text, cursor, bf) self.highlightCodeSpan(text, cursor, bf)
self.highlightCodeBlock(text, cursor, bf) self.highlightCodeBlock(text, cursor, bf)
@ -295,6 +301,13 @@ class MarkdownHighlighter(QSyntaxHighlighter):
found = True found = True
return found return found
def highlightEntity(self, text, cursor, bf):
found = False
for mo in re.finditer(self.MARKDOWN_KEYS_REGEX['Entity'],text):
self.setFormat(self.offset+ mo.start(), mo.end() - mo.start(), self.MARKDOWN_KWS_FORMAT['Entity'])
found = True
return found
def highlightHtml(self, text): def highlightHtml(self, text):
for mo in re.finditer(self.MARKDOWN_KEYS_REGEX['Html'], text): for mo in re.finditer(self.MARKDOWN_KEYS_REGEX['Html'], text):
self.setFormat(mo.start(), mo.end() - mo.start(), self.MARKDOWN_KWS_FORMAT['Html']) self.setFormat(mo.start(), mo.end() - mo.start(), self.MARKDOWN_KWS_FORMAT['Html'])