rouge 4.7.0 → 5.1.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 +4 -4
- data/Gemfile +11 -4
- data/bin/rougify +3 -4
- data/lib/rouge/cli.rb +7 -10
- data/lib/rouge/demos/abap +30 -4
- data/lib/rouge/demos/addmusick +12 -0
- data/lib/rouge/demos/dylan +8 -0
- data/lib/rouge/demos/java +3 -0
- data/lib/rouge/demos/kick_assembler +14 -0
- data/lib/rouge/demos/pdf +29 -0
- data/lib/rouge/demos/thrift +15 -0
- data/lib/rouge/demos/veryl +24 -0
- data/lib/rouge/eager.rb +3 -0
- data/lib/rouge/formatters/html.rb +8 -1
- data/lib/rouge/formatters/html_debug.rb +16 -0
- data/lib/rouge/formatters/html_legacy.rb +15 -1
- data/lib/rouge/formatters/html_legacy_table.rb +57 -0
- data/lib/rouge/formatters/html_line_highlighter.rb +11 -4
- data/lib/rouge/formatters/html_line_table.rb +8 -3
- data/lib/rouge/formatters/html_linewise.rb +11 -2
- data/lib/rouge/formatters/html_pygments.rb +6 -1
- data/lib/rouge/formatters/html_table.rb +47 -21
- data/lib/rouge/formatters/terminal256.rb +3 -3
- data/lib/rouge/formatters/tex.rb +1 -1
- data/lib/rouge/guesser.rb +1 -1
- data/lib/rouge/guessers/disambiguation.rb +2 -2
- data/lib/rouge/guessers/glob_mapping.rb +2 -2
- data/lib/rouge/guessers/modeline.rb +2 -2
- data/lib/rouge/lexer.rb +75 -21
- data/lib/rouge/lexers/abap/builtins.rb +187 -0
- data/lib/rouge/lexers/abap.rb +70 -178
- data/lib/rouge/lexers/ada.rb +1 -1
- data/lib/rouge/lexers/addmusick.rb +251 -0
- data/lib/rouge/lexers/apache/keywords.rb +3 -11
- data/lib/rouge/lexers/apache.rb +25 -24
- data/lib/rouge/lexers/apex.rb +2 -2
- data/lib/rouge/lexers/apiblueprint.rb +3 -3
- data/lib/rouge/lexers/apple_script.rb +2 -2
- data/lib/rouge/lexers/bicep.rb +2 -2
- data/lib/rouge/lexers/biml.rb +36 -9
- data/lib/rouge/lexers/brightscript.rb +3 -4
- data/lib/rouge/lexers/c.rb +9 -5
- data/lib/rouge/lexers/console.rb +11 -5
- data/lib/rouge/lexers/cpp.rb +10 -12
- data/lib/rouge/lexers/crystal.rb +1 -1
- data/lib/rouge/lexers/css.rb +21 -2
- data/lib/rouge/lexers/cuda.rb +4 -4
- data/lib/rouge/lexers/cypher.rb +0 -1
- data/lib/rouge/lexers/cython.rb +26 -50
- data/lib/rouge/lexers/dafny.rb +1 -1
- data/lib/rouge/lexers/dart.rb +2 -0
- data/lib/rouge/lexers/datastudio.rb +1 -1
- data/lib/rouge/lexers/digdag.rb +2 -3
- data/lib/rouge/lexers/dylan.rb +109 -0
- data/lib/rouge/lexers/ecl.rb +3 -3
- data/lib/rouge/lexers/elixir.rb +15 -10
- data/lib/rouge/lexers/escape.rb +1 -1
- data/lib/rouge/lexers/factor.rb +1 -1
- data/lib/rouge/lexers/freefem.rb +2 -2
- data/lib/rouge/lexers/gdscript.rb +1 -1
- data/lib/rouge/lexers/ghc_cmm.rb +1 -1
- data/lib/rouge/lexers/ghc_core.rb +1 -1
- data/lib/rouge/lexers/gherkin/keywords.rb +10 -6
- data/lib/rouge/lexers/gherkin.rb +28 -26
- data/lib/rouge/lexers/gjs.rb +2 -2
- data/lib/rouge/lexers/glsl/builtins.rb +17 -0
- data/lib/rouge/lexers/glsl.rb +50 -113
- data/lib/rouge/lexers/go.rb +2 -2
- data/lib/rouge/lexers/gradle.rb +2 -2
- data/lib/rouge/lexers/groovy.rb +6 -0
- data/lib/rouge/lexers/gts.rb +2 -2
- data/lib/rouge/lexers/hack.rb +5 -7
- data/lib/rouge/lexers/haxe.rb +3 -3
- data/lib/rouge/lexers/hlsl.rb +6 -6
- data/lib/rouge/lexers/hocon.rb +2 -2
- data/lib/rouge/lexers/hql.rb +15 -19
- data/lib/rouge/lexers/idris.rb +1 -1
- data/lib/rouge/lexers/igorpro/builtins.rb +1530 -0
- data/lib/rouge/lexers/igorpro.rb +49 -520
- data/lib/rouge/lexers/irb.rb +3 -3
- data/lib/rouge/lexers/isbl.rb +7 -43
- data/lib/rouge/lexers/j.rb +1 -1
- data/lib/rouge/lexers/java.rb +7 -4
- data/lib/rouge/lexers/json5.rb +2 -2
- data/lib/rouge/lexers/json_doc.rb +2 -2
- data/lib/rouge/lexers/jsp.rb +119 -119
- data/lib/rouge/lexers/jsx.rb +3 -3
- data/lib/rouge/lexers/kick_assembler.rb +100 -0
- data/lib/rouge/lexers/kotlin.rb +5 -0
- data/lib/rouge/lexers/lasso/keywords.rb +6 -6
- data/lib/rouge/lexers/lasso.rb +9 -11
- data/lib/rouge/lexers/lean.rb +0 -1
- data/lib/rouge/lexers/liquid.rb +5 -6
- data/lib/rouge/lexers/llvm/keywords.rb +3 -12
- data/lib/rouge/lexers/llvm.rb +5 -16
- data/lib/rouge/lexers/lua/keywords.rb +11 -13
- data/lib/rouge/lexers/lua.rb +8 -7
- data/lib/rouge/lexers/lutin.rb +5 -4
- data/lib/rouge/lexers/m68k.rb +3 -3
- data/lib/rouge/lexers/make.rb +2 -0
- data/lib/rouge/lexers/markdown.rb +7 -6
- data/lib/rouge/lexers/mason.rb +110 -110
- data/lib/rouge/lexers/mathematica/keywords.rb +1 -3
- data/lib/rouge/lexers/mathematica.rb +6 -7
- data/lib/rouge/lexers/matlab/keywords.rb +2 -2
- data/lib/rouge/lexers/matlab.rb +5 -5
- data/lib/rouge/lexers/meson.rb +1 -1
- data/lib/rouge/lexers/mojo.rb +6 -3
- data/lib/rouge/lexers/moonscript.rb +19 -17
- data/lib/rouge/lexers/nesasm.rb +6 -6
- data/lib/rouge/lexers/nial.rb +7 -8
- data/lib/rouge/lexers/nim.rb +3 -3
- data/lib/rouge/lexers/nix.rb +10 -8
- data/lib/rouge/lexers/objective_c.rb +3 -3
- data/lib/rouge/lexers/objective_cpp.rb +3 -2
- data/lib/rouge/lexers/ocaml.rb +2 -2
- data/lib/rouge/lexers/openedge.rb +9 -9
- data/lib/rouge/lexers/pdf.rb +109 -0
- data/lib/rouge/lexers/perl.rb +140 -43
- data/lib/rouge/lexers/php/keywords.rb +136 -138
- data/lib/rouge/lexers/php.rb +59 -10
- data/lib/rouge/lexers/plist.rb +0 -1
- data/lib/rouge/lexers/plsql.rb +8 -9
- data/lib/rouge/lexers/postscript.rb +2 -2
- data/lib/rouge/lexers/powershell.rb +1 -1
- data/lib/rouge/lexers/prolog.rb +0 -1
- data/lib/rouge/lexers/prometheus.rb +0 -1
- data/lib/rouge/lexers/properties.rb +2 -2
- data/lib/rouge/lexers/python.rb +110 -65
- data/lib/rouge/lexers/qml.rb +2 -3
- data/lib/rouge/lexers/r.rb +1 -1
- data/lib/rouge/lexers/reasonml.rb +2 -2
- data/lib/rouge/lexers/rego.rb +53 -53
- data/lib/rouge/lexers/rescript.rb +2 -2
- data/lib/rouge/lexers/robot_framework.rb +12 -12
- data/lib/rouge/lexers/{coq.rb → rocq.rb} +15 -6
- data/lib/rouge/lexers/ruby.rb +33 -7
- data/lib/rouge/lexers/rust.rb +1 -0
- data/lib/rouge/lexers/sas.rb +164 -165
- data/lib/rouge/lexers/sass/common.rb +1 -1
- data/lib/rouge/lexers/sass.rb +2 -2
- data/lib/rouge/lexers/scala.rb +0 -1
- data/lib/rouge/lexers/scss.rb +2 -2
- data/lib/rouge/lexers/sed.rb +1 -1
- data/lib/rouge/lexers/shell.rb +23 -7
- data/lib/rouge/lexers/slice.rb +2 -2
- data/lib/rouge/lexers/smarty.rb +0 -1
- data/lib/rouge/lexers/sparql.rb +1 -1
- data/lib/rouge/lexers/sqf/keywords.rb +5 -3
- data/lib/rouge/lexers/sqf.rb +3 -4
- data/lib/rouge/lexers/stan.rb +9 -15
- data/lib/rouge/lexers/svelte.rb +2 -2
- data/lib/rouge/lexers/swift.rb +2 -2
- data/lib/rouge/lexers/tap.rb +0 -1
- data/lib/rouge/lexers/tcl.rb +1 -1
- data/lib/rouge/lexers/terraform.rb +2 -2
- data/lib/rouge/lexers/thrift.rb +120 -0
- data/lib/rouge/lexers/tsx.rb +3 -3
- data/lib/rouge/lexers/ttcn3.rb +1 -1
- data/lib/rouge/lexers/tulip.rb +0 -1
- data/lib/rouge/lexers/twig.rb +2 -2
- data/lib/rouge/lexers/typescript.rb +3 -3
- data/lib/rouge/lexers/varnish.rb +8 -8
- data/lib/rouge/lexers/veryl.rb +109 -0
- data/lib/rouge/lexers/vhdl.rb +3 -1
- data/lib/rouge/lexers/viml/keywords.rb +5 -7
- data/lib/rouge/lexers/viml.rb +8 -10
- data/lib/rouge/lexers/vue.rb +20 -4
- data/lib/rouge/lexers/xquery.rb +2 -1
- data/lib/rouge/lexers/yaml.rb +13 -1
- data/lib/rouge/lexers/yang.rb +42 -74
- data/lib/rouge/lexers/zig.rb +10 -10
- data/lib/rouge/plugins/redcarpet.rb +3 -2
- data/lib/rouge/regex_lexer.rb +37 -14
- data/lib/rouge/themes/gruvbox.rb +3 -0
- data/lib/rouge/themes/thankful_eyes.rb +2 -1
- data/lib/rouge/token.rb +1 -1
- data/lib/rouge/util.rb +1 -1
- data/lib/rouge/version.rb +1 -1
- data/lib/rouge.rb +70 -59
- data/lib/rubocop/cop/rouge/no_building_alternation_pattern_in_regexp.rb +71 -0
- data/lib/rubocop/cop/rouge/no_huge_collections.rb +37 -0
- data/rouge.gemspec +8 -5
- metadata +43 -10
- data/lib/rouge/lexers/isbl/builtins.rb +0 -17
- data/lib/rouge/lexers/matlab/builtins.rb +0 -11
- /data/lib/rouge/demos/{applescript → apple_script} +0 -0
- /data/lib/rouge/demos/{coq → rocq} +0 -0
data/lib/rouge/lexers/viml.rb
CHANGED
|
@@ -13,9 +13,8 @@ module Rouge
|
|
|
13
13
|
|
|
14
14
|
mimetypes 'text/x-vim'
|
|
15
15
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
self.keywords
|
|
16
|
+
lazy do
|
|
17
|
+
require_relative 'viml/keywords'
|
|
19
18
|
end
|
|
20
19
|
|
|
21
20
|
state :root do
|
|
@@ -47,15 +46,14 @@ module Rouge
|
|
|
47
46
|
rule %r/[absg]:\w+\b/, Name::Variable
|
|
48
47
|
rule %r/\b\w+\b/ do |m|
|
|
49
48
|
name = m[0]
|
|
50
|
-
keywords = self.class.keywords
|
|
51
49
|
|
|
52
|
-
if
|
|
50
|
+
if KEYWORDS[:command].include? name
|
|
53
51
|
token Keyword
|
|
54
|
-
elsif
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
52
|
+
elsif (
|
|
53
|
+
KEYWORDS[:function].include?(name) ||
|
|
54
|
+
KEYWORDS[:option].include?(name) ||
|
|
55
|
+
KEYWORDS[:auto].include?(name)
|
|
56
|
+
)
|
|
59
57
|
token Name::Builtin
|
|
60
58
|
else
|
|
61
59
|
token Text
|
data/lib/rouge/lexers/vue.rb
CHANGED
|
@@ -1,10 +1,23 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
+
require_relative 'html'
|
|
4
|
+
|
|
3
5
|
module Rouge
|
|
4
6
|
module Lexers
|
|
5
|
-
load_lexer 'html.rb'
|
|
6
|
-
|
|
7
7
|
class Vue < HTML
|
|
8
|
+
# HTML extended with Vue template attribute shorthands.
|
|
9
|
+
# Used as the delegate lexer for <template> content so that directives
|
|
10
|
+
# like @click and @click.disabled are recognised without polluting the plain
|
|
11
|
+
# HTML lexer with framework-specific syntax.
|
|
12
|
+
class TemplateHTML < HTML
|
|
13
|
+
prepend :tag do
|
|
14
|
+
rule %r/([@a-zA-Z0-9_:#\[\]()*.-]+\s*)(=)(\s*)/m do
|
|
15
|
+
groups Name::Attribute, Operator, Text
|
|
16
|
+
push :attr
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
8
21
|
desc 'Vue.js single-file components'
|
|
9
22
|
tag 'vue'
|
|
10
23
|
aliases 'vuejs'
|
|
@@ -38,7 +51,7 @@ module Rouge
|
|
|
38
51
|
prepend :root do
|
|
39
52
|
rule %r/(<)(\s*)(template)/ do
|
|
40
53
|
groups Name::Tag, Text, Keyword
|
|
41
|
-
@lang =
|
|
54
|
+
@lang = TemplateHTML
|
|
42
55
|
push :template
|
|
43
56
|
push :lang_tag
|
|
44
57
|
end
|
|
@@ -59,7 +72,10 @@ module Rouge
|
|
|
59
72
|
end
|
|
60
73
|
|
|
61
74
|
prepend :tag do
|
|
62
|
-
rule %r/[a-zA-Z0-9_:#\[\]()*.-]+\s
|
|
75
|
+
rule %r/([a-zA-Z0-9_:#\[\]()*.-]+\s*)(=)(\s*)/m do
|
|
76
|
+
groups Name::Attribute, Operator, Text
|
|
77
|
+
push :attr
|
|
78
|
+
end
|
|
63
79
|
end
|
|
64
80
|
|
|
65
81
|
state :style do
|
data/lib/rouge/lexers/xquery.rb
CHANGED
data/lib/rouge/lexers/yaml.rb
CHANGED
|
@@ -172,12 +172,24 @@ module Rouge
|
|
|
172
172
|
end
|
|
173
173
|
|
|
174
174
|
state :block_nodes do
|
|
175
|
-
# implicit key
|
|
175
|
+
# implicit unquoted key
|
|
176
176
|
rule %r/([^#,?\[\]{}"'\n]+)(:)(?=\s|$)/ do |m|
|
|
177
177
|
groups Name::Attribute, Punctuation::Indicator
|
|
178
178
|
set_indent m[0], :implicit => true
|
|
179
179
|
end
|
|
180
180
|
|
|
181
|
+
# implicit double-quoted key
|
|
182
|
+
rule %r/("(?:[^\n"]|\\")*")(\s*)(:)(?=\s|$)/ do |m|
|
|
183
|
+
groups Name::Attribute, Text, Punctuation::Indicator
|
|
184
|
+
set_indent m[0], :implicit => true
|
|
185
|
+
end
|
|
186
|
+
|
|
187
|
+
# implicit single-quoted key
|
|
188
|
+
rule %r/('(?:[^\n']|\\')*')(\s*)(:)(?=\s|$)/ do |m|
|
|
189
|
+
groups Name::Attribute, Text, Punctuation::Indicator
|
|
190
|
+
set_indent m[0], :implicit => true
|
|
191
|
+
end
|
|
192
|
+
|
|
181
193
|
# literal and folded scalars
|
|
182
194
|
rule %r/[\|>][+-]?/ do
|
|
183
195
|
token Punctuation::Indicator
|
data/lib/rouge/lexers/yang.rb
CHANGED
|
@@ -13,74 +13,56 @@ module Rouge
|
|
|
13
13
|
id = /[\w-]+(?=[^\w\-\:])\b/
|
|
14
14
|
|
|
15
15
|
#Keywords from RFC7950 ; oriented at BNF style
|
|
16
|
-
|
|
17
|
-
@top_stms_keywords ||= Set.new %w(
|
|
18
|
-
module submodule
|
|
19
|
-
)
|
|
20
|
-
end
|
|
16
|
+
top_keywords = Set.new %w(module submodule)
|
|
21
17
|
|
|
22
|
-
|
|
23
|
-
@module_header_stmts_keywords ||= Set.new %w(
|
|
24
|
-
belongs-to namespace prefix yang-version
|
|
25
|
-
)
|
|
26
|
-
end
|
|
18
|
+
module_header_keywords = Set.new %w(belongs-to namespace prefix yang-version)
|
|
27
19
|
|
|
28
|
-
|
|
29
|
-
@meta_stmts_keywords ||= Set.new %w(
|
|
30
|
-
contact description organization reference revision
|
|
31
|
-
)
|
|
32
|
-
end
|
|
20
|
+
meta_keywords = Set.new %w(contact description organization reference revision)
|
|
33
21
|
|
|
34
|
-
|
|
35
|
-
@linkage_stmts_keywords ||= Set.new %w(
|
|
36
|
-
import include revision-date
|
|
37
|
-
)
|
|
38
|
-
end
|
|
22
|
+
linkage_keywords = Set.new %w(import include revision-date)
|
|
39
23
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
)
|
|
45
|
-
end
|
|
24
|
+
body_keywords = Set.new %w(
|
|
25
|
+
action argument augment deviation extension feature grouping identity
|
|
26
|
+
if-feature input notification output rpc typedef
|
|
27
|
+
)
|
|
46
28
|
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
)
|
|
52
|
-
end
|
|
29
|
+
data_def_keywords = Set.new %w(
|
|
30
|
+
anydata anyxml case choice config container deviate leaf leaf-list
|
|
31
|
+
list must presence refine uses when
|
|
32
|
+
)
|
|
53
33
|
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
)
|
|
60
|
-
end
|
|
34
|
+
type_keywords = Set.new %w(
|
|
35
|
+
base bit default enum error-app-tag error-message fraction-digits
|
|
36
|
+
length max-elements min-elements modifier ordered-by path pattern
|
|
37
|
+
position range require-instance status type units value yin-element
|
|
38
|
+
)
|
|
61
39
|
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
)
|
|
66
|
-
end
|
|
40
|
+
list_keywords = Set.new %w(
|
|
41
|
+
key mandatory unique
|
|
42
|
+
)
|
|
67
43
|
|
|
68
44
|
#RFC7950 other keywords
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
)
|
|
74
|
-
end
|
|
45
|
+
CONSTANTS = Set.new %w(
|
|
46
|
+
add current delete deprecated false invert-match max min
|
|
47
|
+
not-supported obsolete replace true unbounded user
|
|
48
|
+
)
|
|
75
49
|
|
|
76
50
|
#RFC7950 Built-In Types
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
51
|
+
TYPES = Set.new %w(
|
|
52
|
+
binary bits boolean decimal64 empty enumeration identityref
|
|
53
|
+
instance-identifier int16 int32 int64 int8 leafref string uint16
|
|
54
|
+
uint32 uint64 uint8 union
|
|
55
|
+
)
|
|
56
|
+
|
|
57
|
+
DECLARATIONS =
|
|
58
|
+
top_keywords +
|
|
59
|
+
module_header_keywords +
|
|
60
|
+
meta_keywords +
|
|
61
|
+
linkage_keywords +
|
|
62
|
+
body_keywords +
|
|
63
|
+
data_def_keywords +
|
|
64
|
+
type_keywords +
|
|
65
|
+
list_keywords
|
|
84
66
|
|
|
85
67
|
state :comment do
|
|
86
68
|
rule %r/[^*\/]/, Comment
|
|
@@ -115,25 +97,11 @@ module Rouge
|
|
|
115
97
|
rule id do |m|
|
|
116
98
|
name = m[0].downcase
|
|
117
99
|
|
|
118
|
-
if
|
|
119
|
-
token Keyword::Declaration
|
|
120
|
-
elsif self.class.module_header_stmts_keywords.include? name
|
|
121
|
-
token Keyword::Declaration
|
|
122
|
-
elsif self.class.meta_stmts_keywords.include? name
|
|
123
|
-
token Keyword::Declaration
|
|
124
|
-
elsif self.class.linkage_stmts_keywords.include? name
|
|
125
|
-
token Keyword::Declaration
|
|
126
|
-
elsif self.class.body_stmts_keywords.include? name
|
|
127
|
-
token Keyword::Declaration
|
|
128
|
-
elsif self.class.data_def_stmts_keywords.include? name
|
|
129
|
-
token Keyword::Declaration
|
|
130
|
-
elsif self.class.type_stmts_keywords.include? name
|
|
131
|
-
token Keyword::Declaration
|
|
132
|
-
elsif self.class.list_stmts_keywords.include? name
|
|
100
|
+
if DECLARATIONS.include?(name)
|
|
133
101
|
token Keyword::Declaration
|
|
134
|
-
elsif
|
|
102
|
+
elsif TYPES.include? name
|
|
135
103
|
token Keyword::Type
|
|
136
|
-
elsif
|
|
104
|
+
elsif CONSTANTS.include? name
|
|
137
105
|
token Name::Constant
|
|
138
106
|
else
|
|
139
107
|
token Name
|
data/lib/rouge/lexers/zig.rb
CHANGED
|
@@ -84,16 +84,16 @@ module Rouge
|
|
|
84
84
|
rule %r/([.]?)(\s*)(@?#{id})(\s*)([(]?)/ do |m|
|
|
85
85
|
name = m[3]
|
|
86
86
|
t = if self.class.keywords.include? name
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
87
|
+
Keyword
|
|
88
|
+
elsif self.class.builtins.include? name
|
|
89
|
+
Name::Builtin
|
|
90
|
+
elsif !m[1].empty? && !m[5].empty?
|
|
91
|
+
Name::Function
|
|
92
|
+
elsif !m[1].empty?
|
|
93
|
+
Name::Property
|
|
94
|
+
else
|
|
95
|
+
Name
|
|
96
|
+
end
|
|
97
97
|
|
|
98
98
|
groups Punctuation, Text, t, Text, Punctuation
|
|
99
99
|
end
|
|
@@ -25,12 +25,13 @@ module Rouge
|
|
|
25
25
|
end
|
|
26
26
|
|
|
27
27
|
formatter = rouge_formatter(lexer)
|
|
28
|
-
formatter.format(lexer.lex(code))
|
|
28
|
+
formatted = formatter.format(lexer.lex(code))
|
|
29
|
+
%(<pre class="highlight #{lexer.tag}"><code>#{formatted}</code></pre>)
|
|
29
30
|
end
|
|
30
31
|
|
|
31
32
|
# override this method for custom formatting behavior
|
|
32
33
|
def rouge_formatter(lexer)
|
|
33
|
-
Formatters::
|
|
34
|
+
Rouge::Formatters::HTML.new
|
|
34
35
|
end
|
|
35
36
|
end
|
|
36
37
|
end
|
data/lib/rouge/regex_lexer.rb
CHANGED
|
@@ -37,6 +37,12 @@ module Rouge
|
|
|
37
37
|
end
|
|
38
38
|
end
|
|
39
39
|
|
|
40
|
+
# exception class for fallthrough - using an exception is slightly faster
|
|
41
|
+
# than catch { ... }, but it is not semantically an error that should be
|
|
42
|
+
# rescued from.
|
|
43
|
+
class Fallthrough < Exception # rubocop:disable Lint/InheritException
|
|
44
|
+
end
|
|
45
|
+
|
|
40
46
|
# A rule is a tuple of a regular expression to test, and a callback
|
|
41
47
|
# to perform if the test succeeds.
|
|
42
48
|
#
|
|
@@ -44,11 +50,9 @@ module Rouge
|
|
|
44
50
|
class Rule
|
|
45
51
|
attr_reader :callback
|
|
46
52
|
attr_reader :re
|
|
47
|
-
attr_reader :beginning_of_line
|
|
48
53
|
def initialize(re, callback)
|
|
49
54
|
@re = re
|
|
50
55
|
@callback = callback
|
|
51
|
-
@beginning_of_line = re.source[0] == ?^
|
|
52
56
|
end
|
|
53
57
|
|
|
54
58
|
def inspect
|
|
@@ -277,6 +281,18 @@ module Rouge
|
|
|
277
281
|
end
|
|
278
282
|
end
|
|
279
283
|
|
|
284
|
+
def inspect_details
|
|
285
|
+
yield ' stack:['
|
|
286
|
+
first = true
|
|
287
|
+
stack.each do |state|
|
|
288
|
+
yield ',' unless first
|
|
289
|
+
first = false
|
|
290
|
+
yield state.name
|
|
291
|
+
end
|
|
292
|
+
|
|
293
|
+
yield ']'
|
|
294
|
+
end
|
|
295
|
+
|
|
280
296
|
# @private
|
|
281
297
|
def get_state(state_name)
|
|
282
298
|
self.class.get_state(state_name)
|
|
@@ -322,7 +338,7 @@ module Rouge
|
|
|
322
338
|
#
|
|
323
339
|
# @see #step #step (where (2.) is implemented)
|
|
324
340
|
def stream_tokens(str, &b)
|
|
325
|
-
stream = StringScanner.new(str)
|
|
341
|
+
stream = StringScanner.new(str, fixed_anchor: true)
|
|
326
342
|
|
|
327
343
|
@current_stream = stream
|
|
328
344
|
@output_stream = b
|
|
@@ -333,7 +349,7 @@ module Rouge
|
|
|
333
349
|
if @debug
|
|
334
350
|
puts
|
|
335
351
|
puts "lexer: #{self.class.tag}"
|
|
336
|
-
puts "stack: #{stack.map
|
|
352
|
+
puts "stack: #{stack.map { |s| s.name.to_sym }.inspect}"
|
|
337
353
|
puts "stream: #{stream.peek(20).inspect}"
|
|
338
354
|
end
|
|
339
355
|
|
|
@@ -341,7 +357,7 @@ module Rouge
|
|
|
341
357
|
|
|
342
358
|
if !success
|
|
343
359
|
puts " no match, yielding Error" if @debug
|
|
344
|
-
|
|
360
|
+
yield(Token::Tokens::Error, stream.getch)
|
|
345
361
|
end
|
|
346
362
|
end
|
|
347
363
|
end
|
|
@@ -364,18 +380,9 @@ module Rouge
|
|
|
364
380
|
else
|
|
365
381
|
puts " trying: #{rule.inspect}" if @debug
|
|
366
382
|
|
|
367
|
-
# XXX HACK XXX
|
|
368
|
-
# StringScanner's implementation of ^ is b0rken.
|
|
369
|
-
# see http://bugs.ruby-lang.org/issues/7092
|
|
370
|
-
# TODO: this doesn't cover cases like /(a|^b)/, but it's
|
|
371
|
-
# the most common, for now...
|
|
372
|
-
next if rule.beginning_of_line && !stream.beginning_of_line?
|
|
373
|
-
|
|
374
383
|
if (size = stream.skip(rule.re))
|
|
375
384
|
puts " got: #{stream[0].inspect}" if @debug
|
|
376
385
|
|
|
377
|
-
instance_exec(stream, &rule.callback)
|
|
378
|
-
|
|
379
386
|
if size.zero?
|
|
380
387
|
@null_steps += 1
|
|
381
388
|
if @null_steps > MAX_NULL_SCANS
|
|
@@ -386,6 +393,13 @@ module Rouge
|
|
|
386
393
|
@null_steps = 0
|
|
387
394
|
end
|
|
388
395
|
|
|
396
|
+
begin
|
|
397
|
+
instance_exec(stream, &rule.callback)
|
|
398
|
+
rescue Fallthrough
|
|
399
|
+
stream.unscan
|
|
400
|
+
next
|
|
401
|
+
end
|
|
402
|
+
|
|
389
403
|
return true
|
|
390
404
|
end
|
|
391
405
|
end
|
|
@@ -440,10 +454,19 @@ module Rouge
|
|
|
440
454
|
end
|
|
441
455
|
end
|
|
442
456
|
|
|
457
|
+
# Re-lexes the given text (or the most recently matched string if
|
|
458
|
+
# none is given) with the current lexer.
|
|
443
459
|
def recurse(text=nil)
|
|
444
460
|
delegate(self.class, text)
|
|
445
461
|
end
|
|
446
462
|
|
|
463
|
+
# Breaks out of the current rule block and continues to match later
|
|
464
|
+
# rules, as if the current regex had not matched. Does not affect
|
|
465
|
+
# the stack.
|
|
466
|
+
def fallthrough!
|
|
467
|
+
raise Fallthrough
|
|
468
|
+
end
|
|
469
|
+
|
|
447
470
|
# Push a state onto the stack. If no state name is given and you've
|
|
448
471
|
# passed a block, a state will be dynamically created using the
|
|
449
472
|
# {StateDSL}.
|
data/lib/rouge/themes/gruvbox.rb
CHANGED
|
@@ -10,6 +10,7 @@ module Rouge
|
|
|
10
10
|
class Gruvbox < CSSTheme
|
|
11
11
|
name 'gruvbox'
|
|
12
12
|
|
|
13
|
+
# rubocop:disable Naming/ConstantName
|
|
13
14
|
# global Gruvbox colours {{{
|
|
14
15
|
C_dark0_hard = '#1d2021'
|
|
15
16
|
C_dark0 ='#282828'
|
|
@@ -122,6 +123,8 @@ module Rouge
|
|
|
122
123
|
palette orange: C_faded_orange
|
|
123
124
|
end
|
|
124
125
|
|
|
126
|
+
# rubocop:enable Naming/ConstantName
|
|
127
|
+
|
|
125
128
|
dark!
|
|
126
129
|
mode :light
|
|
127
130
|
|
|
@@ -60,7 +60,8 @@ module Rouge
|
|
|
60
60
|
Literal::Date,
|
|
61
61
|
Literal::String::Symbol, :fg => :pink_merengue, :bold => true
|
|
62
62
|
style Literal::String, :fg => :dune, :bold => true
|
|
63
|
-
style Literal::String::Affix,
|
|
63
|
+
style Literal::String::Affix,
|
|
64
|
+
Literal::String::Delimiter, :fg => :sandy, :bold => true
|
|
64
65
|
style Literal::String::Escape,
|
|
65
66
|
Literal::String::Char,
|
|
66
67
|
Literal::String::Interpol, :fg => :backlit, :bold => true
|
data/lib/rouge/token.rb
CHANGED
data/lib/rouge/util.rb
CHANGED
data/lib/rouge/version.rb
CHANGED
data/lib/rouge.rb
CHANGED
|
@@ -3,6 +3,9 @@
|
|
|
3
3
|
|
|
4
4
|
# stdlib
|
|
5
5
|
require 'pathname'
|
|
6
|
+
require 'set'
|
|
7
|
+
require 'strscan'
|
|
8
|
+
require 'uri'
|
|
6
9
|
|
|
7
10
|
# The containing module for Rouge
|
|
8
11
|
module Rouge
|
|
@@ -11,7 +14,12 @@ module Rouge
|
|
|
11
14
|
LIB_DIR = __dir__.freeze
|
|
12
15
|
|
|
13
16
|
class << self
|
|
17
|
+
# @deprecated This method of reloading is incompatible with modern Ruby's
|
|
18
|
+
# expectations around global caching of `require`. It is deprecated with no
|
|
19
|
+
# replacement - consider reloading the entire process instead with something
|
|
20
|
+
# like Guard. This method will be removed in rouge 5.0.
|
|
14
21
|
def reload!
|
|
22
|
+
Kernel::warn "Rouge.reload! is deprecated, with no replacement, and will be removed in 5.0. Use a reloading system like Guard instead."
|
|
15
23
|
Object::send :remove_const, :Rouge
|
|
16
24
|
Kernel::load __FILE__
|
|
17
25
|
end
|
|
@@ -36,71 +44,74 @@ module Rouge
|
|
|
36
44
|
formatter.format(lexer.lex(text), &b)
|
|
37
45
|
end
|
|
38
46
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
# @api private
|
|
42
|
-
def load_file(path)
|
|
43
|
-
Kernel::load File.join(LIB_DIR, "rouge/#{path}.rb")
|
|
44
|
-
end
|
|
45
|
-
|
|
46
|
-
# Load the lexers in the `lib/rouge/lexers` directory.
|
|
47
|
-
#
|
|
48
|
-
# @api private
|
|
49
|
-
def load_lexers
|
|
50
|
-
lexer_dir = Pathname.new(LIB_DIR) / "rouge/lexers"
|
|
51
|
-
Pathname.glob(lexer_dir / '*.rb').each do |f|
|
|
52
|
-
Lexers.load_lexer(f.relative_path_from(lexer_dir))
|
|
53
|
-
end
|
|
47
|
+
def eager_load!
|
|
48
|
+
Rouge::Lexer.all.each(&:eager_load!)
|
|
54
49
|
end
|
|
55
50
|
end
|
|
56
51
|
end
|
|
57
52
|
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
53
|
+
require_relative 'rouge/version'
|
|
54
|
+
require_relative 'rouge/util'
|
|
55
|
+
require_relative 'rouge/text_analyzer'
|
|
56
|
+
require_relative 'rouge/token'
|
|
62
57
|
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
58
|
+
require_relative 'rouge/lexer'
|
|
59
|
+
require_relative 'rouge/regex_lexer'
|
|
60
|
+
require_relative 'rouge/template_lexer'
|
|
66
61
|
|
|
67
|
-
|
|
62
|
+
# workaround for https://bugs.ruby-lang.org/issues/21870
|
|
63
|
+
# delete this entire begin/end block (or guard it against RUBY_VERSION)
|
|
64
|
+
# when that is fixed.
|
|
65
|
+
begin
|
|
66
|
+
old_verbose, $VERBOSE = $VERBOSE, false
|
|
67
|
+
require_relative 'rouge/lexers/xml'
|
|
68
|
+
require_relative 'rouge/lexers/css'
|
|
69
|
+
require_relative 'rouge/lexers/html'
|
|
70
|
+
require_relative 'rouge/lexers/julia'
|
|
71
|
+
ensure
|
|
72
|
+
$VERBOSE = old_verbose
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
Dir.glob('rouge/lexers/*.rb', base: __dir__).each do |file|
|
|
76
|
+
require_relative file
|
|
77
|
+
end
|
|
68
78
|
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
79
|
+
require_relative 'rouge/guesser'
|
|
80
|
+
require_relative 'rouge/guessers/util'
|
|
81
|
+
require_relative 'rouge/guessers/glob_mapping'
|
|
82
|
+
require_relative 'rouge/guessers/modeline'
|
|
83
|
+
require_relative 'rouge/guessers/filename'
|
|
84
|
+
require_relative 'rouge/guessers/mimetype'
|
|
85
|
+
require_relative 'rouge/guessers/source'
|
|
86
|
+
require_relative 'rouge/guessers/disambiguation'
|
|
77
87
|
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
88
|
+
require_relative 'rouge/formatter'
|
|
89
|
+
require_relative 'rouge/formatters/html'
|
|
90
|
+
require_relative 'rouge/formatters/html_table'
|
|
91
|
+
require_relative 'rouge/formatters/html_pygments'
|
|
92
|
+
require_relative 'rouge/formatters/html_legacy'
|
|
93
|
+
require_relative 'rouge/formatters/html_linewise'
|
|
94
|
+
require_relative 'rouge/formatters/html_line_highlighter'
|
|
95
|
+
require_relative 'rouge/formatters/html_line_table'
|
|
96
|
+
require_relative 'rouge/formatters/html_inline'
|
|
97
|
+
require_relative 'rouge/formatters/html_debug'
|
|
98
|
+
require_relative 'rouge/formatters/terminal256'
|
|
99
|
+
require_relative 'rouge/formatters/terminal_truecolor'
|
|
100
|
+
require_relative 'rouge/formatters/tex'
|
|
101
|
+
require_relative 'rouge/formatters/null'
|
|
91
102
|
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
103
|
+
require_relative 'rouge/theme'
|
|
104
|
+
require_relative 'rouge/tex_theme_renderer'
|
|
105
|
+
require_relative 'rouge/themes/thankful_eyes'
|
|
106
|
+
require_relative 'rouge/themes/colorful'
|
|
107
|
+
require_relative 'rouge/themes/base16'
|
|
108
|
+
require_relative 'rouge/themes/github'
|
|
109
|
+
require_relative 'rouge/themes/igor_pro'
|
|
110
|
+
require_relative 'rouge/themes/monokai'
|
|
111
|
+
require_relative 'rouge/themes/molokai'
|
|
112
|
+
require_relative 'rouge/themes/monokai_sublime'
|
|
113
|
+
require_relative 'rouge/themes/gruvbox'
|
|
114
|
+
require_relative 'rouge/themes/tulip'
|
|
115
|
+
require_relative 'rouge/themes/pastie'
|
|
116
|
+
require_relative 'rouge/themes/bw'
|
|
117
|
+
require_relative 'rouge/themes/magritte'
|