rouge 0.0.8 → 0.0.9

Sign up to get free protection for your applications and to get access to all the features.
@@ -30,6 +30,10 @@ load load_dir.join('rouge/lexers/python.rb')
30
30
 
31
31
  load load_dir.join('rouge/lexers/haskell.rb')
32
32
 
33
+ load load_dir.join('rouge/lexers/c.rb')
34
+ load load_dir.join('rouge/lexers/cpp.rb')
35
+ load load_dir.join('rouge/lexers/java.rb')
36
+
33
37
  load load_dir.join('rouge/formatter.rb')
34
38
  load load_dir.join('rouge/formatters/html.rb')
35
39
 
@@ -307,18 +307,24 @@ module Rouge
307
307
  stack.last
308
308
  end
309
309
 
310
- MAX_STEPS = 200000
310
+ MAX_NULL_STEPS = 5
311
311
  def scan(re, &b)
312
- @steps ||= 0
313
- @steps += 1
312
+ @null_steps ||= 0
314
313
 
315
- if @steps >= MAX_STEPS
316
- raise "too many scans near: #{scanner.peek(20)}..."
314
+ if @null_steps >= MAX_NULL_STEPS
315
+ debug { " too many scans without consuming the string!" }
316
+ return false
317
317
  end
318
318
 
319
319
  scanner.scan(re)
320
320
 
321
321
  if scanner.matched?
322
+ if scanner.matched_size == 0
323
+ @null_steps += 1
324
+ else
325
+ @null_steps = 0
326
+ end
327
+
322
328
  yield self
323
329
  return true
324
330
  end
@@ -0,0 +1,143 @@
1
+ module Rouge
2
+ module Lexers
3
+ class C < RegexLexer
4
+ tag 'c'
5
+ filenames '*.c', '*.h', '*.idc'
6
+ mimetypes 'text/x-chdr', 'text/x-csrc'
7
+
8
+ # optional comment or whitespace
9
+ ws = %r((?:\s|//.*?\n|/[*].*?[*]/)+)
10
+ id = /[a-zA-Z_][a-zA-Z0-9_]*/
11
+
12
+ keywords = %w(
13
+ auto break case const continue default do else enum extern
14
+ for goto if register restricted return sizeof static struct
15
+ switch typedef union volatile virtual while
16
+ )
17
+
18
+ keywords_type = %w(int long float short double char unsigned signed void)
19
+
20
+ __reserved = %w(
21
+ asm int8 based except int16 stdcall cdecl fastcall int32
22
+ declspec finally int61 try leave
23
+ )
24
+
25
+ state :whitespace do
26
+ rule /^#if\s+0\b/, 'Comment.Preproc', :if_0
27
+ rule /^#/, 'Comment.Preproc', :macro
28
+ rule /^#{ws}#if\s+0\b/, 'Comment.Preproc', :if_0
29
+ rule /^#{ws}#/, 'Comment.Preproc', :macro
30
+ rule /^(\s*)(#{id}:(?!:))/ do
31
+ group 'Text'
32
+ group 'Name.Label'
33
+ end
34
+
35
+ rule /\s+/m, 'Text'
36
+ rule /\\\n/, 'Text' # line continuation
37
+ rule %r(//(\n|(.|\n)*?[^\\]\n)), 'Comment.Single'
38
+ rule %r(/(\\\n)?[*](.|\n)*?[*](\\\n)?/), 'Comment.Multiline'
39
+ end
40
+
41
+ state :statements do
42
+ rule /L?"/, 'Literal.String', :string
43
+ rule %r(L?'(\\.|\\[0-7]{1,3}|\\x[a-f0-9]{1,2}|[^\\'\n])')i, 'Literal.String.Char'
44
+ rule %r((\d+\.\d*|\.\d+|\d+)[e][+-]?\d+[lu]*)i, 'Literal.Number.Float'
45
+ rule /0x[0-9a-f]+[lu]*/i, 'Literal.Number.Hex'
46
+ rule /0[0-7]+[lu]*/i, 'Literal.Number.Oct'
47
+ rule /\d+[lu]*/i, 'Literal.Number.Integer'
48
+ rule %r(\*/), 'Error'
49
+ rule %r([~!%^&*+=\|?:<>/-]), 'Operator'
50
+ rule /[()\[\],.]/, 'Punctuation'
51
+ rule /\bcase\b/, 'Keyword', :case
52
+ rule /(?:#{keywords.join('|')})\b/, 'Keyword'
53
+ rule /(?:#{keywords_type.join('|')})\b/, 'Keyword.Type'
54
+ rule /(?:_{0,2}inline|naked|restrict|thread|typename)\b/, 'Keyword.Reserved'
55
+ rule /__(?:#{__reserved.join('|')})\b/, 'Keyword.Reserved'
56
+ rule /(?:true|false|NULL)\b/, 'Name.Builtin'
57
+ rule id, 'Name'
58
+ end
59
+
60
+ state :case do
61
+ rule /:/, 'Punctuation', :pop!
62
+ mixin :statements
63
+ end
64
+
65
+ state :root do
66
+ mixin :whitespace
67
+
68
+ # functions
69
+ rule %r(
70
+ ([\w*\s]+?[\s*]) # return arguments
71
+ (#{id}) # function name
72
+ (\s*\([^;]*?\)) # signature
73
+ (#{ws})({) # open brace
74
+ )mx do |m|
75
+ # TODO: do this better.
76
+ delegate C, m[1]
77
+ token 'Name.Function', m[2]
78
+ delegate C, m[3]
79
+ delegate C, m[4]
80
+ token 'Punctuation', m[5]
81
+ push :function
82
+ end
83
+
84
+ # function declarations
85
+ rule %r(
86
+ ([\w*\s]+?[\s*]) # return arguments
87
+ (#{id}) # function name
88
+ (\s*\([^;]*?\)) # signature
89
+ (#{ws})(;) # semicolon
90
+ )mx do |m|
91
+ # TODO: do this better.
92
+ delegate C, m[1]
93
+ token 'Name.Function'
94
+ delegate C, m[3]
95
+ delegate C, m[4]
96
+ token 'Punctuation'
97
+ push :statement
98
+ end
99
+
100
+ rule(//) { push :statement }
101
+ end
102
+
103
+ state :statement do
104
+ rule /;/, 'Punctuation', :pop!
105
+ mixin :whitespace
106
+ mixin :statements
107
+ rule /[{}]/, 'Punctuation'
108
+ end
109
+
110
+ state :function do
111
+ mixin :whitespace
112
+ mixin :statements
113
+ rule /;/, 'Punctuation'
114
+ rule /{/, 'Punctuation', :function
115
+ rule /}/, 'Punctuation', :pop!
116
+ end
117
+
118
+ state :string do
119
+ rule /"/, 'Literal.String', :pop!
120
+ rule /\\([\\abfnrtv"']|x[a-fA-F0-9]{2,4}|[0-7]{1,3})/, 'Literal.String.Escape'
121
+ rule /[^\\"\n]+/, 'Literal.String'
122
+ rule /\\\n/, 'Literal.String'
123
+ rule /\\/, 'Literal.String' # stray backslash
124
+ end
125
+
126
+ state :macro do
127
+ rule %r([^/\n]+), 'Comment.Preproc'
128
+ rule %r(/[*].*?[*]/)m, 'Comment.Multiliine'
129
+ rule %r(//.*$), 'Comment.Single'
130
+ rule %r(/), 'Comment.Preproc'
131
+ rule /(?<=\\)\n/, 'Comment.Preproc'
132
+ rule /\n/, 'Comment.Preproc', :pop!
133
+ end
134
+
135
+ state :if_0 do
136
+ rule /^\s*#if.*?(?<!\\)\n/, 'Comment.Preproc', :if_0
137
+ rule /^\s*#el(?:se|if).*\n/, 'Comment.Preproc', :pop!
138
+ rule /^\s*#endif.*?(?<!\\)\n/, 'Comment.Preproc', :pop!
139
+ rule /.*?\n/, 'Comment'
140
+ end
141
+ end
142
+ end
143
+ end
@@ -0,0 +1,109 @@
1
+ module Rouge
2
+ module Lexers
3
+ class Cpp < RegexLexer
4
+ tag 'cpp'
5
+ aliases 'c++'
6
+ # the many varied filenames of c++ source files...
7
+ filenames '*.cpp', '*.hpp',
8
+ '*.c++', '*.h++',
9
+ '*.cc', '*.hh',
10
+ '*.cxx', '*.hxx'
11
+ mimetypes 'text/x-c++hdr', 'text/x-c++src'
12
+
13
+ keywords = %w(
14
+ asm auto break case catch const const_cast continue
15
+ default delete do dynamic_cast else enum explicit export
16
+ extern for friend goto if mutable namespace new operator
17
+ private protected public register reinterpret_cast return
18
+ restrict sizeof static static_cast struct switch template
19
+ this throw throws try typedef typeid typename union using
20
+ volatile virtual while
21
+ )
22
+
23
+ keywords_type = %w(
24
+ bool int long float short double char unsigned signed void wchar_t
25
+ )
26
+
27
+ __reserved = %w(
28
+ asm int8 based except int16 stdcall cdecl fastcall int32 declspec
29
+ finally int64 try leave wchar_t w64 virtual_inheritance uuidof
30
+ unaligned super single_inheritance raise noop multiple_inheritance
31
+ m128i m128d m128 m64 interface identifier forceinline event assume
32
+ )
33
+
34
+ # optional comments or whitespace
35
+ ws = %r((?:\s|//.*?\n|/[*].*?[*]/)+)
36
+ id = /[a-zA-Z_][a-zA-Z0-9]*/
37
+
38
+ state :whitespace do
39
+ rule /^#if\s+0/, 'Comment.Preproc', :if_0
40
+ rule /^#/, 'Comment.Preproc', :macro
41
+ rule /^#{ws}#if\s+0\b/, 'Comment.Preproc', :if_0
42
+ rule /^#{ws}#/, 'Comment.Preproc', :macro
43
+ rule /\s+/m, 'Text'
44
+ rule /\\\n/, 'Text'
45
+ rule %r(/(\\\n)?/(\n|(.|\n)*?[^\\]\n)), 'Comment.Single'
46
+ rule %r(/(\\\n)?[*](.|\n)*?[*](\\\n)?/), 'Comment.Multiline'
47
+ end
48
+
49
+ state :root do
50
+ mixin :whitespace
51
+
52
+ rule /L?"/, 'Literal.String', :string
53
+ rule %r(L?'(\\.|\\[0-7]{1,3}|\\x[a-f0-9]{1,2}|[^\\'\n])')i, 'Literal.String.Char'
54
+ rule %r((\d+\.\d*|\.\d+|\d+)[e][+-]?\d+[lu]*)i, 'Literal.Number.Float'
55
+ rule /0x[0-9a-f]+[lu]*/i, 'Literal.Number.Hex'
56
+ rule /0[0-7]+[lu]*/i, 'Literal.Number.Oct'
57
+ rule /\d+[lu]*/i, 'Literal.Number.Integer'
58
+ rule %r(\*/), 'Error'
59
+ rule %r([~!%^&*+=\|?:<>/-]), 'Operator'
60
+ rule /[()\[\],.;{}]/, 'Punctuation'
61
+
62
+ rule /(?:#{keywords.join('|')})\b/, 'Keyword'
63
+ rule /class\b/, 'Keyword', :classname
64
+ rule /(?:#{keywords_type.join('|')})\b/, 'Keyword.Type'
65
+ rule /(?:_{0,2}inline|naked|thread)\b/, 'Keyword.Reserved'
66
+ rule /__(?:#{__reserved.join('|')})\b/, 'Keyoword.Reserved'
67
+ # Offload C++ extensions, http://offload.codeplay.com/
68
+ rule /(?:__offload|__blockingoffload|__outer)\b/, 'Keyword.Pseudo'
69
+
70
+ rule /(true|false)\b/, 'Keyword.Constant'
71
+ rule /NULL\b/, 'Name.Builtin'
72
+ rule /#{id}:(?!:)/, 'Name.Label'
73
+ rule id, 'Name'
74
+ end
75
+
76
+ state :classname do
77
+ rule id, 'Name.Class', :pop!
78
+
79
+ # template specification
80
+ rule /\s*(?=>)/m, 'Text', :pop!
81
+ mixin :whitespace
82
+ end
83
+
84
+ state :string do
85
+ rule /"/, 'Literal.String', :pop!
86
+ rule /\\([\\abfnrtv"']|x[a-fA-F0-9]{2,4}|[0-7]{1,3})/, 'Literal.String.Escape'
87
+ rule /[^\\"\n]+/, 'Literal.String'
88
+ rule /\\\n/, 'Literal.String'
89
+ rule /\\/, 'Literal.String' # stray backslash
90
+ end
91
+
92
+ state :macro do
93
+ rule %r([^/\n]+), 'Comment.Preproc'
94
+ rule %r(/[*].*?[*]/)m, 'Comment.Multiliine'
95
+ rule %r(//.*$), 'Comment.Single'
96
+ rule %r(/), 'Comment.Preproc'
97
+ rule /(?<=\\)\n/, 'Comment.Preproc'
98
+ rule /\n/, 'Comment.Preproc', :pop!
99
+ end
100
+
101
+ state :if_0 do
102
+ rule /^\s*#if.*?(?<!\\)\n/, 'Comment.Preproc', :if_0
103
+ rule /^\s*#el(?:se|if).*\n/, 'Comment.Preproc', :pop!
104
+ rule /^\s*#endif.*?(?<!\\)\n/, 'Comment.Preproc', :pop!
105
+ rule /.*?\n/, 'Comment'
106
+ end
107
+ end
108
+ end
109
+ end
@@ -0,0 +1,72 @@
1
+ module Rouge
2
+ module Lexers
3
+ class Java < RegexLexer
4
+ tag 'java'
5
+ filenames '*.java'
6
+ mimetypes 'text/x-java'
7
+
8
+ keywords = %w(
9
+ assert break case catch continue default do else finally for
10
+ if goto instanceof new return switch this throw try while
11
+ )
12
+
13
+ declarations = %w(
14
+ abstract const enum extends final implements native private protected
15
+ public static strictfp super synchronized throws transient volatile
16
+ )
17
+
18
+ types = %w(boolean byte char double float int long short void)
19
+
20
+ id = /[a-zA-Z_][a-zA-Z0-9_]*/
21
+
22
+ state :root do
23
+ rule %r(^
24
+ (\s*(?:[a-zA-Z_][a-zA-Z0-9_.\[\]]*\s+)+?) # return arguments
25
+ ([a-zA-Z_][a-zA-Z0-9_]*) # method name
26
+ (\s*)(\() # signature start
27
+ )mx do |m|
28
+ # TODO: do this better, this shouldn't need a delegation
29
+ delegate Java, m[1]
30
+ token 'Name.Function', m[2]
31
+ token 'Text', m[3]
32
+ token 'Punctuation', m[4]
33
+ end
34
+
35
+ rule /\s+/, 'Text'
36
+ rule %r(//.*?$), 'Comment.Single'
37
+ rule %r(/\*.*?\*/)m, 'Comment.Multiline'
38
+ rule /@#{id}/, 'Name.Decorator'
39
+ rule /(?:#{keywords.join('|')})\b/, 'Keyword'
40
+ rule /(?:#{declarations.join('|')})\b/, 'Keyword.Declaration'
41
+ rule /(?:#{types.join('|')})/, 'Keyword.Type'
42
+ rule /package\b/, 'Keyword.Namespace'
43
+ rule /(?:true|false|null)\b/, 'Keyword.Constant'
44
+ rule /(?:class|interface)\b/, 'Keyword.Declaration', :class
45
+ rule /import\b/, 'Keyword.Namespace', :import
46
+ rule /"(\\\\|\\"|[^"])*"/, 'Literal.String'
47
+ rule /'(?:\\.|[^\\]|\\u[0-9a-f]{4})'/, 'Literal.String.Char'
48
+ rule /(\.)(#{id})/ do
49
+ group 'Operator'
50
+ group 'Name.Attribute'
51
+ end
52
+ rule /#{id}:/, 'Name.Label'
53
+ rule /\$?#{id}/, 'Name'
54
+ rule /[~^*!%&\[\](){}<>\|+=:;,.\/?-]/, 'Operator'
55
+ rule /[0-9][0-9]*\.[0-9]+([eE][0-9]+)?[fd]?/, 'Literal.Number.Float'
56
+ rule /0x[0-9a-f]+/, 'Literal.Number.Hex'
57
+ rule /[0-9]+L?/, 'Literal.Number.Integer'
58
+ # rule /\n/, 'Text'
59
+ end
60
+
61
+ state :class do
62
+ rule /\s+/m, 'Text'
63
+ rule id, 'Name.Class', :pop!
64
+ end
65
+
66
+ state :import do
67
+ rule /\s+/m, 'Text'
68
+ rule /[a-z0-9_.]+\*?/i, 'Name.Namespace', :pop!
69
+ end
70
+ end
71
+ end
72
+ end
@@ -1,5 +1,5 @@
1
1
  module Rouge
2
2
  def self.version
3
- "0.0.8"
3
+ "0.0.9"
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.8
4
+ version: 0.0.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-09-07 00:00:00.000000000 Z
12
+ date: 2012-09-08 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: thor
@@ -41,10 +41,13 @@ files:
41
41
  - lib/rouge/lexers/javascript.rb
42
42
  - lib/rouge/lexers/diff.rb
43
43
  - lib/rouge/lexers/haskell.rb
44
+ - lib/rouge/lexers/c.rb
44
45
  - lib/rouge/lexers/text.rb
45
46
  - lib/rouge/lexers/html.rb
47
+ - lib/rouge/lexers/java.rb
46
48
  - lib/rouge/lexers/tcl.rb
47
49
  - lib/rouge/lexers/css.rb
50
+ - lib/rouge/lexers/cpp.rb
48
51
  - lib/rouge/plugins/redcarpet.rb
49
52
  - lib/rouge/themes/thankful_eyes.rb
50
53
  - lib/rouge/themes/colorful.rb