rouge 3.0.0 → 3.18.0

Sign up to get free protection for your applications and to get access to all the features.
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
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Rouge
2
4
  module Lexers
3
5
  load_lexer 'javascript.rb'
@@ -27,7 +29,7 @@ module Rouge
27
29
  start { @html = HTML.new(options) }
28
30
 
29
31
  state :jsx_tags do
30
- rule /</, Punctuation, :jsx_element
32
+ rule %r/</, Punctuation, :jsx_element
31
33
  end
32
34
 
33
35
  state :jsx_internal do
@@ -36,12 +38,12 @@ module Rouge
36
38
  goto :jsx_end_tag
37
39
  end
38
40
 
39
- rule /{/ do
41
+ rule %r/{/ do
40
42
  token Str::Interpol
41
43
  start_embed!
42
44
  end
43
45
 
44
- rule /[^<>{]+/ do
46
+ rule %r/[^<>{]+/ do
45
47
  delegate @html
46
48
  end
47
49
 
@@ -54,29 +56,29 @@ module Rouge
54
56
 
55
57
  state :jsx_tag do
56
58
  mixin :comments_and_whitespace
57
- rule /#{id}/ do |m|
59
+ rule %r/#{id}/ do |m|
58
60
  token tag_token(m[0])
59
61
  end
60
62
 
61
- rule /[.]/, Punctuation
63
+ rule %r/[.]/, Punctuation
62
64
  end
63
65
 
64
66
  state :jsx_end_tag do
65
67
  mixin :jsx_tag
66
- rule />/, Punctuation, :pop!
68
+ rule %r/>/, Punctuation, :pop!
67
69
  end
68
70
 
69
71
  state :jsx_element do
70
- rule /#{id}=/, Name::Attribute, :jsx_attribute
72
+ rule %r/#{id}=/, Name::Attribute, :jsx_attribute
71
73
  mixin :jsx_tag
72
- rule />/ do token Punctuation; goto :jsx_internal end
74
+ rule %r/>/ do token Punctuation; goto :jsx_internal end
73
75
  rule %r(/>), Punctuation, :pop!
74
76
  end
75
77
 
76
78
  state :jsx_attribute do
77
- rule /"(\\[\\"]|[^"])*"/, Str::Double, :pop!
78
- rule /'(\\[\\']|[^'])*'/, Str::Single, :pop!
79
- rule /{/ do
79
+ rule %r/"(\\[\\"]|[^"])*"/, Str::Double, :pop!
80
+ rule %r/'(\\[\\']|[^'])*'/, Str::Single, :pop!
81
+ rule %r/{/ do
80
82
  token Str::Interpol
81
83
  pop!
82
84
  start_embed!
@@ -84,15 +86,15 @@ module Rouge
84
86
  end
85
87
 
86
88
  state :jsx_embed_root do
87
- rule /[.][.][.]/, Punctuation
88
- rule /}/, Str::Interpol, :pop!
89
+ rule %r/[.][.][.]/, Punctuation
90
+ rule %r/}/, Str::Interpol, :pop!
89
91
  mixin :jsx_embed
90
92
  end
91
93
 
92
94
  state :jsx_embed do
93
- rule /{/ do delegate @embed; push :jsx_embed end
94
- rule /}/ do delegate @embed; pop! end
95
- rule /[^{}]+/ do
95
+ rule %r/{/ do delegate @embed; push :jsx_embed end
96
+ rule %r/}/ do delegate @embed; pop! end
97
+ rule %r/[^{}]+/ do
96
98
  delegate @embed
97
99
  end
98
100
  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
@@ -15,42 +16,153 @@ module Rouge
15
16
  end
16
17
 
17
18
  BUILTINS = /\b(?:
18
- applicable | assert | convert
19
- | dlopen | dlsym | edit
20
- | eps | error | exit
21
- | finalizer | hash | im
22
- | Inf | invoke | is
23
- | isa | isequal | load
24
- | method_exists | Nan | new
25
- | ntuple | pi | promote
26
- | promote_type | realmax | realmin
27
- | sizeof | subtype | system
28
- | throw | tuple | typemax
29
- | typemin | typeof | uid
30
- | whos
19
+ true | false | missing | nothing
20
+ | Inf | Inf16 | Inf32 | Inf64
21
+ | NaN | NaN16 | NaN32 | NaN64
22
+ | stdout | stderr | stdin | devnull
23
+ | pi | π | ℯ | im
24
+ | ARGS | C_NULL | ENV | ENDIAN_BOM
25
+ | VERSION | undef | (LOAD|DEPOT)_PATH
31
26
  )\b/x
32
27
 
33
28
  KEYWORDS = /\b(?:
34
29
  function | return | module | import | export
35
30
  | if | else | elseif | end | for
36
- | in | while | try | catch | super
37
- | const
31
+ | in | isa | while | try | catch
32
+ | const | local | global | using | struct
33
+ | mutable struct | abstract type | finally
34
+ | begin | do | quote | macro | for outer
35
+ | where
38
36
  )\b/x
39
37
 
38
+ # NOTE: The list of types was generated automatically using the following script:
39
+ # using Pkg, InteractiveUtils
40
+ #
41
+ # allnames = [names(Core); names(Base, imported=true)]
42
+ #
43
+ # for stdlib in readdir(Pkg.Types.stdlib_dir())
44
+ # mod = Symbol(basename(stdlib))
45
+ # @eval begin
46
+ # using $mod
47
+ # append!(allnames, names($mod))
48
+ # end
49
+ # end
50
+ #
51
+ # sort!(unique!(allnames))
52
+ #
53
+ # i = 1
54
+ # for sym in allnames
55
+ # global i # needed at the top level, e.g. in the REPL
56
+ # isdefined(Main, sym) || continue
57
+ # getfield(which(Main, sym), sym) isa Type || continue
58
+ # sym === :(=>) && continue # Actually an alias for Pair
59
+ # print("| ", sym)
60
+ # i % 3 == 0 ? println() : print(" ") # print 3 to a line
61
+ # i += 1
62
+ # end
40
63
  TYPES = /\b(?:
41
- Int | UInt | Int8
42
- | UInt8 | Int16 | UInt16
43
- | Int32 | UInt32 | Int64
44
- | UInt64 | Int128 | UInt128
45
- | Float16 | Float32 | Float64
46
- | Bool | Inf | Inf16
47
- | Inf32 | NaN | NaN16
48
- | NaN32 | BigInt | BigFloat
49
- | Char | ASCIIString | UTF8String
50
- | UTF16String | UTF32String | AbstractString
51
- | WString | String | Regex
52
- | RegexMatch | Complex64 | Complex128
53
- | Any | Nothing | None
64
+ ARPACKException | AbstractArray | AbstractChannel
65
+ | AbstractChar | AbstractDict | AbstractDisplay
66
+ | AbstractFloat | AbstractIrrational | AbstractLogger
67
+ | AbstractMatrix | AbstractREPL | AbstractRNG
68
+ | AbstractRange | AbstractSerializer | AbstractSet
69
+ | AbstractSparseArray | AbstractSparseMatrix | AbstractSparseVector
70
+ | AbstractString | AbstractUnitRange | AbstractVecOrMat
71
+ | AbstractVector | AbstractWorkerPool | Adjoint
72
+ | Any | ArgumentError | Array
73
+ | AssertionError | Base64DecodePipe | Base64EncodePipe
74
+ | BasicREPL | Bidiagonal | BigFloat
75
+ | BigInt | BitArray | BitMatrix
76
+ | BitSet | BitVector | Bool
77
+ | BoundsError | BunchKaufman | CachingPool
78
+ | CapturedException | CartesianIndex | CartesianIndices
79
+ | Cchar | Cdouble | Cfloat
80
+ | Channel | Char | Cholesky
81
+ | CholeskyPivoted | Cint | Cintmax_t
82
+ | Clong | Clonglong | ClusterManager
83
+ | Cmd | Colon | Complex
84
+ | ComplexF16 | ComplexF32 | ComplexF64
85
+ | CompositeException | Condition | ConsoleLogger
86
+ | Cptrdiff_t | Cshort | Csize_t
87
+ | Cssize_t | Cstring | Cuchar
88
+ | Cuint | Cuintmax_t | Culong
89
+ | Culonglong | Cushort | Cvoid
90
+ | Cwchar_t | Cwstring | DataType
91
+ | Date | DateFormat | DatePeriod
92
+ | DateTime | Day | DenseArray
93
+ | DenseMatrix | DenseVecOrMat | DenseVector
94
+ | Diagonal | Dict | DimensionMismatch
95
+ | Dims | DivideError | DomainError
96
+ | EOFError | Eigen | Enum
97
+ | ErrorException | Exception | ExponentialBackOff
98
+ | Expr | FDWatcher | Factorization
99
+ | FileMonitor | Float16 | Float32
100
+ | Float64 | FolderMonitor | Function
101
+ | GeneralizedEigen | GeneralizedSVD | GeneralizedSchur
102
+ | GenericArray | GenericDict | GenericSet
103
+ | GenericString | GitConfig | GitRepo
104
+ | GlobalRef | HMAC_CTX | HTML
105
+ | Hermitian | Hessenberg | Hour
106
+ | IO | IOBuffer | IOContext
107
+ | IOStream | IPAddr | IPv4
108
+ | IPv6 | IdDict | IndexCartesian
109
+ | IndexLinear | IndexStyle | InexactError
110
+ | InitError | Int | Int128
111
+ | Int16 | Int32 | Int64
112
+ | Int8 | Integer | InterruptException
113
+ | InvalidStateException | Irrational | KeyError
114
+ | LAPACKException | LDLt | LQ
115
+ | LU | LinRange | LineEditREPL
116
+ | LineNumberNode | LinearIndices | LoadError
117
+ | LogLevel | LowerTriangular | MIME
118
+ | Matrix | MersenneTwister | Method
119
+ | MethodError | Microsecond | Millisecond
120
+ | Minute | Missing | MissingException
121
+ | Module | Month | NTuple
122
+ | NamedTuple | Nanosecond | Nothing
123
+ | NullLogger | Number | OrdinalRange
124
+ | OutOfMemoryError | OverflowError | PackageMode
125
+ | PackageSpec | Pair | PartialQuickSort
126
+ | Period | PermutedDimsArray | Pipe
127
+ | PollingFileWatcher | PosDefException | ProcessExitedException
128
+ | Ptr | QR | QRPivoted
129
+ | QuoteNode | RandomDevice | RankDeficientException
130
+ | Rational | RawFD | ReadOnlyMemoryError
131
+ | Real | ReentrantLock | Ref
132
+ | Regex | RegexMatch | RemoteChannel
133
+ | RemoteException | RoundingMode | SHA1_CTX
134
+ | SHA224_CTX | SHA256_CTX | SHA2_224_CTX
135
+ | SHA2_256_CTX | SHA2_384_CTX | SHA2_512_CTX
136
+ | SHA384_CTX | SHA3_224_CTX | SHA3_256_CTX
137
+ | SHA3_384_CTX | SHA3_512_CTX | SHA512_CTX
138
+ | SVD | Schur | Second
139
+ | SegmentationFault | Serializer | Set
140
+ | SharedArray | SharedMatrix | SharedVector
141
+ | Signed | SimpleLogger | SingularException
142
+ | Some | SparseMatrixCSC | SparseVector
143
+ | StackOverflowError | StepRange | StepRangeLen
144
+ | StreamREPL | StridedArray | StridedMatrix
145
+ | StridedVecOrMat | StridedVector | String
146
+ | StringIndexError | SubArray | SubString
147
+ | SubstitutionString | SymTridiagonal | Symbol
148
+ | Symmetric | SystemError | TCPSocket
149
+ | Task | TestSetException | Text
150
+ | TextDisplay | Time | TimePeriod
151
+ | TimeType | TimeZone | Timer
152
+ | Transpose | Tridiagonal | Tuple
153
+ | Type | TypeError | TypeVar
154
+ | UDPSocket | UInt | UInt128
155
+ | UInt16 | UInt32 | UInt64
156
+ | UInt8 | UTC | UUID
157
+ | UndefInitializer | UndefKeywordError | UndefRefError
158
+ | UndefVarError | UniformScaling | Union
159
+ | UnionAll | UnitLowerTriangular | UnitRange
160
+ | UnitUpperTriangular | Unsigned | UpgradeLevel
161
+ | UpperTriangular | Val | Vararg
162
+ | VecElement | VecOrMat | Vector
163
+ | VersionNumber | WeakKeyDict | WeakRef
164
+ | Week | WorkerConfig | WorkerPool
165
+ | Year
54
166
  )\b/x
55
167
 
56
168
  OPERATORS = / \+ | = | - | \* | \/
@@ -63,109 +175,115 @@ module Rouge
63
175
  | <= | ≤ | >= | ≥ | \.
64
176
  | :: | <: | -> | \? | \.\*
65
177
  | \.\^ | \.\\ | \.\/ | \\ | <
66
- | >
178
+ | > | ÷ | >: | : | ===
179
+ | !== | =>
67
180
  /x
68
181
 
69
- PUNCTUATION = / [ \[ \] { } : \( \) , ; @ ] /x
182
+ PUNCTUATION = /[\[\]{}\(\),;]/
70
183
 
71
184
 
72
185
  state :root do
73
- rule /\n/, Text
74
- rule /[^\S\n]+/, Text
75
- rule /#=/, Comment::Multiline, :blockcomment
76
- rule /#.*$/, Comment
186
+ rule %r/\n/, Text
187
+ rule %r/[^\S\n]+/, Text
188
+ rule %r/#=/, Comment::Multiline, :blockcomment
189
+ rule %r/#.*$/, Comment
77
190
  rule OPERATORS, Operator
78
- rule /\\\n/, Text
79
- rule /\\/, Text
191
+ rule %r/\\\n/, Text
192
+ rule %r/\\/, Text
80
193
 
81
194
 
82
- # functions
83
- rule /(function)((?:\s|\\\s)+)/ do
195
+ # functions and macros
196
+ rule %r/(function|macro)((?:\s|\\\s)+)/ do
84
197
  groups Keyword, Name::Function
85
198
  push :funcname
86
199
  end
87
200
 
88
201
  # types
89
- rule /(type|typealias|abstract)((?:\s|\\\s)+)/ do
202
+ rule %r/((?:mutable )?struct|(?:abstract|primitive) type)((?:\s|\\\s)+)/ do
90
203
  groups Keyword, Name::Class
91
204
  push :typename
92
205
  end
93
206
  rule TYPES, Keyword::Type
94
207
 
95
208
  # keywords
96
- rule /(local|global|const)\b/, Keyword::Declaration
209
+ rule %r/(local|global|const)\b/, Keyword::Declaration
97
210
  rule KEYWORDS, Keyword
98
211
 
212
+ # TODO: end is a builtin when inside of an indexing expression
99
213
  rule BUILTINS, Name::Builtin
100
214
 
215
+ # TODO: symbols
216
+
101
217
  # backticks
102
- rule /`.*?`/, Literal::String::Backtick
218
+ rule %r/`.*?`/, Literal::String::Backtick
103
219
 
104
220
  # chars
105
- rule /'(\\.|\\[0-7]{1,3}|\\x[a-fA-F0-9]{1,3}|\\u[a-fA-F0-9]{1,4}|\\U[a-fA-F0-9]{1,6}|[^\\\'\n])'/, Literal::String::Char
221
+ rule %r/'(\\.|\\[0-7]{1,3}|\\x[a-fA-F0-9]{1,3}|\\u[a-fA-F0-9]{1,4}|\\U[a-fA-F0-9]{1,6}|[^\\\'\n])'/, Literal::String::Char
106
222
 
107
223
  # try to match trailing transpose
108
- rule /(?<=[.\w)\]])\'+/, Operator
224
+ rule %r/(?<=[.\w)\]])\'+/, Operator
109
225
 
110
226
  # strings
111
- rule /(?:[IL])"/, Literal::String, :string
112
- rule /[E]?"/, Literal::String, :string
227
+ # TODO: triple quoted string literals
228
+ # TODO: Detect string interpolation
229
+ rule %r/(?:[IL])"/, Literal::String, :string
230
+ rule %r/[E]?"/, Literal::String, :string
113
231
 
114
232
  # names
115
- rule /@[\w.]+/, Name::Decorator
116
- rule /(?:[a-zA-Z_\u00A1-\uffff]|[\u1000-\u10ff])(?:[a-zA-Z_0-9\u00A1-\uffff]|[\u1000-\u10ff])*!*/, Name
233
+ rule %r/@[\w.]+/, Name::Decorator
234
+ rule %r/(?:[a-zA-Z_\u00A1-\uffff]|[\u1000-\u10ff])(?:[a-zA-Z_0-9\u00A1-\uffff]|[\u1000-\u10ff])*!*/, Name
117
235
 
118
236
  rule PUNCTUATION, Other
119
237
 
120
238
  # numbers
121
- rule /(\d+(_\d+)+\.\d*|\d*\.\d+(_\d+)+)([eEf][+-]?[0-9]+)?/, Literal::Number::Float
122
- rule /(\d+\.\d*|\d*\.\d+)([eEf][+-]?[0-9]+)?/, Literal::Number::Float
123
- rule /\d+(_\d+)+[eEf][+-]?[0-9]+/, Literal::Number::Float
124
- rule /\d+[eEf][+-]?[0-9]+/, Literal::Number::Float
125
- rule /0b[01]+(_[01]+)+/, Literal::Number::Bin
126
- rule /0b[01]+/, Literal::Number::Bin
127
- rule /0o[0-7]+(_[0-7]+)+/, Literal::Number::Oct
128
- rule /0o[0-7]+/, Literal::Number::Oct
129
- rule /0x[a-fA-F0-9]+(_[a-fA-F0-9]+)+/, Literal::Number::Hex
130
- rule /0x[a-fA-F0-9]+/, Literal::Number::Hex
131
- rule /\d+(_\d+)+/, Literal::Number::Integer
132
- rule /\d+/, Literal::Number::Integer
239
+ rule %r/(\d+(_\d+)+\.\d*|\d*\.\d+(_\d+)+)([eEf][+-]?[0-9]+)?/, Literal::Number::Float
240
+ rule %r/(\d+\.\d*|\d*\.\d+)([eEf][+-]?[0-9]+)?/, Literal::Number::Float
241
+ rule %r/\d+(_\d+)+[eEf][+-]?[0-9]+/, Literal::Number::Float
242
+ rule %r/\d+[eEf][+-]?[0-9]+/, Literal::Number::Float
243
+ rule %r/0b[01]+(_[01]+)+/, Literal::Number::Bin
244
+ rule %r/0b[01]+/, Literal::Number::Bin
245
+ rule %r/0o[0-7]+(_[0-7]+)+/, Literal::Number::Oct
246
+ rule %r/0o[0-7]+/, Literal::Number::Oct
247
+ rule %r/0x[a-fA-F0-9]+(_[a-fA-F0-9]+)+/, Literal::Number::Hex
248
+ rule %r/0x[a-fA-F0-9]+/, Literal::Number::Hex
249
+ rule %r/\d+(_\d+)+/, Literal::Number::Integer
250
+ rule %r/\d+/, Literal::Number::Integer
133
251
  end
134
252
 
135
253
 
136
254
  state :funcname do
137
- rule /[a-zA-Z_]\w*/, Name::Function, :pop!
138
- rule /\([^\s\w{]{1,2}\)/, Operator, :pop!
139
- rule /[^\s\w{]{1,2}/, Operator, :pop!
255
+ rule %r/[a-zA-Z_]\w*/, Name::Function, :pop!
256
+ rule %r/\([^\s\w{]{1,2}\)/, Operator, :pop!
257
+ rule %r/[^\s\w{]{1,2}/, Operator, :pop!
140
258
  end
141
259
 
142
260
  state :typename do
143
- rule /[a-zA-Z_]\w*/, Name::Class, :pop!
261
+ rule %r/[a-zA-Z_]\w*/, Name::Class, :pop!
144
262
  end
145
263
 
146
264
  state :stringescape do
147
- rule /\\([\\abfnrtv"\']|\n|N\{.*?\}|u[a-fA-F0-9]{4}|U[a-fA-F0-9]{8}|x[a-fA-F0-9]{2}|[0-7]{1,3})/,
265
+ rule %r/\\([\\abfnrtv"\']|\n|N\{.*?\}|u[a-fA-F0-9]{4}|U[a-fA-F0-9]{8}|x[a-fA-F0-9]{2}|[0-7]{1,3})/,
148
266
  Literal::String::Escape
149
267
  end
150
268
 
151
269
  state :blockcomment do
152
- rule /[^=#]/, Comment::Multiline
153
- rule /#=/, Comment::Multiline, :blockcomment
154
- rule /\=#/, Comment::Multiline, :pop!
155
- rule /[=#]/, Comment::Multiline
270
+ rule %r/[^=#]/, Comment::Multiline
271
+ rule %r/#=/, Comment::Multiline, :blockcomment
272
+ rule %r/\=#/, Comment::Multiline, :pop!
273
+ rule %r/[=#]/, Comment::Multiline
156
274
  end
157
275
 
158
276
  state :string do
159
277
  mixin :stringescape
160
278
 
161
- rule /"/, Literal::String, :pop!
162
- rule /\\\\|\\"|\\\n/, Literal::String::Escape # included here for raw strings
163
- rule /\$(\(\w+\))?[-#0 +]*([0-9]+|[*])?(\.([0-9]+|[*]))?/, Literal::String::Interpol
164
- rule /[^\\"$]+/, Literal::String
279
+ rule %r/"/, Literal::String, :pop!
280
+ rule %r/\\\\|\\"|\\\n/, Literal::String::Escape # included here for raw strings
281
+ rule %r/\$(\(\w+\))?[-#0 +]*([0-9]+|[*])?(\.([0-9]+|[*]))?/, Literal::String::Interpol
282
+ rule %r/[^\\"$]+/, Literal::String
165
283
  # quotes, dollar signs, and backslashes must be parsed one at a time
166
- rule /["\\]/, Literal::String
284
+ rule %r/["\\]/, Literal::String
167
285
  # unhandled string formatting sign
168
- rule /\$/, Literal::String
286
+ rule %r/\$/, Literal::String
169
287
  end
170
288
  end
171
289
  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,7 +10,7 @@ module Rouge
9
10
  desc "Kotlin Programming Language (http://kotlinlang.org)"
10
11
 
11
12
  tag 'kotlin'
12
- filenames '*.kt'
13
+ filenames '*.kt', '*.kts'
13
14
  mimetypes 'text/x-kotlin'
14
15
 
15
16
  keywords = %w(
@@ -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'//.*?\n', 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