QScintilla/Lexers/__init__.py

changeset 0
de9c2efb9d02
child 12
1d8dd9706f46
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/QScintilla/Lexers/__init__.py	Mon Dec 28 16:03:33 2009 +0000
@@ -0,0 +1,580 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2007 - 2009 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Package implementing lexers for the various supported programming languages.
+"""
+
+from PyQt4.QtGui import QApplication
+from PyQt4.Qsci import QSCINTILLA_VERSION_STR
+
+from QScintilla.QsciScintillaCompat import QSCINTILLA_VERSION
+
+import Preferences
+
+# The lexer registry
+# Dictionary with the language name as key. Each entry is a list with
+#       0. display string (string)
+#       1. dummy filename to derive lexer name (string)
+#       2. reference to a function instantiating the specific lexer
+#          This function must take a reference to the parent as argument.
+#       3. list of open file filters (list of strings)
+#       4. list of save file filters (list of strings)
+#       5. default lexer associations (list of strings of filename wildcard patterns
+#          to be associated with the lexer)
+LexerRegistry = {}
+
+def registerLexer(name, displayString, filenameSample, getLexerFunc, 
+                  openFilters = [], saveFilters = [], 
+                  defaultAssocs = []):
+    """
+    Module function to register a custom QScintilla lexer.
+    
+    @param name lexer language name (string)
+    @param displayString display string (string)
+    @param filenameSample dummy filename to derive lexer name (string)
+    @param getLexerFunc reference to a function instantiating the specific lexer.
+        This function must take a reference to the parent as it's only argument.
+    @keyparam openFilters list of open file filters (list of strings)
+    @keyparam saveFilters list of save file filters (list of strings)
+    @keyparam defaultAssocs default lexer associations (list of strings of filename 
+        wildcard patterns to be associated with the lexer)
+    @exception KeyError raised when the given name is already in use
+    """
+    if name in LexerRegistry:
+        raise KeyError('Lexer "%s" already registered.' % name)
+    else:
+        LexerRegistry[name] = [displayString, filenameSample, getLexerFunc, 
+                               openFilters, saveFilters, defaultAssocs[:]]
+
+def unregisterLexer(name):
+    """
+    Module function to unregister a custom QScintilla lexer.
+    
+    @param name lexer language name (string)
+    """
+    if name in LexerRegistry:
+        del LexerRegistry[name]
+
+def getSupportedLanguages():
+    """
+    Module function to get a dictionary of supported lexer languages.
+    
+    @return dictionary of supported lexer languages. The keys are the
+        internal language names. The items are lists of two entries.
+        The first is the display string for the language, the second
+        is a dummy file name, which can be used to derive the lexer.
+        (string, string)
+    """
+    supportedLanguages = {
+        "Bash"       : [QApplication.translate('Lexers', "Bash"),         'dummy.sh'],
+        "Batch"      : [QApplication.translate('Lexers', "Batch"),        'dummy.bat'],
+        "C++"        : [QApplication.translate('Lexers', "C/C++"),        'dummy.cpp'],
+        "C#"         : [QApplication.translate('Lexers', "C#"),           'dummy.cs'],
+        "CMake"      : [QApplication.translate('Lexers', "CMake"),        'dummy.cmake'],
+        "CSS"        : [QApplication.translate('Lexers', "CSS"),          'dummy.css'],
+        "D"          : [QApplication.translate('Lexers', "D"),            'dummy.d'],
+        "Diff"       : [QApplication.translate('Lexers', "Diff"),         'dummy.diff'],
+        "Fortran"    : [QApplication.translate('Lexers', "Fortran"),      'dummy.f95'], 
+        "Fortran77"  : [QApplication.translate('Lexers', "Fortran77"),    'dummy.f'], 
+        "HTML"       : [QApplication.translate('Lexers', "HTML/PHP/XML"), 'dummy.html'],
+        "IDL"        : [QApplication.translate('Lexers', "IDL"),          'dummy.idl'],
+        "Java"       : [QApplication.translate('Lexers', "Java"),         'dummy.java'],
+        "JavaScript" : [QApplication.translate('Lexers', "JavaScript"),   'dummy.js'],
+        "Lua"        : [QApplication.translate('Lexers', "Lua"),          'dummy.lua'],
+        "Makefile"   : [QApplication.translate('Lexers', "Makefile"),     'dummy.mak'],
+        "Pascal"     : [QApplication.translate('Lexers', "Pascal"),       'dummy.pas'], 
+        "Perl"       : [QApplication.translate('Lexers', "Perl"),         'dummy.pl'],
+        "PostScript" : [QApplication.translate('Lexers', "PostScript"),   'dummy.ps'], 
+        "Povray"     : [QApplication.translate('Lexers', "Povray"),       'dummy.pov'],
+        "Properties" : [QApplication.translate('Lexers', "Properties"),   'dummy.ini'],
+        "Python"     : [QApplication.translate('Lexers', "Python"),       'dummy.py'], 
+        "Ruby"       : [QApplication.translate('Lexers', "Ruby"),         'dummy.rb'],
+        "SQL"        : [QApplication.translate('Lexers', "SQL"),          'dummy.sql'],
+        "TCL"        : [QApplication.translate('Lexers', "TCL"),          'dummy.tcl'], 
+        "TeX"        : [QApplication.translate('Lexers', "TeX"),          'dummy.tex'],
+        "VHDL"       : [QApplication.translate('Lexers', "VHDL"),         'dummy.vhd'], 
+        "XML"        : [QApplication.translate('Lexers', "XML"),          'dummy.xml'], 
+        "YAML"       : [QApplication.translate('Lexers', "YAML"),         'dummy.yml'], 
+    }
+    
+    for name in LexerRegistry:
+        supportedLanguages[name] = LexerRegistry[name][:2]
+    
+    supportedLanguages["Guessed"] = \
+        [QApplication.translate('Lexers', "Pygments"), 'dummy.pygments']
+    
+    return supportedLanguages
+
+def getLexer(language, parent = None, pyname = ""):
+    """
+    Module function to instantiate a lexer object for a given language.
+    
+    @param language language of the lexer (string)
+    @param parent reference to the parent object (QObject)
+    @keyparam pyname name of the pygments lexer to use (string)
+    @return reference to the instanciated lexer object (QsciLexer)
+    """
+    if not pyname:
+        try:
+            if language in ["Python", "Python3"]:
+                from LexerPython import LexerPython
+                return LexerPython(parent)
+            elif language == "C++":
+                from LexerCPP import LexerCPP
+                return LexerCPP(parent, 
+                    Preferences.getEditor("CppCaseInsensitiveKeywords"))
+            elif language == "C#":
+                from LexerCSharp import LexerCSharp
+                return LexerCSharp(parent)
+            elif language == "IDL":
+                from LexerIDL import LexerIDL
+                return LexerIDL(parent)
+            elif language == "Java":
+                from LexerJava import LexerJava
+                return LexerJava(parent)
+            elif language == "JavaScript":
+                from LexerJavaScript import LexerJavaScript
+                return LexerJavaScript(parent)
+            elif language == "SQL":
+                from LexerSQL import LexerSQL
+                return LexerSQL(parent)
+            elif language == "HTML":
+                from LexerHTML import LexerHTML
+                return LexerHTML(parent)
+            elif language == "Perl":
+                from LexerPerl import LexerPerl
+                return LexerPerl(parent)
+            elif language == "Bash":
+                from LexerBash import LexerBash
+                return LexerBash(parent)
+            elif language == "Ruby":
+                from LexerRuby import LexerRuby
+                return LexerRuby(parent)
+            elif language == "Lua":
+                from LexerLua import LexerLua
+                return LexerLua(parent)
+            elif language == "CSS":
+                from LexerCSS import LexerCSS
+                return LexerCSS(parent)
+            elif language == "TeX":
+                from LexerTeX import LexerTeX
+                return LexerTeX(parent)
+            elif language == "Diff":
+                from LexerDiff import LexerDiff
+                return LexerDiff(parent)
+            elif language == "Makefile":
+                from LexerMakefile import LexerMakefile
+                return LexerMakefile(parent)
+            elif language == "Properties":
+                from LexerProperties import LexerProperties
+                return LexerProperties(parent)
+            elif language == "Batch":
+                from LexerBatch import LexerBatch
+                return LexerBatch(parent)
+            elif language == "D":
+                from LexerD import LexerD
+                return LexerD(parent)
+            elif language == "Povray":
+                from LexerPOV import LexerPOV
+                return LexerPOV(parent)
+            elif language == "CMake":
+                from LexerCMake import LexerCMake
+                return LexerCMake(parent)
+            elif language == "VHDL":
+                from LexerVHDL import LexerVHDL
+                return LexerVHDL(parent)
+            elif language == "TCL":
+                from LexerTCL import LexerTCL
+                return LexerTCL(parent)
+            elif language == "Fortran":
+                from LexerFortran import LexerFortran
+                return LexerFortran(parent)
+            elif language == "Fortran77":
+                from LexerFortran77 import LexerFortran77
+                return LexerFortran77(parent)
+            elif language == "Pascal":
+                from LexerPascal import LexerPascal
+                return LexerPascal(parent)
+            elif language == "PostScript":
+                from LexerPostScript import LexerPostScript
+                return LexerPostScript(parent)
+            elif language == "XML":
+                from LexerXML import LexerXML
+                return LexerXML(parent)
+            elif language == "YAML":
+                from LexerYAML import LexerYAML
+                return LexerYAML(parent)
+            
+            elif language in LexerRegistry:
+                return LexerRegistry[language][2](parent)
+            
+            else:
+                return __getPygmentsLexer(parent)
+        except ImportError:
+            return __getPygmentsLexer(parent)
+    else:
+        return __getPygmentsLexer(parent, name = pyname)
+
+def __getPygmentsLexer(parent, name = ""):
+    """
+    Private module function to instantiate a pygments lexer.
+    
+    @param parent reference to the parent widget
+    @keyparam name name of the pygments lexer to use (string)
+    @return reference to the lexer (LexerPygments) or None
+    """
+    from LexerPygments import LexerPygments
+    lexer = LexerPygments(parent, name = name)
+    if lexer.canStyle():
+        return lexer
+    else:
+        return None
+    
+def getOpenFileFiltersList(includeAll = False, asString = False):
+    """
+    Module function to get the file filter list for an open file operation.
+    
+    @param includeAll flag indicating the inclusion of the 
+        All Files filter (boolean)
+    @param asString flag indicating the list should be returned 
+        as a string (boolean)
+    @return file filter list (list of strings or string)
+    """
+    openFileFiltersList = [
+        QApplication.translate('Lexers', 
+            'Python Files (*.py *.py3)'), 
+        QApplication.translate('Lexers', 
+            'Python GUI Files (*.pyw *.pyw3)'), 
+        QApplication.translate('Lexers', 
+            'Pyrex Files (*.pyx)'), 
+        QApplication.translate('Lexers', 
+            'Quixote Template Files (*.ptl)'), 
+        QApplication.translate('Lexers', 
+            'Ruby Files (*.rb)'), 
+        QApplication.translate('Lexers', 
+            'IDL Files (*.idl)'), 
+        QApplication.translate('Lexers', 
+            'C Files (*.h *.c)'), 
+        QApplication.translate('Lexers', 
+            'C++ Files (*.h *.hpp *.hh *.cxx *.cpp *.cc)'), 
+        QApplication.translate('Lexers', 
+            'C# Files (*.cs)'),
+        QApplication.translate('Lexers', 
+            'HTML Files (*.html *.htm *.asp *.shtml)'), 
+        QApplication.translate('Lexers', 
+            'CSS Files (*.css)'), 
+        QApplication.translate('Lexers', 
+            'QSS Files (*.qss)'), 
+        QApplication.translate('Lexers', 
+            'PHP Files (*.php *.php3 *.php4 *.php5 *.phtml)'), 
+        QApplication.translate('Lexers', 
+            'XML Files (*.xml *.xsl *.xslt *.dtd *.svg *.xul *.xsd)'), 
+        QApplication.translate('Lexers', 
+            'Qt Resource Files (*.qrc)'), 
+        QApplication.translate('Lexers', 
+            'D Files (*.d *.di)'), 
+        QApplication.translate('Lexers', 
+            'Java Files (*.java)'), 
+        QApplication.translate('Lexers', 
+            'JavaScript Files (*.js)'), 
+        QApplication.translate('Lexers', 
+            'SQL Files (*.sql)'), 
+        QApplication.translate('Lexers', 
+            'Docbook Files (*.docbook)'), 
+        QApplication.translate('Lexers', 
+            'Perl Files (*.pl *.pm *.ph)'), 
+        QApplication.translate('Lexers', 
+            'Lua Files (*.lua)'), 
+        QApplication.translate('Lexers', 
+            'Tex Files (*.tex *.sty *.aux *.toc *.idx)'), 
+        QApplication.translate('Lexers', 
+            'Shell Files (*.sh)'), 
+        QApplication.translate('Lexers', 
+            'Batch Files (*.bat *.cmd)'), 
+        QApplication.translate('Lexers', 
+            'Diff Files (*.diff *.patch)'), 
+        QApplication.translate('Lexers', 
+            'Makefiles (*.mak)'), 
+        QApplication.translate('Lexers', 
+            'Properties Files (*.properties *.ini *.inf *.reg *.cfg *.cnf *.rc)'), 
+        QApplication.translate('Lexers', 
+            'Povray Files (*.pov)'), 
+        QApplication.translate('Lexers', 
+            'CMake Files (CMakeLists.txt *.cmake *.ctest)'), 
+        QApplication.translate('Lexers', 
+            'VHDL Files (*.vhd *.vhdl)'), 
+        QApplication.translate('Lexers', 
+            'TCL/Tk Files (*.tcl *.tk)'), 
+        QApplication.translate('Lexers', 
+            'Fortran Files (*.f90 *.f95 *.f2k)'), 
+        QApplication.translate('Lexers', 
+            'Fortran77 Files (*.f *.for)'), 
+        QApplication.translate('Lexers', 
+            'Pascal Files (*.dpr *.dpk *.pas *.dfm *.inc *.pp)'), 
+        QApplication.translate('Lexers', 
+            'PostScript Files (*.ps)'), 
+        QApplication.translate('Lexers', 
+            'YAML Files (*.yaml *.yml)'), 
+    ]
+    
+    for name in LexerRegistry:
+        openFileFiltersList.append(LexerRegistry[name][3])
+    
+    openFileFiltersList.sort()
+    if includeAll:
+        openFileFiltersList.append(QApplication.translate('Lexers', 'All Files (*)'))
+    
+    if asString:
+        return ';;'.join(openFileFiltersList)
+    else:
+        return openFileFiltersList
+
+def getSaveFileFiltersList(includeAll = False, asString = False):
+    """
+    Module function to get the file filter list for a save file operation.
+    
+    @param includeAll flag indicating the inclusion of the 
+        All Files filter (boolean)
+    @param asString flag indicating the list should be returned 
+        as a string (boolean)
+    @return file filter list (list of strings or string)
+    """
+    saveFileFiltersList = [
+        QApplication.translate('Lexers', 
+            "Python Files (*.py)"), 
+        QApplication.translate('Lexers', 
+            "Python3 Files (*.py3)"), 
+        QApplication.translate('Lexers', 
+            "Python GUI Files (*.pyw)"), 
+        QApplication.translate('Lexers', 
+            "Python3 GUI Files (*.pyw3)"), 
+        QApplication.translate('Lexers', 
+            "Pyrex Files (*.pyx)"),
+        QApplication.translate('Lexers', 
+            "Quixote Template Files (*.ptl)"),
+        QApplication.translate('Lexers', 
+            "Ruby Files (*.rb)"),
+        QApplication.translate('Lexers', 
+            "IDL Files (*.idl)"),
+        QApplication.translate('Lexers', 
+            "C Files (*.c)"),
+        QApplication.translate('Lexers', 
+            "C++ Files (*.cpp)"),
+        QApplication.translate('Lexers', 
+            "C++/C Header Files (*.h)"),
+        QApplication.translate('Lexers', 
+            "C# Files (*.cs)"),
+        QApplication.translate('Lexers', 
+            "HTML Files (*.html)"),
+        QApplication.translate('Lexers', 
+            "PHP Files (*.php)"),
+        QApplication.translate('Lexers', 
+            "ASP Files (*.asp)"),
+        QApplication.translate('Lexers', 
+            "CSS Files (*.css)"),
+        QApplication.translate('Lexers', 
+            "QSS Files (*.qss)"),
+        QApplication.translate('Lexers', 
+            "XML Files (*.xml)"),
+        QApplication.translate('Lexers', 
+            "XSL Files (*.xsl)"),
+        QApplication.translate('Lexers', 
+            "DTD Files (*.dtd)"),
+        QApplication.translate('Lexers', 
+            "Qt Resource Files (*.qrc)"),
+        QApplication.translate('Lexers', 
+            "D Files (*.d)"),
+        QApplication.translate('Lexers', 
+            "D Interface Files (*.di)"),
+        QApplication.translate('Lexers', 
+            "Java Files (*.java)"),
+        QApplication.translate('Lexers', 
+            "JavaScript Files (*.js)"),
+        QApplication.translate('Lexers', 
+            "SQL Files (*.sql)"),
+        QApplication.translate('Lexers', 
+            "Docbook Files (*.docbook)"),
+        QApplication.translate('Lexers', 
+            "Perl Files (*.pl)"),
+        QApplication.translate('Lexers', 
+            "Perl Module Files (*.pm)"),
+        QApplication.translate('Lexers', 
+            "Lua Files (*.lua)"),
+        QApplication.translate('Lexers', 
+            "Shell Files (*.sh)"),
+        QApplication.translate('Lexers', 
+            "Batch Files (*.bat)"),
+        QApplication.translate('Lexers', 
+            "TeX Files (*.tex)"),
+        QApplication.translate('Lexers', 
+            "TeX Template Files (*.sty)"),
+        QApplication.translate('Lexers', 
+            "Diff Files (*.diff)"),
+        QApplication.translate('Lexers', 
+            "Make Files (*.mak)"),
+        QApplication.translate('Lexers', 
+            "Properties Files (*.ini)"),
+        QApplication.translate('Lexers', 
+            "Configuration Files (*.cfg)"),
+        QApplication.translate('Lexers', 
+            'Povray Files (*.pov)'),
+        QApplication.translate('Lexers', 
+            'CMake Files (CMakeLists.txt)'),
+        QApplication.translate('Lexers', 
+            'CMake Macro Files (*.cmake)'),
+        QApplication.translate('Lexers', 
+            'VHDL Files (*.vhd)'), 
+        QApplication.translate('Lexers', 
+            'TCL Files (*.tcl)'),
+        QApplication.translate('Lexers', 
+            'Tk Files (*.tk)'),
+        QApplication.translate('Lexers', 
+            'Fortran Files (*.f95)'),
+        QApplication.translate('Lexers', 
+            'Fortran77 Files (*.f)'),
+        QApplication.translate('Lexers', 
+            'Pascal Files (*.pas)'),
+        QApplication.translate('Lexers', 
+            'PostScript Files (*.ps)'),
+        QApplication.translate('Lexers', 
+            'YAML Files (*.yml)'), 
+    ]
+    
+    for name in LexerRegistry:
+        saveFileFiltersList.append(LexerRegistry[name][4])
+    
+    saveFileFiltersList.sort()
+    
+    if includeAll:
+        saveFileFiltersList.append(QApplication.translate('Lexers', 'All Files (*)'))
+    
+    if asString:
+        return ';;'.join(saveFileFiltersList)
+    else:
+        return saveFileFiltersList
+
+def getDefaultLexerAssociations():
+    assocs = {
+        '*.sh'              : "Bash",
+        '*.bash'            : "Bash",
+        "*.bat"             : "Batch",
+        "*.cmd"             : "Batch",
+        '*.cpp'             : "C++",
+        '*.cxx'             : "C++",
+        '*.cc'              : "C++",
+        '*.c'               : "C++",
+        '*.hpp'             : "C++",
+        '*.hh'              : "C++",
+        '*.h'               : "C++",
+        '*.cs'              : "C#",
+        'CMakeLists.txt'    : "CMake", 
+        '*.cmake'           : "CMake",
+        '*.cmake.in'        : "CMake",
+        '*.ctest'           : "CMake",
+        '*.ctest.in'        : "CMake",
+        '*.css'             : "CSS",
+        '*.qss'             : "CSS",
+        "*.d"               : "D",
+        "*.di"              : "D",
+        "*.diff"            : "Diff",
+        "*.patch"           : "Diff",
+        '*.html'            : "HTML",
+        '*.htm'             : "HTML",
+        '*.asp'             : "HTML",
+        '*.shtml'           : "HTML",
+        '*.php'             : "HTML",
+        '*.php3'            : "HTML",
+        '*.php4'            : "HTML",
+        '*.php5'            : "HTML",
+        '*.phtml'           : "HTML",
+        '*.xml'             : "HTML",
+        '*.xsl'             : "HTML",
+        '*.svg'             : "HTML",
+        '*.xsd'             : "HTML",
+        '*.xslt'            : "HTML",
+        '*.dtd'             : "HTML",
+        '*.rdf'             : "HTML",
+        '*.xul'             : "HTML", 
+        '*.docbook'         : "HTML",
+        '*.ui'              : "HTML",
+        '*.ts'              : "HTML",
+        '*.qrc'             : "HTML",
+        '*.e3d'             : "HTML",
+        '*.e3k'             : "HTML",
+        '*.e3p'             : "HTML",
+        '*.e3s'             : "HTML",
+        '*.e3t'             : "HTML",
+        '*.e4d'             : "HTML",
+        '*.e4k'             : "HTML",
+        '*.e4m'             : "HTML", 
+        '*.e4p'             : "HTML",
+        '*.e4q'             : "HTML",
+        '*.e4s'             : "HTML",
+        '*.e4t'             : "HTML",
+        '*.kid'             : "HTML",
+        '*.idl'             : "IDL",
+        '*.java'            : "Java",
+        '*.js'              : "JavaScript",
+        '*.lua'             : "Lua",
+        "*makefile"         : "Makefile",
+        "Makefile*"         : "Makefile",
+        "*.mak"             : "Makefile",
+        '*.pl'              : "Perl",
+        '*.pm'              : "Perl",
+        '*.ph'              : "Perl",
+        '*.pov'             : "Povray",
+        "*.properties"      : "Properties",
+        "*.ini"             : "Properties",
+        "*.inf"             : "Properties",
+        "*.reg"             : "Properties",
+        "*.cfg"             : "Properties",
+        "*.cnf"             : "Properties",
+        "*.rc"              : "Properties",
+        '*.py'              : "Python",
+        '*.pyw'             : "Python",
+        '*.pyx'             : "Python",
+        '*.ptl'             : "Python",
+        '*.rb'              : "Ruby",
+        '*.rbw'             : "Ruby",
+        '*.sql'             : "SQL",
+        "*.tex"             : "TeX",
+        "*.sty"             : "TeX",
+        "*.aux"             : "TeX",
+        "*.toc"             : "TeX",
+        "*.idx"             : "TeX",
+        '*.vhd'             : "VHDL", 
+        '*.vhdl'            : "VHDL", 
+        "*.tcl"             : "TCL", 
+        "*.tk"              : "TCL", 
+        "*.f"               : "Fortran77", 
+        "*.for"             : "Fortran77", 
+        "*.f90"             : "Fortran", 
+        "*.f95"             : "Fortran", 
+        "*.f2k"             : "Fortran", 
+        "*.dpr"             : "Pascal", 
+        "*.dpk"             : "Pascal", 
+        "*.pas"             : "Pascal", 
+        "*.dfm"             : "Pascal", 
+        "*.inc"             : "Pascal", 
+        "*.pp"              : "Pascal", 
+        "*.ps"              : "PostScript", 
+        "*.xml"             : "XML", 
+        "*.xsl"             : "XML", 
+        "*.svg"             : "XML", 
+        "*.xsd"             : "XML", 
+        "*.xslt"            : "XML", 
+        "*.dtd"             : "XML", 
+        "*.rdf"             : "XML", 
+        "*.xul"             : "XML", 
+        "*.yaml"            : "YAML", 
+        "*.yml"             : "YAML", 
+    }
+    
+    for name in LexerRegistry:
+        for pattern in LexerRegistry[name][5]:
+            assocs[pattern] = name
+    
+    return assocs

eric ide

mercurial