--- a/E5XML/HighlightingStylesReader.py Sat Mar 16 14:10:51 2019 +0100 +++ b/E5XML/HighlightingStylesReader.py Sat Mar 16 14:11:43 2019 +0100 @@ -16,12 +16,11 @@ from .XMLStreamReaderBase import XMLStreamReaderBase -# TODO: add support for sub-styling class HighlightingStylesReader(XMLStreamReaderBase): """ Class for reading a highlighting styles XML file. """ - supportedVersions = ["4.3"] + supportedVersions = ["4.3", "6.0"] def __init__(self, device, lexers): """ @@ -87,42 +86,65 @@ style = self.attribute("style") if style: style = int(style) + substyle = int(self.attribute("substyle", "-1")) + # -1 is default for base styles + + # add sub-style if not already there + if not lexer.hasStyle(style, substyle): + substyle = lexer.addSubstyle(style) color = self.attribute("color") if color: color = QColor(color) else: - color = lexer.defaultColor(style) - lexer.setColor(color, style) + color = lexer.defaultColor(style, substyle) + lexer.setColor(color, style, substyle) paper = self.attribute("paper") if paper: paper = QColor(paper) else: - paper = lexer.defaultPaper(style) - lexer.setPaper(paper, style) + paper = lexer.defaultPaper(style, substyle) + lexer.setPaper(paper, style, substyle) fontStr = self.attribute("font") if fontStr: font = QFont() font.fromString(fontStr) else: - font = lexer.defaultFont(style) - lexer.setFont(font, style) + font = lexer.defaultFont(style, substyle) + lexer.setFont(font, style, substyle) eolfill = self.attribute("eolfill") if eolfill: eolfill = self.toBool(eolfill) if eolfill is None: - eolfill = lexer.defaulEolFill(style) + eolfill = lexer.defaulEolFill(style, substyle) else: - eolfill = lexer.defaulEolFill(style) - lexer.setEolFill(eolfill, style) + eolfill = lexer.defaulEolFill(style, substyle) + lexer.setEolFill(eolfill, style, substyle) + + while not self.atEnd(): + self.readNext() + if self.isStartElement(): + if self.name() == "Description" and substyle >= 0: + # description can only be set for sub-styles + description = self.readElementText().strip() + if not description: + description = lexer.defaultDescription( + style, substyle) + lexer.setDescription(description, style, substyle) + elif self.name() == "Words" and substyle >= 0: + # words can only be set for sub-styles + words = self.readElementText().strip() + if not words: + words = lexer.defaultWords(style, substyle) + lexer.setWords(words, style, substyle) + + if self.isEndElement() and self.name() == "Style": + return while not self.atEnd(): self.readNext() if self.isEndElement() and self.name() == "Style": break - - if self.isStartElement(): - self.raiseUnexpectedStartTag(self.name())