KriO
Фев. 1, 2018 11:00:00
Здравствуйте. Подскажите, пожалуйста, как задать регулярное выражение для ключевых слов в QTextEdit? Поясняю: есть редактор программ на определённом языке программирования. В нем есть ключевые слова, например “begin”, “end”. Пользователь хочет, чтобы ключевые слова подсвечивались определённым цветом. Я использую QSyntaxHighlighter. Ключевые слова подсвечиваются, но необходимо задать регулярное выражение таким образом, чтобы они не подсвечивались в строках, т. е. в последовательности символов, заключённых в апострофы (') и в однострочных комментариях, они начинаются с символа восклицательный знак (!). В строках у меня получилось сделать, но в случае, когда идут две строки, а между ними ключевое слово, то это ключевое слово тоже воспринимается, как будто оно в строке, например: ‘ begin ’ end ‘begin’ (дурацкий пример, но суть передаёт). Спасибо.
py.user.next
Фев. 1, 2018 12:00:16
Надо брать текст, пропускать его через
конечный автомат и потом возвращать обратно уже размеченным. Регулярные выражения для более-менее структурированных анализов не подходят.
KriO
таким образом, чтобы они не подсвечивались в строках, т. е. в последовательности символов, заключённых в апострофы (') и в однострочных комментариях, они начинаются с символа восклицательный знак (!).
А если комментарий будет частью строки?
Тут комментарий - уже не комментарий, но при обработке тупым регулярным выражением оно увидит этот “комментарий” и заберёт всё до конца строки, включая ключевое слово begin, которое надо подсветить.
KriO
Фев. 1, 2018 14:52:16
Спасибо. Жаль, что нет простого решения.
Rodegast
Фев. 1, 2018 16:17:07
> Спасибо. Жаль, что нет простого решения.
Есть такое решение.
http://pygments.org/