在 PySide/PyQt 中为降价标题实现语法高亮显示
Implementing syntax highlighting for markdown titles in PySide/PyQt
我正在尝试为我在 PySide 中的项目实现降价语法高亮显示。 current code 涵盖了基本内容,包括粗体、斜体、代码块和一些自定义标签。以下是当前代码相关部分的摘录。
现在困扰我的是如何实现标题的突出显示(主标题用 ===
下划线,sub-titles 用 ---
加下划线)。 Qt/PySide 用来突出显示文本的方法是 highlightBlock,它一次只处理一行。
class MySyntaxHighlighter(QtGui.QSyntaxHighlighter):
def highlightBlock(self, text):
# do something with this line of text
self.setCurrentBlockState(0)
startIndex = 0
if self.previousBlockState() != 1:
startIndex = self.blockStartExpression.indexIn(text)
while startIndex >= 0:
endIndex = self.blockEndExpression.indexIn(
text, startIndex)
...
有一种方法可以恢复 previousBlockState
,这在块具有定义的开始时很有用(例如,code-block 开头的 ~~~
语法) .不幸的是,除了下一行的 ===
或 ---
下划线外,没有任何内容可以定义标题的开头。我发现的所有示例仅处理表达式定义开头的情况,因此 previousBlockState
会为您提供信息(如上例所示)。
那么问题是:有没有办法恢复下一行的文本,在 highlightBlock 内?在某种意义上执行look-ahead。
我想恢复当前正在处理的文档,找到文档中的当前块,然后找到下一行并对它进行正则表达式检查。但是,如果文档中有一行与标题的措辞完全相同,这就会中断。另外,系统地对文档中的所有行执行此操作会变得非常慢。提前感谢您的任何建议。
如果 self.currentBlock()
给你突出显示的块,则:
self.currentBlock().next().text()
应该给你下一段的文字。
我正在尝试为我在 PySide 中的项目实现降价语法高亮显示。 current code 涵盖了基本内容,包括粗体、斜体、代码块和一些自定义标签。以下是当前代码相关部分的摘录。
现在困扰我的是如何实现标题的突出显示(主标题用 ===
下划线,sub-titles 用 ---
加下划线)。 Qt/PySide 用来突出显示文本的方法是 highlightBlock,它一次只处理一行。
class MySyntaxHighlighter(QtGui.QSyntaxHighlighter):
def highlightBlock(self, text):
# do something with this line of text
self.setCurrentBlockState(0)
startIndex = 0
if self.previousBlockState() != 1:
startIndex = self.blockStartExpression.indexIn(text)
while startIndex >= 0:
endIndex = self.blockEndExpression.indexIn(
text, startIndex)
...
有一种方法可以恢复 previousBlockState
,这在块具有定义的开始时很有用(例如,code-block 开头的 ~~~
语法) .不幸的是,除了下一行的 ===
或 ---
下划线外,没有任何内容可以定义标题的开头。我发现的所有示例仅处理表达式定义开头的情况,因此 previousBlockState
会为您提供信息(如上例所示)。
那么问题是:有没有办法恢复下一行的文本,在 highlightBlock 内?在某种意义上执行look-ahead。
我想恢复当前正在处理的文档,找到文档中的当前块,然后找到下一行并对它进行正则表达式检查。但是,如果文档中有一行与标题的措辞完全相同,这就会中断。另外,系统地对文档中的所有行执行此操作会变得非常慢。提前感谢您的任何建议。
如果 self.currentBlock()
给你突出显示的块,则:
self.currentBlock().next().text()
应该给你下一段的文字。