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