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,52 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*- #
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
module Rouge
|
|
5
|
+
module Lexers
|
|
6
|
+
class Properties < RegexLexer
|
|
7
|
+
title ".properties"
|
|
8
|
+
desc '.properties config files for Java'
|
|
9
|
+
tag 'properties'
|
|
10
|
+
|
|
11
|
+
filenames '*.properties'
|
|
12
|
+
mimetypes 'text/x-java-properties'
|
|
13
|
+
|
|
14
|
+
identifier = /[\w.-]+/
|
|
15
|
+
|
|
16
|
+
state :basic do
|
|
17
|
+
rule %r/[!#].*?\n/, Comment
|
|
18
|
+
rule %r/\s+/, Text
|
|
19
|
+
rule %r/\\\n/, Str::Escape
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
state :root do
|
|
23
|
+
mixin :basic
|
|
24
|
+
|
|
25
|
+
rule %r/(#{identifier})(\s*)([=:])/ do
|
|
26
|
+
groups Name::Property, Text, Punctuation
|
|
27
|
+
push :value
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
state :value do
|
|
32
|
+
rule %r/\n/, Text, :pop!
|
|
33
|
+
mixin :basic
|
|
34
|
+
rule %r/"/, Str, :dq
|
|
35
|
+
rule %r/'.*?'/, Str
|
|
36
|
+
mixin :esc_str
|
|
37
|
+
rule %r/[^\\\n]+/, Str
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
state :dq do
|
|
41
|
+
rule %r/"/, Str, :pop!
|
|
42
|
+
mixin :esc_str
|
|
43
|
+
rule %r/[^\\"]+/m, Str
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
state :esc_str do
|
|
47
|
+
rule %r/\\u[0-9]{4}/, Str::Escape
|
|
48
|
+
rule %r/\\./m, Str::Escape
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*- #
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
module Rouge
|
|
5
|
+
module Lexers
|
|
6
|
+
class Protobuf < RegexLexer
|
|
7
|
+
title 'Protobuf'
|
|
8
|
+
desc 'Google\'s language-neutral, platform-neutral, extensible mechanism for serializing structured data'
|
|
9
|
+
tag 'protobuf'
|
|
10
|
+
aliases 'proto'
|
|
11
|
+
filenames '*.proto'
|
|
12
|
+
mimetypes 'text/x-proto'
|
|
13
|
+
|
|
14
|
+
kw = /\b(ctype|default|extensions|import|max|oneof|option|optional|packed|repeated|required|returns|rpc|to)\b/
|
|
15
|
+
datatype = /\b(bool|bytes|double|fixed32|fixed64|float|int32|int64|sfixed32|sfixed64|sint32|sint64|string|uint32|uint64)\b/
|
|
16
|
+
|
|
17
|
+
state :root do
|
|
18
|
+
rule %r/[\s]+/, Text
|
|
19
|
+
rule %r/[,;{}\[\]()]/, Punctuation
|
|
20
|
+
rule %r/\/(\\\n)?\/($|(.|\n)*?[^\\]$)/, Comment::Single
|
|
21
|
+
rule %r/\/(\\\n)?\*(.|\n)*?\*(\\\n)?\//, Comment::Multiline
|
|
22
|
+
rule kw, Keyword
|
|
23
|
+
rule datatype, Keyword::Type
|
|
24
|
+
rule %r/true|false/, Keyword::Constant
|
|
25
|
+
rule %r/(package)(\s+)/ do
|
|
26
|
+
groups Keyword::Namespace, Text
|
|
27
|
+
push :package
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
rule %r/(message|extend)(\s+)/ do
|
|
31
|
+
groups Keyword::Declaration, Text
|
|
32
|
+
push :message
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
rule %r/(enum|group|service)(\s+)/ do
|
|
36
|
+
groups Keyword::Declaration, Text
|
|
37
|
+
push :type
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
rule %r/".*?"/, Str
|
|
41
|
+
rule %r/'.*?'/, Str
|
|
42
|
+
rule %r/(\d+\.\d*|\.\d+|\d+)[eE][+-]?\d+[LlUu]*/, Num::Float
|
|
43
|
+
rule %r/(\d+\.\d*|\.\d+|\d+[fF])[fF]?/, Num::Float
|
|
44
|
+
rule %r/(\-?(inf|nan))\b/, Num::Float
|
|
45
|
+
rule %r/0x[0-9a-fA-F]+[LlUu]*/, Num::Hex
|
|
46
|
+
rule %r/0[0-7]+[LlUu]*/, Num::Oct
|
|
47
|
+
rule %r/\d+[LlUu]*/, Num::Integer
|
|
48
|
+
rule %r/[+-=]/, Operator
|
|
49
|
+
rule %r/([a-zA-Z_][\w.]*)([ \t]*)(=)/ do
|
|
50
|
+
groups Name::Attribute, Text, Operator
|
|
51
|
+
end
|
|
52
|
+
rule %r/[a-zA-Z_][\w.]*/, Name
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
state :package do
|
|
56
|
+
rule %r/[a-zA-Z_]\w*/, Name::Namespace, :pop!
|
|
57
|
+
rule(//) { pop! }
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
state :message do
|
|
61
|
+
rule %r/[a-zA-Z_]\w*/, Name::Class, :pop!
|
|
62
|
+
rule(//) { pop! }
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
state :type do
|
|
66
|
+
rule %r/[a-zA-Z_]\w*/, Name, :pop!
|
|
67
|
+
rule(//) { pop! }
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
end
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*- #
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
module Rouge
|
|
5
|
+
module Lexers
|
|
6
|
+
class Puppet < RegexLexer
|
|
7
|
+
title "Puppet"
|
|
8
|
+
desc 'The Puppet configuration management language (puppetlabs.org)'
|
|
9
|
+
tag 'puppet'
|
|
10
|
+
aliases 'pp'
|
|
11
|
+
filenames '*.pp'
|
|
12
|
+
|
|
13
|
+
def self.detect?(text)
|
|
14
|
+
return true if text.shebang? 'puppet-apply'
|
|
15
|
+
return true if text.shebang? 'puppet'
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def self.keywords
|
|
19
|
+
@keywords ||= Set.new %w(
|
|
20
|
+
and case class default define else elsif if in import inherits
|
|
21
|
+
node unless
|
|
22
|
+
)
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def self.constants
|
|
26
|
+
@constants ||= Set.new %w(
|
|
27
|
+
false true undef
|
|
28
|
+
)
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def self.metaparameters
|
|
32
|
+
@metaparameters ||= Set.new %w(
|
|
33
|
+
before require notify subscribe
|
|
34
|
+
)
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
id = /[a-z]\w*/
|
|
38
|
+
cap_id = /[A-Z]\w*/
|
|
39
|
+
qualname = /(::)?(#{id}::)*\w+/
|
|
40
|
+
|
|
41
|
+
state :whitespace do
|
|
42
|
+
rule %r/\s+/m, Text
|
|
43
|
+
rule %r/#.*?\n/, Comment
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
state :root do
|
|
47
|
+
mixin :whitespace
|
|
48
|
+
|
|
49
|
+
rule %r/[$]#{qualname}/, Name::Variable
|
|
50
|
+
rule %r/(#{id})(?=\s*[=+]>)/m do |m|
|
|
51
|
+
if self.class.metaparameters.include? m[0]
|
|
52
|
+
token Keyword::Pseudo
|
|
53
|
+
else
|
|
54
|
+
token Name::Property
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
rule %r/(#{qualname})(?=\s*[(])/m, Name::Function
|
|
59
|
+
rule cap_id, Name::Class
|
|
60
|
+
|
|
61
|
+
rule %r/[+=|~-]>|<[|~-]/, Punctuation
|
|
62
|
+
rule %r/[|:}();\[\]]/, Punctuation
|
|
63
|
+
|
|
64
|
+
# HACK for case statements and selectors
|
|
65
|
+
rule %r/{/, Punctuation, :regex_allowed
|
|
66
|
+
rule %r/,/, Punctuation, :regex_allowed
|
|
67
|
+
|
|
68
|
+
rule %r/(in|and|or)\b/, Operator::Word
|
|
69
|
+
rule %r/[=!<>]=/, Operator
|
|
70
|
+
rule %r/[=!]~/, Operator, :regex_allowed
|
|
71
|
+
rule %r([.=<>!+*/-]), Operator
|
|
72
|
+
|
|
73
|
+
rule %r/(class|include)(\s*)(#{qualname})/ do
|
|
74
|
+
groups Keyword, Text, Name::Class
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
rule %r/node\b/, Keyword, :regex_allowed
|
|
78
|
+
|
|
79
|
+
rule %r/'(\\[\\']|[^'])*'/m, Str::Single
|
|
80
|
+
rule %r/"/, Str::Double, :dquotes
|
|
81
|
+
|
|
82
|
+
rule %r/\d+([.]\d+)?(e[+-]\d+)?/, Num
|
|
83
|
+
|
|
84
|
+
# a valid regex. TODO: regexes are only allowed
|
|
85
|
+
# in certain places in puppet.
|
|
86
|
+
rule qualname do |m|
|
|
87
|
+
if self.class.keywords.include? m[0]
|
|
88
|
+
token Keyword
|
|
89
|
+
elsif self.class.constants.include? m[0]
|
|
90
|
+
token Keyword::Constant
|
|
91
|
+
else
|
|
92
|
+
token Name
|
|
93
|
+
end
|
|
94
|
+
end
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
state :regex_allowed do
|
|
98
|
+
mixin :whitespace
|
|
99
|
+
rule %r(/), Str::Regex, :regex
|
|
100
|
+
|
|
101
|
+
rule(//) { pop! }
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
state :regex do
|
|
105
|
+
rule %r(/), Str::Regex, :pop!
|
|
106
|
+
rule %r/\\./, Str::Escape
|
|
107
|
+
rule %r/[(){}]/, Str::Interpol
|
|
108
|
+
rule %r/\[/, Str::Interpol, :regex_class
|
|
109
|
+
rule %r/./, Str::Regex
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
state :regex_class do
|
|
113
|
+
rule %r/\]/, Str::Interpol, :pop!
|
|
114
|
+
rule %r/(?<!\[)-(?=\])/, Str::Regex
|
|
115
|
+
rule %r/-/, Str::Interpol
|
|
116
|
+
rule %r/\\./, Str::Escape
|
|
117
|
+
rule %r/[^\\\]-]+/, Str::Regex
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
state :dquotes do
|
|
121
|
+
rule %r/"/, Str::Double, :pop!
|
|
122
|
+
rule %r/[^$\\"]+/m, Str::Double
|
|
123
|
+
rule %r/\\./m, Str::Escape
|
|
124
|
+
rule %r/[$]#{qualname}/, Name::Variable
|
|
125
|
+
rule %r/[$][{]#{qualname}[}]/, Name::Variable
|
|
126
|
+
end
|
|
127
|
+
end
|
|
128
|
+
end
|
|
129
|
+
end
|
|
@@ -0,0 +1,257 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*- #
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
module Rouge
|
|
5
|
+
module Lexers
|
|
6
|
+
class Python < RegexLexer
|
|
7
|
+
title "Python"
|
|
8
|
+
desc "The Python programming language (python.org)"
|
|
9
|
+
tag 'python'
|
|
10
|
+
aliases 'py'
|
|
11
|
+
filenames '*.py', '*.pyw', '*.sc', 'SConstruct', 'SConscript', '*.tac',
|
|
12
|
+
'*.bzl', 'BUCK', 'BUILD', 'BUILD.bazel', 'WORKSPACE'
|
|
13
|
+
mimetypes 'text/x-python', 'application/x-python'
|
|
14
|
+
|
|
15
|
+
def self.detect?(text)
|
|
16
|
+
return true if text.shebang?(/pythonw?(?:[23](?:\.\d+)?)?/)
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def self.keywords
|
|
20
|
+
@keywords ||= %w(
|
|
21
|
+
assert break continue del elif else except exec
|
|
22
|
+
finally for global if lambda pass print raise
|
|
23
|
+
return try while yield as with from import yield
|
|
24
|
+
async await nonlocal
|
|
25
|
+
)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def self.builtins
|
|
29
|
+
@builtins ||= %w(
|
|
30
|
+
__import__ abs all any apply ascii basestring bin bool buffer
|
|
31
|
+
bytearray bytes callable chr classmethod cmp coerce compile
|
|
32
|
+
complex delattr dict dir divmod enumerate eval execfile exit
|
|
33
|
+
file filter float format frozenset getattr globals hasattr hash hex id
|
|
34
|
+
input int intern isinstance issubclass iter len list locals
|
|
35
|
+
long map max memoryview min next object oct open ord pow property range
|
|
36
|
+
raw_input reduce reload repr reversed round set setattr slice
|
|
37
|
+
sorted staticmethod str sum super tuple type unichr unicode
|
|
38
|
+
vars xrange zip
|
|
39
|
+
)
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def self.builtins_pseudo
|
|
43
|
+
@builtins_pseudo ||= %w(self None Ellipsis NotImplemented False True)
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def self.exceptions
|
|
47
|
+
@exceptions ||= %w(
|
|
48
|
+
ArithmeticError AssertionError AttributeError
|
|
49
|
+
BaseException BlockingIOError BrokenPipeError BufferError
|
|
50
|
+
BytesWarning ChildProcessError ConnectionAbortedError
|
|
51
|
+
ConnectionError ConnectionRefusedError ConnectionResetError
|
|
52
|
+
DeprecationWarning EOFError EnvironmentError
|
|
53
|
+
Exception FileExistsError FileNotFoundError
|
|
54
|
+
FloatingPointError FutureWarning GeneratorExit IOError
|
|
55
|
+
ImportError ImportWarning IndentationError IndexError
|
|
56
|
+
InterruptedError IsADirectoryError KeyError KeyboardInterrupt
|
|
57
|
+
LookupError MemoryError ModuleNotFoundError NameError
|
|
58
|
+
NotADirectoryError NotImplemented NotImplementedError OSError
|
|
59
|
+
OverflowError OverflowWarning PendingDeprecationWarning
|
|
60
|
+
ProcessLookupError RecursionError ReferenceError ResourceWarning
|
|
61
|
+
RuntimeError RuntimeWarning StandardError StopAsyncIteration
|
|
62
|
+
StopIteration SyntaxError SyntaxWarning SystemError SystemExit
|
|
63
|
+
TabError TimeoutError TypeError UnboundLocalError UnicodeDecodeError
|
|
64
|
+
UnicodeEncodeError UnicodeError UnicodeTranslateError
|
|
65
|
+
UnicodeWarning UserWarning ValueError VMSError Warning
|
|
66
|
+
WindowsError ZeroDivisionError
|
|
67
|
+
)
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
identifier = /[a-z_][a-z0-9_]*/i
|
|
71
|
+
dotted_identifier = /[a-z_.][a-z0-9_.]*/i
|
|
72
|
+
|
|
73
|
+
def current_string
|
|
74
|
+
@string_register ||= StringRegister.new
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
state :root do
|
|
78
|
+
rule %r/\n+/m, Text
|
|
79
|
+
rule %r/^(:)(\s*)([ru]{,2}""".*?""")/mi do
|
|
80
|
+
groups Punctuation, Text, Str::Doc
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
rule %r/[^\S\n]+/, Text
|
|
84
|
+
rule %r(#(.*)?\n?), Comment::Single
|
|
85
|
+
rule %r/[\[\]{}:(),;.]/, Punctuation
|
|
86
|
+
rule %r/\\\n/, Text
|
|
87
|
+
rule %r/\\/, Text
|
|
88
|
+
|
|
89
|
+
rule %r/(in|is|and|or|not)\b/, Operator::Word
|
|
90
|
+
rule %r/(<<|>>|\/\/|\*\*)=?/, Operator
|
|
91
|
+
rule %r/[-~+\/*%=<>&^|@]=?|!=/, Operator
|
|
92
|
+
|
|
93
|
+
rule %r/(from)((?:\\\s|\s)+)(#{dotted_identifier})((?:\\\s|\s)+)(import)/ do
|
|
94
|
+
groups Keyword::Namespace,
|
|
95
|
+
Text,
|
|
96
|
+
Name::Namespace,
|
|
97
|
+
Text,
|
|
98
|
+
Keyword::Namespace
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
rule %r/(import)(\s+)(#{dotted_identifier})/ do
|
|
102
|
+
groups Keyword::Namespace, Text, Name::Namespace
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
rule %r/(def)((?:\s|\\\s)+)/ do
|
|
106
|
+
groups Keyword, Text
|
|
107
|
+
push :funcname
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
rule %r/(class)((?:\s|\\\s)+)/ do
|
|
111
|
+
groups Keyword, Text
|
|
112
|
+
push :classname
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
# TODO: not in python 3
|
|
116
|
+
rule %r/`.*?`/, Str::Backtick
|
|
117
|
+
rule %r/([rfbu]{0,2})('''|"""|['"])/i do |m|
|
|
118
|
+
token Str
|
|
119
|
+
current_string.register type: m[1].downcase, delim: m[2]
|
|
120
|
+
push :generic_string
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
rule %r/@#{dotted_identifier}/i, Name::Decorator
|
|
124
|
+
|
|
125
|
+
# using negative lookbehind so we don't match property names
|
|
126
|
+
rule %r/(?<!\.)#{identifier}/ do |m|
|
|
127
|
+
if self.class.keywords.include? m[0]
|
|
128
|
+
token Keyword
|
|
129
|
+
elsif self.class.exceptions.include? m[0]
|
|
130
|
+
token Name::Builtin
|
|
131
|
+
elsif self.class.builtins.include? m[0]
|
|
132
|
+
token Name::Builtin
|
|
133
|
+
elsif self.class.builtins_pseudo.include? m[0]
|
|
134
|
+
token Name::Builtin::Pseudo
|
|
135
|
+
else
|
|
136
|
+
token Name
|
|
137
|
+
end
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
rule identifier, Name
|
|
141
|
+
|
|
142
|
+
digits = /[0-9](_?[0-9])*/
|
|
143
|
+
decimal = /((#{digits})?\.#{digits}|#{digits}\.)/
|
|
144
|
+
exponent = /e[+-]?#{digits}/i
|
|
145
|
+
rule %r/#{decimal}(#{exponent})?j?/i, Num::Float
|
|
146
|
+
rule %r/#{digits}#{exponent}j?/i, Num::Float
|
|
147
|
+
rule %r/#{digits}j/i, Num::Float
|
|
148
|
+
|
|
149
|
+
rule %r/0b(_?[0-1])+/i, Num::Bin
|
|
150
|
+
rule %r/0o(_?[0-7])+/i, Num::Oct
|
|
151
|
+
rule %r/0x(_?[a-f0-9])+/i, Num::Hex
|
|
152
|
+
rule %r/\d+L/, Num::Integer::Long
|
|
153
|
+
rule %r/([1-9](_?[0-9])*|0(_?0)*)/, Num::Integer
|
|
154
|
+
end
|
|
155
|
+
|
|
156
|
+
state :funcname do
|
|
157
|
+
rule identifier, Name::Function, :pop!
|
|
158
|
+
end
|
|
159
|
+
|
|
160
|
+
state :classname do
|
|
161
|
+
rule identifier, Name::Class, :pop!
|
|
162
|
+
end
|
|
163
|
+
|
|
164
|
+
state :raise do
|
|
165
|
+
rule %r/from\b/, Keyword
|
|
166
|
+
rule %r/raise\b/, Keyword
|
|
167
|
+
rule %r/yield\b/, Keyword
|
|
168
|
+
rule %r/\n/, Text, :pop!
|
|
169
|
+
rule %r/;/, Punctuation, :pop!
|
|
170
|
+
mixin :root
|
|
171
|
+
end
|
|
172
|
+
|
|
173
|
+
state :yield do
|
|
174
|
+
mixin :raise
|
|
175
|
+
end
|
|
176
|
+
|
|
177
|
+
state :generic_string do
|
|
178
|
+
rule %r/[^'"\\{]+/, Str
|
|
179
|
+
rule %r/{{/, Str
|
|
180
|
+
|
|
181
|
+
rule %r/'''|"""|['"]/ do |m|
|
|
182
|
+
token Str
|
|
183
|
+
if current_string.delim? m[0]
|
|
184
|
+
current_string.remove
|
|
185
|
+
pop!
|
|
186
|
+
end
|
|
187
|
+
end
|
|
188
|
+
|
|
189
|
+
rule %r/\\/ do |m|
|
|
190
|
+
if current_string.type? "r"
|
|
191
|
+
token Str
|
|
192
|
+
else
|
|
193
|
+
token Str::Interpol
|
|
194
|
+
end
|
|
195
|
+
push :generic_escape
|
|
196
|
+
end
|
|
197
|
+
|
|
198
|
+
rule %r/{/ do |m|
|
|
199
|
+
if current_string.type? "f"
|
|
200
|
+
token Str::Interpol
|
|
201
|
+
push :generic_interpol
|
|
202
|
+
else
|
|
203
|
+
token Str
|
|
204
|
+
end
|
|
205
|
+
end
|
|
206
|
+
end
|
|
207
|
+
|
|
208
|
+
state :generic_escape do
|
|
209
|
+
rule %r(
|
|
210
|
+
( [\\abfnrtv"']
|
|
211
|
+
| \n
|
|
212
|
+
| N{[a-zA-Z][a-zA-Z ]+[a-zA-Z]}
|
|
213
|
+
| u[a-fA-F0-9]{4}
|
|
214
|
+
| U[a-fA-F0-9]{8}
|
|
215
|
+
| x[a-fA-F0-9]{2}
|
|
216
|
+
| [0-7]{1,3}
|
|
217
|
+
)
|
|
218
|
+
)x do
|
|
219
|
+
if current_string.type? "r"
|
|
220
|
+
token Str
|
|
221
|
+
else
|
|
222
|
+
token Str::Escape
|
|
223
|
+
end
|
|
224
|
+
pop!
|
|
225
|
+
end
|
|
226
|
+
end
|
|
227
|
+
|
|
228
|
+
state :generic_interpol do
|
|
229
|
+
rule %r/[^{}]+/ do |m|
|
|
230
|
+
recurse m[0]
|
|
231
|
+
end
|
|
232
|
+
rule %r/{/, Str::Interpol, :generic_interpol
|
|
233
|
+
rule %r/}/, Str::Interpol, :pop!
|
|
234
|
+
end
|
|
235
|
+
|
|
236
|
+
class StringRegister < Array
|
|
237
|
+
def delim?(delim)
|
|
238
|
+
self.last[1] == delim
|
|
239
|
+
end
|
|
240
|
+
|
|
241
|
+
def register(type: "u", delim: "'")
|
|
242
|
+
self.push [type, delim]
|
|
243
|
+
end
|
|
244
|
+
|
|
245
|
+
def remove
|
|
246
|
+
self.pop
|
|
247
|
+
end
|
|
248
|
+
|
|
249
|
+
def type?(type)
|
|
250
|
+
self.last[0].include? type
|
|
251
|
+
end
|
|
252
|
+
end
|
|
253
|
+
|
|
254
|
+
private_constant :StringRegister
|
|
255
|
+
end
|
|
256
|
+
end
|
|
257
|
+
end
|