rouge 0.3.10 → 0.4.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.
- data/lib/rouge/formatters/html.rb +28 -6
- data/lib/rouge/lexers/elixir.rb +1 -1
- data/lib/rouge/theme.rb +17 -11
- data/lib/rouge/version.rb +1 -1
- metadata +2 -2
@@ -7,11 +7,24 @@ module Rouge
|
|
7
7
|
class HTML < Formatter
|
8
8
|
tag 'html'
|
9
9
|
|
10
|
-
# @option opts :css_class
|
11
|
-
#
|
10
|
+
# @option opts [String] :css_class ('highlight')
|
11
|
+
# @option opts [true/false] :line_numbers (false)
|
12
|
+
# @option opts [Rouge::CSSTheme] :inline_theme (nil)
|
13
|
+
# @option opts [true/false] :wrap (true)
|
14
|
+
#
|
15
|
+
# Initialize with options.
|
16
|
+
#
|
17
|
+
# If `:inline_theme` is given, then instead of rendering the
|
18
|
+
# tokens as <span> tags with CSS classes, the styles according to
|
19
|
+
# the given theme will be inlined in "style" attributes. This is
|
20
|
+
# useful for formats in which stylesheets are not available.
|
21
|
+
#
|
22
|
+
# Content will be wrapped in a `<pre>` tag with the given
|
23
|
+
# `:css_class` unless `:wrap` is set to `false`.
|
12
24
|
def initialize(opts={})
|
13
25
|
@css_class = opts[:css_class] || 'highlight'
|
14
26
|
@line_numbers = opts.fetch(:line_numbers) { false }
|
27
|
+
@inline_theme = opts.fetch(:inline_theme) { nil }
|
15
28
|
@wrap = opts.fetch(:wrap, true)
|
16
29
|
end
|
17
30
|
|
@@ -24,6 +37,7 @@ module Rouge
|
|
24
37
|
end
|
25
38
|
end
|
26
39
|
|
40
|
+
private
|
27
41
|
def stream_untableized(tokens, &b)
|
28
42
|
yield "<pre class=#{@css_class.inspect}>" if @wrap
|
29
43
|
tokens.each do |tok, val|
|
@@ -65,7 +79,6 @@ module Rouge
|
|
65
79
|
yield '</pre>' if @wrap
|
66
80
|
end
|
67
81
|
|
68
|
-
private
|
69
82
|
def span(tok, val, &b)
|
70
83
|
# TODO: properly html-encode val
|
71
84
|
val = CGI.escape_html(val)
|
@@ -76,9 +89,18 @@ module Rouge
|
|
76
89
|
when nil
|
77
90
|
raise "unknown token: #{tok.inspect} for #{val.inspect}"
|
78
91
|
else
|
79
|
-
|
80
|
-
|
81
|
-
|
92
|
+
if @inline_theme
|
93
|
+
rules = @inline_theme.style_for(tok).rendered_rules
|
94
|
+
|
95
|
+
yield '<span style='
|
96
|
+
yield rules.to_a.join(';').inspect
|
97
|
+
yield '>'
|
98
|
+
else
|
99
|
+
yield '<span class='
|
100
|
+
yield tok.shortname.inspect
|
101
|
+
yield '>'
|
102
|
+
end
|
103
|
+
|
82
104
|
yield val
|
83
105
|
yield '</span>'
|
84
106
|
end
|
data/lib/rouge/lexers/elixir.rb
CHANGED
@@ -24,7 +24,7 @@ module Rouge
|
|
24
24
|
rule %r{\b(case|cond|end|bc|lc|if|unless|try|loop|receive|fn|defmodule|
|
25
25
|
defp?|defprotocol|defimpl|defrecord|defmacrop?|defdelegate|
|
26
26
|
defexception|exit|raise|throw|unless|after|rescue|catch|else)\b(?![?!])|
|
27
|
-
(?<!\.)\b(do|\-\>)\b
|
27
|
+
(?<!\.)\b(do|\-\>)\b}x, 'Keyword'
|
28
28
|
rule /\b(import|require|use|recur|quote|unquote|super|refer)\b(?![?!])/, 'Keyword.Namespace'
|
29
29
|
rule /(?<!\.)\b(and|not|or|when|xor|in)\b/, 'Operator.Word'
|
30
30
|
rule %r{%=|\*=|\*\*=|\+=|\-=|\^=|\|\|=|
|
data/lib/rouge/theme.rb
CHANGED
@@ -20,19 +20,22 @@ module Rouge
|
|
20
20
|
return if empty?
|
21
21
|
|
22
22
|
yield "#{selector} {"
|
23
|
-
|
24
|
-
yield " background-color: #{bg};" if bg
|
25
|
-
yield " font-weight: bold;" if self[:bold]
|
26
|
-
yield " font-style: italic;" if self[:italic]
|
27
|
-
yield " text-decoration: underline;" if self[:underline]
|
28
|
-
|
29
|
-
(self[:rules] || []).each do |rule|
|
23
|
+
rendered_rules.each do |rule|
|
30
24
|
yield " #{rule};"
|
31
25
|
end
|
32
|
-
|
33
26
|
yield "}"
|
34
27
|
end
|
35
28
|
|
29
|
+
def rendered_rules(&b)
|
30
|
+
return enum_for(:rendered_rules) unless b
|
31
|
+
yield "color: #{fg}" if fg
|
32
|
+
yield "background-color: #{bg}" if bg
|
33
|
+
yield "font-weight: bold" if self[:bold]
|
34
|
+
yield "font-style: italic" if self[:italic]
|
35
|
+
yield "text-decoration: underline" if self[:underline]
|
36
|
+
|
37
|
+
(self[:rules] || []).each(&b)
|
38
|
+
end
|
36
39
|
end
|
37
40
|
|
38
41
|
def styles
|
@@ -142,11 +145,14 @@ module Rouge
|
|
142
145
|
end
|
143
146
|
end
|
144
147
|
|
148
|
+
def style_for(tok)
|
149
|
+
styles.fetch(tok.name) do
|
150
|
+
tok.parent ? style_for(tok.parent) : Style.new(self)
|
151
|
+
end
|
152
|
+
end
|
153
|
+
|
145
154
|
private
|
146
155
|
def css_selector(token)
|
147
|
-
tokens = [token]
|
148
|
-
parent = token.parent
|
149
|
-
|
150
156
|
inflate_token(token).map do |tok|
|
151
157
|
raise "unknown token: #{tok.inspect}" if tok.shortname.nil?
|
152
158
|
|
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.
|
4
|
+
version: 0.4.0
|
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: 2013-08-
|
12
|
+
date: 2013-08-15 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
type: :runtime
|