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