rouge 0.0.5 → 0.0.6

Sign up to get free protection for your applications and to get access to all the features.
@@ -25,6 +25,7 @@ load load_dir.join('rouge/lexers/css.rb')
25
25
  load load_dir.join('rouge/lexers/html.rb')
26
26
 
27
27
  load load_dir.join('rouge/lexers/tcl.rb')
28
+ load load_dir.join('rouge/lexers/python.rb')
28
29
 
29
30
  load load_dir.join('rouge/formatter.rb')
30
31
  load load_dir.join('rouge/formatters/html.rb')
@@ -32,3 +33,4 @@ load load_dir.join('rouge/formatters/html.rb')
32
33
  load load_dir.join('rouge/theme.rb')
33
34
  load load_dir.join('rouge/themes/thankful_eyes.rb')
34
35
  load load_dir.join('rouge/themes/colorful.rb')
36
+ load load_dir.join('rouge/themes/base16.rb')
@@ -255,7 +255,15 @@ module Rouge
255
255
  stack.last
256
256
  end
257
257
 
258
+ MAX_STEPS = 200000
258
259
  def scan(re, &b)
260
+ @steps ||= 0
261
+ @steps += 1
262
+
263
+ if @steps >= MAX_STEPS
264
+ raise "too many scans near: #{scanner.peek(20)}..."
265
+ end
266
+
259
267
  scanner.scan(re)
260
268
 
261
269
  if scanner.matched?
@@ -64,7 +64,7 @@ module Rouge
64
64
  upper-alpha upper-latin upper-roman uppercase url
65
65
  visible w-resize wait wider x-fast x-high x-large x-loud
66
66
  x-low x-small x-soft xx-large xx-small yes
67
- ).join('|')
67
+ )
68
68
 
69
69
  builtins = %w(
70
70
  indigo gold firebrick indianred yellow darkolivegreen
@@ -92,7 +92,7 @@ module Rouge
92
92
  lightslategray lawngreen lightgreen tomato hotpink
93
93
  lightyellow lavenderblush linen mediumaquamarine green
94
94
  blueviolet peachpuff
95
- ).join('|')
95
+ )
96
96
 
97
97
  state :root do
98
98
  mixin :basics
@@ -148,9 +148,17 @@ module Rouge
148
148
  state :stanza do
149
149
  mixin :basics
150
150
  rule /}/, 'Punctuation', :pop!
151
- rule /(?:#{keywords})\s*:/m, 'Keyword', :stanza_value
152
- rule /(?:#{builtins})\s*:/m, 'Name.Builtin', :stanza_value
153
- rule /#{identifier}\s*:/m, 'Name', :stanza_value
151
+ rule /(#{identifier}\s*):/m do |m|
152
+ if keywords.include? m[1]
153
+ token 'Keyword'
154
+ elsif builtins.include? m[1]
155
+ token 'Name.Builtin'
156
+ else
157
+ token 'Name'
158
+ end
159
+
160
+ push :stanza_value
161
+ end
154
162
  end
155
163
 
156
164
  state :stanza_value do
@@ -0,0 +1,181 @@
1
+ module Rouge
2
+ module Lexers
3
+ class Python < RegexLexer
4
+ tag 'python'
5
+ aliases 'py'
6
+ extensions 'py'
7
+
8
+ keywords = %w(
9
+ assert break continue del elif else except exec
10
+ finally for global if lambda pass print raise
11
+ return try while yield as with
12
+ )
13
+
14
+ builtins = %w(
15
+ __import__ abs all any apply basestring bin bool buffer
16
+ bytearray bytes callable chr classmethod cmp coerce compile
17
+ complex delattr dict dir divmod enumerate eval execfile exit
18
+ file filter float frozenset getattr globals hasattr hash hex id
19
+ input int intern isinstance issubclass iter len list locals
20
+ long map max min next object oct open ord pow property range
21
+ raw_input reduce reload repr reversed round set setattr slice
22
+ sorted staticmethod str sum super tuple type unichr unicode
23
+ vars xrange zip
24
+ )
25
+
26
+ builtins_pseudo = %w(self None Ellipsis NotImplemented False True)
27
+
28
+ exceptions = %w(
29
+ ArithmeticError AssertionError AttributeError
30
+ BaseException DeprecationWarning EOFError EnvironmentError
31
+ Exception FloatingPointError FutureWarning GeneratorExit IOError
32
+ ImportError ImportWarning IndentationError IndexError KeyError
33
+ KeyboardInterrupt LookupError MemoryError NameError
34
+ NotImplemented NotImplementedError OSError OverflowError
35
+ OverflowWarning PendingDeprecationWarning ReferenceError
36
+ RuntimeError RuntimeWarning StandardError StopIteration
37
+ SyntaxError SyntaxWarning SystemError SystemExit TabError
38
+ TypeError UnboundLocalError UnicodeDecodeError
39
+ UnicodeEncodeError UnicodeError UnicodeTranslateError
40
+ UnicodeWarning UserWarning ValueError VMSError Warning
41
+ WindowsError ZeroDivisionError
42
+ )
43
+
44
+ identifier = /[a-z_][a-z0-9_]*/i
45
+ dotted_identifier = /[a-z_.][a-z0-9_.]*/i
46
+ state :root do
47
+ rule /\n+/m, 'Text'
48
+ rule /^(\s*)([rRuU]{,2}""".*?""")/m do
49
+ group 'Text'
50
+ group 'Literal.String.Doc'
51
+ end
52
+
53
+ rule /[^\S\n]+/, 'Text'
54
+ rule /#.*$/, 'Comment'
55
+ rule /[\[\]{}:(),;]/, 'Punctuation'
56
+ rule /\\\n/, 'Text'
57
+ rule /\\/, 'Text'
58
+
59
+ rule /(in|is|and|or|not)\b/, 'Operator.Word'
60
+ rule /!=|==|<<|>>|[-~+\/*%=<>&^|.]/, 'Operator'
61
+
62
+ rule /(?:#{keywords.join('|')})\b/, 'Keyword'
63
+
64
+ rule /(def)((?:\s|\\\s)+)/ do
65
+ group 'Keyword' # def
66
+ group 'Text' # whitespae
67
+ push :funcname
68
+ end
69
+
70
+ rule /(class)((?:\s|\\\s)+)/ do
71
+ group 'Keyword'
72
+ group 'Text'
73
+ push :classname
74
+ end
75
+
76
+ rule /(from)((?:\s|\\\s)+)/ do
77
+ group 'Keyword.Namespace'
78
+ group 'Text'
79
+ push :fromimport
80
+ end
81
+
82
+ rule /(import)((?:\s|\\\s)+)/ do
83
+ group 'Keyword.Namespace'
84
+ group 'Text'
85
+ push :import
86
+ end
87
+
88
+ # using negative lookbehind so we don't match property names
89
+ rule /(?<!\.)(?:#{builtins.join('|')})/, 'Name.Builtin'
90
+ rule /(?<!\.)(?:#{builtins_pseudo.join('|')})/, 'Name.Builtin.Pseudo'
91
+
92
+ # TODO: not in python 3
93
+ rule /`.*?`/, 'Literal.String.Backtick'
94
+ rule /(?:r|ur|ru)"""/i, 'Literal.String', :tdqs
95
+ rule /(?:r|ur|ru)'''/i, 'Literal.String', :tsqs
96
+ rule /(?:r|ur|ru)"/i, 'Literal.String', :dqs
97
+ rule /(?:r|ur|ru)'/i, 'Literal.String', :sqs
98
+ rule /u?"""/i, 'Literal.String', :escape_tdqs
99
+ rule /u?'''/i, 'Literal.String', :escape_tsqs
100
+ rule /u?"/i, 'Literal.String', :escape_dqs
101
+ rule /u?'/i, 'Literal.String', :escape_sqs
102
+
103
+ rule /@#{dotted_identifier}/i, 'Name.Decorator'
104
+ rule identifier, 'Name'
105
+
106
+ rule /(\d+\.\d*|\d*\.\d+)(e[+-]?[0-9]+)?/i, 'Literal.Number.Float'
107
+ rule /\d+e[+-]?[0-9]+/i, 'Literal.Number.Float'
108
+ rule /0[0-7]+/, 'Literal.Number.Oct'
109
+ rule /0x[a-f0-9]+/i, 'Literal.Number.Hex'
110
+ rule /\d+L/, 'Literal.Number.Integer.Long'
111
+ rule /\d+/, 'Literal.Number.Integer'
112
+ end
113
+
114
+ state :funcname do
115
+ rule identifier, 'Name.Function', :pop!
116
+ end
117
+
118
+ state :classname do
119
+ rule identifier, 'Name.Class', :pop!
120
+ end
121
+
122
+ state :import do
123
+ # non-line-terminating whitespace
124
+ rule /(?:[ \t]|\\\n)+/, 'Text'
125
+
126
+ rule /as\b/, 'Keyword.Namespace'
127
+ rule /,/, 'Operator'
128
+ rule dotted_identifier, 'Name.Namespace'
129
+ rule(//) { pop! } # anything else -> go back
130
+ end
131
+
132
+ state :fromimport do
133
+ # non-line-terminating whitespace
134
+ rule /(?:[ \t]|\\\n)+/, 'Text'
135
+
136
+ rule /import\b/, 'Keyword.Namespace', :pop!
137
+ rule dotted_identifier, 'Name.Namespace'
138
+ end
139
+
140
+ state :strings do
141
+ rule /%(\([a-z0-9_]+\))?[-#0 +]*([0-9]+|[*])?(\.([0-9]+|[*]))?/i, 'Literal.String.Interpol'
142
+ rule /[^\\'"%\n]+/, 'Literal.String'
143
+ end
144
+
145
+ state :nl do
146
+ rule /\n/, 'Literal.String'
147
+ end
148
+
149
+ state :dqs do
150
+ rule /"/, 'Literal.String', :pop!
151
+ rule /\\\\|\\"|\\\n/, 'Literal.String.Escape'
152
+ mixin :strings
153
+ end
154
+
155
+ state :sqs do
156
+ rule /'/, 'Literal.String', :pop!
157
+ rule /\\\\|\\'|\\\n/, 'Literal.String.Escape'
158
+ mixin :strings
159
+ end
160
+
161
+ state :tdqs do
162
+ rule /"""/, 'Literal.String', :pop!
163
+ mixin :strings
164
+ mixin :nl
165
+ end
166
+
167
+ state :tsqs do
168
+ rule /'''/, 'Literal.String', :pop!
169
+ mixin :strings
170
+ mixin :nl
171
+ end
172
+
173
+ %w(tdqs tsqs dqs sqs).each do |qtype|
174
+ state :"escape_#{qtype}" do
175
+ mixin :escape
176
+ mixin :"#{qtype}"
177
+ end
178
+ end
179
+ end
180
+ end
181
+ end
@@ -1,14 +1,54 @@
1
1
  module Rouge
2
2
  class Theme
3
+ class InheritableHash < Hash
4
+ def initialize(parent=nil)
5
+ @parent = parent
6
+ end
7
+
8
+ def [](k)
9
+ _sup = super
10
+ return _sup if own_keys.include?(k)
11
+
12
+ _sup || parent[k]
13
+ end
14
+
15
+ def parent
16
+ @parent ||= {}
17
+ end
18
+
19
+ def include?(k)
20
+ super or parent.include?(k)
21
+ end
22
+
23
+ def each(&b)
24
+ keys.each do |k|
25
+ b.call(k, self[k])
26
+ end
27
+ end
28
+
29
+ alias own_keys keys
30
+ def keys
31
+ keys = own_keys.concat(parent.keys)
32
+ keys.uniq!
33
+ keys
34
+ end
35
+ end
36
+
3
37
  class Style < Hash
38
+ def initialize(theme, hsh={})
39
+ super()
40
+ @theme = theme
41
+ merge!(hsh)
42
+ end
43
+
4
44
  def render(selector, &b)
5
45
  return enum_for(:render, selector).to_a.join("\n") unless b
6
46
 
7
47
  return if empty?
8
48
 
9
49
  yield "#{selector} {"
10
- yield " color: #{self[:fg]};" if self[:fg]
11
- yield " background-color: #{self[:bg]};" if self[:bg]
50
+ yield " color: #{@theme.palette(self[:fg])};" if self[:fg]
51
+ yield " background-color: #{@theme.palette(self[:bg])};" if self[:bg]
12
52
  yield " font-weight: bold;" if self[:bold]
13
53
  yield " font-style: italic;" if self[:italic]
14
54
  yield " text-decoration: underline;" if self[:underline]
@@ -19,16 +59,40 @@ module Rouge
19
59
 
20
60
  yield "}"
21
61
  end
62
+
22
63
  end
23
64
 
24
- class << self
25
- def styles
26
- @styles ||= {}
65
+ def styles
66
+ @styles ||= self.class.styles.dup
67
+ end
68
+
69
+ @palette = {}
70
+ def self.palette(arg={})
71
+ @palette ||= InheritableHash.new(superclass.palette)
72
+
73
+ if arg.is_a? Hash
74
+ @palette.merge! arg
75
+ @palette
76
+ else
77
+ case arg
78
+ when /#[0-9a-f]+/i
79
+ arg
80
+ else
81
+ @palette[arg] or raise "not in palette: #{arg.inspect}"
82
+ end
27
83
  end
84
+ end
28
85
 
86
+ @styles = {}
87
+ def self.styles
88
+ @styles ||= InheritableHash.new(superclass.styles)
89
+ end
90
+
91
+ class << self
29
92
  def style(*tokens)
30
- style = Style.new
31
- style.merge!(tokens.pop) if tokens.last.is_a? Hash
93
+ style = tokens.last.is_a?(Hash) ? tokens.pop : {}
94
+
95
+ style = Style.new(self, style)
32
96
 
33
97
  tokens.each do |tok|
34
98
  styles[tok.to_s] = style
@@ -39,7 +103,7 @@ module Rouge
39
103
  return @name if n.nil?
40
104
 
41
105
  @name = n.to_s
42
- registry[@name] = self
106
+ Theme.registry[@name] = self
43
107
  end
44
108
 
45
109
  def find(n)
@@ -52,6 +116,27 @@ module Rouge
52
116
  end
53
117
  end
54
118
 
119
+ module HasModes
120
+ def mode(arg=:absent)
121
+ return @mode if arg == :absent
122
+
123
+ @modes ||= {}
124
+ @modes[arg] ||= get_mode(arg)
125
+ end
126
+
127
+ def get_mode(mode)
128
+ return self if self.mode == mode
129
+
130
+ new_name = "#{self.name}.#{mode}"
131
+ Class.new(self) { name(new_name); mode!(mode) }
132
+ end
133
+
134
+ def mode!(arg)
135
+ @mode = arg
136
+ send("make_#{arg}!")
137
+ end
138
+ end
139
+
55
140
  class CSSTheme < Theme
56
141
  def initialize(opts={})
57
142
  @scope = opts[:scope] || '.highlight'
@@ -60,7 +145,7 @@ module Rouge
60
145
  def render(&b)
61
146
  return enum_for(:render).to_a.join("\n") unless b
62
147
 
63
- self.class.styles.each do |tokname, style|
148
+ styles.each do |tokname, style|
64
149
  style.render(css_selector(Token[tokname]), &b)
65
150
  end
66
151
  end
@@ -92,7 +177,7 @@ module Rouge
92
177
 
93
178
  yield tok
94
179
  tok.sub_tokens.each_value do |st|
95
- next if self.class.styles.include? st.name
180
+ next if styles[st.name]
96
181
 
97
182
  inflate_token(st, &b)
98
183
  end
@@ -0,0 +1,128 @@
1
+ module Rouge
2
+ module Themes
3
+ # default base16 theme
4
+ # by Chris Kempson (http://chriskempson.com)
5
+ class Base16 < CSSTheme
6
+ name 'base16'
7
+
8
+ palette base00: "#151515"
9
+ palette base01: "#202020"
10
+ palette base02: "#303030"
11
+ palette base03: "#505050"
12
+ palette base04: "#b0b0b0"
13
+ palette base05: "#d0d0d0"
14
+ palette base06: "#e0e0e0"
15
+ palette base07: "#f5f5f5"
16
+ palette base08: "#ac4142"
17
+ palette base09: "#d28445"
18
+ palette base0A: "#f4bf75"
19
+ palette base0B: "#90a959"
20
+ palette base0C: "#75b5aa"
21
+ palette base0D: "#6a9fb5"
22
+ palette base0E: "#aa759f"
23
+ palette base0F: "#8f5536"
24
+
25
+ extend HasModes
26
+
27
+ def self.light!
28
+ mode :dark # indicate that there is a dark variant
29
+ mode! :light
30
+ end
31
+
32
+ def self.dark!
33
+ mode :light # indicate that there is a light variant
34
+ mode! :dark
35
+ end
36
+
37
+ def self.make_dark!
38
+ style 'Text', :fg => :base05, :bg => :base00
39
+ end
40
+
41
+ def self.make_light!
42
+ style 'Text', :fg => :base02
43
+ end
44
+
45
+ light!
46
+
47
+ style 'Error', :fg => :base00, :bg => :base08
48
+ style 'Comment', :fg => :base03
49
+
50
+ style 'Comment.Preproc',
51
+ 'Name.Tag', :fg => :base0A
52
+
53
+ style 'Operator',
54
+ 'Punctuation', :fg => :base05
55
+
56
+ style 'Generic.Inserted', :fg => :base0B
57
+ style 'Generic.Removed', :fg => :base08
58
+ style 'Generic.Heading', :fg => :base0D, :bg => :base00, :bold => true
59
+
60
+ style 'Keyword', :fg => :base0E
61
+ style 'Keyword.Constant',
62
+ 'Keyword.Type', :fg => :base09
63
+
64
+ style 'Keyword.Declaration', :fg => :base09
65
+
66
+ style 'Literal.String', :fg => :base0B
67
+ style 'Literal.String.Regex', :fg => :base0C
68
+
69
+ style 'Literal.String.Interpol',
70
+ 'Literal.String.Escape', :fg => :base0F
71
+
72
+ style 'Name.Namespace',
73
+ 'Name.Class',
74
+ 'Name.Constant', :fg => :base0A
75
+
76
+ style 'Name.Attribute', :fg => :base0D
77
+
78
+ style 'Literal.Number',
79
+ 'Literal.String.Symbol', :fg => :base0B
80
+
81
+ class Solarized < Base16
82
+ name 'base16.solarized'
83
+ light!
84
+ # author "Ethan Schoonover (http://ethanschoonover.com/solarized)"
85
+
86
+ palette base00: "#002b36"
87
+ palette base01: "#073642"
88
+ palette base02: "#586e75"
89
+ palette base03: "#657b83"
90
+ palette base04: "#839496"
91
+ palette base05: "#93a1a1"
92
+ palette base06: "#eee8d5"
93
+ palette base07: "#fdf6e3"
94
+ palette base08: "#dc322f"
95
+ palette base09: "#cb4b16"
96
+ palette base0A: "#b58900"
97
+ palette base0B: "#859900"
98
+ palette base0C: "#2aa198"
99
+ palette base0D: "#268bd2"
100
+ palette base0E: "#6c71c4"
101
+ palette base0F: "#d33682"
102
+ end
103
+
104
+ class Monokai < Base16
105
+ name 'base16.monokai'
106
+ dark!
107
+
108
+ # author "Wimer Hazenberg (http://www.monokai.nl)"
109
+ palette base00: "#272822"
110
+ palette base01: "#383830"
111
+ palette base02: "#49483e"
112
+ palette base03: "#75715e"
113
+ palette base04: "#a59f85"
114
+ palette base05: "#f8f8f2"
115
+ palette base06: "#f5f4f1"
116
+ palette base07: "#f9f8f5"
117
+ palette base08: "#f92672"
118
+ palette base09: "#fd971f"
119
+ palette base0A: "#f4bf75"
120
+ palette base0B: "#a6e22e"
121
+ palette base0C: "#a1efe4"
122
+ palette base0D: "#66d9ef"
123
+ palette base0E: "#ae81ff"
124
+ palette base0F: "#cc6633"
125
+ end
126
+ end
127
+ end
128
+ end
@@ -2,62 +2,64 @@ module Rouge
2
2
  module Themes
3
3
  # stolen from pygments
4
4
  class Colorful < CSSTheme
5
- style 'Text', :fg => "#bbbbbb", :bg => 'black'
6
-
7
- style 'Comment', :fg => "#888"
8
- style 'Comment.Preproc', :fg => "#579"
9
- style 'Comment.Special', :fg => "#cc0000", :bold => true
10
-
11
- style 'Keyword', :fg => "#080", :bold => true
12
- style 'Keyword.Pseudo', :fg => "#038"
13
- style 'Keyword.Type', :fg => "#339"
14
-
15
- style 'Operator', :fg => "#333"
16
- style 'Operator.Word', :fg => "#000", :bold => true
17
-
18
- style 'Name.Builtin', :fg => "#007020"
19
- style 'Name.Function', :fg => "#06B", :bold => true
20
- style 'Name.Class', :fg => "#B06", :bold => true
21
- style 'Name.Namespace', :fg => "#0e84b5", :bold => true
22
- style 'Name.Exception', :fg => "#F00", :bold => true
23
- style 'Name.Variable', :fg => "#963"
24
- style 'Name.Variable.Instance', :fg => "#33B"
25
- style 'Name.Variable.Class', :fg => "#369"
26
- style 'Name.Variable.Global', :fg => "#d70", :bold => true
27
- style 'Name.Constant', :fg => "#036", :bold => true
28
- style 'Name.Label', :fg => "#970", :bold => true
29
- style 'Name.Entity', :fg => "#800", :bold => true
30
- style 'Name.Attribute', :fg => "#00C"
31
- style 'Name.Tag', :fg => "#070"
32
- style 'Name.Decorator', :fg => "#555", :bold => true
33
-
34
- style 'Literal.String', :bg => "#fff0f0"
35
- style 'Literal.String.Char', :fg => "#04D"
36
- style 'Literal.String.Doc', :fg => "#D42"
37
- style 'Literal.String.Interpol', :bg => "#eee"
38
- style 'Literal.String.Escape', :fg => "#666", :bold => true
39
- style 'Literal.String.Regex', :fg => "#000", :bg => "#fff0ff"
40
- style 'Literal.String.Symbol', :fg => "#A60"
41
- style 'Literal.String.Other', :fg => "#D20"
42
-
43
- style 'Literal.Number', :fg => "#60E", :bold => true
44
- style 'Literal.Number.Integer', :fg => "#00D", :bold => true
45
- style 'Literal.Number.Float', :fg => "#60E", :bold => true
46
- style 'Literal.Number.Hex', :fg => "#058", :bold => true
47
- style 'Literal.Number.Oct', :fg => "#40E", :bold => true
48
-
49
- style 'Generic.Heading', :fg => "#000080", :bold => true
50
- style 'Generic.Subheading', :fg => "#800080", :bold => true
51
- style 'Generic.Deleted', :fg => "#A00000"
52
- style 'Generic.Inserted', :fg => "#00A000"
53
- style 'Generic.Error', :fg => "#FF0000"
54
- style 'Generic.Emph', :italic => true
55
- style 'Generic.Strong', :bold => true
56
- style 'Generic.Prompt', :fg => "#c65d09", :bold => true
57
- style 'Generic.Output', :fg => "#888"
58
- style 'Generic.Traceback', :fg => "#04D"
59
-
60
- style 'Error', :fg => "#F00", :bg => "#FAA"
5
+ name 'colorful'
6
+
7
+ style 'Text', :fg => "#bbbbbb", :bg => 'black'
8
+
9
+ style 'Comment', :fg => "#888"
10
+ style 'Comment.Preproc', :fg => "#579"
11
+ style 'Comment.Special', :fg => "#cc0000", :bold => true
12
+
13
+ style 'Keyword', :fg => "#080", :bold => true
14
+ style 'Keyword.Pseudo', :fg => "#038"
15
+ style 'Keyword.Type', :fg => "#339"
16
+
17
+ style 'Operator', :fg => "#333"
18
+ style 'Operator.Word', :fg => "#000", :bold => true
19
+
20
+ style 'Name.Builtin', :fg => "#007020"
21
+ style 'Name.Function', :fg => "#06B", :bold => true
22
+ style 'Name.Class', :fg => "#B06", :bold => true
23
+ style 'Name.Namespace', :fg => "#0e84b5", :bold => true
24
+ style 'Name.Exception', :fg => "#F00", :bold => true
25
+ style 'Name.Variable', :fg => "#963"
26
+ style 'Name.Variable.Instance', :fg => "#33B"
27
+ style 'Name.Variable.Class', :fg => "#369"
28
+ style 'Name.Variable.Global', :fg => "#d70", :bold => true
29
+ style 'Name.Constant', :fg => "#036", :bold => true
30
+ style 'Name.Label', :fg => "#970", :bold => true
31
+ style 'Name.Entity', :fg => "#800", :bold => true
32
+ style 'Name.Attribute', :fg => "#00C"
33
+ style 'Name.Tag', :fg => "#070"
34
+ style 'Name.Decorator', :fg => "#555", :bold => true
35
+
36
+ style 'Literal.String', :bg => "#fff0f0"
37
+ style 'Literal.String.Char', :fg => "#04D"
38
+ style 'Literal.String.Doc', :fg => "#D42"
39
+ style 'Literal.String.Interpol', :bg => "#eee"
40
+ style 'Literal.String.Escape', :fg => "#666", :bold => true
41
+ style 'Literal.String.Regex', :fg => "#000", :bg => "#fff0ff"
42
+ style 'Literal.String.Symbol', :fg => "#A60"
43
+ style 'Literal.String.Other', :fg => "#D20"
44
+
45
+ style 'Literal.Number', :fg => "#60E", :bold => true
46
+ style 'Literal.Number.Integer', :fg => "#00D", :bold => true
47
+ style 'Literal.Number.Float', :fg => "#60E", :bold => true
48
+ style 'Literal.Number.Hex', :fg => "#058", :bold => true
49
+ style 'Literal.Number.Oct', :fg => "#40E", :bold => true
50
+
51
+ style 'Generic.Heading', :fg => "#000080", :bold => true
52
+ style 'Generic.Subheading', :fg => "#800080", :bold => true
53
+ style 'Generic.Deleted', :fg => "#A00000"
54
+ style 'Generic.Inserted', :fg => "#00A000"
55
+ style 'Generic.Error', :fg => "#FF0000"
56
+ style 'Generic.Emph', :italic => true
57
+ style 'Generic.Strong', :bold => true
58
+ style 'Generic.Prompt', :fg => "#c65d09", :bold => true
59
+ style 'Generic.Output', :fg => "#888"
60
+ style 'Generic.Traceback', :fg => "#04D"
61
+
62
+ style 'Error', :fg => "#F00", :bg => "#FAA"
61
63
  end
62
64
  end
63
65
  end
@@ -1,45 +1,47 @@
1
1
  module Rouge
2
2
  module Themes
3
3
  class ThankfulEyes < CSSTheme
4
+ name 'thankful_eyes'
5
+
4
6
  # pallette, from GTKSourceView's ThankfulEyes
5
- cool_as_ice = '#6c8b9f'
6
- slate_blue = '#4e5d62'
7
- eggshell_cloud = '#dee5e7'
8
- krasna = '#122b3b'
9
- aluminum1 = '#fefeec'
10
- scarletred2 = '#cc0000'
11
- butter3 = '#c4a000'
12
- go_get_it = '#b2fd6d'
13
- chilly = '#a8e1fe'
14
- unicorn = '#faf6e4'
15
- sandy = '#f6dd62'
16
- pink_merengue = '#f696db'
17
- dune = '#fff0a6'
18
- backlit = '#4df4ff'
19
- schrill = '#ffb000'
7
+ palette :cool_as_ice => '#6c8b9f'
8
+ palette :slate_blue => '#4e5d62'
9
+ palette :eggshell_cloud => '#dee5e7'
10
+ palette :krasna => '#122b3b'
11
+ palette :aluminum1 => '#fefeec'
12
+ palette :scarletred2 => '#cc0000'
13
+ palette :butter3 => '#c4a000'
14
+ palette :go_get_it => '#b2fd6d'
15
+ palette :chilly => '#a8e1fe'
16
+ palette :unicorn => '#faf6e4'
17
+ palette :sandy => '#f6dd62'
18
+ palette :pink_merengue => '#f696db'
19
+ palette :dune => '#fff0a6'
20
+ palette :backlit => '#4df4ff'
21
+ palette :schrill => '#ffb000'
20
22
 
21
- style 'Text', :fg => unicorn, :bg => krasna
23
+ style 'Text', :fg => :unicorn, :bg => :krasna
22
24
 
23
- style 'Comment', :fg => cool_as_ice
25
+ style 'Comment', :fg => :cool_as_ice
24
26
  style 'Error',
25
- 'Generic.Error', :fg => aluminum1, :bg => scarletred2
26
- style 'Keyword', :fg => sandy, :bold => true
27
+ 'Generic.Error', :fg => :aluminum1, :bg => :scarletred2
28
+ style 'Keyword', :fg => :sandy, :bold => true
27
29
  style 'Operator',
28
- 'Punctuation', :fg => backlit, :bold => true
30
+ 'Punctuation', :fg => :backlit, :bold => true
29
31
  style 'Comment.Preproc',
30
32
  'Comment.Multiline',
31
33
  'Comment.Single',
32
- 'Comment.Special', :fg => cool_as_ice, :italic => true
33
- style 'Generic.Deleted', :fg => scarletred2
34
- style 'Generic.Inserted', :fg => go_get_it
34
+ 'Comment.Special', :fg => :cool_as_ice, :italic => true
35
+ style 'Generic.Deleted', :fg => :scarletred2
36
+ style 'Generic.Inserted', :fg => :go_get_it
35
37
  style 'Generic.Emph', :italic => true
36
38
  style 'Generic.Subheading', :fg => '#800080', :bold => true
37
39
  style 'Generic.Traceback', :fg => '#0040D0'
38
- style 'Keyword.Constant', :fg => pink_merengue, :bold => true
40
+ style 'Keyword.Constant', :fg => :pink_merengue, :bold => true
39
41
  style 'Keyword.Namespace',
40
42
  'Keyword.Pseudo',
41
43
  'Keyword.Reserved',
42
- 'Generic.Heading', :fg => schrill, :bold => true
44
+ 'Generic.Heading', :fg => :schrill, :bold => true
43
45
  style 'Keyword.Type',
44
46
  'Name.Constant',
45
47
  'Name.Class',
@@ -47,21 +49,21 @@ module Rouge
47
49
  'Name.Namespace',
48
50
  'Name.Builtin.Pseudo',
49
51
  'Name.Exception',
50
- 'Name.Tag', :fg => go_get_it, :bold => true
51
- style 'Literal.Number', :fg => pink_merengue, :bold => true
52
- style 'Literal.String', :fg => dune, :bold => true
52
+ 'Name.Tag', :fg => :go_get_it, :bold => true
53
+ style 'Literal.Number', :fg => :pink_merengue, :bold => true
54
+ style 'Literal.String', :fg => :dune, :bold => true
53
55
  style 'Literal.String.Escape',
54
56
  'Literal.String.Char',
55
57
  'Literal.String.Interpol',
56
58
  'Literal.String.Other',
57
- 'Literal.String.Symbol', :fg => backlit, :bold => true
58
- style 'Name.Builtin', :fg => sandy
59
+ 'Literal.String.Symbol', :fg => :backlit, :bold => true
60
+ style 'Name.Builtin', :fg => :sandy
59
61
  style 'Name.Entity', :fg => '#999999', :bold => true
60
62
  style 'Text.Whitespace', :fg => '#BBBBBB'
61
63
  style 'Name.Variable',
62
64
  'Name.Function',
63
65
  'Name.Label',
64
- 'Name.Attribute', :fg => chilly
66
+ 'Name.Attribute', :fg => :chilly
65
67
  end
66
68
  end
67
69
  end
@@ -1,5 +1,5 @@
1
1
  module Rouge
2
2
  def self.version
3
- "0.0.5"
3
+ "0.0.6"
4
4
  end
5
5
  end
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.0.5
4
+ version: 0.0.6
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-09-04 00:00:00.000000000 Z
12
+ date: 2012-09-06 00:00:00.000000000 Z
13
13
  dependencies: []
14
14
  description: Rouge aims to a be a simple, easy-to-extend drop-in replacement for pygments.
15
15
  email:
@@ -19,6 +19,7 @@ extensions: []
19
19
  extra_rdoc_files: []
20
20
  files:
21
21
  - Gemfile
22
+ - lib/rouge/lexers/python.rb
22
23
  - lib/rouge/lexers/shell.rb
23
24
  - lib/rouge/lexers/javascript.rb
24
25
  - lib/rouge/lexers/diff.rb
@@ -29,6 +30,7 @@ files:
29
30
  - lib/rouge/plugins/redcarpet.rb
30
31
  - lib/rouge/themes/thankful_eyes.rb
31
32
  - lib/rouge/themes/colorful.rb
33
+ - lib/rouge/themes/base16.rb
32
34
  - lib/rouge/token.rb
33
35
  - lib/rouge/formatters/html.rb
34
36
  - lib/rouge/version.rb