rouge 3.15.0 → 3.20.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/rougify +2 -2
- data/lib/rouge.rb +67 -52
- data/lib/rouge/cli.rb +18 -1
- data/lib/rouge/demos/augeas +16 -0
- data/lib/rouge/demos/bibtex +12 -0
- data/lib/rouge/demos/cypher +5 -0
- data/lib/rouge/demos/datastudio +21 -0
- data/lib/rouge/demos/ecl +18 -0
- data/lib/rouge/demos/ghc-cmm +23 -0
- data/lib/rouge/demos/hlsl +20 -0
- data/lib/rouge/demos/isbl +4 -0
- data/lib/rouge/demos/livescript +15 -0
- data/lib/rouge/demos/nasm +6 -6
- data/lib/rouge/demos/rego +8 -0
- data/lib/rouge/demos/solidity +13 -0
- data/lib/rouge/demos/vcl +12 -0
- data/lib/rouge/demos/velocity +9 -0
- data/lib/rouge/demos/yang +17 -0
- data/lib/rouge/demos/zig +6 -0
- data/lib/rouge/formatters/terminal256.rb +22 -6
- data/lib/rouge/formatters/terminal_truecolor.rb +37 -0
- data/lib/rouge/lexer.rb +4 -2
- data/lib/rouge/lexers/apache.rb +22 -12
- data/lib/rouge/lexers/apache/keywords.rb +24 -0
- data/lib/rouge/lexers/augeas.rb +93 -0
- data/lib/rouge/lexers/bibtex.rb +115 -0
- data/lib/rouge/lexers/cmake.rb +1 -0
- data/lib/rouge/lexers/coffeescript.rb +47 -15
- data/lib/rouge/lexers/console.rb +53 -37
- data/lib/rouge/lexers/cpp.rb +18 -5
- data/lib/rouge/lexers/cypher.rb +108 -0
- data/lib/rouge/lexers/d.rb +3 -3
- data/lib/rouge/lexers/datastudio.rb +138 -0
- data/lib/rouge/lexers/diff.rb +1 -1
- data/lib/rouge/lexers/ecl.rb +175 -0
- data/lib/rouge/lexers/fsharp.rb +1 -0
- data/lib/rouge/lexers/ghc_cmm.rb +340 -0
- data/lib/rouge/lexers/gherkin.rb +1 -1
- data/lib/rouge/lexers/gherkin/keywords.rb +9 -6
- data/lib/rouge/lexers/haskell.rb +27 -19
- data/lib/rouge/lexers/hlsl.rb +166 -0
- data/lib/rouge/lexers/html.rb +1 -1
- data/lib/rouge/lexers/isbl.rb +97 -0
- data/lib/rouge/lexers/isbl/builtins.rb +17 -0
- data/lib/rouge/lexers/java.rb +4 -5
- data/lib/rouge/lexers/javascript.rb +1 -3
- data/lib/rouge/lexers/json.rb +3 -0
- data/lib/rouge/lexers/json_doc.rb +1 -0
- data/lib/rouge/lexers/jsx.rb +47 -59
- data/lib/rouge/lexers/kotlin.rb +14 -2
- data/lib/rouge/lexers/lasso.rb +11 -12
- data/lib/rouge/lexers/lasso/keywords.rb +20 -0
- data/lib/rouge/lexers/livescript.rb +310 -0
- data/lib/rouge/lexers/llvm.rb +6 -33
- data/lib/rouge/lexers/llvm/keywords.rb +25 -0
- data/lib/rouge/lexers/lua.rb +41 -3
- data/lib/rouge/lexers/lua/keywords.rb +28 -0
- data/lib/rouge/lexers/markdown.rb +9 -5
- data/lib/rouge/lexers/mathematica.rb +2 -2
- data/lib/rouge/lexers/mathematica/keywords.rb +17 -0
- data/lib/rouge/lexers/matlab.rb +3 -4
- data/lib/rouge/lexers/matlab/builtins.rb +11 -0
- data/lib/rouge/lexers/matlab/keywords.rb +15 -0
- data/lib/rouge/lexers/nasm.rb +42 -168
- data/lib/rouge/lexers/objective_c/common.rb +2 -2
- data/lib/rouge/lexers/opentype_feature_file.rb +27 -42
- data/lib/rouge/lexers/pascal.rb +1 -1
- data/lib/rouge/lexers/php.rb +48 -33
- data/lib/rouge/lexers/php/keywords.rb +202 -0
- data/lib/rouge/lexers/powershell.rb +7 -2
- data/lib/rouge/lexers/python.rb +58 -57
- data/lib/rouge/lexers/racket.rb +24 -1
- data/lib/rouge/lexers/rego.rb +45 -0
- data/lib/rouge/lexers/ruby.rb +16 -3
- data/lib/rouge/lexers/rust.rb +2 -10
- data/lib/rouge/lexers/scala.rb +1 -1
- data/lib/rouge/lexers/shell.rb +1 -1
- data/lib/rouge/lexers/solidity.rb +185 -0
- data/lib/rouge/lexers/sparql.rb +5 -4
- data/lib/rouge/lexers/sqf.rb +2 -2
- data/lib/rouge/lexers/sqf/keywords.rb +12 -0
- data/lib/rouge/lexers/terraform.rb +15 -0
- data/lib/rouge/lexers/toml.rb +23 -0
- data/lib/rouge/lexers/tsx.rb +10 -3
- data/lib/rouge/lexers/turtle.rb +1 -1
- data/lib/rouge/lexers/typescript.rb +1 -1
- data/lib/rouge/lexers/typescript/common.rb +18 -4
- data/lib/rouge/lexers/varnish.rb +168 -0
- data/lib/rouge/lexers/velocity.rb +71 -0
- data/lib/rouge/lexers/viml.rb +6 -38
- data/lib/rouge/lexers/viml/keywords.rb +11 -4
- data/lib/rouge/lexers/vue.rb +4 -1
- data/lib/rouge/lexers/yang.rb +147 -0
- data/lib/rouge/lexers/zig.rb +139 -0
- data/lib/rouge/version.rb +1 -1
- metadata +43 -9
- data/lib/rouge/lexers/apache/keywords.yml +0 -764
- data/lib/rouge/lexers/lasso/keywords.yml +0 -446
- data/lib/rouge/lexers/lua/builtins.rb +0 -24
- data/lib/rouge/lexers/mathematica/builtins.rb +0 -13
- data/lib/rouge/lexers/matlab/builtins.yml +0 -3515
- data/lib/rouge/lexers/php/builtins.rb +0 -203
- data/lib/rouge/lexers/sqf/commands.rb +0 -15
data/lib/rouge/lexers/console.rb
CHANGED
@@ -9,12 +9,14 @@ module Rouge
|
|
9
9
|
# line before passing the remainder of the line to the language lexer for
|
10
10
|
# the shell (by default, the {Shell} lexer).
|
11
11
|
#
|
12
|
-
# The {ConsoleLexer} class accepts
|
12
|
+
# The {ConsoleLexer} class accepts five options:
|
13
13
|
# 1. **lang**: the shell language to lex (default: `shell`);
|
14
14
|
# 2. **output**: the output language (default: `plaintext?token=Generic.Output`);
|
15
15
|
# 3. **prompt**: comma-separated list of strings that indicate the end of a
|
16
16
|
# prompt (default: `$,#,>,;`);
|
17
17
|
# 4. **comments**: whether to enable comments.
|
18
|
+
# 5. **error**: comma-separated list of strings that indicate the start of an
|
19
|
+
# error message
|
18
20
|
#
|
19
21
|
# The comments option, if enabled, will lex lines that begin with a `#` as a
|
20
22
|
# comment. Please note that this option will only work if the prompt is
|
@@ -39,12 +41,13 @@ module Rouge
|
|
39
41
|
tag 'console'
|
40
42
|
aliases 'terminal', 'shell_session', 'shell-session'
|
41
43
|
filenames '*.cap'
|
42
|
-
desc 'A generic lexer for shell sessions. Accepts ?lang and ?output lexer options, a ?prompt option,
|
44
|
+
desc 'A generic lexer for shell sessions. Accepts ?lang and ?output lexer options, a ?prompt option, ?comments to enable # comments, and ?error to handle error messages.'
|
43
45
|
|
44
46
|
option :lang, 'the shell language to lex (default: shell)'
|
45
47
|
option :output, 'the output language (default: plaintext?token=Generic.Output)'
|
46
48
|
option :prompt, 'comma-separated list of strings that indicate the end of a prompt. (default: $,#,>,;)'
|
47
49
|
option :comments, 'enable hash-comments at the start of a line - otherwise interpreted as a prompt. (default: false, implied by ?prompt not containing `#`)'
|
50
|
+
option :error, 'comma-separated list of strings that indicate the start of an error message'
|
48
51
|
|
49
52
|
def initialize(*)
|
50
53
|
super
|
@@ -52,14 +55,24 @@ module Rouge
|
|
52
55
|
@lang = lexer_option(:lang) { 'shell' }
|
53
56
|
@output = lexer_option(:output) { PlainText.new(token: Generic::Output) }
|
54
57
|
@comments = bool_option(:comments) { :guess }
|
58
|
+
@error = list_option(:error) { nil }
|
55
59
|
end
|
56
60
|
|
57
|
-
|
58
|
-
|
59
|
-
|
61
|
+
# whether to allow comments. if manually specifying a prompt that isn't
|
62
|
+
# simply "#", we flag this to on
|
63
|
+
def allow_comments?
|
64
|
+
case @comments
|
65
|
+
when :guess
|
66
|
+
@prompt && !@prompt.empty? && !end_chars.include?('#')
|
67
|
+
else
|
68
|
+
@comments
|
60
69
|
end
|
61
70
|
end
|
62
71
|
|
72
|
+
def comment_regex
|
73
|
+
/\A\s*?#/
|
74
|
+
end
|
75
|
+
|
63
76
|
def end_chars
|
64
77
|
@end_chars ||= if @prompt.any?
|
65
78
|
@prompt.reject { |c| c.empty? }
|
@@ -70,22 +83,9 @@ module Rouge
|
|
70
83
|
end
|
71
84
|
end
|
72
85
|
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
case @comments
|
77
|
-
when :guess
|
78
|
-
@prompt && !@prompt.empty? && !end_chars.include?('#')
|
79
|
-
else
|
80
|
-
@comments
|
81
|
-
end
|
82
|
-
end
|
83
|
-
|
84
|
-
def prompt_prefix_regex
|
85
|
-
if allow_comments?
|
86
|
-
/[^<#]*?/m
|
87
|
-
else
|
88
|
-
/.*?/m
|
86
|
+
def error_regex
|
87
|
+
@error_regex ||= if @error.any?
|
88
|
+
/^(?:#{@error.map(&Regexp.method(:escape)).join('|')})/
|
89
89
|
end
|
90
90
|
end
|
91
91
|
|
@@ -102,6 +102,10 @@ module Rouge
|
|
102
102
|
end
|
103
103
|
end
|
104
104
|
|
105
|
+
def line_regex
|
106
|
+
/(\\.|[^\\])*?(\n|$)/m
|
107
|
+
end
|
108
|
+
|
105
109
|
def output_lexer
|
106
110
|
@output_lexer ||= case @output
|
107
111
|
when nil
|
@@ -115,22 +119,6 @@ module Rouge
|
|
115
119
|
end
|
116
120
|
end
|
117
121
|
|
118
|
-
def line_regex
|
119
|
-
/(\\.|[^\\])*?(\n|$)/m
|
120
|
-
end
|
121
|
-
|
122
|
-
def comment_regex
|
123
|
-
/\A\s*?#/
|
124
|
-
end
|
125
|
-
|
126
|
-
def stream_tokens(input, &output)
|
127
|
-
input = StringScanner.new(input)
|
128
|
-
lang_lexer.reset!
|
129
|
-
output_lexer.reset!
|
130
|
-
|
131
|
-
process_line(input, &output) while !input.eos?
|
132
|
-
end
|
133
|
-
|
134
122
|
def process_line(input, &output)
|
135
123
|
input.scan(line_regex)
|
136
124
|
|
@@ -162,6 +150,12 @@ module Rouge
|
|
162
150
|
lang_lexer.reset!
|
163
151
|
|
164
152
|
yield Comment, input[0]
|
153
|
+
elsif error_regex =~ input[0]
|
154
|
+
puts "console: matched error #{input[0].inspect}" if @debug
|
155
|
+
output_lexer.reset!
|
156
|
+
lang_lexer.reset!
|
157
|
+
|
158
|
+
yield Generic::Error, input[0]
|
165
159
|
else
|
166
160
|
puts "console: matched output #{input[0].inspect}" if @debug
|
167
161
|
lang_lexer.reset!
|
@@ -169,6 +163,28 @@ module Rouge
|
|
169
163
|
output_lexer.continue_lex(input[0], &output)
|
170
164
|
end
|
171
165
|
end
|
166
|
+
|
167
|
+
def prompt_prefix_regex
|
168
|
+
if allow_comments?
|
169
|
+
/[^<#]*?/m
|
170
|
+
else
|
171
|
+
/.*?/m
|
172
|
+
end
|
173
|
+
end
|
174
|
+
|
175
|
+
def prompt_regex
|
176
|
+
@prompt_regex ||= begin
|
177
|
+
/^#{prompt_prefix_regex}(?:#{end_chars.map(&Regexp.method(:escape)).join('|')})/
|
178
|
+
end
|
179
|
+
end
|
180
|
+
|
181
|
+
def stream_tokens(input, &output)
|
182
|
+
input = StringScanner.new(input)
|
183
|
+
lang_lexer.reset!
|
184
|
+
output_lexer.reset!
|
185
|
+
|
186
|
+
process_line(input, &output) while !input.eos?
|
187
|
+
end
|
172
188
|
end
|
173
189
|
end
|
174
190
|
end
|
data/lib/rouge/lexers/cpp.rb
CHANGED
@@ -22,10 +22,10 @@ module Rouge
|
|
22
22
|
|
23
23
|
def self.keywords
|
24
24
|
@keywords ||= super + Set.new(%w(
|
25
|
-
asm auto catch const_cast delete dynamic_cast explicit export
|
26
|
-
|
27
|
-
reinterpret_cast restrict size_of static_cast
|
28
|
-
|
25
|
+
asm auto catch const_cast delete dynamic_cast explicit export friend
|
26
|
+
mutable namespace new operator private protected public
|
27
|
+
reinterpret_cast restrict size_of static_cast this throw throws
|
28
|
+
typeid typename using virtual final override
|
29
29
|
|
30
30
|
alignas alignof constexpr decltype noexcept static_assert
|
31
31
|
thread_local try
|
@@ -57,7 +57,8 @@ module Rouge
|
|
57
57
|
dq = /\d('?\d)*/
|
58
58
|
|
59
59
|
prepend :statements do
|
60
|
-
rule %r/class\b/, Keyword, :classname
|
60
|
+
rule %r/(class|struct)\b/, Keyword, :classname
|
61
|
+
rule %r/template\b/, Keyword, :template
|
61
62
|
rule %r/\d+(\.\d+)?(?:h|(?:min)|s|(?:ms)|(?:us)|(?:ns))/, Num::Other
|
62
63
|
rule %r((#{dq}[.]#{dq}?|[.]#{dq})(e[+-]?#{dq}[lu]*)?)i, Num::Float
|
63
64
|
rule %r(#{dq}e[+-]?#{dq}[lu]*)i, Num::Float
|
@@ -67,6 +68,7 @@ module Rouge
|
|
67
68
|
rule %r/#{dq}[lu]*/i, Num::Integer
|
68
69
|
rule %r/\bnullptr\b/, Name::Builtin
|
69
70
|
rule %r/(?:u8|u|U|L)?R"([a-zA-Z0-9_{}\[\]#<>%:;.?*\+\-\/\^&|~!=,"']{,16})\(.*?\)\1"/m, Str
|
71
|
+
rule %r/::/, Operator
|
70
72
|
end
|
71
73
|
|
72
74
|
state :classname do
|
@@ -77,6 +79,17 @@ module Rouge
|
|
77
79
|
rule %r/[.]{3}/, Operator
|
78
80
|
mixin :whitespace
|
79
81
|
end
|
82
|
+
|
83
|
+
state :template do
|
84
|
+
rule %r/>/, Punctuation, :pop!
|
85
|
+
rule %r/typename\b/, Keyword, :classname
|
86
|
+
mixin :root
|
87
|
+
end
|
88
|
+
|
89
|
+
state :case do
|
90
|
+
rule %r/:(?!:)/, Punctuation, :pop!
|
91
|
+
mixin :statements
|
92
|
+
end
|
80
93
|
end
|
81
94
|
end
|
82
95
|
end
|
@@ -0,0 +1,108 @@
|
|
1
|
+
# -*- coding: utf-8 -*- #
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
module Rouge
|
5
|
+
module Lexers
|
6
|
+
class Cypher < RegexLexer
|
7
|
+
tag 'cypher'
|
8
|
+
aliases 'cypher'
|
9
|
+
filenames '*.cypher'
|
10
|
+
mimetypes 'application/x-cypher-query'
|
11
|
+
|
12
|
+
title "Cypher"
|
13
|
+
desc 'The Cypher query language (neo4j.com/docs/cypher-manual)'
|
14
|
+
|
15
|
+
def self.functions
|
16
|
+
@functions ||= Set.new %w(
|
17
|
+
ABS ACOS ALLSHORTESTPATHS ASIN ATAN ATAN2 AVG CEIL COALESCE COLLECT
|
18
|
+
COS COT COUNT DATE DEGREES E ENDNODE EXP EXTRACT FILTER FLOOR
|
19
|
+
HAVERSIN HEAD ID KEYS LABELS LAST LEFT LENGTH LOG LOG10 LOWER LTRIM
|
20
|
+
MAX MIN NODE NODES PERCENTILECONT PERCENTILEDISC PI RADIANS RAND
|
21
|
+
RANGE REDUCE REL RELATIONSHIP RELATIONSHIPS REPLACE REVERSE RIGHT
|
22
|
+
ROUND RTRIM SHORTESTPATH SIGN SIN SIZE SPLIT SQRT STARTNODE STDEV
|
23
|
+
STDEVP STR SUBSTRING SUM TAIL TAN TIMESTAMP TOFLOAT TOINT TOINTEGER
|
24
|
+
TOSTRING TRIM TYPE UPPER
|
25
|
+
)
|
26
|
+
end
|
27
|
+
|
28
|
+
def self.predicates
|
29
|
+
@predicates ||= Set.new %w(
|
30
|
+
ALL AND ANY CONTAINS EXISTS HAS IN NONE NOT OR SINGLE XOR
|
31
|
+
)
|
32
|
+
end
|
33
|
+
|
34
|
+
def self.keywords
|
35
|
+
@keywords ||= Set.new %w(
|
36
|
+
AS ASC ASCENDING ASSERT BY CASE COMMIT CONSTRAINT CREATE CSV CYPHER
|
37
|
+
DELETE DESC DESCENDING DETACH DISTINCT DROP ELSE END ENDS EXPLAIN
|
38
|
+
FALSE FIELDTERMINATOR FOREACH FROM HEADERS IN INDEX IS JOIN LIMIT
|
39
|
+
LOAD MATCH MERGE NULL ON OPTIONAL ORDER PERIODIC PROFILE REMOVE
|
40
|
+
RETURN SCAN SET SKIP START STARTS THEN TRUE UNION UNIQUE UNWIND USING
|
41
|
+
WHEN WHERE WITH CALL YIELD
|
42
|
+
)
|
43
|
+
end
|
44
|
+
|
45
|
+
state :root do
|
46
|
+
rule %r/[\s]+/, Text
|
47
|
+
rule %r(//.*?$), Comment::Single
|
48
|
+
|
49
|
+
rule %r([*+\-<>=&|~%^]), Operator
|
50
|
+
rule %r/[{}),;\[\]]/, Str::Symbol
|
51
|
+
|
52
|
+
# literal number
|
53
|
+
rule %r/(\w+)(:)(\s*)(-?[._\d]+)/ do
|
54
|
+
groups Name::Label, Str::Delimiter, Text::Whitespace, Num
|
55
|
+
end
|
56
|
+
|
57
|
+
# function-like
|
58
|
+
# - "name("
|
59
|
+
# - "name ("
|
60
|
+
# - "name ("
|
61
|
+
rule %r/(\w+)(\s*)(\()/ do |m|
|
62
|
+
name = m[1].upcase
|
63
|
+
if self.class.functions.include? name
|
64
|
+
groups Name::Function, Text::Whitespace, Str::Symbol
|
65
|
+
elsif self.class.keywords.include? name
|
66
|
+
groups Keyword, Text::Whitespace, Str::Symbol
|
67
|
+
else
|
68
|
+
groups Name, Text::Whitespace, Str::Symbol
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
rule %r/:\w+/, Name::Class
|
73
|
+
|
74
|
+
# number range
|
75
|
+
rule %r/(-?\d+)(\.\.)(-?\d+)/ do
|
76
|
+
groups Num, Operator, Num
|
77
|
+
end
|
78
|
+
|
79
|
+
# numbers
|
80
|
+
rule %r/(\d+\.\d*|\d*\.\d+)(e[+-]?\d+)?/i, Num::Float
|
81
|
+
rule %r/\d+e[+-]?\d+/i, Num::Float
|
82
|
+
rule %r/0[0-7]+/, Num::Oct
|
83
|
+
rule %r/0x[a-f0-9]+/i, Num::Hex
|
84
|
+
rule %r/\d+/, Num::Integer
|
85
|
+
|
86
|
+
rule %r([.\w]+:), Name::Property
|
87
|
+
|
88
|
+
# remaining "("
|
89
|
+
rule %r/\(/, Str::Symbol
|
90
|
+
|
91
|
+
rule %r/[.\w$]+/ do |m|
|
92
|
+
match = m[0].upcase
|
93
|
+
if self.class.predicates.include? match
|
94
|
+
token Operator::Word
|
95
|
+
elsif self.class.keywords.include? match
|
96
|
+
token Keyword
|
97
|
+
else
|
98
|
+
token Name
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
rule %r/"(\\\\|\\"|[^"])*"/, Str::Double
|
103
|
+
rule %r/'(\\\\|\\'|[^'])*'/, Str::Single
|
104
|
+
rule %r/`(\\\\|\\`|[^`])*`/, Str::Backtick
|
105
|
+
end
|
106
|
+
end
|
107
|
+
end
|
108
|
+
end
|
data/lib/rouge/lexers/d.rb
CHANGED
@@ -35,9 +35,9 @@ module Rouge
|
|
35
35
|
)
|
36
36
|
|
37
37
|
keywords_pseudo = %w(
|
38
|
-
__FILE__ __MODULE__ __LINE__ __FUNCTION__
|
39
|
-
|
40
|
-
__VERSION__
|
38
|
+
__FILE__ __FILE_FULL_PATH__ __MODULE__ __LINE__ __FUNCTION__
|
39
|
+
__PRETTY_FUNCTION__ __DATE__ __EOF__ __TIME__ __TIMESTAMP__
|
40
|
+
__VENDOR__ __VERSION__
|
41
41
|
)
|
42
42
|
|
43
43
|
state :whitespace do
|
@@ -0,0 +1,138 @@
|
|
1
|
+
# -*- coding: utf-8 -*- #
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
module Rouge
|
5
|
+
module Lexers
|
6
|
+
class Datastudio < RegexLexer
|
7
|
+
tag 'datastudio'
|
8
|
+
filenames '*.job'
|
9
|
+
mimetypes 'text/x-datastudio'
|
10
|
+
|
11
|
+
title "Datastudio"
|
12
|
+
desc 'Datastudio scripting language'
|
13
|
+
|
14
|
+
id = /@?[_a-z]\w*/i
|
15
|
+
|
16
|
+
def self.sql_keywords
|
17
|
+
@sql_keywords ||= %w(
|
18
|
+
ABORT ABS ABSOLUTE ACCESS ADA ADD ADMIN AFTER AGGREGATE ALIAS
|
19
|
+
ALL ALLOCATE ALTER ANALYSE ANALYZE AND ANY ARE AS ASC ASENSITIVE
|
20
|
+
ASSERTION ASSIGNMENT ASYMMETRIC AT ATOMIC AUTHORIZATION
|
21
|
+
AVG BACKWARD BEFORE BEGIN BETWEEN BITVAR BIT_LENGTH BOTH
|
22
|
+
BREADTH BY C CACHE CALL CALLED CARDINALITY CASCADE CASCADED
|
23
|
+
CASE CAST CATALOG CATALOG_NAME CHAIN CHARACTERISTICS
|
24
|
+
CHARACTER_LENGTH CHARACTER_SET_CATALOG CHARACTER_SET_NAME
|
25
|
+
CHARACTER_SET_SCHEMA CHAR_LENGTH CHECK CHECKED CHECKPOINT
|
26
|
+
CLASS CLASS_ORIGIN CLOB CLOSE CLUSTER COALSECE COBOL COLLATE
|
27
|
+
COLLATION COLLATION_CATALOG COLLATION_NAME COLLATION_SCHEMA
|
28
|
+
COLUMN COLUMN_NAME COMMAND_FUNCTION COMMAND_FUNCTION_CODE
|
29
|
+
COMMENT COMMIT COMMITTED COMPLETION CONDITION_NUMBER
|
30
|
+
CONNECT CONNECTION CONNECTION_NAME CONSTRAINT CONSTRAINTS
|
31
|
+
CONSTRAINT_CATALOG CONSTRAINT_NAME CONSTRAINT_SCHEMA
|
32
|
+
CONSTRUCTOR CONTAINS CONTINUE CONVERSION CONVERT COPY
|
33
|
+
CORRESPONTING COUNT CREATE CREATEDB CREATEUSER CROSS CUBE
|
34
|
+
CURRENT CURRENT_DATE CURRENT_PATH CURRENT_ROLE CURRENT_TIME
|
35
|
+
CURRENT_TIMESTAMP CURRENT_USER CURSOR CURSOR_NAME CYCLE DATA
|
36
|
+
DATABASE DATETIME_INTERVAL_CODE DATETIME_INTERVAL_PRECISION
|
37
|
+
DAY DEALLOCATE DECLARE DEFAULT DEFAULTS DEFERRABLE DEFERRED
|
38
|
+
DEFINED DEFINER DELETE DELIMITER DELIMITERS DEREF DESC DESCRIBE
|
39
|
+
DESCRIPTOR DESTROY DESTRUCTOR DETERMINISTIC DIAGNOSTICS
|
40
|
+
DICTIONARY DISCONNECT DISPATCH DISTINCT DO DOMAIN DROP
|
41
|
+
DYNAMIC DYNAMIC_FUNCTION DYNAMIC_FUNCTION_CODE EACH ELSE
|
42
|
+
ENCODING ENCRYPTED END END-EXEC EQUALS ESCAPE EVERY EXCEPT
|
43
|
+
ESCEPTION EXCLUDING EXCLUSIVE EXEC EXECUTE EXISTING EXISTS
|
44
|
+
EXPLAIN EXTERNAL EXTRACT FALSE FETCH FINAL FIRST FOR FORCE
|
45
|
+
FOREIGN FORTRAN FORWARD FOUND FREE FREEZE FROM FULL FUNCTION
|
46
|
+
G GENERAL GENERATED GET GLOBAL GO GOTO GRANT GRANTED GROUP
|
47
|
+
GROUPING HANDLER HAVING HIERARCHY HOLD HOST IDENTITY IGNORE
|
48
|
+
ILIKE IMMEDIATE IMMUTABLE IMPLEMENTATION IMPLICIT IN INCLUDING
|
49
|
+
INCREMENT INDEX INDITCATOR INFIX INHERITS INITIALIZE INITIALLY
|
50
|
+
INNER INOUT INPUT INSENSITIVE INSERT INSTANTIABLE INSTEAD
|
51
|
+
INTERSECT INTO INVOKER IS ISNULL ISOLATION ITERATE JOIN KEY
|
52
|
+
KEY_MEMBER KEY_TYPE LANCOMPILER LANGUAGE LARGE LAST LATERAL
|
53
|
+
LEADING LEFT LENGTH LESS LEVEL LIKE LIMIT LISTEN LOAD LOCAL
|
54
|
+
LOCALTIME LOCALTIMESTAMP LOCATION LOCATOR LOCK LOWER MAP MATCH
|
55
|
+
MAX MAXVALUE MESSAGE_LENGTH MESSAGE_OCTET_LENGTH MESSAGE_TEXT
|
56
|
+
METHOD MIN MINUTE MINVALUE MOD MODE MODIFIES MODIFY MONTH
|
57
|
+
MORE MOVE MUMPS NAMES NATURAL NCLOB NEW NEXT
|
58
|
+
NO NOCREATEDB NOCREATEUSER NONE NOT NOTHING NOTIFY NOTNULL
|
59
|
+
NULL NULLABLE NULLIF OBJECT OCTET_LENGTH OF OFF OFFSET OIDS
|
60
|
+
OLD ON ONLY OPEN OPERATION OPERATOR OPTION OPTIONS OR ORDER
|
61
|
+
ORDINALITY OUT OUTER OUTPUT OVERLAPS OVERLAY OVERRIDING
|
62
|
+
OWNER PAD PARAMETER PARAMETERS PARAMETER_MODE PARAMATER_NAME
|
63
|
+
PARAMATER_ORDINAL_POSITION PARAMETER_SPECIFIC_CATALOG
|
64
|
+
PARAMETER_SPECIFIC_NAME PARAMATER_SPECIFIC_SCHEMA PARTIAL PASCAL
|
65
|
+
PENDANT PLACING PLI POSITION POSTFIX PREFIX PREORDER
|
66
|
+
PREPARE PRESERVE PRIMARY PRIOR PRIVILEGES PROCEDURAL PROCEDURE
|
67
|
+
PUBLIC READ READS RECHECK RECURSIVE REF REFERENCES REFERENCING
|
68
|
+
REINDEX RELATIVE RENAME REPEATABLE REPLACE RESET RESTART
|
69
|
+
RESTRICT RESULT RETURN RETURNED_LENGTH RETURNED_OCTET_LENGTH
|
70
|
+
RETURNED_SQLSTATE RETURNS REVOKE RIGHT ROLE ROLLBACK ROLLUP
|
71
|
+
ROUTINE ROUTINE_CATALOG ROUTINE_NAME ROUTINE_SCHEMA ROW ROWS
|
72
|
+
ROW_COUNT RULE SAVE_POINT SCALE SCHEMA SCHEMA_NAME SCOPE SCROLL
|
73
|
+
SEARCH SECOND SECURITY SELECT SELF SENSITIVE SERIALIZABLE
|
74
|
+
SERVER_NAME SESSION SESSION_USER SET SETOF SETS SHARE SHOW
|
75
|
+
SIMILAR SIMPLE SIZE SOME SOURCE SPACE SPECIFIC SPECIFICTYPE
|
76
|
+
SPECIFIC_NAME SQL SQLCODE SQLERROR SQLEXCEPTION SQLSTATE
|
77
|
+
SQLWARNINIG STABLE START STATE STATEMENT STATIC STATISTICS
|
78
|
+
STDIN STDOUT STORAGE STRICT STRUCTURE STYPE SUBCLASS_ORIGIN
|
79
|
+
SUBLIST SUBSTRING SUM SYMMETRIC SYSID SYSTEM SYSTEM_USER
|
80
|
+
TABLE TABLE_NAME TEMP TEMPLATE TEMPORARY TERMINATE THAN THEN
|
81
|
+
TIMEZONE_HOUR TIMEZONE_MINUTE TO TOAST TRAILING
|
82
|
+
TRANSATION TRANSACTIONS_COMMITTED TRANSACTIONS_ROLLED_BACK
|
83
|
+
TRANSATION_ACTIVE TRANSFORM TRANSFORMS TRANSLATE TRANSLATION
|
84
|
+
TREAT TRIGGER TRIGGER_CATALOG TRIGGER_NAME TRIGGER_SCHEMA TRIM
|
85
|
+
TRUE TRUNCATE TRUSTED TYPE UNCOMMITTED UNDER UNENCRYPTED UNION
|
86
|
+
UNIQUE UNKNOWN UNLISTEN UNNAMED UNNEST UNTIL UPDATE UPPER
|
87
|
+
USAGE USER USER_DEFINED_TYPE_CATALOG USER_DEFINED_TYPE_NAME
|
88
|
+
USER_DEFINED_TYPE_SCHEMA USING VACUUM VALID VALIDATOR VALUES
|
89
|
+
VARIABLE VERBOSE VERSION VIEW VOLATILE WHEN WHENEVER WHERE
|
90
|
+
WITH WITHOUT WORK WRITE ZONE
|
91
|
+
)
|
92
|
+
end
|
93
|
+
|
94
|
+
state :whitespace do
|
95
|
+
rule %r/\s+/m, Text
|
96
|
+
rule %r(//.*?$), Comment::Single
|
97
|
+
rule %r(/[*].*?[*]/)m, Comment::Multiline
|
98
|
+
end
|
99
|
+
|
100
|
+
state :string do
|
101
|
+
rule %r/%(\\.|.)+?%/, Str::Escape
|
102
|
+
rule %r/\\"/, Str::Double
|
103
|
+
rule %r/"/, Str::Double, :pop!
|
104
|
+
rule %r/./m, Str::Double
|
105
|
+
end
|
106
|
+
|
107
|
+
state :string_s do
|
108
|
+
rule %r/%(\\.|.)+?%/, Str::Escape
|
109
|
+
rule %r/\\'/, Str::Single
|
110
|
+
rule %r/'/, Str::Single, :pop!
|
111
|
+
rule %r/./m, Str::Single
|
112
|
+
end
|
113
|
+
|
114
|
+
state :root do
|
115
|
+
mixin :whitespace
|
116
|
+
|
117
|
+
rule %r/^:#{id}/, Name::Label
|
118
|
+
rule %r/@#{id}(\.#{id})?/m, Name::Entity
|
119
|
+
rule %r/%(\\.|.)+?%/, Name::Variable
|
120
|
+
rule %r/[~!%^&*()+=|\[\]{}:;,.<>\/?-]/, Punctuation
|
121
|
+
rule %r/"/, Str::Double, :string
|
122
|
+
rule %r/'/, Str::Single, :string_s
|
123
|
+
rule %r/\d(\.\d*)?/i, Num
|
124
|
+
rule %r/#{id}(?=\s*[(])/, Name::Function
|
125
|
+
rule id do |m|
|
126
|
+
name = m[0].upcase
|
127
|
+
|
128
|
+
if self.class.sql_keywords.include? name
|
129
|
+
token Keyword
|
130
|
+
else
|
131
|
+
token Name
|
132
|
+
end
|
133
|
+
end
|
134
|
+
end
|
135
|
+
|
136
|
+
end
|
137
|
+
end
|
138
|
+
end
|