gitlab-rouge 1.9.2
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.
- checksums.yaml +7 -0
- data/Gemfile +23 -0
- data/LICENSE +186 -0
- data/bin/rougify +16 -0
- data/gitlab-rouge.gemspec +17 -0
- data/lib/rouge.rb +57 -0
- data/lib/rouge/cli.rb +363 -0
- data/lib/rouge/demos/apache +21 -0
- data/lib/rouge/demos/applescript +2 -0
- data/lib/rouge/demos/c +8 -0
- data/lib/rouge/demos/clojure +5 -0
- data/lib/rouge/demos/coffeescript +5 -0
- data/lib/rouge/demos/common_lisp +1 -0
- data/lib/rouge/demos/conf +4 -0
- data/lib/rouge/demos/cpp +8 -0
- data/lib/rouge/demos/csharp +5 -0
- data/lib/rouge/demos/css +4 -0
- data/lib/rouge/demos/dart +6 -0
- data/lib/rouge/demos/diff +7 -0
- data/lib/rouge/demos/elixir +1 -0
- data/lib/rouge/demos/erb +1 -0
- data/lib/rouge/demos/erlang +7 -0
- data/lib/rouge/demos/factor +5 -0
- data/lib/rouge/demos/gherkin +17 -0
- data/lib/rouge/demos/glsl +14 -0
- data/lib/rouge/demos/go +7 -0
- data/lib/rouge/demos/groovy +9 -0
- data/lib/rouge/demos/haml +5 -0
- data/lib/rouge/demos/handlebars +7 -0
- data/lib/rouge/demos/haskell +6 -0
- data/lib/rouge/demos/html +8 -0
- data/lib/rouge/demos/http +14 -0
- data/lib/rouge/demos/ini +4 -0
- data/lib/rouge/demos/io +11 -0
- data/lib/rouge/demos/java +5 -0
- data/lib/rouge/demos/javascript +1 -0
- data/lib/rouge/demos/json +1 -0
- data/lib/rouge/demos/json-doc +1 -0
- data/lib/rouge/demos/liquid +11 -0
- data/lib/rouge/demos/literate_coffeescript +3 -0
- data/lib/rouge/demos/literate_haskell +7 -0
- data/lib/rouge/demos/llvm +20 -0
- data/lib/rouge/demos/lua +12 -0
- data/lib/rouge/demos/make +6 -0
- data/lib/rouge/demos/markdown +4 -0
- data/lib/rouge/demos/matlab +6 -0
- data/lib/rouge/demos/moonscript +16 -0
- data/lib/rouge/demos/nginx +5 -0
- data/lib/rouge/demos/nim +27 -0
- data/lib/rouge/demos/objective_c +14 -0
- data/lib/rouge/demos/ocaml +12 -0
- data/lib/rouge/demos/perl +5 -0
- data/lib/rouge/demos/php +3 -0
- data/lib/rouge/demos/plaintext +1 -0
- data/lib/rouge/demos/powershell +49 -0
- data/lib/rouge/demos/prolog +9 -0
- data/lib/rouge/demos/properties +7 -0
- data/lib/rouge/demos/puppet +6 -0
- data/lib/rouge/demos/python +6 -0
- data/lib/rouge/demos/qml +9 -0
- data/lib/rouge/demos/r +8 -0
- data/lib/rouge/demos/racket +24 -0
- data/lib/rouge/demos/ruby +9 -0
- data/lib/rouge/demos/rust +12 -0
- data/lib/rouge/demos/sass +3 -0
- data/lib/rouge/demos/scala +3 -0
- data/lib/rouge/demos/scheme +4 -0
- data/lib/rouge/demos/scss +5 -0
- data/lib/rouge/demos/sed +4 -0
- data/lib/rouge/demos/shell +2 -0
- data/lib/rouge/demos/slim +17 -0
- data/lib/rouge/demos/smalltalk +6 -0
- data/lib/rouge/demos/sml +4 -0
- data/lib/rouge/demos/sql +1 -0
- data/lib/rouge/demos/swift +5 -0
- data/lib/rouge/demos/tcl +1 -0
- data/lib/rouge/demos/tex +1 -0
- data/lib/rouge/demos/toml +9 -0
- data/lib/rouge/demos/tulip +14 -0
- data/lib/rouge/demos/vb +4 -0
- data/lib/rouge/demos/viml +5 -0
- data/lib/rouge/demos/xml +2 -0
- data/lib/rouge/demos/yaml +4 -0
- data/lib/rouge/formatter.rb +50 -0
- data/lib/rouge/formatters/html.rb +117 -0
- data/lib/rouge/formatters/null.rb +19 -0
- data/lib/rouge/formatters/terminal256.rb +176 -0
- data/lib/rouge/lexer.rb +443 -0
- data/lib/rouge/lexers/apache.rb +68 -0
- data/lib/rouge/lexers/apache/keywords.yml +453 -0
- data/lib/rouge/lexers/apple_script.rb +367 -0
- data/lib/rouge/lexers/c.rb +212 -0
- data/lib/rouge/lexers/clojure.rb +112 -0
- data/lib/rouge/lexers/coffeescript.rb +174 -0
- data/lib/rouge/lexers/common_lisp.rb +345 -0
- data/lib/rouge/lexers/conf.rb +24 -0
- data/lib/rouge/lexers/cpp.rb +66 -0
- data/lib/rouge/lexers/csharp.rb +88 -0
- data/lib/rouge/lexers/css.rb +271 -0
- data/lib/rouge/lexers/dart.rb +104 -0
- data/lib/rouge/lexers/diff.rb +31 -0
- data/lib/rouge/lexers/elixir.rb +108 -0
- data/lib/rouge/lexers/erb.rb +56 -0
- data/lib/rouge/lexers/erlang.rb +118 -0
- data/lib/rouge/lexers/factor.rb +302 -0
- data/lib/rouge/lexers/gherkin.rb +137 -0
- data/lib/rouge/lexers/gherkin/keywords.rb +14 -0
- data/lib/rouge/lexers/glsl.rb +135 -0
- data/lib/rouge/lexers/go.rb +178 -0
- data/lib/rouge/lexers/groovy.rb +104 -0
- data/lib/rouge/lexers/haml.rb +228 -0
- data/lib/rouge/lexers/handlebars.rb +79 -0
- data/lib/rouge/lexers/haskell.rb +183 -0
- data/lib/rouge/lexers/html.rb +94 -0
- data/lib/rouge/lexers/http.rb +80 -0
- data/lib/rouge/lexers/ini.rb +57 -0
- data/lib/rouge/lexers/io.rb +68 -0
- data/lib/rouge/lexers/java.rb +76 -0
- data/lib/rouge/lexers/javascript.rb +297 -0
- data/lib/rouge/lexers/liquid.rb +287 -0
- data/lib/rouge/lexers/literate_coffeescript.rb +33 -0
- data/lib/rouge/lexers/literate_haskell.rb +36 -0
- data/lib/rouge/lexers/llvm.rb +84 -0
- data/lib/rouge/lexers/lua.rb +122 -0
- data/lib/rouge/lexers/lua/builtins.rb +22 -0
- data/lib/rouge/lexers/make.rb +116 -0
- data/lib/rouge/lexers/markdown.rb +154 -0
- data/lib/rouge/lexers/matlab.rb +74 -0
- data/lib/rouge/lexers/matlab/builtins.rb +11 -0
- data/lib/rouge/lexers/moonscript.rb +110 -0
- data/lib/rouge/lexers/nginx.rb +71 -0
- data/lib/rouge/lexers/nim.rb +152 -0
- data/lib/rouge/lexers/objective_c.rb +197 -0
- data/lib/rouge/lexers/ocaml.rb +111 -0
- data/lib/rouge/lexers/perl.rb +197 -0
- data/lib/rouge/lexers/php.rb +173 -0
- data/lib/rouge/lexers/php/builtins.rb +204 -0
- data/lib/rouge/lexers/plain_text.rb +25 -0
- data/lib/rouge/lexers/powershell.rb +96 -0
- data/lib/rouge/lexers/prolog.rb +64 -0
- data/lib/rouge/lexers/properties.rb +55 -0
- data/lib/rouge/lexers/puppet.rb +128 -0
- data/lib/rouge/lexers/python.rb +228 -0
- data/lib/rouge/lexers/qml.rb +72 -0
- data/lib/rouge/lexers/r.rb +56 -0
- data/lib/rouge/lexers/racket.rb +542 -0
- data/lib/rouge/lexers/ruby.rb +415 -0
- data/lib/rouge/lexers/rust.rb +191 -0
- data/lib/rouge/lexers/sass.rb +74 -0
- data/lib/rouge/lexers/sass/common.rb +180 -0
- data/lib/rouge/lexers/scala.rb +142 -0
- data/lib/rouge/lexers/scheme.rb +112 -0
- data/lib/rouge/lexers/scss.rb +34 -0
- data/lib/rouge/lexers/sed.rb +170 -0
- data/lib/rouge/lexers/shell.rb +152 -0
- data/lib/rouge/lexers/slim.rb +228 -0
- data/lib/rouge/lexers/smalltalk.rb +116 -0
- data/lib/rouge/lexers/sml.rb +347 -0
- data/lib/rouge/lexers/sql.rb +140 -0
- data/lib/rouge/lexers/swift.rb +144 -0
- data/lib/rouge/lexers/tcl.rb +192 -0
- data/lib/rouge/lexers/tex.rb +72 -0
- data/lib/rouge/lexers/toml.rb +71 -0
- data/lib/rouge/lexers/tulip.rb +75 -0
- data/lib/rouge/lexers/vb.rb +164 -0
- data/lib/rouge/lexers/viml.rb +101 -0
- data/lib/rouge/lexers/viml/keywords.rb +12 -0
- data/lib/rouge/lexers/xml.rb +59 -0
- data/lib/rouge/lexers/yaml.rb +364 -0
- data/lib/rouge/plugins/redcarpet.rb +30 -0
- data/lib/rouge/regex_lexer.rb +439 -0
- data/lib/rouge/template_lexer.rb +22 -0
- data/lib/rouge/text_analyzer.rb +48 -0
- data/lib/rouge/theme.rb +195 -0
- data/lib/rouge/themes/base16.rb +130 -0
- data/lib/rouge/themes/colorful.rb +67 -0
- data/lib/rouge/themes/github.rb +71 -0
- data/lib/rouge/themes/molokai.rb +82 -0
- data/lib/rouge/themes/monokai.rb +92 -0
- data/lib/rouge/themes/monokai_sublime.rb +90 -0
- data/lib/rouge/themes/thankful_eyes.rb +71 -0
- data/lib/rouge/token.rb +182 -0
- data/lib/rouge/util.rb +101 -0
- data/lib/rouge/version.rb +7 -0
- metadata +231 -0
@@ -0,0 +1,71 @@
|
|
1
|
+
# -*- coding: utf-8 -*- #
|
2
|
+
|
3
|
+
module Rouge
|
4
|
+
module Lexers
|
5
|
+
class Nginx < RegexLexer
|
6
|
+
title "nginx"
|
7
|
+
desc 'configuration files for the nginx web server (nginx.org)'
|
8
|
+
tag 'nginx'
|
9
|
+
mimetypes 'text/x-nginx-conf'
|
10
|
+
filenames 'nginx.conf'
|
11
|
+
|
12
|
+
id = /[^\s$;{}()#]+/
|
13
|
+
|
14
|
+
state :root do
|
15
|
+
rule /(include)(\s+)([^\s;]+)/ do
|
16
|
+
groups Keyword, Text, Name
|
17
|
+
end
|
18
|
+
|
19
|
+
rule id, Keyword, :statement
|
20
|
+
|
21
|
+
mixin :base
|
22
|
+
end
|
23
|
+
|
24
|
+
state :block do
|
25
|
+
rule /}/, Punctuation, :pop!
|
26
|
+
rule id, Keyword::Namespace, :statement
|
27
|
+
mixin :base
|
28
|
+
end
|
29
|
+
|
30
|
+
state :statement do
|
31
|
+
rule /{/ do
|
32
|
+
token Punctuation; pop!; push :block
|
33
|
+
end
|
34
|
+
|
35
|
+
rule /;/, Punctuation, :pop!
|
36
|
+
|
37
|
+
mixin :base
|
38
|
+
end
|
39
|
+
|
40
|
+
state :base do
|
41
|
+
rule /\s+/, Text
|
42
|
+
|
43
|
+
rule /#.*?\n/, Comment::Single
|
44
|
+
rule /(?:on|off)\b/, Name::Constant
|
45
|
+
rule /[$][\w-]+/, Name::Variable
|
46
|
+
|
47
|
+
# host/port
|
48
|
+
rule /([a-z0-9.-]+)(:)([0-9]+)/i do
|
49
|
+
groups Name::Function, Punctuation, Num::Integer
|
50
|
+
end
|
51
|
+
|
52
|
+
# mimetype
|
53
|
+
rule %r([a-z-]+/[a-z-]+)i, Name::Class
|
54
|
+
|
55
|
+
rule /[0-9]+[kmg]?\b/i, Num::Integer
|
56
|
+
rule /(~)(\s*)([^\s{]+)/ do
|
57
|
+
groups Punctuation, Text, Str::Regex
|
58
|
+
end
|
59
|
+
|
60
|
+
rule /[:=~]/, Punctuation
|
61
|
+
|
62
|
+
# pathname
|
63
|
+
rule %r(/#{id}?), Name
|
64
|
+
|
65
|
+
rule /[^#\s;{}$\\]+/, Str # catchall
|
66
|
+
|
67
|
+
rule /[$;]/, Text
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
@@ -0,0 +1,152 @@
|
|
1
|
+
# -*- coding: utf-8 -*- #
|
2
|
+
|
3
|
+
module Rouge
|
4
|
+
module Lexers
|
5
|
+
class Nim < RegexLexer
|
6
|
+
# This is pretty much a 1-1 port of the pygments NimrodLexer class
|
7
|
+
title "Nim"
|
8
|
+
desc "The Nim programming language (http://nim-lang.org/)"
|
9
|
+
|
10
|
+
tag 'nim'
|
11
|
+
aliases 'nimrod'
|
12
|
+
filenames '*.nim'
|
13
|
+
|
14
|
+
KEYWORDS = %w(
|
15
|
+
addr as asm atomic bind block break case cast const continue
|
16
|
+
converter defer discard distinct do elif else end enum except export
|
17
|
+
func finally for from generic if import include interface iterator let
|
18
|
+
macro method mixin nil object of out proc ptr raise ref return static
|
19
|
+
template try tuple type using var when while with without yield
|
20
|
+
)
|
21
|
+
|
22
|
+
OPWORDS = %w(
|
23
|
+
and or not xor shl shr div mod in notin is isnot
|
24
|
+
)
|
25
|
+
|
26
|
+
PSEUDOKEYWORDS = %w(
|
27
|
+
nil true false
|
28
|
+
)
|
29
|
+
|
30
|
+
TYPES = %w(
|
31
|
+
int int8 int16 int32 int64 float float32 float64 bool char range array
|
32
|
+
seq set string
|
33
|
+
)
|
34
|
+
|
35
|
+
NAMESPACE = %w(
|
36
|
+
from import include
|
37
|
+
)
|
38
|
+
|
39
|
+
def self.underscorize(words)
|
40
|
+
words.map do |w|
|
41
|
+
w.gsub(/./) { |x| "#{Regexp.escape(x)}_?" }
|
42
|
+
end.join('|')
|
43
|
+
end
|
44
|
+
|
45
|
+
state :chars do
|
46
|
+
rule(/\\([\\abcefnrtvl"\']|x[a-fA-F0-9]{2}|[0-9]{1,3})/, Str::Escape)
|
47
|
+
rule(/'/, Str::Char, :pop!)
|
48
|
+
rule(/./, Str::Char)
|
49
|
+
end
|
50
|
+
|
51
|
+
state :strings do
|
52
|
+
rule(/(?<!\$)\$(\d+|#|\w+)+/, Str::Interpol)
|
53
|
+
rule(/[^\\\'"\$\n]+/, Str)
|
54
|
+
rule(/[\'"\\]/, Str)
|
55
|
+
rule(/\$/, Str)
|
56
|
+
end
|
57
|
+
|
58
|
+
state :dqs do
|
59
|
+
rule(/\\([\\abcefnrtvl"\']|\n|x[a-fA-F0-9]{2}|[0-9]{1,3})/,
|
60
|
+
Str::Escape)
|
61
|
+
rule(/"/, Str, :pop!)
|
62
|
+
mixin :strings
|
63
|
+
end
|
64
|
+
|
65
|
+
state :rdqs do
|
66
|
+
rule(/"(?!")/, Str, :pop!)
|
67
|
+
rule(/"/, Str::Escape, :pop!)
|
68
|
+
mixin :strings
|
69
|
+
end
|
70
|
+
|
71
|
+
state :tdqs do
|
72
|
+
rule(/"""(?!")/, Str, :pop!)
|
73
|
+
mixin :strings
|
74
|
+
mixin :nl
|
75
|
+
end
|
76
|
+
|
77
|
+
state :funcname do
|
78
|
+
rule(/((?![\d_])\w)(((?!_)\w)|(_(?!_)\w))*/, Name::Function, :pop!)
|
79
|
+
rule(/`.+`/, Name::Function, :pop!)
|
80
|
+
end
|
81
|
+
|
82
|
+
state :nl do
|
83
|
+
rule(/\n/, Str)
|
84
|
+
end
|
85
|
+
|
86
|
+
state :floatnumber do
|
87
|
+
rule(/\.(?!\.)[0-9_]*/, Num::Float)
|
88
|
+
rule(/[eE][+-]?[0-9][0-9_]*/, Num::Float)
|
89
|
+
rule(//, Text, :pop!)
|
90
|
+
end
|
91
|
+
|
92
|
+
# Making apostrophes optional, as only hexadecimal with type suffix
|
93
|
+
# possibly ambiguous.
|
94
|
+
state :floatsuffix do
|
95
|
+
rule(/'?[fF](32|64)/, Num::Float)
|
96
|
+
rule(//, Text, :pop!)
|
97
|
+
end
|
98
|
+
|
99
|
+
state :intsuffix do
|
100
|
+
rule(/'?[iI](32|64)/, Num::Integer::Long)
|
101
|
+
rule(/'?[iI](8|16)/, Num::Integer)
|
102
|
+
rule(/'?[uU]/, Num::Integer)
|
103
|
+
rule(//, Text, :pop!)
|
104
|
+
end
|
105
|
+
|
106
|
+
state :root do
|
107
|
+
rule(/##.*$/, Str::Doc)
|
108
|
+
rule(/#.*$/, Comment)
|
109
|
+
rule(/\*|=|>|<|\+|-|\/|@|\$|~|&|%|\!|\?|\||\\|\[|\]/, Operator)
|
110
|
+
rule(/\.\.|\.|,|\[\.|\.\]|{\.|\.}|\(\.|\.\)|{|}|\(|\)|:|\^|`|;/,
|
111
|
+
Punctuation)
|
112
|
+
|
113
|
+
# Strings
|
114
|
+
rule(/(?:[\w]+)"/,Str, :rdqs)
|
115
|
+
rule(/"""/, Str, :tdqs)
|
116
|
+
rule(/"/, Str, :dqs)
|
117
|
+
|
118
|
+
# Char
|
119
|
+
rule(/'/, Str::Char, :chars)
|
120
|
+
|
121
|
+
# Keywords
|
122
|
+
rule(%r[(#{Nim.underscorize(OPWORDS)})\b], Operator::Word)
|
123
|
+
rule(/(p_?r_?o_?c_?\s)(?![\(\[\]])/, Keyword, :funcname)
|
124
|
+
rule(%r[(#{Nim.underscorize(KEYWORDS)})\b], Keyword)
|
125
|
+
rule(%r[(#{Nim.underscorize(NAMESPACE)})\b], Keyword::Namespace)
|
126
|
+
rule(/(v_?a_?r)\b/, Keyword::Declaration)
|
127
|
+
rule(%r[(#{Nim.underscorize(TYPES)})\b], Keyword::Type)
|
128
|
+
rule(%r[(#{Nim.underscorize(PSEUDOKEYWORDS)})\b], Keyword::Pseudo)
|
129
|
+
# Identifiers
|
130
|
+
rule(/\b((?![_\d])\w)(((?!_)\w)|(_(?!_)\w))*/, Name)
|
131
|
+
|
132
|
+
# Numbers
|
133
|
+
# Note: Have to do this with a block to push multiple states first,
|
134
|
+
# since we can't pass array of states like w/ Pygments.
|
135
|
+
rule(/[0-9][0-9_]*(?=([eE.]|'?[fF](32|64)))/) do |number|
|
136
|
+
push :floatsuffix
|
137
|
+
push :floatnumber
|
138
|
+
token Num::Float
|
139
|
+
end
|
140
|
+
rule(/0[xX][a-fA-F0-9][a-fA-F0-9_]*/, Num::Hex, :intsuffix)
|
141
|
+
rule(/0[bB][01][01_]*/, Num, :intsuffix)
|
142
|
+
rule(/0o[0-7][0-7_]*/, Num::Oct, :intsuffix)
|
143
|
+
rule(/[0-9][0-9_]*/, Num::Integer, :intsuffix)
|
144
|
+
|
145
|
+
# Whitespace
|
146
|
+
rule(/\s+/, Text)
|
147
|
+
rule(/.+$/, Error)
|
148
|
+
end
|
149
|
+
|
150
|
+
end
|
151
|
+
end
|
152
|
+
end
|
@@ -0,0 +1,197 @@
|
|
1
|
+
# -*- coding: utf-8 -*- #
|
2
|
+
|
3
|
+
module Rouge
|
4
|
+
module Lexers
|
5
|
+
load_const :C, 'c.rb'
|
6
|
+
|
7
|
+
class ObjectiveC < C
|
8
|
+
tag 'objective_c'
|
9
|
+
title "Objective-C"
|
10
|
+
desc 'an extension of C commonly used to write Apple software'
|
11
|
+
aliases 'objc'
|
12
|
+
filenames '*.m', '*.h'
|
13
|
+
|
14
|
+
mimetypes 'text/x-objective_c', 'application/x-objective_c'
|
15
|
+
|
16
|
+
def self.at_keywords
|
17
|
+
@at_keywords ||= %w(
|
18
|
+
selector private protected public encode synchronized try
|
19
|
+
throw catch finally end property synthesize dynamic optional
|
20
|
+
interface implementation import
|
21
|
+
)
|
22
|
+
end
|
23
|
+
|
24
|
+
def self.at_builtins
|
25
|
+
@at_builtins ||= %w(true false YES NO)
|
26
|
+
end
|
27
|
+
|
28
|
+
def self.builtins
|
29
|
+
@builtins ||= %w(YES NO nil)
|
30
|
+
end
|
31
|
+
|
32
|
+
def self.analyze_text(text)
|
33
|
+
return 1 if text =~ /@(end|implementation|protocol|property)\b/
|
34
|
+
|
35
|
+
id = /[a-z$_][a-z0-9$_]*/i
|
36
|
+
return 0.4 if text =~ %r(
|
37
|
+
\[ \s* #{id} \s+
|
38
|
+
(?:
|
39
|
+
#{id} \s* \]
|
40
|
+
| #{id}? :
|
41
|
+
)
|
42
|
+
)x
|
43
|
+
return 0.4 if text.include? '@"'
|
44
|
+
end
|
45
|
+
|
46
|
+
id = /[a-z$_][a-z0-9$_]*/i
|
47
|
+
|
48
|
+
prepend :statements do
|
49
|
+
rule /@"/, Str, :string
|
50
|
+
rule /@'(\\[0-7]{1,3}|\\x[a-fA-F0-9]{1,2}|\\.|[^\\'\n]')/,
|
51
|
+
Str::Char
|
52
|
+
rule /@(\d+[.]\d*|[.]\d+|\d+)e[+-]?\d+l?/i,
|
53
|
+
Num::Float
|
54
|
+
rule /@(\d+[.]\d*|[.]\d+|\d+f)f?/i, Num::Float
|
55
|
+
rule /@0x\h+[lL]?/, Num::Hex
|
56
|
+
rule /@0[0-7]+l?/i, Num::Oct
|
57
|
+
rule /@\d+l?/, Num::Integer
|
58
|
+
rule /\bin\b/, Keyword
|
59
|
+
|
60
|
+
rule /@(?:interface|implementation)\b/ do
|
61
|
+
token Keyword
|
62
|
+
goto :classname
|
63
|
+
end
|
64
|
+
|
65
|
+
rule /@(?:class|protocol)\b/ do
|
66
|
+
token Keyword
|
67
|
+
goto :forward_classname
|
68
|
+
end
|
69
|
+
|
70
|
+
rule /@([[:alnum:]]+)/ do |m|
|
71
|
+
if self.class.at_keywords.include? m[1]
|
72
|
+
token Keyword
|
73
|
+
elsif self.class.at_builtins.include? m[1]
|
74
|
+
token Name::Builtin
|
75
|
+
else
|
76
|
+
token Error
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
rule /[?]/, Punctuation, :ternary
|
81
|
+
rule /\[/, Punctuation, :message
|
82
|
+
rule /@\[/, Punctuation, :array_literal
|
83
|
+
end
|
84
|
+
|
85
|
+
state :ternary do
|
86
|
+
rule /:/, Punctuation, :pop!
|
87
|
+
mixin :statements
|
88
|
+
end
|
89
|
+
|
90
|
+
state :message_shared do
|
91
|
+
rule /\]/, Punctuation, :pop!
|
92
|
+
rule /;/, Error
|
93
|
+
|
94
|
+
mixin :statement
|
95
|
+
end
|
96
|
+
|
97
|
+
state :message do
|
98
|
+
rule /(#{id})(\s*)(:)/ do
|
99
|
+
groups(Name::Function, Text, Punctuation)
|
100
|
+
goto :message_with_args
|
101
|
+
end
|
102
|
+
|
103
|
+
rule /(#{id})(\s*)(\])/ do
|
104
|
+
groups(Name::Function, Text, Punctuation)
|
105
|
+
pop!
|
106
|
+
end
|
107
|
+
|
108
|
+
mixin :message_shared
|
109
|
+
end
|
110
|
+
|
111
|
+
state :message_with_args do
|
112
|
+
rule /(#{id})(\s*)(:)/ do
|
113
|
+
groups(Name::Function, Text, Punctuation)
|
114
|
+
end
|
115
|
+
|
116
|
+
mixin :message_shared
|
117
|
+
end
|
118
|
+
|
119
|
+
state :array_literal do
|
120
|
+
rule /]/, Punctuation, :pop!
|
121
|
+
rule /,/, Punctuation
|
122
|
+
mixin :statements
|
123
|
+
end
|
124
|
+
|
125
|
+
state :classname do
|
126
|
+
mixin :whitespace
|
127
|
+
|
128
|
+
rule /(#{id})(\s*)(:)(\s*)(#{id})/ do
|
129
|
+
groups(Name::Class, Text,
|
130
|
+
Punctuation, Text,
|
131
|
+
Name::Class)
|
132
|
+
pop!
|
133
|
+
end
|
134
|
+
|
135
|
+
rule /(#{id})(\s*)([(])(\s*)(#{id})(\s*)([)])/ do
|
136
|
+
groups(Name::Class, Text,
|
137
|
+
Punctuation, Text,
|
138
|
+
Name::Label, Text,
|
139
|
+
Punctuation)
|
140
|
+
end
|
141
|
+
|
142
|
+
rule id, Name::Class, :pop!
|
143
|
+
end
|
144
|
+
|
145
|
+
state :forward_classname do
|
146
|
+
mixin :whitespace
|
147
|
+
|
148
|
+
rule /(#{id})(\s*)(,)(\s*)/ do
|
149
|
+
groups(Name::Class, Text, Punctuation, Text)
|
150
|
+
push
|
151
|
+
end
|
152
|
+
|
153
|
+
rule /(#{id})(\s*)(;?)/ do
|
154
|
+
groups(Name::Class, Text, Punctuation)
|
155
|
+
pop!
|
156
|
+
end
|
157
|
+
end
|
158
|
+
|
159
|
+
prepend :root do
|
160
|
+
rule %r(
|
161
|
+
([-+])(\s*)
|
162
|
+
([(].*?[)])?(\s*)
|
163
|
+
(?=#{id}:?)
|
164
|
+
)ix do |m|
|
165
|
+
token Keyword, m[1]; token Text, m[2]
|
166
|
+
recurse m[3]; token Text, m[4]
|
167
|
+
push :method_definition
|
168
|
+
end
|
169
|
+
end
|
170
|
+
|
171
|
+
state :method_definition do
|
172
|
+
rule /,/, Punctuation
|
173
|
+
rule /[.][.][.]/, Punctuation
|
174
|
+
rule /([(].*?[)])(#{id})/ do |m|
|
175
|
+
recurse m[1]; token Name::Variable, m[2]
|
176
|
+
end
|
177
|
+
|
178
|
+
rule /(#{id})(\s*)(:)/m do
|
179
|
+
groups(Name::Function, Text, Punctuation)
|
180
|
+
end
|
181
|
+
|
182
|
+
rule /;/, Punctuation, :pop!
|
183
|
+
|
184
|
+
rule /{/ do
|
185
|
+
token Punctuation
|
186
|
+
goto :function
|
187
|
+
end
|
188
|
+
|
189
|
+
mixin :inline_whitespace
|
190
|
+
rule %r(//.*?\n), Comment::Single
|
191
|
+
rule /\s+/m, Text
|
192
|
+
|
193
|
+
rule(//) { pop! }
|
194
|
+
end
|
195
|
+
end
|
196
|
+
end
|
197
|
+
end
|
@@ -0,0 +1,111 @@
|
|
1
|
+
# -*- coding: utf-8 -*- #
|
2
|
+
|
3
|
+
module Rouge
|
4
|
+
module Lexers
|
5
|
+
class OCaml < RegexLexer
|
6
|
+
title "OCaml"
|
7
|
+
desc 'Objective CAML (ocaml.org)'
|
8
|
+
tag 'ocaml'
|
9
|
+
filenames '*.ml', '*.mli', '*.mll', '*.mly'
|
10
|
+
mimetypes 'text/x-ocaml'
|
11
|
+
|
12
|
+
def self.keywords
|
13
|
+
@keywords ||= Set.new %w(
|
14
|
+
as assert begin class constraint do done downto else end
|
15
|
+
exception external false for fun function functor if in include
|
16
|
+
inherit initializer lazy let match method module mutable new
|
17
|
+
object of open private raise rec sig struct then to true try
|
18
|
+
type value val virtual when while with
|
19
|
+
)
|
20
|
+
end
|
21
|
+
|
22
|
+
def self.keyopts
|
23
|
+
@keyopts ||= Set.new %w(
|
24
|
+
!= # & && ( ) * \+ , - -. -> . .. : :: := :> ; ;; < <- =
|
25
|
+
> >] >} ? ?? [ [< [> [| ] _ ` { {< | |] } ~
|
26
|
+
)
|
27
|
+
end
|
28
|
+
|
29
|
+
def self.word_operators
|
30
|
+
@word_operators ||= Set.new %w(and asr land lor lsl lxor mod or)
|
31
|
+
end
|
32
|
+
|
33
|
+
def self.primitives
|
34
|
+
@primitives ||= Set.new %w(unit int float bool string char list array)
|
35
|
+
end
|
36
|
+
|
37
|
+
operator = %r([\[\];,{}_()!$%&*+./:<=>?@^|~#-]+)
|
38
|
+
id = /[a-z][\w']*/i
|
39
|
+
upper_id = /[A-Z][\w']*/
|
40
|
+
|
41
|
+
state :root do
|
42
|
+
rule /\s+/m, Text
|
43
|
+
rule /false|true|[(][)]|\[\]/, Name::Builtin::Pseudo
|
44
|
+
rule /#{upper_id}(?=\s*[.])/, Name::Namespace, :dotted
|
45
|
+
rule upper_id, Name::Class
|
46
|
+
rule /[(][*](?![)])/, Comment, :comment
|
47
|
+
rule id do |m|
|
48
|
+
match = m[0]
|
49
|
+
if self.class.keywords.include? match
|
50
|
+
token Keyword
|
51
|
+
elsif self.class.word_operators.include? match
|
52
|
+
token Operator::Word
|
53
|
+
elsif self.class.primitives.include? match
|
54
|
+
token Keyword::Type
|
55
|
+
else
|
56
|
+
token Name
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
rule operator do |m|
|
61
|
+
match = m[0]
|
62
|
+
if self.class.keyopts.include? match
|
63
|
+
token Punctuation
|
64
|
+
else
|
65
|
+
token Operator
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
rule /-?\d[\d_]*(.[\d_]*)?(e[+-]?\d[\d_]*)/i, Num::Float
|
70
|
+
rule /0x\h[\h_]*/i, Num::Hex
|
71
|
+
rule /0o[0-7][0-7_]*/i, Num::Oct
|
72
|
+
rule /0b[01][01_]*/i, Num::Bin
|
73
|
+
rule /\d[\d_]*/, Num::Integer
|
74
|
+
|
75
|
+
rule /'(?:(\\[\\"'ntbr ])|(\\[0-9]{3})|(\\x\h{2}))'/, Str::Char
|
76
|
+
rule /'[.]'/, Str::Char
|
77
|
+
rule /'/, Keyword
|
78
|
+
rule /"/, Str::Double, :string
|
79
|
+
rule /[~?]#{id}/, Name::Variable
|
80
|
+
end
|
81
|
+
|
82
|
+
state :comment do
|
83
|
+
rule /[^(*)]+/, Comment
|
84
|
+
rule(/[(][*]/) { token Comment; push }
|
85
|
+
rule /[*][)]/, Comment, :pop!
|
86
|
+
rule /[(*)]/, Comment
|
87
|
+
end
|
88
|
+
|
89
|
+
state :string do
|
90
|
+
rule /[^\\"]+/, Str::Double
|
91
|
+
mixin :escape_sequence
|
92
|
+
rule /\\\n/, Str::Double
|
93
|
+
rule /"/, Str::Double, :pop!
|
94
|
+
end
|
95
|
+
|
96
|
+
state :escape_sequence do
|
97
|
+
rule /\\[\\"'ntbr]/, Str::Escape
|
98
|
+
rule /\\\d{3}/, Str::Escape
|
99
|
+
rule /\\x\h{2}/, Str::Escape
|
100
|
+
end
|
101
|
+
|
102
|
+
state :dotted do
|
103
|
+
rule /\s+/m, Text
|
104
|
+
rule /[.]/, Punctuation
|
105
|
+
rule /#{upper_id}(?=\s*[.])/, Name::Namespace
|
106
|
+
rule upper_id, Name::Class, :pop!
|
107
|
+
rule id, Name, :pop!
|
108
|
+
end
|
109
|
+
end
|
110
|
+
end
|
111
|
+
end
|