Найти - Пользователи
Полная версия: QRegExp для QSyntaxHighlighter
Начало » GUI » QRegExp для QSyntaxHighlighter
1
voltron
Вопрос больше по регулярным выражениям, чем по Python и Qt, но все же…
Пытаюсь реализовать подсветку синстаксиса XML в приложении на PyQt. Нужна подсветка открывающих и закрывающих тегов, комментариев, атрибутов и их значений. Подсветку тегов и комментариев сделал так
# допустимые символы
nameStartCharList = ":A-Z_a-z\\x00C0-\\x00D6\\x00D8-\\x00F6\\x00F8-\\x02FF\\x0370-\\x037D\\x037F-\\x1FFF\\x200C-\\x200D\\x2070-\\x218F\\x2C00-\\x2FEF\\x3001-\\xD7FF\\xF900-\\xFDCF\\xFDF0-\\xFFFD"
nameCharList = nameStartCharList + "\\-\\.0-9\\x00B7\\x0300-\\x036F\\x203F-\\x2040"
nameStart = "[" + nameStartCharList + "]"
nameChar = "[" + nameCharList + "]"
xmlName = nameStart + "(" + nameChar + ")*"

self.highlightingRules = []

xmlOpenTag = QTextCharFormat()
xmlCloseTag = QTextCharFormat()
xmlComment = QTextCharFormat()

# открывающий тег
pattern = QRegExp( "<" + xmlName + ">?" )
xmlOpenTag.setForeground( Qt.darkBlue )
xmlOpenTag.setFontWeight( QFont.Bold )
rule = HighlightingRule( pattern, xmlOpenTag )
self.highlightingRules.append( rule )

# закрывающий тег
pattern = QRegExp("</" + xmlName + ">" + "|/>|>$" )
xmlCloseTag.setForeground( Qt.darkBlue )
xmlCloseTag.setFontWeight( QFont.Bold )
rule = HighlightingRule( pattern, xmlCloseTag )
self.highlightingRules.append( rule )

# комментарий
pattern = QRegExp("<!\\-\\-.*\\-\\->")
xmlComment.setForeground( Qt.darkGray )
xmlComment.setFontItalic( True )
rule = HighlightingRule( pattern, xmlComment )
self.highlightingRules.append( rule )
Не могу составить правильные выражения для атрибутов и их значений. Если для значений атрибутов делаю так
pattern = QRegExp("=\".*\"\\s?" )
#pattern.setPatternSyntax( QRegExp.RegExp2 )
pattern.setMinimal( True )
xmlAttributeValue.setForeground( Qt.darkYellow )
rule = HighlightingRule( pattern, xmlAttributeValue )
self.highlightingRules.append( rule )
то, когда атрибутов у тега несколько, правильно раскрашивается только первых два значения, а потом вся оставшаяся строка выделяется цветом заданным для значений атрибутов. Похожая проблема и с выражением для собственно атрибутов - после его добавления часть тегов распознается как атрибуты. Подскажите, как правильно составить выражения

Еще одна проблема - многострочные комментарии. Можно ли реализовать их подсветку, если да - то в каком направлении смотреть?
villager
парился с такой же проблемой год назад
тогда регэксп для подсветки синтаксиса питона нашел готовую в инете
но потом стал использовать QScintilla
вот здесь посмотри http://www.python.su/forum/viewtopic.php?id=5291
lexer для XML там должен быть
много интересного можно найти в исходниках Eric4
voltron
В стандартную поставку PyQt как я понимаю оно не входит. Сейчас попробовал у себя выполнить
from PyQt4 import QtCore, QtGui, Qsci
и получил “ImportError: cannot import name Qsci”. Хотелось бы обойтись стандартными средствами, без дополнительных модулей
villager
У меня работает без доп установок
не вникал
возможно дело в том, что я использую IDE Eric4 (рекомендую) - сделан на PyQt и QScintilla
но потом на ура собирается в exe и работает без установки python и PyQt
зы: можно наверное и отдельно установить, оно того стоит
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