rouge 3.2.0 → 3.18.0

Sign up to get free protection for your applications and to get access to all the features.
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
@@ -18,31 +19,17 @@ module Rouge
18
19
  external false final finally for fun get if import in infix
19
20
  inline inner interface internal is lateinit noinline null
20
21
  object open operator out override package private protected
21
- public reified return sealed set super tailrec this throw
22
- true try typealias typeof val var vararg when where while
23
- yield
22
+ public reified return sealed set super suspend tailrec this
23
+ throw true try typealias typeof val var vararg when where
24
+ while yield
24
25
  )
25
26
 
26
- name = %r'@?[_\p{Lu}\p{Ll}\p{Lt}\p{Lm}\p{Nl}][\p{Lu}\p{Ll}\p{Lt}\p{Lm}\p{Nl}\p{Nd}\p{Pc}\p{Cf}\p{Mn}\p{Mc}]*'
27
+ name_chars = %r'[-_\p{Lu}\p{Ll}\p{Lt}\p{Lm}\p{Nl}\p{Nd}\p{Pc}\p{Cf}\p{Mn}\p{Mc}]*'
27
28
 
28
- id = %r'(#{name}|`#{name}`)'
29
+ class_name = %r'`?[\p{Lu}]#{name_chars}`?'
30
+ name = %r'`?[_\p{Lu}\p{Ll}\p{Lt}\p{Lm}\p{Nl}]#{name_chars}`?'
29
31
 
30
32
  state :root do
31
- rule %r'^\s*\[.*?\]', Name::Attribute
32
- rule %r'[^\S\n]+', Text
33
- rule %r'\\\n', Text # line continuation
34
- rule %r'//.*?$', Comment::Single
35
- rule %r'/[*].*?[*]/'m, Comment::Multiline
36
- rule %r'\n', Text
37
- rule %r'::|!!|\?[:.]', Operator
38
- rule %r"(\.\.)", Operator
39
- rule %r'[~!%^&*()+=|\[\]:;,.<>/?-]', Punctuation
40
- rule %r'[{}]', Punctuation
41
- rule %r'@"(""|[^"])*"'m, Str
42
- rule %r'""".*?"""'m, Str
43
- rule %r'"(\\\\|\\"|[^"\n])*["\n]'m, Str
44
- rule %r"'\\.'|'[^\\]'", Str::Char
45
- rule %r"[0-9](\.[0-9]+)?([eE][+-][0-9]+)?[flFL]?|0[xX][0-9a-fA-F]+[Ll]?", Num
46
33
  rule %r'\b(companion)(\s+)(object)\b' do
47
34
  groups Keyword, Text, Keyword
48
35
  end
@@ -50,29 +37,94 @@ module Rouge
50
37
  groups Keyword::Declaration, Text
51
38
  push :class
52
39
  end
40
+ rule %r'\b(fun)(\s+)' do
41
+ groups Keyword, Text
42
+ push :function
43
+ end
53
44
  rule %r'\b(package|import)(\s+)' do
54
45
  groups Keyword, Text
55
46
  push :package
56
47
  end
48
+ rule %r'\b(val|var)(\s+)(\()' do
49
+ groups Keyword::Declaration, Text, Punctuation
50
+ push :destructure
51
+ end
57
52
  rule %r'\b(val|var)(\s+)' do
58
53
  groups Keyword::Declaration, Text
59
54
  push :property
60
55
  end
61
- rule %r/\bfun\b/, Keyword
62
- rule /\b(?:#{keywords.join('|')})\b/, Keyword
63
- rule id, Name
56
+ rule %r'(return|continue|break|this|super)(@#{name})?' do
57
+ groups Keyword, Name::Decorator
58
+ end
59
+ rule %r'\bfun\b', Keyword
60
+ rule %r'\b(?:#{keywords.join('|')})\b', Keyword
61
+ rule %r'^\s*\[.*?\]', Name::Attribute
62
+ rule %r'[^\S\n]+', Text
63
+ rule %r'\\\n', Text # line continuation
64
+ rule %r'//.*?$', Comment::Single
65
+ rule %r'/[*].*[*]/', Comment::Multiline # single line block comment
66
+ rule %r'/[*].*', Comment::Multiline, :comment # multiline block comment
67
+ rule %r'\n', Text
68
+ rule %r'::|!!|\?[:.]', Operator
69
+ rule %r"(\.\.)", Operator
70
+ rule %r'[~!%^&*()+=|\[\]:;,.<>/?-]', Punctuation
71
+ rule %r'[{}]', Punctuation
72
+ rule %r'@"(""|[^"])*"'m, Str
73
+ rule %r'""".*?"""'m, Str
74
+ rule %r'"(\\\\|\\"|[^"\n])*["\n]'m, Str
75
+ rule %r"'\\.'|'[^\\]'", Str::Char
76
+ rule %r"[0-9](\.[0-9]+)?([eE][+-][0-9]+)?[flFL]?|0[xX][0-9a-fA-F]+[Ll]?", Num
77
+ rule %r'(@#{class_name})', Name::Decorator
78
+ rule %r'(#{class_name})(<)' do
79
+ groups Name::Class, Punctuation
80
+ push :generic_parameters
81
+ end
82
+ rule class_name, Name::Class
83
+ rule %r'(#{name})(?=\s*[({])', Name::Function
84
+ rule %r'(#{name})@', Name::Decorator # label
85
+ rule name, Name
64
86
  end
65
87
 
66
88
  state :package do
67
- rule /\S+/, Name::Namespace, :pop!
89
+ rule %r'\S+', Name::Namespace, :pop!
68
90
  end
69
91
 
70
92
  state :class do
71
- rule id, Name::Class, :pop!
93
+ rule class_name, Name::Class, :pop!
94
+ end
95
+
96
+ state :function do
97
+ rule %r'(<)', Punctuation, :generic_parameters
98
+ rule %r'(\s+)', Text
99
+ rule %r'(#{class_name})(\.)' do
100
+ groups Name::Class, Punctuation
101
+ end
102
+ rule name, Name::Function, :pop!
103
+ end
104
+
105
+ state :generic_parameters do
106
+ rule class_name, Name::Class
107
+ rule %r'(<)', Punctuation, :generic_parameters
108
+ rule %r'(,)', Punctuation
109
+ rule %r'(\s+)', Text
110
+ rule %r'(>)', Punctuation, :pop!
72
111
  end
73
112
 
74
113
  state :property do
75
- rule id, Name::Property, :pop!
114
+ rule name, Name::Property, :pop!
115
+ end
116
+
117
+ state :destructure do
118
+ rule %r'(,)', Punctuation
119
+ rule %r'(\))', Punctuation, :pop!
120
+ rule %r'(\s+)', Text
121
+ rule name, Name::Property
122
+ end
123
+
124
+ state :comment do
125
+ rule %r'\s*/[*].*', Comment::Multiline, :comment
126
+ rule %r'.*[*]/', Comment::Multiline, :pop!
127
+ rule %r'.*', Comment::Multiline
76
128
  end
77
129
  end
78
130
  end
@@ -1,4 +1,5 @@
1
1
  # -*- coding: utf-8 -*- #
2
+ # frozen_string_literal: true
2
3
 
3
4
  require 'yaml'
4
5
 
@@ -33,37 +34,32 @@ module Rouge
33
34
  push :lasso if start_inline?
34
35
  end
35
36
 
36
- class << self
37
- attr_reader :keywords
38
- end
39
-
40
- # Load Lasso keywords from separate YML file
41
- @keywords = ::YAML.load_file(Pathname.new(__FILE__).dirname.join('lasso/keywords.yml')).tap do |h|
42
- h.each do |k,v|
43
- h[k] = Set.new v
44
- end
37
+ # self-modifying method that loads the keywords file
38
+ def self.keywords
39
+ load File.join(Lexers::BASE_DIR, 'lasso/keywords.rb')
40
+ keywords
45
41
  end
46
42
 
47
43
  id = /[a-z_][\w.]*/i
48
44
 
49
45
  state :root do
50
- rule /^#![ \S]+lasso9\b/, Comment::Preproc, :lasso
46
+ rule %r/^#![ \S]+lasso9\b/, Comment::Preproc, :lasso
51
47
  rule(/(?=\[|<)/) { push :delimiters }
52
- rule /\s+/, Text::Whitespace
48
+ rule %r/\s+/, Text::Whitespace
53
49
  rule(//) { push :delimiters; push :lassofile }
54
50
  end
55
51
 
56
52
  state :delimiters do
57
- rule /\[no_square_brackets\]/, Comment::Preproc, :nosquarebrackets
58
- rule /\[noprocess\]/, Comment::Preproc, :noprocess
59
- rule /\[/, Comment::Preproc, :squarebrackets
60
- rule /<\?(lasso(script)?|=)/i, Comment::Preproc, :anglebrackets
53
+ rule %r/\[no_square_brackets\]/, Comment::Preproc, :nosquarebrackets
54
+ rule %r/\[noprocess\]/, Comment::Preproc, :noprocess
55
+ rule %r/\[/, Comment::Preproc, :squarebrackets
56
+ rule %r/<\?(lasso(script)?|=)/i, Comment::Preproc, :anglebrackets
61
57
  rule(/([^\[<]|<!--.*?-->|<(script|style).*?\2>|<(?!\?(lasso(script)?|=)))+/im) { delegate parent }
62
58
  end
63
59
 
64
60
  state :nosquarebrackets do
65
- rule /\[noprocess\]/, Comment::Preproc, :noprocess
66
- rule /<\?(lasso(script)?|=)/i, Comment::Preproc, :anglebrackets
61
+ rule %r/\[noprocess\]/, Comment::Preproc, :noprocess
62
+ rule %r/<\?(lasso(script)?|=)/i, Comment::Preproc, :anglebrackets
67
63
  rule(/([^\[<]|<!--.*?-->|<(script|style).*?\2>|<(?!\?(lasso(script)?|=))|\[(?!noprocess))+/im) { delegate parent }
68
64
  end
69
65
 
@@ -73,22 +69,22 @@ module Rouge
73
69
  end
74
70
 
75
71
  state :squarebrackets do
76
- rule /\]/, Comment::Preproc, :pop!
72
+ rule %r/\]/, Comment::Preproc, :pop!
77
73
  mixin :lasso
78
74
  end
79
75
 
80
76
  state :anglebrackets do
81
- rule /\?>/, Comment::Preproc, :pop!
77
+ rule %r/\?>/, Comment::Preproc, :pop!
82
78
  mixin :lasso
83
79
  end
84
80
 
85
81
  state :lassofile do
86
- rule /\]|\?>/, Comment::Preproc, :pop!
82
+ rule %r/\]|\?>/, Comment::Preproc, :pop!
87
83
  mixin :lasso
88
84
  end
89
85
 
90
86
  state :whitespacecomments do
91
- rule /\s+/, Text
87
+ rule %r/\s+/, Text
92
88
  rule %r(//.*?\n), Comment::Single
93
89
  rule %r(/\*\*!.*?\*/)m, Comment::Doc
94
90
  rule %r(/\*.*?\*/)m, Comment::Multiline
@@ -98,43 +94,43 @@ module Rouge
98
94
  mixin :whitespacecomments
99
95
 
100
96
  # literals
101
- rule /\d*\.\d+(e[+-]?\d+)?/i, Num::Float
102
- rule /0x[\da-f]+/i, Num::Hex
103
- rule /\d+/, Num::Integer
104
- rule /(infinity|NaN)\b/i, Num
105
- rule /'[^'\\]*(\\.[^'\\]*)*'/m, Str::Single
106
- rule /"[^"\\]*(\\.[^"\\]*)*"/m, Str::Double
107
- rule /`[^`]*`/m, Str::Backtick
97
+ rule %r/\d*\.\d+(e[+-]?\d+)?/i, Num::Float
98
+ rule %r/0x[\da-f]+/i, Num::Hex
99
+ rule %r/\d+/, Num::Integer
100
+ rule %r/(infinity|NaN)\b/i, Num
101
+ rule %r/'[^'\\]*(\\.[^'\\]*)*'/m, Str::Single
102
+ rule %r/"[^"\\]*(\\.[^"\\]*)*"/m, Str::Double
103
+ rule %r/`[^`]*`/m, Str::Backtick
108
104
 
109
105
  # names
110
- rule /\$#{id}/, Name::Variable
111
- rule /#(#{id}|\d+\b)/, Name::Variable::Instance
112
- rule /(\.\s*)('#{id}')/ do
106
+ rule %r/\$#{id}/, Name::Variable
107
+ rule %r/#(#{id}|\d+\b)/, Name::Variable::Instance
108
+ rule %r/(\.\s*)('#{id}')/ do
113
109
  groups Name::Builtin::Pseudo, Name::Variable::Class
114
110
  end
115
- rule /(self)(\s*->\s*)('#{id}')/i do
111
+ rule %r/(self)(\s*->\s*)('#{id}')/i do
116
112
  groups Name::Builtin::Pseudo, Operator, Name::Variable::Class
117
113
  end
118
- rule /(\.\.?\s*)(#{id}(=(?!=))?)/ do
114
+ rule %r/(\.\.?\s*)(#{id}(=(?!=))?)/ do
119
115
  groups Name::Builtin::Pseudo, Name::Other
120
116
  end
121
- rule /(->\\?\s*|&\s*)(#{id}(=(?!=))?)/ do
117
+ rule %r/(->\\?\s*|&\s*)(#{id}(=(?!=))?)/ do
122
118
  groups Operator, Name::Other
123
119
  end
124
- rule /(?<!->)(self|inherited|currentcapture|givenblock)\b/i, Name::Builtin::Pseudo
125
- rule /-(?!infinity)#{id}/i, Name::Attribute
126
- rule /::\s*#{id}/, Name::Label
127
- rule /error_((code|msg)_\w+|adderror|columnrestriction|databaseconnectionunavailable|databasetimeout|deleteerror|fieldrestriction|filenotfound|invaliddatabase|invalidpassword|invalidusername|modulenotfound|noerror|nopermission|outofmemory|reqcolumnmissing|reqfieldmissing|requiredcolumnmissing|requiredfieldmissing|updateerror)/i, Name::Exception
120
+ rule %r/(?<!->)(self|inherited|currentcapture|givenblock)\b/i, Name::Builtin::Pseudo
121
+ rule %r/-(?!infinity)#{id}/i, Name::Attribute
122
+ rule %r/::\s*#{id}/, Name::Label
123
+ rule %r/error_((code|msg)_\w+|adderror|columnrestriction|databaseconnectionunavailable|databasetimeout|deleteerror|fieldrestriction|filenotfound|invaliddatabase|invalidpassword|invalidusername|modulenotfound|noerror|nopermission|outofmemory|reqcolumnmissing|reqfieldmissing|requiredcolumnmissing|requiredfieldmissing|updateerror)/i, Name::Exception
128
124
 
129
125
  # definitions
130
- rule /(define)(\s+)(#{id})(\s*=>\s*)(type|trait|thread)\b/i do
126
+ rule %r/(define)(\s+)(#{id})(\s*=>\s*)(type|trait|thread)\b/i do
131
127
  groups Keyword::Declaration, Text, Name::Class, Operator, Keyword
132
128
  end
133
129
  rule %r((define)(\s+)(#{id})(\s*->\s*)(#{id}=?|[-+*/%]))i do
134
130
  groups Keyword::Declaration, Text, Name::Class, Operator, Name::Function
135
131
  push :signature
136
132
  end
137
- rule /(define)(\s+)(#{id})/i do
133
+ rule %r/(define)(\s+)(#{id})/i do
138
134
  groups Keyword::Declaration, Text, Name::Function
139
135
  push :signature
140
136
  end
@@ -142,25 +138,25 @@ module Rouge
142
138
  groups Keyword, Text, Name::Function
143
139
  push :signature
144
140
  end
145
- rule /(public|protected|private|provide)(\s+)(#{id})/i do
141
+ rule %r/(public|protected|private|provide)(\s+)(#{id})/i do
146
142
  groups Keyword, Text, Name::Function
147
143
  end
148
144
 
149
145
  # keywords
150
- rule /(true|false|none|minimal|full|all|void)\b/i, Keyword::Constant
151
- rule /(local|var|variable|global|data(?=\s))\b/i, Keyword::Declaration
152
- rule /(array|date|decimal|duration|integer|map|pair|string|tag|xml|null|boolean|bytes|keyword|list|locale|queue|set|stack|staticarray)\b/i, Keyword::Type
153
- rule /(#{id})(\s+)(in)\b/i do
146
+ rule %r/(true|false|none|minimal|full|all|void)\b/i, Keyword::Constant
147
+ rule %r/(local|var|variable|global|data(?=\s))\b/i, Keyword::Declaration
148
+ rule %r/(array|date|decimal|duration|integer|map|pair|string|tag|xml|null|boolean|bytes|keyword|list|locale|queue|set|stack|staticarray)\b/i, Keyword::Type
149
+ rule %r/(#{id})(\s+)(in)\b/i do
154
150
  groups Name, Text, Keyword
155
151
  end
156
- rule /(let|into)(\s+)(#{id})/i do
152
+ rule %r/(let|into)(\s+)(#{id})/i do
157
153
  groups Keyword, Text, Name
158
154
  end
159
155
 
160
156
  # other
161
- rule /,/, Punctuation, :commamember
162
- rule /(and|or|not)\b/i, Operator::Word
163
- rule /(#{id})(\s*::\s*#{id})?(\s*=(?!=|>))/ do
157
+ rule %r/,/, Punctuation, :commamember
158
+ rule %r/(and|or|not)\b/i, Operator::Word
159
+ rule %r/(#{id})(\s*::\s*#{id})?(\s*=(?!=|>))/ do
164
160
  groups Name, Name::Label, Operator
165
161
  end
166
162
 
@@ -182,31 +178,31 @@ module Rouge
182
178
  end
183
179
  end
184
180
 
185
- rule /(=)(n?bw|n?ew|n?cn|lte?|gte?|n?eq|n?rx|ft)\b/i do
181
+ rule %r/(=)(n?bw|n?ew|n?cn|lte?|gte?|n?eq|n?rx|ft)\b/i do
186
182
  groups Operator, Operator::Word
187
183
  end
188
184
  rule %r(:=|[-+*/%=<>&|!?\\]+), Operator
189
- rule /[{}():;,@^]/, Punctuation
185
+ rule %r/[{}():;,@^]/, Punctuation
190
186
  end
191
187
 
192
188
  state :signature do
193
- rule /\=>/, Operator, :pop!
194
- rule /\)/, Punctuation, :pop!
195
- rule /[(,]/, Punctuation, :parameter
189
+ rule %r/\=>/, Operator, :pop!
190
+ rule %r/\)/, Punctuation, :pop!
191
+ rule %r/[(,]/, Punctuation, :parameter
196
192
  mixin :lasso
197
193
  end
198
194
 
199
195
  state :parameter do
200
- rule /\)/, Punctuation, :pop!
201
- rule /-?#{id}/, Name::Attribute, :pop!
202
- rule /\.\.\./, Name::Builtin::Pseudo
196
+ rule %r/\)/, Punctuation, :pop!
197
+ rule %r/-?#{id}/, Name::Attribute, :pop!
198
+ rule %r/\.\.\./, Name::Builtin::Pseudo
203
199
  mixin :lasso
204
200
  end
205
201
 
206
202
  state :commamember do
207
203
  rule %r((#{id}=?|[-+*/%])(?=\s*(\(([^()]*\([^()]*\))*[^\)]*\)\s*)?(::[\w.\s]+)?=>)), Name::Function, :signature
208
204
  mixin :whitespacecomments
209
- rule //, Text, :pop!
205
+ rule %r//, Text, :pop!
210
206
  end
211
207
 
212
208
  end
@@ -0,0 +1,14 @@
1
+ # -*- coding: utf-8 -*- #
2
+ # frozen_string_literal: true
3
+
4
+ # automatically generated by `rake builtins:lasso`
5
+ module Rouge
6
+ module Lexers
7
+ def Lasso.keywords
8
+ @keywords ||= {}.tap do |h|
9
+ h[:keywords] = Set.new ["cache", "database_names", "database_schemanames", "database_tablenames", "define_tag", "define_type", "email_batch", "encode_set", "html_comment", "handle", "handle_error", "header", "if", "inline", "iterate", "ljax_target", "link", "link_currentaction", "link_currentgroup", "link_currentrecord", "link_detail", "link_firstgroup", "link_firstrecord", "link_lastgroup", "link_lastrecord", "link_nextgroup", "link_nextrecord", "link_prevgroup", "link_prevrecord", "log", "loop", "namespace_using", "output_none", "portal", "private", "protect", "records", "referer", "referrer", "repeating", "resultset", "rows", "search_args", "search_arguments", "select", "sort_args", "sort_arguments", "thread_atomic", "value_list", "while", "abort", "case", "else", "fail_if", "fail_ifnot", "fail", "if_empty", "if_false", "if_null", "if_true", "loop_abort", "loop_continue", "loop_count", "params", "params_up", "return", "return_value", "run_children", "soap_definetag", "soap_lastrequest", "soap_lastresponse", "tag_name", "ascending", "average", "by", "define", "descending", "do", "equals", "frozen", "group", "handle_failure", "import", "in", "into", "join", "let", "match", "max", "min", "on", "order", "parent", "protected", "provide", "public", "require", "returnhome", "skip", "split_thread", "sum", "take", "thread", "to", "trait", "type", "where", "with", "yield", "yieldhome"]
10
+ h[:types_traits] = Set.new ["atbegin", "bson_iter", "bson", "bytes_document_body", "cache_server_element", "cache_server", "capture", "client_address", "client_ip", "component_container", "component_render_state", "component", "curl", "curltoken", "currency", "custom", "data_document", "database_registry", "dateandtime", "dbgp_packet", "dbgp_server", "debugging_stack", "delve", "dir", "dirdesc", "dns_response", "document_base", "document_body", "document_header", "dsinfo", "eacher", "email_compose", "email_parse", "email_pop", "email_queue_impl_base", "email_queue_impl", "email_smtp", "email_stage_impl_base", "email_stage_impl", "fastcgi_each_fcgi_param", "fastcgi_server", "fcgi_record", "fcgi_request", "file", "filedesc", "filemaker_datasource", "generateforeachkeyed", "generateforeachunkeyed", "generateseries", "hash_map", "html_atomic_element", "html_attr", "html_base", "html_binary", "html_br", "html_cdata", "html_container_element", "html_div", "html_document_body", "html_document_head", "html_eol", "html_fieldset", "html_form", "html_h1", "html_h2", "html_h3", "html_h4", "html_h5", "html_h6", "html_hr", "html_img", "html_input", "html_json", "html_label", "html_legend", "html_link", "html_meta", "html_object", "html_option", "html_raw", "html_script", "html_select", "html_span", "html_style", "html_table", "html_td", "html_text", "html_th", "html_tr", "http_document_header", "http_document", "http_error", "http_header_field", "http_server_connection_handler_globals", "http_server_connection_handler", "http_server_request_logger_thread", "http_server_web_connection", "http_server", "image", "include_cache", "inline_type", "java_jnienv", "jbyte", "jbytearray", "jchar", "jchararray", "jfieldid", "jfloat", "jint", "jmethodid", "jobject", "jshort", "json_decode", "json_encode", "json_literal", "json_object", "lassoapp_compiledsrc_appsource", "lassoapp_compiledsrc_fileresource", "lassoapp_content_rep_halt", "lassoapp_dirsrc_appsource", "lassoapp_dirsrc_fileresource", "lassoapp_installer", "lassoapp_livesrc_appsource", "lassoapp_livesrc_fileresource", "lassoapp_long_expiring_bytes", "lassoapp_manualsrc_appsource", "lassoapp_zip_file_server", "lassoapp_zipsrc_appsource", "lassoapp_zipsrc_fileresource", "ldap", "library_thread_loader", "list_node", "log_impl_base", "log_impl", "magick_image", "map_node", "memberstream", "memory_session_driver_impl_entry", "memory_session_driver_impl", "memory_session_driver", "mime_reader", "mongo_client", "mongo_collection", "mongo_cursor", "mustache_ctx", "mysql_session_driver_impl", "mysql_session_driver", "net_named_pipe", "net_tcp_ssl", "net_tcp", "net_udp_packet", "net_udp", "odbc_session_driver_impl", "odbc_session_driver", "opaque", "os_process", "pair_compare", "pairup", "pdf_barcode", "pdf_chunk", "pdf_color", "pdf_doc", "pdf_font", "pdf_hyphenator", "pdf_image", "pdf_list", "pdf_paragraph", "pdf_phrase", "pdf_read", "pdf_table", "pdf_text", "pdf_typebase", "percent", "portal_impl", "queriable_groupby", "queriable_grouping", "queriable_groupjoin", "queriable_join", "queriable_orderby", "queriable_orderbydescending", "queriable_select", "queriable_selectmany", "queriable_skip", "queriable_take", "queriable_thenby", "queriable_thenbydescending", "queriable_where", "raw_document_body", "regexp", "repeat", "scientific", "security_registry", "serialization_element", "serialization_object_identity_compare", "serialization_reader", "serialization_writer_ref", "serialization_writer_standin", "serialization_writer", "session_delete_expired_thread", "signature", "sourcefile", "sqlite_column", "sqlite_currentrow", "sqlite_db", "sqlite_results", "sqlite_session_driver_impl_entry", "sqlite_session_driver_impl", "sqlite_session_driver", "sqlite_table", "sqlite3_stmt", "sqlite3", "sys_process", "text_document", "tie", "timeonly", "tree_base", "tree_node", "tree_nullnode", "ucal", "usgcpu", "usgvm", "web_error_atend", "web_node_base", "web_node_content_representation_css_specialized", "web_node_content_representation_html_specialized", "web_node_content_representation_js_specialized", "web_node_content_representation_xhr_container", "web_node_echo", "web_node_root", "web_request_impl", "web_request", "web_response_impl", "web_response", "web_router", "websocket_handler", "worker_pool", "xml_attr", "xml_cdatasection", "xml_characterdata", "xml_comment", "xml_document", "xml_documentfragment", "xml_documenttype", "xml_domimplementation", "xml_element", "xml_entity", "xml_entityreference", "xml_namednodemap_attr", "xml_namednodemap_ht", "xml_namednodemap", "xml_node", "xml_nodelist", "xml_notation", "xml_processinginstruction", "xml_text", "xmlstream", "zip_file_impl", "zip_file", "zip_impl", "zip", "any", "formattingbase", "html_attributed", "html_element_coreattrs", "html_element_eventsattrs", "html_element_i18nattrs", "lassoapp_capabilities", "lassoapp_resource", "lassoapp_source", "queriable_asstring", "session_driver", "trait_array", "trait_asstring", "trait_backcontractible", "trait_backended", "trait_backexpandable", "trait_close", "trait_contractible", "trait_decompose_assignment", "trait_doubleended", "trait_each_sub", "trait_encodeurl", "trait_endedfullymutable", "trait_expandable", "trait_file", "trait_finite", "trait_finiteforeach", "trait_foreach", "trait_foreachtextelement", "trait_frontcontractible", "trait_frontended", "trait_frontexpandable", "trait_fullymutable", "trait_generator", "trait_generatorcentric", "trait_hashable", "trait_json_serialize", "trait_keyed", "trait_keyedfinite", "trait_keyedforeach", "trait_keyedmutable", "trait_list", "trait_map", "trait_net", "trait_pathcomponents", "trait_positionallykeyed", "trait_positionallysearchable", "trait_queriable", "trait_queriablelambda", "trait_readbytes", "trait_readstring", "trait_scalar", "trait_searchable", "trait_serializable", "trait_setencoding", "trait_setoperations", "trait_stack", "trait_treenode", "trait_writebytes", "trait_writestring", "trait_xml_elementcompat", "trait_xml_nodecompat", "web_connection", "web_node_container", "web_node_content_css_specialized", "web_node_content_document", "web_node_content_html_specialized", "web_node_content_js_specialized", "web_node_content_json_specialized", "web_node_content_representation", "web_node_content", "web_node_postable", "web_node"]
11
+ end
12
+ end
13
+ end
14
+ end
@@ -1,4 +1,5 @@
1
1
  # -*- coding: utf-8 -*- #
2
+ # frozen_string_literal: true
2
3
 
3
4
  module Rouge
4
5
  module Lexers
@@ -9,191 +10,177 @@ module Rouge
9
10
  filenames '*.liquid'
10
11
 
11
12
  state :root do
12
- rule /[^\{]+/, Text
13
+ rule %r/[^\{]+/, Text
13
14
 
14
- rule /(\{%)(\s*)/ do
15
+ rule %r/(\{%-?)(\s*)/ do
15
16
  groups Punctuation, Text::Whitespace
16
17
  push :tag_or_block
17
18
  end
18
19
 
19
- rule /(\{\{)(\s*)/ do
20
+ rule %r/(\{\{-?)(\s*)/ do
20
21
  groups Punctuation, Text::Whitespace
21
22
  push :output
22
23
  end
23
24
 
24
- rule /\{/, Text
25
+ rule %r/\{/, Text
25
26
  end
26
27
 
27
28
  state :tag_or_block do
28
29
  # builtin logic blocks
29
- rule /(if|unless|elsif|case)(?=\s+)/, Keyword::Reserved, :condition
30
+ rule %r/(if|elsif|unless|case)\b/, Keyword::Reserved, :condition
31
+ rule %r/(when)\b/, Keyword::Reserved, :when
30
32
 
31
- rule /(when)(\s+)/ do
32
- groups Keyword::Reserved, Text::Whitespace
33
- push :when
34
- end
35
-
36
- rule /(else)(\s*)(%\})/ do
33
+ rule %r/(else)(\s*)(-?%\})/ do
37
34
  groups Keyword::Reserved, Text::Whitespace, Punctuation
38
35
  pop!
39
36
  end
40
37
 
41
38
  # other builtin blocks
42
- rule /(capture)(\s+)([^\s%]+)(\s*)(%\})/ do
43
- groups Name::Tag, Text::Whitespace, Name::Attribute, Text::Whitespace, Punctuation
39
+ rule %r/(capture|(?:in|de)crement)(\s+)([^\s%]+)(\s*)(-?%\})/ do
40
+ groups Name::Tag, Text::Whitespace, Name::Variable, Text::Whitespace, Punctuation
44
41
  pop!
45
42
  end
46
43
 
47
- rule /(comment)(\s*)(%\})/ do
44
+ rule %r/(comment)(\s*)(-?%\})/ do
48
45
  groups Name::Tag, Text::Whitespace, Punctuation
49
46
  push :comment
50
47
  end
51
48
 
52
- rule /(raw)(\s*)(%\})/ do
49
+ rule %r/(raw)(\s*)(-?%\})/ do
53
50
  groups Name::Tag, Text::Whitespace, Punctuation
54
51
  push :raw
55
52
  end
56
53
 
57
- rule /assign/, Name::Tag, :assign
58
- rule /include/, Name::Tag, :include
59
-
60
54
  # end of block
61
- rule /(end(case|unless|if))(\s*)(%\})/ do
62
- groups Keyword::Reserved, nil, Text::Whitespace, Punctuation
55
+ rule %r/(end(?:if|unless|case))(\s*)(-?%\})/ do
56
+ groups Keyword::Reserved, Text::Whitespace, Punctuation
63
57
  pop!
64
58
  end
65
59
 
66
- rule /(end([^\s%]+))(\s*)(%\})/ do
67
- groups Name::Tag, nil, Text::Whitespace, Punctuation
60
+ rule %r/(end(?:[^\s%]+))(\s*)(-?%\})/ do
61
+ groups Name::Tag, Text::Whitespace, Punctuation
68
62
  pop!
69
63
  end
70
64
 
71
65
  # builtin tags
72
- rule /(cycle)(\s+)(([^\s:]*)(:))?(\s*)/ do |m|
73
- token Name::Tag, m[1]
74
- token Text::Whitespace, m[2]
66
+ rule %r/(assign|echo)\b/, Name::Tag, :assign
67
+ rule %r/(include|render)\b/, Name::Tag, :include
75
68
 
76
- if m[4] =~ /'[^']*'/
77
- token Str::Single, m[4]
78
- elsif m[4] =~ /"[^"]*"/
79
- token Str::Double, m[4]
80
- else
81
- token Name::Attribute, m[4]
82
- end
69
+ rule %r/(cycle)(\s+)(?:([^\s:]*)(\s*)(:))?(\s*)/ do |m|
70
+ token_class = case m[3]
71
+ when %r/'[^']*'/ then Str::Single
72
+ when %r/"[^"]*"/ then Str::Double
73
+ else
74
+ Name::Attribute
75
+ end
83
76
 
84
- token Punctuation, m[5]
85
- token Text::Whitespace, m[6]
77
+ groups Name::Tag, Text::Whitespace, token_class,
78
+ Text::Whitespace, Punctuation, Text::Whitespace
86
79
 
87
80
  push :variable_tag_markup
88
81
  end
89
82
 
83
+ # iteration
84
+ rule %r/
85
+ (for|tablerow)(\s+)
86
+ ([\w-]+)(\s+)
87
+ (in)(\s+)
88
+ (
89
+ (?: [^\s%,\|'"] | (?:"[^"]*"|'[^']*') )+
90
+ )(\s*)
91
+ /x do |m|
92
+ groups Name::Tag, Text::Whitespace, Name::Variable, Text::Whitespace,
93
+ Name::Tag, Text::Whitespace
94
+
95
+ token_class = case m[7]
96
+ when %r/'[^']*'/ then Str::Single
97
+ when %r/"[^"]*"/ then Str::Double
98
+ else
99
+ Name::Variable
100
+ end
101
+ token token_class, m[7]
102
+ token Text::Whitespace, m[8]
103
+ push :tag_markup
104
+ end
105
+
90
106
  # other tags or blocks
91
- rule /([^\s%]+)(\s*)/ do
107
+ rule %r/([^\s%]+)(\s*)/ do
92
108
  groups Name::Tag, Text::Whitespace
93
109
  push :tag_markup
94
110
  end
95
111
  end
96
112
 
97
113
  state :output do
98
- mixin :whitespace
99
- mixin :generic
114
+ rule %r/(\|)(\s*)([a-zA-Z_][^\s}\|:]*)/ do
115
+ groups Punctuation, Text::Whitespace, Name::Function
116
+ push :filters
117
+ end
100
118
 
101
- rule /\}\}/, Punctuation, :pop!
102
- rule /\|/, Punctuation, :filters
119
+ mixin :end_of_tag
120
+ mixin :generic
103
121
  end
104
122
 
105
123
  state :filters do
106
- mixin :whitespace
107
-
108
- rule(/\}\}/) { token Punctuation; reset_stack }
109
-
110
- rule /([^\s\|:]+)(:?)(\s*)/ do
111
- groups Name::Function, Punctuation, Text::Whitespace
112
- push :filter_markup
124
+ rule %r/(\|)(\s*)([a-zA-Z_][^\s%}\|:]*)/ do
125
+ groups Punctuation, Text::Whitespace, Name::Function
113
126
  end
114
- end
115
-
116
- state :filter_markup do
117
- rule /\|/, Punctuation, :pop!
118
127
 
119
128
  mixin :end_of_tag
120
129
  mixin :end_of_block
121
- mixin :default_param_markup
130
+ mixin :variable_param_markup
122
131
  end
123
132
 
124
133
  state :condition do
125
- mixin :end_of_block
126
- mixin :whitespace
127
-
128
- rule /([=!><]=?)/, Operator
129
-
130
- rule /\b((!)|(not\b))/ do
131
- groups nil, Operator, Operator::Word
132
- end
133
-
134
- rule /(contains)/, Operator::Word
134
+ rule %r/([=!]=|[<>]=?)/, Operator
135
+ rule %r/(and|or|contains)\b/, Operator::Word
135
136
 
137
+ mixin :end_of_block
136
138
  mixin :generic
137
- mixin :whitespace
138
139
  end
139
140
 
140
141
  state :when do
141
142
  mixin :end_of_block
142
- mixin :whitespace
143
143
  mixin :generic
144
144
  end
145
145
 
146
- state :operator do
147
- rule /(\s*)((=|!|>|<)=?)(\s*)/ do
148
- groups Text::Whitespace, Operator, nil, Text::Whitespace
149
- pop!
150
- end
151
-
152
- rule /(\s*)(\bcontains\b)(\s*)/ do
153
- groups Text::Whitespace, Operator::Word, Text::Whitespace
154
- pop!
155
- end
156
- end
157
-
158
146
  state :end_of_tag do
159
- rule(/\}\}/) { token Punctuation; reset_stack }
147
+ rule(/-?\}\}/) { token Punctuation; reset_stack }
160
148
  end
161
149
 
162
150
  state :end_of_block do
163
- rule(/%\}/) { token Punctuation; reset_stack }
151
+ rule(/-?%\}/) { token Punctuation; reset_stack }
164
152
  end
165
153
 
166
154
  # states for unknown markup
167
155
  state :param_markup do
168
156
  mixin :whitespace
157
+ mixin :keyword
169
158
  mixin :string
159
+ mixin :number
170
160
 
171
- rule /([^\s=:]+)(\s*)(=|:)/ do
161
+ rule %r/([^\s=:]+)(\s*)(=|:)/ do
172
162
  groups Name::Attribute, Text::Whitespace, Operator
173
163
  end
174
164
 
175
- rule /(\{\{)(\s*)([^\s\}])(\s*)(\}\})/ do
176
- groups Punctuation, Text::Whitespace, nil, Text::Whitespace, Punctuation
177
- end
178
-
179
- mixin :number
180
- mixin :keyword
181
-
182
- rule /,/, Punctuation
165
+ rule %r/[,:]/, Punctuation
183
166
  end
184
167
 
185
168
  state :default_param_markup do
186
169
  mixin :param_markup
187
- rule /./, Text
170
+
171
+ rule %r/\S+/, Text
188
172
  end
189
173
 
190
174
  state :variable_param_markup do
191
175
  mixin :param_markup
192
176
  mixin :variable
193
- rule /./, Text
177
+
178
+ rule %r/\S+/, Text
194
179
  end
195
180
 
196
181
  state :tag_markup do
182
+ rule %r/(reversed)\b/, Name::Attribute
183
+
197
184
  mixin :end_of_block
198
185
  mixin :default_param_markup
199
186
  end
@@ -205,83 +192,94 @@ module Rouge
205
192
 
206
193
  # states for different values types
207
194
  state :keyword do
208
- rule /\b(false|true)\b/, Keyword::Constant
195
+ rule %r/(false|true|nil)\b/, Keyword::Constant
209
196
  end
210
197
 
211
198
  state :variable do
212
- rule /\.(?=\w)/, Punctuation
213
- rule /[a-zA-Z_]\w*\??/, Name::Variable
199
+ rule %r/(empty|blank|forloop\.[^\s%}\|:]+)\b/, Name::Builtin
200
+ rule %r/\.(?=\w)|\[|\]/, Punctuation
201
+ rule %r/(first|last|size)\b/, Name::Function
202
+ rule %r/[a-zA-Z_][\w-]*\??/, Name::Variable
214
203
  end
215
204
 
216
205
  state :string do
217
- rule /'[^']*'/, Str::Single
218
- rule /"[^"]*"/, Str::Double
206
+ rule %r/'[^']*'/, Str::Single
207
+ rule %r/"[^"]*"/, Str::Double
219
208
  end
220
209
 
221
210
  state :number do
222
- rule /\d+\.\d+/, Num::Float
223
- rule /\d+/, Num::Integer
224
- end
225
-
226
- state :array_index do
227
- rule /\[/, Punctuation
228
- rule /\]/, Punctuation
211
+ rule %r/-/, Operator
212
+ rule %r/\d+\.\d+/, Num::Float
213
+ rule %r/\d+/, Num::Integer
229
214
  end
230
215
 
231
216
  state :generic do
232
- mixin :array_index
217
+ mixin :whitespace
233
218
  mixin :keyword
234
219
  mixin :string
235
- mixin :variable
236
220
  mixin :number
221
+ mixin :variable
237
222
  end
238
223
 
239
224
  state :whitespace do
240
- rule /[ \t]+/, Text::Whitespace
225
+ rule %r/[ \t]+/, Text::Whitespace
241
226
  end
242
227
 
243
228
  state :comment do
244
- rule /(\{%)(\s*)(endcomment)(\s*)(%\})/ do
229
+ rule %r/[^\{]+/, Comment
230
+
231
+ rule %r/(\{%-?)(\s*)(endcomment)(\s*)(-?%\})/ do
245
232
  groups Punctuation, Text::Whitespace, Name::Tag, Text::Whitespace, Punctuation
246
233
  reset_stack
247
234
  end
248
235
 
249
- rule /./, Comment
236
+ rule %r/\{/, Comment
250
237
  end
251
238
 
252
239
  state :raw do
253
- rule /[^\{]+/, Text
240
+ rule %r/[^\{]+/, Text
254
241
 
255
- rule /(\{%)(\s*)(endraw)(\s*)(%\})/ do
242
+ rule %r/(\{%-?)(\s*)(endraw)(\s*)(-?%\})/ do
256
243
  groups Punctuation, Text::Whitespace, Name::Tag, Text::Whitespace, Punctuation
257
244
  reset_stack
258
245
  end
259
246
 
260
- rule /\{/, Text
247
+ rule %r/\{/, Text
261
248
  end
262
249
 
263
250
  state :assign do
264
- mixin :whitespace
265
- mixin :end_of_block
251
+ rule %r/=/, Operator
266
252
 
267
- rule /(\s*)(=)(\s*)/ do
268
- groups Text::Whitespace, Operator, Text::Whitespace
253
+ rule %r/(\|)(\s*)([a-zA-Z_][^\s%\|:]*)/ do
254
+ groups Punctuation, Text::Whitespace, Name::Function
255
+ push :filters
269
256
  end
270
257
 
271
- rule /\|/, Punctuation, :filters
272
-
258
+ mixin :end_of_block
273
259
  mixin :generic
274
260
  end
275
261
 
276
262
  state :include do
277
- mixin :whitespace
278
-
279
- rule /([^\.]+)(\.)(html|liquid)/ do
280
- groups Name::Attribute, Punctuation, Name::Attribute
263
+ rule %r/(\{\{-?)(\s*)/ do
264
+ groups Punctuation, Text::Whitespace
265
+ push :output_embed
281
266
  end
282
267
 
268
+ rule %r/(with|for)\b/, Name::Tag
269
+ rule %r/[\/\w-]+(\.[\w-]+)+\b/, Text
270
+
283
271
  mixin :variable_tag_markup
284
272
  end
273
+
274
+ state :output_embed do
275
+ rule %r/(\|)(\s*)([a-zA-Z_][^\s}\|:]*)/ do
276
+ groups Punctuation, Text::Whitespace, Name::Function
277
+ end
278
+
279
+ rule %r/-?\}\}/, Punctuation, :pop!
280
+
281
+ mixin :variable_param_markup
282
+ end
285
283
  end
286
284
  end
287
285
  end