Найти - Пользователи
Полная версия: PyQt. Регулярное выражение в QSyntaxHighlighter.
Начало » GUI » PyQt. Регулярное выражение в QSyntaxHighlighter.
1
KriO
Здравствуйте. Подскажите, пожалуйста, как задать регулярное выражение для ключевых слов в QTextEdit? Поясняю: есть редактор программ на определённом языке программирования. В нем есть ключевые слова, например “begin”, “end”. Пользователь хочет, чтобы ключевые слова подсвечивались определённым цветом. Я использую QSyntaxHighlighter. Ключевые слова подсвечиваются, но необходимо задать регулярное выражение таким образом, чтобы они не подсвечивались в строках, т. е. в последовательности символов, заключённых в апострофы (') и в однострочных комментариях, они начинаются с символа восклицательный знак (!). В строках у меня получилось сделать, но в случае, когда идут две строки, а между ними ключевое слово, то это ключевое слово тоже воспринимается, как будто оно в строке, например: ‘ begin ’ end ‘begin’ (дурацкий пример, но суть передаёт). Спасибо.
py.user.next
Надо брать текст, пропускать его через конечный автомат и потом возвращать обратно уже размеченным. Регулярные выражения для более-менее структурированных анализов не подходят.

KriO
таким образом, чтобы они не подсвечивались в строках, т. е. в последовательности символов, заключённых в апострофы (') и в однострочных комментариях, они начинаются с символа восклицательный знак (!).
А если комментарий будет частью строки?
"abc !def ghi" begin
Тут комментарий - уже не комментарий, но при обработке тупым регулярным выражением оно увидит этот “комментарий” и заберёт всё до конца строки, включая ключевое слово begin, которое надо подсветить.
KriO
Спасибо. Жаль, что нет простого решения.
Rodegast
> Спасибо. Жаль, что нет простого решения.

Есть такое решение. http://pygments.org/
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB