mirror of
https://github.com/pyapp-kit/superqt.git
synced 2025-12-16 11:10:06 +01:00
Prevent computing full document content highlight and only parse current block content for performance (#246)
This commit is contained in:
committed by
GitHub
parent
0ec5cd3a2f
commit
7b1aefd119
@@ -1,5 +1,3 @@
|
|||||||
from itertools import takewhile
|
|
||||||
|
|
||||||
from pygments import highlight
|
from pygments import highlight
|
||||||
from pygments.formatter import Formatter
|
from pygments.formatter import Formatter
|
||||||
from pygments.lexers import find_lexer_class, get_lexer_by_name
|
from pygments.lexers import find_lexer_class, get_lexer_by_name
|
||||||
@@ -68,21 +66,10 @@ class CodeSyntaxHighlight(QtGui.QSyntaxHighlighter):
|
|||||||
return self.formatter.style.background_color
|
return self.formatter.style.background_color
|
||||||
|
|
||||||
def highlightBlock(self, text):
|
def highlightBlock(self, text):
|
||||||
cb = self.currentBlock()
|
|
||||||
p = cb.position()
|
|
||||||
text_ = self.document().toPlainText() + "\n"
|
|
||||||
highlight(text_, self.lexer, self.formatter)
|
|
||||||
|
|
||||||
enters = sum(1 for _ in takewhile(lambda x: x == "\n", text_))
|
|
||||||
# pygments lexer ignore leading empty lines, so we need to do correction
|
|
||||||
# here calculating the number of empty lines.
|
|
||||||
|
|
||||||
# dirty, dirty hack
|
# dirty, dirty hack
|
||||||
# The core problem is that pygemnts by default use string streams,
|
# The core problem is that pygemnts by default use string streams,
|
||||||
# that will not handle QTextCharFormat, so we need use `data` property to
|
# that will not handle QTextCharFormat, so we need use `data` property to
|
||||||
# work around this.
|
# work around this.
|
||||||
|
highlight(text, self.lexer, self.formatter)
|
||||||
for i in range(len(text)):
|
for i in range(len(text)):
|
||||||
try:
|
self.setFormat(i, 1, self.formatter.data[i])
|
||||||
self.setFormat(i, 1, self.formatter.data[p + i - enters])
|
|
||||||
except IndexError: # pragma: no cover
|
|
||||||
pass
|
|
||||||
|
|||||||
Reference in New Issue
Block a user