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,56 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*- #
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
module Rouge
|
|
5
|
+
module Formatters
|
|
6
|
+
# Transforms a token stream into HTML output.
|
|
7
|
+
class HTML < Formatter
|
|
8
|
+
tag 'html'
|
|
9
|
+
|
|
10
|
+
# @yield the html output.
|
|
11
|
+
def stream(tokens, &b)
|
|
12
|
+
tokens.each { |tok, val| yield span(tok, val) }
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def span(tok, val)
|
|
16
|
+
return val if escape?(tok)
|
|
17
|
+
|
|
18
|
+
safe_span(tok, escape_special_html_chars(val))
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def safe_span(tok, safe_val)
|
|
22
|
+
if tok == Token::Tokens::Text
|
|
23
|
+
safe_val
|
|
24
|
+
else
|
|
25
|
+
shortname = tok.shortname \
|
|
26
|
+
or raise "unknown token: #{tok.inspect} for #{safe_val.inspect}"
|
|
27
|
+
|
|
28
|
+
"<span class=\"#{shortname}\">#{safe_val}</span>"
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
TABLE_FOR_ESCAPE_HTML = {
|
|
33
|
+
'&' => '&',
|
|
34
|
+
'<' => '<',
|
|
35
|
+
'>' => '>',
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
private
|
|
39
|
+
# A performance-oriented helper method to escape `&`, `<` and `>` for the rendered
|
|
40
|
+
# HTML from this formatter.
|
|
41
|
+
#
|
|
42
|
+
# `String#gsub` will always return a new string instance irrespective of whether
|
|
43
|
+
# a substitution occurs. This method however invokes `String#gsub` only if
|
|
44
|
+
# a substitution is imminent.
|
|
45
|
+
#
|
|
46
|
+
# Returns either the given `value` argument string as is or a new string with the
|
|
47
|
+
# special characters replaced with their escaped counterparts.
|
|
48
|
+
def escape_special_html_chars(value)
|
|
49
|
+
escape_regex = /[&<>]/
|
|
50
|
+
return value unless value =~ escape_regex
|
|
51
|
+
|
|
52
|
+
value.gsub(escape_regex, TABLE_FOR_ESCAPE_HTML)
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
end
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*- #
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
module Rouge
|
|
5
|
+
module Formatters
|
|
6
|
+
class HTMLInline < HTML
|
|
7
|
+
tag 'html_inline'
|
|
8
|
+
|
|
9
|
+
def initialize(theme)
|
|
10
|
+
if theme.is_a?(Class) && theme < Rouge::Theme
|
|
11
|
+
@theme = theme.new
|
|
12
|
+
elsif theme.is_a?(Rouge::Theme)
|
|
13
|
+
@theme = theme
|
|
14
|
+
elsif theme.is_a?(String)
|
|
15
|
+
@theme = Rouge::Theme.find(theme).new
|
|
16
|
+
else
|
|
17
|
+
raise ArgumentError, "invalid theme: #{theme.inspect}"
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def safe_span(tok, safe_val)
|
|
22
|
+
return safe_val if tok == Token::Tokens::Text
|
|
23
|
+
|
|
24
|
+
rules = @theme.style_for(tok).rendered_rules
|
|
25
|
+
|
|
26
|
+
"<span style=\"#{rules.to_a.join(';')}\">#{safe_val}</span>"
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*- #
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
# stdlib
|
|
5
|
+
require 'cgi'
|
|
6
|
+
|
|
7
|
+
module Rouge
|
|
8
|
+
module Formatters
|
|
9
|
+
# Transforms a token stream into HTML output.
|
|
10
|
+
class HTMLLegacy < Formatter
|
|
11
|
+
tag 'html_legacy'
|
|
12
|
+
|
|
13
|
+
# @option opts [String] :css_class ('highlight')
|
|
14
|
+
# @option opts [true/false] :line_numbers (false)
|
|
15
|
+
# @option opts [Rouge::CSSTheme] :inline_theme (nil)
|
|
16
|
+
# @option opts [true/false] :wrap (true)
|
|
17
|
+
#
|
|
18
|
+
# Initialize with options.
|
|
19
|
+
#
|
|
20
|
+
# If `:inline_theme` is given, then instead of rendering the
|
|
21
|
+
# tokens as <span> tags with CSS classes, the styles according to
|
|
22
|
+
# the given theme will be inlined in "style" attributes. This is
|
|
23
|
+
# useful for formats in which stylesheets are not available.
|
|
24
|
+
#
|
|
25
|
+
# Content will be wrapped in a tag (`div` if tableized, `pre` if
|
|
26
|
+
# not) with the given `:css_class` unless `:wrap` is set to `false`.
|
|
27
|
+
def initialize(opts={})
|
|
28
|
+
@formatter = opts[:inline_theme] ? HTMLInline.new(opts[:inline_theme])
|
|
29
|
+
: HTML.new
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
@formatter = HTMLTable.new(@formatter, opts) if opts[:line_numbers]
|
|
33
|
+
|
|
34
|
+
if opts.fetch(:wrap, true)
|
|
35
|
+
@formatter = HTMLPygments.new(@formatter, opts.fetch(:css_class, 'codehilite'))
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
# @yield the html output.
|
|
40
|
+
def stream(tokens, &b)
|
|
41
|
+
@formatter.stream(tokens, &b)
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*- #
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
module Rouge
|
|
5
|
+
module Formatters
|
|
6
|
+
class HTMLLineTable < Formatter
|
|
7
|
+
tag 'html_line_table'
|
|
8
|
+
|
|
9
|
+
# @param [Rouge::Formatters::Formatter] formatter An instance of a
|
|
10
|
+
# `Rouge::Formatters::HTML` or `Rouge::Formatters::HTMLInline`
|
|
11
|
+
# @param [Hash] opts options for HTMLLineTable instance.
|
|
12
|
+
# @option opts [Integer] :start_line line number to start from. Defaults to `1`.
|
|
13
|
+
# @option opts [String] :table_class Class name for the table.
|
|
14
|
+
# Defaults to `"rouge-line-table"`.
|
|
15
|
+
# @option opts [String] :line_id a `sprintf` template for generating an `id`
|
|
16
|
+
# attribute for each table row corresponding to current line number.
|
|
17
|
+
# Defaults to `"line-%i"`.
|
|
18
|
+
# @option opts [String] :line_class Class name for each table row.
|
|
19
|
+
# Defaults to `"lineno"`.
|
|
20
|
+
# @option opts [String] :gutter_class Class name for rendered line-number cell.
|
|
21
|
+
# Defaults to `"rouge-gutter"`.
|
|
22
|
+
# @option opts [String] :code_class Class name for rendered code cell.
|
|
23
|
+
# Defaults to `"rouge-code"`.
|
|
24
|
+
def initialize(formatter, opts={})
|
|
25
|
+
@formatter = formatter
|
|
26
|
+
@start_line = opts.fetch :start_line, 1
|
|
27
|
+
@table_class = opts.fetch :table_class, 'rouge-line-table'
|
|
28
|
+
@gutter_class = opts.fetch :gutter_class, 'rouge-gutter'
|
|
29
|
+
@code_class = opts.fetch :code_class, 'rouge-code'
|
|
30
|
+
@line_class = opts.fetch :line_class, 'lineno'
|
|
31
|
+
@line_id = opts.fetch :line_id, 'line-%i'
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def stream(tokens, &b)
|
|
35
|
+
lineno = @start_line - 1
|
|
36
|
+
buffer = [%(<table class="#@table_class"><tbody>)]
|
|
37
|
+
token_lines(tokens) do |line_tokens|
|
|
38
|
+
lineno += 1
|
|
39
|
+
buffer << %(<tr id="#{sprintf @line_id, lineno}" class="#@line_class">)
|
|
40
|
+
buffer << %(<td class="#@gutter_class gl" )
|
|
41
|
+
buffer << %(style="-moz-user-select: none;-ms-user-select: none;)
|
|
42
|
+
buffer << %(-webkit-user-select: none;user-select: none;">)
|
|
43
|
+
buffer << %(<pre>#{lineno}</pre></td>)
|
|
44
|
+
buffer << %(<td class="#@code_class"><pre>)
|
|
45
|
+
@formatter.stream(line_tokens) { |formatted| buffer << formatted }
|
|
46
|
+
buffer << "\n</pre></td></tr>"
|
|
47
|
+
end
|
|
48
|
+
buffer << %(</tbody></table>)
|
|
49
|
+
yield buffer.join
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
end
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*- #
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
module Rouge
|
|
5
|
+
module Formatters
|
|
6
|
+
class HTMLLinewise < Formatter
|
|
7
|
+
def initialize(formatter, opts={})
|
|
8
|
+
@formatter = formatter
|
|
9
|
+
@tag_name = opts.fetch(:tag_name, 'div')
|
|
10
|
+
@class_format = opts.fetch(:class, 'line-%i')
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def stream(tokens, &b)
|
|
14
|
+
lineno = 0
|
|
15
|
+
token_lines(tokens) do |line_tokens|
|
|
16
|
+
yield %(<#{@tag_name} class="#{sprintf @class_format, lineno += 1}">)
|
|
17
|
+
@formatter.stream(line_tokens) {|formatted| yield formatted }
|
|
18
|
+
yield %(\n</#{@tag_name}>)
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Rouge
|
|
4
|
+
module Formatters
|
|
5
|
+
class HTMLPygments < Formatter
|
|
6
|
+
def initialize(inner, css_class='codehilite')
|
|
7
|
+
@inner = inner
|
|
8
|
+
@css_class = css_class
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def stream(tokens, &b)
|
|
12
|
+
yield %(<div class="highlight"><pre class="#{@css_class}"><code>)
|
|
13
|
+
@inner.stream(tokens, &b)
|
|
14
|
+
yield "</code></pre></div>"
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*- #
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
module Rouge
|
|
5
|
+
module Formatters
|
|
6
|
+
class HTMLTable < Formatter
|
|
7
|
+
tag 'html_table'
|
|
8
|
+
|
|
9
|
+
def initialize(inner, opts={})
|
|
10
|
+
@inner = inner
|
|
11
|
+
@start_line = opts.fetch(:start_line, 1)
|
|
12
|
+
@line_format = opts.fetch(:line_format, '%i')
|
|
13
|
+
@table_class = opts.fetch(:table_class, 'rouge-table')
|
|
14
|
+
@gutter_class = opts.fetch(:gutter_class, 'rouge-gutter')
|
|
15
|
+
@code_class = opts.fetch(:code_class, 'rouge-code')
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def style(scope)
|
|
19
|
+
yield %(#{scope} .rouge-table { border-spacing: 0 })
|
|
20
|
+
yield %(#{scope} .rouge-gutter { text-align: right })
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def stream(tokens, &b)
|
|
24
|
+
last_val = nil
|
|
25
|
+
num_lines = tokens.reduce(0) {|count, (_, val)| count + (last_val = val).count(?\n) }
|
|
26
|
+
formatted = @inner.format(tokens)
|
|
27
|
+
unless last_val && last_val.end_with?(?\n)
|
|
28
|
+
num_lines += 1
|
|
29
|
+
formatted << ?\n
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
# generate a string of newline-separated line numbers for the gutter>
|
|
33
|
+
formatted_line_numbers = (@start_line..(@start_line + num_lines - 1)).map do |i|
|
|
34
|
+
sprintf(@line_format, i)
|
|
35
|
+
end.join(?\n) << ?\n
|
|
36
|
+
|
|
37
|
+
buffer = [%(<table class="#@table_class"><tbody><tr>)]
|
|
38
|
+
# the "gl" class applies the style for Generic.Lineno
|
|
39
|
+
buffer << %(<td class="#@gutter_class gl">)
|
|
40
|
+
buffer << %(<pre class="lineno">#{formatted_line_numbers}</pre>)
|
|
41
|
+
buffer << '</td>'
|
|
42
|
+
buffer << %(<td class="#@code_class"><pre>)
|
|
43
|
+
buffer << formatted
|
|
44
|
+
buffer << '</pre></td>'
|
|
45
|
+
buffer << '</tr></tbody></table>'
|
|
46
|
+
|
|
47
|
+
yield buffer.join
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
end
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*- #
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
module Rouge
|
|
5
|
+
module Formatters
|
|
6
|
+
# A formatter which renders nothing.
|
|
7
|
+
class Null < Formatter
|
|
8
|
+
tag 'null'
|
|
9
|
+
|
|
10
|
+
def initialize(*)
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def stream(tokens, &b)
|
|
14
|
+
tokens.each do |tok, val|
|
|
15
|
+
yield "#{tok.qualname} #{val.inspect}\n"
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*- #
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
module Rouge
|
|
5
|
+
module Formatters
|
|
6
|
+
# A formatter for 256-color terminals
|
|
7
|
+
class Terminal256 < Formatter
|
|
8
|
+
tag 'terminal256'
|
|
9
|
+
|
|
10
|
+
# @private
|
|
11
|
+
attr_reader :theme
|
|
12
|
+
|
|
13
|
+
# @param [Hash,Rouge::Theme] theme
|
|
14
|
+
# the theme to render with.
|
|
15
|
+
def initialize(theme = Themes::ThankfulEyes.new)
|
|
16
|
+
if theme.is_a?(Rouge::Theme)
|
|
17
|
+
@theme = theme
|
|
18
|
+
elsif theme.is_a?(Hash)
|
|
19
|
+
@theme = theme[:theme] || Themes::ThankfulEyes.new
|
|
20
|
+
else
|
|
21
|
+
raise ArgumentError, "invalid theme: #{theme.inspect}"
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def stream(tokens, &b)
|
|
26
|
+
tokens.each do |tok, val|
|
|
27
|
+
escape_sequence(tok).stream_value(val, &b)
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
class EscapeSequence
|
|
32
|
+
attr_reader :style
|
|
33
|
+
def initialize(style)
|
|
34
|
+
@style = style
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def self.xterm_colors
|
|
38
|
+
@xterm_colors ||= [].tap do |out|
|
|
39
|
+
# colors 0..15: 16 basic colors
|
|
40
|
+
out << [0x00, 0x00, 0x00] # 0
|
|
41
|
+
out << [0xcd, 0x00, 0x00] # 1
|
|
42
|
+
out << [0x00, 0xcd, 0x00] # 2
|
|
43
|
+
out << [0xcd, 0xcd, 0x00] # 3
|
|
44
|
+
out << [0x00, 0x00, 0xee] # 4
|
|
45
|
+
out << [0xcd, 0x00, 0xcd] # 5
|
|
46
|
+
out << [0x00, 0xcd, 0xcd] # 6
|
|
47
|
+
out << [0xe5, 0xe5, 0xe5] # 7
|
|
48
|
+
out << [0x7f, 0x7f, 0x7f] # 8
|
|
49
|
+
out << [0xff, 0x00, 0x00] # 9
|
|
50
|
+
out << [0x00, 0xff, 0x00] # 10
|
|
51
|
+
out << [0xff, 0xff, 0x00] # 11
|
|
52
|
+
out << [0x5c, 0x5c, 0xff] # 12
|
|
53
|
+
out << [0xff, 0x00, 0xff] # 13
|
|
54
|
+
out << [0x00, 0xff, 0xff] # 14
|
|
55
|
+
out << [0xff, 0xff, 0xff] # 15
|
|
56
|
+
|
|
57
|
+
# colors 16..232: the 6x6x6 color cube
|
|
58
|
+
valuerange = [0x00, 0x5f, 0x87, 0xaf, 0xd7, 0xff]
|
|
59
|
+
|
|
60
|
+
217.times do |i|
|
|
61
|
+
r = valuerange[(i / 36) % 6]
|
|
62
|
+
g = valuerange[(i / 6) % 6]
|
|
63
|
+
b = valuerange[i % 6]
|
|
64
|
+
out << [r, g, b]
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
# colors 233..253: grayscale
|
|
68
|
+
1.upto 22 do |i|
|
|
69
|
+
v = 8 + i * 10
|
|
70
|
+
out << [v, v, v]
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
def fg
|
|
76
|
+
return @fg if instance_variable_defined? :@fg
|
|
77
|
+
@fg = style.fg && self.class.color_index(style.fg)
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
def bg
|
|
81
|
+
return @bg if instance_variable_defined? :@bg
|
|
82
|
+
@bg = style.bg && self.class.color_index(style.bg)
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
def stream_value(val, &b)
|
|
87
|
+
yield style_string
|
|
88
|
+
yield val.gsub("\e", "\\e")
|
|
89
|
+
.gsub("\n", "#{reset_string}\n#{style_string}")
|
|
90
|
+
yield reset_string
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
def style_string
|
|
94
|
+
@style_string ||= begin
|
|
95
|
+
attrs = []
|
|
96
|
+
|
|
97
|
+
attrs << ['38', '5', fg.to_s] if fg
|
|
98
|
+
attrs << ['48', '5', bg.to_s] if bg
|
|
99
|
+
attrs << '01' if style[:bold]
|
|
100
|
+
attrs << '04' if style[:italic] # underline, but hey, whatevs
|
|
101
|
+
escape(attrs)
|
|
102
|
+
end
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
def reset_string
|
|
106
|
+
@reset_string ||= begin
|
|
107
|
+
attrs = []
|
|
108
|
+
attrs << '39' if fg # fg reset
|
|
109
|
+
attrs << '49' if bg # bg reset
|
|
110
|
+
attrs << '00' if style[:bold] || style[:italic]
|
|
111
|
+
|
|
112
|
+
escape(attrs)
|
|
113
|
+
end
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
private
|
|
117
|
+
def escape(attrs)
|
|
118
|
+
return '' if attrs.empty?
|
|
119
|
+
"\e[#{attrs.join(';')}m"
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
def self.color_index(color)
|
|
123
|
+
@color_index_cache ||= {}
|
|
124
|
+
@color_index_cache[color] ||= closest_color(*get_rgb(color))
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
def self.get_rgb(color)
|
|
128
|
+
color = $1 if color =~ /#([0-9a-f]+)/i
|
|
129
|
+
hexes = case color.size
|
|
130
|
+
when 3
|
|
131
|
+
color.chars.map { |c| "#{c}#{c}" }
|
|
132
|
+
when 6
|
|
133
|
+
color.scan(/../)
|
|
134
|
+
else
|
|
135
|
+
raise "invalid color: #{color}"
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
hexes.map { |h| h.to_i(16) }
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
# max distance between two colors, #000000 to #ffffff
|
|
142
|
+
MAX_DISTANCE = 257 * 257 * 3
|
|
143
|
+
|
|
144
|
+
def self.closest_color(r, g, b)
|
|
145
|
+
@@colors_cache ||= {}
|
|
146
|
+
key = (r << 16) + (g << 8) + b
|
|
147
|
+
@@colors_cache.fetch(key) do
|
|
148
|
+
distance = MAX_DISTANCE
|
|
149
|
+
|
|
150
|
+
match = 0
|
|
151
|
+
|
|
152
|
+
xterm_colors.each_with_index do |(cr, cg, cb), i|
|
|
153
|
+
d = (r - cr)**2 + (g - cg)**2 + (b - cb)**2
|
|
154
|
+
next if d >= distance
|
|
155
|
+
|
|
156
|
+
match = i
|
|
157
|
+
distance = d
|
|
158
|
+
end
|
|
159
|
+
|
|
160
|
+
match
|
|
161
|
+
end
|
|
162
|
+
end
|
|
163
|
+
end
|
|
164
|
+
|
|
165
|
+
class Unescape < EscapeSequence
|
|
166
|
+
def initialize(*) end
|
|
167
|
+
def style_string(*) '' end
|
|
168
|
+
def reset_string(*) '' end
|
|
169
|
+
def stream_value(val) yield val end
|
|
170
|
+
end
|
|
171
|
+
|
|
172
|
+
# private
|
|
173
|
+
def escape_sequence(token)
|
|
174
|
+
return Unescape.new if escape?(token)
|
|
175
|
+
@escape_sequences ||= {}
|
|
176
|
+
@escape_sequences[token.qualname] ||=
|
|
177
|
+
make_escape_sequence(get_style(token))
|
|
178
|
+
end
|
|
179
|
+
|
|
180
|
+
def make_escape_sequence(style)
|
|
181
|
+
EscapeSequence.new(style)
|
|
182
|
+
end
|
|
183
|
+
|
|
184
|
+
def get_style(token)
|
|
185
|
+
return text_style if token.ancestors.include? Token::Tokens::Text
|
|
186
|
+
|
|
187
|
+
theme.get_own_style(token) || text_style
|
|
188
|
+
end
|
|
189
|
+
|
|
190
|
+
def text_style
|
|
191
|
+
style = theme.get_style(Token['Text'])
|
|
192
|
+
# don't highlight text backgrounds
|
|
193
|
+
style.delete :bg
|
|
194
|
+
style
|
|
195
|
+
end
|
|
196
|
+
end
|
|
197
|
+
end
|
|
198
|
+
end
|