rouge 0.2.8 → 0.2.9
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile +0 -1
- data/lib/rouge.rb +17 -2
- data/lib/rouge/cli.rb +2 -2
- data/lib/rouge/demos/conf +4 -0
- data/lib/rouge/demos/io +11 -0
- data/lib/rouge/demos/sed +4 -0
- data/lib/rouge/formatter.rb +9 -4
- data/lib/rouge/formatters/html.rb +1 -1
- data/lib/rouge/lexer.rb +3 -7
- data/lib/rouge/lexers/conf.rb +21 -0
- data/lib/rouge/lexers/io.rb +65 -0
- data/lib/rouge/lexers/nginx.rb +1 -0
- data/lib/rouge/lexers/perl.rb +2 -2
- data/lib/rouge/lexers/ruby.rb +3 -2
- data/lib/rouge/lexers/sed.rb +156 -11
- data/lib/rouge/lexers/shell.rb +3 -3
- data/lib/rouge/lexers/text.rb +2 -2
- data/lib/rouge/regex_lexer.rb +4 -2
- data/lib/rouge/util.rb +0 -10
- data/lib/rouge/version.rb +1 -1
- metadata +7 -2
data/Gemfile
CHANGED
data/lib/rouge.rb
CHANGED
@@ -1,16 +1,27 @@
|
|
1
1
|
# stdlib
|
2
2
|
require 'pathname'
|
3
3
|
|
4
|
+
# The containing module for Rouge
|
4
5
|
module Rouge
|
5
6
|
class << self
|
6
|
-
|
7
|
+
# Highlight some text with a given lexer and formatter.
|
8
|
+
#
|
9
|
+
# @example
|
10
|
+
# Rouge.highlight('@foo = 1', 'ruby', 'html')
|
11
|
+
# Rouge.highlight('var foo = 1;', 'js', 'terminal256')
|
12
|
+
#
|
13
|
+
# # streaming - chunks become available as they are lexed
|
14
|
+
# Rouge.highlight(large_string, 'ruby', 'html') do |chunk|
|
15
|
+
# $stdout.print chunk
|
16
|
+
# end
|
17
|
+
def highlight(text, lexer, formatter, &b)
|
7
18
|
lexer = Lexer.find(lexer) unless lexer.respond_to? :lex
|
8
19
|
raise "unknown lexer #{lexer}" unless lexer
|
9
20
|
|
10
21
|
formatter = Formatter.find(formatter) unless formatter.respond_to? :format
|
11
22
|
raise "unknown formatter #{formatter}" unless formatter
|
12
23
|
|
13
|
-
formatter.format(lexer.lex(text))
|
24
|
+
formatter.format(lexer.lex(text), &b)
|
14
25
|
end
|
15
26
|
end
|
16
27
|
end
|
@@ -38,6 +49,9 @@ load load_dir.join('rouge/lexers/sql.rb')
|
|
38
49
|
load load_dir.join('rouge/lexers/make.rb')
|
39
50
|
load load_dir.join('rouge/lexers/shell.rb')
|
40
51
|
load load_dir.join('rouge/lexers/viml.rb')
|
52
|
+
load load_dir.join('rouge/lexers/nginx.rb')
|
53
|
+
load load_dir.join('rouge/lexers/conf.rb')
|
54
|
+
load load_dir.join('rouge/lexers/sed.rb')
|
41
55
|
|
42
56
|
load load_dir.join('rouge/lexers/javascript.rb')
|
43
57
|
load load_dir.join('rouge/lexers/css.rb')
|
@@ -60,6 +74,7 @@ load load_dir.join('rouge/lexers/perl.rb')
|
|
60
74
|
load load_dir.join('rouge/lexers/factor.rb')
|
61
75
|
load load_dir.join('rouge/lexers/clojure.rb')
|
62
76
|
load load_dir.join('rouge/lexers/groovy.rb')
|
77
|
+
load load_dir.join('rouge/lexers/io.rb')
|
63
78
|
|
64
79
|
load load_dir.join('rouge/lexers/haskell.rb')
|
65
80
|
load load_dir.join('rouge/lexers/scheme.rb')
|
data/lib/rouge/cli.rb
CHANGED
@@ -60,7 +60,7 @@ module Rouge
|
|
60
60
|
formatter = formatter_class.new(normalize_hash_keys(options[:formatter_opts]))
|
61
61
|
lexer = lexer_class.new(normalize_hash_keys(options[:lexer_opts]))
|
62
62
|
|
63
|
-
|
63
|
+
formatter.format(lexer.lex(source), &method(:print))
|
64
64
|
end
|
65
65
|
|
66
66
|
desc 'style THEME', 'render THEME as css'
|
@@ -69,7 +69,7 @@ module Rouge
|
|
69
69
|
theme = Theme.find(theme_name)
|
70
70
|
raise "unknown theme: #{theme_name}" unless theme
|
71
71
|
|
72
|
-
|
72
|
+
theme.new(options).render(&method(:puts))
|
73
73
|
end
|
74
74
|
|
75
75
|
desc 'list', 'list the available lexers, formatters, and styles'
|
data/lib/rouge/demos/io
ADDED
@@ -0,0 +1,11 @@
|
|
1
|
+
bottle := method(i,
|
2
|
+
if(i==0, return "no more bottles of beer")
|
3
|
+
if(i==1, return "1 bottle of beer")
|
4
|
+
return i asString .. " bottles of beer"
|
5
|
+
)
|
6
|
+
|
7
|
+
for(i, 99, 1, -1,
|
8
|
+
write(bottle(i), " on the wall, ", bottle(i), ",\n")
|
9
|
+
write("take one down, pass it around,\n")
|
10
|
+
write(bottle(i - 1), " on the wall.\n\n")
|
11
|
+
)
|
data/lib/rouge/demos/sed
ADDED
data/lib/rouge/formatter.rb
CHANGED
@@ -19,13 +19,18 @@ module Rouge
|
|
19
19
|
end
|
20
20
|
|
21
21
|
# Format a token stream. Delegates to {#format}.
|
22
|
-
def self.format(tokens, opts={})
|
23
|
-
new(opts).format(tokens)
|
22
|
+
def self.format(tokens, opts={}, &b)
|
23
|
+
new(opts).format(tokens, &b)
|
24
24
|
end
|
25
25
|
|
26
26
|
# Format a token stream.
|
27
|
-
def format(tokens)
|
28
|
-
|
27
|
+
def format(tokens, &b)
|
28
|
+
return stream(tokens, &b) if block_given?
|
29
|
+
|
30
|
+
out = ''
|
31
|
+
stream(tokens) { |piece| out << piece }
|
32
|
+
|
33
|
+
out
|
29
34
|
end
|
30
35
|
|
31
36
|
# @deprecated Use {#format} instead.
|
data/lib/rouge/lexer.rb
CHANGED
@@ -265,13 +265,9 @@ module Rouge
|
|
265
265
|
# be changed once it has begun lexing. This method will redefine
|
266
266
|
# itself on the first call to a noop if "debug" is not set.
|
267
267
|
if option(:debug)
|
268
|
-
|
269
|
-
def debug; puts yield; end
|
270
|
-
end
|
268
|
+
def self.debug; puts yield; end
|
271
269
|
else
|
272
|
-
|
273
|
-
def debug; end
|
274
|
-
end
|
270
|
+
def self.debug; end
|
275
271
|
end
|
276
272
|
|
277
273
|
debug(&b)
|
@@ -299,7 +295,7 @@ module Rouge
|
|
299
295
|
# consolidate consecutive tokens of the same type
|
300
296
|
last_token = nil
|
301
297
|
last_val = nil
|
302
|
-
stream_tokens(
|
298
|
+
stream_tokens(string) do |tok, val|
|
303
299
|
next if val.empty?
|
304
300
|
|
305
301
|
if tok == last_token
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module Rouge
|
2
|
+
module Lexers
|
3
|
+
class Conf < RegexLexer
|
4
|
+
tag 'conf'
|
5
|
+
aliases 'config', 'configuration'
|
6
|
+
|
7
|
+
desc 'A generic lexer for configuration files'
|
8
|
+
filenames '*.conf', '*.config'
|
9
|
+
|
10
|
+
# short and sweet
|
11
|
+
state :root do
|
12
|
+
rule /#.*?\n/, 'Comment'
|
13
|
+
rule /".*?"/, 'Literal.String.Double'
|
14
|
+
rule /'.*?'/, 'Literal.String.Single'
|
15
|
+
rule /[a-z]\w*/i, 'Name'
|
16
|
+
rule /\d+/, 'Literal.Number'
|
17
|
+
rule /[^\d\w#"']+/, 'Text'
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,65 @@
|
|
1
|
+
module Rouge
|
2
|
+
module Lexers
|
3
|
+
class IO < RegexLexer
|
4
|
+
tag 'io'
|
5
|
+
desc 'The IO programming language (http://iolanguage.com)'
|
6
|
+
mimetypes 'text/x-iosrc'
|
7
|
+
filenames '*.io'
|
8
|
+
|
9
|
+
def self.analyze_text(text)
|
10
|
+
return 1 if text.shebang? 'io'
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.constants
|
14
|
+
@constants ||= Set.new %w(nil false true)
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.builtins
|
18
|
+
@builtins ||= Set.new %w(
|
19
|
+
args call clone do doFile doString else elseif for if list
|
20
|
+
method return super then
|
21
|
+
)
|
22
|
+
end
|
23
|
+
|
24
|
+
state :root do
|
25
|
+
rule /\s+/m, 'Text'
|
26
|
+
rule %r(//.*?\n), 'Comment.Single'
|
27
|
+
rule %r(#.*?\n), 'Comment.Single'
|
28
|
+
rule %r(/(\\\n)?[*].*?[*](\\\n)?/)m, 'Comment.Multiline'
|
29
|
+
rule %r(/[+]), 'Comment.Multiline', :nested_comment
|
30
|
+
|
31
|
+
rule /"(\\\\|\\"|[^"])*"/, 'Literal.String'
|
32
|
+
|
33
|
+
rule %r(:?:=), 'Keyword'
|
34
|
+
rule /[()]/, 'Punctuation'
|
35
|
+
|
36
|
+
rule %r([-=;,*+><!/|^.%&\[\]{}]), 'Operator'
|
37
|
+
|
38
|
+
rule /[A-Z]\w*/, 'Name.Class'
|
39
|
+
|
40
|
+
rule /[a-z_]\w*/ do |m|
|
41
|
+
name = m[0]
|
42
|
+
|
43
|
+
if self.class.constants.include? name
|
44
|
+
token 'Keyword.Constant'
|
45
|
+
elsif self.class.builtins.include? name
|
46
|
+
token 'Name.Builtin'
|
47
|
+
else
|
48
|
+
token 'Name'
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
rule %r((\d+[.]?\d*|\d*[.]\d+)(e[+-]?[0-9]+)?)i, 'Literal.Number.Float'
|
53
|
+
rule /\d+/, 'Literal.Number.Integer'
|
54
|
+
|
55
|
+
rule /@@?/, 'Keyword'
|
56
|
+
end
|
57
|
+
|
58
|
+
state :nested_comment do
|
59
|
+
rule %r([^/+]+)m, 'Comment.Multiline'
|
60
|
+
rule %r(/[+]), 'Comment.Multiline', :nested_comment
|
61
|
+
rule %r([+]/), 'Comment.Multiline', :pop!
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
data/lib/rouge/lexers/nginx.rb
CHANGED
data/lib/rouge/lexers/perl.rb
CHANGED
@@ -55,7 +55,7 @@ module Rouge
|
|
55
55
|
rule %r({(\\\\|\\}|[^}])*}[egimosx]*), re_tok, :pop!
|
56
56
|
rule %r(<(\\\\|\\>|[^>])*>[egimosx]*), re_tok, :pop!
|
57
57
|
rule %r(\[(\\\\|\\\]|[^\]])*\][egimosx]*), re_tok, :pop!
|
58
|
-
rule %r
|
58
|
+
rule %r[\((\\\\|\\\)|[^\)])*\)[egimosx]*], re_tok, :pop!
|
59
59
|
rule %r(@(\\\\|\\\@|[^\@])*@[egimosx]*), re_tok, :pop!
|
60
60
|
rule %r(%(\\\\|\\\%|[^\%])*%[egimosx]*), re_tok, :pop!
|
61
61
|
rule %r(\$(\\\\|\\\$|[^\$])*\$[egimosx]*), re_tok, :pop!
|
@@ -87,7 +87,7 @@ module Rouge
|
|
87
87
|
rule %r(s{(\\\\|\\}|[^}])*}\s*), re_tok, :balanced_regex
|
88
88
|
rule %r(s<(\\\\|\\>|[^>])*>\s*), re_tok, :balanced_regex
|
89
89
|
rule %r(s\[(\\\\|\\\]|[^\]])*\]\s*), re_tok, :balanced_regex
|
90
|
-
rule %r
|
90
|
+
rule %r[s\((\\\\|\\\)|[^\)])*\)\s*], re_tok, :balanced_regex
|
91
91
|
|
92
92
|
rule %r(m?/(\\\\|\\/|[^/\n])*/[gcimosx]*), re_tok
|
93
93
|
rule %r(m(?=[/!\\{<\[\(@%\$])), re_tok, :balanced_regex
|
data/lib/rouge/lexers/ruby.rb
CHANGED
@@ -135,7 +135,10 @@ module Rouge
|
|
135
135
|
end
|
136
136
|
|
137
137
|
state :root do
|
138
|
+
rule /\n\s*/m, 'Text', :expr_start
|
139
|
+
rule /\s+/, 'Text' # NB: NOT /m
|
138
140
|
rule /#.*$/, 'Comment.Single'
|
141
|
+
|
139
142
|
rule %r(=begin\b.*?end\b)m, 'Comment.Multiline'
|
140
143
|
rule /(?:#{keywords.join('|')})\b/, 'Keyword', :expr_start
|
141
144
|
rule /(?:#{keywords_pseudo.join('|')})\b/, 'Keyword.Pseudo', :expr_start
|
@@ -194,8 +197,6 @@ module Rouge
|
|
194
197
|
rule /[-+\/*%=<>&!^|~]=?/, 'Operator', :expr_start
|
195
198
|
rule %r<[({,?:\\;/]>, 'Punctuation', :expr_start
|
196
199
|
rule %r<[)}]>, 'Punctuation'
|
197
|
-
rule /\n\s*/m, 'Text', :expr_start
|
198
|
-
rule /\s+/, 'Text' # NB: NOT /m
|
199
200
|
end
|
200
201
|
|
201
202
|
state :has_heredocs do
|
data/lib/rouge/lexers/sed.rb
CHANGED
@@ -1,21 +1,166 @@
|
|
1
1
|
module Rouge
|
2
2
|
module Lexers
|
3
|
-
class Sed <
|
4
|
-
|
5
|
-
|
6
|
-
|
3
|
+
class Sed < RegexLexer
|
4
|
+
desc 'sed, the ultimate stream editor'
|
5
|
+
|
6
|
+
tag 'sed'
|
7
|
+
filenames '*.sed'
|
8
|
+
mimetypes 'text/x-sed'
|
9
|
+
|
10
|
+
def self.analyze_text(text)
|
11
|
+
return 1 if text.shebang? 'sed'
|
7
12
|
end
|
8
13
|
|
9
|
-
|
14
|
+
class Regex < RegexLexer
|
15
|
+
state :root do
|
16
|
+
rule /\\./, 'Literal.String.Escape'
|
17
|
+
rule /\[/, 'Punctuation', :brackets
|
18
|
+
rule /[$^.*]/, 'Operator'
|
19
|
+
rule /[()]/, 'Punctuation'
|
20
|
+
rule /./, 'Literal.String.Regex'
|
21
|
+
end
|
22
|
+
|
23
|
+
state :brackets do
|
24
|
+
rule /\^?/ do
|
25
|
+
token 'Punctuation'
|
26
|
+
pop!; push :brackets_int
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
state :brackets_int do
|
31
|
+
# ranges
|
32
|
+
rule /.-./, 'Name.Variable'
|
33
|
+
rule /\]/, 'Punctuation', :pop!
|
34
|
+
rule /./, 'Literal.String.Regex'
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
class Replacement < RegexLexer
|
39
|
+
state :root do
|
40
|
+
rule /\\./m, 'Literal.String.Escape'
|
41
|
+
rule /&/, 'Operator'
|
42
|
+
rule /[^\\&]+/m, 'Text'
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
def regex
|
47
|
+
@regex ||= Regex.new(options)
|
48
|
+
end
|
49
|
+
|
50
|
+
def replacement
|
51
|
+
@replacement ||= Replacement.new(options)
|
52
|
+
end
|
53
|
+
|
54
|
+
start { regex.reset!; replacement.reset! }
|
55
|
+
|
56
|
+
state :whitespace do
|
10
57
|
rule /\s+/m, 'Text'
|
11
|
-
rule
|
58
|
+
rule(/#.*?\n/) { token 'Comment'; reset_stack }
|
59
|
+
rule(/\n/) { token 'Text'; reset_stack }
|
60
|
+
rule(/;/) { token 'Punctuation'; reset_stack }
|
61
|
+
end
|
62
|
+
|
63
|
+
state :root do
|
64
|
+
mixin :addr_range
|
65
|
+
end
|
66
|
+
|
67
|
+
edot = /\\.|./m
|
68
|
+
|
69
|
+
state :command do
|
70
|
+
mixin :whitespace
|
71
|
+
|
72
|
+
# subst and transliteration
|
73
|
+
rule /(s)(.)(#{edot}*?)(\2)(#{edot}*?)(\2)/m do |m|
|
74
|
+
token 'Keyword', m[1]
|
75
|
+
token 'Punctuation', m[2]
|
76
|
+
delegate regex, m[3]
|
77
|
+
token 'Punctuation', m[4]
|
78
|
+
delegate replacement, m[5]
|
79
|
+
token 'Punctuation', m[6]
|
80
|
+
|
81
|
+
|
82
|
+
pop!; push :flags
|
83
|
+
end
|
84
|
+
|
85
|
+
rule /(y)(.)(#{edot}*?)(\2)(#{edot}*?)(\2)/m do |m|
|
86
|
+
token 'Keyword', m[1]
|
87
|
+
token 'Punctuation', m[2]
|
88
|
+
delegate replacement, m[3]
|
89
|
+
token 'Punctuation', m[4]
|
90
|
+
delegate replacement, m[5]
|
91
|
+
token 'Punctuation', m[6]
|
92
|
+
|
93
|
+
pop!
|
94
|
+
end
|
95
|
+
|
96
|
+
# commands that take a text segment as an argument
|
97
|
+
rule /([aic])(\s*)/ do
|
98
|
+
group 'Keyword'; group 'Text'; pop!; push :text
|
99
|
+
end
|
100
|
+
|
101
|
+
rule /[pd]/, 'Keyword'
|
12
102
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
push :regex
|
103
|
+
# commands that take a number argument
|
104
|
+
rule /([qQl])(\s+)(\d+)/i do
|
105
|
+
group 'Keyword'; group 'Text'; group 'Literal.Number'
|
106
|
+
pop!
|
18
107
|
end
|
108
|
+
|
109
|
+
# no-argument commands
|
110
|
+
rule /[={}dDgGhHlnpPqx]/, 'Keyword', :pop!
|
111
|
+
|
112
|
+
# commands that take a filename argument
|
113
|
+
rule /([rRwW])(\s+)(\S+)/ do
|
114
|
+
group 'Keyword'; group 'Text'; group 'Name'
|
115
|
+
pop!
|
116
|
+
end
|
117
|
+
|
118
|
+
# commands that take a label argument
|
119
|
+
rule /([:btT])(\s+)(\S+)/ do
|
120
|
+
group 'Keyword'; group 'Text'; group 'Name.Label'
|
121
|
+
pop!
|
122
|
+
end
|
123
|
+
end
|
124
|
+
|
125
|
+
state :addr_range do
|
126
|
+
mixin :whitespace
|
127
|
+
|
128
|
+
### address ranges ###
|
129
|
+
addr_tok = 'Keyword.Namespace'
|
130
|
+
rule /\d+/, addr_tok
|
131
|
+
rule /[$,~+!]/, addr_tok
|
132
|
+
|
133
|
+
rule %r((/)(\\.|.)*?(/)) do |m|
|
134
|
+
token addr_tok, m[1]; delegate regex, m[2]; token addr_tok, m[3]
|
135
|
+
end
|
136
|
+
|
137
|
+
# alternate regex rage delimiters
|
138
|
+
rule %r((\\)(.)(\\.|.)*?(\2)) do |m|
|
139
|
+
token addr_tok, m[1] + m[2]
|
140
|
+
delegate regex, m[3]
|
141
|
+
token addr_tok, m[4]
|
142
|
+
end
|
143
|
+
|
144
|
+
rule(//) { push :command }
|
145
|
+
end
|
146
|
+
|
147
|
+
state :text do
|
148
|
+
rule /[^\\\n]+/, 'Literal.String'
|
149
|
+
rule /\\\n/, 'Literal.String.Escape'
|
150
|
+
rule /\\/, 'Literal.String'
|
151
|
+
rule /\n/, 'Text', :pop!
|
152
|
+
end
|
153
|
+
|
154
|
+
state :flags do
|
155
|
+
rule /[gp]+/, 'Keyword', :pop!
|
156
|
+
|
157
|
+
# writing to a file with the subst command.
|
158
|
+
# who'da thunk...?
|
159
|
+
rule /([wW])(\s+)(\S+)/ do
|
160
|
+
token 'Keyword'; token 'Text'; token 'Name'
|
161
|
+
end
|
162
|
+
|
163
|
+
rule(//) { pop! }
|
19
164
|
end
|
20
165
|
end
|
21
166
|
end
|
data/lib/rouge/lexers/shell.rb
CHANGED
@@ -72,6 +72,7 @@ module Rouge
|
|
72
72
|
end
|
73
73
|
|
74
74
|
state :data do
|
75
|
+
rule /\s+/, 'Text'
|
75
76
|
rule /\\./, 'Literal.String.Escape'
|
76
77
|
rule /\$?"/, 'Literal.String.Double', :double_quotes
|
77
78
|
|
@@ -85,9 +86,8 @@ module Rouge
|
|
85
86
|
rule /\*/, 'Keyword'
|
86
87
|
|
87
88
|
rule /;/, 'Text'
|
88
|
-
rule /\s+/, 'Text'
|
89
89
|
rule /[^=\*\s{}()$"\'`\\<]+/, 'Text'
|
90
|
-
rule /\d+(?= |\Z)/, 'Number'
|
90
|
+
rule /\d+(?= |\Z)/, 'Literal.Number'
|
91
91
|
rule /</, 'Text'
|
92
92
|
mixin :interp
|
93
93
|
end
|
@@ -108,7 +108,7 @@ module Rouge
|
|
108
108
|
state :math do
|
109
109
|
rule /\)\)/, 'Keyword', :pop!
|
110
110
|
rule %r([-+*/%^|&]|\*\*|\|\|), 'Operator'
|
111
|
-
rule /\d+/, 'Number'
|
111
|
+
rule /\d+/, 'Literal.Number'
|
112
112
|
mixin :root
|
113
113
|
end
|
114
114
|
|
data/lib/rouge/lexers/text.rb
CHANGED
data/lib/rouge/regex_lexer.rb
CHANGED
@@ -183,7 +183,9 @@ module Rouge
|
|
183
183
|
# is consumed with an `'Error'` token, and we continue at (1.)
|
184
184
|
#
|
185
185
|
# @see #step #step (where (2.) is implemented)
|
186
|
-
def stream_tokens(
|
186
|
+
def stream_tokens(str, &b)
|
187
|
+
stream = StringScanner.new(str)
|
188
|
+
|
187
189
|
until stream.eos?
|
188
190
|
debug { "lexer: #{self.class.tag}" }
|
189
191
|
debug { "stack: #{stack.map(&:name).inspect}" }
|
@@ -354,7 +356,7 @@ module Rouge
|
|
354
356
|
private
|
355
357
|
def with_output_stream(output_stream, &b)
|
356
358
|
old_output_stream = @output_stream
|
357
|
-
@output_stream = Yielder.new do |tok, val|
|
359
|
+
@output_stream = Enumerator::Yielder.new do |tok, val|
|
358
360
|
debug { " yielding #{tok.to_s.inspect}, #{val.inspect}" }
|
359
361
|
output_stream.call(Token[tok], val)
|
360
362
|
end
|
data/lib/rouge/util.rb
CHANGED
data/lib/rouge/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rouge
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.9
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-11-28 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: thor
|
@@ -42,6 +42,7 @@ files:
|
|
42
42
|
- lib/rouge/lexers/sql.rb
|
43
43
|
- lib/rouge/lexers/common_lisp.rb
|
44
44
|
- lib/rouge/lexers/erb.rb
|
45
|
+
- lib/rouge/lexers/conf.rb
|
45
46
|
- lib/rouge/lexers/scheme.rb
|
46
47
|
- lib/rouge/lexers/clojure.rb
|
47
48
|
- lib/rouge/lexers/xml.rb
|
@@ -53,6 +54,7 @@ files:
|
|
53
54
|
- lib/rouge/lexers/perl.rb
|
54
55
|
- lib/rouge/lexers/javascript.rb
|
55
56
|
- lib/rouge/lexers/diff.rb
|
57
|
+
- lib/rouge/lexers/io.rb
|
56
58
|
- lib/rouge/lexers/viml.rb
|
57
59
|
- lib/rouge/lexers/objective_c.rb
|
58
60
|
- lib/rouge/lexers/smalltalk.rb
|
@@ -109,6 +111,7 @@ files:
|
|
109
111
|
- lib/rouge/demos/scheme
|
110
112
|
- lib/rouge/demos/diff
|
111
113
|
- lib/rouge/demos/markdown
|
114
|
+
- lib/rouge/demos/io
|
112
115
|
- lib/rouge/demos/javascript
|
113
116
|
- lib/rouge/demos/json
|
114
117
|
- lib/rouge/demos/css
|
@@ -116,10 +119,12 @@ files:
|
|
116
119
|
- lib/rouge/demos/php
|
117
120
|
- lib/rouge/demos/shell
|
118
121
|
- lib/rouge/demos/make
|
122
|
+
- lib/rouge/demos/sed
|
119
123
|
- lib/rouge/demos/java
|
120
124
|
- lib/rouge/demos/yaml
|
121
125
|
- lib/rouge/demos/sql
|
122
126
|
- lib/rouge/demos/groovy
|
127
|
+
- lib/rouge/demos/conf
|
123
128
|
- lib/rouge/demos/nginx
|
124
129
|
- lib/rouge/demos/tcl
|
125
130
|
- lib/rouge/demos/c
|