rouge 3.17.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 +93 -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/cython +6 -0
- data/lib/rouge/demos/d +16 -0
- data/lib/rouge/demos/dart +6 -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-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/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/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/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/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 +516 -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 +73 -0
- data/lib/rouge/lexers/apache/keywords.yml +764 -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 +207 -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 +174 -0
- data/lib/rouge/lexers/coq.rb +191 -0
- data/lib/rouge/lexers/cpp.rb +82 -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/cython.rb +151 -0
- data/lib/rouge/lexers/d.rb +177 -0
- data/lib/rouge/lexers/dart.rb +105 -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 +119 -0
- data/lib/rouge/lexers/gdscript.rb +171 -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/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 +69 -0
- data/lib/rouge/lexers/json_doc.rb +25 -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 +127 -0
- data/lib/rouge/lexers/lasso.rb +215 -0
- data/lib/rouge/lexers/lasso/keywords.yml +446 -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 +81 -0
- data/lib/rouge/lexers/matlab/builtins.yml +3515 -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 +216 -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 +248 -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 +545 -0
- data/lib/rouge/lexers/reasonml.rb +65 -0
- data/lib/rouge/lexers/robot_framework.rb +249 -0
- data/lib/rouge/lexers/ruby.rb +444 -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/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 +113 -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 +30 -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 +124 -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/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 +476 -0
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*- #
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
module Rouge
|
|
5
|
+
module Lexers
|
|
6
|
+
class Coq < RegexLexer
|
|
7
|
+
title "Coq"
|
|
8
|
+
desc 'Coq (coq.inria.fr)'
|
|
9
|
+
tag 'coq'
|
|
10
|
+
mimetypes 'text/x-coq'
|
|
11
|
+
|
|
12
|
+
def self.gallina
|
|
13
|
+
@gallina ||= Set.new %w(
|
|
14
|
+
as fun if in let match then else return end Type Set Prop
|
|
15
|
+
forall
|
|
16
|
+
)
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def self.coq
|
|
20
|
+
@coq ||= Set.new %w(
|
|
21
|
+
Definition Theorem Lemma Remark Example Fixpoint CoFixpoint
|
|
22
|
+
Record Inductive CoInductive Corollary Goal Proof
|
|
23
|
+
Ltac Require Import Export Module Section End Variable
|
|
24
|
+
Context Polymorphic Monomorphic Universe Universes
|
|
25
|
+
Variables Class Instance Global Local Include
|
|
26
|
+
Printing Notation Infix Arguments Hint Rewrite Immediate
|
|
27
|
+
Qed Defined Opaque Transparent Existing
|
|
28
|
+
Compute Eval Print SearchAbout Search About Check
|
|
29
|
+
)
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def self.ltac
|
|
33
|
+
@ltac ||= Set.new %w(
|
|
34
|
+
apply eapply auto eauto rewrite setoid_rewrite
|
|
35
|
+
with in as at destruct split inversion injection
|
|
36
|
+
intro intros unfold fold cbv cbn lazy subst
|
|
37
|
+
clear symmetry transitivity etransitivity erewrite
|
|
38
|
+
edestruct constructor econstructor eexists exists
|
|
39
|
+
f_equal refine instantiate revert simpl
|
|
40
|
+
specialize generalize dependent red induction
|
|
41
|
+
beta iota zeta delta exfalso autorewrite setoid_rewrite
|
|
42
|
+
compute vm_compute native_compute
|
|
43
|
+
)
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def self.tacticals
|
|
47
|
+
@tacticals ||= Set.new %w(
|
|
48
|
+
repeat first try
|
|
49
|
+
)
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def self.terminators
|
|
53
|
+
@terminators ||= Set.new %w(
|
|
54
|
+
omega solve congruence reflexivity exact
|
|
55
|
+
assumption eassumption
|
|
56
|
+
)
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
def self.keyopts
|
|
60
|
+
@keyopts ||= Set.new %w(
|
|
61
|
+
:= => -> /\\ \\/ _ ; :> : ⇒ → ↔ ⇔ ≔ ≡ ∀ ∃ ∧ ∨ ¬ ⊤ ⊥ ⊢ ⊨ ∈
|
|
62
|
+
)
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
def self.end_sentence
|
|
66
|
+
@end_sentence ||= Punctuation::Indicator
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
def self.classify(x)
|
|
70
|
+
if self.coq.include? x
|
|
71
|
+
return Keyword
|
|
72
|
+
elsif self.gallina.include? x
|
|
73
|
+
return Keyword::Reserved
|
|
74
|
+
elsif self.ltac.include? x
|
|
75
|
+
return Keyword::Pseudo
|
|
76
|
+
elsif self.terminators.include? x
|
|
77
|
+
return Name::Exception
|
|
78
|
+
elsif self.tacticals.include? x
|
|
79
|
+
return Keyword::Pseudo
|
|
80
|
+
else
|
|
81
|
+
return Name::Constant
|
|
82
|
+
end
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
operator = %r([\[\];,{}_()!$%&*+./:<=>?@^|~#-]+)
|
|
86
|
+
id = /(?:[a-z][\w']*)|(?:[_a-z][\w']+)/i
|
|
87
|
+
dot_id = /\.((?:[a-z][\w']*)|(?:[_a-z][\w']+))/i
|
|
88
|
+
dot_space = /\.(\s+)/
|
|
89
|
+
module_type = /Module(\s+)Type(\s+)/
|
|
90
|
+
set_options = /(Set|Unset)(\s+)(Universe|Printing|Implicit|Strict)(\s+)(Polymorphism|All|Notations|Arguments|Universes|Implicit)(\s*)\./m
|
|
91
|
+
|
|
92
|
+
state :root do
|
|
93
|
+
rule %r/[(][*](?![)])/, Comment, :comment
|
|
94
|
+
rule %r/\s+/m, Text::Whitespace
|
|
95
|
+
rule module_type do |m|
|
|
96
|
+
token Keyword , 'Module'
|
|
97
|
+
token Text::Whitespace , m[1]
|
|
98
|
+
token Keyword , 'Type'
|
|
99
|
+
token Text::Whitespace , m[2]
|
|
100
|
+
end
|
|
101
|
+
rule set_options do |m|
|
|
102
|
+
token Keyword , m[1]
|
|
103
|
+
i = 2
|
|
104
|
+
while m[i] != ''
|
|
105
|
+
token Text::Whitespace , m[i]
|
|
106
|
+
token Keyword , m[i+1]
|
|
107
|
+
i += 2
|
|
108
|
+
end
|
|
109
|
+
token self.class.end_sentence , '.'
|
|
110
|
+
end
|
|
111
|
+
rule id do |m|
|
|
112
|
+
@name = m[0]
|
|
113
|
+
@continue = false
|
|
114
|
+
push :continue_id
|
|
115
|
+
end
|
|
116
|
+
rule %r(/\\), Operator
|
|
117
|
+
rule %r/\\\//, Operator
|
|
118
|
+
|
|
119
|
+
rule %r/-?\d[\d_]*(.[\d_]*)?(e[+-]?\d[\d_]*)/i, Num::Float
|
|
120
|
+
rule %r/\d[\d_]*/, Num::Integer
|
|
121
|
+
|
|
122
|
+
rule %r/'(?:(\\[\\"'ntbr ])|(\\[0-9]{3})|(\\x\h{2}))'/, Str::Char
|
|
123
|
+
rule %r/'/, Keyword
|
|
124
|
+
rule %r/"/, Str::Double, :string
|
|
125
|
+
rule %r/[~?]#{id}/, Name::Variable
|
|
126
|
+
|
|
127
|
+
rule %r/./ do |m|
|
|
128
|
+
match = m[0]
|
|
129
|
+
if self.class.keyopts.include? match
|
|
130
|
+
token Punctuation
|
|
131
|
+
elsif match =~ operator
|
|
132
|
+
token Operator
|
|
133
|
+
else
|
|
134
|
+
token Error
|
|
135
|
+
end
|
|
136
|
+
end
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
state :comment do
|
|
140
|
+
rule %r/[^(*)]+/, Comment
|
|
141
|
+
rule(/[(][*]/) { token Comment; push }
|
|
142
|
+
rule %r/[*][)]/, Comment, :pop!
|
|
143
|
+
rule %r/[(*)]/, Comment
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
state :string do
|
|
147
|
+
rule %r/(?:\\")+|[^"]/, Str::Double
|
|
148
|
+
mixin :escape_sequence
|
|
149
|
+
rule %r/\\\n/, Str::Double
|
|
150
|
+
rule %r/"/, Str::Double, :pop!
|
|
151
|
+
end
|
|
152
|
+
|
|
153
|
+
state :escape_sequence do
|
|
154
|
+
rule %r/\\[\\"'ntbr]/, Str::Escape
|
|
155
|
+
end
|
|
156
|
+
|
|
157
|
+
state :continue_id do
|
|
158
|
+
# the stream starts with an id (stored in @name) and continues here
|
|
159
|
+
rule dot_id do |m|
|
|
160
|
+
token Name::Namespace , @name
|
|
161
|
+
token Punctuation , '.'
|
|
162
|
+
@continue = true
|
|
163
|
+
@name = m[1]
|
|
164
|
+
end
|
|
165
|
+
rule dot_space do |m|
|
|
166
|
+
if @continue
|
|
167
|
+
token Name::Constant , @name
|
|
168
|
+
else
|
|
169
|
+
token self.class.classify(@name) , @name
|
|
170
|
+
end
|
|
171
|
+
token self.class.end_sentence , '.'
|
|
172
|
+
token Text::Whitespace , m[1]
|
|
173
|
+
@name = false
|
|
174
|
+
@continue = false
|
|
175
|
+
pop!
|
|
176
|
+
end
|
|
177
|
+
rule %r// do
|
|
178
|
+
if @continue
|
|
179
|
+
token Name::Constant , @name
|
|
180
|
+
else
|
|
181
|
+
token self.class.classify(@name) , @name
|
|
182
|
+
end
|
|
183
|
+
@name = false
|
|
184
|
+
@continue = false
|
|
185
|
+
pop!
|
|
186
|
+
end
|
|
187
|
+
end
|
|
188
|
+
|
|
189
|
+
end
|
|
190
|
+
end
|
|
191
|
+
end
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*- #
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
module Rouge
|
|
5
|
+
module Lexers
|
|
6
|
+
load_lexer 'c.rb'
|
|
7
|
+
|
|
8
|
+
class Cpp < C
|
|
9
|
+
title "C++"
|
|
10
|
+
desc "The C++ programming language"
|
|
11
|
+
|
|
12
|
+
tag 'cpp'
|
|
13
|
+
aliases 'c++'
|
|
14
|
+
# the many varied filenames of c++ source files...
|
|
15
|
+
filenames '*.cpp', '*.hpp',
|
|
16
|
+
'*.c++', '*.h++',
|
|
17
|
+
'*.cc', '*.hh',
|
|
18
|
+
'*.cxx', '*.hxx',
|
|
19
|
+
'*.pde', '*.ino',
|
|
20
|
+
'*.tpp', '*.h'
|
|
21
|
+
mimetypes 'text/x-c++hdr', 'text/x-c++src'
|
|
22
|
+
|
|
23
|
+
def self.keywords
|
|
24
|
+
@keywords ||= super + Set.new(%w(
|
|
25
|
+
asm auto catch const_cast delete dynamic_cast explicit export
|
|
26
|
+
friend mutable namespace new operator private protected public
|
|
27
|
+
reinterpret_cast restrict size_of static_cast template this throw
|
|
28
|
+
throws typeid typename using virtual final override
|
|
29
|
+
|
|
30
|
+
alignas alignof constexpr decltype noexcept static_assert
|
|
31
|
+
thread_local try
|
|
32
|
+
))
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def self.keywords_type
|
|
36
|
+
@keywords_type ||= super + Set.new(%w(
|
|
37
|
+
bool
|
|
38
|
+
))
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def self.reserved
|
|
42
|
+
@reserved ||= super + Set.new(%w(
|
|
43
|
+
__virtual_inheritance __uuidof __super __single_inheritance
|
|
44
|
+
__multiple_inheritance __interface __event
|
|
45
|
+
))
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
id = /[a-zA-Z_][a-zA-Z0-9_]*/
|
|
49
|
+
|
|
50
|
+
prepend :root do
|
|
51
|
+
# Offload C++ extensions, http://offload.codeplay.com/
|
|
52
|
+
rule %r/(?:__offload|__blockingoffload|__outer)\b/, Keyword::Pseudo
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
# digits with optional inner quotes
|
|
56
|
+
# see www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3781.pdf
|
|
57
|
+
dq = /\d('?\d)*/
|
|
58
|
+
|
|
59
|
+
prepend :statements do
|
|
60
|
+
rule %r/class\b/, Keyword, :classname
|
|
61
|
+
rule %r/\d+(\.\d+)?(?:h|(?:min)|s|(?:ms)|(?:us)|(?:ns))/, Num::Other
|
|
62
|
+
rule %r((#{dq}[.]#{dq}?|[.]#{dq})(e[+-]?#{dq}[lu]*)?)i, Num::Float
|
|
63
|
+
rule %r(#{dq}e[+-]?#{dq}[lu]*)i, Num::Float
|
|
64
|
+
rule %r/0x\h('?\h)*[lu]*/i, Num::Hex
|
|
65
|
+
rule %r/0b[01]+(?:_[01]+)*/, Num::Bin
|
|
66
|
+
rule %r/0[0-7]('?[0-7])*[lu]*/i, Num::Oct
|
|
67
|
+
rule %r/#{dq}[lu]*/i, Num::Integer
|
|
68
|
+
rule %r/\bnullptr\b/, Name::Builtin
|
|
69
|
+
rule %r/(?:u8|u|U|L)?R"([a-zA-Z0-9_{}\[\]#<>%:;.?*\+\-\/\^&|~!=,"']{,16})\(.*?\)\1"/m, Str
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
state :classname do
|
|
73
|
+
rule id, Name::Class, :pop!
|
|
74
|
+
|
|
75
|
+
# template specification
|
|
76
|
+
rule %r/\s*(?=>)/m, Text, :pop!
|
|
77
|
+
rule %r/[.]{3}/, Operator
|
|
78
|
+
mixin :whitespace
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
end
|
|
@@ -0,0 +1,430 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*- #
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
module Rouge
|
|
5
|
+
module Lexers
|
|
6
|
+
class Crystal < RegexLexer
|
|
7
|
+
title "Crystal"
|
|
8
|
+
desc "Crystal The Programming Language (crystal-lang.org)"
|
|
9
|
+
tag 'crystal'
|
|
10
|
+
aliases 'cr'
|
|
11
|
+
filenames '*.cr'
|
|
12
|
+
|
|
13
|
+
mimetypes 'text/x-crystal', 'application/x-crystal'
|
|
14
|
+
|
|
15
|
+
def self.detect?(text)
|
|
16
|
+
return true if text.shebang? 'crystal'
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
state :symbols do
|
|
20
|
+
# symbols
|
|
21
|
+
rule %r(
|
|
22
|
+
: # initial :
|
|
23
|
+
@{0,2} # optional ivar, for :@foo and :@@foo
|
|
24
|
+
[a-z_]\w*[!?]? # the symbol
|
|
25
|
+
)xi, Str::Symbol
|
|
26
|
+
|
|
27
|
+
# special symbols
|
|
28
|
+
rule %r(:(?:\*\*|[-+]@|[/\%&\|^`~]|\[\]=?|<<|>>|<=?>|<=?|===?)),
|
|
29
|
+
Str::Symbol
|
|
30
|
+
|
|
31
|
+
rule %r/:'(\\\\|\\'|[^'])*'/, Str::Symbol
|
|
32
|
+
rule %r/:"/, Str::Symbol, :simple_sym
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
state :sigil_strings do
|
|
36
|
+
# %-sigiled strings
|
|
37
|
+
# %(abc), %[abc], %<abc>, %.abc., %r.abc., etc
|
|
38
|
+
delimiter_map = { '{' => '}', '[' => ']', '(' => ')', '<' => '>' }
|
|
39
|
+
rule %r/%([rqswQWxiI])?([^\w\s])/ do |m|
|
|
40
|
+
open = Regexp.escape(m[2])
|
|
41
|
+
close = Regexp.escape(delimiter_map[m[2]] || m[2])
|
|
42
|
+
interp = /[rQWxI]/ === m[1]
|
|
43
|
+
toktype = Str::Other
|
|
44
|
+
|
|
45
|
+
puts " open: #{open.inspect}" if @debug
|
|
46
|
+
puts " close: #{close.inspect}" if @debug
|
|
47
|
+
|
|
48
|
+
# regexes
|
|
49
|
+
if m[1] == 'r'
|
|
50
|
+
toktype = Str::Regex
|
|
51
|
+
push :regex_flags
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
token toktype
|
|
55
|
+
|
|
56
|
+
push do
|
|
57
|
+
rule %r/\\[##{open}#{close}\\]/, Str::Escape
|
|
58
|
+
# nesting rules only with asymmetric delimiters
|
|
59
|
+
if open != close
|
|
60
|
+
rule %r/#{open}/ do
|
|
61
|
+
token toktype
|
|
62
|
+
push
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
rule %r/#{close}/, toktype, :pop!
|
|
66
|
+
|
|
67
|
+
if interp
|
|
68
|
+
mixin :string_intp_escaped
|
|
69
|
+
rule %r/#/, toktype
|
|
70
|
+
else
|
|
71
|
+
rule %r/[\\#]/, toktype
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
rule %r/[^##{open}#{close}\\]+/m, toktype
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
state :strings do
|
|
80
|
+
mixin :symbols
|
|
81
|
+
rule %r/\b[a-z_]\w*?[?!]?:\s+/, Str::Symbol, :expr_start
|
|
82
|
+
rule %r/'(\\\\|\\'|[^'])*'/, Str::Single
|
|
83
|
+
rule %r/"/, Str::Double, :simple_string
|
|
84
|
+
rule %r/(?<!\.)`/, Str::Backtick, :simple_backtick
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
state :regex_flags do
|
|
88
|
+
rule %r/[mixounse]*/, Str::Regex, :pop!
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
# double-quoted string and symbol
|
|
92
|
+
[[:string, Str::Double, '"'],
|
|
93
|
+
[:sym, Str::Symbol, '"'],
|
|
94
|
+
[:backtick, Str::Backtick, '`']].each do |name, tok, fin|
|
|
95
|
+
state :"simple_#{name}" do
|
|
96
|
+
mixin :string_intp_escaped
|
|
97
|
+
rule %r/[^\\#{fin}#]+/m, tok
|
|
98
|
+
rule %r/[\\#]/, tok
|
|
99
|
+
rule %r/#{fin}/, tok, :pop!
|
|
100
|
+
end
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
keywords = %w(
|
|
104
|
+
BEGIN END alias begin break case defined\? do else elsif end
|
|
105
|
+
ensure for if ifdef in next redo rescue raise retry return super then
|
|
106
|
+
undef unless until when while yield lib fun type of as
|
|
107
|
+
)
|
|
108
|
+
|
|
109
|
+
keywords_pseudo = %w(
|
|
110
|
+
initialize new loop include extend raise attr_reader attr_writer
|
|
111
|
+
attr_accessor alias_method attr catch throw private module_function
|
|
112
|
+
public protected true false nil __FILE__ __LINE__
|
|
113
|
+
getter getter? getter! property property? property! struct record
|
|
114
|
+
)
|
|
115
|
+
|
|
116
|
+
builtins_g = %w(
|
|
117
|
+
abort ancestors at_exit
|
|
118
|
+
caller catch chomp chop clone constants
|
|
119
|
+
display dup eval exec exit extend fail fork format freeze
|
|
120
|
+
getc gets global_variables gsub hash id included_modules
|
|
121
|
+
inspect instance_eval instance_method instance_methods
|
|
122
|
+
lambda loop method method_missing
|
|
123
|
+
methods module_eval name object_id open p print printf
|
|
124
|
+
proc putc puts raise rand
|
|
125
|
+
readline readlines require scan select self send
|
|
126
|
+
sleep split sprintf srand sub syscall system
|
|
127
|
+
test throw to_a to_s trap warn
|
|
128
|
+
)
|
|
129
|
+
|
|
130
|
+
builtins_q = %w(
|
|
131
|
+
eql equal include is_a iterator kind_of nil
|
|
132
|
+
)
|
|
133
|
+
|
|
134
|
+
builtins_b = %w(chomp chop exit gsub sub)
|
|
135
|
+
|
|
136
|
+
start do
|
|
137
|
+
push :expr_start
|
|
138
|
+
@heredoc_queue = []
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
state :whitespace do
|
|
142
|
+
mixin :inline_whitespace
|
|
143
|
+
rule %r/\n\s*/m, Text, :expr_start
|
|
144
|
+
rule %r/#.*$/, Comment::Single
|
|
145
|
+
|
|
146
|
+
rule %r(=begin\b.*?\n=end\b)m, Comment::Multiline
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
state :inline_whitespace do
|
|
150
|
+
rule %r/[ \t\r]+/, Text
|
|
151
|
+
end
|
|
152
|
+
|
|
153
|
+
state :root do
|
|
154
|
+
mixin :whitespace
|
|
155
|
+
rule %r/__END__/, Comment::Preproc, :end_part
|
|
156
|
+
|
|
157
|
+
rule %r/0_?[0-7]+(?:_[0-7]+)*/, Num::Oct
|
|
158
|
+
rule %r/0x[0-9A-Fa-f]+(?:_[0-9A-Fa-f]+)*/, Num::Hex
|
|
159
|
+
rule %r/0b[01]+(?:_[01]+)*/, Num::Bin
|
|
160
|
+
rule %r/\d+\.\d+(e[\+\-]?\d+)?/, Num::Float
|
|
161
|
+
rule %r/[\d]+(?:_\d+)*/, Num::Integer
|
|
162
|
+
|
|
163
|
+
rule %r/@\[([^\]]+)\]/, Name::Decorator
|
|
164
|
+
|
|
165
|
+
# names
|
|
166
|
+
rule %r/@@[a-z_]\w*/i, Name::Variable::Class
|
|
167
|
+
rule %r/@[a-z_]\w*/i, Name::Variable::Instance
|
|
168
|
+
rule %r/\$\w+/, Name::Variable::Global
|
|
169
|
+
rule %r(\$[!@&`'+~=/\\,;.<>_*\$?:"]), Name::Variable::Global
|
|
170
|
+
rule %r/\$-[0adFiIlpvw]/, Name::Variable::Global
|
|
171
|
+
rule %r/::/, Operator
|
|
172
|
+
|
|
173
|
+
mixin :strings
|
|
174
|
+
|
|
175
|
+
rule %r/(?:#{keywords.join('|')})\b/, Keyword, :expr_start
|
|
176
|
+
rule %r/(?:#{keywords_pseudo.join('|')})\b/, Keyword::Pseudo, :expr_start
|
|
177
|
+
|
|
178
|
+
rule %r(
|
|
179
|
+
(module)
|
|
180
|
+
(\s+)
|
|
181
|
+
([a-zA-Z_][a-zA-Z0-9_]*(::[a-zA-Z_][a-zA-Z0-9_]*)*)
|
|
182
|
+
)x do
|
|
183
|
+
groups Keyword, Text, Name::Namespace
|
|
184
|
+
end
|
|
185
|
+
|
|
186
|
+
rule %r/(def\b)(\s*)/ do
|
|
187
|
+
groups Keyword, Text
|
|
188
|
+
push :funcname
|
|
189
|
+
end
|
|
190
|
+
|
|
191
|
+
rule %r/(class\b)(\s*)/ do
|
|
192
|
+
groups Keyword, Text
|
|
193
|
+
push :classname
|
|
194
|
+
end
|
|
195
|
+
|
|
196
|
+
rule %r/(?:#{builtins_q.join('|')})[?]/, Name::Builtin, :expr_start
|
|
197
|
+
rule %r/(?:#{builtins_b.join('|')})!/, Name::Builtin, :expr_start
|
|
198
|
+
rule %r/(?<!\.)(?:#{builtins_g.join('|')})\b/,
|
|
199
|
+
Name::Builtin, :method_call
|
|
200
|
+
|
|
201
|
+
mixin :has_heredocs
|
|
202
|
+
|
|
203
|
+
# `..` and `...` for ranges must have higher priority than `.`
|
|
204
|
+
# Otherwise, they will be parsed as :method_call
|
|
205
|
+
rule %r/\.{2,3}/, Operator, :expr_start
|
|
206
|
+
|
|
207
|
+
rule %r/[A-Z][a-zA-Z0-9_]*/, Name::Constant, :method_call
|
|
208
|
+
rule %r/(\.|::)(\s*)([a-z_]\w*[!?]?|[*%&^`~+-\/\[<>=])/ do
|
|
209
|
+
groups Punctuation, Text, Name::Function
|
|
210
|
+
push :method_call
|
|
211
|
+
end
|
|
212
|
+
|
|
213
|
+
rule %r/[a-zA-Z_]\w*[?!]/, Name, :expr_start
|
|
214
|
+
rule %r/[a-zA-Z_]\w*/, Name, :method_call
|
|
215
|
+
rule %r/\*\*|<<?|>>?|>=|<=|<=>|=~|={3}|!~|&&?|\|\||\./,
|
|
216
|
+
Operator, :expr_start
|
|
217
|
+
rule %r/[-+\/*%=<>&!^|~]=?/, Operator, :expr_start
|
|
218
|
+
rule(/[?]/) { token Punctuation; push :ternary; push :expr_start }
|
|
219
|
+
rule %r<[\[({,:\\;/]>, Punctuation, :expr_start
|
|
220
|
+
rule %r<[\])}]>, Punctuation
|
|
221
|
+
end
|
|
222
|
+
|
|
223
|
+
state :has_heredocs do
|
|
224
|
+
rule %r/(?<!\w)(<<[-~]?)(["`']?)([a-zA-Z_]\w*)(\2)/ do |m|
|
|
225
|
+
token Operator, m[1]
|
|
226
|
+
token Name::Constant, "#{m[2]}#{m[3]}#{m[4]}"
|
|
227
|
+
@heredoc_queue << [['<<-', '<<~'].include?(m[1]), m[3]]
|
|
228
|
+
push :heredoc_queue unless state? :heredoc_queue
|
|
229
|
+
end
|
|
230
|
+
|
|
231
|
+
rule %r/(<<[-~]?)(["'])(\2)/ do |m|
|
|
232
|
+
token Operator, m[1]
|
|
233
|
+
token Name::Constant, "#{m[2]}#{m[3]}#{m[4]}"
|
|
234
|
+
@heredoc_queue << [['<<-', '<<~'].include?(m[1]), '']
|
|
235
|
+
push :heredoc_queue unless state? :heredoc_queue
|
|
236
|
+
end
|
|
237
|
+
end
|
|
238
|
+
|
|
239
|
+
state :heredoc_queue do
|
|
240
|
+
rule %r/(?=\n)/ do
|
|
241
|
+
goto :resolve_heredocs
|
|
242
|
+
end
|
|
243
|
+
|
|
244
|
+
mixin :root
|
|
245
|
+
end
|
|
246
|
+
|
|
247
|
+
state :resolve_heredocs do
|
|
248
|
+
mixin :string_intp_escaped
|
|
249
|
+
|
|
250
|
+
rule %r/\n/, Str::Heredoc, :test_heredoc
|
|
251
|
+
rule %r/[#\\\n]/, Str::Heredoc
|
|
252
|
+
rule %r/[^#\\\n]+/, Str::Heredoc
|
|
253
|
+
end
|
|
254
|
+
|
|
255
|
+
state :test_heredoc do
|
|
256
|
+
rule %r/[^#\\\n]*$/ do |m|
|
|
257
|
+
tolerant, heredoc_name = @heredoc_queue.first
|
|
258
|
+
check = tolerant ? m[0].strip : m[0].rstrip
|
|
259
|
+
|
|
260
|
+
# check if we found the end of the heredoc
|
|
261
|
+
puts " end heredoc check #{check.inspect} = #{heredoc_name.inspect}" if @debug
|
|
262
|
+
if check == heredoc_name
|
|
263
|
+
@heredoc_queue.shift
|
|
264
|
+
# if there's no more, we're done looking.
|
|
265
|
+
pop! if @heredoc_queue.empty?
|
|
266
|
+
token Name::Constant
|
|
267
|
+
else
|
|
268
|
+
token Str::Heredoc
|
|
269
|
+
end
|
|
270
|
+
|
|
271
|
+
pop!
|
|
272
|
+
end
|
|
273
|
+
|
|
274
|
+
rule(//) { pop! }
|
|
275
|
+
end
|
|
276
|
+
|
|
277
|
+
state :funcname do
|
|
278
|
+
rule %r/\s+/, Text
|
|
279
|
+
rule %r/\(/, Punctuation, :defexpr
|
|
280
|
+
rule %r(
|
|
281
|
+
(?:([a-zA-Z_]\w*)(\.))?
|
|
282
|
+
(
|
|
283
|
+
[a-zA-Z_]\w*[!?]? |
|
|
284
|
+
\*\*? | [-+]@? | [/%&\|^`~] | \[\]=? |
|
|
285
|
+
<<? | >>? | <=>? | >= | ===?
|
|
286
|
+
)
|
|
287
|
+
)x do |m|
|
|
288
|
+
puts "matches: #{[m[0], m[1], m[2], m[3]].inspect}" if @debug
|
|
289
|
+
groups Name::Class, Operator, Name::Function
|
|
290
|
+
pop!
|
|
291
|
+
end
|
|
292
|
+
|
|
293
|
+
rule(//) { pop! }
|
|
294
|
+
end
|
|
295
|
+
|
|
296
|
+
state :classname do
|
|
297
|
+
rule %r/\s+/, Text
|
|
298
|
+
rule %r/\(/ do
|
|
299
|
+
token Punctuation
|
|
300
|
+
push :defexpr
|
|
301
|
+
push :expr_start
|
|
302
|
+
end
|
|
303
|
+
|
|
304
|
+
# class << expr
|
|
305
|
+
rule %r/<</ do
|
|
306
|
+
token Operator
|
|
307
|
+
goto :expr_start
|
|
308
|
+
end
|
|
309
|
+
|
|
310
|
+
rule %r/[A-Z_]\w*/, Name::Class, :pop!
|
|
311
|
+
|
|
312
|
+
rule(//) { pop! }
|
|
313
|
+
end
|
|
314
|
+
|
|
315
|
+
state :ternary do
|
|
316
|
+
rule(/:(?!:)/) { token Punctuation; goto :expr_start }
|
|
317
|
+
|
|
318
|
+
mixin :root
|
|
319
|
+
end
|
|
320
|
+
|
|
321
|
+
state :defexpr do
|
|
322
|
+
rule %r/(\))(\.|::)?/ do
|
|
323
|
+
groups Punctuation, Operator
|
|
324
|
+
pop!
|
|
325
|
+
end
|
|
326
|
+
rule %r/\(/ do
|
|
327
|
+
token Punctuation
|
|
328
|
+
push :defexpr
|
|
329
|
+
push :expr_start
|
|
330
|
+
end
|
|
331
|
+
|
|
332
|
+
mixin :root
|
|
333
|
+
end
|
|
334
|
+
|
|
335
|
+
state :in_interp do
|
|
336
|
+
rule %r/}/, Str::Interpol, :pop!
|
|
337
|
+
mixin :root
|
|
338
|
+
end
|
|
339
|
+
|
|
340
|
+
state :string_intp do
|
|
341
|
+
rule %r/[#][{]/, Str::Interpol, :in_interp
|
|
342
|
+
rule %r/#(@@?|\$)[a-z_]\w*/i, Str::Interpol
|
|
343
|
+
end
|
|
344
|
+
|
|
345
|
+
state :string_intp_escaped do
|
|
346
|
+
mixin :string_intp
|
|
347
|
+
rule %r/\\([\\abefnrstv#"']|x[a-fA-F0-9]{1,2}|[0-7]{1,3})/,
|
|
348
|
+
Str::Escape
|
|
349
|
+
rule %r/\\./, Str::Escape
|
|
350
|
+
end
|
|
351
|
+
|
|
352
|
+
state :method_call do
|
|
353
|
+
rule %r(/) do
|
|
354
|
+
token Operator
|
|
355
|
+
goto :expr_start
|
|
356
|
+
end
|
|
357
|
+
|
|
358
|
+
rule(/(?=\n)/) { pop! }
|
|
359
|
+
|
|
360
|
+
rule(//) { goto :method_call_spaced }
|
|
361
|
+
end
|
|
362
|
+
|
|
363
|
+
state :method_call_spaced do
|
|
364
|
+
mixin :whitespace
|
|
365
|
+
|
|
366
|
+
rule %r([%/]=) do
|
|
367
|
+
token Operator
|
|
368
|
+
goto :expr_start
|
|
369
|
+
end
|
|
370
|
+
|
|
371
|
+
rule %r((/)(?=\S|\s*/)) do
|
|
372
|
+
token Str::Regex
|
|
373
|
+
goto :slash_regex
|
|
374
|
+
end
|
|
375
|
+
|
|
376
|
+
mixin :sigil_strings
|
|
377
|
+
|
|
378
|
+
rule(%r((?=\s*/))) { pop! }
|
|
379
|
+
|
|
380
|
+
rule(/\s+/) { token Text; goto :expr_start }
|
|
381
|
+
rule(//) { pop! }
|
|
382
|
+
end
|
|
383
|
+
|
|
384
|
+
state :expr_start do
|
|
385
|
+
mixin :inline_whitespace
|
|
386
|
+
|
|
387
|
+
rule %r(/) do
|
|
388
|
+
token Str::Regex
|
|
389
|
+
goto :slash_regex
|
|
390
|
+
end
|
|
391
|
+
|
|
392
|
+
# char operator. ?x evaulates to "x", unless there's a digit
|
|
393
|
+
# beforehand like x>=0?n[x]:""
|
|
394
|
+
rule %r(
|
|
395
|
+
[?](\\[MC]-)* # modifiers
|
|
396
|
+
(\\([\\abefnrstv\#"']|x[a-fA-F0-9]{1,2}|[0-7]{1,3})|\S)
|
|
397
|
+
(?!\w)
|
|
398
|
+
)x, Str::Char, :pop!
|
|
399
|
+
|
|
400
|
+
# special case for using a single space. Ruby demands that
|
|
401
|
+
# these be in a single line, otherwise it would make no sense.
|
|
402
|
+
rule %r/(\s*)(%[rqswQWxiI]? \S* )/ do
|
|
403
|
+
groups Text, Str::Other
|
|
404
|
+
pop!
|
|
405
|
+
end
|
|
406
|
+
|
|
407
|
+
mixin :sigil_strings
|
|
408
|
+
|
|
409
|
+
rule(//) { pop! }
|
|
410
|
+
end
|
|
411
|
+
|
|
412
|
+
state :slash_regex do
|
|
413
|
+
mixin :string_intp
|
|
414
|
+
rule %r(\\\\), Str::Regex
|
|
415
|
+
rule %r(\\/), Str::Regex
|
|
416
|
+
rule %r([\\#]), Str::Regex
|
|
417
|
+
rule %r([^\\/#]+)m, Str::Regex
|
|
418
|
+
rule %r(/) do
|
|
419
|
+
token Str::Regex
|
|
420
|
+
goto :regex_flags
|
|
421
|
+
end
|
|
422
|
+
end
|
|
423
|
+
|
|
424
|
+
state :end_part do
|
|
425
|
+
# eat up the rest of the stream as Comment::Preproc
|
|
426
|
+
rule %r/.+/m, Comment::Preproc, :pop!
|
|
427
|
+
end
|
|
428
|
+
end
|
|
429
|
+
end
|
|
430
|
+
end
|