Я пытаюсь реализовать синтаксический маркер для уценки для моего проекта в PySide. current code охватывает основные, жирные, курсивные, кодовые блоки и некоторые пользовательские теги. Ниже приведена выдержка из соответствующей части текущего кода.Реализация подсветки синтаксиса для заголовков меток в PySide/PyQt
Что блокирует меня прямо сейчас, как реализовать выделение заголовков (подчеркнуто с ===
, для основного названия, или ---
для подзаголовков). Метод, который используется 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
, что полезно, когда блок имеет определенное начало (например, ~~~
синтаксиса в начале кодового-блока). К сожалению, ничто не определяет начало названия, за исключением подчеркивания с ===
или ---
, которые имеют место на следующей строке. Все примеры, которые я нашел, обрабатывают только случаи, когда есть определенный старт выражения, и поэтому previousBlockState
дает вам информацию (как в примере выше).
Вопрос: Есть ли способ восстановить текст следующей строки, внутри highlightBlock? Чтобы выполнить прогноз, в некотором смысле.
Я, хотя о восстановлении обрабатываемого документа, и найти текущий блок в документе, затем найти следующую строку и выполнить проверку регулярного выражения. Это, однако, будет нарушено, если в документе есть строка с той же формулировкой, что и название. Кроме того, систематически делать это для всех строк документа. Заранее благодарю за любое предложение.
Просьба не ссылаться на код на внешних сайтах: поместить соответствующий код в вопрос непосредственно. – ekhumoro
Я никогда не использовал 'QSyntaxHighlighter', но казалось бы, что если' self.currentBlock() 'дает вам выделение блока, тогда' self.currentBlock(). Next(). Text() 'должен дать вам текст следующего блока. – ekhumoro
@ekhumoro да, это было! Я чувствую себя глупо, не найдя этого в документации. Я слишком много смотрел на класс 'QSyntaxHighlighter' и не исследовал достаточно. Итак, могу ли я принять комментарий :) Имейте upvote, по крайней мере –