Preferences/PreferencesLexer.py

branch
sub_styles
changeset 6855
4d80c8cc99a1
parent 6854
f4dd76230eea
child 6858
9d962e654978
--- a/Preferences/PreferencesLexer.py	Mon Mar 11 19:50:50 2019 +0100
+++ b/Preferences/PreferencesLexer.py	Tue Mar 12 20:00:30 2019 +0100
@@ -9,8 +9,8 @@
 
 from __future__ import unicode_literals
 
-from PyQt5.QtCore import QCoreApplication
-from PyQt5.Qsci import QsciLexer, QsciScintillaBase
+from PyQt5.QtCore import QCoreApplication, QObject
+from PyQt5.Qsci import QsciScintillaBase
 
 import Preferences
 import Globals
@@ -64,10 +64,10 @@
             'Unsupported Lexer Language: {0}').format(language)
 
 
-class PreferencesLexer(QsciLexer):
+class PreferencesLexer(QObject):
     """
-    Subclass of QsciLexer to implement preferences specific lexer methods and
-    delegate some methods to the real lexer object.
+    Class implementing a Lexer facade for the highlighting styles
+    configuration.
     """
     def __init__(self, language, parent=None):
         """
@@ -97,14 +97,16 @@
         
         # read the last stored values from preferences file
         self.__lex.readSettings(Preferences.Prefs.settings, "Scintilla")
-        # TODO: add substyles
+        if self.__lex.hasSubStyles():
+            self.__lex.loadSubstyles()
     
     def writeSettings(self):
         """
         Public method to write the lexer settings.
         """
         self.__lex.writeSettings(Preferences.Prefs.settings, "Scintilla")
-        # TODO: add substyles
+        if self.__lex.hasSubStyles():
+            self.__lex.writeSubStyles()
     
     def getStyles(self):
         """
@@ -119,33 +121,51 @@
             desc = self.__lex.description(i)
             if desc:
                 styles.append((desc, i, -1))
-        # TODO: add substyles
+        if self.__lex.hasSubStyles():
+            for baseStyle in self.__lex.getBaseStyles():
+                for subStyle in range(self.__lex.substylesCount(baseStyle)):
+                    desc = self.__lex.substyleDescription(baseStyle, subStyle)
+                    styles.append((desc, baseStyle, subStyle))
         
         return styles
     
-    def defaultColor(self, style):
+    def defaultColor(self, style, substyle=-1):
         """
         Public method to get the default color of a style.
         
         @param style style number
         @type int
+        @param substyle sub-style number
+        @type int
         @return default color
         @rtype QColor
         """
-        return self.__lex.defaultColor(style)
+        if substyle >= 0:
+            color = self.__lex.substyleDefaultColor(style, substyle)
+        else:
+            color = self.__lex.defaultColor(style)
+        
+        return color
     
-    def color(self, style):
+    def color(self, style, substyle=-1):
         """
         Public method to get the color of a style.
         
         @param style style number
         @type int
+        @param substyle sub-style number
+        @type int
         @return color
         @rtype QColor
         """
-        return self.__lex.color(style)
+        if substyle >= 0:
+            color = self.__lex.substyleColor(style, substyle)
+        else:
+            color = self.__lex.color(style)
+        
+        return color
     
-    def setColor(self, c, style):
+    def setColor(self, c, style, substyle=-1):
         """
         Public method to set the color for a style.
         
@@ -153,32 +173,51 @@
         @type QColor
         @param style style number
         @type int
+        @param substyle sub-style number
+        @type int
         """
-        self.__lex.setColor(c, style)
+        if substyle >= 0:
+            self.__lex.setSubstyleColor(c, style, substyle)
+        else:
+            self.__lex.setColor(c, style)
     
-    def defaultPaper(self, style):
+    def defaultPaper(self, style, substyle=-1):
         """
         Public method to get the default background for a style.
         
         @param style style number
         @type int
+        @param substyle sub-style number
+        @type int
         @return default background color
         @rtype QColor
         """
-        return self.__lex.defaultPaper(style)
+        if substyle >= 0:
+            color = self.__lex.substyleDefaultPaper(style, substyle)
+        else:
+            color = self.__lex.defaultPaper(style)
+        
+        return color
     
-    def paper(self, style):
+    def paper(self, style, substyle=-1):
         """
         Public method to get the background for a style.
         
         @param style the style number
         @type int
+        @param substyle sub-style number
+        @type int
         @return background color
         @rtype QColor
         """
-        return self.__lex.paper(style)
+        if substyle >= 0:
+            color = self.__lex.substylePaper(style, substyle)
+        else:
+            color = self.__lex.paper(style)
+        
+        return color
     
-    def setPaper(self, c, style):
+    def setPaper(self, c, style, substyle=-1):
         """
         Public method to set the background for a style.
         
@@ -186,32 +225,51 @@
         @type QColor
         @param style style number
         @type int
+        @param substyle sub-style number
+        @type int
         """
-        self.__lex.setPaper(c, style)
+        if substyle >= 0:
+            self.__lex.setSubstylePaper(c, style, substyle)
+        else:
+            self.__lex.setPaper(c, style)
     
-    def defaulEolFill(self, style):
+    def defaulEolFill(self, style, substyle=-1):
         """
         Public method to get the default eolFill flag for a style.
         
         @param style style number
         @type int
+        @param substyle sub-style number
+        @type int
         @return default eolFill flag
         @rtype bool
         """
-        return self.__lex.defaultEolFill(style)
+        if substyle >= 0:
+            eolFill = self.__lex.substyleDefaultEolFill(style, substyle)
+        else:
+            eolFill = self.__lex.defaultEolFill(style)
+        
+        return eolFill
     
-    def eolFill(self, style):
+    def eolFill(self, style, substyle=-1):
         """
         Public method to get the eolFill flag for a style.
         
         @param style style number
         @type int
+        @param substyle sub-style number
+        @type int
         @return eolFill flag
         @rtype bool
         """
-        return self.__lex.eolFill(style)
+        if substyle >= 0:
+            eolFill = self.__lex.substyleEolFill(style, substyle)
+        else:
+            eolFill = self.__lex.eolFill(style)
+        
+        return eolFill
     
-    def setEolFill(self, eolfill, style):
+    def setEolFill(self, eolfill, style, substyle=-1):
         """
         Public method to set the eolFill flag for a style.
         
@@ -219,32 +277,51 @@
         @type bool
         @param style style number
         @type int
+        @param substyle sub-style number
+        @type int
         """
-        self.__lex.setEolFill(eolfill, style)
+        if substyle >= 0:
+            self.__lex.setSubstyleEolFill(eolfill, style, substyle)
+        else:
+            self.__lex.setEolFill(eolfill, style)
     
-    def defaultFont(self, style):
+    def defaultFont(self, style, substyle=-1):
         """
         Public method to get the default font for a style.
         
         @param style style number
         @type int
+        @param substyle sub-style number
+        @type int
         @return default font
         @rtype QFont
         """
-        return self.__lex.defaultFont(style)
+        if substyle >= 0:
+            font = self.__lex.substyleDefaultFont(style, substyle)
+        else:
+            font = self.__lex.defaultFont(style)
+        
+        return font
     
-    def font(self, style):
+    def font(self, style, substyle=-1):
         """
         Public method to get the font for a style.
         
         @param style style number
         @type int
+        @param substyle sub-style number
+        @type int
         @return font
         @rtype QFont
         """
-        return self.__lex.font(style)
+        if substyle >= 0:
+            font = self.__lex.substyleFont(style, substyle)
+        else:
+            font = self.__lex.font(style)
+        
+        return font
     
-    def setFont(self, f, style):
+    def setFont(self, f, style, substyle=-1):
         """
         Public method to set the font for a style.
         
@@ -252,8 +329,26 @@
         @type QFont
         @param style style number
         @type int
+        @param substyle sub-style number
+        @type int
         """
-        self.__lex.setFont(f, style)
+        if substyle >= 0:
+            self.__lex.setSubstyleFont(f, style, substyle)
+        else:
+            self.__lex.setFont(f, style)
+    
+    def description(self, style, substyle=-1):
+        """
+        Public method to get a descriptive string for a style.
+        
+        @param style style number
+        @type int
+        @param substyle sub-style number
+        @type int
+        @return description of the style
+        @rtype str
+        """
+        return self.__lex.description(style)
     
     def language(self):
         """
@@ -263,14 +358,3 @@
         @rtype str
         """
         return self.__lex.language()
-        
-    def description(self, style):
-        """
-        Public method to get a descriptive string for a style.
-        
-        @param style style number
-        @type int
-        @return description of the style
-        @rtype str
-        """
-        return self.__lex.description(style)

eric ide

mercurial