在 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()

应该给你下一段的文字。