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
@@ -31,8 +32,8 @@ module Rouge
31
32
  end
32
33
 
33
34
  state :comments_and_whitespace do
34
- rule /\s+/, Text
35
- rule /<!--/, Comment # really...?
35
+ rule %r/\s+/, Text
36
+ rule %r/<!--/, Comment # really...?
36
37
  rule %r(//.*?$), Comment::Single
37
38
  rule %r(/[*]), Comment::Multiline, :multiline_comment
38
39
  end
@@ -45,12 +46,12 @@ module Rouge
45
46
  goto :regex
46
47
  end
47
48
 
48
- rule /[{]/ do
49
+ rule %r/[{]/ do
49
50
  token Punctuation
50
51
  goto :object
51
52
  end
52
53
 
53
- rule //, Text, :pop!
54
+ rule %r//, Text, :pop!
54
55
  end
55
56
 
56
57
  state :regex do
@@ -61,62 +62,59 @@ module Rouge
61
62
 
62
63
  rule %r([^/]\n), Error, :pop!
63
64
 
64
- rule /\n/, Error, :pop!
65
- rule /\[\^/, Str::Escape, :regex_group
66
- rule /\[/, Str::Escape, :regex_group
67
- rule /\\./, Str::Escape
65
+ rule %r/\n/, Error, :pop!
66
+ rule %r/\[\^/, Str::Escape, :regex_group
67
+ rule %r/\[/, Str::Escape, :regex_group
68
+ rule %r/\\./, Str::Escape
68
69
  rule %r{[(][?][:=<!]}, Str::Escape
69
- rule /[{][\d,]+[}]/, Str::Escape
70
- rule /[()?]/, Str::Escape
71
- rule /./, Str::Regex
70
+ rule %r/[{][\d,]+[}]/, Str::Escape
71
+ rule %r/[()?]/, Str::Escape
72
+ rule %r/./, Str::Regex
72
73
  end
73
74
 
74
75
  state :regex_end do
75
- rule /[gim]+/, Str::Regex, :pop!
76
+ rule %r/[gimuy]+/, Str::Regex, :pop!
76
77
  rule(//) { pop! }
77
78
  end
78
79
 
79
80
  state :regex_group do
80
81
  # specially highlight / in a group to indicate that it doesn't
81
82
  # close the regex
82
- rule /\//, Str::Escape
83
+ rule %r(/), Str::Escape
83
84
 
84
85
  rule %r([^/]\n) do
85
86
  token Error
86
87
  pop! 2
87
88
  end
88
89
 
89
- rule /\]/, Str::Escape, :pop!
90
- rule /\\./, Str::Escape
91
- rule /./, Str::Regex
90
+ rule %r/\]/, Str::Escape, :pop!
91
+ rule %r/\\./, Str::Escape
92
+ rule %r/./, Str::Regex
92
93
  end
93
94
 
94
95
  state :bad_regex do
95
- rule /[^\n]+/, Error, :pop!
96
+ rule %r/[^\n]+/, Error, :pop!
96
97
  end
97
98
 
98
99
  def self.keywords
99
100
  @keywords ||= Set.new %w(
100
- for in of while do break return continue switch case default
101
- if else throw try catch finally new delete typeof instanceof
102
- void this yield import export from as async super this
101
+ as async await break case catch continue debugger default delete
102
+ do else export finally from for if import in instanceof new of
103
+ return super switch this throw try typeof void while yield
103
104
  )
104
105
  end
105
106
 
106
107
  def self.declarations
107
108
  @declarations ||= Set.new %w(
108
109
  var let const with function class
109
- extends constructor get set
110
+ extends constructor get set static
110
111
  )
111
112
  end
112
113
 
113
114
  def self.reserved
114
115
  @reserved ||= Set.new %w(
115
- abstract boolean byte char debugger double enum
116
- final float goto implements int interface
117
- long native package private protected public short static
118
- synchronized throws transient volatile
119
- eval arguments await
116
+ enum implements interface
117
+ package private protected public
120
118
  )
121
119
  end
122
120
 
@@ -146,34 +144,34 @@ module Rouge
146
144
  id = self.id_regex
147
145
 
148
146
  state :root do
149
- rule /\A\s*#!.*?\n/m, Comment::Preproc, :statement
147
+ rule %r/\A\s*#!.*?\n/m, Comment::Preproc, :statement
150
148
  rule %r((?<=\n)(?=\s|/|<!--)), Text, :expr_start
151
149
  mixin :comments_and_whitespace
152
150
  rule %r(\+\+ | -- | ~ | && | \|\| | \\(?=\n) | << | >>>? | ===
153
151
  | !== )x,
154
152
  Operator, :expr_start
155
153
  rule %r([-<>+*%&|\^/!=]=?), Operator, :expr_start
156
- rule /[(\[,]/, Punctuation, :expr_start
157
- rule /;/, Punctuation, :statement
158
- rule /[)\].]/, Punctuation
154
+ rule %r/[(\[,]/, Punctuation, :expr_start
155
+ rule %r/;/, Punctuation, :statement
156
+ rule %r/[)\].]/, Punctuation
159
157
 
160
- rule /`/ do
158
+ rule %r/`/ do
161
159
  token Str::Double
162
160
  push :template_string
163
161
  end
164
162
 
165
- rule /[?]/ do
163
+ rule %r/[?]/ do
166
164
  token Punctuation
167
165
  push :ternary
168
166
  push :expr_start
169
167
  end
170
168
 
171
- rule /(\@)(\w+)?/ do
169
+ rule %r/(\@)(\w+)?/ do
172
170
  groups Punctuation, Name::Decorator
173
171
  push :expr_start
174
172
  end
175
173
 
176
- rule /[{}]/, Punctuation, :statement
174
+ rule %r/[{}]/, Punctuation, :statement
177
175
 
178
176
  rule id do |m|
179
177
  if self.class.keywords.include? m[0]
@@ -193,42 +191,41 @@ module Rouge
193
191
  end
194
192
  end
195
193
 
196
- rule /[0-9][0-9]*\.[0-9]+([eE][0-9]+)?[fd]?/, Num::Float
197
- rule /0x[0-9a-fA-F]+/i, Num::Hex
198
- rule /0o[0-7][0-7_]*/i, Num::Oct
199
- rule /0b[01][01_]*/i, Num::Bin
200
- rule /[0-9]+/, Num::Integer
194
+ rule %r/[0-9][0-9]*\.[0-9]+([eE][0-9]+)?[fd]?/, Num::Float
195
+ rule %r/0x[0-9a-fA-F]+/i, Num::Hex
196
+ rule %r/0o[0-7][0-7_]*/i, Num::Oct
197
+ rule %r/0b[01][01_]*/i, Num::Bin
198
+ rule %r/[0-9]+/, Num::Integer
201
199
 
202
- rule /"/, Str::Double, :dq
203
- rule /'/, Str::Single, :sq
204
- rule /:/, Punctuation
200
+ rule %r/"/, Str::Delimiter, :dq
201
+ rule %r/'/, Str::Delimiter, :sq
202
+ rule %r/:/, Punctuation
205
203
  end
206
204
 
207
205
  state :dq do
208
- rule /[^\\"]+/, Str::Double
209
- rule /\\n/, Str::Escape
210
- rule /\\"/, Str::Escape
211
- rule /"/, Str::Double, :pop!
206
+ rule %r/\\[\\nrt"]?/, Str::Escape
207
+ rule %r/[^\\"]+/, Str::Double
208
+ rule %r/"/, Str::Delimiter, :pop!
212
209
  end
213
210
 
214
211
  state :sq do
215
- rule /[^\\']+/, Str::Single
216
- rule /\\'/, Str::Escape
217
- rule /'/, Str::Single, :pop!
212
+ rule %r/\\[\\nrt']?/, Str::Escape
213
+ rule %r/[^\\']+/, Str::Single
214
+ rule %r/'/, Str::Delimiter, :pop!
218
215
  end
219
216
 
220
217
  # braced parts that aren't object literals
221
218
  state :statement do
222
- rule /case\b/ do
219
+ rule %r/case\b/ do
223
220
  token Keyword
224
221
  goto :expr_start
225
222
  end
226
223
 
227
- rule /(#{id})(\s*)(:)/ do
224
+ rule %r/(#{id})(\s*)(:)/ do
228
225
  groups Name::Label, Text, Punctuation
229
226
  end
230
227
 
231
- rule /[{}]/, Punctuation
228
+ rule %r/[{}]/, Punctuation
232
229
 
233
230
  mixin :expr_start
234
231
  end
@@ -237,28 +234,28 @@ module Rouge
237
234
  state :object do
238
235
  mixin :comments_and_whitespace
239
236
 
240
- rule /[{]/ do
237
+ rule %r/[{]/ do
241
238
  token Punctuation
242
239
  push
243
240
  end
244
241
 
245
- rule /[}]/ do
242
+ rule %r/[}]/ do
246
243
  token Punctuation
247
244
  goto :statement
248
245
  end
249
246
 
250
- rule /(#{id})(\s*)(:)/ do
247
+ rule %r/(#{id})(\s*)(:)/ do
251
248
  groups Name::Attribute, Text, Punctuation
252
249
  push :expr_start
253
250
  end
254
251
 
255
- rule /:/, Punctuation
252
+ rule %r/:/, Punctuation
256
253
  mixin :root
257
254
  end
258
255
 
259
256
  # ternary expressions, where <id>: is not a label!
260
257
  state :ternary do
261
- rule /:/ do
258
+ rule %r/:/ do
262
259
  token Punctuation
263
260
  goto :expr_start
264
261
  end
@@ -268,13 +265,13 @@ module Rouge
268
265
 
269
266
  # template strings
270
267
  state :template_string do
271
- rule /\${/, Punctuation, :template_string_expr
272
- rule /`/, Str::Double, :pop!
273
- rule /(\\\\|\\[\$`]|[^\$`]|\$(?!{))*/, Str::Double
268
+ rule %r/\${/, Punctuation, :template_string_expr
269
+ rule %r/`/, Str::Double, :pop!
270
+ rule %r/(\\\\|\\[\$`]|[^\$`]|\$(?!{))*/, Str::Double
274
271
  end
275
272
 
276
273
  state :template_string_expr do
277
- rule /}/, Punctuation, :pop!
274
+ rule %r/}/, Punctuation, :pop!
278
275
  mixin :root
279
276
  end
280
277
  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
@@ -36,82 +37,89 @@ module Rouge
36
37
 
37
38
  state :root do
38
39
  # Comments
39
- rule /{#/, Comment, :comment
40
+ rule %r/{#/, Comment, :comment
41
+ rule %r/##.*/, Comment
40
42
 
41
43
  # Statements
42
- rule /\{\%/ do
44
+ rule %r/\{\%/ do
43
45
  token Comment::Preproc
44
46
  push :statement
45
47
  end
46
48
 
47
49
  # Expressions
48
- rule /\{\{/ do
50
+ rule %r/\{\{/ do
49
51
  token Comment::Preproc
50
52
  push :expression
51
53
  end
52
54
 
53
- rule(/(.+?)(?=\\|{{|{%|{#)/m) { delegate parent }
55
+ rule(/(.+?)(?=\\|{{|{%|{#|##)/m) { delegate parent }
54
56
  rule(/.+/m) { delegate parent }
55
57
  end
56
58
 
57
59
  state :filter do
58
60
  # Filters are called like variable|foo(arg1, ...)
59
- rule /(\|)(\w+)/ do
61
+ rule %r/(\|\s*)(\w+)/ do
60
62
  groups Operator, Name::Function
61
63
  end
62
64
  end
63
65
 
64
66
  state :function do
65
- rule /(\w+)(\()/ do
67
+ rule %r/(\w+)(\()/ do
66
68
  groups Name::Function, Punctuation
67
69
  end
68
70
  end
69
71
 
70
72
  state :text do
71
- rule /\s+/m, Text
73
+ rule %r/\s+/m, Text
72
74
  end
73
75
 
74
76
  state :literal do
75
77
  # Strings
76
- rule /"(\\.|.)*?"/, Str::Double
77
- rule /'(\\.|.)*?'/, Str::Single
78
+ rule %r/"(\\.|.)*?"/, Str::Double
79
+ rule %r/'(\\.|.)*?'/, Str::Single
78
80
 
79
81
  # Numbers
80
- rule /\d+(?=}\s)/, Num
82
+ rule %r/\d+(?=}\s)/, Num
81
83
 
82
84
  # Arithmetic operators (+, -, *, **, //, /)
83
85
  # TODO : implement modulo (%)
84
- rule /(\+|\-|\*|\/\/?|\*\*?)/, Operator
86
+ rule %r/(\+|\-|\*|\/\/?|\*\*?|=)/, Operator
85
87
 
86
88
  # Comparisons operators (<=, <, >=, >, ==, ===, !=)
87
- rule /(<=?|>=?|===?|!=)/, Operator
89
+ rule %r/(<=?|>=?|===?|!=)/, Operator
88
90
 
89
91
  # Punctuation (the comma, [], ())
90
- rule /,/, Punctuation
91
- rule /\[/, Punctuation
92
- rule /\]/, Punctuation
93
- rule /\(/, Punctuation
94
- rule /\)/, Punctuation
92
+ rule %r/,/, Punctuation
93
+ rule %r/\[/, Punctuation
94
+ rule %r/\]/, Punctuation
95
+ rule %r/\(/, Punctuation
96
+ rule %r/\)/, Punctuation
95
97
  end
96
98
 
97
99
  state :comment do
98
- rule(/[^{#]+/m) { token Comment }
100
+ rule %r/[^#]+/m, Comment
99
101
  rule(/#}/) { token Comment; pop! }
102
+ rule %r/#/, Comment
100
103
  end
101
104
 
102
105
  state :expression do
103
- rule /\w+\.?/m, Name::Variable
106
+ rule %r/\w+\.?/m, Name::Variable
104
107
 
105
108
  mixin :filter
106
109
  mixin :function
107
110
  mixin :literal
108
111
  mixin :text
109
112
 
110
- rule /%}|}}/, Comment::Preproc, :pop!
113
+ rule %r/%}|}}/, Comment::Preproc, :pop!
111
114
  end
112
115
 
113
116
  state :statement do
114
- rule /(\w+\.?)/ do |m|
117
+ rule %r/(raw|verbatim)(\s+)(\%\})/ do
118
+ groups Keyword, Text, Comment::Preproc
119
+ goto :raw
120
+ end
121
+
122
+ rule %r/(\w+\.?)/ do |m|
115
123
  if self.class.keywords.include?(m[0])
116
124
  groups Keyword
117
125
  elsif self.class.pseudo_keywords.include?(m[0])
@@ -130,7 +138,16 @@ module Rouge
130
138
  mixin :literal
131
139
  mixin :text
132
140
 
133
- rule /\%\}/, Comment::Preproc, :pop!
141
+ rule %r/\%\}/, Comment::Preproc, :pop!
142
+ end
143
+
144
+ state :raw do
145
+ rule %r{(\{\%)(\s+)(endverbatim|endraw)(\s+)(\%\})} do
146
+ groups Comment::Preproc, Text, Keyword, Text, Comment::Preproc
147
+ pop!
148
+ end
149
+
150
+ rule %r/(.+?)/m, Text
134
151
  end
135
152
  end
136
153
  end
@@ -0,0 +1,55 @@
1
+ # -*- coding: utf-8 -*- #
2
+ # frozen_string_literal: true
3
+
4
+ module Rouge
5
+ module Lexers
6
+ class JSL < RegexLexer
7
+ title "JSL"
8
+ desc "The JMP Scripting Language (JSL) (jmp.com)"
9
+
10
+ tag 'jsl'
11
+ filenames '*.jsl'
12
+
13
+ state :root do
14
+ rule %r/\s+/m, Text::Whitespace
15
+
16
+ rule %r(//.*?$), Comment::Single
17
+ rule %r(/\*.*?\*/)m, Comment::Multiline
18
+
19
+ # messages
20
+ rule %r/(<<)(.*?)(\(|;)/ do |m|
21
+ groups Operator, Name::Function, Punctuation
22
+ end
23
+
24
+ # covers built-in and custom functions
25
+ rule %r/([a-z_][\w\s'%.\\]*)(\()/i do |m|
26
+ groups Keyword, Punctuation
27
+ end
28
+
29
+ rule %r/\b[+-]?(?:[0-9]+(?:\.[0-9]+)?|\.[0-9]+|\.)(?:e[+-]?[0-9]+)?i?\b/i, Num
30
+
31
+ rule %r/\d{2}(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)\d{2}(\d{2})?(:\d{2}:\d{2}(:\d{2}(\.\d*)?)?)?/i, Literal::Date
32
+
33
+ rule %r/::[a-z_][\w\s'%.\\]*/i, Name::Variable
34
+ rule %r/:\w+/, Name
35
+ rule %r/[a-z_][\w\s'%.\\]*/i, Name::Variable
36
+ rule %r/"(?:\\!"|[^"])*?"n/m, Name::Variable
37
+
38
+ rule %r/(")(\\\[)(.*?)(\]\\)(")/m do
39
+ groups Str::Double, Str::Escape, Str::Double, Str::Escape, Str::Double # escaped string
40
+ end
41
+ rule %r/"/, Str::Double, :dq
42
+
43
+ rule %r/[-+*\/!%&<>\|=:]/, Operator
44
+ rule %r/[\[\](){},;]/, Punctuation
45
+ end
46
+
47
+ state :dq do
48
+ rule %r/\\![btrnNf0\\"]/, Str::Escape
49
+ rule %r/\\/, Str::Double
50
+ rule %r/"/, Str::Double, :pop!
51
+ rule %r/[^\\"]*/m, Str::Double
52
+ end
53
+ end
54
+ end
55
+ end