1
0
mirror of https://github.com/chubin/cheat.sh.git synced 2026-06-20 13:16:44 +02:00
Files
cheat.sh/lib/languages_data.py
T
Dave Pearson 9864d88735 Get the Emacs to language mapping list up and going
I've put this together by going though LEXER and looking for the mode that
matches. Where there isn't one I've left a comment as a reminder for someone
to fill in that blank.

I've also included a reminder for hylang.org as it might be nice to have it
in here too.
2018-08-06 21:31:17 +01:00

256 lines
7.6 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 = {
"asm-mode" : "asm",
"awk-mode" : "awk",
"sh-mode" : "bash",
# basic
"brainfuck-mode" : "bf",
# chapel
"clojure-mode" : "clojure",
"coffee-mode" : "coffee",
"c++-mode" : "cpp",
"c-mode" : "c",
"csharp-mode" : "csharp",
"d-mode" : "d",
"dart-mode" : "dart",
"dylan-mode" : "dylan",
# delphi -- not in Melpa, but I think there's one out there.
"emacs-lisp-mode" : "elisp",
# elixir
"elm-mode" : "elm",
"erlang-mode" : "erlang",
# factor
# forth
"fortran-mode" : "fortran",
"fsharp-mode" : "fsharp",
"go-mode" : "go",
"groovy-mode" : "groovy",
"haskell-mode" : "haskell",
# "hy-mode"
"java-mode" : "java",
"js-jsx-mode" : "js",
"js-mode" : "js",
"js2-jsx-mode" : "js",
"js2-mode" : "js",
"julia-mode" : "julia",
"kotlin-mode" : "kotlin",
"lisp-interaction-mode": "lisp",
"lisp-mode" : "lisp",
# lua
# mathematica
"matlab-mode" : "matlab",
# mongo
"objc-mode" : "objective-c",
# ocaml
"perl-mode" : "perl",
# perl6
"php-mode" : "php",
# psql
"python-mode" : "python",
# python3
# r -- ess looks it, but I don't know the mode name off hand
"racket-mode" : "racket",
"ruby-mode" : "ruby",
"rust-mode" : "rust",
"solidity-mode" : "solidity",
"scala-mode" : "scala",
"scheme-mode" : "scheme",
"sql-mode" : "sql",
"swift-mode" : "swift",
"tcl-mode" : "tcl",
# tcsh
# vb
# vbnet
# vim
}
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()