rouge 0.2.13 → 0.2.14
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.rb +5 -0
- data/lib/rouge/demos/literate_coffeescript +3 -0
- data/lib/rouge/demos/literate_haskell +7 -0
- data/lib/rouge/demos/puppet +6 -0
- data/lib/rouge/lexers/clojure.rb +2 -2
- data/lib/rouge/lexers/ini.rb +55 -0
- data/lib/rouge/lexers/literate_coffeescript.rb +29 -0
- data/lib/rouge/lexers/literate_haskell.rb +34 -0
- data/lib/rouge/lexers/puppet.rb +126 -0
- data/lib/rouge/lexers/toml.rb +69 -0
- data/lib/rouge/version.rb +1 -1
- metadata +16 -8
data/lib/rouge.rb
CHANGED
@@ -43,6 +43,8 @@ load load_dir.join('rouge/lexers/diff.rb')
|
|
43
43
|
load load_dir.join('rouge/lexers/tex.rb')
|
44
44
|
load load_dir.join('rouge/lexers/markdown.rb')
|
45
45
|
load load_dir.join('rouge/lexers/yaml.rb')
|
46
|
+
load load_dir.join('rouge/lexers/toml.rb')
|
47
|
+
load load_dir.join('rouge/lexers/ini.rb')
|
46
48
|
|
47
49
|
load load_dir.join('rouge/lexers/sql.rb')
|
48
50
|
|
@@ -52,6 +54,7 @@ load load_dir.join('rouge/lexers/viml.rb')
|
|
52
54
|
load load_dir.join('rouge/lexers/nginx.rb')
|
53
55
|
load load_dir.join('rouge/lexers/conf.rb')
|
54
56
|
load load_dir.join('rouge/lexers/sed.rb')
|
57
|
+
load load_dir.join('rouge/lexers/puppet.rb')
|
55
58
|
|
56
59
|
load load_dir.join('rouge/lexers/javascript.rb')
|
57
60
|
load load_dir.join('rouge/lexers/css.rb')
|
@@ -63,6 +66,7 @@ load load_dir.join('rouge/lexers/haml.rb')
|
|
63
66
|
load load_dir.join('rouge/lexers/sass.rb')
|
64
67
|
load load_dir.join('rouge/lexers/scss.rb')
|
65
68
|
load load_dir.join('rouge/lexers/coffeescript.rb')
|
69
|
+
load load_dir.join('rouge/lexers/literate_coffeescript.rb')
|
66
70
|
|
67
71
|
load load_dir.join('rouge/lexers/erb.rb')
|
68
72
|
load load_dir.join('rouge/lexers/handlebars.rb')
|
@@ -77,6 +81,7 @@ load load_dir.join('rouge/lexers/groovy.rb')
|
|
77
81
|
load load_dir.join('rouge/lexers/io.rb')
|
78
82
|
|
79
83
|
load load_dir.join('rouge/lexers/haskell.rb')
|
84
|
+
load load_dir.join('rouge/lexers/literate_haskell.rb')
|
80
85
|
load load_dir.join('rouge/lexers/scheme.rb')
|
81
86
|
load load_dir.join('rouge/lexers/common_lisp.rb')
|
82
87
|
|
data/lib/rouge/lexers/clojure.rb
CHANGED
@@ -4,7 +4,7 @@ module Rouge
|
|
4
4
|
desc "The Clojure programming language (clojure.org)"
|
5
5
|
|
6
6
|
tag 'clojure'
|
7
|
-
aliases 'clj'
|
7
|
+
aliases 'clj', 'cljs'
|
8
8
|
|
9
9
|
filenames '*.clj', '*.cljs'
|
10
10
|
|
@@ -91,7 +91,7 @@ module Rouge
|
|
91
91
|
end
|
92
92
|
|
93
93
|
rule identifier do |m|
|
94
|
-
token name_token(m[0]) || 'Name
|
94
|
+
token name_token(m[0]) || 'Name'
|
95
95
|
end
|
96
96
|
|
97
97
|
# vectors
|
@@ -0,0 +1,55 @@
|
|
1
|
+
module Rouge
|
2
|
+
module Lexers
|
3
|
+
class INI < RegexLexer
|
4
|
+
desc 'the INI configuration format'
|
5
|
+
tag 'ini'
|
6
|
+
|
7
|
+
# TODO add more here
|
8
|
+
filenames '*.ini', '*.INI', '*.gitconfig'
|
9
|
+
mimetypes 'text/x-ini'
|
10
|
+
|
11
|
+
def self.analyze_text(text)
|
12
|
+
return 0.1 if text =~ /\A\[[\w.]+\]\s*\w+=\w+/
|
13
|
+
end
|
14
|
+
|
15
|
+
identifier = /[\w.]+/
|
16
|
+
|
17
|
+
state :basic do
|
18
|
+
rule /[;#].*?\n/, 'Comment'
|
19
|
+
rule /\s+/, 'Text'
|
20
|
+
rule /\\\n/, 'Literal.String.Escape'
|
21
|
+
end
|
22
|
+
|
23
|
+
state :root do
|
24
|
+
mixin :basic
|
25
|
+
|
26
|
+
rule /(#{identifier})(\s*)(=)/ do
|
27
|
+
group 'Name.Property'; group 'Text'
|
28
|
+
group 'Punctuation'
|
29
|
+
push :value
|
30
|
+
end
|
31
|
+
|
32
|
+
rule /\[.*?\]/, 'Name.Namespace'
|
33
|
+
end
|
34
|
+
|
35
|
+
state :value do
|
36
|
+
rule /\n/, 'Text', :pop!
|
37
|
+
mixin :basic
|
38
|
+
rule /"/, 'Literal.String', :dq
|
39
|
+
rule /'.*?'/, 'Literal.String'
|
40
|
+
mixin :esc_str
|
41
|
+
rule /[^\\\n]+/, 'Literal.String'
|
42
|
+
end
|
43
|
+
|
44
|
+
state :dq do
|
45
|
+
rule /"/, 'Literal.String', :pop!
|
46
|
+
mixin :esc_str
|
47
|
+
rule /[^\\"]+/m, 'Literal.String'
|
48
|
+
end
|
49
|
+
|
50
|
+
state :esc_str do
|
51
|
+
rule /\\./m, 'Literal.String.Escape'
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module Rouge
|
2
|
+
module Lexers
|
3
|
+
class LiterateCoffeescript < RegexLexer
|
4
|
+
tag 'literate_coffeescript'
|
5
|
+
aliases 'litcoffee'
|
6
|
+
filenames '*.litcoffee'
|
7
|
+
|
8
|
+
def markdown
|
9
|
+
@markdown ||= Markdown.new(options)
|
10
|
+
end
|
11
|
+
|
12
|
+
def coffee
|
13
|
+
@coffee ||= Coffeescript.new(options)
|
14
|
+
end
|
15
|
+
|
16
|
+
start { markdown.reset!; coffee.reset! }
|
17
|
+
|
18
|
+
state :root do
|
19
|
+
rule /^( .*?\n)+/m do
|
20
|
+
delegate coffee
|
21
|
+
end
|
22
|
+
|
23
|
+
rule /^([ ]{0,3}(\S.*?|)\n)*/m do
|
24
|
+
delegate markdown
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
module Rouge
|
2
|
+
module Lexers
|
3
|
+
class LiterateHaskell < RegexLexer
|
4
|
+
desc 'Literate haskell'
|
5
|
+
tag 'literate_haskell'
|
6
|
+
aliases 'lithaskell', 'lhaskell', 'lhs'
|
7
|
+
filenames '*.lhs'
|
8
|
+
mimetypes 'text/x-literate-haskell'
|
9
|
+
|
10
|
+
def haskell
|
11
|
+
@haskell ||= Haskell.new(options)
|
12
|
+
end
|
13
|
+
|
14
|
+
start { haskell.reset! }
|
15
|
+
|
16
|
+
# TODO: support TeX versions as well.
|
17
|
+
# TODO: enforce a blank line before and after code
|
18
|
+
state :root do
|
19
|
+
rule /\s*?\n(?=>)/, 'Text', :code
|
20
|
+
rule /.*?\n/, 'Text'
|
21
|
+
rule /.+\z/, 'Text'
|
22
|
+
end
|
23
|
+
|
24
|
+
state :code do
|
25
|
+
rule /(>)( .*?\n)/ do |m|
|
26
|
+
token 'Name.Label', m[1]
|
27
|
+
delegate haskell, m[2]
|
28
|
+
end
|
29
|
+
|
30
|
+
rule /\s*\n(?=\s*[^>])/, 'Text', :pop!
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,126 @@
|
|
1
|
+
module Rouge
|
2
|
+
module Lexers
|
3
|
+
class Puppet < RegexLexer
|
4
|
+
desc 'The Puppet configuration management language (puppetlabs.org)'
|
5
|
+
tag 'puppet'
|
6
|
+
aliases 'pp'
|
7
|
+
filenames '*.pp'
|
8
|
+
|
9
|
+
def self.analyze_text(text)
|
10
|
+
return 1 if text.shebang? 'puppet-apply'
|
11
|
+
return 1 if text.shebang? 'puppet'
|
12
|
+
end
|
13
|
+
|
14
|
+
def self.keywords
|
15
|
+
@keywords ||= Set.new %w(
|
16
|
+
and case class default define else elsif if in import inherits
|
17
|
+
node unless
|
18
|
+
)
|
19
|
+
end
|
20
|
+
|
21
|
+
def self.constants
|
22
|
+
@constants ||= Set.new %w(
|
23
|
+
false true undef
|
24
|
+
)
|
25
|
+
end
|
26
|
+
|
27
|
+
def self.metaparameters
|
28
|
+
@metaparameters ||= Set.new %w(
|
29
|
+
before require notify subscribe
|
30
|
+
)
|
31
|
+
end
|
32
|
+
|
33
|
+
id = /[a-z]\w*/
|
34
|
+
cap_id = /[A-Z]\w*/
|
35
|
+
qualname = /(::)?(#{id}::)*\w+/
|
36
|
+
|
37
|
+
state :whitespace do
|
38
|
+
rule /\s+/m, 'Text'
|
39
|
+
rule /#.*?\n/, 'Comment'
|
40
|
+
end
|
41
|
+
|
42
|
+
state :root do
|
43
|
+
mixin :whitespace
|
44
|
+
|
45
|
+
rule /[$]#{qualname}/, 'Name.Variable'
|
46
|
+
rule /(#{id})(?=\s*[=+]>)/m do |m|
|
47
|
+
if self.class.metaparameters.include? m[0]
|
48
|
+
token 'Keyword.Pseudo'
|
49
|
+
else
|
50
|
+
token 'Name.Property'
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
rule /(#{qualname})(?=\s*[(])/m, 'Name.Function'
|
55
|
+
rule cap_id, 'Name.Class'
|
56
|
+
|
57
|
+
rule /[+=|~-]>|<[|~-]/, 'Punctuation'
|
58
|
+
rule /[:{();\[\]]/, 'Punctuation'
|
59
|
+
|
60
|
+
# HACK for case statements and selectors
|
61
|
+
rule /}/, 'Punctuation', :regex_allowed
|
62
|
+
rule /,/, 'Punctuation', :regex_allowed
|
63
|
+
|
64
|
+
rule /(in|and|or)\b/, 'Operator.Word'
|
65
|
+
rule /[=!<>]=/, 'Operator'
|
66
|
+
rule /[=!]~/, 'Operator', :regex_allowed
|
67
|
+
rule %r([<>!+*/-]), 'Operator'
|
68
|
+
|
69
|
+
rule /(class|include)(\s*)(#{qualname})/ do
|
70
|
+
group 'Keyword'; group 'Text'
|
71
|
+
group 'Name.Class'
|
72
|
+
end
|
73
|
+
|
74
|
+
rule /node\b/, 'Keyword', :regex_allowed
|
75
|
+
|
76
|
+
rule /'(\\[\\']|[^'])*'/m, 'Literal.String.Single'
|
77
|
+
rule /"/, 'Literal.String.Double', :dquotes
|
78
|
+
|
79
|
+
rule /\d+([.]\d+)?(e[+-]\d+)?/, 'Literal.Number'
|
80
|
+
|
81
|
+
# a valid regex. TODO: regexes are only allowed
|
82
|
+
# in certain places in puppet.
|
83
|
+
rule qualname do |m|
|
84
|
+
if self.class.keywords.include? m[0]
|
85
|
+
token 'Keyword'
|
86
|
+
elsif self.class.constants.include? m[0]
|
87
|
+
token 'Keyword.Constant'
|
88
|
+
else
|
89
|
+
token 'Name'
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
state :regex_allowed do
|
95
|
+
mixin :whitespace
|
96
|
+
rule %r(/), 'Literal.String.Regex', :regex
|
97
|
+
|
98
|
+
rule(//) { pop! }
|
99
|
+
end
|
100
|
+
|
101
|
+
state :regex do
|
102
|
+
rule %r(/), 'Literal.String.Regex', :pop!
|
103
|
+
rule /\\./, 'Literal.String.Escape'
|
104
|
+
rule /[(){}]/, 'Literal.String.Interpol'
|
105
|
+
rule /\[/, 'Literal.String.Interpol', :regex_class
|
106
|
+
rule /./, 'Literal.String.Regex'
|
107
|
+
end
|
108
|
+
|
109
|
+
state :regex_class do
|
110
|
+
rule /\]/, 'Literal.String.Interpol', :pop!
|
111
|
+
rule /(?<!\[)-(?=\])/, 'Literal.String.Regex'
|
112
|
+
rule /-/, 'Literal.String.Interpol'
|
113
|
+
rule /\\./, 'Literal.String.Escape'
|
114
|
+
rule /[^\\\]-]+/, 'Literal.String.Regex'
|
115
|
+
end
|
116
|
+
|
117
|
+
state :dquotes do
|
118
|
+
rule /"/, 'Literal.String.Double', :pop!
|
119
|
+
rule /[^$\\"]+/m, 'Literal.String.Double'
|
120
|
+
rule /\\./m, 'Literal.String.Escape'
|
121
|
+
rule /[$]#{qualname}/, 'Name.Variable'
|
122
|
+
rule /[$][{]#{qualname}[}]/, 'Name.Variable'
|
123
|
+
end
|
124
|
+
end
|
125
|
+
end
|
126
|
+
end
|
@@ -0,0 +1,69 @@
|
|
1
|
+
module Rouge
|
2
|
+
module Lexers
|
3
|
+
class TOML < RegexLexer
|
4
|
+
desc 'the TOML configuration format'
|
5
|
+
tag 'toml'
|
6
|
+
|
7
|
+
filenames '*.toml'
|
8
|
+
mimetypes 'text/x-toml'
|
9
|
+
|
10
|
+
def self.analyze_text(text)
|
11
|
+
return 0.1 if text =~ /\A\[[\w.]+\]\s*\w+\s*=\s*("\w+")+/
|
12
|
+
end
|
13
|
+
|
14
|
+
identifier = /[\w.\S]+/
|
15
|
+
|
16
|
+
state :basic do
|
17
|
+
rule /\s+/, 'Text'
|
18
|
+
rule /#.*?$/, 'Comment'
|
19
|
+
rule /(true|false)/, 'Keyword.Constant'
|
20
|
+
rule /(?<!=)\s*\[[\w\d\S]+\]/, 'Name.Namespace'
|
21
|
+
|
22
|
+
rule /\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}Z/, 'Literal.Date'
|
23
|
+
|
24
|
+
rule /(\d+\.\d*|\d*\.\d+)([eE][+-]?[0-9]+)?j?/, 'Literal.Number.Float'
|
25
|
+
rule /\d+[eE][+-]?[0-9]+j?/, 'Literal.Number.Float'
|
26
|
+
rule /\-?\d+/, 'Literal.Number.Integer'
|
27
|
+
end
|
28
|
+
|
29
|
+
state :root do
|
30
|
+
mixin :basic
|
31
|
+
|
32
|
+
rule /(#{identifier})(\s*)(=)/ do
|
33
|
+
group 'Name.Property'; group 'Text'
|
34
|
+
group 'Punctuation'
|
35
|
+
push :value
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
39
|
+
|
40
|
+
state :value do
|
41
|
+
rule /\n/, 'Text', :pop!
|
42
|
+
mixin :content
|
43
|
+
end
|
44
|
+
|
45
|
+
state :content do
|
46
|
+
mixin :basic
|
47
|
+
rule /"/, 'Literal.String', :dq
|
48
|
+
mixin :esc_str
|
49
|
+
rule /\,/, 'Punctuation'
|
50
|
+
rule /\[/, 'Punctuation', :array
|
51
|
+
end
|
52
|
+
|
53
|
+
state :dq do
|
54
|
+
rule /"/, 'Literal.String', :pop!
|
55
|
+
mixin :esc_str
|
56
|
+
rule /[^\\"]+/, 'Literal.String'
|
57
|
+
end
|
58
|
+
|
59
|
+
state :esc_str do
|
60
|
+
rule /\\[0t\tn\n "\\ r]/, 'Literal.String.Escape'
|
61
|
+
end
|
62
|
+
|
63
|
+
state :array do
|
64
|
+
mixin :content
|
65
|
+
rule /\]/, 'Punctuation', :pop!
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
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.14
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,24 +9,24 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-
|
12
|
+
date: 2013-03-01 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
|
+
type: :runtime
|
15
16
|
name: thor
|
17
|
+
prerelease: false
|
16
18
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
19
|
requirements:
|
19
20
|
- - ! '>='
|
20
21
|
- !ruby/object:Gem::Version
|
21
22
|
version: '0'
|
22
|
-
type: :runtime
|
23
|
-
prerelease: false
|
24
|
-
version_requirements: !ruby/object:Gem::Requirement
|
25
23
|
none: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
26
25
|
requirements:
|
27
26
|
- - ! '>='
|
28
27
|
- !ruby/object:Gem::Version
|
29
28
|
version: '0'
|
29
|
+
none: false
|
30
30
|
description: Rouge aims to a be a simple, easy-to-extend drop-in replacement for pygments.
|
31
31
|
email:
|
32
32
|
- jjmadkisson@gmail.com
|
@@ -65,10 +65,13 @@ files:
|
|
65
65
|
- lib/rouge/lexers/groovy.rb
|
66
66
|
- lib/rouge/lexers/sed.rb
|
67
67
|
- lib/rouge/lexers/coffeescript.rb
|
68
|
+
- lib/rouge/lexers/literate_coffeescript.rb
|
68
69
|
- lib/rouge/lexers/text.rb
|
69
70
|
- lib/rouge/lexers/diff.rb
|
70
71
|
- lib/rouge/lexers/viml/keywords.rb
|
71
72
|
- lib/rouge/lexers/css.rb
|
73
|
+
- lib/rouge/lexers/toml.rb
|
74
|
+
- lib/rouge/lexers/puppet.rb
|
72
75
|
- lib/rouge/lexers/ruby.rb
|
73
76
|
- lib/rouge/lexers/xml.rb
|
74
77
|
- lib/rouge/lexers/handlebars.rb
|
@@ -76,6 +79,7 @@ files:
|
|
76
79
|
- lib/rouge/lexers/tcl.rb
|
77
80
|
- lib/rouge/lexers/tex.rb
|
78
81
|
- lib/rouge/lexers/rust.rb
|
82
|
+
- lib/rouge/lexers/ini.rb
|
79
83
|
- lib/rouge/lexers/scss.rb
|
80
84
|
- lib/rouge/lexers/javascript.rb
|
81
85
|
- lib/rouge/lexers/shell.rb
|
@@ -87,6 +91,7 @@ files:
|
|
87
91
|
- lib/rouge/lexers/scheme.rb
|
88
92
|
- lib/rouge/lexers/haml.rb
|
89
93
|
- lib/rouge/lexers/erb.rb
|
94
|
+
- lib/rouge/lexers/literate_haskell.rb
|
90
95
|
- lib/rouge/lexers/c.rb
|
91
96
|
- lib/rouge/lexers/io.rb
|
92
97
|
- lib/rouge/lexers/python.rb
|
@@ -115,9 +120,11 @@ files:
|
|
115
120
|
- lib/rouge/demos/css
|
116
121
|
- lib/rouge/demos/conf
|
117
122
|
- lib/rouge/demos/haml
|
123
|
+
- lib/rouge/demos/literate_haskell
|
118
124
|
- lib/rouge/demos/io
|
119
125
|
- lib/rouge/demos/c
|
120
126
|
- lib/rouge/demos/scss
|
127
|
+
- lib/rouge/demos/literate_coffeescript
|
121
128
|
- lib/rouge/demos/python
|
122
129
|
- lib/rouge/demos/make
|
123
130
|
- lib/rouge/demos/clojure
|
@@ -136,6 +143,7 @@ files:
|
|
136
143
|
- lib/rouge/demos/cpp
|
137
144
|
- lib/rouge/demos/coffeescript
|
138
145
|
- lib/rouge/demos/sql
|
146
|
+
- lib/rouge/demos/puppet
|
139
147
|
- lib/rouge/demos/scheme
|
140
148
|
- lib/rouge/demos/diff
|
141
149
|
homepage: http://github.com/jayferd/rouge
|
@@ -145,17 +153,17 @@ rdoc_options: []
|
|
145
153
|
require_paths:
|
146
154
|
- lib
|
147
155
|
required_ruby_version: !ruby/object:Gem::Requirement
|
148
|
-
none: false
|
149
156
|
requirements:
|
150
157
|
- - ! '>='
|
151
158
|
- !ruby/object:Gem::Version
|
152
159
|
version: '0'
|
153
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
154
160
|
none: false
|
161
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
155
162
|
requirements:
|
156
163
|
- - ! '>='
|
157
164
|
- !ruby/object:Gem::Version
|
158
165
|
version: '0'
|
166
|
+
none: false
|
159
167
|
requirements: []
|
160
168
|
rubyforge_project: rouge
|
161
169
|
rubygems_version: 1.8.23
|