rouge 3.5.1 → 3.10.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (135) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +1 -1
  3. data/lib/rouge.rb +1 -0
  4. data/lib/rouge/cli.rb +19 -11
  5. data/lib/rouge/demos/ada +26 -0
  6. data/lib/rouge/demos/armasm +12 -0
  7. data/lib/rouge/demos/batchfile +3 -0
  8. data/lib/rouge/demos/bbcbasic +6 -0
  9. data/lib/rouge/demos/clean +6 -0
  10. data/lib/rouge/demos/cmhg +8 -0
  11. data/lib/rouge/demos/cuda +11 -0
  12. data/lib/rouge/demos/cython +6 -0
  13. data/lib/rouge/demos/eex +1 -0
  14. data/lib/rouge/demos/epp +4 -0
  15. data/lib/rouge/demos/gdscript +18 -0
  16. data/lib/rouge/demos/haxe +5 -0
  17. data/lib/rouge/demos/hocon +8 -0
  18. data/lib/rouge/demos/hql +5 -0
  19. data/lib/rouge/demos/jsl +3 -0
  20. data/lib/rouge/demos/lustre +6 -0
  21. data/lib/rouge/demos/lutin +18 -0
  22. data/lib/rouge/demos/mason +22 -0
  23. data/lib/rouge/demos/msgtrans +4 -0
  24. data/lib/rouge/demos/openedge +4 -0
  25. data/lib/rouge/demos/opentype_feature_file +6 -0
  26. data/lib/rouge/demos/plist +1 -132
  27. data/lib/rouge/demos/powershell +12 -48
  28. data/lib/rouge/demos/reasonml +12 -0
  29. data/lib/rouge/demos/sas +13 -0
  30. data/lib/rouge/demos/sparql +6 -0
  31. data/lib/rouge/demos/terraform +0 -15
  32. data/lib/rouge/demos/xojo +2 -1
  33. data/lib/rouge/demos/xpath +2 -0
  34. data/lib/rouge/demos/xquery +22 -0
  35. data/lib/rouge/formatters/html.rb +18 -2
  36. data/lib/rouge/formatters/html_line_table.rb +53 -0
  37. data/lib/rouge/formatters/tex.rb +14 -12
  38. data/lib/rouge/guessers/disambiguation.rb +12 -0
  39. data/lib/rouge/guessers/modeline.rb +1 -1
  40. data/lib/rouge/lexers/ada.rb +162 -0
  41. data/lib/rouge/lexers/apache.rb +1 -1
  42. data/lib/rouge/lexers/armasm.rb +145 -0
  43. data/lib/rouge/lexers/batchfile.rb +164 -0
  44. data/lib/rouge/lexers/bbcbasic.rb +112 -0
  45. data/lib/rouge/lexers/bpf.rb +12 -12
  46. data/lib/rouge/lexers/ceylon.rb +5 -5
  47. data/lib/rouge/lexers/clean.rb +156 -0
  48. data/lib/rouge/lexers/cmhg.rb +34 -0
  49. data/lib/rouge/lexers/common_lisp.rb +1 -1
  50. data/lib/rouge/lexers/console.rb +1 -1
  51. data/lib/rouge/lexers/cpp.rb +4 -1
  52. data/lib/rouge/lexers/cuda.rb +35 -0
  53. data/lib/rouge/lexers/cython.rb +151 -0
  54. data/lib/rouge/lexers/docker.rb +2 -2
  55. data/lib/rouge/lexers/eex.rb +51 -0
  56. data/lib/rouge/lexers/elixir.rb +25 -11
  57. data/lib/rouge/lexers/elm.rb +1 -1
  58. data/lib/rouge/lexers/epp.rb +51 -0
  59. data/lib/rouge/lexers/escape.rb +3 -0
  60. data/lib/rouge/lexers/fsharp.rb +4 -4
  61. data/lib/rouge/lexers/gdscript.rb +171 -0
  62. data/lib/rouge/lexers/gherkin.rb +4 -2
  63. data/lib/rouge/lexers/glsl.rb +1 -1
  64. data/lib/rouge/lexers/graphql.rb +10 -3
  65. data/lib/rouge/lexers/handlebars.rb +14 -3
  66. data/lib/rouge/lexers/haxe.rb +246 -0
  67. data/lib/rouge/lexers/hocon.rb +86 -0
  68. data/lib/rouge/lexers/hql.rb +139 -0
  69. data/lib/rouge/lexers/html.rb +2 -2
  70. data/lib/rouge/lexers/http.rb +6 -6
  71. data/lib/rouge/lexers/idlang.rb +1 -1
  72. data/lib/rouge/lexers/igorpro.rb +1 -1
  73. data/lib/rouge/lexers/javascript.rb +1 -1
  74. data/lib/rouge/lexers/jsl.rb +55 -0
  75. data/lib/rouge/lexers/json.rb +44 -6
  76. data/lib/rouge/lexers/jsp.rb +3 -3
  77. data/lib/rouge/lexers/julia.rb +1 -1
  78. data/lib/rouge/lexers/liquid.rb +23 -0
  79. data/lib/rouge/lexers/lustre.rb +79 -0
  80. data/lib/rouge/lexers/lutin.rb +33 -0
  81. data/lib/rouge/lexers/magik.rb +2 -1
  82. data/lib/rouge/lexers/make.rb +44 -16
  83. data/lib/rouge/lexers/mason.rb +115 -0
  84. data/lib/rouge/lexers/matlab.rb +4 -2
  85. data/lib/rouge/lexers/matlab/builtins.yml +3515 -0
  86. data/lib/rouge/lexers/mosel.rb +43 -43
  87. data/lib/rouge/lexers/msgtrans.rb +26 -0
  88. data/lib/rouge/lexers/nim.rb +2 -1
  89. data/lib/rouge/lexers/nix.rb +1 -1
  90. data/lib/rouge/lexers/ocaml.rb +12 -48
  91. data/lib/rouge/lexers/ocaml/common.rb +53 -0
  92. data/lib/rouge/lexers/openedge.rb +429 -0
  93. data/lib/rouge/lexers/opentype_feature_file.rb +113 -0
  94. data/lib/rouge/lexers/perl.rb +12 -14
  95. data/lib/rouge/lexers/php.rb +31 -9
  96. data/lib/rouge/lexers/php/builtins.rb +181 -174
  97. data/lib/rouge/lexers/plain_text.rb +1 -1
  98. data/lib/rouge/lexers/powershell.rb +181 -635
  99. data/lib/rouge/lexers/puppet.rb +2 -2
  100. data/lib/rouge/lexers/q.rb +1 -1
  101. data/lib/rouge/lexers/r.rb +2 -3
  102. data/lib/rouge/lexers/reasonml.rb +65 -0
  103. data/lib/rouge/lexers/ruby.rb +2 -2
  104. data/lib/rouge/lexers/rust.rb +12 -9
  105. data/lib/rouge/lexers/sas.rb +563 -0
  106. data/lib/rouge/lexers/scala.rb +1 -1
  107. data/lib/rouge/lexers/sed.rb +1 -1
  108. data/lib/rouge/lexers/shell.rb +1 -1
  109. data/lib/rouge/lexers/smarty.rb +10 -10
  110. data/lib/rouge/lexers/sparql.rb +129 -0
  111. data/lib/rouge/lexers/sql.rb +26 -6
  112. data/lib/rouge/lexers/swift.rb +4 -4
  113. data/lib/rouge/lexers/terraform.rb +8 -0
  114. data/lib/rouge/lexers/tex.rb +1 -1
  115. data/lib/rouge/lexers/toml.rb +1 -1
  116. data/lib/rouge/lexers/vala.rb +1 -1
  117. data/lib/rouge/lexers/vhdl.rb +1 -1
  118. data/lib/rouge/lexers/wollok.rb +1 -1
  119. data/lib/rouge/lexers/xml.rb +1 -1
  120. data/lib/rouge/lexers/xojo.rb +4 -4
  121. data/lib/rouge/lexers/xpath.rb +332 -0
  122. data/lib/rouge/lexers/xquery.rb +145 -0
  123. data/lib/rouge/lexers/yaml.rb +5 -3
  124. data/lib/rouge/regex_lexer.rb +14 -13
  125. data/lib/rouge/tex_theme_renderer.rb +7 -3
  126. data/lib/rouge/themes/magritte.rb +3 -3
  127. data/lib/rouge/themes/monokai_sublime.rb +2 -1
  128. data/lib/rouge/themes/pastie.rb +1 -1
  129. data/lib/rouge/themes/thankful_eyes.rb +1 -1
  130. data/lib/rouge/themes/tulip.rb +1 -1
  131. data/lib/rouge/util.rb +2 -2
  132. data/lib/rouge/version.rb +1 -1
  133. data/rouge.gemspec +4 -3
  134. metadata +61 -5
  135. data/lib/rouge/lexers/matlab/builtins.rb +0 -13
@@ -27,7 +27,15 @@ module Rouge
27
27
  push :open_sym
28
28
  end
29
29
 
30
- rule(/(.+?)(?=\\|{{)/m) { delegate parent }
30
+ rule(/(.+?)(?=\\|{{)/m) do
31
+ delegate parent
32
+
33
+ # if parent state is attr, then we have an html attribute without quotes
34
+ # pop the parent state to return to the tag state
35
+ if parent.state?('attr')
36
+ parent.pop!
37
+ end
38
+ end
31
39
 
32
40
  # if we get here, there's no more mustache tags, so we eat
33
41
  # the rest of the doc
@@ -43,9 +51,12 @@ module Rouge
43
51
 
44
52
  state :stache do
45
53
  rule %r/}}}?/, Keyword, :pop!
54
+ rule %r/\|/, Punctuation
55
+ rule %r/~/, Keyword
46
56
  rule %r/\s+/m, Text
47
57
  rule %r/[=]/, Operator
48
58
  rule %r/[\[\]]/, Punctuation
59
+ rule %r/[\(\)]/, Punctuation
49
60
  rule %r/[.](?=[}\s])/, Name::Variable
50
61
  rule %r/[.][.]/, Name::Variable
51
62
  rule %r([/.]), Punctuation
@@ -65,7 +76,7 @@ module Rouge
65
76
  goto :block_name
66
77
  end
67
78
 
68
- rule %r/[>^&]/, Keyword
79
+ rule %r/[>^&~]/, Keyword
69
80
 
70
81
  rule(//) { pop! }
71
82
  end
@@ -77,4 +88,4 @@ module Rouge
77
88
  end
78
89
  end
79
90
  end
80
- end
91
+ end
@@ -0,0 +1,246 @@
1
+ # -*- coding: utf-8 -*- #
2
+
3
+ module Rouge
4
+ module Lexers
5
+ class Haxe < RegexLexer
6
+ title "Haxe"
7
+ desc "Haxe Cross-platform Toolkit (http://haxe.org)"
8
+
9
+ tag 'haxe'
10
+ aliases 'hx', 'haxe'
11
+ filenames '*.hx'
12
+ mimetypes 'text/haxe', 'text/x-haxe', 'text/x-hx'
13
+
14
+ def self.detect?(text)
15
+ return true if text.shebang? "haxe"
16
+ end
17
+
18
+ def self.keywords
19
+ @keywords ||= Set.new %w(
20
+ break case cast catch class continue default do else enum false for
21
+ function if import interface macro new null override package private
22
+ public return switch this throw true try untyped while
23
+ )
24
+ end
25
+
26
+ def self.imports
27
+ @imports ||= Set.new %w(
28
+ import using
29
+ )
30
+ end
31
+
32
+ def self.declarations
33
+ @declarations ||= Set.new %w(
34
+ abstract dynamic extern extends from implements inline static to
35
+ typedef var
36
+ )
37
+ end
38
+
39
+ def self.reserved
40
+ @reserved ||= Set.new %w(
41
+ super trace inline build autoBuild enum
42
+ )
43
+ end
44
+
45
+ def self.constants
46
+ @constants ||= Set.new %w(true false null)
47
+ end
48
+
49
+ def self.builtins
50
+ @builtins ||= %w(
51
+ Void Dynamic Math Class Any Float Int UInt String StringTools Sys
52
+ EReg isNaN parseFloat parseInt this Array Map Date DateTools Bool
53
+ Lambda Reflect Std File FileSystem
54
+ )
55
+ end
56
+
57
+ id = /[$a-zA-Z_][a-zA-Z0-9_]*/
58
+
59
+ state :comments_and_whitespace do
60
+ rule %r/\s+/, Text
61
+ rule %r(//.*?$), Comment::Single
62
+ rule %r(/\*.*?\*/)m, Comment::Multiline
63
+ end
64
+
65
+ state :expr_start do
66
+ mixin :comments_and_whitespace
67
+
68
+ rule %r/#(?:if|elseif|else|end).*/, Comment::Preproc
69
+
70
+ rule %r(~) do
71
+ token Str::Regex
72
+ goto :regex
73
+ end
74
+
75
+ rule %r/[{]/, Punctuation, :object
76
+
77
+ rule %r//, Text, :pop!
78
+ end
79
+
80
+ state :regex do
81
+ rule %r(/) do
82
+ token Str::Regex
83
+ goto :regex_end
84
+ end
85
+
86
+ rule %r([^/]\n), Error, :pop!
87
+
88
+ rule %r/\n/, Error, :pop!
89
+ rule %r/\[\^/, Str::Escape, :regex_group
90
+ rule %r/\[/, Str::Escape, :regex_group
91
+ rule %r/\\./, Str::Escape
92
+ rule %r{[(][?][:=<!]}, Str::Escape
93
+ rule %r/[{][\d,]+[}]/, Str::Escape
94
+ rule %r/[()?]/, Str::Escape
95
+ rule %r/./, Str::Regex
96
+ end
97
+
98
+ state :regex_end do
99
+ rule %r/[gim]+/, Str::Regex, :pop!
100
+ rule(//) { pop! }
101
+ end
102
+
103
+ state :regex_group do
104
+ # specially highlight / in a group to indicate that it doesn't
105
+ # close the regex
106
+ rule %r/\//, Str::Escape
107
+
108
+ rule %r([^/]\n) do
109
+ token Error
110
+ pop! 2
111
+ end
112
+
113
+ rule %r/\]/, Str::Escape, :pop!
114
+ rule %r/\\./, Str::Escape
115
+ rule %r/./, Str::Regex
116
+ end
117
+
118
+ state :bad_regex do
119
+ rule %r/[^\n]+/, Error, :pop!
120
+ end
121
+
122
+ state :root do
123
+ rule %r/\n/, Text, :statement
124
+ rule %r(\{), Punctuation, :expr_start
125
+
126
+ mixin :comments_and_whitespace
127
+
128
+ rule %r/@/, Name::Decorator, :metadata
129
+ rule %r(\+\+ | -- | ~ | && | \|\| | \\(?=\n) | << | >> | ==
130
+ | != )x,
131
+ Operator, :expr_start
132
+ rule %r([-:<>+*%&|\^/!=]=?), Operator, :expr_start
133
+ rule %r/[(\[,]/, Punctuation, :expr_start
134
+ rule %r/;/, Punctuation, :statement
135
+ rule %r/[)\]}.]/, Punctuation
136
+
137
+ rule %r/[?]/ do
138
+ token Punctuation
139
+ push :ternary
140
+ push :expr_start
141
+ end
142
+
143
+ rule id do |m|
144
+ if self.class.keywords.include? m[0]
145
+ token Keyword
146
+ push :expr_start
147
+ elsif self.class.imports.include? m[0]
148
+ token Keyword
149
+ push :namespace
150
+ elsif self.class.declarations.include? m[0]
151
+ token Keyword::Declaration
152
+ push :expr_start
153
+ elsif self.class.reserved.include? m[0]
154
+ token Keyword::Reserved
155
+ elsif self.class.constants.include? m[0]
156
+ token Keyword::Constant
157
+ elsif self.class.builtins.include? m[0]
158
+ token Name::Builtin
159
+ else
160
+ token Name::Other
161
+ end
162
+ end
163
+
164
+ rule %r/\-?\d+\.\d+(?:[eE]\d+)?[fd]?/, Num::Float
165
+ rule %r/0x\h+/, Num::Hex
166
+ rule %r/\-?[0-9]+/, Num::Integer
167
+ rule %r/"/, Str::Double, :str_double
168
+ rule %r/'/, Str::Single, :str_single
169
+ end
170
+
171
+ # braced parts that aren't object literals
172
+ state :statement do
173
+ rule %r/(#{id})(\s*)(:)/ do
174
+ groups Name::Label, Text, Punctuation
175
+ end
176
+
177
+ mixin :expr_start
178
+ end
179
+
180
+ # object literals
181
+ state :object do
182
+ mixin :comments_and_whitespace
183
+ rule %r/[}]/ do
184
+ token Punctuation
185
+ goto :statement
186
+ end
187
+
188
+ rule %r/(#{id})(\s*)(:)/ do
189
+ groups Name::Attribute, Text, Punctuation
190
+ push :expr_start
191
+ end
192
+
193
+ rule %r/:/, Punctuation
194
+ mixin :root
195
+ end
196
+
197
+ state :metadata do
198
+ rule %r/(#{id})(\()?/ do |m|
199
+ groups Name::Decorator, Punctuation
200
+ pop! unless m[2]
201
+ end
202
+ rule %r/:#{id}(?:\.#{id})*/, Name::Decorator, :pop!
203
+ rule %r/\)/, Name::Decorator, :pop!
204
+ mixin :root
205
+ end
206
+
207
+ # ternary expressions, where <id>: is not a label!
208
+ state :ternary do
209
+ rule %r/:/ do
210
+ token Punctuation
211
+ goto :expr_start
212
+ end
213
+
214
+ mixin :root
215
+ end
216
+
217
+ state :str_double do
218
+ mixin :str_escape
219
+ rule %r/"/, Str::Double, :pop!
220
+ rule %r/[^\\"]+/, Str::Double
221
+ end
222
+
223
+ state :str_single do
224
+ mixin :str_escape
225
+ rule %r/'/, Str::Single, :pop!
226
+ rule %r/\$\$/, Str::Single
227
+ rule %r/\$#{id}/, Str::Interpol
228
+ rule %r/\$\{/, Str::Interpol, :str_interpol
229
+ rule %r/[^\\$']+/, Str::Single
230
+ end
231
+
232
+ state :str_escape do
233
+ rule %r/\\[\\tnr'"]/, Str::Escape
234
+ rule %r/\\[0-7]{3}/, Str::Escape
235
+ rule %r/\\x\h{2}/, Str::Escape
236
+ rule %r/\\u\h{4}/, Str::Escape
237
+ rule %r/\\u\{\h{1,6}\}/, Str::Escape
238
+ end
239
+
240
+ state :str_interpol do
241
+ rule %r/\}/, Str::Interpol, :pop!
242
+ mixin :root
243
+ end
244
+ end
245
+ end
246
+ end
@@ -0,0 +1,86 @@
1
+ # -*- coding: utf-8 -*- #
2
+ # frozen_string_literal: true
3
+
4
+ module Rouge
5
+ module Lexers
6
+ load_lexer 'json.rb'
7
+
8
+ class HOCON < JSON
9
+ title 'HOCON'
10
+ desc "Human-Optimized Config Object Notation (https://github.com/lightbend/config)"
11
+ tag 'hocon'
12
+ filenames '*.hocon'
13
+
14
+ state :comments do
15
+ # Comments
16
+ rule %r(//.*?$), Comment::Single
17
+ rule %r(#.*?$), Comment::Single
18
+ end
19
+
20
+ prepend :root do
21
+ mixin :comments
22
+ end
23
+
24
+ prepend :object do
25
+ # Keywords
26
+ rule %r/\b(?:include|url|file|classpath)\b/, Keyword
27
+ end
28
+
29
+ state :name do
30
+ rule %r/("(?:\"|[^"\n])*?")(\s*)([:=]|(?={))/ do
31
+ groups Name::Label, Text::Whitespace, Punctuation
32
+ end
33
+
34
+ rule %r/([-\w.]+)(\s*)([:=]|(?={))/ do
35
+ groups Name::Label, Text::Whitespace, Punctuation
36
+ end
37
+ end
38
+
39
+ state :value do
40
+ mixin :comments
41
+
42
+ rule %r/\n/, Text::Whitespace
43
+ rule %r/\s+/, Text::Whitespace
44
+
45
+ mixin :constants
46
+
47
+ # Interpolation
48
+ rule %r/[$][{][?]?/, Literal::String::Interpol, :interpolation
49
+
50
+ # Strings
51
+ rule %r/"""/, Literal::String::Double, :multiline_string
52
+ rule %r/"/, Str::Double, :string
53
+
54
+ rule %r/\[/, Punctuation, :array
55
+ rule %r/{/, Punctuation, :object
56
+
57
+ # Symbols (only those not handled by JSON)
58
+ rule %r/[()=]/, Punctuation
59
+
60
+ # Values
61
+ rule %r/[^$"{}\[\]:=,\+#`^?!@*&]+?/, Literal
62
+ end
63
+
64
+ state :interpolation do
65
+ rule %r/[\w\-\.]+?/, Name::Variable
66
+ rule %r/}/, Literal::String::Interpol, :pop!
67
+ end
68
+
69
+ prepend :string do
70
+ rule %r/[$][{][?]?/, Literal::String::Interpol, :interpolation
71
+ rule %r/[^\\"\${]+/, Literal::String::Double
72
+ end
73
+
74
+ state :multiline_string do
75
+ rule %r/"[^"]{1,2}/, Literal::String::Double
76
+ mixin :string
77
+ rule %r/"""/, Literal::String::Double, :pop!
78
+ end
79
+
80
+ prepend :constants do
81
+ # Numbers (handle the case where we have multiple periods, ie. IP addresses)
82
+ rule %r/\d+\.(\d+\.?){3,}/, Literal
83
+ end
84
+ end
85
+ end
86
+ end
@@ -0,0 +1,139 @@
1
+ # -*- coding: utf-8 -*- #
2
+
3
+ module Rouge
4
+ module Lexers
5
+ load_lexer 'sql.rb'
6
+
7
+ class HQL < SQL
8
+ title "HQL"
9
+ desc "Hive Query Language SQL dialect"
10
+ tag 'hql'
11
+ filenames '*.hql'
12
+
13
+ def self.keywords
14
+ # sources:
15
+ # https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL
16
+ # https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF
17
+ @keywords ||= Set.new(%w(
18
+ ADD ADMIN AFTER ANALYZE ARCHIVE ASC BEFORE BUCKET BUCKETS CASCADE
19
+ CHANGE CLUSTER CLUSTERED CLUSTERSTATUS COLLECTION COLUMNS COMMENT
20
+ COMPACT COMPACTIONS COMPUTE CONCATENATE CONTINUE DATA DATABASES
21
+ DATETIME DAY DBPROPERTIES DEFERRED DEFINED DELIMITED DEPENDENCY DESC
22
+ DIRECTORIES DIRECTORY DISABLE DISTRIBUTE ELEM_TYPE ENABLE ESCAPED
23
+ EXCLUSIVE EXPLAIN EXPORT FIELDS FILE FILEFORMAT FIRST FORMAT FORMATTED
24
+ FUNCTIONS HOLD_DDLTIME HOUR IDXPROPERTIES IGNORE INDEX INDEXES INPATH
25
+ INPUTDRIVER INPUTFORMAT ITEMS JAR KEYS KEY_TYPE LIMIT LINES LOAD
26
+ LOCATION LOCK LOCKS LOGICAL LONG MAPJOIN MATERIALIZED METADATA MINUS
27
+ MINUTE MONTH MSCK NOSCAN NO_DROP OFFLINE OPTION OUTPUTDRIVER
28
+ OUTPUTFORMAT OVERWRITE OWNER PARTITIONED PARTITIONS PLUS PRETTY
29
+ PRINCIPALS PROTECTION PURGE READ READONLY REBUILD RECORDREADER
30
+ RECORDWRITER REGEXP RELOAD RENAME REPAIR REPLACE REPLICATION RESTRICT
31
+ REWRITE RLIKE ROLE ROLES SCHEMA SCHEMAS SECOND SEMI SERDE
32
+ SERDEPROPERTIES SERVER SETS SHARED SHOW SHOW_DATABASE SKEWED SORT
33
+ SORTED SSL STATISTICS STORED STREAMTABLE STRING STRUCT TABLES
34
+ TBLPROPERTIES TEMPORARY TERMINATED TINYINT TOUCH TRANSACTIONS UNARCHIVE
35
+ UNDO UNIONTYPE UNLOCK UNSET UNSIGNED URI USE UTC UTCTIMESTAMP
36
+ VALUE_TYPE VIEW WHILE YEAR IF
37
+
38
+ ALL ALTER AND ARRAY AS AUTHORIZATION BETWEEN BIGINT BINARY BOOLEAN
39
+ BOTH BY CASE CAST CHAR COLUMN CONF CREATE CROSS CUBE CURRENT
40
+ CURRENT_DATE CURRENT_TIMESTAMP CURSOR DATABASE DATE DECIMAL DELETE
41
+ DESCRIBE DISTINCT DOUBLE DROP ELSE END EXCHANGE EXISTS EXTENDED
42
+ EXTERNAL FALSE FETCH FLOAT FOLLOWING FOR FROM FULL FUNCTION GRANT
43
+ GROUP GROUPING HAVING IF IMPORT IN INNER INSERT INT INTERSECT
44
+ INTERVAL INTO IS JOIN LATERAL LEFT LESS LIKE LOCAL MACRO MAP MORE
45
+ NONE NOT NULL OF ON OR ORDER OUT OUTER OVER PARTIALSCAN PARTITION
46
+ PERCENT PRECEDING PRESERVE PROCEDURE RANGE READS REDUCE REVOKE RIGHT
47
+ ROLLUP ROW ROWS SELECT SET SMALLINT TABLE TABLESAMPLE THEN TIMESTAMP
48
+ TO TRANSFORM TRIGGER TRUE TRUNCATE UNBOUNDED UNION UNIQUEJOIN UPDATE
49
+ USER USING UTC_TMESTAMP VALUES VARCHAR WHEN WHERE WINDOW WITH
50
+
51
+ AUTOCOMMIT ISOLATION LEVEL OFFSET SNAPSHOT TRANSACTION WORK WRITE
52
+
53
+ COMMIT ONLY REGEXP RLIKE ROLLBACK START
54
+
55
+ ABORT KEY LAST NORELY NOVALIDATE NULLS RELY VALIDATE
56
+
57
+ CACHE CONSTRAINT FOREIGN PRIMARY REFERENCES
58
+
59
+ DETAIL DOW EXPRESSION OPERATOR QUARTER SUMMARY VECTORIZATION WEEK YEARS MONTHS WEEKS DAYS HOURS MINUTES SECONDS
60
+
61
+ DAYOFWEEK EXTRACT FLOOR INTEGER PRECISION VIEWS
62
+
63
+ TIMESTAMPTZ ZONE
64
+
65
+ TIME NUMERIC
66
+
67
+ NAMED_STRUCT CREATE_UNION
68
+
69
+ ROUND BROUND FLOOR CEIL CEILING RAND EXP LN LOG10 LOG2 LOG POW POWER SQRT BIN
70
+ HEX UNHEX CONV ABS PMOD SIN ASIN COS ACOS TAN ATAN DEGREES RADIANS POSITIVE
71
+ NEGATIVE SIGN E PI FACTORIAL CBRT SHIFTLEFT SHIFTRIGHT SHIFTRIGHTUNSIGNED
72
+ GREATEST LEAST WIDTH_BUCKET SIZE SIZE MAP_KEYS MAP_VALUES ARRAY_CONTAINS
73
+ SORT_ARRAY BINARY CAST FROM_UNIXTIME UNIX_TIMESTAMP UNIX_TIMESTAMP
74
+ UNIX_TIMESTAMP TO_DATE YEAR QUARTER MONTH DAY DAYOFMONTH HOUR MINUTE SECOND
75
+ WEEKOFYEAR EXTRACT DATEDIFF DATE_ADD DATE_SUB FROM_UTC_TIMESTAMP
76
+ TO_UTC_TIMESTAMP CURRENT_DATE CURRENT_TIMESTAMP ADD_MONTHS LAST_DAY NEXT_DAY
77
+ TRUNC MONTHS_BETWEEN DATE_FORMAT IF ISNULL ISNOTNULL NVL COALESCE CASE WHEN
78
+ then else end NULLIF ASSERT_TRUE ASCII BASE64 CHARACTER_LENGTH CHR CONCAT
79
+ CONTEXT_NGRAMS CONCAT_WS CONCAT_WS DECODE ELT ENCODE FIELD FIND_IN_SET
80
+ FORMAT_NUMBER GET_JSON_OBJECT IN_FILE INSTR LENGTH LOCATE LOWER LCASE LPAD LTRIM
81
+ NGRAMS OCTET_LENGTH PARSE_URL PRINTF REGEXP_EXTRACT REGEXP_REPLACE REPEAT
82
+ REPLACE REVERSE RPAD RTRIM SENTENCES SPACE SPLIT STR_TO_MAP SUBSTR SUBSTRING
83
+ SUBSTRING_INDEX TRANSLATE TRIM UNBASE64 UPPER UCASE INITCAP LEVENSHTEIN SOUNDEX
84
+ MASK MASK_FIRST_N MASK_LAST_N MASK_SHOW_FIRST_N MASK_SHOW_LAST_N MASK_HASH
85
+ JAVA_METHOD REFLECT HASH CURRENT_USER LOGGED_IN_USER CURRENT_DATABASE MD5 SHA1
86
+ SHA CRC32 SHA2 AES_ENCRYPT AES_DECRYPT VERSION COUNT SUM AVG MIN MAX VARIANCE
87
+ VAR_POP VAR_SAMP STDDEV_POP STDDEV_SAMP COVAR_POP COVAR_SAMP CORR PERCENTILE
88
+ PERCENTILE_APPROX PERCENTILE_APPROX REGR_AVGX REGR_AVGY REGR_COUNT
89
+ REGR_INTERCEPT REGR_R2 REGR_SLOPE REGR_SXX REGR_SXY REGR_SYY HISTOGRAM_NUMERIC
90
+ COLLECT_SET COLLECT_LIST NTILE EXPLODE EXPLODE POSEXPLODE INLINE STACK
91
+
92
+ JSON_TUPLE PARSE_URL_TUPLE
93
+
94
+ XPATH XPATH_SHORT XPATH_INT XPATH_LONG XPATH_FLOAT XPATH_DOUBLE
95
+ XPATH_NUMBER XPATH_STRING GET_JSON_OBJECT JSON_TUPLE
96
+
97
+ PARSE_URL_TUPLE
98
+ ))
99
+ end
100
+
101
+ def self.keywords_type
102
+ # source: https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Types
103
+ @keywords_type ||= Set.new(%w(
104
+ TINYINT SMALLINT INT INTEGER BIGINT FLOAT DOUBLE PRECISION DECIMAL NUMERIC
105
+ TIMESTAMP DATE INTERVAL
106
+ STRING VARCHAR CHAR
107
+ BOOLEAN BINARY
108
+ ARRAY MAP STRUCT UNIONTYPE
109
+ ))
110
+ end
111
+
112
+ prepend :root do
113
+ # a double-quoted string is a string literal in Hive QL.
114
+ rule %r/"/, Str::Double, :double_string
115
+
116
+ # interpolation of variables through ${...}
117
+ rule %r/\$\{/, Name::Variable, :hive_variable
118
+ end
119
+
120
+ prepend :single_string do
121
+ rule %r/\$\{/, Name::Variable, :hive_variable
122
+ rule %r/[^\\'\$]+/, Str::Single
123
+ end
124
+
125
+ prepend :double_string do
126
+ rule %r/\$\{/, Name::Variable, :hive_variable
127
+ # double-quoted strings are string literals so need to change token
128
+ rule %r/"/, Str::Double, :pop!
129
+ rule %r/[^\\"\$]+/, Str::Double
130
+ end
131
+
132
+ state :hive_variable do
133
+ rule %r/\}/, Name::Variable, :pop!
134
+ rule %r/[^\}]+/, Name::Variable
135
+ end
136
+
137
+ end
138
+ end
139
+ end