rouge 3.18.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/Gemfile +40 -0
- data/LICENSE +186 -0
- data/bin/rougify +18 -0
- data/lib/rouge.rb +107 -0
- data/lib/rouge/cli.rb +498 -0
- data/lib/rouge/demos/abap +6 -0
- data/lib/rouge/demos/actionscript +4 -0
- data/lib/rouge/demos/ada +26 -0
- data/lib/rouge/demos/apache +21 -0
- data/lib/rouge/demos/apex +9 -0
- data/lib/rouge/demos/apiblueprint +33 -0
- data/lib/rouge/demos/applescript +2 -0
- data/lib/rouge/demos/armasm +12 -0
- data/lib/rouge/demos/awk +4 -0
- data/lib/rouge/demos/batchfile +3 -0
- data/lib/rouge/demos/bbcbasic +6 -0
- data/lib/rouge/demos/biml +38 -0
- data/lib/rouge/demos/bpf +7 -0
- data/lib/rouge/demos/brainfuck +5 -0
- data/lib/rouge/demos/bsl +7 -0
- data/lib/rouge/demos/c +8 -0
- data/lib/rouge/demos/ceylon +7 -0
- data/lib/rouge/demos/cfscript +18 -0
- data/lib/rouge/demos/clean +6 -0
- data/lib/rouge/demos/clojure +5 -0
- data/lib/rouge/demos/cmake +7 -0
- data/lib/rouge/demos/cmhg +8 -0
- data/lib/rouge/demos/coffeescript +5 -0
- data/lib/rouge/demos/common_lisp +1 -0
- data/lib/rouge/demos/conf +4 -0
- data/lib/rouge/demos/console +6 -0
- data/lib/rouge/demos/coq +13 -0
- data/lib/rouge/demos/cpp +8 -0
- data/lib/rouge/demos/crystal +45 -0
- data/lib/rouge/demos/csharp +5 -0
- data/lib/rouge/demos/css +4 -0
- data/lib/rouge/demos/csvs +8 -0
- data/lib/rouge/demos/cuda +11 -0
- data/lib/rouge/demos/cypher +5 -0
- data/lib/rouge/demos/cython +6 -0
- data/lib/rouge/demos/d +16 -0
- data/lib/rouge/demos/dart +6 -0
- data/lib/rouge/demos/datastudio +21 -0
- data/lib/rouge/demos/diff +7 -0
- data/lib/rouge/demos/digdag +19 -0
- data/lib/rouge/demos/docker +9 -0
- data/lib/rouge/demos/dot +5 -0
- data/lib/rouge/demos/ecl +18 -0
- data/lib/rouge/demos/eex +1 -0
- data/lib/rouge/demos/eiffel +30 -0
- data/lib/rouge/demos/elixir +1 -0
- data/lib/rouge/demos/elm +4 -0
- data/lib/rouge/demos/epp +4 -0
- data/lib/rouge/demos/erb +1 -0
- data/lib/rouge/demos/erlang +7 -0
- data/lib/rouge/demos/escape +3 -0
- data/lib/rouge/demos/factor +5 -0
- data/lib/rouge/demos/fortran +22 -0
- data/lib/rouge/demos/freefem +16 -0
- data/lib/rouge/demos/fsharp +12 -0
- data/lib/rouge/demos/gdscript +18 -0
- data/lib/rouge/demos/ghc-cmm +23 -0
- data/lib/rouge/demos/ghc-core +26 -0
- data/lib/rouge/demos/gherkin +17 -0
- data/lib/rouge/demos/glsl +14 -0
- data/lib/rouge/demos/go +7 -0
- data/lib/rouge/demos/gradle +10 -0
- data/lib/rouge/demos/graphql +17 -0
- data/lib/rouge/demos/groovy +9 -0
- data/lib/rouge/demos/hack +5 -0
- data/lib/rouge/demos/haml +5 -0
- data/lib/rouge/demos/handlebars +7 -0
- data/lib/rouge/demos/haskell +6 -0
- data/lib/rouge/demos/haxe +5 -0
- data/lib/rouge/demos/hcl +7 -0
- data/lib/rouge/demos/hocon +8 -0
- data/lib/rouge/demos/hql +5 -0
- data/lib/rouge/demos/html +8 -0
- data/lib/rouge/demos/http +14 -0
- data/lib/rouge/demos/hylang +10 -0
- data/lib/rouge/demos/idlang +8 -0
- data/lib/rouge/demos/igorpro +9 -0
- data/lib/rouge/demos/ini +4 -0
- data/lib/rouge/demos/io +11 -0
- data/lib/rouge/demos/irb +4 -0
- data/lib/rouge/demos/irb_output +2 -0
- data/lib/rouge/demos/isbl +4 -0
- data/lib/rouge/demos/java +5 -0
- data/lib/rouge/demos/javascript +1 -0
- data/lib/rouge/demos/jinja +9 -0
- data/lib/rouge/demos/jsl +3 -0
- data/lib/rouge/demos/json +1 -0
- data/lib/rouge/demos/json-doc +1 -0
- data/lib/rouge/demos/jsonnet +28 -0
- data/lib/rouge/demos/jsp +29 -0
- data/lib/rouge/demos/jsx +17 -0
- data/lib/rouge/demos/julia +11 -0
- data/lib/rouge/demos/kotlin +3 -0
- data/lib/rouge/demos/lasso +12 -0
- data/lib/rouge/demos/liquid +10 -0
- data/lib/rouge/demos/literate_coffeescript +3 -0
- data/lib/rouge/demos/literate_haskell +7 -0
- data/lib/rouge/demos/llvm +20 -0
- data/lib/rouge/demos/lua +12 -0
- data/lib/rouge/demos/lustre +6 -0
- data/lib/rouge/demos/lutin +18 -0
- data/lib/rouge/demos/m68k +16 -0
- data/lib/rouge/demos/magik +6 -0
- data/lib/rouge/demos/make +6 -0
- data/lib/rouge/demos/markdown +4 -0
- data/lib/rouge/demos/mason +22 -0
- data/lib/rouge/demos/mathematica +8 -0
- data/lib/rouge/demos/matlab +6 -0
- data/lib/rouge/demos/minizinc +23 -0
- data/lib/rouge/demos/moonscript +16 -0
- data/lib/rouge/demos/mosel +10 -0
- data/lib/rouge/demos/msgtrans +4 -0
- data/lib/rouge/demos/mxml +22 -0
- data/lib/rouge/demos/nasm +26 -0
- data/lib/rouge/demos/nesasm +11 -0
- data/lib/rouge/demos/nginx +5 -0
- data/lib/rouge/demos/nim +27 -0
- data/lib/rouge/demos/nix +19 -0
- data/lib/rouge/demos/objective_c +18 -0
- data/lib/rouge/demos/objective_cpp +17 -0
- data/lib/rouge/demos/ocaml +12 -0
- data/lib/rouge/demos/openedge +4 -0
- data/lib/rouge/demos/opentype_feature_file +6 -0
- data/lib/rouge/demos/pascal +14 -0
- data/lib/rouge/demos/perl +5 -0
- data/lib/rouge/demos/php +3 -0
- data/lib/rouge/demos/plaintext +1 -0
- data/lib/rouge/demos/plist +11 -0
- data/lib/rouge/demos/pony +17 -0
- data/lib/rouge/demos/powershell +13 -0
- data/lib/rouge/demos/praat +26 -0
- data/lib/rouge/demos/prolog +9 -0
- data/lib/rouge/demos/prometheus +9 -0
- data/lib/rouge/demos/properties +7 -0
- data/lib/rouge/demos/protobuf +5 -0
- data/lib/rouge/demos/puppet +6 -0
- data/lib/rouge/demos/python +6 -0
- data/lib/rouge/demos/q +8 -0
- data/lib/rouge/demos/qml +9 -0
- data/lib/rouge/demos/r +8 -0
- data/lib/rouge/demos/racket +24 -0
- data/lib/rouge/demos/reasonml +12 -0
- data/lib/rouge/demos/rego +8 -0
- data/lib/rouge/demos/robot_framework +27 -0
- data/lib/rouge/demos/ruby +9 -0
- data/lib/rouge/demos/rust +12 -0
- data/lib/rouge/demos/sas +13 -0
- data/lib/rouge/demos/sass +3 -0
- data/lib/rouge/demos/scala +3 -0
- data/lib/rouge/demos/scheme +4 -0
- data/lib/rouge/demos/scss +5 -0
- data/lib/rouge/demos/sed +4 -0
- data/lib/rouge/demos/shell +2 -0
- data/lib/rouge/demos/sieve +10 -0
- data/lib/rouge/demos/slice +10 -0
- data/lib/rouge/demos/slim +17 -0
- data/lib/rouge/demos/smalltalk +6 -0
- data/lib/rouge/demos/smarty +12 -0
- data/lib/rouge/demos/sml +4 -0
- data/lib/rouge/demos/solidity +13 -0
- data/lib/rouge/demos/sparql +6 -0
- data/lib/rouge/demos/sqf +14 -0
- data/lib/rouge/demos/sql +1 -0
- data/lib/rouge/demos/supercollider +11 -0
- data/lib/rouge/demos/swift +5 -0
- data/lib/rouge/demos/tap +5 -0
- data/lib/rouge/demos/tcl +1 -0
- data/lib/rouge/demos/terraform +16 -0
- data/lib/rouge/demos/tex +1 -0
- data/lib/rouge/demos/toml +9 -0
- data/lib/rouge/demos/tsx +17 -0
- data/lib/rouge/demos/ttcn3 +6 -0
- data/lib/rouge/demos/tulip +13 -0
- data/lib/rouge/demos/turtle +26 -0
- data/lib/rouge/demos/twig +9 -0
- data/lib/rouge/demos/typescript +1 -0
- data/lib/rouge/demos/vala +8 -0
- data/lib/rouge/demos/vb +4 -0
- data/lib/rouge/demos/vcl +12 -0
- data/lib/rouge/demos/verilog +27 -0
- data/lib/rouge/demos/vhdl +23 -0
- data/lib/rouge/demos/viml +14 -0
- data/lib/rouge/demos/vue +11 -0
- data/lib/rouge/demos/wollok +11 -0
- data/lib/rouge/demos/xml +2 -0
- data/lib/rouge/demos/xojo +14 -0
- data/lib/rouge/demos/xpath +2 -0
- data/lib/rouge/demos/xquery +22 -0
- data/lib/rouge/demos/yaml +4 -0
- data/lib/rouge/demos/yang +17 -0
- data/lib/rouge/formatter.rb +112 -0
- data/lib/rouge/formatters/html.rb +56 -0
- data/lib/rouge/formatters/html_inline.rb +31 -0
- data/lib/rouge/formatters/html_legacy.rb +45 -0
- data/lib/rouge/formatters/html_line_table.rb +53 -0
- data/lib/rouge/formatters/html_linewise.rb +23 -0
- data/lib/rouge/formatters/html_pygments.rb +18 -0
- data/lib/rouge/formatters/html_table.rb +51 -0
- data/lib/rouge/formatters/null.rb +20 -0
- data/lib/rouge/formatters/terminal256.rb +198 -0
- data/lib/rouge/formatters/terminal_truecolor.rb +37 -0
- data/lib/rouge/formatters/tex.rb +92 -0
- data/lib/rouge/guesser.rb +57 -0
- data/lib/rouge/guessers/disambiguation.rb +136 -0
- data/lib/rouge/guessers/filename.rb +27 -0
- data/lib/rouge/guessers/glob_mapping.rb +45 -0
- data/lib/rouge/guessers/mimetype.rb +16 -0
- data/lib/rouge/guessers/modeline.rb +46 -0
- data/lib/rouge/guessers/source.rb +31 -0
- data/lib/rouge/guessers/util.rb +34 -0
- data/lib/rouge/lexer.rb +517 -0
- data/lib/rouge/lexers/abap.rb +240 -0
- data/lib/rouge/lexers/actionscript.rb +196 -0
- data/lib/rouge/lexers/ada.rb +162 -0
- data/lib/rouge/lexers/apache.rb +69 -0
- data/lib/rouge/lexers/apache/keywords.rb +15 -0
- data/lib/rouge/lexers/apex.rb +126 -0
- data/lib/rouge/lexers/apiblueprint.rb +49 -0
- data/lib/rouge/lexers/apple_script.rb +370 -0
- data/lib/rouge/lexers/armasm.rb +145 -0
- data/lib/rouge/lexers/awk.rb +162 -0
- data/lib/rouge/lexers/batchfile.rb +164 -0
- data/lib/rouge/lexers/bbcbasic.rb +112 -0
- data/lib/rouge/lexers/biml.rb +43 -0
- data/lib/rouge/lexers/bpf.rb +118 -0
- data/lib/rouge/lexers/brainfuck.rb +53 -0
- data/lib/rouge/lexers/bsl.rb +82 -0
- data/lib/rouge/lexers/c.rb +190 -0
- data/lib/rouge/lexers/ceylon.rb +96 -0
- data/lib/rouge/lexers/cfscript.rb +154 -0
- data/lib/rouge/lexers/clean.rb +156 -0
- data/lib/rouge/lexers/clojure.rb +113 -0
- data/lib/rouge/lexers/cmake.rb +208 -0
- data/lib/rouge/lexers/cmhg.rb +34 -0
- data/lib/rouge/lexers/coffeescript.rb +215 -0
- data/lib/rouge/lexers/common_lisp.rb +346 -0
- data/lib/rouge/lexers/conf.rb +25 -0
- data/lib/rouge/lexers/console.rb +190 -0
- data/lib/rouge/lexers/coq.rb +191 -0
- data/lib/rouge/lexers/cpp.rb +89 -0
- data/lib/rouge/lexers/crystal.rb +430 -0
- data/lib/rouge/lexers/csharp.rb +114 -0
- data/lib/rouge/lexers/css.rb +274 -0
- data/lib/rouge/lexers/csvs.rb +44 -0
- data/lib/rouge/lexers/cuda.rb +35 -0
- data/lib/rouge/lexers/cypher.rb +108 -0
- data/lib/rouge/lexers/cython.rb +151 -0
- data/lib/rouge/lexers/d.rb +177 -0
- data/lib/rouge/lexers/dart.rb +105 -0
- data/lib/rouge/lexers/datastudio.rb +138 -0
- data/lib/rouge/lexers/diff.rb +37 -0
- data/lib/rouge/lexers/digdag.rb +70 -0
- data/lib/rouge/lexers/docker.rb +51 -0
- data/lib/rouge/lexers/dot.rb +69 -0
- data/lib/rouge/lexers/ecl.rb +175 -0
- data/lib/rouge/lexers/eex.rb +52 -0
- data/lib/rouge/lexers/eiffel.rb +66 -0
- data/lib/rouge/lexers/elixir.rb +149 -0
- data/lib/rouge/lexers/elm.rb +90 -0
- data/lib/rouge/lexers/epp.rb +51 -0
- data/lib/rouge/lexers/erb.rb +53 -0
- data/lib/rouge/lexers/erlang.rb +115 -0
- data/lib/rouge/lexers/escape.rb +58 -0
- data/lib/rouge/lexers/factor.rb +303 -0
- data/lib/rouge/lexers/fortran.rb +178 -0
- data/lib/rouge/lexers/freefem.rb +240 -0
- data/lib/rouge/lexers/fsharp.rb +120 -0
- data/lib/rouge/lexers/gdscript.rb +171 -0
- data/lib/rouge/lexers/ghc_cmm.rb +340 -0
- data/lib/rouge/lexers/ghc_core.rb +151 -0
- data/lib/rouge/lexers/gherkin.rb +140 -0
- data/lib/rouge/lexers/gherkin/keywords.rb +16 -0
- data/lib/rouge/lexers/glsl.rb +132 -0
- data/lib/rouge/lexers/go.rb +175 -0
- data/lib/rouge/lexers/gradle.rb +38 -0
- data/lib/rouge/lexers/graphql.rb +261 -0
- data/lib/rouge/lexers/groovy.rb +111 -0
- data/lib/rouge/lexers/hack.rb +49 -0
- data/lib/rouge/lexers/haml.rb +226 -0
- data/lib/rouge/lexers/handlebars.rb +91 -0
- data/lib/rouge/lexers/haskell.rb +199 -0
- data/lib/rouge/lexers/haxe.rb +246 -0
- data/lib/rouge/lexers/hcl.rb +163 -0
- data/lib/rouge/lexers/hocon.rb +86 -0
- data/lib/rouge/lexers/hql.rb +139 -0
- data/lib/rouge/lexers/html.rb +141 -0
- data/lib/rouge/lexers/http.rb +81 -0
- data/lib/rouge/lexers/hylang.rb +94 -0
- data/lib/rouge/lexers/idlang.rb +312 -0
- data/lib/rouge/lexers/igorpro.rb +664 -0
- data/lib/rouge/lexers/ini.rb +54 -0
- data/lib/rouge/lexers/io.rb +69 -0
- data/lib/rouge/lexers/irb.rb +67 -0
- data/lib/rouge/lexers/isbl.rb +97 -0
- data/lib/rouge/lexers/isbl/builtins.rb +17 -0
- data/lib/rouge/lexers/java.rb +91 -0
- data/lib/rouge/lexers/javascript.rb +279 -0
- data/lib/rouge/lexers/jinja.rb +154 -0
- data/lib/rouge/lexers/jsl.rb +55 -0
- data/lib/rouge/lexers/json.rb +72 -0
- data/lib/rouge/lexers/json_doc.rb +26 -0
- data/lib/rouge/lexers/jsonnet.rb +152 -0
- data/lib/rouge/lexers/jsp.rb +120 -0
- data/lib/rouge/lexers/jsx.rb +104 -0
- data/lib/rouge/lexers/julia.rb +290 -0
- data/lib/rouge/lexers/kotlin.rb +131 -0
- data/lib/rouge/lexers/lasso.rb +210 -0
- data/lib/rouge/lexers/lasso/keywords.rb +14 -0
- data/lib/rouge/lexers/liquid.rb +285 -0
- data/lib/rouge/lexers/literate_coffeescript.rb +34 -0
- data/lib/rouge/lexers/literate_haskell.rb +37 -0
- data/lib/rouge/lexers/llvm.rb +97 -0
- data/lib/rouge/lexers/lua.rb +164 -0
- data/lib/rouge/lexers/lua/builtins.rb +24 -0
- data/lib/rouge/lexers/lustre.rb +79 -0
- data/lib/rouge/lexers/lutin.rb +33 -0
- data/lib/rouge/lexers/m68k.rb +143 -0
- data/lib/rouge/lexers/magik.rb +127 -0
- data/lib/rouge/lexers/make.rb +135 -0
- data/lib/rouge/lexers/markdown.rb +182 -0
- data/lib/rouge/lexers/mason.rb +110 -0
- data/lib/rouge/lexers/mathematica.rb +96 -0
- data/lib/rouge/lexers/mathematica/builtins.rb +13 -0
- data/lib/rouge/lexers/matlab.rb +80 -0
- data/lib/rouge/lexers/matlab/builtins.rb +11 -0
- data/lib/rouge/lexers/minizinc.rb +87 -0
- data/lib/rouge/lexers/moonscript.rb +115 -0
- data/lib/rouge/lexers/mosel.rb +232 -0
- data/lib/rouge/lexers/msgtrans.rb +26 -0
- data/lib/rouge/lexers/mxml.rb +69 -0
- data/lib/rouge/lexers/nasm.rb +72 -0
- data/lib/rouge/lexers/nesasm.rb +78 -0
- data/lib/rouge/lexers/nginx.rb +72 -0
- data/lib/rouge/lexers/nim.rb +154 -0
- data/lib/rouge/lexers/nix.rb +211 -0
- data/lib/rouge/lexers/objective_c.rb +21 -0
- data/lib/rouge/lexers/objective_c/common.rb +184 -0
- data/lib/rouge/lexers/objective_cpp.rb +31 -0
- data/lib/rouge/lexers/ocaml.rb +65 -0
- data/lib/rouge/lexers/ocaml/common.rb +53 -0
- data/lib/rouge/lexers/openedge.rb +429 -0
- data/lib/rouge/lexers/opentype_feature_file.rb +113 -0
- data/lib/rouge/lexers/pascal.rb +67 -0
- data/lib/rouge/lexers/perl.rb +231 -0
- data/lib/rouge/lexers/php.rb +231 -0
- data/lib/rouge/lexers/php/builtins.rb +203 -0
- data/lib/rouge/lexers/plain_text.rb +27 -0
- data/lib/rouge/lexers/plist.rb +47 -0
- data/lib/rouge/lexers/pony.rb +94 -0
- data/lib/rouge/lexers/powershell.rb +230 -0
- data/lib/rouge/lexers/praat.rb +351 -0
- data/lib/rouge/lexers/prolog.rb +67 -0
- data/lib/rouge/lexers/prometheus.rb +123 -0
- data/lib/rouge/lexers/properties.rb +52 -0
- data/lib/rouge/lexers/protobuf.rb +71 -0
- data/lib/rouge/lexers/puppet.rb +129 -0
- data/lib/rouge/lexers/python.rb +257 -0
- data/lib/rouge/lexers/q.rb +126 -0
- data/lib/rouge/lexers/qml.rb +74 -0
- data/lib/rouge/lexers/r.rb +89 -0
- data/lib/rouge/lexers/racket.rb +568 -0
- data/lib/rouge/lexers/reasonml.rb +65 -0
- data/lib/rouge/lexers/rego.rb +45 -0
- data/lib/rouge/lexers/robot_framework.rb +249 -0
- data/lib/rouge/lexers/ruby.rb +454 -0
- data/lib/rouge/lexers/rust.rb +193 -0
- data/lib/rouge/lexers/sas.rb +563 -0
- data/lib/rouge/lexers/sass.rb +75 -0
- data/lib/rouge/lexers/sass/common.rb +181 -0
- data/lib/rouge/lexers/scala.rb +169 -0
- data/lib/rouge/lexers/scheme.rb +113 -0
- data/lib/rouge/lexers/scss.rb +35 -0
- data/lib/rouge/lexers/sed.rb +173 -0
- data/lib/rouge/lexers/shell.rb +201 -0
- data/lib/rouge/lexers/sieve.rb +97 -0
- data/lib/rouge/lexers/slice.rb +32 -0
- data/lib/rouge/lexers/slim.rb +229 -0
- data/lib/rouge/lexers/smalltalk.rb +117 -0
- data/lib/rouge/lexers/smarty.rb +81 -0
- data/lib/rouge/lexers/sml.rb +345 -0
- data/lib/rouge/lexers/solidity.rb +185 -0
- data/lib/rouge/lexers/sparql.rb +129 -0
- data/lib/rouge/lexers/sqf.rb +109 -0
- data/lib/rouge/lexers/sqf/commands.rb +15 -0
- data/lib/rouge/lexers/sql.rb +161 -0
- data/lib/rouge/lexers/supercollider.rb +116 -0
- data/lib/rouge/lexers/swift.rb +186 -0
- data/lib/rouge/lexers/tap.rb +89 -0
- data/lib/rouge/lexers/tcl.rb +193 -0
- data/lib/rouge/lexers/terraform.rb +128 -0
- data/lib/rouge/lexers/tex.rb +70 -0
- data/lib/rouge/lexers/toml.rb +106 -0
- data/lib/rouge/lexers/tsx.rb +20 -0
- data/lib/rouge/lexers/ttcn3.rb +119 -0
- data/lib/rouge/lexers/tulip.rb +108 -0
- data/lib/rouge/lexers/turtle.rb +61 -0
- data/lib/rouge/lexers/twig.rb +40 -0
- data/lib/rouge/lexers/typescript.rb +34 -0
- data/lib/rouge/lexers/typescript/common.rb +34 -0
- data/lib/rouge/lexers/vala.rb +78 -0
- data/lib/rouge/lexers/varnish.rb +168 -0
- data/lib/rouge/lexers/vb.rb +165 -0
- data/lib/rouge/lexers/verilog.rb +163 -0
- data/lib/rouge/lexers/vhdl.rb +98 -0
- data/lib/rouge/lexers/viml.rb +102 -0
- data/lib/rouge/lexers/viml/keywords.rb +14 -0
- data/lib/rouge/lexers/vue.rb +127 -0
- data/lib/rouge/lexers/wollok.rb +104 -0
- data/lib/rouge/lexers/xml.rb +54 -0
- data/lib/rouge/lexers/xojo.rb +61 -0
- data/lib/rouge/lexers/xpath.rb +332 -0
- data/lib/rouge/lexers/xquery.rb +145 -0
- data/lib/rouge/lexers/yaml.rb +376 -0
- data/lib/rouge/lexers/yang.rb +147 -0
- data/lib/rouge/plugins/redcarpet.rb +37 -0
- data/lib/rouge/regex_lexer.rb +443 -0
- data/lib/rouge/template_lexer.rb +21 -0
- data/lib/rouge/tex_theme_renderer.rb +132 -0
- data/lib/rouge/text_analyzer.rb +50 -0
- data/lib/rouge/theme.rb +218 -0
- data/lib/rouge/themes/base16.rb +131 -0
- data/lib/rouge/themes/bw.rb +41 -0
- data/lib/rouge/themes/colorful.rb +68 -0
- data/lib/rouge/themes/github.rb +72 -0
- data/lib/rouge/themes/gruvbox.rb +168 -0
- data/lib/rouge/themes/igor_pro.rb +21 -0
- data/lib/rouge/themes/magritte.rb +78 -0
- data/lib/rouge/themes/molokai.rb +83 -0
- data/lib/rouge/themes/monokai.rb +93 -0
- data/lib/rouge/themes/monokai_sublime.rb +93 -0
- data/lib/rouge/themes/pastie.rb +70 -0
- data/lib/rouge/themes/thankful_eyes.rb +75 -0
- data/lib/rouge/themes/tulip.rb +70 -0
- data/lib/rouge/token.rb +191 -0
- data/lib/rouge/util.rb +102 -0
- data/lib/rouge/version.rb +8 -0
- data/rouge.gemspec +26 -0
- metadata +491 -0
@@ -0,0 +1,346 @@
|
|
1
|
+
# -*- coding: utf-8 -*- #
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
module Rouge
|
5
|
+
module Lexers
|
6
|
+
class CommonLisp < RegexLexer
|
7
|
+
title "Common Lisp"
|
8
|
+
desc "The Common Lisp variant of Lisp (common-lisp.net)"
|
9
|
+
tag 'common_lisp'
|
10
|
+
aliases 'cl', 'common-lisp', 'elisp', 'emacs-lisp', 'lisp'
|
11
|
+
|
12
|
+
filenames '*.cl', '*.lisp', '*.asd', '*.el' # used for Elisp too
|
13
|
+
mimetypes 'text/x-common-lisp'
|
14
|
+
|
15
|
+
# 638 functions
|
16
|
+
BUILTIN_FUNCTIONS = Set.new %w(
|
17
|
+
< <= = > >= - / /= * + 1- 1+ abort abs acons acos acosh add-method
|
18
|
+
adjoin adjustable-array-p adjust-array allocate-instance
|
19
|
+
alpha-char-p alphanumericp append apply apropos apropos-list
|
20
|
+
aref arithmetic-error-operands arithmetic-error-operation
|
21
|
+
array-dimension array-dimensions array-displacement
|
22
|
+
array-element-type array-has-fill-pointer-p array-in-bounds-p
|
23
|
+
arrayp array-rank array-row-major-index array-total-size
|
24
|
+
ash asin asinh assoc assoc-if assoc-if-not atan atanh atom
|
25
|
+
bit bit-and bit-andc1 bit-andc2 bit-eqv bit-ior bit-nand
|
26
|
+
bit-nor bit-not bit-orc1 bit-orc2 bit-vector-p bit-xor boole
|
27
|
+
both-case-p boundp break broadcast-stream-streams butlast
|
28
|
+
byte byte-position byte-size caaaar caaadr caaar caadar
|
29
|
+
caaddr caadr caar cadaar cadadr cadar caddar cadddr caddr
|
30
|
+
cadr call-next-method car cdaaar cdaadr cdaar cdadar cdaddr
|
31
|
+
cdadr cdar cddaar cddadr cddar cdddar cddddr cdddr cddr cdr
|
32
|
+
ceiling cell-error-name cerror change-class char char< char<=
|
33
|
+
char= char> char>= char/= character characterp char-code
|
34
|
+
char-downcase char-equal char-greaterp char-int char-lessp
|
35
|
+
char-name char-not-equal char-not-greaterp char-not-lessp
|
36
|
+
char-upcase cis class-name class-of clear-input clear-output
|
37
|
+
close clrhash code-char coerce compile compiled-function-p
|
38
|
+
compile-file compile-file-pathname compiler-macro-function
|
39
|
+
complement complex complexp compute-applicable-methods
|
40
|
+
compute-restarts concatenate concatenated-stream-streams conjugate
|
41
|
+
cons consp constantly constantp continue copy-alist copy-list
|
42
|
+
copy-pprint-dispatch copy-readtable copy-seq copy-structure
|
43
|
+
copy-symbol copy-tree cos cosh count count-if count-if-not
|
44
|
+
decode-float decode-universal-time delete delete-duplicates
|
45
|
+
delete-file delete-if delete-if-not delete-package denominator
|
46
|
+
deposit-field describe describe-object digit-char digit-char-p
|
47
|
+
directory directory-namestring disassemble documentation dpb
|
48
|
+
dribble echo-stream-input-stream echo-stream-output-stream
|
49
|
+
ed eighth elt encode-universal-time endp enough-namestring
|
50
|
+
ensure-directories-exist ensure-generic-function eq
|
51
|
+
eql equal equalp error eval evenp every exp export expt
|
52
|
+
fboundp fceiling fdefinition ffloor fifth file-author
|
53
|
+
file-error-pathname file-length file-namestring file-position
|
54
|
+
file-string-length file-write-date fill fill-pointer find
|
55
|
+
find-all-symbols find-class find-if find-if-not find-method
|
56
|
+
find-package find-restart find-symbol finish-output first
|
57
|
+
float float-digits floatp float-precision float-radix
|
58
|
+
float-sign floor fmakunbound force-output format fourth
|
59
|
+
fresh-line fround ftruncate funcall function-keywords
|
60
|
+
function-lambda-expression functionp gcd gensym gentemp get
|
61
|
+
get-decoded-time get-dispatch-macro-character getf gethash
|
62
|
+
get-internal-real-time get-internal-run-time get-macro-character
|
63
|
+
get-output-stream-string get-properties get-setf-expansion
|
64
|
+
get-universal-time graphic-char-p hash-table-count hash-table-p
|
65
|
+
hash-table-rehash-size hash-table-rehash-threshold
|
66
|
+
hash-table-size hash-table-test host-namestring identity
|
67
|
+
imagpart import initialize-instance input-stream-p inspect
|
68
|
+
integer-decode-float integer-length integerp interactive-stream-p
|
69
|
+
intern intersection invalid-method-error invoke-debugger
|
70
|
+
invoke-restart invoke-restart-interactively isqrt keywordp
|
71
|
+
last lcm ldb ldb-test ldiff length lisp-implementation-type
|
72
|
+
lisp-implementation-version list list* list-all-packages listen
|
73
|
+
list-length listp load load-logical-pathname-translations
|
74
|
+
log logand logandc1 logandc2 logbitp logcount logeqv
|
75
|
+
logical-pathname logical-pathname-translations logior
|
76
|
+
lognand lognor lognot logorc1 logorc2 logtest logxor
|
77
|
+
long-site-name lower-case-p machine-instance machine-type
|
78
|
+
machine-version macroexpand macroexpand-1 macro-function
|
79
|
+
make-array make-broadcast-stream make-concatenated-stream
|
80
|
+
make-condition make-dispatch-macro-character make-echo-stream
|
81
|
+
make-hash-table make-instance make-instances-obsolete make-list
|
82
|
+
make-load-form make-load-form-saving-slots make-package
|
83
|
+
make-pathname make-random-state make-sequence make-string
|
84
|
+
make-string-input-stream make-string-output-stream make-symbol
|
85
|
+
make-synonym-stream make-two-way-stream makunbound map mapc
|
86
|
+
mapcan mapcar mapcon maphash map-into mapl maplist mask-field
|
87
|
+
max member member-if member-if-not merge merge-pathnames
|
88
|
+
method-combination-error method-qualifiers min minusp mismatch mod
|
89
|
+
muffle-warning name-char namestring nbutlast nconc next-method-p
|
90
|
+
nintersection ninth no-applicable-method no-next-method not notany
|
91
|
+
notevery nreconc nreverse nset-difference nset-exclusive-or
|
92
|
+
nstring-capitalize nstring-downcase nstring-upcase nsublis
|
93
|
+
nsubst nsubst-if nsubst-if-not nsubstitute nsubstitute-if
|
94
|
+
nsubstitute-if-not nth nthcdr null numberp numerator nunion
|
95
|
+
oddp open open-stream-p output-stream-p package-error-package
|
96
|
+
package-name package-nicknames packagep package-shadowing-symbols
|
97
|
+
package-used-by-list package-use-list pairlis parse-integer
|
98
|
+
parse-namestring pathname pathname-device pathname-directory
|
99
|
+
pathname-host pathname-match-p pathname-name pathnamep
|
100
|
+
pathname-type pathname-version peek-char phase plusp
|
101
|
+
position position-if position-if-not pprint pprint-dispatch
|
102
|
+
pprint-fill pprint-indent pprint-linear pprint-newline pprint-tab
|
103
|
+
pprint-tabular prin1 prin1-to-string princ princ-to-string print
|
104
|
+
print-object probe-file proclaim provide random random-state-p
|
105
|
+
rassoc rassoc-if rassoc-if-not rational rationalize rationalp
|
106
|
+
read read-byte read-char read-char-no-hang read-delimited-list
|
107
|
+
read-from-string read-line read-preserving-whitespace
|
108
|
+
read-sequence readtable-case readtablep realp realpart
|
109
|
+
reduce reinitialize-instance rem remhash remove
|
110
|
+
remove-duplicates remove-if remove-if-not remove-method
|
111
|
+
remprop rename-file rename-package replace require rest
|
112
|
+
restart-name revappend reverse room round row-major-aref
|
113
|
+
rplaca rplacd sbit scale-float schar search second set
|
114
|
+
set-difference set-dispatch-macro-character set-exclusive-or
|
115
|
+
set-macro-character set-pprint-dispatch set-syntax-from-char
|
116
|
+
seventh shadow shadowing-import shared-initialize
|
117
|
+
short-site-name signal signum simple-bit-vector-p
|
118
|
+
simple-condition-format-arguments simple-condition-format-control
|
119
|
+
simple-string-p simple-vector-p sin sinh sixth sleep slot-boundp
|
120
|
+
slot-exists-p slot-makunbound slot-missing slot-unbound slot-value
|
121
|
+
software-type software-version some sort special-operator-p
|
122
|
+
sqrt stable-sort standard-char-p store-value stream-element-type
|
123
|
+
stream-error-stream stream-external-format streamp string string<
|
124
|
+
string<= string= string> string>= string/= string-capitalize
|
125
|
+
string-downcase string-equal string-greaterp string-left-trim
|
126
|
+
string-lessp string-not-equal string-not-greaterp string-not-lessp
|
127
|
+
stringp string-right-trim string-trim string-upcase sublis subseq
|
128
|
+
subsetp subst subst-if subst-if-not substitute substitute-if
|
129
|
+
substitute-if-not subtypepsvref sxhash symbol-function
|
130
|
+
symbol-name symbolp symbol-package symbol-plist symbol-value
|
131
|
+
synonym-stream-symbol syntax: tailp tan tanh tenth terpri third
|
132
|
+
translate-logical-pathname translate-pathname tree-equal truename
|
133
|
+
truncate two-way-stream-input-stream two-way-stream-output-stream
|
134
|
+
type-error-datum type-error-expected-type type-of
|
135
|
+
typep unbound-slot-instance unexport unintern union
|
136
|
+
unread-char unuse-package update-instance-for-different-class
|
137
|
+
update-instance-for-redefined-class upgraded-array-element-type
|
138
|
+
upgraded-complex-part-type upper-case-p use-package
|
139
|
+
user-homedir-pathname use-value values values-list vector vectorp
|
140
|
+
vector-pop vector-push vector-push-extend warn wild-pathname-p
|
141
|
+
write write-byte write-char write-line write-sequence write-string
|
142
|
+
write-to-string yes-or-no-p y-or-n-p zerop
|
143
|
+
).freeze
|
144
|
+
|
145
|
+
SPECIAL_FORMS = Set.new %w(
|
146
|
+
block catch declare eval-when flet function go if labels lambda
|
147
|
+
let let* load-time-value locally macrolet multiple-value-call
|
148
|
+
multiple-value-prog1 progn progv quote return-from setq
|
149
|
+
symbol-macrolet tagbody the throw unwind-protect
|
150
|
+
)
|
151
|
+
|
152
|
+
MACROS = Set.new %w(
|
153
|
+
and assert call-method case ccase check-type cond ctypecase decf
|
154
|
+
declaim defclass defconstant defgeneric define-compiler-macro
|
155
|
+
define-condition define-method-combination define-modify-macro
|
156
|
+
define-setf-expander define-symbol-macro defmacro defmethod
|
157
|
+
defpackage defparameter defsetf defstruct defsystem deftype defun defvar
|
158
|
+
destructuring-bind do do* do-all-symbols do-external-symbols
|
159
|
+
dolist do-symbols dotimes ecase etypecase formatter
|
160
|
+
handler-bind handler-case ignore-errors incf in-package
|
161
|
+
lambda loop loop-finish make-method multiple-value-bind
|
162
|
+
multiple-value-list multiple-value-setq nth-value or pop
|
163
|
+
pprint-exit-if-list-exhausted pprint-logical-block pprint-pop
|
164
|
+
print-unreadable-object prog prog* prog1 prog2 psetf psetq
|
165
|
+
push pushnew remf restart-bind restart-case return rotatef
|
166
|
+
setf shiftf step time trace typecase unless untrace when
|
167
|
+
with-accessors with-compilation-unit with-condition-restarts
|
168
|
+
with-hash-table-iterator with-input-from-string with-open-file
|
169
|
+
with-open-stream with-output-to-string with-package-iterator
|
170
|
+
with-simple-restart with-slots with-standard-io-syntax
|
171
|
+
)
|
172
|
+
|
173
|
+
LAMBDA_LIST_KEYWORDS = Set.new %w(
|
174
|
+
&allow-other-keys &aux &body &environment &key &optional &rest
|
175
|
+
&whole
|
176
|
+
)
|
177
|
+
|
178
|
+
DECLARATIONS = Set.new %w(
|
179
|
+
dynamic-extent ignore optimize ftype inline special ignorable
|
180
|
+
notinline type
|
181
|
+
)
|
182
|
+
|
183
|
+
BUILTIN_TYPES = Set.new %w(
|
184
|
+
atom boolean base-char base-string bignum bit compiled-function
|
185
|
+
extended-char fixnum keyword nil signed-byte short-float
|
186
|
+
single-float double-float long-float simple-array
|
187
|
+
simple-base-string simple-bit-vector simple-string simple-vector
|
188
|
+
standard-char unsigned-byte
|
189
|
+
|
190
|
+
arithmetic-error cell-error condition control-error
|
191
|
+
division-by-zero end-of-file error file-error
|
192
|
+
floating-point-inexact floating-point-overflow
|
193
|
+
floating-point-underflow floating-point-invalid-operation
|
194
|
+
parse-error package-error print-not-readable program-error
|
195
|
+
reader-error serious-condition simple-condition simple-error
|
196
|
+
simple-type-error simple-warning stream-error storage-condition
|
197
|
+
style-warning type-error unbound-variable unbound-slot
|
198
|
+
undefined-function warning
|
199
|
+
)
|
200
|
+
|
201
|
+
BUILTIN_CLASSES = Set.new %w(
|
202
|
+
array broadcast-stream bit-vector built-in-class character
|
203
|
+
class complex concatenated-stream cons echo-stream file-stream
|
204
|
+
float function generic-function hash-table integer list
|
205
|
+
logical-pathname method-combination method null number package
|
206
|
+
pathname ratio rational readtable real random-state restart
|
207
|
+
sequence standard-class standard-generic-function standard-method
|
208
|
+
standard-object string-stream stream string structure-class
|
209
|
+
structure-object symbol synonym-stream t two-way-stream vector
|
210
|
+
)
|
211
|
+
|
212
|
+
nonmacro = /\\.|[a-zA-Z0-9!$%&*+-\/<=>?@\[\]^_{}~]/
|
213
|
+
constituent = /#{nonmacro}|[#.:]/
|
214
|
+
terminated = /(?=[ "'()\n,;`])/ # whitespace or terminating macro chars
|
215
|
+
symbol = /(\|[^\|]+\||#{nonmacro}#{constituent}*)/
|
216
|
+
|
217
|
+
state :root do
|
218
|
+
rule %r/\s+/m, Text
|
219
|
+
rule %r/;.*$/, Comment::Single
|
220
|
+
rule %r/#\|/, Comment::Multiline, :multiline_comment
|
221
|
+
|
222
|
+
# encoding comment
|
223
|
+
rule %r/#\d*Y.*$/, Comment::Special
|
224
|
+
rule %r/"(\\.|[^"\\])*"/, Str
|
225
|
+
|
226
|
+
rule %r/[:']#{symbol}/, Str::Symbol
|
227
|
+
rule %r/['`]/, Operator
|
228
|
+
|
229
|
+
# numbers
|
230
|
+
rule %r/[-+]?\d+\.?#{terminated}/, Num::Integer
|
231
|
+
rule %r([-+]?\d+/\d+#{terminated}), Num::Integer
|
232
|
+
rule %r(
|
233
|
+
[-+]?
|
234
|
+
(\d*\.\d+([defls][-+]?\d+)?
|
235
|
+
|\d+(\.\d*)?[defls][-+]?\d+)
|
236
|
+
#{terminated}
|
237
|
+
)x, Num::Float
|
238
|
+
|
239
|
+
# sharpsign strings and characters
|
240
|
+
rule %r/#\\.#{terminated}/, Str::Char
|
241
|
+
rule %r/#\\#{symbol}/, Str::Char
|
242
|
+
|
243
|
+
rule %r/#\(/, Operator, :root
|
244
|
+
|
245
|
+
# bitstring
|
246
|
+
rule %r/#\d*\*[01]*/, Other
|
247
|
+
|
248
|
+
# uninterned symbol
|
249
|
+
rule %r/#:#{symbol}/, Str::Symbol
|
250
|
+
|
251
|
+
# read-time and load-time evaluation
|
252
|
+
rule %r/#[.,]/, Operator
|
253
|
+
|
254
|
+
# function shorthand
|
255
|
+
rule %r/#'/, Name::Function
|
256
|
+
|
257
|
+
# binary rational
|
258
|
+
rule %r/#b[+-]?[01]+(\/[01]+)?/i, Num
|
259
|
+
|
260
|
+
# octal rational
|
261
|
+
rule %r/#o[+-]?[0-7]+(\/[0-7]+)?/i, Num::Oct
|
262
|
+
|
263
|
+
# hex rational
|
264
|
+
rule %r/#x[+-]?[0-9a-f]+(\/[0-9a-f]+)?/i, Num
|
265
|
+
|
266
|
+
# complex
|
267
|
+
rule %r/(#c)(\()/i do
|
268
|
+
groups Num, Punctuation
|
269
|
+
push :root
|
270
|
+
end
|
271
|
+
|
272
|
+
# arrays and structures
|
273
|
+
rule %r/(#(?:\d+a|s))(\()/i do
|
274
|
+
groups Str::Other, Punctuation
|
275
|
+
push :root
|
276
|
+
end
|
277
|
+
|
278
|
+
# path
|
279
|
+
rule %r/#p?"(\\.|[^"])*"/i, Str::Symbol
|
280
|
+
|
281
|
+
# reference
|
282
|
+
rule %r/#\d+[=#]/, Operator
|
283
|
+
|
284
|
+
# read-time comment
|
285
|
+
rule %r/#+nil#{terminated}\s*\(/, Comment, :commented_form
|
286
|
+
|
287
|
+
# read-time conditional
|
288
|
+
rule %r/#[+-]/, Operator
|
289
|
+
|
290
|
+
# special operators that should have been parsed already
|
291
|
+
rule %r/(,@|,|\.)/, Operator
|
292
|
+
|
293
|
+
# special constants
|
294
|
+
rule %r/(t|nil)#{terminated}/, Name::Constant
|
295
|
+
|
296
|
+
# functions and variables
|
297
|
+
# note that these get filtered through in stream_tokens
|
298
|
+
rule %r/\*#{symbol}\*/, Name::Variable::Global
|
299
|
+
rule symbol do |m|
|
300
|
+
sym = m[0]
|
301
|
+
|
302
|
+
if BUILTIN_FUNCTIONS.include? sym
|
303
|
+
token Name::Builtin
|
304
|
+
elsif SPECIAL_FORMS.include? sym
|
305
|
+
token Keyword
|
306
|
+
elsif MACROS.include? sym
|
307
|
+
token Name::Builtin
|
308
|
+
elsif LAMBDA_LIST_KEYWORDS.include? sym
|
309
|
+
token Keyword
|
310
|
+
elsif DECLARATIONS.include? sym
|
311
|
+
token Keyword
|
312
|
+
elsif BUILTIN_TYPES.include? sym
|
313
|
+
token Keyword::Type
|
314
|
+
elsif BUILTIN_CLASSES.include? sym
|
315
|
+
token Name::Class
|
316
|
+
else
|
317
|
+
token Name::Variable
|
318
|
+
end
|
319
|
+
end
|
320
|
+
|
321
|
+
rule %r/\(/, Punctuation, :root
|
322
|
+
rule %r/\)/, Punctuation do
|
323
|
+
if stack.size == 1
|
324
|
+
token Error
|
325
|
+
else
|
326
|
+
token Punctuation
|
327
|
+
pop!
|
328
|
+
end
|
329
|
+
end
|
330
|
+
end
|
331
|
+
|
332
|
+
state :multiline_comment do
|
333
|
+
rule %r/#\|/, Comment::Multiline, :multiline_comment
|
334
|
+
rule %r/\|#/, Comment::Multiline, :pop!
|
335
|
+
rule %r/[^\|#]+/, Comment::Multiline
|
336
|
+
rule %r/[\|#]/, Comment::Multiline
|
337
|
+
end
|
338
|
+
|
339
|
+
state :commented_form do
|
340
|
+
rule %r/\(/, Comment, :commented_form
|
341
|
+
rule %r/\)/, Comment, :pop!
|
342
|
+
rule %r/[^()]+/, Comment
|
343
|
+
end
|
344
|
+
end
|
345
|
+
end
|
346
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# -*- coding: utf-8 -*- #
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
module Rouge
|
5
|
+
module Lexers
|
6
|
+
class Conf < RegexLexer
|
7
|
+
tag 'conf'
|
8
|
+
aliases 'config', 'configuration'
|
9
|
+
|
10
|
+
title "Config File"
|
11
|
+
desc 'A generic lexer for configuration files'
|
12
|
+
filenames '*.conf', '*.config'
|
13
|
+
|
14
|
+
# short and sweet
|
15
|
+
state :root do
|
16
|
+
rule %r/#.*?\n/, Comment
|
17
|
+
rule %r/".*?"/, Str::Double
|
18
|
+
rule %r/'.*?'/, Str::Single
|
19
|
+
rule %r/[a-z]\w*/i, Name
|
20
|
+
rule %r/\d+/, Num
|
21
|
+
rule %r/[^\w#"']+/, Text
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,190 @@
|
|
1
|
+
# -*- coding: utf-8 -*- #
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
module Rouge
|
5
|
+
module Lexers
|
6
|
+
# The {ConsoleLexer} class is intended to lex content that represents the
|
7
|
+
# text that would display in a console/terminal. As distinct from the
|
8
|
+
# {Shell} lexer, {ConsoleLexer} will try to parse out the prompt from each
|
9
|
+
# line before passing the remainder of the line to the language lexer for
|
10
|
+
# the shell (by default, the {Shell} lexer).
|
11
|
+
#
|
12
|
+
# The {ConsoleLexer} class accepts five options:
|
13
|
+
# 1. **lang**: the shell language to lex (default: `shell`);
|
14
|
+
# 2. **output**: the output language (default: `plaintext?token=Generic.Output`);
|
15
|
+
# 3. **prompt**: comma-separated list of strings that indicate the end of a
|
16
|
+
# prompt (default: `$,#,>,;`);
|
17
|
+
# 4. **comments**: whether to enable comments.
|
18
|
+
# 5. **error**: comma-separated list of strings that indicate the start of an
|
19
|
+
# error message
|
20
|
+
#
|
21
|
+
# The comments option, if enabled, will lex lines that begin with a `#` as a
|
22
|
+
# comment. Please note that this option will only work if the prompt is
|
23
|
+
# either not manually specified or, if manually specified, does not include
|
24
|
+
# the `#` character.
|
25
|
+
#
|
26
|
+
# Most Markdown lexers that recognise GitHub-Flavored Markdown syntax, will
|
27
|
+
# pass the language string to Rouge as written in the original document.
|
28
|
+
# This allows an end user to pass options to {ConsoleLexer} by passing them
|
29
|
+
# as CGI-style parameters as in the example below.
|
30
|
+
#
|
31
|
+
# @example
|
32
|
+
# <pre>Here's some regular text.
|
33
|
+
#
|
34
|
+
# ```console?comments=true
|
35
|
+
# # This is a comment
|
36
|
+
# $ cp foo bar
|
37
|
+
# ```
|
38
|
+
#
|
39
|
+
# Some more regular text.</pre>
|
40
|
+
class ConsoleLexer < Lexer
|
41
|
+
tag 'console'
|
42
|
+
aliases 'terminal', 'shell_session', 'shell-session'
|
43
|
+
filenames '*.cap'
|
44
|
+
desc 'A generic lexer for shell sessions. Accepts ?lang and ?output lexer options, a ?prompt option, ?comments to enable # comments, and ?error to handle error messages.'
|
45
|
+
|
46
|
+
option :lang, 'the shell language to lex (default: shell)'
|
47
|
+
option :output, 'the output language (default: plaintext?token=Generic.Output)'
|
48
|
+
option :prompt, 'comma-separated list of strings that indicate the end of a prompt. (default: $,#,>,;)'
|
49
|
+
option :comments, 'enable hash-comments at the start of a line - otherwise interpreted as a prompt. (default: false, implied by ?prompt not containing `#`)'
|
50
|
+
option :error, 'comma-separated list of strings that indicate the start of an error message'
|
51
|
+
|
52
|
+
def initialize(*)
|
53
|
+
super
|
54
|
+
@prompt = list_option(:prompt) { nil }
|
55
|
+
@lang = lexer_option(:lang) { 'shell' }
|
56
|
+
@output = lexer_option(:output) { PlainText.new(token: Generic::Output) }
|
57
|
+
@comments = bool_option(:comments) { :guess }
|
58
|
+
@error = list_option(:error) { nil }
|
59
|
+
end
|
60
|
+
|
61
|
+
# whether to allow comments. if manually specifying a prompt that isn't
|
62
|
+
# simply "#", we flag this to on
|
63
|
+
def allow_comments?
|
64
|
+
case @comments
|
65
|
+
when :guess
|
66
|
+
@prompt && !@prompt.empty? && !end_chars.include?('#')
|
67
|
+
else
|
68
|
+
@comments
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
def comment_regex
|
73
|
+
/\A\s*?#/
|
74
|
+
end
|
75
|
+
|
76
|
+
def end_chars
|
77
|
+
@end_chars ||= if @prompt.any?
|
78
|
+
@prompt.reject { |c| c.empty? }
|
79
|
+
elsif allow_comments?
|
80
|
+
%w($ > ;)
|
81
|
+
else
|
82
|
+
%w($ # > ;)
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
def error_regex
|
87
|
+
@error_regex ||= if @error.any?
|
88
|
+
/^(?:#{@error.map(&Regexp.method(:escape)).join('|')})/
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
def lang_lexer
|
93
|
+
@lang_lexer ||= case @lang
|
94
|
+
when Lexer
|
95
|
+
@lang
|
96
|
+
when nil
|
97
|
+
Shell.new(options)
|
98
|
+
when Class
|
99
|
+
@lang.new(options)
|
100
|
+
when String
|
101
|
+
Lexer.find(@lang).new(options)
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
def line_regex
|
106
|
+
/(\\.|[^\\])*?(\n|$)/m
|
107
|
+
end
|
108
|
+
|
109
|
+
def output_lexer
|
110
|
+
@output_lexer ||= case @output
|
111
|
+
when nil
|
112
|
+
PlainText.new(token: Generic::Output)
|
113
|
+
when Lexer
|
114
|
+
@output
|
115
|
+
when Class
|
116
|
+
@output.new(options)
|
117
|
+
when String
|
118
|
+
Lexer.find(@output).new(options)
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
def process_line(input, &output)
|
123
|
+
input.scan(line_regex)
|
124
|
+
|
125
|
+
# As a nicety, support the use of elisions in input text. A user can
|
126
|
+
# write a line with only `<...>` or one or more `.` characters and
|
127
|
+
# Rouge will treat it as a comment.
|
128
|
+
if input[0] =~ /\A\s*(?:<[.]+>|[.]+)\s*\z/
|
129
|
+
puts "console: matched snip #{input[0].inspect}" if @debug
|
130
|
+
output_lexer.reset!
|
131
|
+
lang_lexer.reset!
|
132
|
+
|
133
|
+
yield Comment, input[0]
|
134
|
+
elsif prompt_regex =~ input[0]
|
135
|
+
puts "console: matched prompt #{input[0].inspect}" if @debug
|
136
|
+
output_lexer.reset!
|
137
|
+
|
138
|
+
yield Generic::Prompt, $&
|
139
|
+
|
140
|
+
# make sure to take care of initial whitespace
|
141
|
+
# before we pass to the lang lexer so it can determine where
|
142
|
+
# the "real" beginning of the line is
|
143
|
+
$' =~ /\A\s*/
|
144
|
+
yield Text::Whitespace, $& unless $&.empty?
|
145
|
+
|
146
|
+
lang_lexer.continue_lex($', &output)
|
147
|
+
elsif comment_regex =~ input[0].strip
|
148
|
+
puts "console: matched comment #{input[0].inspect}" if @debug
|
149
|
+
output_lexer.reset!
|
150
|
+
lang_lexer.reset!
|
151
|
+
|
152
|
+
yield Comment, input[0]
|
153
|
+
elsif error_regex =~ input[0]
|
154
|
+
puts "console: matched error #{input[0].inspect}" if @debug
|
155
|
+
output_lexer.reset!
|
156
|
+
lang_lexer.reset!
|
157
|
+
|
158
|
+
yield Generic::Error, input[0]
|
159
|
+
else
|
160
|
+
puts "console: matched output #{input[0].inspect}" if @debug
|
161
|
+
lang_lexer.reset!
|
162
|
+
|
163
|
+
output_lexer.continue_lex(input[0], &output)
|
164
|
+
end
|
165
|
+
end
|
166
|
+
|
167
|
+
def prompt_prefix_regex
|
168
|
+
if allow_comments?
|
169
|
+
/[^<#]*?/m
|
170
|
+
else
|
171
|
+
/.*?/m
|
172
|
+
end
|
173
|
+
end
|
174
|
+
|
175
|
+
def prompt_regex
|
176
|
+
@prompt_regex ||= begin
|
177
|
+
/^#{prompt_prefix_regex}(?:#{end_chars.map(&Regexp.method(:escape)).join('|')})/
|
178
|
+
end
|
179
|
+
end
|
180
|
+
|
181
|
+
def stream_tokens(input, &output)
|
182
|
+
input = StringScanner.new(input)
|
183
|
+
lang_lexer.reset!
|
184
|
+
output_lexer.reset!
|
185
|
+
|
186
|
+
process_line(input, &output) while !input.eos?
|
187
|
+
end
|
188
|
+
end
|
189
|
+
end
|
190
|
+
end
|