From c182d9674c5d1ac2c40e621653b3954beb927e39 Mon Sep 17 00:00:00 2001 From: Igor Chubin Date: Mon, 14 May 2018 23:03:40 +0000 Subject: [PATCH] added :learn for more than 10 new languages; all popular languages from learnxiny are covered --- lib/adapter_learnxiny.py | 216 +++++++++++++++++++++++++++++++++------ lib/languages_data.py | 156 +++++++++++++++------------- 2 files changed, 269 insertions(+), 103 deletions(-) diff --git a/lib/adapter_learnxiny.py b/lib/adapter_learnxiny.py index 9d1780c..0c511e6 100644 --- a/lib/adapter_learnxiny.py +++ b/lib/adapter_learnxiny.py @@ -153,6 +153,30 @@ class LearnXYAdapter(object): # ideally should be replaced with YAML # +class LearnAwkAdapter(LearnXYAdapter): + "Learn AWK in Y Minutes" + prefix = "awk" + _filename = "awk.html.markdown" + _splitted = False + +class LearnBashAdapter(LearnXYAdapter): + "Learn Bash in Y Minutes" + prefix = "bash" + _filename = "bash.html.markdown" + _splitted = False + +class LearnBfAdapter(LearnXYAdapter): + "Learn Brainfuck in Y Minutes" + prefix = "bf" + _filename = "bf.html.markdown" + _splitted = False + +class LearnChapelAdapter(LearnXYAdapter): + "Learn Chapel in Y Minutes" + prefix = "chapel" + _filename = "chapel.html.markdown" + _splitted = False + class LearnClojureAdapter(LearnXYAdapter): """ Learn Clojure in Y Minutes @@ -180,6 +204,12 @@ class LearnClojureAdapter(LearnXYAdapter): answer = answer[:1] return answer +class LearnCoffeeScriptAdapter(LearnXYAdapter): + "Learn coffeescript in Y Minutes" + prefix = "coffee" + _filename = "coffeescript.html.markdown" + _splitted = False + class LearnCppAdapter(LearnXYAdapter): """ Learn C++ in Y Minutes @@ -216,6 +246,48 @@ class LearnCppAdapter(LearnXYAdapter): answer = answer[:1] return answer +class LearnCsharpAdapter(LearnXYAdapter): + "Learn C# in Y Minutes" + prefix = "csharp" + _filename = "csharp.html.markdown" + _splitted = False + +class LearnDAdapter(LearnXYAdapter): + "Learn D in Y Minutes" + prefix = "d" + _filename = "d.html.markdown" + _splitted = False + +class LearnDartAdapter(LearnXYAdapter): + "Learn Dart in Y Minutes" + prefix = "dart" + _filename = "dart.html.markdown" + _splitted = False + +class LearnFactorAdapter(LearnXYAdapter): + "Learn Factor in Y Minutes" + prefix = "factor" + _filename = "factor.html.markdown" + _splitted = False + +class LearnForthAdapter(LearnXYAdapter): + "Learn Forth in Y Minutes" + prefix = "forth" + _filename = "forth.html.markdown" + _splitted = False + +class LearnFsharpAdapter(LearnXYAdapter): + "Learn F# in Y Minutes" + prefix = "fsharp" + _filename = "fsharp.html.markdown" + _splitted = False + +class LearnElispAdapter(LearnXYAdapter): + "Learn Elisp in Y Minutes" + prefix = "elisp" + _filename = "elisp.html.markdown" + _splitted = False + class LearnElixirAdapter(LearnXYAdapter): """ Learn Elixir in Y Minutes @@ -311,43 +383,29 @@ class LearnErlangAdapter(LearnXYAdapter): answer = answer[:1] return answer +class LearnFortranAdapter(LearnXYAdapter): + "Learn Fortran in Y Minutes" + prefix = "fortran" + _filename = "fortran95.html.markdown" + _splitted = False + class LearnGoAdapter(LearnXYAdapter): "Learn Go in Y Minutes" prefix = "go" _filename = "go.html.markdown" _splitted = False -class LearnLuaAdapter(LearnXYAdapter): - """ - Learn Lua in Y Minutes - """ - prefix = "lua" - _filename = "lua.html.markdown" - _replace_with = { - '1_Metatables_and_metamethods': 'Metatables', - '2_Class-like_tables_and_inheritance': 'Class-like_tables', - 'Variables_and_flow_control': 'Flow_control', - } +class LearnGroovyAdapter(LearnXYAdapter): + "Learn Groovy in Y Minutes" + prefix = "groovy" + _filename = "groovy.html.markdown" + _splitted = False - def _is_block_separator(self, before, now, after): - if (re.match('-----+', before) - and re.match('-------+', after) - and re.match(r'--\s+[0-9]+\.', now)): - block_name = re.sub(r'--+\s+[0-9]+\.\s*', '', now) - block_name = '_'.join(block_name.strip('.').strip().split()) - if block_name in self._replace_with: - block_name = self._replace_with[block_name] - return block_name - return None - - @staticmethod - def _cut_block(block, start_block=False): - answer = block[2:-1] - if answer[0].split() == '': - answer = answer[1:] - if answer[-1].split() == '': - answer = answer[:1] - return answer +class LearnJavaAdapter(LearnXYAdapter): + "Learn Java in Y Minutes" + prefix = "java" + _filename = "java.html.markdown" + _splitted = False class LearnJavaScriptAdapter(LearnXYAdapter): """ @@ -436,6 +494,50 @@ class LearnHaskellAdapter(LearnXYAdapter): answer = answer[:1] return answer +class LearnLispAdapter(LearnXYAdapter): + "Learn Lisp in Y Minutes" + prefix = "lisp" + _filename = "common-lisp.html.markdown" + _splitted = False + +class LearnLuaAdapter(LearnXYAdapter): + """ + Learn Lua in Y Minutes + """ + prefix = "lua" + _filename = "lua.html.markdown" + _replace_with = { + '1_Metatables_and_metamethods': 'Metatables', + '2_Class-like_tables_and_inheritance': 'Class-like_tables', + 'Variables_and_flow_control': 'Flow_control', + } + + def _is_block_separator(self, before, now, after): + if (re.match('-----+', before) + and re.match('-------+', after) + and re.match(r'--\s+[0-9]+\.', now)): + block_name = re.sub(r'--+\s+[0-9]+\.\s*', '', now) + block_name = '_'.join(block_name.strip('.').strip().split()) + if block_name in self._replace_with: + block_name = self._replace_with[block_name] + return block_name + return None + + @staticmethod + def _cut_block(block, start_block=False): + answer = block[2:-1] + if answer[0].split() == '': + answer = answer[1:] + if answer[-1].split() == '': + answer = answer[:1] + return answer + +class LearnMatlabAdapter(LearnXYAdapter): + "Learn Matlab in Y Minutes" + prefix = "matlab" + _filename = "matlab.html.markdown" + _splitted = False + class LearnKotlinAdapter(LearnXYAdapter): """ Learn Kotlin in Y Minutes @@ -461,6 +563,12 @@ class LearnKotlinAdapter(LearnXYAdapter): answer = answer[:1] return answer +class LearnObjectiveCAdapter(LearnXYAdapter): + "Learn Objective C in Y Minutes" + prefix = "objective-c" + _filename = "objective-c.html.markdown" + _splitted = False + class LearnOCamlAdapter(LearnXYAdapter): """ Learn OCaml in Y Minutes @@ -528,6 +636,12 @@ class LearnPerlAdapter(LearnXYAdapter): answer = answer[:1] return answer +class LearnPerl6Adapter(LearnXYAdapter): + "Learn Perl 6 in Y Minutes" + prefix = "perl6" + _filename = "perl6.html.markdown" + _splitted = False + class LearnPHPAdapter(LearnXYAdapter): """ Learn PHP in Y Minutes @@ -574,6 +688,24 @@ class LearnPythonAdapter(LearnXYAdapter): answer = answer[:1] return answer +class LearnPython3Adapter(LearnXYAdapter): + "Learn Python 3 in Y Minutes" + prefix = "python3" + _filename = "python3.html.markdown" + _splitted = False + +class LearnRAdapter(LearnXYAdapter): + "Learn R in Y Minutes" + prefix = "r" + _filename = "r.html.markdown" + _splitted = False + +class LearnRacketAdapter(LearnXYAdapter): + "Learn Racket in Y Minutes" + prefix = "racket" + _filename = "racket.html.markdown" + _splitted = False + class LearnRubyAdapter(LearnXYAdapter): """ Learn Ruby in Y Minutes @@ -604,6 +736,30 @@ class LearnRubyAdapter(LearnXYAdapter): answer = answer[:1] return answer +class LearnSwiftAdapter(LearnXYAdapter): + "Learn Swift in Y Minutes" + prefix = "swift" + _filename = "swift.html.markdown" + _splitted = False + +class LearnTclAdapter(LearnXYAdapter): + "Learn Tcl in Y Minutes" + prefix = "tcl" + _filename = "tcl.html.markdown" + _splitted = False + +class LearnTcshAdapter(LearnXYAdapter): + "Learn Tcsh in Y Minutes" + prefix = "tcsh" + _filename = "tcsh.html.markdown" + _splitted = False + +class LearnVisualBasicAdapter(LearnXYAdapter): + "Learn Visual Basic in Y Minutes" + prefix = "vb" + _filename = "visualbasic.html.markdown" + _splitted = False + ADAPTERS = {cls.prefix: cls() for cls in vars()['LearnXYAdapter'].__subclasses__()} def get_learnxiny(topic): diff --git a/lib/languages_data.py b/lib/languages_data.py index 37a0e92..4d62d9e 100644 --- a/lib/languages_data.py +++ b/lib/languages_data.py @@ -9,96 +9,106 @@ from the project tree. import pygments.lexers LEXER = { - "clojure": pygments.lexers.ClojureLexer, - "cpp" : pygments.lexers.CppLexer, - "erlang": pygments.lexers.ErlangLexer, - "elixir": pygments.lexers.ElixirLexer, - "elm" : pygments.lexers.ElmLexer, - "go" : pygments.lexers.GoLexer, - "haskell": pygments.lexers.HaskellLexer, - "julia" : pygments.lexers.JuliaLexer, - "js" : pygments.lexers.JavascriptLexer, - "kotlin": pygments.lexers.KotlinLexer, - "lua" : pygments.lexers.LuaLexer, + "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, + "matlab" : pygments.lexers.MatlabLexer, "mongo" : pygments.lexers.JavascriptLexer, - "ocaml" : pygments.lexers.OcamlLexer, - "perl" : pygments.lexers.PerlLexer, - "python": pygments.lexers.PythonLexer, - "php" : pygments.lexers.PhpLexer, - "psql" : pygments.lexers.PostgresLexer, - "ruby" : pygments.lexers.RubyLexer, - "rust" : pygments.lexers.RustLexer, - "scala" : pygments.lexers.ScalaLexer, - - "c": pygments.lexers.CLexer, - - "java": pygments.lexers.JavaLexer, - "groovy": pygments.lexers.GroovyLexer, - - "sql": pygments.lexers.SqlLexer, - - "r": pygments.lexers.SLexer, - - "assembly": pygments.lexers.NasmLexer, - - "delphi": pygments.lexers.DelphiLexer, - - "csharp": pygments.lexers.CSharpLexer, - "fsharp": pygments.lexers.FSharpLexer, - "vbnet" : pygments.lexers.VbNetLexer, - - "perl6" : pygments.lexers.Perl6Lexer, - "objective-c": pygments.lexers.ObjectiveCppLexer, - "swift" : pygments.lexers.SwiftLexer, - + "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, + "scala" : pygments.lexers.ScalaLexer, "scheme": pygments.lexers.SchemeLexer, - "racket": pygments.lexers.RacketLexer, - - "awk": pygments.lexers.AwkLexer, - "bf": pygments.lexers.BrainfuckLexer, - "coffee": pygments.lexers.CoffeeScriptLexer, - "lisp": pygments.lexers.CommonLispLexer, - "elisp": pygments.lexers.EmacsLispLexer, - "factor": pygments.lexers.FactorLexer, - "forth": pygments.lexers.ForthLexer, - "fortran": pygments.lexers.FortranLexer, - "matlab": pygments.lexers.MatlabLexer, - "python3": pygments.lexers.Python3Lexer, - "bash": pygments.lexers.BashLexer, - "basic": pygments.lexers.QBasicLexer, - "tcsh": pygments.lexers.TcshLexer, + "sql" : pygments.lexers.SqlLexer, + "swift" : pygments.lexers.SwiftLexer, + "tcl" : pygments.lexers.TclLexer, + "tcsh" : pygments.lexers.TcshLexer, + "vb" : pygments.lexers.VbNetLexer, + "vbnet" : pygments.lexers.VbNetLexer, # experimental "arduino": pygments.lexers.ArduinoLexer, "pike" : pygments.lexers.PikeLexer, "eiffel" : pygments.lexers.EiffelLexer, "clean" : pygments.lexers.CleanLexer, - "dlang" : pygments.lexers.DLexer, "dylan" : pygments.lexers.DylanLexer, - "chapel" : pygments.lexers.ChapelLexer, } # 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', - 'clisp': 'lisp', - 'golang': 'go', - 'c++': 'cpp', - 'cplusplus': 'cpp', - 'c#': 'csharp', - 'f#': 'fsharp', - 'objc': 'objective-c', - 'sh': 'bash', - 'asm': 'assembly', - 'assembler': 'assembly', + 'objc' : 'objective-c', + 'p6' : 'perl6', + 'sh' : 'bash', + 'visualbasic': 'vb', + 'vba' : 'vb', } VIM_NAME = { - "assembly": "asm", - "dlang": "d", - "vbnet": "vb", - "delphi": "pascal", - "bash": "sh", + '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', +} + +SO_NAME = { + 'coffee' : 'coffeescript', + 'js' : 'javascript', + 'python3' : 'python-3.x', + 'vb' : 'vba', }