PluginProjectKivy.py

changeset 1
371cfb479eb6
parent 0
35ccc96239a0
child 3
b7e3e3b131ea
diff -r 35ccc96239a0 -r 371cfb479eb6 PluginProjectKivy.py
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/PluginProjectKivy.py	Wed Jun 12 18:50:51 2013 +0200
@@ -0,0 +1,157 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2013 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing the Kivy project plug-in.
+"""
+
+import fnmatch
+
+from PyQt4.QtCore import QObject
+
+from E5Gui.E5Application import e5App
+
+import Preferences
+
+from pygments.lexers._mapping import LEXERS
+
+# Start-of-Header
+name = "Kivy Project Plugin"
+author = "Detlev Offenbach <detlev@die-offenbachs.de>"
+autoactivate = True
+deactivateable = True
+version = "1.0.0"
+className = "ProjectKivyPlugin"
+packageName = "ProjectKivy"
+shortDescription = "Project support for Kivy projects."
+longDescription = """This plugin implements project support for Kivy projects."""
+needsRestart = False
+pyqtApi = 2
+# End-of-Header
+
+
+class ProjectKivyPlugin(QObject):
+    """
+    Class implementing the Kivy project plugin.
+    """
+    lexerAssociations = {
+        "*.kv": "Pygments|Kivy",
+        "*.kivy": "Pygments|Kivy",
+    }
+    
+    KivyLexerKey = 'KivyLexer'
+    KivyLexerEntry = (
+        'ProjectKivy.KivyLexer',
+        'Kivy',
+        ('kivy', 'kv'),
+        ('*.kv', '*.kivy'),
+        ('application/x-kivy',)
+    )
+    
+    def __init__(self, ui):
+        """
+        Constructor
+        
+        @param ui reference to the user interface object (UI.UserInterface)
+        """
+        QObject.__init__(self, ui)
+        self.__ui = ui
+        self.__initialize()
+    
+    def __initialize(self):
+        """
+        Private slot to (re)initialize the plugin.
+        """
+        self.__e5project = e5App().getObject("Project")
+    
+    def activate(self):
+        """
+        Public method to activate this plugin.
+        
+        @return tuple of None and activation status (boolean)
+        """
+        self.__e5project.registerProjectType("Kivy", self.trUtf8("Kivy"),
+            self.fileTypesCallback,
+            lexerAssociationCallback=self.lexerAssociationCallback)
+        
+        from Project.ProjectBrowser import SourcesBrowserFlag, FormsBrowserFlag, \
+            TranslationsBrowserFlag, OthersBrowserFlag
+        Preferences.setProjectBrowserFlagsDefault("Kivy",
+            SourcesBrowserFlag | \
+            FormsBrowserFlag | \
+            TranslationsBrowserFlag | \
+            OthersBrowserFlag,
+        )
+        
+        LEXERS[self.KivyLexerKey] = self.KivyLexerEntry
+        import QScintilla.Lexers
+        QScintilla.Lexers.registerLexer(
+            "Kivy", 
+            self.trUtf8("Kivy"), 
+            "dummy.kv", 
+            self.getLexer, 
+            [self.trUtf8('Kivy Files (*.kv)')],
+            [self.trUtf8('Kivy Files (*.kv)')], 
+            ['*.kv', '*.kivy']
+        )
+        
+        return None, True
+    
+    def deactivate(self):
+        """
+        Public method to deactivate this plugin.
+        """
+        self.__e5project.unregisterProjectType("Kivy")
+        
+        import QScintilla.Lexers
+        QScintilla.Lexers.unregisterLexer("Kivy")
+        if self.KivyLexerKey in LEXERS:
+            del LEXERS[self.KivyLexerKey]
+        
+        self.__initialize()
+    
+    def fileTypesCallback(self):
+        """
+        Public method get the filetype associations of the Kivy project type.
+        
+        @return dictionary with file type associations
+        """
+        if self.__e5project.getProjectType() == "Kivy":
+            fileTypes = {
+                "*.kv": "SOURCES",
+                "*.kivy": "SOURCES",
+                "*.py": "SOURCES",
+            }
+        else:
+            fileTypes = {}
+        return fileTypes
+    
+    def lexerAssociationCallback(self, filename):
+        """
+        Public method to get the lexer association of the Kivy project type for
+        a file.
+        
+        @param filename name of the file (string)
+        @return name of the lexer (string) (Pygments lexers are prefixed with 'Pygments|')
+        """
+        for pattern, language in self.lexerAssociations.items():
+            if fnmatch.fnmatch(filename, pattern):
+                return language
+        
+        return ""
+    
+    def getLexer(self, parent=None):
+        """
+        Public method to instantiate a Pygments Kivy lexer object.
+        
+        @param parent reference to the parent object (QObject)
+        @return reference to the instanciated lexer object (QsciLexer)
+        """
+        from QScintilla.Lexers.LexerPygments import LexerPygments
+        lexer = LexerPygments(parent, name="Kivy")
+        if lexer.canStyle():
+            return lexer
+        else:
+            return None

eric ide

mercurial