1
1
mirror of https://github.com/chubin/cheat.sh.git synced 2024-12-12 16:04:57 +03:00
cheat.sh/lib/languages_data.py
2018-08-05 17:14:34 +00:00

194 lines
5.7 KiB
Python

"""
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()