rouge 3.2.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 (316) hide show
  1. checksums.yaml +5 -5
  2. data/Gemfile +17 -3
  3. data/bin/rougify +1 -0
  4. data/lib/rouge.rb +67 -43
  5. data/lib/rouge/cli.rb +84 -17
  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/csvs +8 -0
  16. data/lib/rouge/demos/cuda +11 -0
  17. data/lib/rouge/demos/cypher +5 -0
  18. data/lib/rouge/demos/cython +6 -0
  19. data/lib/rouge/demos/datastudio +21 -0
  20. data/lib/rouge/demos/ecl +18 -0
  21. data/lib/rouge/demos/eex +1 -0
  22. data/lib/rouge/demos/epp +4 -0
  23. data/lib/rouge/demos/escape +3 -0
  24. data/lib/rouge/demos/freefem +16 -0
  25. data/lib/rouge/demos/gdscript +18 -0
  26. data/lib/rouge/demos/ghc-cmm +23 -0
  27. data/lib/rouge/demos/ghc-core +26 -0
  28. data/lib/rouge/demos/haxe +5 -0
  29. data/lib/rouge/demos/hocon +8 -0
  30. data/lib/rouge/demos/hql +5 -0
  31. data/lib/rouge/demos/isbl +4 -0
  32. data/lib/rouge/demos/jsl +3 -0
  33. data/lib/rouge/demos/jsp +29 -0
  34. data/lib/rouge/demos/liquid +0 -1
  35. data/lib/rouge/demos/lustre +6 -0
  36. data/lib/rouge/demos/lutin +18 -0
  37. data/lib/rouge/demos/m68k +16 -0
  38. data/lib/rouge/demos/magik +6 -0
  39. data/lib/rouge/demos/mason +22 -0
  40. data/lib/rouge/demos/mathematica +8 -0
  41. data/lib/rouge/demos/minizinc +23 -0
  42. data/lib/rouge/demos/msgtrans +4 -0
  43. data/lib/rouge/demos/nasm +6 -6
  44. data/lib/rouge/demos/nesasm +11 -0
  45. data/lib/rouge/demos/objective_cpp +17 -0
  46. data/lib/rouge/demos/openedge +4 -0
  47. data/lib/rouge/demos/opentype_feature_file +6 -0
  48. data/lib/rouge/demos/plist +1 -132
  49. data/lib/rouge/demos/powershell +12 -48
  50. data/lib/rouge/demos/q +6 -0
  51. data/lib/rouge/demos/reasonml +12 -0
  52. data/lib/rouge/demos/rego +8 -0
  53. data/lib/rouge/demos/robot_framework +27 -0
  54. data/lib/rouge/demos/sas +13 -0
  55. data/lib/rouge/demos/slice +10 -0
  56. data/lib/rouge/demos/solidity +13 -0
  57. data/lib/rouge/demos/sparql +6 -0
  58. data/lib/rouge/demos/sqf +14 -0
  59. data/lib/rouge/demos/supercollider +11 -0
  60. data/lib/rouge/demos/terraform +0 -15
  61. data/lib/rouge/demos/ttcn3 +6 -0
  62. data/lib/rouge/demos/vcl +12 -0
  63. data/lib/rouge/demos/xojo +14 -0
  64. data/lib/rouge/demos/xpath +2 -0
  65. data/lib/rouge/demos/xquery +22 -0
  66. data/lib/rouge/demos/yang +17 -0
  67. data/lib/rouge/formatter.rb +39 -2
  68. data/lib/rouge/formatters/html.rb +21 -2
  69. data/lib/rouge/formatters/html_inline.rb +1 -0
  70. data/lib/rouge/formatters/html_legacy.rb +1 -0
  71. data/lib/rouge/formatters/html_line_table.rb +53 -0
  72. data/lib/rouge/formatters/html_linewise.rb +7 -11
  73. data/lib/rouge/formatters/html_pygments.rb +2 -0
  74. data/lib/rouge/formatters/html_table.rb +21 -31
  75. data/lib/rouge/formatters/null.rb +1 -0
  76. data/lib/rouge/formatters/terminal256.rb +23 -5
  77. data/lib/rouge/formatters/terminal_truecolor.rb +37 -0
  78. data/lib/rouge/formatters/tex.rb +92 -0
  79. data/lib/rouge/guesser.rb +2 -0
  80. data/lib/rouge/guessers/disambiguation.rb +35 -0
  81. data/lib/rouge/guessers/filename.rb +2 -0
  82. data/lib/rouge/guessers/glob_mapping.rb +3 -1
  83. data/lib/rouge/guessers/mimetype.rb +2 -0
  84. data/lib/rouge/guessers/modeline.rb +3 -1
  85. data/lib/rouge/guessers/source.rb +3 -1
  86. data/lib/rouge/guessers/util.rb +2 -0
  87. data/lib/rouge/lexer.rb +71 -15
  88. data/lib/rouge/lexers/abap.rb +13 -11
  89. data/lib/rouge/lexers/actionscript.rb +35 -34
  90. data/lib/rouge/lexers/ada.rb +162 -0
  91. data/lib/rouge/lexers/apache.rb +13 -15
  92. data/lib/rouge/lexers/apache/keywords.rb +15 -0
  93. data/lib/rouge/lexers/apex.rb +126 -0
  94. data/lib/rouge/lexers/apiblueprint.rb +2 -0
  95. data/lib/rouge/lexers/apple_script.rb +17 -14
  96. data/lib/rouge/lexers/armasm.rb +145 -0
  97. data/lib/rouge/lexers/awk.rb +26 -25
  98. data/lib/rouge/lexers/batchfile.rb +164 -0
  99. data/lib/rouge/lexers/bbcbasic.rb +112 -0
  100. data/lib/rouge/lexers/biml.rb +6 -4
  101. data/lib/rouge/lexers/bpf.rb +118 -0
  102. data/lib/rouge/lexers/brainfuck.rb +53 -0
  103. data/lib/rouge/lexers/bsl.rb +13 -12
  104. data/lib/rouge/lexers/c.rb +35 -57
  105. data/lib/rouge/lexers/ceylon.rb +7 -34
  106. data/lib/rouge/lexers/cfscript.rb +27 -26
  107. data/lib/rouge/lexers/clean.rb +156 -0
  108. data/lib/rouge/lexers/clojure.rb +15 -14
  109. data/lib/rouge/lexers/cmake.rb +16 -14
  110. data/lib/rouge/lexers/cmhg.rb +34 -0
  111. data/lib/rouge/lexers/coffeescript.rb +90 -49
  112. data/lib/rouge/lexers/common_lisp.rb +39 -38
  113. data/lib/rouge/lexers/conf.rb +7 -6
  114. data/lib/rouge/lexers/console.rb +92 -38
  115. data/lib/rouge/lexers/coq.rb +27 -23
  116. data/lib/rouge/lexers/cpp.rb +24 -13
  117. data/lib/rouge/lexers/crystal.rb +71 -70
  118. data/lib/rouge/lexers/csharp.rb +29 -29
  119. data/lib/rouge/lexers/css.rb +24 -23
  120. data/lib/rouge/lexers/csvs.rb +44 -0
  121. data/lib/rouge/lexers/cuda.rb +35 -0
  122. data/lib/rouge/lexers/cypher.rb +108 -0
  123. data/lib/rouge/lexers/cython.rb +151 -0
  124. data/lib/rouge/lexers/d.rb +64 -63
  125. data/lib/rouge/lexers/dart.rb +34 -33
  126. data/lib/rouge/lexers/datastudio.rb +138 -0
  127. data/lib/rouge/lexers/diff.rb +10 -4
  128. data/lib/rouge/lexers/digdag.rb +3 -1
  129. data/lib/rouge/lexers/docker.rb +12 -11
  130. data/lib/rouge/lexers/dot.rb +19 -18
  131. data/lib/rouge/lexers/ecl.rb +175 -0
  132. data/lib/rouge/lexers/eex.rb +52 -0
  133. data/lib/rouge/lexers/eiffel.rb +21 -20
  134. data/lib/rouge/lexers/elixir.rb +52 -36
  135. data/lib/rouge/lexers/elm.rb +30 -29
  136. data/lib/rouge/lexers/epp.rb +51 -0
  137. data/lib/rouge/lexers/erb.rb +5 -4
  138. data/lib/rouge/lexers/erlang.rb +1 -0
  139. data/lib/rouge/lexers/escape.rb +58 -0
  140. data/lib/rouge/lexers/factor.rb +41 -40
  141. data/lib/rouge/lexers/fortran.rb +34 -32
  142. data/lib/rouge/lexers/freefem.rb +240 -0
  143. data/lib/rouge/lexers/fsharp.rb +33 -31
  144. data/lib/rouge/lexers/gdscript.rb +171 -0
  145. data/lib/rouge/lexers/ghc_cmm.rb +340 -0
  146. data/lib/rouge/lexers/ghc_core.rb +151 -0
  147. data/lib/rouge/lexers/gherkin.rb +17 -14
  148. data/lib/rouge/lexers/gherkin/keywords.rb +2 -0
  149. data/lib/rouge/lexers/glsl.rb +2 -5
  150. data/lib/rouge/lexers/go.rb +3 -2
  151. data/lib/rouge/lexers/gradle.rb +1 -0
  152. data/lib/rouge/lexers/graphql.rb +78 -60
  153. data/lib/rouge/lexers/groovy.rb +24 -25
  154. data/lib/rouge/lexers/hack.rb +2 -1
  155. data/lib/rouge/lexers/haml.rb +26 -29
  156. data/lib/rouge/lexers/handlebars.rb +32 -20
  157. data/lib/rouge/lexers/haskell.rb +67 -65
  158. data/lib/rouge/lexers/haxe.rb +246 -0
  159. data/lib/rouge/lexers/hcl.rb +26 -25
  160. data/lib/rouge/lexers/hocon.rb +86 -0
  161. data/lib/rouge/lexers/hql.rb +139 -0
  162. data/lib/rouge/lexers/html.rb +33 -31
  163. data/lib/rouge/lexers/http.rb +10 -9
  164. data/lib/rouge/lexers/hylang.rb +15 -14
  165. data/lib/rouge/lexers/idlang.rb +34 -32
  166. data/lib/rouge/lexers/igorpro.rb +32 -31
  167. data/lib/rouge/lexers/ini.rb +13 -12
  168. data/lib/rouge/lexers/io.rb +10 -9
  169. data/lib/rouge/lexers/irb.rb +6 -5
  170. data/lib/rouge/lexers/isbl.rb +97 -0
  171. data/lib/rouge/lexers/isbl/builtins.rb +17 -0
  172. data/lib/rouge/lexers/java.rb +29 -25
  173. data/lib/rouge/lexers/javascript.rb +58 -61
  174. data/lib/rouge/lexers/jinja.rb +39 -22
  175. data/lib/rouge/lexers/jsl.rb +55 -0
  176. data/lib/rouge/lexers/json.rb +54 -11
  177. data/lib/rouge/lexers/json_doc.rb +8 -5
  178. data/lib/rouge/lexers/jsonnet.rb +19 -18
  179. data/lib/rouge/lexers/jsp.rb +120 -0
  180. data/lib/rouge/lexers/jsx.rb +18 -16
  181. data/lib/rouge/lexers/julia.rb +182 -58
  182. data/lib/rouge/lexers/kotlin.rb +78 -26
  183. data/lib/rouge/lexers/lasso.rb +54 -58
  184. data/lib/rouge/lexers/lasso/keywords.rb +14 -0
  185. data/lib/rouge/lexers/liquid.rb +116 -118
  186. data/lib/rouge/lexers/literate_coffeescript.rb +3 -2
  187. data/lib/rouge/lexers/literate_haskell.rb +6 -5
  188. data/lib/rouge/lexers/llvm.rb +66 -49
  189. data/lib/rouge/lexers/lua.rb +43 -4
  190. data/lib/rouge/lexers/lua/builtins.rb +2 -0
  191. data/lib/rouge/lexers/lustre.rb +79 -0
  192. data/lib/rouge/lexers/lutin.rb +33 -0
  193. data/lib/rouge/lexers/m68k.rb +143 -0
  194. data/lib/rouge/lexers/magik.rb +127 -0
  195. data/lib/rouge/lexers/make.rb +57 -34
  196. data/lib/rouge/lexers/markdown.rb +67 -39
  197. data/lib/rouge/lexers/mason.rb +110 -0
  198. data/lib/rouge/lexers/mathematica.rb +96 -0
  199. data/lib/rouge/lexers/mathematica/builtins.rb +13 -0
  200. data/lib/rouge/lexers/matlab.rb +26 -17
  201. data/lib/rouge/lexers/matlab/builtins.rb +4 -4
  202. data/lib/rouge/lexers/minizinc.rb +87 -0
  203. data/lib/rouge/lexers/moonscript.rb +4 -3
  204. data/lib/rouge/lexers/mosel.rb +64 -63
  205. data/lib/rouge/lexers/msgtrans.rb +26 -0
  206. data/lib/rouge/lexers/mxml.rb +19 -18
  207. data/lib/rouge/lexers/nasm.rb +43 -169
  208. data/lib/rouge/lexers/nesasm.rb +78 -0
  209. data/lib/rouge/lexers/nginx.rb +15 -14
  210. data/lib/rouge/lexers/nim.rb +4 -2
  211. data/lib/rouge/lexers/nix.rb +44 -43
  212. data/lib/rouge/lexers/objective_c.rb +5 -178
  213. data/lib/rouge/lexers/objective_c/common.rb +184 -0
  214. data/lib/rouge/lexers/objective_cpp.rb +31 -0
  215. data/lib/rouge/lexers/ocaml.rb +29 -64
  216. data/lib/rouge/lexers/ocaml/common.rb +53 -0
  217. data/lib/rouge/lexers/openedge.rb +429 -0
  218. data/lib/rouge/lexers/opentype_feature_file.rb +113 -0
  219. data/lib/rouge/lexers/pascal.rb +6 -5
  220. data/lib/rouge/lexers/perl.rb +102 -67
  221. data/lib/rouge/lexers/php.rb +91 -53
  222. data/lib/rouge/lexers/php/builtins.rb +183 -174
  223. data/lib/rouge/lexers/plain_text.rb +2 -1
  224. data/lib/rouge/lexers/plist.rb +16 -14
  225. data/lib/rouge/lexers/pony.rb +21 -20
  226. data/lib/rouge/lexers/powershell.rb +190 -638
  227. data/lib/rouge/lexers/praat.rb +76 -75
  228. data/lib/rouge/lexers/prolog.rb +27 -19
  229. data/lib/rouge/lexers/prometheus.rb +32 -30
  230. data/lib/rouge/lexers/properties.rb +13 -12
  231. data/lib/rouge/lexers/protobuf.rb +23 -22
  232. data/lib/rouge/lexers/puppet.rb +33 -32
  233. data/lib/rouge/lexers/python.rb +124 -99
  234. data/lib/rouge/lexers/q.rb +17 -14
  235. data/lib/rouge/lexers/qml.rb +13 -12
  236. data/lib/rouge/lexers/r.rb +13 -13
  237. data/lib/rouge/lexers/racket.rb +47 -22
  238. data/lib/rouge/lexers/reasonml.rb +65 -0
  239. data/lib/rouge/lexers/rego.rb +45 -0
  240. data/lib/rouge/lexers/robot_framework.rb +249 -0
  241. data/lib/rouge/lexers/ruby.rb +88 -71
  242. data/lib/rouge/lexers/rust.rb +45 -44
  243. data/lib/rouge/lexers/sas.rb +563 -0
  244. data/lib/rouge/lexers/sass.rb +9 -8
  245. data/lib/rouge/lexers/sass/common.rb +41 -40
  246. data/lib/rouge/lexers/scala.rb +67 -40
  247. data/lib/rouge/lexers/scheme.rb +19 -18
  248. data/lib/rouge/lexers/scss.rb +4 -3
  249. data/lib/rouge/lexers/sed.rb +31 -30
  250. data/lib/rouge/lexers/shell.rb +67 -55
  251. data/lib/rouge/lexers/sieve.rb +10 -9
  252. data/lib/rouge/lexers/slice.rb +32 -0
  253. data/lib/rouge/lexers/slim.rb +27 -26
  254. data/lib/rouge/lexers/smalltalk.rb +34 -33
  255. data/lib/rouge/lexers/smarty.rb +20 -19
  256. data/lib/rouge/lexers/sml.rb +68 -67
  257. data/lib/rouge/lexers/solidity.rb +185 -0
  258. data/lib/rouge/lexers/sparql.rb +129 -0
  259. data/lib/rouge/lexers/sqf.rb +109 -0
  260. data/lib/rouge/lexers/sqf/commands.rb +15 -0
  261. data/lib/rouge/lexers/sql.rb +47 -26
  262. data/lib/rouge/lexers/supercollider.rb +116 -0
  263. data/lib/rouge/lexers/swift.rb +49 -44
  264. data/lib/rouge/lexers/tap.rb +22 -20
  265. data/lib/rouge/lexers/tcl.rb +28 -27
  266. data/lib/rouge/lexers/terraform.rb +37 -13
  267. data/lib/rouge/lexers/tex.rb +20 -19
  268. data/lib/rouge/lexers/toml.rb +59 -20
  269. data/lib/rouge/lexers/tsx.rb +1 -0
  270. data/lib/rouge/lexers/ttcn3.rb +119 -0
  271. data/lib/rouge/lexers/tulip.rb +38 -36
  272. data/lib/rouge/lexers/turtle.rb +36 -38
  273. data/lib/rouge/lexers/twig.rb +1 -0
  274. data/lib/rouge/lexers/typescript.rb +12 -0
  275. data/lib/rouge/lexers/typescript/common.rb +1 -0
  276. data/lib/rouge/lexers/vala.rb +19 -18
  277. data/lib/rouge/lexers/varnish.rb +168 -0
  278. data/lib/rouge/lexers/vb.rb +28 -27
  279. data/lib/rouge/lexers/verilog.rb +27 -28
  280. data/lib/rouge/lexers/vhdl.rb +12 -11
  281. data/lib/rouge/lexers/viml.rb +15 -14
  282. data/lib/rouge/lexers/viml/keywords.rb +2 -0
  283. data/lib/rouge/lexers/vue.rb +15 -10
  284. data/lib/rouge/lexers/wollok.rb +27 -26
  285. data/lib/rouge/lexers/xml.rb +18 -21
  286. data/lib/rouge/lexers/xojo.rb +61 -0
  287. data/lib/rouge/lexers/xpath.rb +332 -0
  288. data/lib/rouge/lexers/xquery.rb +145 -0
  289. data/lib/rouge/lexers/yaml.rb +64 -61
  290. data/lib/rouge/lexers/yang.rb +147 -0
  291. data/lib/rouge/plugins/redcarpet.rb +9 -2
  292. data/lib/rouge/regex_lexer.rb +27 -25
  293. data/lib/rouge/template_lexer.rb +1 -0
  294. data/lib/rouge/tex_theme_renderer.rb +132 -0
  295. data/lib/rouge/text_analyzer.rb +1 -0
  296. data/lib/rouge/theme.rb +5 -0
  297. data/lib/rouge/themes/base16.rb +1 -0
  298. data/lib/rouge/themes/bw.rb +41 -0
  299. data/lib/rouge/themes/colorful.rb +1 -0
  300. data/lib/rouge/themes/github.rb +1 -0
  301. data/lib/rouge/themes/gruvbox.rb +1 -0
  302. data/lib/rouge/themes/igor_pro.rb +1 -0
  303. data/lib/rouge/themes/magritte.rb +78 -0
  304. data/lib/rouge/themes/molokai.rb +1 -0
  305. data/lib/rouge/themes/monokai.rb +1 -0
  306. data/lib/rouge/themes/monokai_sublime.rb +4 -1
  307. data/lib/rouge/themes/pastie.rb +2 -1
  308. data/lib/rouge/themes/thankful_eyes.rb +2 -1
  309. data/lib/rouge/themes/tulip.rb +2 -1
  310. data/lib/rouge/token.rb +31 -22
  311. data/lib/rouge/util.rb +3 -2
  312. data/lib/rouge/version.rb +2 -1
  313. data/rouge.gemspec +6 -3
  314. metadata +130 -8
  315. data/lib/rouge/lexers/apache/keywords.yml +0 -764
  316. data/lib/rouge/lexers/lasso/keywords.yml +0 -446
@@ -1,4 +1,5 @@
1
1
  # -*- coding: utf-8 -*- #
2
+ # frozen_string_literal: true
2
3
 
3
4
  module Rouge
4
5
  module Lexers
@@ -12,7 +13,7 @@ module Rouge
12
13
  mimetypes 'application/x-actionscript'
13
14
 
14
15
  state :comments_and_whitespace do
15
- rule /\s+/, Text
16
+ rule %r/\s+/, Text
16
17
  rule %r(//.*?$), Comment::Single
17
18
  rule %r(/\*.*?\*/)m, Comment::Multiline
18
19
  end
@@ -25,9 +26,9 @@ module Rouge
25
26
  goto :regex
26
27
  end
27
28
 
28
- rule /[{]/, Punctuation, :object
29
+ rule %r/[{]/, Punctuation, :object
29
30
 
30
- rule //, Text, :pop!
31
+ rule %r//, Text, :pop!
31
32
  end
32
33
 
33
34
  state :regex do
@@ -38,38 +39,38 @@ module Rouge
38
39
 
39
40
  rule %r([^/]\n), Error, :pop!
40
41
 
41
- rule /\n/, Error, :pop!
42
- rule /\[\^/, Str::Escape, :regex_group
43
- rule /\[/, Str::Escape, :regex_group
44
- rule /\\./, Str::Escape
42
+ rule %r/\n/, Error, :pop!
43
+ rule %r/\[\^/, Str::Escape, :regex_group
44
+ rule %r/\[/, Str::Escape, :regex_group
45
+ rule %r/\\./, Str::Escape
45
46
  rule %r{[(][?][:=<!]}, Str::Escape
46
- rule /[{][\d,]+[}]/, Str::Escape
47
- rule /[()?]/, Str::Escape
48
- rule /./, Str::Regex
47
+ rule %r/[{][\d,]+[}]/, Str::Escape
48
+ rule %r/[()?]/, Str::Escape
49
+ rule %r/./, Str::Regex
49
50
  end
50
51
 
51
52
  state :regex_end do
52
- rule /[gim]+/, Str::Regex, :pop!
53
+ rule %r/[gim]+/, Str::Regex, :pop!
53
54
  rule(//) { pop! }
54
55
  end
55
56
 
56
57
  state :regex_group do
57
58
  # specially highlight / in a group to indicate that it doesn't
58
59
  # close the regex
59
- rule /\//, Str::Escape
60
+ rule %r(/), Str::Escape
60
61
 
61
62
  rule %r([^/]\n) do
62
63
  token Error
63
64
  pop! 2
64
65
  end
65
66
 
66
- rule /\]/, Str::Escape, :pop!
67
- rule /\\./, Str::Escape
68
- rule /./, Str::Regex
67
+ rule %r/\]/, Str::Escape, :pop!
68
+ rule %r/\\./, Str::Escape
69
+ rule %r/./, Str::Regex
69
70
  end
70
71
 
71
72
  state :bad_regex do
72
- rule /[^\n]+/, Error, :pop!
73
+ rule %r/[^\n]+/, Error, :pop!
73
74
  end
74
75
 
75
76
  def self.keywords
@@ -108,25 +109,25 @@ module Rouge
108
109
  id = /[$a-zA-Z_][a-zA-Z0-9_]*/
109
110
 
110
111
  state :root do
111
- rule /\A\s*#!.*?\n/m, Comment::Preproc, :statement
112
- rule /\n/, Text, :statement
112
+ rule %r/\A\s*#!.*?\n/m, Comment::Preproc, :statement
113
+ rule %r/\n/, Text, :statement
113
114
  rule %r((?<=\n)(?=\s|/|<!--)), Text, :expr_start
114
115
  mixin :comments_and_whitespace
115
116
  rule %r(\+\+ | -- | ~ | && | \|\| | \\(?=\n) | << | >>>? | ===
116
117
  | !== )x,
117
118
  Operator, :expr_start
118
119
  rule %r([:-<>+*%&|\^/!=]=?), Operator, :expr_start
119
- rule /[(\[,]/, Punctuation, :expr_start
120
- rule /;/, Punctuation, :statement
121
- rule /[)\].]/, Punctuation
120
+ rule %r/[(\[,]/, Punctuation, :expr_start
121
+ rule %r/;/, Punctuation, :statement
122
+ rule %r/[)\].]/, Punctuation
122
123
 
123
- rule /[?]/ do
124
+ rule %r/[?]/ do
124
125
  token Punctuation
125
126
  push :ternary
126
127
  push :expr_start
127
128
  end
128
129
 
129
- rule /[{}]/, Punctuation, :statement
130
+ rule %r/[{}]/, Punctuation, :statement
130
131
 
131
132
  rule id do |m|
132
133
  if self.class.keywords.include? m[0]
@@ -146,20 +147,20 @@ module Rouge
146
147
  end
147
148
  end
148
149
 
149
- rule /\-?[0-9][0-9]*\.[0-9]+([eE][0-9]+)?[fd]?/, Num::Float
150
- rule /0x[0-9a-fA-F]+/, Num::Hex
151
- rule /\-?[0-9]+/, Num::Integer
152
- rule /"(\\\\|\\"|[^"])*"/, Str::Double
153
- rule /'(\\\\|\\'|[^'])*'/, Str::Single
150
+ rule %r/\-?[0-9][0-9]*\.[0-9]+([eE][0-9]+)?[fd]?/, Num::Float
151
+ rule %r/0x[0-9a-fA-F]+/, Num::Hex
152
+ rule %r/\-?[0-9]+/, Num::Integer
153
+ rule %r/"(\\\\|\\"|[^"])*"/, Str::Double
154
+ rule %r/'(\\\\|\\'|[^'])*'/, Str::Single
154
155
  end
155
156
 
156
157
  # braced parts that aren't object literals
157
158
  state :statement do
158
- rule /(#{id})(\s*)(:)/ do
159
+ rule %r/(#{id})(\s*)(:)/ do
159
160
  groups Name::Label, Text, Punctuation
160
161
  end
161
162
 
162
- rule /[{}]/, Punctuation
163
+ rule %r/[{}]/, Punctuation
163
164
 
164
165
  mixin :expr_start
165
166
  end
@@ -167,23 +168,23 @@ module Rouge
167
168
  # object literals
168
169
  state :object do
169
170
  mixin :comments_and_whitespace
170
- rule /[}]/ do
171
+ rule %r/[}]/ do
171
172
  token Punctuation
172
173
  goto :statement
173
174
  end
174
175
 
175
- rule /(#{id})(\s*)(:)/ do
176
+ rule %r/(#{id})(\s*)(:)/ do
176
177
  groups Name::Attribute, Text, Punctuation
177
178
  push :expr_start
178
179
  end
179
180
 
180
- rule /:/, Punctuation
181
+ rule %r/:/, Punctuation
181
182
  mixin :root
182
183
  end
183
184
 
184
185
  # ternary expressions, where <id>: is not a label!
185
186
  state :ternary do
186
- rule /:/ do
187
+ rule %r/:/ do
187
188
  token Punctuation
188
189
  goto :expr_start
189
190
  end
@@ -0,0 +1,162 @@
1
+ # -*- coding: utf-8 -*- #
2
+ # frozen_string_literal: true
3
+
4
+ module Rouge
5
+ module Lexers
6
+ class Ada < RegexLexer
7
+ tag 'ada'
8
+ filenames '*.ada', '*.ads', '*.adb', '*.gpr'
9
+ mimetypes 'text/x-ada'
10
+
11
+ title 'Ada'
12
+ desc 'The Ada 2012 programming language'
13
+
14
+ # Ada identifiers are Unicode with underscores only allowed as separators.
15
+ ID = /\b[[:alpha:]](?:\p{Pc}?[[:alnum:]])*\b/
16
+
17
+ # Numerals can also contain underscores.
18
+ NUM = /\d(_?\d)*/
19
+ XNUM = /\h(_?\h)*/
20
+ EXP = /(E[-+]?#{NUM})?/i
21
+
22
+ # Return a hash mapping lower-case identifiers to token classes.
23
+ def self.idents
24
+ @idents ||= Hash.new(Name).tap do |h|
25
+ %w(
26
+ abort abstract accept access aliased all array at begin body
27
+ case constant declare delay delta digits do else elsif end
28
+ exception exit for generic goto if in interface is limited
29
+ loop new null of others out overriding pragma private
30
+ protected raise range record renames requeue return reverse
31
+ select separate some synchronized tagged task terminate then
32
+ until use when while with
33
+ ).each {|w| h[w] = Keyword}
34
+
35
+ %w(abs and mod not or rem xor).each {|w| h[w] = Operator::Word}
36
+
37
+ %w(
38
+ entry function package procedure subtype type
39
+ ).each {|w| h[w] = Keyword::Declaration}
40
+
41
+ %w(
42
+ boolean character constraint_error duration float integer
43
+ natural positive long_float long_integer long_long_float
44
+ long_long_integer program_error short_float short_integer
45
+ short_short_integer storage_error string tasking_error
46
+ wide_character wide_string wide_wide_character
47
+ wide_wide_string
48
+ ).each {|w| h[w] = Name::Builtin}
49
+ end
50
+ end
51
+
52
+ state :whitespace do
53
+ rule %r{\s+}m, Text
54
+ rule %r{--.*$}, Comment::Single
55
+ end
56
+
57
+ state :dquote_string do
58
+ rule %r{[^"\n]+}, Literal::String::Double
59
+ rule %r{""}, Literal::String::Escape
60
+ rule %r{"}, Literal::String::Double, :pop!
61
+ rule %r{\n}, Error, :pop!
62
+ end
63
+
64
+ state :attr do
65
+ mixin :whitespace
66
+ rule ID, Name::Attribute, :pop!
67
+ rule %r{}, Text, :pop!
68
+ end
69
+
70
+ # Handle a dotted name immediately following a declaration keyword.
71
+ state :decl_name do
72
+ mixin :whitespace
73
+ rule %r{body\b}i, Keyword::Declaration # package body Foo.Bar is...
74
+ rule %r{(#{ID})(\.)} do
75
+ groups Name::Namespace, Punctuation
76
+ end
77
+ # function "<=" (Left, Right: Type) is ...
78
+ rule %r{#{ID}|"(and|or|xor|/?=|<=?|>=?|\+|–|&\|/|mod|rem|\*?\*|abs|not)"},
79
+ Name::Function, :pop!
80
+ rule %r{}, Text, :pop!
81
+ end
82
+
83
+ # Handle a sequence of library unit names: with Ada.Foo, Ada.Bar;
84
+ #
85
+ # There's a chance we entered this state mistakenly since 'with'
86
+ # has multiple other uses in Ada (none of which are likely to
87
+ # appear at the beginning of a line). Try to bail as soon as
88
+ # possible if we see something suspicious like keywords.
89
+ #
90
+ # See ada_spec.rb for some examples.
91
+ state :libunit_name do
92
+ mixin :whitespace
93
+
94
+ rule ID do |m|
95
+ t = self.class.idents[m[0].downcase]
96
+ if t <= Name
97
+ # Convert all kinds of Name to namespaces in this context.
98
+ token Name::Namespace
99
+ else
100
+ # Yikes, we're not supposed to get a keyword in a library unit name!
101
+ # We probably entered this state by mistake, so try to fix it.
102
+ token t
103
+ if t == Keyword::Declaration
104
+ goto :decl_name
105
+ else
106
+ pop!
107
+ end
108
+ end
109
+ end
110
+
111
+ rule %r{[.,]}, Punctuation
112
+ rule %r{}, Text, :pop!
113
+ end
114
+
115
+ state :root do
116
+ mixin :whitespace
117
+
118
+ # String literals.
119
+ rule %r{'.'}, Literal::String::Char
120
+ rule %r{"[^"\n]*}, Literal::String::Double, :dquote_string
121
+
122
+ # Real literals.
123
+ rule %r{#{NUM}\.#{NUM}#{EXP}}, Literal::Number::Float
124
+ rule %r{#{NUM}##{XNUM}\.#{XNUM}##{EXP}}, Literal::Number::Float
125
+
126
+ # Integer literals.
127
+ rule %r{2#[01](_?[01])*##{EXP}}, Literal::Number::Bin
128
+ rule %r{8#[0-7](_?[0-7])*##{EXP}}, Literal::Number::Oct
129
+ rule %r{16##{XNUM}*##{EXP}}, Literal::Number::Hex
130
+ rule %r{#{NUM}##{XNUM}##{EXP}}, Literal::Number::Integer
131
+ rule %r{#{NUM}#\w+#}, Error
132
+ rule %r{#{NUM}#{EXP}}, Literal::Number::Integer
133
+
134
+ # Special constructs.
135
+ rule %r{'}, Punctuation, :attr
136
+ rule %r{<<#{ID}>>}, Name::Label
137
+
138
+ # Context clauses are tricky because the 'with' keyword is used
139
+ # for many purposes. Detect at beginning of the line only.
140
+ rule %r{^(?:(limited)(\s+))?(?:(private)(\s+))?(with)\b}i do
141
+ groups Keyword::Namespace, Text, Keyword::Namespace, Text, Keyword::Namespace
142
+ push :libunit_name
143
+ end
144
+
145
+ # Operators and punctuation characters.
146
+ rule %r{[+*/&<=>|]|-|=>|\.\.|\*\*|[:></]=|<<|>>|<>}, Operator
147
+ rule %r{[.,:;()]}, Punctuation
148
+
149
+ rule ID do |m|
150
+ t = self.class.idents[m[0].downcase]
151
+ token t
152
+ if t == Keyword::Declaration
153
+ push :decl_name
154
+ end
155
+ end
156
+
157
+ # Flag word-like things that don't match the ID pattern.
158
+ rule %r{\b(\p{Pc}|[[alpha]])\p{Word}*}, Error
159
+ end
160
+ end
161
+ end
162
+ end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'yaml'
2
4
 
3
5
  module Rouge
@@ -9,14 +11,10 @@ module Rouge
9
11
  mimetypes 'text/x-httpd-conf', 'text/x-apache-conf'
10
12
  filenames '.htaccess', 'httpd.conf'
11
13
 
12
- class << self
13
- attr_reader :keywords
14
- end
15
- # Load Apache keywords from separate YML file
16
- @keywords = ::YAML.load_file(Pathname.new(__FILE__).dirname.join('apache/keywords.yml')).tap do |h|
17
- h.each do |k,v|
18
- h[k] = Set.new v
19
- end
14
+ # self-modifying method that loads the keywords file
15
+ def self.keywords
16
+ load File.join(Lexers::BASE_DIR, 'apache/keywords.rb')
17
+ keywords
20
18
  end
21
19
 
22
20
  def name_for_token(token, kwtype, tktype)
@@ -28,19 +26,19 @@ module Rouge
28
26
  end
29
27
 
30
28
  state :whitespace do
31
- rule /\#.*/, Comment
32
- rule /\s+/m, Text
29
+ rule %r/\#.*/, Comment
30
+ rule %r/\s+/m, Text
33
31
  end
34
32
 
35
33
  state :root do
36
34
  mixin :whitespace
37
35
 
38
- rule /(<\/?)(\w+)/ do |m|
36
+ rule %r/(<\/?)(\w+)/ do |m|
39
37
  groups Punctuation, name_for_token(m[2].downcase, :sections, Name::Label)
40
38
  push :section
41
39
  end
42
40
 
43
- rule /\w+/ do |m|
41
+ rule %r/\w+/ do |m|
44
42
  token name_for_token(m[0].downcase, :directives, Name::Class)
45
43
  push :directive
46
44
  end
@@ -48,7 +46,7 @@ module Rouge
48
46
 
49
47
  state :section do
50
48
  # Match section arguments
51
- rule /([^>]+)?(>(?:\r\n?|\n)?)/ do |m|
49
+ rule %r/([^>]+)?(>(?:\r\n?|\n)?)/ do
52
50
  groups Literal::String::Regex, Punctuation
53
51
  pop!
54
52
  end
@@ -58,11 +56,11 @@ module Rouge
58
56
 
59
57
  state :directive do
60
58
  # Match value literals and other directive arguments
61
- rule /\r\n?|\n/, Text, :pop!
59
+ rule %r/\r\n?|\n/, Text, :pop!
62
60
 
63
61
  mixin :whitespace
64
62
 
65
- rule /\S+/ do |m|
63
+ rule %r/\S+/ do |m|
66
64
  token name_for_token(m[0], :values, Literal::String::Symbol)
67
65
  end
68
66
  end
@@ -0,0 +1,15 @@
1
+ # -*- coding: utf-8 -*- #
2
+ # frozen_string_literal: true
3
+
4
+ # automatically generated by `rake builtins:apache`
5
+ module Rouge
6
+ module Lexers
7
+ def Apache.keywords
8
+ @keywords ||= {}.tap do |h|
9
+ h[:sections] = Set.new ["directory", "directorymatch", "files", "filesmatch", "ifdefine", "ifmodule", "limit", "limitexcept", "location", "locationmatch", "proxy", "proxymatch", "virtualhost"]
10
+ h[:directives] = Set.new ["acceptfilter", "acceptmutex", "acceptpathinfo", "accessconfig", "accessfilename", "action", "addalt", "addaltbyencoding", "addaltbytype", "addcharset", "adddefaultcharset", "adddescription", "addencoding", "addhandler", "addicon", "addiconbyencoding", "addiconbytype", "addinputfilter", "addlanguage", "addmodule", "addmoduleinfo", "addoutputfilter", "addoutputfilterbytype", "addtype", "agentlog", "alias", "aliasmatch", "allow", "allowconnect", "allowencodedslashes", "allowmethods", "allowoverride", "allowoverridelist", "anonymous", "anonymous_authoritative", "anonymous_logemail", "anonymous_mustgiveemail", "anonymous_nouserid", "anonymous_verifyemail", "assignuserid", "authauthoritative", "authdbauthoritative", "authdbgroupfile", "authdbmauthoritative", "asyncrequestworkerfactor", "authbasicauthoritative", "authbasicfake", "authbasicprovider", "authbasicusedigestalgorithm", "authdbduserpwquery", "authdbduserrealmquery", "authdbmgroupfile", "authdbmtype", "authdbmuserfile", "authdbuserfile", "authdigestalgorithm", "authdigestdomain", "authdigestfile", "authdigestgroupfile", "authdigestnccheck", "authdigestnonceformat", "authdigestnoncelifetime", "authdigestprovider", "authdigestqop", "authdigestshmemsize", "authformauthoritative", "authformbody", "authformdisablenostore", "authformfakebasicauth", "authformlocation", "authformloginrequiredlocation", "authformloginsuccesslocation", "authformlogoutlocation", "authformmethod", "authformmimetype", "authformpassword", "authformprovider", "authformsitepassphrase", "authformsize", "authformusername", "authgroupfile", "authldapauthoritative", "authldapauthorizeprefix", "authldapbindauthoritative", "authldapbinddn", "authldapbindpassword", "authldapcharsetconfig", "authldapcompareasuser", "authldapcomparednonserver", "authldapdereferencealiases", "authldapenabled", "authldapfrontpagehack", "authldapgroupattribute", "authldapgroupattributeisdn", "authldapinitialbindasuser", "authldapinitialbindpattern", "authldapmaxsubgroupdepth", "authldapremoteuserattribute", "authldapremoteuserisdn", "authldapsearchasuser", "authldapsubgroupattribute", "authldapsubgroupclass", "authldapurl", "authmerging", "authname", "authncachecontext", "authncacheenable", "authncacheprovidefor", "authncachesocache", "authncachetimeout", "authnzfcgicheckauthnprovider", "authnzfcgidefineprovider", "authtype", "authuserfile", "authzdbdlogintoreferer", "authzdbdquery", "authzdbdredirectquery", "authzdbmtype", "authzsendforbiddenonfailure", "balancergrowth", "balancerinherit", "balancermember", "balancerpersist", "bindaddress", "browsermatch", "browsermatchnocase", "bs2000account", "bufferedlogs", "buffersize", "cachedefaultexpire", "cachedetailheader", "cachedirlength", "cachedirlevels", "cachedisable", "cacheenable", "cacheexpirycheck", "cachefile", "cacheforcecompletion", "cachegcclean", "cachegcdaily", "cachegcinterval", "cachegcmemusage", "cachegcunused", "cacheheader", "cacheignorecachecontrol", "cacheignoreheaders", "cacheignorenolastmod", "cacheignorequerystring", "cacheignoreurlsessionidentifiers", "cachekeybaseurl", "cachelastmodifiedfactor", "cachelock", "cachelockmaxage", "cachelockpath", "cachemaxexpire", "cachemaxfilesize", "cacheminexpire", "cacheminfilesize", "cachenegotiateddocs", "cachequickhandler", "cachereadsize", "cachereadtime", "cacheroot", "cachesize", "cachetimemargin", "cachesocache", "cachesocachemaxsize", "cachesocachemaxtime", "cachesocachemintime", "cachesocachereadsize", "cachesocachereadtime", "cachestaleonerror", "cachestoreexpired", "cachestorenostore", "cachestoreprivate", "cgidscripttimeout", "cgimapextension", "cgipassauth", "charsetdefault", "charsetoptions", "charsetsourceenc", "checkcaseonly", "checkspelling", "childperuserid", "clearmodulelist", "chrootdir", "contentdigest", "cookiedomain", "cookieexpires", "cookielog", "cookiename", "cookiestyle", "cookietracking", "coredumpdirectory", "customlog", "dav", "davdepthinfinity", "davgenericlockdb", "davlockdb", "davmintimeout", "dbdexptime", "dbdinitsql", "dbdkeep", "dbdmax", "dbdmin", "dbdparams", "dbdpersist", "dbdpreparesql", "dbdriver", "defaulticon", "defaultlanguage", "defaultmode", "defaultruntimedir", "defaulttype", "define", "deflatebuffersize", "deflatecompressionlevel", "deflatefilternote", "deflateinflatelimitrequestbody", "deflateinflateratioburst", "deflateinflateratiolimit", "deflatememlevel", "deflatewindowsize", "deny", "directorycheckhandler", "directoryindex", "directoryindexredirect", "directoryslash", "doctitle", "doctrailer", "documentroot", "dtraceprivileges", "dumpioinput", "dumpiooutput", "enableexceptionhook", "enablemmap", "enablesendfile", "error", "errordocument", "errorlog", "errorlogformat", "example", "expiresactive", "expiresbytype", "expiresdefault", "extendedstatus", "extfilterdefine", "extfilteroptions", "fallbackresource", "fancyindexing", "fileetag", "filterchain", "filterdeclare", "filterprotocol", "filterprovider", "filtertrace", "forcelanguagepriority", "forcetype", "forensiclog", "globallog", "gprofdir", "gracefulshutdowntimeout", "group", "h2direct", "h2keepalivetimeout", "h2maxsessionstreams", "h2maxworkeridleseconds", "h2maxworkers", "h2minworkers", "h2moderntlsonly", "h2push", "h2pushdiarysize", "h2pushpriority", "h2serializeheaders", "h2sessionextrafiles", "h2streammaxmemsize", "h2streamtimeout", "h2timeout", "h2tlscooldownsecs", "h2tlswarmupsize", "h2upgrade", "h2windowsize", "header", "headername", "headprefix", "headsuffix", "hidesys", "hideurl", "heartbeataddress", "heartbeatlisten", "heartbeatmaxservers", "heartbeatstorage", "heartbeatstorage", "hostnamelookups", "htmldir", "httplogfile", "identitycheck", "identitychecktimeout", "imapbase", "imapdefault", "imapmenu", "include", "includeoptional", "indexheadinsert", "indexignore", "indexignorereset", "indexoptions", "indexorderdefault", "indexstylesheet", "inputsed", "isapiappendlogtoerrors", "isapiappendlogtoquery", "isapicachefile", "isapifakeasync", "isapilognotsupported", "isapireadaheadbuffer", "keepalive", "keepalivetimeout", "keptbodysize", "languagepriority", "lasturls", "ldapcacheentries", "ldapcachettl", "ldapconnectionpoolttl", "ldapconnectiontimeout", "ldaplibrarydebug", "ldapopcacheentries", "ldapopcachettl", "ldapreferralhoplimit", "ldapreferrals", "ldapretries", "ldapretrydelay", "ldapsharedcachefile", "ldapsharedcachesize", "ldaptimeout", "ldaptrustedca", "ldaptrustedcatype", "ldaptrustedclientcert", "ldaptrustedglobalcert", "ldaptrustedmode", "ldapverifyservercert", "limitinternalrecursion", "limitrequestbody", "limitrequestfields", "limitrequestfieldsize", "limitrequestline", "limitxmlrequestbody", "listen", "listenbacklog", "listencoresbucketsratio", "loadfile", "loadmodule", "lockfile", "logformat", "logiotrackttfb", "loglevel", "logmessage", "luaauthzprovider", "luacodecache", "luahookaccesschecker", "luahookauthchecker", "luahookcheckuserid", "luahookfixups", "luahookinsertfilter", "luahooklog", "luahookmaptostorage", "luahooktranslatename", "luahooktypechecker", "luainherit", "luainputfilter", "luamaphandler", "luaoutputfilter", "luapackagecpath", "luapackagepath", "luaquickhandler", "luaroot", "luascope", "maxclients", "maxconnectionsperchild", "maxkeepaliverequests", "maxmemfree", "maxrequestsperchild", "maxrequestsperthread", "maxrangeoverlaps", "maxrangereversals", "maxranges", "maxrequestworkers", "maxspareservers", "maxsparethreads", "maxthreads", "maxthreadsperchild", "mcachemaxobjectcount", "mcachemaxobjectsize", "mcachemaxstreamingbuffer", "mcacheminobjectsize", "mcacheremovalalgorithm", "mcachesize", "memcacheconnttl", "mergetrailers", "metadir", "metafiles", "metasuffix", "mimemagicfile", "minspareservers", "minsparethreads", "mmapfile", "modemstandard", "modmimeusepathinfo", "multiviewsmatch", "mutex", "namevirtualhost", "nocache", "noproxy", "numservers", "nwssltrustedcerts", "nwsslupgradeable", "options", "order", "outputsed", "passenv", "pidfile", "port", "privatedir", "privilegesmode", "protocol", "protocolecho", "protocols", "protocolshonororder", "proxyaddheaders", "proxybadheader", "proxyblock", "proxydomain", "proxyerroroverride", "proxyexpressdbmfile", "proxyexpressdbmtype", "proxyexpressenable", "proxyftpdircharset", "proxyftpescapewildcards", "proxyftplistonwildcard", "proxyhtmlbufsize", "proxyhtmlcharsetout", "proxyhtmldoctype", "proxyhtmlenable", "proxyhtmlevents", "proxyhtmlextended", "proxyhtmlfixups", "proxyhtmlinterp", "proxyhtmllinks", "proxyhtmlmeta", "proxyhtmlstripcomments", "proxyhtmlurlmap", "proxyiobuffersize", "proxymaxforwards", "proxypass", "proxypassinherit", "proxypassinterpolateenv", "proxypassmatch", "proxypassreverse", "proxypassreversecookiedomain", "proxypassreversecookiepath", "proxypreservehost", "proxyreceivebuffersize", "proxyremote", "proxyremotematch", "proxyrequests", "proxyscgiinternalredirect", "proxyscgisendfile", "proxyset", "proxysourceaddress", "proxystatus", "proxytimeout", "proxyvia", "qualifyredirecturl", "readmename", "receivebuffersize", "redirect", "redirectmatch", "redirectpermanent", "redirecttemp", "refererignore", "refererlog", "reflectorheader", "remoteipheader", "remoteipinternalproxy", "remoteipinternalproxylist", "remoteipproxiesheader", "remoteiptrustedproxy", "remoteiptrustedproxylist", "removecharset", "removeencoding", "removehandler", "removeinputfilter", "removelanguage", "removeoutputfilter", "removetype", "requestheader", "requestreadtimeout", "require", "resourceconfig", "rewritebase", "rewritecond", "rewriteengine", "rewritelock", "rewritelog", "rewriteloglevel", "rewritemap", "rewriteoptions", "rewriterule", "rlimitcpu", "rlimitmem", "rlimitnproc", "satisfy", "scoreboardfile", "script", "scriptalias", "scriptaliasmatch", "scriptinterpretersource", "scriptlog", "scriptlogbuffer", "scriptloglength", "scriptsock", "securelisten", "seerequesttail", "sendbuffersize", "serveradmin", "serveralias", "serverlimit", "servername", "serverpath", "serverroot", "serversignature", "servertokens", "servertype", "session", "sessioncookiename", "sessioncookiename2", "sessioncookieremove", "sessioncryptocipher", "sessioncryptodriver", "sessioncryptopassphrase", "sessioncryptopassphrasefile", "sessiondbdcookiename", "sessiondbdcookiename2", "sessiondbdcookieremove", "sessiondbddeletelabel", "sessiondbdinsertlabel", "sessiondbdperuser", "sessiondbdselectlabel", "sessiondbdupdatelabel", "sessionenv", "sessionexclude", "sessionheader", "sessioninclude", "sessionmaxage", "setenv", "setenvif", "setenvifexpr", "setenvifnocase", "sethandler", "setinputfilter", "setoutputfilter", "ssiendtag", "ssierrormsg", "ssietag", "ssilastmodified", "ssilegacyexprparser", "ssistarttag", "ssitimeformat", "ssiundefinedecho", "sslcacertificatefile", "sslcacertificatepath", "sslcadnrequestfile", "sslcadnrequestpath", "sslcarevocationcheck", "sslcarevocationfile", "sslcarevocationpath", "sslcertificatechainfile", "sslcertificatefile", "sslcertificatekeyfile", "sslciphersuite", "sslcompression", "sslcryptodevice", "sslengine", "sslfips", "sslhonorcipherorder", "sslinsecurerenegotiation", "sslmutex", "sslocspdefaultresponder", "sslocspenable", "sslocspoverrideresponder", "sslocspproxyurl", "sslocsprespondertimeout", "sslocspresponsemaxage", "sslocspresponsetimeskew", "sslocspuserequestnonce", "sslopensslconfcmd", "ssloptions", "sslpassphrasedialog", "sslprotocol", "sslproxycacertificatefile", "sslproxycacertificatepath", "sslproxycarevocationcheck", "sslproxycarevocationfile", "sslproxycarevocationpath", "sslproxycheckpeercn", "sslproxycheckpeerexpire", "sslproxycheckpeername", "sslproxyciphersuite", "sslproxyengine", "sslproxymachinecertificatechainfile", "sslproxymachinecertificatefile", "sslproxymachinecertificatepath", "sslproxyprotocol", "sslproxyverify", "sslproxyverifydepth", "sslrandomseed", "sslrenegbuffersize", "sslrequire", "sslrequiressl", "sslsessioncache", "sslsessioncachetimeout", "sslsessionticketkeyfile", "sslsessiontickets", "sslsrpunknownuserseed", "sslsrpverifierfile", "sslstaplingcache", "sslstaplingerrorcachetimeout", "sslstaplingfaketrylater", "sslstaplingforceurl", "sslstaplingrespondertimeout", "sslstaplingresponsemaxage", "sslstaplingresponsetimeskew", "sslstaplingreturnrespondererrors", "sslstaplingstandardcachetimeout", "sslstrictsnivhostcheck", "sslusername", "sslusestapling", "sslverifyclient", "sslverifydepth", "startservers", "startthreads", "substitute", "substituteinheritbefore", "substitutemaxlinelength", "suexec", "suexecusergroup", "threadlimit", "threadsperchild", "threadstacksize", "timeout", "topsites", "topurls", "traceenable", "transferlog", "typesconfig", "undefine", "undefmacro", "unsetenv", "use", "usecanonicalname", "usecanonicalphysicalport", "user", "userdir", "vhostcgimode", "vhostcgiprivs", "vhostgroup", "vhostprivs", "vhostsecure", "vhostuser", "virtualdocumentroot", "virtualdocumentrootip", "virtualscriptalias", "virtualscriptaliasip", "win32disableacceptex", "watchdoginterval", "xbithack", "xml2encalias", "xml2encdefault", "xml2startparse"]
11
+ h[:values] = Set.new ["add", "All", "allow", "any", "append", "AuthConfig", "Basic", "CONNECT", "DELETE", "deny", "Digest", "double", "downgrade-1.0", "email", "env", "error", "ExecCGI", "FancyIndexing", "FileInfo", "FollowSymLinks", "force-response-1.0", "formatted", "from", "full", "Full", "GET", "gone", "group", "IconsAreLinks", "Includes", "IncludesNOEXEC", "Indexes", "inetd", "inherit", "Limit", "map", "Minimal", "MultiViews", "mutual-failure", "nocontent", "nokeepalive", "none", "None", "off", "on", "Options", "OPTIONS", "OS", "permanent", "POST", "PUT", "referer", "ScanHTMLTitles", "seeother", "semi-formatted", "set", "standalone", "SuppressDescription", "SuppressLastModified", "SuppressSize", "SymLinksIfOwnerMatch", "temporary", "unformatted", "unset", "URL", "user", "valid-user"]
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,126 @@
1
+ # -*- coding: utf-8 -*- #
2
+ # frozen_string_literal: true
3
+
4
+ module Rouge
5
+ module Lexers
6
+ class Apex < RegexLexer
7
+ title "Apex"
8
+ desc "The Apex programming language (provided by salesforce)"
9
+
10
+ tag 'apex'
11
+ filenames '*.cls'
12
+ mimetypes 'text/x-apex'
13
+
14
+ def self.keywords
15
+ @keywords ||= Set.new %w(
16
+ assert break case catch continue default do else finally for if goto
17
+ instanceof new return switch this throw try while insert update
18
+ delete
19
+ )
20
+ end
21
+
22
+ def self.declarations
23
+ @declarations ||= Set.new %w(
24
+ abstract const enum extends final implements native private protected
25
+ public static super synchronized throws transient volatile with
26
+ sharing without inherited virtual global testmethod
27
+ )
28
+ end
29
+
30
+ def self.soql
31
+ @soql ||= Set.new %w(
32
+ SELECT FROM WHERE UPDATE LIKE TYPEOF END USING SCOPE WITH DATA
33
+ CATEGORY GROUP BY ROLLUP CUBE HAVING ORDER BY ASC DESC NULLS FIRST
34
+ LAST LIMIT OFFSET FOR VIEW REFERENCE UPDATE TRACKING VIEWSTAT OR AND
35
+ )
36
+ end
37
+
38
+ def self.types
39
+ @types ||= Set.new %w(
40
+ String boolean byte char double float int long short var void
41
+ )
42
+ end
43
+
44
+ def self.constants
45
+ @constants ||= Set.new %w(true false null)
46
+ end
47
+
48
+ id = /[a-z_][a-z0-9_]*/i
49
+
50
+ state :root do
51
+ rule %r/\s+/m, Text
52
+
53
+ rule %r(//.*?$), Comment::Single
54
+ rule %r(/\*.*?\*/)m, Comment::Multiline
55
+
56
+ rule %r/(?:class|interface)\b/, Keyword::Declaration, :class
57
+ rule %r/import\b/, Keyword::Namespace, :import
58
+
59
+ rule %r/([@$.]?)(#{id})([:(]?)/io do |m|
60
+ if self.class.keywords.include? m[0].downcase
61
+ token Keyword
62
+ elsif self.class.soql.include? m[0].upcase
63
+ token Keyword
64
+ elsif self.class.declarations.include? m[0].downcase
65
+ token Keyword::Declaration
66
+ elsif self.class.types.include? m[0].downcase
67
+ token Keyword::Type
68
+ elsif self.class.constants.include? m[0].downcase
69
+ token Keyword::Constant
70
+ elsif 'package'.casecmp m[0]
71
+ token Keyword::Namespace
72
+ elsif m[1] == "@"
73
+ token Name::Decorator
74
+ elsif m[3] == ":"
75
+ groups Operator, Name::Label, Punctuation
76
+ elsif m[3] == "("
77
+ groups Operator, Name::Function, Punctuation
78
+ elsif m[1] == "."
79
+ groups Operator, Name::Property, Punctuation
80
+ else
81
+ token Name
82
+ end
83
+ end
84
+
85
+ rule %r/"/, Str::Double, :dq
86
+ rule %r/'/, Str::Single, :sq
87
+
88
+ digit = /[0-9]_+[0-9]|[0-9]/
89
+ rule %r/#{digit}+\.#{digit}+([eE]#{digit}+)?[fd]?/, Num::Float
90
+ rule %r/0b(?:[01]_+[01]|[01])+/i, Num::Bin
91
+ rule %r/0x(?:\h_+\h|\h)+/i, Num::Hex
92
+ rule %r/0(?:[0-7]_+[0-7]|[0-7])+/, Num::Oct
93
+ rule %r/#{digit}+L?/, Num::Integer
94
+
95
+ rule %r/[-+\/*~^!%&<>|=.?]/, Operator
96
+ rule %r/[\[\](){},:;]/, Punctuation;
97
+ end
98
+
99
+ state :class do
100
+ rule %r/\s+/m, Text
101
+ rule id, Name::Class, :pop!
102
+ end
103
+
104
+ state :import do
105
+ rule %r/\s+/m, Text
106
+ rule %r/[a-z0-9_.]+\*?/i, Name::Namespace, :pop!
107
+ end
108
+
109
+ state :escape do
110
+ rule %r/\\[btnfr\\"']/, Str::Escape
111
+ end
112
+
113
+ state :dq do
114
+ mixin :escape
115
+ rule %r/[^\\"]+/, Str::Double
116
+ rule %r/"/, Str::Double, :pop!
117
+ end
118
+
119
+ state :sq do
120
+ mixin :escape
121
+ rule %r/[^\\']+/, Str::Double
122
+ rule %r/'/, Str::Double, :pop!
123
+ end
124
+ end
125
+ end
126
+ end