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,186 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*- #
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
module Rouge
|
|
5
|
+
module Lexers
|
|
6
|
+
class Swift < RegexLexer
|
|
7
|
+
tag 'swift'
|
|
8
|
+
filenames '*.swift'
|
|
9
|
+
|
|
10
|
+
title "Swift"
|
|
11
|
+
desc 'Multi paradigm, compiled programming language developed by Apple for iOS and OS X development. (developer.apple.com/swift)'
|
|
12
|
+
|
|
13
|
+
id_head = /_|(?!\p{Mc})\p{Alpha}|[^\u0000-\uFFFF]/
|
|
14
|
+
id_rest = /[\p{Alnum}_]|[^\u0000-\uFFFF]/
|
|
15
|
+
id = /#{id_head}#{id_rest}*/
|
|
16
|
+
|
|
17
|
+
keywords = Set.new %w(
|
|
18
|
+
break case continue default do else fallthrough if in for return switch where while try catch throw guard defer repeat
|
|
19
|
+
|
|
20
|
+
as dynamicType is new super self Self Type __COLUMN__ __FILE__ __FUNCTION__ __LINE__
|
|
21
|
+
|
|
22
|
+
associativity didSet get infix inout mutating none nonmutating operator override postfix precedence prefix set unowned weak willSet throws rethrows precedencegroup
|
|
23
|
+
|
|
24
|
+
#available #colorLiteral #column #else #elseif #endif #error #file #fileLiteral #function #if #imageLiteral #line #selector #sourceLocation #warning
|
|
25
|
+
)
|
|
26
|
+
|
|
27
|
+
declarations = Set.new %w(
|
|
28
|
+
class deinit enum convenience extension final func import init internal lazy let optional private protocol public required static struct subscript typealias var dynamic indirect associatedtype open fileprivate some
|
|
29
|
+
)
|
|
30
|
+
|
|
31
|
+
constants = Set.new %w(
|
|
32
|
+
true false nil
|
|
33
|
+
)
|
|
34
|
+
|
|
35
|
+
start { push :bol }
|
|
36
|
+
|
|
37
|
+
# beginning of line
|
|
38
|
+
state :bol do
|
|
39
|
+
rule %r/#.*/, Comment::Preproc
|
|
40
|
+
|
|
41
|
+
mixin :inline_whitespace
|
|
42
|
+
|
|
43
|
+
rule(//) { pop! }
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
state :inline_whitespace do
|
|
47
|
+
rule %r/\s+/m, Text
|
|
48
|
+
mixin :has_comments
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
state :whitespace do
|
|
52
|
+
rule %r/\n+/m, Text, :bol
|
|
53
|
+
rule %r(\/\/.*?$), Comment::Single, :bol
|
|
54
|
+
mixin :inline_whitespace
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
state :has_comments do
|
|
58
|
+
rule %r(/[*]), Comment::Multiline, :nested_comment
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
state :nested_comment do
|
|
62
|
+
mixin :has_comments
|
|
63
|
+
rule %r([*]/), Comment::Multiline, :pop!
|
|
64
|
+
rule %r([^*/]+)m, Comment::Multiline
|
|
65
|
+
rule %r/./, Comment::Multiline
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
state :root do
|
|
69
|
+
mixin :whitespace
|
|
70
|
+
|
|
71
|
+
rule %r/\$(([1-9]\d*)?\d)/, Name::Variable
|
|
72
|
+
|
|
73
|
+
rule %r{[()\[\]{}:;,?\\]}, Punctuation
|
|
74
|
+
rule %r([-/=+*%<>!&|^.~]+), Operator
|
|
75
|
+
rule %r/@?"/, Str, :dq
|
|
76
|
+
rule %r/'(\\.|.)'/, Str::Char
|
|
77
|
+
rule %r/(\d+(?:_\d+)*\*|(?:\d+(?:_\d+)*)*\.\d+(?:_\d)*)(e[+-]?\d+(?:_\d)*)?/i, Num::Float
|
|
78
|
+
rule %r/\d+e[+-]?[0-9]+/i, Num::Float
|
|
79
|
+
rule %r/0o?[0-7]+(?:_[0-7]+)*/, Num::Oct
|
|
80
|
+
rule %r/0x[0-9A-Fa-f]+(?:_[0-9A-Fa-f]+)*((\.[0-9A-F]+(?:_[0-9A-F]+)*)?p[+-]?\d+)?/, Num::Hex
|
|
81
|
+
rule %r/0b[01]+(?:_[01]+)*/, Num::Bin
|
|
82
|
+
rule %r{[\d]+(?:_\d+)*}, Num::Integer
|
|
83
|
+
|
|
84
|
+
rule %r/@#{id}/, Keyword::Declaration
|
|
85
|
+
|
|
86
|
+
rule %r/(private|internal)(\([ ]*)(\w+)([ ]*\))/ do |m|
|
|
87
|
+
if m[3] == 'set'
|
|
88
|
+
token Keyword::Declaration
|
|
89
|
+
else
|
|
90
|
+
groups Keyword::Declaration, Keyword::Declaration, Error, Keyword::Declaration
|
|
91
|
+
end
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
rule %r/(unowned\([ ]*)(\w+)([ ]*\))/ do |m|
|
|
95
|
+
if m[2] == 'safe' || m[2] == 'unsafe'
|
|
96
|
+
token Keyword::Declaration
|
|
97
|
+
else
|
|
98
|
+
groups Keyword::Declaration, Error, Keyword::Declaration
|
|
99
|
+
end
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
rule %r/#available\([^)]+\)/, Keyword::Declaration
|
|
103
|
+
|
|
104
|
+
rule %r/(#(?:selector|keyPath)\()([^)]+?(?:[(].*?[)])?)(\))/ do
|
|
105
|
+
groups Keyword::Declaration, Name::Function, Keyword::Declaration
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
rule %r/#(line|file|column|function|dsohandle)/, Keyword::Declaration
|
|
109
|
+
|
|
110
|
+
rule %r/(let|var)\b(\s*)(#{id})/ do
|
|
111
|
+
groups Keyword, Text, Name::Variable
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
rule %r/(let|var)\b(\s*)([(])/ do
|
|
115
|
+
groups Keyword, Text, Punctuation
|
|
116
|
+
push :tuple
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
rule %r/(?!\b(if|while|for|private|internal|unowned|switch|case)\b)\b#{id}(?=(\?|!)?\s*[(])/ do |m|
|
|
120
|
+
if m[0] =~ /^[[:upper:]]/
|
|
121
|
+
token Keyword::Type
|
|
122
|
+
else
|
|
123
|
+
token Name::Function
|
|
124
|
+
end
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
rule %r/as[?!]?(?=\s)/, Keyword
|
|
128
|
+
rule %r/try[!]?(?=\s)/, Keyword
|
|
129
|
+
|
|
130
|
+
rule %r/(#?(?!default)(?![[:upper:]])#{id})(\s*)(:)/ do
|
|
131
|
+
groups Name::Variable, Text, Punctuation
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
rule id do |m|
|
|
135
|
+
if keywords.include? m[0]
|
|
136
|
+
token Keyword
|
|
137
|
+
elsif declarations.include? m[0]
|
|
138
|
+
token Keyword::Declaration
|
|
139
|
+
elsif constants.include? m[0]
|
|
140
|
+
token Keyword::Constant
|
|
141
|
+
elsif m[0] =~ /^[[:upper:]]/
|
|
142
|
+
token Keyword::Type
|
|
143
|
+
else
|
|
144
|
+
token Name
|
|
145
|
+
end
|
|
146
|
+
end
|
|
147
|
+
|
|
148
|
+
rule %r/(`)(#{id})(`)/ do
|
|
149
|
+
groups Punctuation, Name::Variable, Punctuation
|
|
150
|
+
end
|
|
151
|
+
end
|
|
152
|
+
|
|
153
|
+
state :tuple do
|
|
154
|
+
rule %r/(#{id})/, Name::Variable
|
|
155
|
+
rule %r/(`)(#{id})(`)/ do
|
|
156
|
+
groups Punctuation, Name::Variable, Punctuation
|
|
157
|
+
end
|
|
158
|
+
rule %r/,/, Punctuation
|
|
159
|
+
rule %r/[(]/, Punctuation, :push
|
|
160
|
+
rule %r/[)]/, Punctuation, :pop!
|
|
161
|
+
mixin :inline_whitespace
|
|
162
|
+
end
|
|
163
|
+
|
|
164
|
+
state :dq do
|
|
165
|
+
rule %r/\\[\\0tnr'"]/, Str::Escape
|
|
166
|
+
rule %r/\\[(]/, Str::Escape, :interp
|
|
167
|
+
rule %r/\\u\{\h{1,8}\}/, Str::Escape
|
|
168
|
+
rule %r/[^\\"]+/, Str
|
|
169
|
+
rule %r/"""/, Str, :pop!
|
|
170
|
+
rule %r/"/, Str, :pop!
|
|
171
|
+
end
|
|
172
|
+
|
|
173
|
+
state :interp do
|
|
174
|
+
rule %r/[(]/, Punctuation, :interp_inner
|
|
175
|
+
rule %r/[)]/, Str::Escape, :pop!
|
|
176
|
+
mixin :root
|
|
177
|
+
end
|
|
178
|
+
|
|
179
|
+
state :interp_inner do
|
|
180
|
+
rule %r/[(]/, Punctuation, :push
|
|
181
|
+
rule %r/[)]/, Punctuation, :pop!
|
|
182
|
+
mixin :root
|
|
183
|
+
end
|
|
184
|
+
end
|
|
185
|
+
end
|
|
186
|
+
end
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Rouge
|
|
4
|
+
module Lexers
|
|
5
|
+
class Tap < RegexLexer
|
|
6
|
+
title 'TAP'
|
|
7
|
+
desc 'Test Anything Protocol'
|
|
8
|
+
tag 'tap'
|
|
9
|
+
aliases 'tap'
|
|
10
|
+
filenames '*.tap'
|
|
11
|
+
|
|
12
|
+
mimetypes 'text/x-tap', 'application/x-tap'
|
|
13
|
+
|
|
14
|
+
state :root do
|
|
15
|
+
# A TAP version may be specified.
|
|
16
|
+
rule %r/^TAP version \d+\n/, Name::Namespace
|
|
17
|
+
|
|
18
|
+
# Specify a plan with a plan line.
|
|
19
|
+
rule %r/^1\.\.\d+/, Keyword::Declaration, :plan
|
|
20
|
+
|
|
21
|
+
# A test failure
|
|
22
|
+
rule %r/^(not ok)([^\S\n]*)(\d*)/ do
|
|
23
|
+
groups Generic::Error, Text, Literal::Number::Integer
|
|
24
|
+
push :test
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
# A test success
|
|
28
|
+
rule %r/^(ok)([^\S\n]*)(\d*)/ do
|
|
29
|
+
groups Keyword::Reserved, Text, Literal::Number::Integer
|
|
30
|
+
push :test
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
# Diagnostics start with a hash.
|
|
34
|
+
rule %r/^#.*\n/, Comment
|
|
35
|
+
|
|
36
|
+
# TAP's version of an abort statement.
|
|
37
|
+
rule %r/^Bail out!.*\n/, Generic::Error
|
|
38
|
+
|
|
39
|
+
# # TAP ignores any unrecognized lines.
|
|
40
|
+
rule %r/^.*\n/, Text
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
state :plan do
|
|
44
|
+
# Consume whitespace (but not newline).
|
|
45
|
+
rule %r/[^\S\n]+/, Text
|
|
46
|
+
|
|
47
|
+
# A plan may have a directive with it.
|
|
48
|
+
rule %r/#/, Comment, :directive
|
|
49
|
+
|
|
50
|
+
# Or it could just end.
|
|
51
|
+
rule %r/\n/, Comment, :pop!
|
|
52
|
+
|
|
53
|
+
# Anything else is wrong.
|
|
54
|
+
rule %r/.*\n/, Generic::Error, :pop!
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
state :test do
|
|
58
|
+
# Consume whitespace (but not newline).
|
|
59
|
+
rule %r/[^\S\n]+/, Text
|
|
60
|
+
|
|
61
|
+
# A test may have a directive with it.
|
|
62
|
+
rule %r/#/, Comment, :directive
|
|
63
|
+
|
|
64
|
+
rule %r/\S+/, Text
|
|
65
|
+
|
|
66
|
+
rule %r/\n/, Text, :pop!
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
state :directive do
|
|
70
|
+
# Consume whitespace (but not newline).
|
|
71
|
+
rule %r/[^\S\n]+/, Comment
|
|
72
|
+
|
|
73
|
+
# Extract todo items.
|
|
74
|
+
rule %r/(?i)\bTODO\b/, Comment::Preproc
|
|
75
|
+
|
|
76
|
+
# Extract skip items.
|
|
77
|
+
rule %r/(?i)\bSKIP\S*/, Comment::Preproc
|
|
78
|
+
|
|
79
|
+
rule %r/\S+/, Comment
|
|
80
|
+
|
|
81
|
+
rule %r/\n/ do
|
|
82
|
+
token Comment
|
|
83
|
+
pop! 2
|
|
84
|
+
end
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*- #
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
module Rouge
|
|
5
|
+
module Lexers
|
|
6
|
+
class TCL < RegexLexer
|
|
7
|
+
title "Tcl"
|
|
8
|
+
desc "The Tool Command Language (tcl.tk)"
|
|
9
|
+
tag 'tcl'
|
|
10
|
+
filenames '*.tcl'
|
|
11
|
+
mimetypes 'text/x-tcl', 'text/x-script.tcl', 'application/x-tcl'
|
|
12
|
+
|
|
13
|
+
def self.detect?(text)
|
|
14
|
+
return true if text.shebang? 'tclsh'
|
|
15
|
+
return true if text.shebang? 'wish'
|
|
16
|
+
return true if text.shebang? 'jimsh'
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
KEYWORDS = %w(
|
|
20
|
+
after apply array break catch continue elseif else error
|
|
21
|
+
eval expr for foreach global if namespace proc rename return
|
|
22
|
+
set switch then trace unset update uplevel upvar variable
|
|
23
|
+
vwait while
|
|
24
|
+
)
|
|
25
|
+
|
|
26
|
+
BUILTINS = %w(
|
|
27
|
+
append bgerror binary cd chan clock close concat dde dict
|
|
28
|
+
encoding eof exec exit fblocked fconfigure fcopy file
|
|
29
|
+
fileevent flush format gets glob history http incr info interp
|
|
30
|
+
join lappend lassign lindex linsert list llength load loadTk
|
|
31
|
+
lrange lrepeat lreplace lreverse lsearch lset lsort mathfunc
|
|
32
|
+
mathop memory msgcat open package pid pkg::create pkg_mkIndex
|
|
33
|
+
platform platform::shell puts pwd re_syntax read refchan
|
|
34
|
+
regexp registry regsub scan seek socket source split string
|
|
35
|
+
subst tell time tm unknown unload
|
|
36
|
+
)
|
|
37
|
+
|
|
38
|
+
OPEN = %w| \( \[ \{ " |
|
|
39
|
+
CLOSE = %w| \) \] \} |
|
|
40
|
+
ALL = OPEN + CLOSE
|
|
41
|
+
END_LINE = CLOSE + %w(; \n)
|
|
42
|
+
END_WORD = END_LINE + %w(\r \t \v)
|
|
43
|
+
|
|
44
|
+
CHARS = lambda { |list| Regexp.new %/[#{list.join}]/ }
|
|
45
|
+
NOT_CHARS = lambda { |list| Regexp.new %/[^#{list.join}]/ }
|
|
46
|
+
|
|
47
|
+
state :word do
|
|
48
|
+
rule %r/\{\*\}/, Keyword
|
|
49
|
+
|
|
50
|
+
mixin :brace_abort
|
|
51
|
+
mixin :interp
|
|
52
|
+
rule %r/\{/, Punctuation, :brace
|
|
53
|
+
rule %r/\(/, Punctuation, :paren
|
|
54
|
+
rule %r/"/, Str::Double, :string
|
|
55
|
+
rule %r/#{NOT_CHARS[END_WORD]}+?(?=#{CHARS[OPEN+['\\\\']]})/, Text
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
def self.gen_command_state(name='')
|
|
59
|
+
state(:"command#{name}") do
|
|
60
|
+
mixin :word
|
|
61
|
+
|
|
62
|
+
rule %r/##{NOT_CHARS[END_LINE]}+/, Comment::Single
|
|
63
|
+
|
|
64
|
+
rule %r/(?=#{CHARS[END_WORD]})/ do
|
|
65
|
+
push :"params#{name}"
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
rule %r/#{NOT_CHARS[END_WORD]}+/ do |m|
|
|
69
|
+
if KEYWORDS.include? m[0]
|
|
70
|
+
token Keyword
|
|
71
|
+
elsif BUILTINS.include? m[0]
|
|
72
|
+
token Name::Builtin
|
|
73
|
+
else
|
|
74
|
+
token Text
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
mixin :whitespace
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
def self.gen_delimiter_states(name, close, opts={})
|
|
83
|
+
gen_command_state("_in_#{name}")
|
|
84
|
+
|
|
85
|
+
state :"params_in_#{name}" do
|
|
86
|
+
rule close do
|
|
87
|
+
token Punctuation
|
|
88
|
+
pop! 2
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
# mismatched delimiters. Braced strings with mismatched
|
|
92
|
+
# closing delimiters should be okay, since this is standard
|
|
93
|
+
# practice, like {]]]]}
|
|
94
|
+
if opts[:strict]
|
|
95
|
+
rule CHARS[CLOSE - [close]], Error
|
|
96
|
+
else
|
|
97
|
+
rule CHARS[CLOSE - [close]], Text
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
mixin :params
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
state name do
|
|
104
|
+
rule close, Punctuation, :pop!
|
|
105
|
+
mixin :"command_in_#{name}"
|
|
106
|
+
end
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
# tcl is freaking impossible. If we're in braces and we encounter
|
|
111
|
+
# a close brace, we have to drop everything and close the brace.
|
|
112
|
+
# This is so silly things like {abc"def} and {abc]def} don't b0rk
|
|
113
|
+
# everything after them.
|
|
114
|
+
|
|
115
|
+
# TODO: TCL seems to have this aborting behavior quite a lot.
|
|
116
|
+
# such things as [ abc" ] are a runtime error, but will still
|
|
117
|
+
# parse. Currently something like this will muck up the lex.
|
|
118
|
+
state :brace_abort do
|
|
119
|
+
rule %r/}/ do
|
|
120
|
+
if in_state? :brace
|
|
121
|
+
pop! until state? :brace
|
|
122
|
+
pop!
|
|
123
|
+
token Punctuation
|
|
124
|
+
else
|
|
125
|
+
token Error
|
|
126
|
+
end
|
|
127
|
+
end
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
state :params do
|
|
131
|
+
rule %r/;/, Punctuation, :pop!
|
|
132
|
+
rule %r/\n/, Text, :pop!
|
|
133
|
+
rule %r/else|elseif|then/, Keyword
|
|
134
|
+
mixin :word
|
|
135
|
+
mixin :whitespace
|
|
136
|
+
rule %r/#{NOT_CHARS[END_WORD]}+/, Text
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
gen_delimiter_states :brace, /\}/, :strict => false
|
|
140
|
+
gen_delimiter_states :paren, /\)/, :strict => true
|
|
141
|
+
gen_delimiter_states :bracket, /\]/, :strict => true
|
|
142
|
+
gen_command_state
|
|
143
|
+
|
|
144
|
+
state :root do
|
|
145
|
+
mixin :command
|
|
146
|
+
end
|
|
147
|
+
|
|
148
|
+
state :whitespace do
|
|
149
|
+
# not a multiline regex because we want to capture \n sometimes
|
|
150
|
+
rule %r/\s+/, Text
|
|
151
|
+
end
|
|
152
|
+
|
|
153
|
+
state :interp do
|
|
154
|
+
rule %r/\[/, Punctuation, :bracket
|
|
155
|
+
rule %r/\$[a-z0-9.:-]+/, Name::Variable
|
|
156
|
+
rule %r/\$\{.*?\}/m, Name::Variable
|
|
157
|
+
rule %r/\$/, Text
|
|
158
|
+
|
|
159
|
+
# escape sequences
|
|
160
|
+
rule %r/\\[0-7]{3}/, Str::Escape
|
|
161
|
+
rule %r/\\x[0-9a-f]{2}/i, Str::Escape
|
|
162
|
+
rule %r/\\u[0-9a-f]{4}/i, Str::Escape
|
|
163
|
+
rule %r/\\./m, Str::Escape
|
|
164
|
+
end
|
|
165
|
+
|
|
166
|
+
state :string do
|
|
167
|
+
rule %r/"/, Str::Double, :pop!
|
|
168
|
+
mixin :interp
|
|
169
|
+
rule %r/[^\\\[\$"{}]+/m, Str::Double
|
|
170
|
+
|
|
171
|
+
# strings have to keep count of their internal braces, to support
|
|
172
|
+
# for example { "{ }" }.
|
|
173
|
+
rule %r/{/ do
|
|
174
|
+
@brace_count ||= 0
|
|
175
|
+
@brace_count += 1
|
|
176
|
+
|
|
177
|
+
token Str::Double
|
|
178
|
+
end
|
|
179
|
+
|
|
180
|
+
rule %r/}/ do
|
|
181
|
+
if in_state? :brace and @brace_count.to_i == 0
|
|
182
|
+
pop! until state? :brace
|
|
183
|
+
pop!
|
|
184
|
+
token Punctuation
|
|
185
|
+
else
|
|
186
|
+
@brace_count -= 1
|
|
187
|
+
token Str::Double
|
|
188
|
+
end
|
|
189
|
+
end
|
|
190
|
+
end
|
|
191
|
+
end
|
|
192
|
+
end
|
|
193
|
+
end
|