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
@@ -10,34 +11,6 @@ module Rouge
10
11
  title "Ceylon"
11
12
  desc 'Say more, more clearly.'
12
13
 
13
- keywords = %w(
14
- break case catch continue else finally for in
15
- if return switch this throw try while is exists dynamic
16
- nonempty then outer assert let
17
- )
18
-
19
- keywords_declaration = %w(
20
- abstracts extends satisfies super given of out assign
21
- )
22
-
23
- keywords_type = %w(
24
- function value void new
25
- )
26
-
27
- keywords_namespace = %w(
28
- assembly module package
29
- )
30
-
31
- keywords_constant = %w(
32
- true false null
33
- )
34
-
35
- annotations = %w(
36
- shared abstract formal default actual variable deprecated small
37
- late literal doc by see throws optional license tagged final native
38
- annotation sealed
39
- )
40
-
41
14
  state :whitespace do
42
15
  rule %r([^\S\n]+), Text
43
16
  rule %r(//.*?\n), Comment::Single
@@ -58,14 +31,14 @@ module Rouge
58
31
  rule %r((abstracts|extends|satisfies|super|given|of|out|assign)\b), Keyword::Declaration
59
32
 
60
33
  rule %r((function|value|void|new)\b), Keyword::Type
61
-
34
+
62
35
  rule %r((assembly|module|package)(\s+)) do
63
36
  groups Keyword::Namespace, Text
64
37
  push :import
65
38
  end
66
-
39
+
67
40
  rule %r((true|false|null)\b), Keyword::Constant
68
-
41
+
69
42
  rule %r((class|interface|object|alias)(\s+)) do
70
43
  groups Keyword::Declaration, Text
71
44
  push :class
@@ -75,7 +48,7 @@ module Rouge
75
48
  groups Keyword::Namespace, Text
76
49
  push :import
77
50
  end
78
-
51
+
79
52
  rule %r("(\\\\|\\"|[^"])*"), Literal::String
80
53
  rule %r('\\.'|'[^\\]'|'\\\{#[0-9a-fA-F]{4}\}'), Literal::String::Char
81
54
  rule %r(".*``.*``.*"', String::Interpol
@@ -85,7 +58,7 @@ module Rouge
85
58
  rule %r([a-zA-Z_]\w*:), Name::Label
86
59
  rule %r((\\I[a-z]|[A-Z])\w*), Name::Decorator
87
60
  rule %r([a-zA-Z_]\w*), Name
88
- rule %r([~^*!%&\[\](){}<>|+=:;,./?-`]), Operator
61
+ rule %r([~^*!%&\[\](){}<>|+=:;,./?`-]), Operator
89
62
  rule %r(\d{1,3}(_\d{3})+\.\d{1,3}(_\d{3})+[kMGTPmunpf]?), Literal::Number::Float
90
63
  rule %r(\d{1,3}(_\d{3})+\.[0-9]+([eE][+-]?[0-9]+)?[kMGTPmunpf]?),
91
64
  Literal::Number::Float
@@ -111,7 +84,7 @@ module Rouge
111
84
  rule %r([a-z][\w.]*), Name::Namespace, :pop!
112
85
  rule %r("(\\\\|\\"|[^"])*"), Literal::String, :pop!
113
86
  end
114
-
87
+
115
88
  state :comment do
116
89
  rule %r([^*/]), Comment.Multiline
117
90
  rule %r(/\*), Comment::Multiline, :push!
@@ -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,30 +37,30 @@ module Rouge
36
37
 
37
38
  state :root do
38
39
  mixin :comments_and_whitespace
39
- rule /(?:#{operators.join('|')}|does not contain|greater than(?: or equal to)?|less than(?: or equal to)?)\b/i, Operator, :expr_start
40
+ rule %r/(?:#{operators.join('|')}|does not contain|greater than(?: or equal to)?|less than(?: or equal to)?)\b/i, Operator, :expr_start
40
41
  rule %r([-<>+*%&|\^/!=]=?), Operator, :expr_start
41
42
 
42
- rule /[(\[,]/, Punctuation, :expr_start
43
- rule /;/, Punctuation, :statement
44
- rule /[)\].]/, Punctuation
43
+ rule %r/[(\[,]/, Punctuation, :expr_start
44
+ rule %r/;/, Punctuation, :statement
45
+ rule %r/[)\].]/, Punctuation
45
46
 
46
- rule /[?]/ do
47
+ rule %r/[?]/ do
47
48
  token Punctuation
48
49
  push :ternary
49
50
  push :expr_start
50
51
  end
51
52
 
52
- rule /[{}]/, Punctuation, :statement
53
+ rule %r/[{}]/, Punctuation, :statement
53
54
 
54
- rule /(?:#{constants.join('|')})\b/, Name::Constant
55
- rule /(?:true|false|null)\b/, Keyword::Constant
56
- rule /import\b/, Keyword::Namespace, :import
57
- rule /(#{dotted_id})(\s*)(:)(\s*)/ do
55
+ rule %r/(?:#{constants.join('|')})\b/, Name::Constant
56
+ rule %r/(?:true|false|null)\b/, Keyword::Constant
57
+ rule %r/import\b/, Keyword::Namespace, :import
58
+ rule %r/(#{dotted_id})(\s*)(:)(\s*)/ do
58
59
  groups Name, Text, Punctuation, Text
59
60
  push :expr_start
60
61
  end
61
62
 
62
- rule /([A-Za-z_$][\w.]*)(\s*)(\()/ do |m|
63
+ rule %r/([A-Za-z_$][\w.]*)(\s*)(\()/ do |m|
63
64
  if self.class.keywords.include? m[1]
64
65
  token Keyword, m[1]
65
66
  token Text, m[2]
@@ -86,17 +87,17 @@ module Rouge
86
87
  end
87
88
  end
88
89
 
89
- rule /[0-9][0-9]*\.[0-9]+([eE][0-9]+)?[fd]?/, Num::Float
90
- rule /0x[0-9a-fA-F]+/, Num::Hex
91
- rule /[0-9]+/, Num::Integer
92
- rule /"(\\\\|\\"|[^"])*"/, Str::Double
93
- rule /'(\\\\|\\'|[^'])*'/, Str::Single
90
+ rule %r/[0-9][0-9]*\.[0-9]+([eE][0-9]+)?[fd]?/, Num::Float
91
+ rule %r/0x[0-9a-fA-F]+/, Num::Hex
92
+ rule %r/[0-9]+/, Num::Integer
93
+ rule %r/"(\\\\|\\"|[^"])*"/, Str::Double
94
+ rule %r/'(\\\\|\\'|[^'])*'/, Str::Single
94
95
 
95
96
  end
96
97
 
97
98
  # same as java, broken out
98
99
  state :comments_and_whitespace do
99
- rule /\s+/, Text
100
+ rule %r/\s+/, Text
100
101
  rule %r(//.*?$), Comment::Single
101
102
  rule %r(/\*.*?\*/)m, Comment::Multiline
102
103
  end
@@ -104,14 +105,14 @@ module Rouge
104
105
  state :expr_start do
105
106
  mixin :comments_and_whitespace
106
107
 
107
- rule /[{]/, Punctuation, :object
108
+ rule %r/[{]/, Punctuation, :object
108
109
 
109
- rule //, Text, :pop!
110
+ rule %r//, Text, :pop!
110
111
  end
111
112
 
112
113
  state :statement do
113
114
 
114
- rule /[{}]/, Punctuation
115
+ rule %r/[{}]/, Punctuation
115
116
 
116
117
  mixin :expr_start
117
118
  end
@@ -119,23 +120,23 @@ module Rouge
119
120
  # object literals
120
121
  state :object do
121
122
  mixin :comments_and_whitespace
122
- rule /[}]/ do
123
+ rule %r/[}]/ do
123
124
  token Punctuation
124
125
  push :expr_start
125
126
  end
126
127
 
127
- rule /(#{dotted_id})(\s*)(:)/ do
128
+ rule %r/(#{dotted_id})(\s*)(:)/ do
128
129
  groups Name::Other, Text, Punctuation
129
130
  push :expr_start
130
131
  end
131
132
 
132
- rule /:/, Punctuation
133
+ rule %r/:/, Punctuation
133
134
  mixin :root
134
135
  end
135
136
 
136
137
  # ternary expressions, where <dotted_id>: is not a label!
137
138
  state :ternary do
138
- rule /:/ do
139
+ rule %r/:/ do
139
140
  token Punctuation
140
141
  goto :expr_start
141
142
  end
@@ -144,8 +145,8 @@ module Rouge
144
145
  end
145
146
 
146
147
  state :import do
147
- rule /\s+/m, Text
148
- rule /[a-z0-9_.]+\*?/i, Name::Namespace, :pop!
148
+ rule %r/\s+/m, Text
149
+ rule %r/[a-z0-9_.]+\*?/i, Name::Namespace, :pop!
149
150
  end
150
151
 
151
152
  end
@@ -0,0 +1,156 @@
1
+ # -*- coding: utf-8 -*- #
2
+ # frozen_string_literal: true
3
+
4
+ module Rouge
5
+ module Lexers
6
+ class Clean < RegexLexer
7
+ title "Clean"
8
+ desc "The Clean programming language (clean.cs.ru.nl)"
9
+
10
+ tag 'clean'
11
+ filenames '*.dcl', '*.icl'
12
+
13
+ def self.keywords
14
+ @keywords ||= Set.new %w(
15
+ if otherwise
16
+ let in
17
+ with where
18
+ case of
19
+ infix infixl infixr
20
+ class instance
21
+ generic derive
22
+ special
23
+ implementation definition system module
24
+ from import qualified as
25
+ dynamic
26
+ code inline foreign export ccall stdcall
27
+ )
28
+ end
29
+
30
+ # These are literal patterns common to the ABC intermediate language and
31
+ # Clean. Clean has more extensive literal patterns (see :basic below).
32
+ state :common_literals do
33
+ rule %r/'(?:[^'\\]|\\(?:x[0-9a-fA-F]+|\d+|.))'/, Str::Char
34
+
35
+ rule %r/[+~-]?\d+\.\d+(?:E[+-]?\d+)?\b/, Num::Float
36
+ rule %r/[+~-]?\d+E[+-]?\d+\b/, Num::Float
37
+ rule %r/[+~-]?\d+/, Num::Integer
38
+
39
+ rule %r/"/, Str::Double, :string
40
+ end
41
+
42
+ state :basic do
43
+ rule %r/\s+/m, Text::Whitespace
44
+
45
+ rule %r/\/\/\*.*/, Comment::Doc
46
+ rule %r/\/\/.*/, Comment::Single
47
+ rule %r/\/\*\*/, Comment::Doc, :comment_doc
48
+ rule %r/\/\*/, Comment::Multiline, :comment
49
+
50
+ rule %r/[+~-]?0[0-7]+/, Num::Oct
51
+ rule %r/[+~-]?0x[0-9a-fA-F]+/, Num::Hex
52
+ mixin :common_literals
53
+ rule %r/(\[)(\s*)(')(?=.*?'\])/ do
54
+ groups Punctuation, Text::Whitespace, Str::Single, Punctuation
55
+ push :charlist
56
+ end
57
+ end
58
+
59
+ # nested commenting
60
+ state :comment_doc do
61
+ rule %r/\*\//, Comment::Doc, :pop!
62
+ rule %r/\/\/.*/, Comment::Doc # Singleline comments in multiline comments are skipped
63
+ rule %r/\/\*/, Comment::Doc, :comment
64
+ rule %r/[^*\/]+/, Comment::Doc
65
+ rule %r/[*\/]/, Comment::Doc
66
+ end
67
+
68
+ # This is the same as the above, but with Multiline instead of Doc
69
+ state :comment do
70
+ rule %r/\*\//, Comment::Multiline, :pop!
71
+ rule %r/\/\/.*/, Comment::Multiline # Singleline comments in multiline comments are skipped
72
+ rule %r/\/\*/, Comment::Multiline, :comment
73
+ rule %r/[^*\/]+/, Comment::Multiline
74
+ rule %r/[*\/]/, Comment::Multiline
75
+ end
76
+
77
+ state :root do
78
+ mixin :basic
79
+
80
+ rule %r/code(\s+inline)?\s*{/, Comment::Preproc, :abc
81
+
82
+ rule %r/_*[a-z][\w_`]*/ do |m|
83
+ if self.class.keywords.include?(m[0])
84
+ token Keyword
85
+ else
86
+ token Name
87
+ end
88
+ end
89
+
90
+ rule %r/_*[A-Z][\w_`]*/ do |m|
91
+ if m[0]=='True' || m[0]=='False'
92
+ token Keyword::Constant
93
+ else
94
+ token Keyword::Type
95
+ end
96
+ end
97
+
98
+ rule %r/[^\w_\s`]/, Punctuation
99
+ rule %r/_\b/, Punctuation
100
+ end
101
+
102
+ state :escapes do
103
+ rule %r/\\x[0-9a-fA-F]{1,2}/i, Str::Escape
104
+ rule %r/\\d\d{0,3}/i, Str::Escape
105
+ rule %r/\\0[0-7]{0,3}/, Str::Escape
106
+ rule %r/\\[0-7]{1,3}/, Str::Escape
107
+ rule %r/\\[nrfbtv\\"']/, Str::Escape
108
+ end
109
+
110
+ state :string do
111
+ rule %r/"/, Str::Double, :pop!
112
+ mixin :escapes
113
+ rule %r/[^\\"]+/, Str::Double
114
+ end
115
+
116
+ state :charlist do
117
+ rule %r/(')(\])/ do
118
+ groups Str::Single, Punctuation
119
+ pop!
120
+ end
121
+ mixin :escapes
122
+ rule %r/[^\\']/, Str::Single
123
+ end
124
+
125
+ state :abc_basic do
126
+ rule %r/\s+/, Text::Whitespace
127
+ rule %r/\|.*/, Comment::Single
128
+ mixin :common_literals
129
+ end
130
+
131
+ # The ABC intermediate language can be included, similar to C's inline
132
+ # assembly. For some information about ABC, see:
133
+ # https://en.wikipedia.org/wiki/Clean_(programming_language)#The_ABC-Machine
134
+ state :abc do
135
+ mixin :abc_basic
136
+
137
+ rule %r/}/, Comment::Preproc, :pop!
138
+ rule %r/\.\w*/, Keyword, :abc_rest_of_line
139
+ rule %r/[\w_]+/, Name::Builtin, :abc_rest_of_line
140
+ end
141
+
142
+ state :abc_rest_of_line do
143
+ rule %r/\n/, Text::Whitespace, :pop!
144
+ rule %r/}/ do
145
+ token Comment::Preproc
146
+ pop!
147
+ pop!
148
+ end
149
+
150
+ mixin :abc_basic
151
+
152
+ rule %r/\S+/, Name
153
+ end
154
+ end
155
+ end
156
+ 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
@@ -73,22 +74,22 @@ module Rouge
73
74
  end
74
75
 
75
76
  state :root do
76
- rule /;.*?$/, Comment::Single
77
- rule /\s+/m, Text::Whitespace
77
+ rule %r/;.*?$/, Comment::Single
78
+ rule %r/\s+/m, Text::Whitespace
78
79
 
79
- rule /-?\d+\.\d+/, Num::Float
80
- rule /-?\d+/, Num::Integer
81
- rule /0x-?[0-9a-fA-F]+/, Num::Hex
80
+ rule %r/-?\d+\.\d+/, Num::Float
81
+ rule %r/-?\d+/, Num::Integer
82
+ rule %r/0x-?[0-9a-fA-F]+/, Num::Hex
82
83
 
83
- rule /"(\\.|[^"])*"/, Str
84
- rule /'#{keyword}/, Str::Symbol
85
- rule /::?#{keyword}/, Name::Constant
86
- rule /\\(.|[a-z]+)/i, Str::Char
84
+ rule %r/"(\\.|[^"])*"/, Str
85
+ rule %r/'#{keyword}/, Str::Symbol
86
+ rule %r/::?#{keyword}/, Name::Constant
87
+ rule %r/\\(.|[a-z]+)/i, Str::Char
87
88
 
88
89
 
89
- rule /~@|[`\'#^~&@]/, Operator
90
+ rule %r/~@|[`\'#^~&@]/, Operator
90
91
 
91
- rule /(\()(\s*)(#{identifier})/m do |m|
92
+ rule %r/(\()(\s*)(#{identifier})/m do |m|
92
93
  token Punctuation, m[1]
93
94
  token Text::Whitespace, m[2]
94
95
  token(name_token(m[3]) || Name::Function, m[3])
@@ -99,13 +100,13 @@ module Rouge
99
100
  end
100
101
 
101
102
  # vectors
102
- rule /[\[\]]/, Punctuation
103
+ rule %r/[\[\]]/, Punctuation
103
104
 
104
105
  # maps
105
- rule /[{}]/, Punctuation
106
+ rule %r/[{}]/, Punctuation
106
107
 
107
108
  # parentheses
108
- rule /[()]/, Punctuation
109
+ rule %r/[()]/, Punctuation
109
110
  end
110
111
  end
111
112
  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
@@ -124,23 +125,23 @@ module Rouge
124
125
  ]
125
126
 
126
127
  state :default do
127
- rule /\r\n?|\n/ do
128
+ rule %r/\r\n?|\n/ do
128
129
  token STATES_MAP[state.name.to_sym]
129
130
  end
130
- rule /./ do
131
+ rule %r/./ do
131
132
  token STATES_MAP[state.name.to_sym]
132
133
  end
133
134
  end
134
135
 
135
136
  state :variable_interpolation do
136
- rule /\$\{/ do
137
+ rule %r/\$\{/ do
137
138
  token Str::Interpol
138
139
  push :variable_reference
139
140
  end
140
141
  end
141
142
 
142
143
  state :bracket_close do
143
- rule /\]=*\]/ do |m|
144
+ rule %r/\]=*\]/ do |m|
144
145
  token STATES_MAP[state.name.to_sym]
145
146
  goto :root if m[0].length == @bracket_len
146
147
  end
@@ -149,27 +150,28 @@ module Rouge
149
150
  state :root do
150
151
  mixin :variable_interpolation
151
152
 
152
- rule /#{SPACE}/, Text
153
- rule /[()]/, Punctuation
153
+ rule %r/#{SPACE}/, Text
154
+ rule %r/[()]/, Punctuation
154
155
 
155
- rule /##{BRACKET_OPEN}/ do |m|
156
+ rule %r/##{BRACKET_OPEN}/ do |m|
156
157
  token Comment::Multiline
157
158
  @bracket_len = m[0].length - 1 # decount '#'
158
159
  goto :bracket_comment
159
160
  end
160
- rule /#{BRACKET_OPEN}/ do |m|
161
+ rule %r/#{BRACKET_OPEN}/ do |m|
161
162
  token Str::Double
162
163
  @bracket_len = m[0].length
163
164
  goto :bracket_string
164
165
  end
165
166
 
166
- rule /"/, Str::Double, :quoted_argument
167
+ rule %r/\\"/, Text
168
+ rule %r/"/, Str::Double, :quoted_argument
167
169
 
168
- rule /([A-Za-z_][A-Za-z0-9_]*)(#{SPACE}*)(\()/ do |m|
170
+ rule %r/([A-Za-z_][A-Za-z0-9_]*)(#{SPACE}*)(\()/ do |m|
169
171
  groups BUILTIN_COMMANDS.include?(m[1]) ? Name::Builtin : Name::Function, Text, Punctuation
170
172
  end
171
173
 
172
- rule /#.*/, Comment::Single
174
+ rule %r/#.*/, Comment::Single
173
175
 
174
176
  mixin :default
175
177
  end
@@ -188,7 +190,7 @@ module Rouge
188
190
  state :variable_reference do
189
191
  mixin :variable_interpolation
190
192
 
191
- rule /}/, Str::Interpol, :pop!
193
+ rule %r/}/, Str::Interpol, :pop!
192
194
 
193
195
  mixin :default
194
196
  end
@@ -196,8 +198,8 @@ module Rouge
196
198
  state :quoted_argument do
197
199
  mixin :variable_interpolation
198
200
 
199
- rule /"/, Str::Double, :root
200
- rule /\\[()#" \\$@^trn;]/, Str::Escape
201
+ rule %r/"/, Str::Double, :root
202
+ rule %r/\\[()#" \\$@^trn;]/, Str::Escape
201
203
 
202
204
  mixin :default
203
205
  end