Пытаюсь реализовать подсветку синстаксиса 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 )
Еще одна проблема - многострочные комментарии. Можно ли реализовать их подсветку, если да - то в каком направлении смотреть?