rouge 3.2.0 → 3.18.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/Gemfile +17 -3
- data/bin/rougify +1 -0
- data/lib/rouge.rb +67 -43
- data/lib/rouge/cli.rb +84 -17
- data/lib/rouge/demos/ada +26 -0
- data/lib/rouge/demos/apex +9 -0
- data/lib/rouge/demos/armasm +12 -0
- data/lib/rouge/demos/batchfile +3 -0
- data/lib/rouge/demos/bbcbasic +6 -0
- data/lib/rouge/demos/bpf +7 -0
- data/lib/rouge/demos/brainfuck +5 -0
- data/lib/rouge/demos/clean +6 -0
- data/lib/rouge/demos/cmhg +8 -0
- data/lib/rouge/demos/csvs +8 -0
- data/lib/rouge/demos/cuda +11 -0
- data/lib/rouge/demos/cypher +5 -0
- data/lib/rouge/demos/cython +6 -0
- data/lib/rouge/demos/datastudio +21 -0
- data/lib/rouge/demos/ecl +18 -0
- data/lib/rouge/demos/eex +1 -0
- data/lib/rouge/demos/epp +4 -0
- data/lib/rouge/demos/escape +3 -0
- data/lib/rouge/demos/freefem +16 -0
- data/lib/rouge/demos/gdscript +18 -0
- data/lib/rouge/demos/ghc-cmm +23 -0
- data/lib/rouge/demos/ghc-core +26 -0
- data/lib/rouge/demos/haxe +5 -0
- data/lib/rouge/demos/hocon +8 -0
- data/lib/rouge/demos/hql +5 -0
- data/lib/rouge/demos/isbl +4 -0
- data/lib/rouge/demos/jsl +3 -0
- data/lib/rouge/demos/jsp +29 -0
- data/lib/rouge/demos/liquid +0 -1
- 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/mason +22 -0
- data/lib/rouge/demos/mathematica +8 -0
- data/lib/rouge/demos/minizinc +23 -0
- data/lib/rouge/demos/msgtrans +4 -0
- data/lib/rouge/demos/nasm +6 -6
- data/lib/rouge/demos/nesasm +11 -0
- data/lib/rouge/demos/objective_cpp +17 -0
- data/lib/rouge/demos/openedge +4 -0
- data/lib/rouge/demos/opentype_feature_file +6 -0
- data/lib/rouge/demos/plist +1 -132
- data/lib/rouge/demos/powershell +12 -48
- data/lib/rouge/demos/q +6 -0
- data/lib/rouge/demos/reasonml +12 -0
- data/lib/rouge/demos/rego +8 -0
- data/lib/rouge/demos/robot_framework +27 -0
- data/lib/rouge/demos/sas +13 -0
- data/lib/rouge/demos/slice +10 -0
- data/lib/rouge/demos/solidity +13 -0
- data/lib/rouge/demos/sparql +6 -0
- data/lib/rouge/demos/sqf +14 -0
- data/lib/rouge/demos/supercollider +11 -0
- data/lib/rouge/demos/terraform +0 -15
- data/lib/rouge/demos/ttcn3 +6 -0
- data/lib/rouge/demos/vcl +12 -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/yang +17 -0
- data/lib/rouge/formatter.rb +39 -2
- data/lib/rouge/formatters/html.rb +21 -2
- data/lib/rouge/formatters/html_inline.rb +1 -0
- data/lib/rouge/formatters/html_legacy.rb +1 -0
- data/lib/rouge/formatters/html_line_table.rb +53 -0
- data/lib/rouge/formatters/html_linewise.rb +7 -11
- data/lib/rouge/formatters/html_pygments.rb +2 -0
- data/lib/rouge/formatters/html_table.rb +21 -31
- data/lib/rouge/formatters/null.rb +1 -0
- data/lib/rouge/formatters/terminal256.rb +23 -5
- data/lib/rouge/formatters/terminal_truecolor.rb +37 -0
- data/lib/rouge/formatters/tex.rb +92 -0
- data/lib/rouge/guesser.rb +2 -0
- data/lib/rouge/guessers/disambiguation.rb +35 -0
- data/lib/rouge/guessers/filename.rb +2 -0
- data/lib/rouge/guessers/glob_mapping.rb +3 -1
- data/lib/rouge/guessers/mimetype.rb +2 -0
- data/lib/rouge/guessers/modeline.rb +3 -1
- data/lib/rouge/guessers/source.rb +3 -1
- data/lib/rouge/guessers/util.rb +2 -0
- data/lib/rouge/lexer.rb +71 -15
- data/lib/rouge/lexers/abap.rb +13 -11
- data/lib/rouge/lexers/actionscript.rb +35 -34
- data/lib/rouge/lexers/ada.rb +162 -0
- data/lib/rouge/lexers/apache.rb +13 -15
- data/lib/rouge/lexers/apache/keywords.rb +15 -0
- data/lib/rouge/lexers/apex.rb +126 -0
- data/lib/rouge/lexers/apiblueprint.rb +2 -0
- data/lib/rouge/lexers/apple_script.rb +17 -14
- data/lib/rouge/lexers/armasm.rb +145 -0
- data/lib/rouge/lexers/awk.rb +26 -25
- data/lib/rouge/lexers/batchfile.rb +164 -0
- data/lib/rouge/lexers/bbcbasic.rb +112 -0
- data/lib/rouge/lexers/biml.rb +6 -4
- data/lib/rouge/lexers/bpf.rb +118 -0
- data/lib/rouge/lexers/brainfuck.rb +53 -0
- data/lib/rouge/lexers/bsl.rb +13 -12
- data/lib/rouge/lexers/c.rb +35 -57
- data/lib/rouge/lexers/ceylon.rb +7 -34
- data/lib/rouge/lexers/cfscript.rb +27 -26
- data/lib/rouge/lexers/clean.rb +156 -0
- data/lib/rouge/lexers/clojure.rb +15 -14
- data/lib/rouge/lexers/cmake.rb +16 -14
- data/lib/rouge/lexers/cmhg.rb +34 -0
- data/lib/rouge/lexers/coffeescript.rb +90 -49
- data/lib/rouge/lexers/common_lisp.rb +39 -38
- data/lib/rouge/lexers/conf.rb +7 -6
- data/lib/rouge/lexers/console.rb +92 -38
- data/lib/rouge/lexers/coq.rb +27 -23
- data/lib/rouge/lexers/cpp.rb +24 -13
- data/lib/rouge/lexers/crystal.rb +71 -70
- data/lib/rouge/lexers/csharp.rb +29 -29
- data/lib/rouge/lexers/css.rb +24 -23
- data/lib/rouge/lexers/csvs.rb +44 -0
- data/lib/rouge/lexers/cuda.rb +35 -0
- data/lib/rouge/lexers/cypher.rb +108 -0
- data/lib/rouge/lexers/cython.rb +151 -0
- data/lib/rouge/lexers/d.rb +64 -63
- data/lib/rouge/lexers/dart.rb +34 -33
- data/lib/rouge/lexers/datastudio.rb +138 -0
- data/lib/rouge/lexers/diff.rb +10 -4
- data/lib/rouge/lexers/digdag.rb +3 -1
- data/lib/rouge/lexers/docker.rb +12 -11
- data/lib/rouge/lexers/dot.rb +19 -18
- data/lib/rouge/lexers/ecl.rb +175 -0
- data/lib/rouge/lexers/eex.rb +52 -0
- data/lib/rouge/lexers/eiffel.rb +21 -20
- data/lib/rouge/lexers/elixir.rb +52 -36
- data/lib/rouge/lexers/elm.rb +30 -29
- data/lib/rouge/lexers/epp.rb +51 -0
- data/lib/rouge/lexers/erb.rb +5 -4
- data/lib/rouge/lexers/erlang.rb +1 -0
- data/lib/rouge/lexers/escape.rb +58 -0
- data/lib/rouge/lexers/factor.rb +41 -40
- data/lib/rouge/lexers/fortran.rb +34 -32
- data/lib/rouge/lexers/freefem.rb +240 -0
- data/lib/rouge/lexers/fsharp.rb +33 -31
- data/lib/rouge/lexers/gdscript.rb +171 -0
- data/lib/rouge/lexers/ghc_cmm.rb +340 -0
- data/lib/rouge/lexers/ghc_core.rb +151 -0
- data/lib/rouge/lexers/gherkin.rb +17 -14
- data/lib/rouge/lexers/gherkin/keywords.rb +2 -0
- data/lib/rouge/lexers/glsl.rb +2 -5
- data/lib/rouge/lexers/go.rb +3 -2
- data/lib/rouge/lexers/gradle.rb +1 -0
- data/lib/rouge/lexers/graphql.rb +78 -60
- data/lib/rouge/lexers/groovy.rb +24 -25
- data/lib/rouge/lexers/hack.rb +2 -1
- data/lib/rouge/lexers/haml.rb +26 -29
- data/lib/rouge/lexers/handlebars.rb +32 -20
- data/lib/rouge/lexers/haskell.rb +67 -65
- data/lib/rouge/lexers/haxe.rb +246 -0
- data/lib/rouge/lexers/hcl.rb +26 -25
- data/lib/rouge/lexers/hocon.rb +86 -0
- data/lib/rouge/lexers/hql.rb +139 -0
- data/lib/rouge/lexers/html.rb +33 -31
- data/lib/rouge/lexers/http.rb +10 -9
- data/lib/rouge/lexers/hylang.rb +15 -14
- data/lib/rouge/lexers/idlang.rb +34 -32
- data/lib/rouge/lexers/igorpro.rb +32 -31
- data/lib/rouge/lexers/ini.rb +13 -12
- data/lib/rouge/lexers/io.rb +10 -9
- data/lib/rouge/lexers/irb.rb +6 -5
- data/lib/rouge/lexers/isbl.rb +97 -0
- data/lib/rouge/lexers/isbl/builtins.rb +17 -0
- data/lib/rouge/lexers/java.rb +29 -25
- data/lib/rouge/lexers/javascript.rb +58 -61
- data/lib/rouge/lexers/jinja.rb +39 -22
- data/lib/rouge/lexers/jsl.rb +55 -0
- data/lib/rouge/lexers/json.rb +54 -11
- data/lib/rouge/lexers/json_doc.rb +8 -5
- data/lib/rouge/lexers/jsonnet.rb +19 -18
- data/lib/rouge/lexers/jsp.rb +120 -0
- data/lib/rouge/lexers/jsx.rb +18 -16
- data/lib/rouge/lexers/julia.rb +182 -58
- data/lib/rouge/lexers/kotlin.rb +78 -26
- data/lib/rouge/lexers/lasso.rb +54 -58
- data/lib/rouge/lexers/lasso/keywords.rb +14 -0
- data/lib/rouge/lexers/liquid.rb +116 -118
- data/lib/rouge/lexers/literate_coffeescript.rb +3 -2
- data/lib/rouge/lexers/literate_haskell.rb +6 -5
- data/lib/rouge/lexers/llvm.rb +66 -49
- data/lib/rouge/lexers/lua.rb +43 -4
- data/lib/rouge/lexers/lua/builtins.rb +2 -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 +57 -34
- data/lib/rouge/lexers/markdown.rb +67 -39
- 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 +26 -17
- data/lib/rouge/lexers/matlab/builtins.rb +4 -4
- data/lib/rouge/lexers/minizinc.rb +87 -0
- data/lib/rouge/lexers/moonscript.rb +4 -3
- data/lib/rouge/lexers/mosel.rb +64 -63
- data/lib/rouge/lexers/msgtrans.rb +26 -0
- data/lib/rouge/lexers/mxml.rb +19 -18
- data/lib/rouge/lexers/nasm.rb +43 -169
- data/lib/rouge/lexers/nesasm.rb +78 -0
- data/lib/rouge/lexers/nginx.rb +15 -14
- data/lib/rouge/lexers/nim.rb +4 -2
- data/lib/rouge/lexers/nix.rb +44 -43
- data/lib/rouge/lexers/objective_c.rb +5 -178
- 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 +29 -64
- 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 +6 -5
- data/lib/rouge/lexers/perl.rb +102 -67
- data/lib/rouge/lexers/php.rb +91 -53
- data/lib/rouge/lexers/php/builtins.rb +183 -174
- data/lib/rouge/lexers/plain_text.rb +2 -1
- data/lib/rouge/lexers/plist.rb +16 -14
- data/lib/rouge/lexers/pony.rb +21 -20
- data/lib/rouge/lexers/powershell.rb +190 -638
- data/lib/rouge/lexers/praat.rb +76 -75
- data/lib/rouge/lexers/prolog.rb +27 -19
- data/lib/rouge/lexers/prometheus.rb +32 -30
- data/lib/rouge/lexers/properties.rb +13 -12
- data/lib/rouge/lexers/protobuf.rb +23 -22
- data/lib/rouge/lexers/puppet.rb +33 -32
- data/lib/rouge/lexers/python.rb +124 -99
- data/lib/rouge/lexers/q.rb +17 -14
- data/lib/rouge/lexers/qml.rb +13 -12
- data/lib/rouge/lexers/r.rb +13 -13
- data/lib/rouge/lexers/racket.rb +47 -22
- data/lib/rouge/lexers/reasonml.rb +65 -0
- data/lib/rouge/lexers/rego.rb +45 -0
- data/lib/rouge/lexers/robot_framework.rb +249 -0
- data/lib/rouge/lexers/ruby.rb +88 -71
- data/lib/rouge/lexers/rust.rb +45 -44
- data/lib/rouge/lexers/sas.rb +563 -0
- data/lib/rouge/lexers/sass.rb +9 -8
- data/lib/rouge/lexers/sass/common.rb +41 -40
- data/lib/rouge/lexers/scala.rb +67 -40
- data/lib/rouge/lexers/scheme.rb +19 -18
- data/lib/rouge/lexers/scss.rb +4 -3
- data/lib/rouge/lexers/sed.rb +31 -30
- data/lib/rouge/lexers/shell.rb +67 -55
- data/lib/rouge/lexers/sieve.rb +10 -9
- data/lib/rouge/lexers/slice.rb +32 -0
- data/lib/rouge/lexers/slim.rb +27 -26
- data/lib/rouge/lexers/smalltalk.rb +34 -33
- data/lib/rouge/lexers/smarty.rb +20 -19
- data/lib/rouge/lexers/sml.rb +68 -67
- data/lib/rouge/lexers/solidity.rb +185 -0
- data/lib/rouge/lexers/sparql.rb +129 -0
- data/lib/rouge/lexers/sqf.rb +109 -0
- data/lib/rouge/lexers/sqf/commands.rb +15 -0
- data/lib/rouge/lexers/sql.rb +47 -26
- data/lib/rouge/lexers/supercollider.rb +116 -0
- data/lib/rouge/lexers/swift.rb +49 -44
- data/lib/rouge/lexers/tap.rb +22 -20
- data/lib/rouge/lexers/tcl.rb +28 -27
- data/lib/rouge/lexers/terraform.rb +37 -13
- data/lib/rouge/lexers/tex.rb +20 -19
- data/lib/rouge/lexers/toml.rb +59 -20
- data/lib/rouge/lexers/tsx.rb +1 -0
- data/lib/rouge/lexers/ttcn3.rb +119 -0
- data/lib/rouge/lexers/tulip.rb +38 -36
- data/lib/rouge/lexers/turtle.rb +36 -38
- data/lib/rouge/lexers/twig.rb +1 -0
- data/lib/rouge/lexers/typescript.rb +12 -0
- data/lib/rouge/lexers/typescript/common.rb +1 -0
- data/lib/rouge/lexers/vala.rb +19 -18
- data/lib/rouge/lexers/varnish.rb +168 -0
- data/lib/rouge/lexers/vb.rb +28 -27
- data/lib/rouge/lexers/verilog.rb +27 -28
- data/lib/rouge/lexers/vhdl.rb +12 -11
- data/lib/rouge/lexers/viml.rb +15 -14
- data/lib/rouge/lexers/viml/keywords.rb +2 -0
- data/lib/rouge/lexers/vue.rb +15 -10
- data/lib/rouge/lexers/wollok.rb +27 -26
- data/lib/rouge/lexers/xml.rb +18 -21
- 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 +64 -61
- data/lib/rouge/lexers/yang.rb +147 -0
- data/lib/rouge/plugins/redcarpet.rb +9 -2
- data/lib/rouge/regex_lexer.rb +27 -25
- data/lib/rouge/template_lexer.rb +1 -0
- data/lib/rouge/tex_theme_renderer.rb +132 -0
- data/lib/rouge/text_analyzer.rb +1 -0
- data/lib/rouge/theme.rb +5 -0
- data/lib/rouge/themes/base16.rb +1 -0
- data/lib/rouge/themes/bw.rb +41 -0
- data/lib/rouge/themes/colorful.rb +1 -0
- data/lib/rouge/themes/github.rb +1 -0
- data/lib/rouge/themes/gruvbox.rb +1 -0
- data/lib/rouge/themes/igor_pro.rb +1 -0
- data/lib/rouge/themes/magritte.rb +78 -0
- data/lib/rouge/themes/molokai.rb +1 -0
- data/lib/rouge/themes/monokai.rb +1 -0
- data/lib/rouge/themes/monokai_sublime.rb +4 -1
- data/lib/rouge/themes/pastie.rb +2 -1
- data/lib/rouge/themes/thankful_eyes.rb +2 -1
- data/lib/rouge/themes/tulip.rb +2 -1
- data/lib/rouge/token.rb +31 -22
- data/lib/rouge/util.rb +3 -2
- data/lib/rouge/version.rb +2 -1
- data/rouge.gemspec +6 -3
- metadata +130 -8
- data/lib/rouge/lexers/apache/keywords.yml +0 -764
- data/lib/rouge/lexers/lasso/keywords.yml +0 -446
data/lib/rouge/regex_lexer.rb
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
# -*- coding: utf-8 -*- #
|
|
2
|
+
# frozen_string_literal: true
|
|
2
3
|
|
|
3
4
|
module Rouge
|
|
4
5
|
# @abstract
|
|
@@ -101,21 +102,21 @@ module Rouge
|
|
|
101
102
|
callback ||= case next_state
|
|
102
103
|
when :pop!
|
|
103
104
|
proc do |stream|
|
|
104
|
-
puts " yielding #{tok.qualname}, #{stream[0].inspect}" if @debug
|
|
105
|
+
puts " yielding: #{tok.qualname}, #{stream[0].inspect}" if @debug
|
|
105
106
|
@output_stream.call(tok, stream[0])
|
|
106
107
|
puts " popping stack: 1" if @debug
|
|
107
108
|
@stack.pop or raise 'empty stack!'
|
|
108
109
|
end
|
|
109
110
|
when :push
|
|
110
111
|
proc do |stream|
|
|
111
|
-
puts " yielding #{tok.qualname}, #{stream[0].inspect}" if @debug
|
|
112
|
+
puts " yielding: #{tok.qualname}, #{stream[0].inspect}" if @debug
|
|
112
113
|
@output_stream.call(tok, stream[0])
|
|
113
114
|
puts " pushing :#{@stack.last.name}" if @debug
|
|
114
115
|
@stack.push(@stack.last)
|
|
115
116
|
end
|
|
116
117
|
when Symbol
|
|
117
118
|
proc do |stream|
|
|
118
|
-
puts " yielding #{tok.qualname}, #{stream[0].inspect}" if @debug
|
|
119
|
+
puts " yielding: #{tok.qualname}, #{stream[0].inspect}" if @debug
|
|
119
120
|
@output_stream.call(tok, stream[0])
|
|
120
121
|
state = @states[next_state] || self.class.get_state(next_state)
|
|
121
122
|
puts " pushing :#{state.name}" if @debug
|
|
@@ -123,7 +124,7 @@ module Rouge
|
|
|
123
124
|
end
|
|
124
125
|
when nil
|
|
125
126
|
proc do |stream|
|
|
126
|
-
puts " yielding #{tok.qualname}, #{stream[0].inspect}" if @debug
|
|
127
|
+
puts " yielding: #{tok.qualname}, #{stream[0].inspect}" if @debug
|
|
127
128
|
@output_stream.call(tok, stream[0])
|
|
128
129
|
end
|
|
129
130
|
else
|
|
@@ -182,18 +183,18 @@ module Rouge
|
|
|
182
183
|
# Define a new state for this lexer with the given name.
|
|
183
184
|
# The block will be evaluated in the context of a {StateDSL}.
|
|
184
185
|
def self.state(name, &b)
|
|
185
|
-
name = name.
|
|
186
|
+
name = name.to_sym
|
|
186
187
|
state_definitions[name] = StateDSL.new(name, &b)
|
|
187
188
|
end
|
|
188
189
|
|
|
189
190
|
def self.prepend(name, &b)
|
|
190
|
-
name = name.
|
|
191
|
+
name = name.to_sym
|
|
191
192
|
dsl = state_definitions[name] or raise "no such state #{name.inspect}"
|
|
192
193
|
replace_state(name, dsl.prepended(&b))
|
|
193
194
|
end
|
|
194
195
|
|
|
195
196
|
def self.append(name, &b)
|
|
196
|
-
name = name.
|
|
197
|
+
name = name.to_sym
|
|
197
198
|
dsl = state_definitions[name] or raise "no such state #{name.inspect}"
|
|
198
199
|
replace_state(name, dsl.appended(&b))
|
|
199
200
|
end
|
|
@@ -203,7 +204,7 @@ module Rouge
|
|
|
203
204
|
return name if name.is_a? State
|
|
204
205
|
|
|
205
206
|
states[name.to_sym] ||= begin
|
|
206
|
-
defn = state_definitions[name.
|
|
207
|
+
defn = state_definitions[name.to_sym] or raise "unknown state: #{name.inspect}"
|
|
207
208
|
defn.to_state(self)
|
|
208
209
|
end
|
|
209
210
|
end
|
|
@@ -262,6 +263,7 @@ module Rouge
|
|
|
262
263
|
|
|
263
264
|
until stream.eos?
|
|
264
265
|
if @debug
|
|
266
|
+
puts
|
|
265
267
|
puts "lexer: #{self.class.tag}"
|
|
266
268
|
puts "stack: #{stack.map(&:name).map(&:to_sym).inspect}"
|
|
267
269
|
puts "stream: #{stream.peek(20).inspect}"
|
|
@@ -288,11 +290,11 @@ module Rouge
|
|
|
288
290
|
def step(state, stream)
|
|
289
291
|
state.rules.each do |rule|
|
|
290
292
|
if rule.is_a?(State)
|
|
291
|
-
puts " entering mixin
|
|
293
|
+
puts " entering: mixin :#{rule.name}" if @debug
|
|
292
294
|
return true if step(rule, stream)
|
|
293
|
-
puts " exiting
|
|
295
|
+
puts " exiting: mixin :#{rule.name}" if @debug
|
|
294
296
|
else
|
|
295
|
-
puts " trying #{rule.inspect}" if @debug
|
|
297
|
+
puts " trying: #{rule.inspect}" if @debug
|
|
296
298
|
|
|
297
299
|
# XXX HACK XXX
|
|
298
300
|
# StringScanner's implementation of ^ is b0rken.
|
|
@@ -302,14 +304,14 @@ module Rouge
|
|
|
302
304
|
next if rule.beginning_of_line && !stream.beginning_of_line?
|
|
303
305
|
|
|
304
306
|
if (size = stream.skip(rule.re))
|
|
305
|
-
puts " got #{stream[0].inspect}" if @debug
|
|
307
|
+
puts " got: #{stream[0].inspect}" if @debug
|
|
306
308
|
|
|
307
309
|
instance_exec(stream, &rule.callback)
|
|
308
310
|
|
|
309
311
|
if size.zero?
|
|
310
312
|
@null_steps += 1
|
|
311
313
|
if @null_steps > MAX_NULL_SCANS
|
|
312
|
-
puts " too many scans without consuming the string!" if @debug
|
|
314
|
+
puts " warning: too many scans without consuming the string!" if @debug
|
|
313
315
|
return false
|
|
314
316
|
end
|
|
315
317
|
else
|
|
@@ -351,20 +353,20 @@ module Rouge
|
|
|
351
353
|
end
|
|
352
354
|
end
|
|
353
355
|
|
|
354
|
-
# Delegate the lex to another lexer.
|
|
355
|
-
#
|
|
356
|
-
#
|
|
357
|
-
#
|
|
356
|
+
# Delegate the lex to another lexer. We use the `continue_lex` method
|
|
357
|
+
# so that #reset! will not be called. In this way, a single lexer
|
|
358
|
+
# can be repeatedly delegated to while maintaining its own internal
|
|
359
|
+
# state stack.
|
|
358
360
|
#
|
|
359
361
|
# @param [#lex] lexer
|
|
360
362
|
# The lexer or lexer class to delegate to
|
|
361
363
|
# @param [String] text
|
|
362
364
|
# The text to delegate. This defaults to the last matched string.
|
|
363
365
|
def delegate(lexer, text=nil)
|
|
364
|
-
puts " delegating to #{lexer.inspect}" if @debug
|
|
366
|
+
puts " delegating to: #{lexer.inspect}" if @debug
|
|
365
367
|
text ||= @current_stream[0]
|
|
366
368
|
|
|
367
|
-
lexer.
|
|
369
|
+
lexer.continue_lex(text) do |tok, val|
|
|
368
370
|
puts " delegated token: #{tok.inspect}, #{val.inspect}" if @debug
|
|
369
371
|
yield_token(tok, val)
|
|
370
372
|
end
|
|
@@ -387,7 +389,7 @@ module Rouge
|
|
|
387
389
|
self.state
|
|
388
390
|
end
|
|
389
391
|
|
|
390
|
-
puts " pushing :#{push_state.name}" if @debug
|
|
392
|
+
puts " pushing: :#{push_state.name}" if @debug
|
|
391
393
|
stack.push(push_state)
|
|
392
394
|
end
|
|
393
395
|
|
|
@@ -407,7 +409,7 @@ module Rouge
|
|
|
407
409
|
def goto(state_name)
|
|
408
410
|
raise 'empty stack!' if stack.empty?
|
|
409
411
|
|
|
410
|
-
puts " going to state :#{state_name} " if @debug
|
|
412
|
+
puts " going to: state :#{state_name} " if @debug
|
|
411
413
|
stack[-1] = get_state(state_name)
|
|
412
414
|
end
|
|
413
415
|
|
|
@@ -420,21 +422,21 @@ module Rouge
|
|
|
420
422
|
|
|
421
423
|
# Check if `state_name` is in the state stack.
|
|
422
424
|
def in_state?(state_name)
|
|
423
|
-
state_name = state_name.
|
|
425
|
+
state_name = state_name.to_sym
|
|
424
426
|
stack.any? do |state|
|
|
425
|
-
state.name == state_name.
|
|
427
|
+
state.name == state_name.to_sym
|
|
426
428
|
end
|
|
427
429
|
end
|
|
428
430
|
|
|
429
431
|
# Check if `state_name` is the state on top of the state stack.
|
|
430
432
|
def state?(state_name)
|
|
431
|
-
state_name.
|
|
433
|
+
state_name.to_sym == state.name
|
|
432
434
|
end
|
|
433
435
|
|
|
434
436
|
private
|
|
435
437
|
def yield_token(tok, val)
|
|
436
438
|
return if val.nil? || val.empty?
|
|
437
|
-
puts " yielding #{tok.qualname}, #{val.inspect}" if @debug
|
|
439
|
+
puts " yielding: #{tok.qualname}, #{val.inspect}" if @debug
|
|
438
440
|
@output_stream.yield(tok, val)
|
|
439
441
|
end
|
|
440
442
|
end
|
data/lib/rouge/template_lexer.rb
CHANGED
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*- #
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
module Rouge
|
|
5
|
+
class TexThemeRenderer
|
|
6
|
+
def initialize(theme, opts={})
|
|
7
|
+
@theme = theme
|
|
8
|
+
@prefix = opts.fetch(:prefix) { 'RG' }
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
# Our general strategy is this:
|
|
12
|
+
#
|
|
13
|
+
# * First, define the \RG{tokname}{content} command, which will
|
|
14
|
+
# expand into \RG@tok@tokname{content}. We use \csname...\endcsname
|
|
15
|
+
# to interpolate into a command.
|
|
16
|
+
#
|
|
17
|
+
# * Define the default RG* environment, which will enclose the whole
|
|
18
|
+
# thing. By default this will simply set \ttfamily (select monospace font)
|
|
19
|
+
# but it can be overridden with \renewcommand by the user to be
|
|
20
|
+
# any other formatting.
|
|
21
|
+
#
|
|
22
|
+
# * Define all the colors using xcolors \definecolor command. First we define
|
|
23
|
+
# every palette color with a name such as RG@palette@themneame@colorname.
|
|
24
|
+
# Then we find all foreground and background colors that have literal html
|
|
25
|
+
# colors embedded in them and define them with names such as
|
|
26
|
+
# RG@palette@themename@000000. While html allows three-letter colors such
|
|
27
|
+
# as #FFF, xcolor requires all six characters to be present, so we make sure
|
|
28
|
+
# to normalize that as well as the case convention in #inline_name.
|
|
29
|
+
#
|
|
30
|
+
# * Define the token commands RG@tok@xx. These will take the content as the
|
|
31
|
+
# argument and format it according to the theme, referring to the color
|
|
32
|
+
# in the palette.
|
|
33
|
+
def render(&b)
|
|
34
|
+
yield <<'END'.gsub('RG', @prefix)
|
|
35
|
+
\makeatletter
|
|
36
|
+
\def\RG#1#2{\csname RG@tok@#1\endcsname{#2}}%
|
|
37
|
+
\newenvironment{RG*}{\ttfamily}{\relax}%
|
|
38
|
+
END
|
|
39
|
+
|
|
40
|
+
base = @theme.class.base_style
|
|
41
|
+
yield "\\definecolor{#{@prefix}@fgcolor}{HTML}{#{inline_name(base.fg || '#000000')}}"
|
|
42
|
+
yield "\\definecolor{#{@prefix}@bgcolor}{HTML}{#{inline_name(base.bg || '#FFFFFF')}}"
|
|
43
|
+
|
|
44
|
+
render_palette(@theme.palette, &b)
|
|
45
|
+
|
|
46
|
+
@theme.styles.each do |tok, style|
|
|
47
|
+
render_inline_pallete(style, &b)
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
Token.each_token do |tok|
|
|
51
|
+
style = @theme.class.get_own_style(tok)
|
|
52
|
+
style ? render_style(tok, style, &b) : render_blank(tok, &b)
|
|
53
|
+
end
|
|
54
|
+
yield '\makeatother'
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def render_palette(palette, &b)
|
|
58
|
+
palette.each do |name, color|
|
|
59
|
+
hex = inline_name(color)
|
|
60
|
+
|
|
61
|
+
yield "\\definecolor{#{palette_name(name)}}{HTML}{#{hex}}%"
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
def render_inline_pallete(style, &b)
|
|
66
|
+
gen_inline(style[:fg], &b)
|
|
67
|
+
gen_inline(style[:bg], &b)
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
def inline_name(color)
|
|
71
|
+
color =~ /^#(\h+)/ or return nil
|
|
72
|
+
|
|
73
|
+
# xcolor does not support 3-character HTML colors,
|
|
74
|
+
# so we convert them here
|
|
75
|
+
case $1.size
|
|
76
|
+
when 6
|
|
77
|
+
$1
|
|
78
|
+
when 3
|
|
79
|
+
# duplicate every character: abc -> aabbcc
|
|
80
|
+
$1.gsub(/\h/, '\0\0')
|
|
81
|
+
else
|
|
82
|
+
raise "invalid HTML color: #{$1}"
|
|
83
|
+
end.upcase
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
def gen_inline(name, &b)
|
|
87
|
+
# detect inline colors
|
|
88
|
+
hex = inline_name(name)
|
|
89
|
+
return unless hex
|
|
90
|
+
|
|
91
|
+
@gen_inline ||= {}
|
|
92
|
+
@gen_inline[hex] ||= begin
|
|
93
|
+
yield "\\definecolor{#{palette_name(hex)}}{HTML}{#{hex}}%"
|
|
94
|
+
end
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
def camelize(name)
|
|
98
|
+
name.gsub(/_(.)/) { $1.upcase }
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
def palette_name(name)
|
|
102
|
+
name = inline_name(name) || name.to_s
|
|
103
|
+
|
|
104
|
+
"#{@prefix}@palette@#{camelize(@theme.name)}@#{camelize(name.to_s)}"
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
def token_name(tok)
|
|
108
|
+
"\\csname #@prefix@tok@#{tok.shortname}\\endcsname"
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
def render_blank(tok, &b)
|
|
112
|
+
out = "\\expandafter\\def#{token_name(tok)}#1{#1}"
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
def render_style(tok, style, &b)
|
|
116
|
+
out = String.new('')
|
|
117
|
+
out << "\\expandafter\\def#{token_name(tok)}#1{"
|
|
118
|
+
out << "\\fboxsep=0pt\\colorbox{#{palette_name(style[:bg])}}{" if style[:bg]
|
|
119
|
+
out << '\\textbf{' if style[:bold]
|
|
120
|
+
out << '\\textit{' if style[:italic]
|
|
121
|
+
out << "\\textcolor{#{palette_name(style[:fg])}}{" if style[:fg]
|
|
122
|
+
out << "#1"
|
|
123
|
+
# close the right number of curlies
|
|
124
|
+
out << "}" if style[:bold]
|
|
125
|
+
out << "}" if style[:italic]
|
|
126
|
+
out << "}" if style[:fg]
|
|
127
|
+
out << "}" if style[:bg]
|
|
128
|
+
out << "}%"
|
|
129
|
+
yield out
|
|
130
|
+
end
|
|
131
|
+
end
|
|
132
|
+
end
|
data/lib/rouge/text_analyzer.rb
CHANGED
data/lib/rouge/theme.rb
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
# -*- coding: utf-8 -*- #
|
|
2
|
+
# frozen_string_literal: true
|
|
2
3
|
|
|
3
4
|
module Rouge
|
|
4
5
|
class Theme
|
|
@@ -82,6 +83,10 @@ module Rouge
|
|
|
82
83
|
self.class.get_style(token)
|
|
83
84
|
end
|
|
84
85
|
|
|
86
|
+
def name
|
|
87
|
+
self.class.name
|
|
88
|
+
end
|
|
89
|
+
|
|
85
90
|
class << self
|
|
86
91
|
def style(*tokens)
|
|
87
92
|
style = tokens.last.is_a?(Hash) ? tokens.pop : {}
|
data/lib/rouge/themes/base16.rb
CHANGED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*- #
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
module Rouge
|
|
5
|
+
module Themes
|
|
6
|
+
# A port of the bw style from Pygments.
|
|
7
|
+
# See https://bitbucket.org/birkenfeld/pygments-main/src/default/pygments/styles/bw.py
|
|
8
|
+
class BlackWhiteTheme < CSSTheme
|
|
9
|
+
name 'bw'
|
|
10
|
+
|
|
11
|
+
style Text, :fg => '#000000', :bg => '#ffffff'
|
|
12
|
+
|
|
13
|
+
style Comment, :italic => true
|
|
14
|
+
style Comment::Preproc, :italic => false
|
|
15
|
+
|
|
16
|
+
style Keyword, :bold => true
|
|
17
|
+
style Keyword::Pseudo, :bold => false
|
|
18
|
+
style Keyword::Type, :bold => false
|
|
19
|
+
|
|
20
|
+
style Operator, :bold => true
|
|
21
|
+
|
|
22
|
+
style Name::Class, :bold => true
|
|
23
|
+
style Name::Namespace, :bold => true
|
|
24
|
+
style Name::Exception, :bold => true
|
|
25
|
+
style Name::Entity, :bold => true
|
|
26
|
+
style Name::Tag, :bold => true
|
|
27
|
+
|
|
28
|
+
style Literal::String, :italic => true
|
|
29
|
+
style Literal::String::Interpol, :bold => true
|
|
30
|
+
style Literal::String::Escape, :bold => true
|
|
31
|
+
|
|
32
|
+
style Generic::Heading, :bold => true
|
|
33
|
+
style Generic::Subheading, :bold => true
|
|
34
|
+
style Generic::Emph, :italic => true
|
|
35
|
+
style Generic::Strong, :bold => true
|
|
36
|
+
style Generic::Prompt, :bold => true
|
|
37
|
+
|
|
38
|
+
style Error, :fg => '#FF0000'
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
data/lib/rouge/themes/github.rb
CHANGED
data/lib/rouge/themes/gruvbox.rb
CHANGED
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*- #
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
module Rouge
|
|
5
|
+
module Themes
|
|
6
|
+
class Magritte < CSSTheme
|
|
7
|
+
name 'magritte'
|
|
8
|
+
|
|
9
|
+
palette :dragon => '#006c6c'
|
|
10
|
+
palette :black => '#000000'
|
|
11
|
+
palette :forest => '#007500'
|
|
12
|
+
palette :candy => '#ff0089'
|
|
13
|
+
palette :wine => '#7c0000'
|
|
14
|
+
palette :grape => '#4c48fe'
|
|
15
|
+
palette :dark => '#000707'
|
|
16
|
+
palette :cherry => '#f22700'
|
|
17
|
+
palette :white => '#ffffff'
|
|
18
|
+
palette :royal => '#19003a'
|
|
19
|
+
|
|
20
|
+
palette :purple => '#840084'
|
|
21
|
+
palette :chocolate => '#920241'
|
|
22
|
+
palette :lavender => '#d8d9ff'
|
|
23
|
+
palette :eggshell => '#f3ffff'
|
|
24
|
+
palette :yellow => '#ffff3f'
|
|
25
|
+
|
|
26
|
+
palette :lightgray => '#BBBBBB'
|
|
27
|
+
palette :darkgray => '#999999'
|
|
28
|
+
|
|
29
|
+
style Text, :fg => :dark, :bg => :eggshell
|
|
30
|
+
style Generic::Lineno, :fg => :eggshell, :bg => :dark
|
|
31
|
+
|
|
32
|
+
# style Generic::Prompt, :fg => :chilly, :bold => true
|
|
33
|
+
|
|
34
|
+
style Comment, :fg => :dragon, :italic => true
|
|
35
|
+
style Comment::Preproc, :fg => :chocolate, :bold => true
|
|
36
|
+
style Error, :fg => :eggshell, :bg => :cherry
|
|
37
|
+
style Generic::Error, :fg => :cherry, :italic => true, :bold => true
|
|
38
|
+
style Keyword, :fg => :royal, :bold => true
|
|
39
|
+
style Operator, :fg => :grape, :bold => true
|
|
40
|
+
style Punctuation, :fg => :grape
|
|
41
|
+
style Generic::Deleted, :fg => :cherry
|
|
42
|
+
style Generic::Inserted, :fg => :forest
|
|
43
|
+
style Generic::Emph, :italic => true
|
|
44
|
+
style Generic::Strong, :bold => true
|
|
45
|
+
style Generic::Traceback, :fg => :black, :bg => :lavender
|
|
46
|
+
style Keyword::Constant, :fg => :forest, :bold => true
|
|
47
|
+
style Keyword::Namespace,
|
|
48
|
+
Keyword::Pseudo,
|
|
49
|
+
Keyword::Reserved,
|
|
50
|
+
Generic::Heading,
|
|
51
|
+
Generic::Subheading, :fg => :forest, :bold => true
|
|
52
|
+
style Keyword::Type,
|
|
53
|
+
Name::Constant,
|
|
54
|
+
Name::Class,
|
|
55
|
+
Name::Decorator,
|
|
56
|
+
Name::Namespace,
|
|
57
|
+
Name::Builtin::Pseudo,
|
|
58
|
+
Name::Exception, :fg => :chocolate, :bold => true
|
|
59
|
+
style Name::Label,
|
|
60
|
+
Name::Tag, :fg => :purple, :bold => true
|
|
61
|
+
style Literal::Number,
|
|
62
|
+
Literal::Date, :fg => :forest, :bold => true
|
|
63
|
+
style Literal::String::Symbol, :fg => :forest
|
|
64
|
+
style Literal::String, :fg => :wine, :bold => true
|
|
65
|
+
style Literal::String::Escape,
|
|
66
|
+
Literal::String::Char,
|
|
67
|
+
Literal::String::Interpol, :fg => :purple, :bold => true
|
|
68
|
+
style Name::Builtin, :bold => true
|
|
69
|
+
style Name::Entity, :fg => :darkgray, :bold => true
|
|
70
|
+
style Text::Whitespace, :fg => :lightgray
|
|
71
|
+
style Generic::Output, :fg => :royal
|
|
72
|
+
style Name::Function,
|
|
73
|
+
Name::Property,
|
|
74
|
+
Name::Attribute, :fg => :candy
|
|
75
|
+
style Name::Variable, :fg => :candy, :bold => true
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
end
|