E5XML/HighlightingStylesReader.py

branch
sub_styles
changeset 6863
e900929889dd
parent 6857
59f6251587fa
diff -r 6f4237ccf576 -r e900929889dd E5XML/HighlightingStylesReader.py
--- 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())

eric ide

mercurial