rouge 3.0.0 → 3.18.0

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.
Files changed (320) hide show
  1. checksums.yaml +5 -5
  2. data/Gemfile +17 -3
  3. data/bin/rougify +1 -0
  4. data/lib/rouge.rb +67 -42
  5. data/lib/rouge/cli.rb +87 -18
  6. data/lib/rouge/demos/ada +26 -0
  7. data/lib/rouge/demos/apex +9 -0
  8. data/lib/rouge/demos/armasm +12 -0
  9. data/lib/rouge/demos/batchfile +3 -0
  10. data/lib/rouge/demos/bbcbasic +6 -0
  11. data/lib/rouge/demos/bpf +7 -0
  12. data/lib/rouge/demos/brainfuck +5 -0
  13. data/lib/rouge/demos/clean +6 -0
  14. data/lib/rouge/demos/cmhg +8 -0
  15. data/lib/rouge/demos/crystal +45 -0
  16. data/lib/rouge/demos/csvs +8 -0
  17. data/lib/rouge/demos/cuda +11 -0
  18. data/lib/rouge/demos/cypher +5 -0
  19. data/lib/rouge/demos/cython +6 -0
  20. data/lib/rouge/demos/datastudio +21 -0
  21. data/lib/rouge/demos/ecl +18 -0
  22. data/lib/rouge/demos/eex +1 -0
  23. data/lib/rouge/demos/elm +4 -0
  24. data/lib/rouge/demos/epp +4 -0
  25. data/lib/rouge/demos/escape +3 -0
  26. data/lib/rouge/demos/freefem +16 -0
  27. data/lib/rouge/demos/gdscript +18 -0
  28. data/lib/rouge/demos/ghc-cmm +23 -0
  29. data/lib/rouge/demos/ghc-core +26 -0
  30. data/lib/rouge/demos/hack +5 -0
  31. data/lib/rouge/demos/haxe +5 -0
  32. data/lib/rouge/demos/hcl +7 -0
  33. data/lib/rouge/demos/hocon +8 -0
  34. data/lib/rouge/demos/hql +5 -0
  35. data/lib/rouge/demos/isbl +4 -0
  36. data/lib/rouge/demos/jsl +3 -0
  37. data/lib/rouge/demos/jsp +29 -0
  38. data/lib/rouge/demos/liquid +0 -1
  39. data/lib/rouge/demos/lustre +6 -0
  40. data/lib/rouge/demos/lutin +18 -0
  41. data/lib/rouge/demos/m68k +16 -0
  42. data/lib/rouge/demos/magik +6 -0
  43. data/lib/rouge/demos/mason +22 -0
  44. data/lib/rouge/demos/mathematica +8 -0
  45. data/lib/rouge/demos/minizinc +23 -0
  46. data/lib/rouge/demos/msgtrans +4 -0
  47. data/lib/rouge/demos/nasm +6 -6
  48. data/lib/rouge/demos/nesasm +11 -0
  49. data/lib/rouge/demos/objective_cpp +17 -0
  50. data/lib/rouge/demos/openedge +4 -0
  51. data/lib/rouge/demos/opentype_feature_file +6 -0
  52. data/lib/rouge/demos/plist +1 -132
  53. data/lib/rouge/demos/powershell +12 -48
  54. data/lib/rouge/demos/q +6 -0
  55. data/lib/rouge/demos/reasonml +12 -0
  56. data/lib/rouge/demos/rego +8 -0
  57. data/lib/rouge/demos/robot_framework +27 -0
  58. data/lib/rouge/demos/sas +13 -0
  59. data/lib/rouge/demos/slice +10 -0
  60. data/lib/rouge/demos/solidity +13 -0
  61. data/lib/rouge/demos/sparql +6 -0
  62. data/lib/rouge/demos/sqf +14 -0
  63. data/lib/rouge/demos/supercollider +11 -0
  64. data/lib/rouge/demos/terraform +16 -0
  65. data/lib/rouge/demos/ttcn3 +6 -0
  66. data/lib/rouge/demos/vcl +12 -0
  67. data/lib/rouge/demos/xojo +14 -0
  68. data/lib/rouge/demos/xpath +2 -0
  69. data/lib/rouge/demos/xquery +22 -0
  70. data/lib/rouge/demos/yang +17 -0
  71. data/lib/rouge/formatter.rb +39 -2
  72. data/lib/rouge/formatters/html.rb +21 -2
  73. data/lib/rouge/formatters/html_inline.rb +1 -0
  74. data/lib/rouge/formatters/html_legacy.rb +1 -0
  75. data/lib/rouge/formatters/html_line_table.rb +53 -0
  76. data/lib/rouge/formatters/html_linewise.rb +7 -11
  77. data/lib/rouge/formatters/html_pygments.rb +2 -0
  78. data/lib/rouge/formatters/html_table.rb +21 -31
  79. data/lib/rouge/formatters/null.rb +1 -0
  80. data/lib/rouge/formatters/terminal256.rb +23 -5
  81. data/lib/rouge/formatters/terminal_truecolor.rb +37 -0
  82. data/lib/rouge/formatters/tex.rb +92 -0
  83. data/lib/rouge/guesser.rb +2 -0
  84. data/lib/rouge/guessers/disambiguation.rb +48 -0
  85. data/lib/rouge/guessers/filename.rb +2 -0
  86. data/lib/rouge/guessers/glob_mapping.rb +3 -1
  87. data/lib/rouge/guessers/mimetype.rb +2 -0
  88. data/lib/rouge/guessers/modeline.rb +3 -1
  89. data/lib/rouge/guessers/source.rb +3 -1
  90. data/lib/rouge/guessers/util.rb +2 -0
  91. data/lib/rouge/lexer.rb +71 -15
  92. data/lib/rouge/lexers/abap.rb +13 -11
  93. data/lib/rouge/lexers/actionscript.rb +35 -34
  94. data/lib/rouge/lexers/ada.rb +162 -0
  95. data/lib/rouge/lexers/apache.rb +13 -15
  96. data/lib/rouge/lexers/apache/keywords.rb +15 -0
  97. data/lib/rouge/lexers/apex.rb +126 -0
  98. data/lib/rouge/lexers/apiblueprint.rb +2 -0
  99. data/lib/rouge/lexers/apple_script.rb +17 -14
  100. data/lib/rouge/lexers/armasm.rb +145 -0
  101. data/lib/rouge/lexers/awk.rb +26 -25
  102. data/lib/rouge/lexers/batchfile.rb +164 -0
  103. data/lib/rouge/lexers/bbcbasic.rb +112 -0
  104. data/lib/rouge/lexers/biml.rb +6 -4
  105. data/lib/rouge/lexers/bpf.rb +118 -0
  106. data/lib/rouge/lexers/brainfuck.rb +53 -0
  107. data/lib/rouge/lexers/bsl.rb +13 -12
  108. data/lib/rouge/lexers/c.rb +36 -58
  109. data/lib/rouge/lexers/ceylon.rb +7 -34
  110. data/lib/rouge/lexers/cfscript.rb +27 -26
  111. data/lib/rouge/lexers/clean.rb +156 -0
  112. data/lib/rouge/lexers/clojure.rb +15 -14
  113. data/lib/rouge/lexers/cmake.rb +16 -14
  114. data/lib/rouge/lexers/cmhg.rb +34 -0
  115. data/lib/rouge/lexers/coffeescript.rb +90 -49
  116. data/lib/rouge/lexers/common_lisp.rb +39 -38
  117. data/lib/rouge/lexers/conf.rb +7 -6
  118. data/lib/rouge/lexers/console.rb +92 -38
  119. data/lib/rouge/lexers/coq.rb +27 -23
  120. data/lib/rouge/lexers/cpp.rb +24 -13
  121. data/lib/rouge/lexers/crystal.rb +430 -0
  122. data/lib/rouge/lexers/csharp.rb +29 -29
  123. data/lib/rouge/lexers/css.rb +24 -23
  124. data/lib/rouge/lexers/csvs.rb +44 -0
  125. data/lib/rouge/lexers/cuda.rb +35 -0
  126. data/lib/rouge/lexers/cypher.rb +108 -0
  127. data/lib/rouge/lexers/cython.rb +151 -0
  128. data/lib/rouge/lexers/d.rb +64 -63
  129. data/lib/rouge/lexers/dart.rb +34 -33
  130. data/lib/rouge/lexers/datastudio.rb +138 -0
  131. data/lib/rouge/lexers/diff.rb +10 -4
  132. data/lib/rouge/lexers/digdag.rb +3 -1
  133. data/lib/rouge/lexers/docker.rb +12 -11
  134. data/lib/rouge/lexers/dot.rb +19 -18
  135. data/lib/rouge/lexers/ecl.rb +175 -0
  136. data/lib/rouge/lexers/eex.rb +52 -0
  137. data/lib/rouge/lexers/eiffel.rb +21 -20
  138. data/lib/rouge/lexers/elixir.rb +52 -36
  139. data/lib/rouge/lexers/elm.rb +90 -0
  140. data/lib/rouge/lexers/epp.rb +51 -0
  141. data/lib/rouge/lexers/erb.rb +5 -4
  142. data/lib/rouge/lexers/erlang.rb +1 -0
  143. data/lib/rouge/lexers/escape.rb +58 -0
  144. data/lib/rouge/lexers/factor.rb +41 -40
  145. data/lib/rouge/lexers/fortran.rb +36 -34
  146. data/lib/rouge/lexers/freefem.rb +240 -0
  147. data/lib/rouge/lexers/fsharp.rb +34 -32
  148. data/lib/rouge/lexers/gdscript.rb +171 -0
  149. data/lib/rouge/lexers/ghc_cmm.rb +340 -0
  150. data/lib/rouge/lexers/ghc_core.rb +151 -0
  151. data/lib/rouge/lexers/gherkin.rb +17 -14
  152. data/lib/rouge/lexers/gherkin/keywords.rb +2 -0
  153. data/lib/rouge/lexers/glsl.rb +2 -5
  154. data/lib/rouge/lexers/go.rb +3 -2
  155. data/lib/rouge/lexers/gradle.rb +1 -0
  156. data/lib/rouge/lexers/graphql.rb +78 -60
  157. data/lib/rouge/lexers/groovy.rb +24 -25
  158. data/lib/rouge/lexers/hack.rb +49 -0
  159. data/lib/rouge/lexers/haml.rb +26 -29
  160. data/lib/rouge/lexers/handlebars.rb +32 -20
  161. data/lib/rouge/lexers/haskell.rb +78 -62
  162. data/lib/rouge/lexers/haxe.rb +246 -0
  163. data/lib/rouge/lexers/hcl.rb +163 -0
  164. data/lib/rouge/lexers/hocon.rb +86 -0
  165. data/lib/rouge/lexers/hql.rb +139 -0
  166. data/lib/rouge/lexers/html.rb +36 -33
  167. data/lib/rouge/lexers/http.rb +10 -9
  168. data/lib/rouge/lexers/hylang.rb +15 -14
  169. data/lib/rouge/lexers/idlang.rb +34 -32
  170. data/lib/rouge/lexers/igorpro.rb +481 -225
  171. data/lib/rouge/lexers/ini.rb +13 -12
  172. data/lib/rouge/lexers/io.rb +10 -9
  173. data/lib/rouge/lexers/irb.rb +6 -5
  174. data/lib/rouge/lexers/isbl.rb +97 -0
  175. data/lib/rouge/lexers/isbl/builtins.rb +17 -0
  176. data/lib/rouge/lexers/java.rb +30 -26
  177. data/lib/rouge/lexers/javascript.rb +59 -61
  178. data/lib/rouge/lexers/jinja.rb +39 -22
  179. data/lib/rouge/lexers/jsl.rb +55 -0
  180. data/lib/rouge/lexers/json.rb +54 -11
  181. data/lib/rouge/lexers/json_doc.rb +8 -5
  182. data/lib/rouge/lexers/jsonnet.rb +19 -18
  183. data/lib/rouge/lexers/jsp.rb +120 -0
  184. data/lib/rouge/lexers/jsx.rb +18 -16
  185. data/lib/rouge/lexers/julia.rb +192 -74
  186. data/lib/rouge/lexers/kotlin.rb +79 -27
  187. data/lib/rouge/lexers/lasso.rb +54 -58
  188. data/lib/rouge/lexers/lasso/keywords.rb +14 -0
  189. data/lib/rouge/lexers/liquid.rb +116 -118
  190. data/lib/rouge/lexers/literate_coffeescript.rb +3 -2
  191. data/lib/rouge/lexers/literate_haskell.rb +6 -5
  192. data/lib/rouge/lexers/llvm.rb +66 -49
  193. data/lib/rouge/lexers/lua.rb +43 -4
  194. data/lib/rouge/lexers/lua/builtins.rb +2 -0
  195. data/lib/rouge/lexers/lustre.rb +79 -0
  196. data/lib/rouge/lexers/lutin.rb +33 -0
  197. data/lib/rouge/lexers/m68k.rb +143 -0
  198. data/lib/rouge/lexers/magik.rb +127 -0
  199. data/lib/rouge/lexers/make.rb +57 -34
  200. data/lib/rouge/lexers/markdown.rb +67 -39
  201. data/lib/rouge/lexers/mason.rb +110 -0
  202. data/lib/rouge/lexers/mathematica.rb +96 -0
  203. data/lib/rouge/lexers/mathematica/builtins.rb +13 -0
  204. data/lib/rouge/lexers/matlab.rb +26 -17
  205. data/lib/rouge/lexers/matlab/builtins.rb +4 -4
  206. data/lib/rouge/lexers/minizinc.rb +87 -0
  207. data/lib/rouge/lexers/moonscript.rb +4 -3
  208. data/lib/rouge/lexers/mosel.rb +64 -63
  209. data/lib/rouge/lexers/msgtrans.rb +26 -0
  210. data/lib/rouge/lexers/mxml.rb +19 -18
  211. data/lib/rouge/lexers/nasm.rb +43 -169
  212. data/lib/rouge/lexers/nesasm.rb +78 -0
  213. data/lib/rouge/lexers/nginx.rb +15 -14
  214. data/lib/rouge/lexers/nim.rb +4 -2
  215. data/lib/rouge/lexers/nix.rb +48 -42
  216. data/lib/rouge/lexers/objective_c.rb +5 -178
  217. data/lib/rouge/lexers/objective_c/common.rb +184 -0
  218. data/lib/rouge/lexers/objective_cpp.rb +31 -0
  219. data/lib/rouge/lexers/ocaml.rb +29 -64
  220. data/lib/rouge/lexers/ocaml/common.rb +53 -0
  221. data/lib/rouge/lexers/openedge.rb +429 -0
  222. data/lib/rouge/lexers/opentype_feature_file.rb +113 -0
  223. data/lib/rouge/lexers/pascal.rb +6 -5
  224. data/lib/rouge/lexers/perl.rb +103 -68
  225. data/lib/rouge/lexers/php.rb +94 -54
  226. data/lib/rouge/lexers/php/builtins.rb +183 -174
  227. data/lib/rouge/lexers/plain_text.rb +2 -1
  228. data/lib/rouge/lexers/plist.rb +16 -14
  229. data/lib/rouge/lexers/pony.rb +21 -20
  230. data/lib/rouge/lexers/powershell.rb +191 -639
  231. data/lib/rouge/lexers/praat.rb +76 -75
  232. data/lib/rouge/lexers/prolog.rb +27 -19
  233. data/lib/rouge/lexers/prometheus.rb +32 -30
  234. data/lib/rouge/lexers/properties.rb +13 -12
  235. data/lib/rouge/lexers/protobuf.rb +23 -22
  236. data/lib/rouge/lexers/puppet.rb +33 -32
  237. data/lib/rouge/lexers/python.rb +124 -98
  238. data/lib/rouge/lexers/q.rb +17 -14
  239. data/lib/rouge/lexers/qml.rb +13 -12
  240. data/lib/rouge/lexers/r.rb +13 -13
  241. data/lib/rouge/lexers/racket.rb +47 -22
  242. data/lib/rouge/lexers/reasonml.rb +65 -0
  243. data/lib/rouge/lexers/rego.rb +45 -0
  244. data/lib/rouge/lexers/robot_framework.rb +249 -0
  245. data/lib/rouge/lexers/ruby.rb +88 -71
  246. data/lib/rouge/lexers/rust.rb +47 -46
  247. data/lib/rouge/lexers/sas.rb +563 -0
  248. data/lib/rouge/lexers/sass.rb +11 -10
  249. data/lib/rouge/lexers/sass/common.rb +41 -40
  250. data/lib/rouge/lexers/scala.rb +67 -40
  251. data/lib/rouge/lexers/scheme.rb +19 -18
  252. data/lib/rouge/lexers/scss.rb +6 -5
  253. data/lib/rouge/lexers/sed.rb +31 -30
  254. data/lib/rouge/lexers/shell.rb +83 -62
  255. data/lib/rouge/lexers/sieve.rb +10 -9
  256. data/lib/rouge/lexers/slice.rb +32 -0
  257. data/lib/rouge/lexers/slim.rb +27 -26
  258. data/lib/rouge/lexers/smalltalk.rb +34 -33
  259. data/lib/rouge/lexers/smarty.rb +20 -19
  260. data/lib/rouge/lexers/sml.rb +68 -67
  261. data/lib/rouge/lexers/solidity.rb +185 -0
  262. data/lib/rouge/lexers/sparql.rb +129 -0
  263. data/lib/rouge/lexers/sqf.rb +109 -0
  264. data/lib/rouge/lexers/sqf/commands.rb +15 -0
  265. data/lib/rouge/lexers/sql.rb +47 -26
  266. data/lib/rouge/lexers/supercollider.rb +116 -0
  267. data/lib/rouge/lexers/swift.rb +63 -38
  268. data/lib/rouge/lexers/tap.rb +22 -20
  269. data/lib/rouge/lexers/tcl.rb +28 -27
  270. data/lib/rouge/lexers/terraform.rb +128 -0
  271. data/lib/rouge/lexers/tex.rb +20 -19
  272. data/lib/rouge/lexers/toml.rb +59 -20
  273. data/lib/rouge/lexers/tsx.rb +1 -0
  274. data/lib/rouge/lexers/ttcn3.rb +119 -0
  275. data/lib/rouge/lexers/tulip.rb +38 -36
  276. data/lib/rouge/lexers/turtle.rb +36 -38
  277. data/lib/rouge/lexers/twig.rb +1 -0
  278. data/lib/rouge/lexers/typescript.rb +12 -0
  279. data/lib/rouge/lexers/typescript/common.rb +1 -0
  280. data/lib/rouge/lexers/vala.rb +19 -18
  281. data/lib/rouge/lexers/varnish.rb +168 -0
  282. data/lib/rouge/lexers/vb.rb +28 -27
  283. data/lib/rouge/lexers/verilog.rb +27 -28
  284. data/lib/rouge/lexers/vhdl.rb +13 -12
  285. data/lib/rouge/lexers/viml.rb +15 -14
  286. data/lib/rouge/lexers/viml/keywords.rb +2 -0
  287. data/lib/rouge/lexers/vue.rb +19 -12
  288. data/lib/rouge/lexers/wollok.rb +27 -26
  289. data/lib/rouge/lexers/xml.rb +18 -21
  290. data/lib/rouge/lexers/xojo.rb +61 -0
  291. data/lib/rouge/lexers/xpath.rb +332 -0
  292. data/lib/rouge/lexers/xquery.rb +145 -0
  293. data/lib/rouge/lexers/yaml.rb +64 -61
  294. data/lib/rouge/lexers/yang.rb +147 -0
  295. data/lib/rouge/plugins/redcarpet.rb +9 -2
  296. data/lib/rouge/regex_lexer.rb +27 -25
  297. data/lib/rouge/template_lexer.rb +1 -0
  298. data/lib/rouge/tex_theme_renderer.rb +132 -0
  299. data/lib/rouge/text_analyzer.rb +1 -0
  300. data/lib/rouge/theme.rb +5 -0
  301. data/lib/rouge/themes/base16.rb +1 -0
  302. data/lib/rouge/themes/bw.rb +41 -0
  303. data/lib/rouge/themes/colorful.rb +1 -0
  304. data/lib/rouge/themes/github.rb +1 -0
  305. data/lib/rouge/themes/gruvbox.rb +1 -0
  306. data/lib/rouge/themes/igor_pro.rb +1 -0
  307. data/lib/rouge/themes/magritte.rb +78 -0
  308. data/lib/rouge/themes/molokai.rb +1 -0
  309. data/lib/rouge/themes/monokai.rb +1 -0
  310. data/lib/rouge/themes/monokai_sublime.rb +4 -1
  311. data/lib/rouge/themes/pastie.rb +2 -1
  312. data/lib/rouge/themes/thankful_eyes.rb +2 -1
  313. data/lib/rouge/themes/tulip.rb +2 -1
  314. data/lib/rouge/token.rb +31 -22
  315. data/lib/rouge/util.rb +3 -2
  316. data/lib/rouge/version.rb +2 -1
  317. data/rouge.gemspec +8 -1
  318. metadata +141 -7
  319. data/lib/rouge/lexers/apache/keywords.yml +0 -764
  320. data/lib/rouge/lexers/lasso/keywords.yml +0 -446
@@ -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,163 @@
1
+ # -*- coding: utf-8 -*- #
2
+ # frozen_string_literal: true
3
+
4
+ module Rouge
5
+ module Lexers
6
+ class Hcl < RegexLexer
7
+ tag 'hcl'
8
+
9
+ title 'Hashicorp Configuration Language'
10
+ desc 'Hashicorp Configuration Language, used by Terraform and other Hashicorp tools'
11
+
12
+ state :multiline_comment do
13
+ rule %r([*]/), Comment::Multiline, :pop!
14
+ rule %r([^*/]+), Comment::Multiline
15
+ rule %r([*/]), Comment::Multiline
16
+ end
17
+
18
+ state :comments_and_whitespace do
19
+ rule %r/\s+/, Text
20
+ rule %r(//.*?$), Comment::Single
21
+ rule %r(#.*?$), Comment::Single
22
+ rule %r(/[*]), Comment::Multiline, :multiline_comment
23
+ end
24
+
25
+ state :primitives do
26
+ rule %r/[0-9][0-9]*\.[0-9]+([eE][0-9]+)?[fd]?([kKmMgG]b?)?/, Num::Float
27
+ rule %r/[0-9]+([kKmMgG]b?)?/, Num::Integer
28
+
29
+ rule %r/"/, Str::Double, :dq
30
+ rule %r/'/, Str::Single, :sq
31
+ rule %r/(<<-?)(\s*)(\'?)(\\?)(\w+)(\3)/ do |m|
32
+ groups Operator, Text, Str::Heredoc, Str::Heredoc, Name::Constant, Str::Heredoc
33
+ @heredocstr = Regexp.escape(m[5])
34
+ push :heredoc
35
+ end
36
+ end
37
+
38
+ def self.keywords
39
+ @keywords ||= Set.new %w()
40
+ end
41
+
42
+ def self.declarations
43
+ @declarations ||= Set.new %w()
44
+ end
45
+
46
+ def self.reserved
47
+ @reserved ||= Set.new %w()
48
+ end
49
+
50
+ def self.constants
51
+ @constants ||= Set.new %w(true false null)
52
+ end
53
+
54
+ def self.builtins
55
+ @builtins ||= %w()
56
+ end
57
+
58
+ id = /[$a-z_][a-z0-9_]*/io
59
+
60
+ state :root do
61
+ mixin :comments_and_whitespace
62
+ mixin :primitives
63
+
64
+ rule %r/\{/ do
65
+ token Punctuation
66
+ push :hash
67
+ end
68
+ rule %r/\[/ do
69
+ token Punctuation
70
+ push :array
71
+ end
72
+
73
+ rule id do |m|
74
+ if self.class.keywords.include? m[0]
75
+ token Keyword
76
+ push :composite
77
+ elsif self.class.declarations.include? m[0]
78
+ token Keyword::Declaration
79
+ push :composite
80
+ elsif self.class.reserved.include? m[0]
81
+ token Keyword::Reserved
82
+ elsif self.class.constants.include? m[0]
83
+ token Keyword::Constant
84
+ elsif self.class.builtins.include? m[0]
85
+ token Name::Builtin
86
+ else
87
+ token Name::Other
88
+ push :composite
89
+ end
90
+ end
91
+ end
92
+
93
+ state :composite do
94
+ mixin :comments_and_whitespace
95
+
96
+ rule %r/[{]/ do
97
+ token Punctuation
98
+ pop!
99
+ push :hash
100
+ end
101
+
102
+ rule %r/[\[]/ do
103
+ token Punctuation
104
+ pop!
105
+ push :array
106
+ end
107
+
108
+ mixin :root
109
+
110
+ rule %r//, Text, :pop!
111
+ end
112
+
113
+ state :hash do
114
+ mixin :comments_and_whitespace
115
+
116
+ rule %r/\=/, Punctuation
117
+ rule %r/\}/, Punctuation, :pop!
118
+
119
+ mixin :root
120
+ end
121
+
122
+ state :array do
123
+ mixin :comments_and_whitespace
124
+
125
+ rule %r/,/, Punctuation
126
+ rule %r/\]/, Punctuation, :pop!
127
+
128
+ mixin :root
129
+ end
130
+
131
+ state :dq do
132
+ rule %r/[^\\"]+/, Str::Double
133
+ rule %r/\\"/, Str::Escape
134
+ rule %r/"/, Str::Double, :pop!
135
+ end
136
+
137
+ state :sq do
138
+ rule %r/[^\\']+/, Str::Single
139
+ rule %r/\\'/, Str::Escape
140
+ rule %r/'/, Str::Single, :pop!
141
+ end
142
+
143
+ state :heredoc do
144
+ rule %r/\n/, Str::Heredoc, :heredoc_nl
145
+ rule %r/[^$\n]+/, Str::Heredoc
146
+ rule %r/[$]/, Str::Heredoc
147
+ end
148
+
149
+ state :heredoc_nl do
150
+ rule %r/\s*(\w+)\s*\n/ do |m|
151
+ if m[1] == @heredocstr
152
+ token Name::Constant
153
+ pop! 2
154
+ else
155
+ token Str::Heredoc
156
+ end
157
+ end
158
+
159
+ rule(//) { pop! }
160
+ end
161
+ end
162
+ end
163
+ 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