""" Programming languages information. Will be (probably) moved to a separate file/directory from the project tree. """ import pygments.lexers LEXER = { "assembly" : pygments.lexers.NasmLexer, "awk" : pygments.lexers.AwkLexer, "bash" : pygments.lexers.BashLexer, "basic" : pygments.lexers.QBasicLexer, "bf" : pygments.lexers.BrainfuckLexer, "chapel" : pygments.lexers.ChapelLexer, "clojure" : pygments.lexers.ClojureLexer, "coffee" : pygments.lexers.CoffeeScriptLexer, "cpp" : pygments.lexers.CppLexer, "c" : pygments.lexers.CLexer, "csharp" : pygments.lexers.CSharpLexer, "d" : pygments.lexers.DLexer, "dart" : pygments.lexers.DartLexer, "delphi" : pygments.lexers.DelphiLexer, "elisp" : pygments.lexers.EmacsLispLexer, "elixir" : pygments.lexers.ElixirLexer, "elm" : pygments.lexers.ElmLexer, "erlang" : pygments.lexers.ErlangLexer, "factor" : pygments.lexers.FactorLexer, "forth" : pygments.lexers.ForthLexer, "fortran" : pygments.lexers.FortranLexer, "fsharp" : pygments.lexers.FSharpLexer, "go" : pygments.lexers.GoLexer, "groovy" : pygments.lexers.GroovyLexer, "haskell" : pygments.lexers.HaskellLexer, "java" : pygments.lexers.JavaLexer, "js" : pygments.lexers.JavascriptLexer, "julia" : pygments.lexers.JuliaLexer, "kotlin" : pygments.lexers.KotlinLexer, "lisp" : pygments.lexers.CommonLispLexer, "lua" : pygments.lexers.LuaLexer, "mathematica": pygments.lexers.MathematicaLexer, "matlab" : pygments.lexers.MatlabLexer, "mongo" : pygments.lexers.JavascriptLexer, "objective-c": pygments.lexers.ObjectiveCppLexer, "ocaml" : pygments.lexers.OcamlLexer, "perl" : pygments.lexers.PerlLexer, "perl6" : pygments.lexers.Perl6Lexer, "php" : pygments.lexers.PhpLexer, "psql" : pygments.lexers.PostgresLexer, "python" : pygments.lexers.PythonLexer, "python3" : pygments.lexers.Python3Lexer, "r" : pygments.lexers.SLexer, "racket" : pygments.lexers.RacketLexer, "ruby" : pygments.lexers.RubyLexer, "rust" : pygments.lexers.RustLexer, "solidity" : pygments.lexers.JavascriptLexer, "scala" : pygments.lexers.ScalaLexer, "scheme": pygments.lexers.SchemeLexer, "sql" : pygments.lexers.SqlLexer, "swift" : pygments.lexers.SwiftLexer, "tcl" : pygments.lexers.TclLexer, "tcsh" : pygments.lexers.TcshLexer, "vb" : pygments.lexers.VbNetLexer, "vbnet" : pygments.lexers.VbNetLexer, "vim" : pygments.lexers.VimLexer, # experimental "arduino": pygments.lexers.ArduinoLexer, "pike" : pygments.lexers.PikeLexer, "eiffel" : pygments.lexers.EiffelLexer, "clean" : pygments.lexers.CleanLexer, "dylan" : pygments.lexers.DylanLexer, } # canonical names are on the right side LANGUAGE_ALIAS = { 'asm' : 'assembly', 'assembler' : 'assembly', 'c++' : 'cpp', 'c#' : 'csharp', 'clisp' : 'lisp', 'coffeescript': 'coffee', 'cplusplus' : 'cpp', 'dlang' : 'd', 'f#' : 'fsharp', 'golang' : 'go', 'javascript': 'js', 'objc' : 'objective-c', 'p6' : 'perl6', 'sh' : 'bash', 'visualbasic': 'vb', 'vba' : 'vb', 'wolfram' : 'mathematica', 'mma' : 'mathematica', 'wolfram-mathematica': 'mathematica', } VIM_NAME = { 'assembly' : 'asm', 'bash' : 'sh', 'coffeescript': 'coffee', 'csharp' : 'cs', 'delphi' : 'pascal', 'dlang' : 'd', 'elisp' : 'newlisp', 'forth' : 'fs', 'perl6' : 'perl', 'python3' : 'python', 'python-3.x': 'python', 'tcsh' : 'sh', 'solidity' : 'js', 'mathematica': 'mma', 'wolfram-mathematica': 'mma', } SO_NAME = { 'coffee' : 'coffeescript', 'js' : 'javascript', 'python3' : 'python-3.x', 'vb' : 'vba', 'mathematica': 'wolfram-mathematica', } # # conversion of internal programmin language names # into canonical cheat.sh names # ATOM_FT_NAME = { } EMACS_FT_NAME = { } SUBLIME_FT_NAME = { } VIM_FT_NAME = { 'asm': 'assembler', 'javascript': 'js', } VSCODE_FT_NAME = { } def rewrite_editor_section_name(section_name): """ section name cen be specified in form "editor:editor-filetype" and it will be rewritten into form "filetype" basing on the editor filetypes names data. If editor name is unknown, it is just cut off: notepad:js => js Known editors: * atom * vim * emacs * sublime * vscode >>> rewrite_editor_section_name('js') 'js' >>> rewrite_editor_section_name('vscode:js') 'js' """ if ':' not in section_name: return section_name editor_name, section_name = section_name.split(':', 1) editor_name_mapping = { 'atom': ATOM_FT_NAME, 'emacs': EMACS_FT_NAME, 'sublime': SUBLIME_FT_NAME, 'vim': VIM_FT_NAME, 'vscode': VSCODE_FT_NAME, } if editor_name not in editor_name_mapping: return section_name return editor_name_mapping[editor_name].get(section_name, section_name) def get_lexer_name(section_name): """ Rewrite `section_name` for the further lexer search (for syntax highlighting) """ if ':' in section_name: section_name = rewrite_editor_section_name(section_name) return LANGUAGE_ALIAS.get(section_name, section_name) if __name__ == "__main__": import doctest doctest.testmod()