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,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Rouge
2
4
  module Lexers
3
5
  class Q < RegexLexer
@@ -34,23 +36,23 @@ module Rouge
34
36
 
35
37
  state :root do
36
38
  # q allows a file to start with a shebang
37
- rule /#!(.*?)$/, Comment::Preproc, :top
38
- rule //, Text, :top
39
+ rule %r/#!(.*?)$/, Comment::Preproc, :top
40
+ rule %r//, Text, :top
39
41
  end
40
42
 
41
43
  state :top do
42
44
  # indented lines at the top of the file are ignored by q
43
- rule /^[ \t\r]+.*$/, Comment::Special
44
- rule /\n+/, Text
45
- rule //, Text, :base
45
+ rule %r/^[ \t\r]+.*$/, Comment::Special
46
+ rule %r/\n+/, Text
47
+ rule %r//, Text, :base
46
48
  end
47
49
 
48
50
  state :base do
49
- rule /\n+/m, Text
51
+ rule %r/\n+/m, Text
50
52
  rule(/^.\)/, Keyword::Declaration)
51
53
 
52
54
  # Identifiers, word operators, etc.
53
- rule /#{identifier}/ do |m|
55
+ rule %r/#{identifier}/ do |m|
54
56
  if self.class.keywords.include? m[0]
55
57
  token Keyword
56
58
  elsif self.class.word_operators.include? m[0]
@@ -65,7 +67,7 @@ module Rouge
65
67
  end
66
68
 
67
69
  # White space and comments
68
- rule(%r{[ \t\r]\/.*$}, Comment::Single)
70
+ rule(%r{\s+/.*}, Comment::Single)
69
71
  rule(/[ \t\r]+/, Text::Whitespace)
70
72
  rule(%r{^/$.*?^\\$}m, Comment::Multiline)
71
73
  rule(%r{^\/[^\n]*$(\n[^\S\n]+.*$)*}, Comment::Multiline)
@@ -100,7 +102,7 @@ module Rouge
100
102
  rule(%r{(`:[:a-z0-9._\/]*|`(?:[a-z0-9.][:a-z0-9._]*)?)}i, Str::Symbol)
101
103
  rule(/(?:<=|>=|<>|::)|[?:$%&|@._#*^\-+~,!><=]:?/, Operator)
102
104
 
103
- rule /[{}\[\]();]/, Punctuation
105
+ rule %r/[{}\[\]();]/, Punctuation
104
106
 
105
107
  # commands
106
108
  rule(/\\.*\n/, Text)
@@ -108,14 +110,15 @@ module Rouge
108
110
  end
109
111
 
110
112
  state :string do
111
- rule(/"/, Str, :pop!)
112
- rule /\\([\\nr]|[01][0-7]{2})/, Str::Escape
113
- rule /[^\\"\n]+/, Str
114
- rule /\\/, Str # stray backslash
113
+ rule %r/\\"/, Str
114
+ rule %r/"/, Str, :pop!
115
+ rule %r/\\([\\nr]|[01][0-7]{2})/, Str::Escape
116
+ rule %r/[^\\"\n]+/, Str
117
+ rule %r/\\/, Str # stray backslash
115
118
  end
116
119
 
117
120
  state :bottom do
118
- rule /.*\z/m, Comment::Multiline
121
+ rule %r/.*\z/m, Comment::Multiline
119
122
  end
120
123
  end
121
124
  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
@@ -16,57 +17,57 @@ module Rouge
16
17
  id_with_dots = /[$a-zA-Z_][a-zA-Z0-9_.]*/
17
18
 
18
19
  prepend :root do
19
- rule /(#{id_with_dots})(\s*)({)/ do
20
+ rule %r/(#{id_with_dots})(\s*)({)/ do
20
21
  groups Keyword::Type, Text, Punctuation
21
22
  push :type_block
22
23
  end
23
- rule /(#{id_with_dots})(\s+)(on)(\s+)(#{id_with_dots})(\s*)({)/ do
24
+ rule %r/(#{id_with_dots})(\s+)(on)(\s+)(#{id_with_dots})(\s*)({)/ do
24
25
  groups Keyword::Type, Text, Keyword, Text, Name::Label, Text, Punctuation
25
26
  push :type_block
26
27
  end
27
28
 
28
- rule /[{]/, Punctuation, :push
29
+ rule %r/[{]/, Punctuation, :push
29
30
  end
30
31
 
31
32
  state :type_block do
32
- rule /(id)(\s*)(:)(\s*)(#{id_with_dots})/ do
33
+ rule %r/(id)(\s*)(:)(\s*)(#{id_with_dots})/ do
33
34
  groups Name::Label, Text, Punctuation, Text, Keyword::Declaration
34
35
  end
35
36
 
36
- rule /(#{id_with_dots})(\s*)(:)/ do
37
+ rule %r/(#{id_with_dots})(\s*)(:)/ do
37
38
  groups Name::Label, Text, Punctuation
38
39
  push :expr_start
39
40
  end
40
41
 
41
- rule /(signal)(\s+)(#{id_with_dots})/ do
42
+ rule %r/(signal)(\s+)(#{id_with_dots})/ do
42
43
  groups Keyword::Declaration, Text, Name::Label
43
44
  push :signal
44
45
  end
45
46
 
46
- rule /(property)(\s+)(#{id_with_dots})(\s+)(#{id_with_dots})(\s*)(:?)/ do
47
+ rule %r/(property)(\s+)(#{id_with_dots})(\s+)(#{id_with_dots})(\s*)(:?)/ do
47
48
  groups Keyword::Declaration, Text, Keyword::Type, Text, Name::Label, Text, Punctuation
48
49
  push :expr_start
49
50
  end
50
51
 
51
- rule /[}]/, Punctuation, :pop!
52
+ rule %r/[}]/, Punctuation, :pop!
52
53
  mixin :root
53
54
  end
54
55
 
55
56
  state :signal do
56
57
  mixin :comments_and_whitespace
57
- rule /\(/ do
58
+ rule %r/\(/ do
58
59
  token Punctuation
59
60
  goto :signal_args
60
61
  end
61
- rule //, Text, :pop!
62
+ rule %r//, Text, :pop!
62
63
  end
63
64
 
64
65
  state :signal_args do
65
66
  mixin :comments_and_whitespace
66
- rule /(#{id_with_dots})(\s+)(#{id_with_dots})(\s*)(,?)/ do
67
+ rule %r/(#{id_with_dots})(\s+)(#{id_with_dots})(\s*)(,?)/ do
67
68
  groups Keyword::Type, Text, Name, Text, Punctuation
68
69
  end
69
- rule /\)/ , Punctuation, :pop!
70
+ rule %r/\)/ , Punctuation, :pop!
70
71
  end
71
72
  end
72
73
  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
@@ -48,27 +49,26 @@ module Rouge
48
49
  end
49
50
 
50
51
  state :root do
51
- rule /#'.*?$/, Comment::Doc
52
- rule /#.*?$/, Comment::Single
53
- rule /\s+/m, Text::Whitespace
52
+ rule %r/#'.*?$/, Comment::Doc
53
+ rule %r/#.*?$/, Comment::Single
54
+ rule %r/\s+/m, Text::Whitespace
54
55
 
55
- rule /`[^`]+?`/, Name
56
- rule /'(\\.|.)*?'/m, Str::Single
57
- rule /"(\\.|.)*?"/m, Str::Double
56
+ rule %r/`[^`]+?`/, Name
57
+ rule %r/'(\\.|.)*?'/m, Str::Single
58
+ rule %r/"(\\.|.)*?"/m, Str::Double
58
59
 
59
- rule /%[^%]*?%/, Operator
60
+ rule %r/%[^%]*?%/, Operator
60
61
 
61
- rule /0[xX][a-fA-F0-9]+([pP][0-9]+)?[Li]?/, Num::Hex
62
- rule /[+-]?(\d+([.]\d+)?|[.]\d+)([eE][+-]?\d+)?[Li]?/,
63
- Num
62
+ rule %r/0[xX][a-fA-F0-9]+([pP][0-9]+)?[Li]?/, Num::Hex
63
+ rule %r/[+-]?(\d+([.]\d+)?|[.]\d+)([eE][+-]?\d+)?[Li]?/, Num
64
64
 
65
65
  # Only recognize built-in functions when they are actually used as a
66
66
  # function call, i.e. followed by an opening parenthesis.
67
67
  # `Name::Builtin` would be more logical, but is usually not
68
68
  # highlighted specifically; thus use `Name::Function`.
69
- rule /\b(?<!.)(#{PRIMITIVE_FUNCTIONS.join('|')})(?=\()/, Name::Function
69
+ rule %r/\b(?<!.)(#{PRIMITIVE_FUNCTIONS.join('|')})(?=\()/, Name::Function
70
70
 
71
- rule /[a-zA-Z.]([a-zA-Z_][\w.]*)?/ do |m|
71
+ rule %r/(?:(?:[[:alpha:]]|[.][._[:alpha:]])[._[:alnum:]]*)|[.]/ do |m|
72
72
  if KEYWORDS.include? m[0]
73
73
  token Keyword
74
74
  elsif KEYWORD_CONSTANTS.include? m[0]
@@ -80,7 +80,7 @@ module Rouge
80
80
  end
81
81
  end
82
82
 
83
- rule /[\[\]{}();,]/, Punctuation
83
+ rule %r/[\[\]{}();,]/, Punctuation
84
84
 
85
85
  rule %r([-<>?*+^/!=~$@:%&|]), Operator
86
86
  end
@@ -1,4 +1,6 @@
1
1
  # -*- coding: utf-8 -*- #
2
+ # frozen_string_literal: true
3
+
2
4
  module Rouge
3
5
  module Lexers
4
6
  class Racket < RegexLexer
@@ -485,43 +487,66 @@ module Rouge
485
487
 
486
488
  state :root do
487
489
  # comments
488
- rule /;.*$/, Comment::Single
489
- rule /\s+/m, Text
490
+ rule %r/;.*$/, Comment::Single
491
+ rule %r/#!.*/, Comment::Single
492
+ rule %r/#\|/, Comment::Multiline, :block_comment
493
+ rule %r/#;/, Comment::Multiline, :sexp_comment
494
+ rule %r/\s+/m, Text
490
495
 
491
- rule /[+-]inf[.][f0]/, Num::Float
492
- rule /[+-]nan[.]0/, Num::Float
493
- rule /[-]min[.]0/, Num::Float
494
- rule /[+]max[.]0/, Num::Float
496
+ rule %r/[+-]inf[.][f0]/, Num::Float
497
+ rule %r/[+-]nan[.]0/, Num::Float
498
+ rule %r/[-]min[.]0/, Num::Float
499
+ rule %r/[+]max[.]0/, Num::Float
495
500
 
496
- rule /-?\d+\.\d+/, Num::Float
497
- rule /-?\d+/, Num::Integer
501
+ rule %r/-?\d+\.\d+/, Num::Float
502
+ rule %r/-?\d+/, Num::Integer
498
503
 
499
- rule /#:#{id}+/, Name::Tag # keyword
504
+ rule %r/#:#{id}+/, Name::Tag # keyword
500
505
 
501
- rule /#b[01]+/, Num::Bin
502
- rule /#o[0-7]+/, Num::Oct
503
- rule /#d[0-9]+/, Num::Integer
504
- rule /#x[0-9a-f]+/i, Num::Hex
505
- rule /#[ei][\d.]+/, Num::Other
506
+ rule %r/#b[01]+/, Num::Bin
507
+ rule %r/#o[0-7]+/, Num::Oct
508
+ rule %r/#d[0-9]+/, Num::Integer
509
+ rule %r/#x[0-9a-f]+/i, Num::Hex
510
+ rule %r/#[ei][\d.]+/, Num::Other
506
511
 
507
- rule /"(\\\\|\\"|[^"])*"/, Str
508
- rule /['`]#{id}/i, Str::Symbol
509
- rule /#\\([()\/'"._!\$%& ?=+-]{1}|[a-z0-9]+)/i,
512
+ rule %r/"(\\\\|\\"|[^"])*"/, Str
513
+ rule %r/['`]#{id}/i, Str::Symbol
514
+ rule %r/#\\([()\/'"._!\$%& ?=+-]{1}|[a-z0-9]+)/i,
510
515
  Str::Char
511
- rule /#t|#f/, Name::Constant
512
- rule /(?:'|#|`|,@|,|\.)/, Operator
516
+ rule %r/#t(rue)?|#f(alse)?/i, Name::Constant
517
+ rule %r/(?:'|#|`|,@|,|\.)/, Operator
513
518
 
514
- rule /(['#])(\s*)(\()/m do
519
+ rule %r/(['#])(\s*)(\()/m do
515
520
  groups Str::Symbol, Text, Punctuation
516
521
  end
517
522
 
518
523
  # () [] {} are all permitted as like pairs
519
- rule /\(|\[|\{/, Punctuation, :command
520
- rule /\)|\]|\}/, Punctuation
524
+ rule %r/\(|\[|\{/, Punctuation, :command
525
+ rule %r/\)|\]|\}/, Punctuation
521
526
 
522
527
  rule id, Name::Variable
523
528
  end
524
529
 
530
+ state :block_comment do
531
+ rule %r/[^|#]+/, Comment::Multiline
532
+ rule %r/\|#/, Comment::Multiline, :pop!
533
+ rule %r/#\|/, Comment::Multiline, :block_comment
534
+ rule %r/[|#]/, Comment::Multiline
535
+ end
536
+
537
+ state :sexp_comment do
538
+ rule %r/[({\[]/, Comment::Multiline, :sexp_comment_inner
539
+ rule %r/"(?:\\"|[^"])*?"/, Comment::Multiline, :pop!
540
+ rule %r/[^\s]+/, Comment::Multiline, :pop!
541
+ rule(//) { pop! }
542
+ end
543
+
544
+ state :sexp_comment_inner do
545
+ rule %r/[^(){}\[\]]+/, Comment::Multiline
546
+ rule %r/[)}\]]/, Comment::Multiline, :pop!
547
+ rule %r/[({\[]/, Comment::Multiline, :sexp_comment_inner
548
+ end
549
+
525
550
  state :command do
526
551
  rule id, Name::Function do |m|
527
552
  if self.class.keywords.include? m[0]
@@ -0,0 +1,65 @@
1
+ # -*- coding: utf-8 -*- #
2
+ # frozen_string_literal: true
3
+
4
+ module Rouge
5
+ module Lexers
6
+ load_lexer 'ocaml/common.rb'
7
+
8
+ class ReasonML < OCamlCommon
9
+ title "ReasonML"
10
+ desc 'New syntax on top of OCaml ecosystem (reasonml.github.io)'
11
+ tag 'reasonml'
12
+ filenames '*.re', '*.rei'
13
+ mimetypes 'text/x-reasonml'
14
+
15
+ def self.keywords
16
+ @keywords ||= super + Set.new(%w(
17
+ switch
18
+ ))
19
+ end
20
+
21
+ state :root do
22
+ rule %r/\s+/m, Text
23
+ rule %r/false|true|[(][)]|\[\]/, Name::Builtin::Pseudo
24
+ rule %r/#{@@upper_id}(?=\s*[.])/, Name::Namespace, :dotted
25
+ rule %r/`#{@@id}/, Name::Tag
26
+ rule @@upper_id, Name::Class
27
+ rule %r/[\/][*](?![\/])/, Comment, :comment
28
+ rule @@id do |m|
29
+ match = m[0]
30
+ if self.class.keywords.include? match
31
+ token Keyword
32
+ elsif self.class.word_operators.include? match
33
+ token Operator::Word
34
+ elsif self.class.primitives.include? match
35
+ token Keyword::Type
36
+ else
37
+ token Name
38
+ end
39
+ end
40
+
41
+ rule %r/[(){}\[\];]+/, Punctuation
42
+ rule @@operator, Operator
43
+
44
+ rule %r/-?\d[\d_]*(.[\d_]*)?(e[+-]?\d[\d_]*)/i, Num::Float
45
+ rule %r/0x\h[\h_]*/i, Num::Hex
46
+ rule %r/0o[0-7][0-7_]*/i, Num::Oct
47
+ rule %r/0b[01][01_]*/i, Num::Bin
48
+ rule %r/\d[\d_]*/, Num::Integer
49
+
50
+ rule %r/'(?:(\\[\\"'ntbr ])|(\\[0-9]{3})|(\\x\h{2}))'/, Str::Char
51
+ rule %r/'[^'\/]'/, Str::Char
52
+ rule %r/'/, Keyword
53
+ rule %r/"/, Str::Double, :string
54
+ rule %r/[~?]#{@@id}/, Name::Variable
55
+ end
56
+
57
+ state :comment do
58
+ rule %r|[^/*)]+|, Comment
59
+ rule %r|[/][*]|, Comment, :push
60
+ rule %r|[*][/]|, Comment, :pop!
61
+ rule %r|[*/]|, Comment
62
+ end
63
+ end
64
+ end
65
+ end
@@ -0,0 +1,45 @@
1
+ # -*- coding: utf-8 -*- #
2
+ # frozen_string_literal: true
3
+
4
+ module Rouge
5
+ module Lexers
6
+ class Rego < RegexLexer
7
+ title "Rego"
8
+ desc "The Rego open-policy-agent (OPA) policy language (openpolicyagent.org)"
9
+ tag 'rego'
10
+ filenames '*.rego'
11
+
12
+ state :basic do
13
+ rule %r/\s+/, Text
14
+ rule %r/#.*/, Comment::Single
15
+
16
+ rule %r/[\[\](){}|.,;!]/, Punctuation
17
+
18
+ rule %r/"[^"]*"/, Str::Double
19
+
20
+ rule %r/-?\d+\.\d+([eE][+-]?\d+)?/, Num::Float
21
+ rule %r/-?\d+([eE][+-]?\d+)?/, Num
22
+
23
+ rule %r/\\u[0-9a-fA-F]{4}/, Num::Hex
24
+ rule %r/\\["\/bfnrt]/, Str::Escape
25
+ end
26
+
27
+ state :atoms do
28
+ rule %r/(true|false|null)/, Keyword::Constant
29
+ rule %r/[[:word:]]*/, Str::Symbol
30
+ end
31
+
32
+ state :operators do
33
+ rule %r/(=|!=|>=|<=|>|<|\+|-|\*|%|\/|\||&|:=)/, Operator
34
+ rule %r/(default|not|package|import|as|with|else|some)/, Operator
35
+ rule %r/[\/:?@^~]+/, Operator
36
+ end
37
+
38
+ state :root do
39
+ mixin :basic
40
+ mixin :operators
41
+ mixin :atoms
42
+ end
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,249 @@
1
+ # -*- coding: utf-8 -*- #
2
+ # frozen_string_literal: true
3
+
4
+ module Rouge
5
+ module Lexers
6
+ class RobotFramework < RegexLexer
7
+ tag 'robot_framework'
8
+ aliases 'robot', 'robot-framework'
9
+
10
+ title "Robot Framework"
11
+ desc 'Robot Framework is a generic open source automation testing framework (robotframework.org)'
12
+
13
+ filenames '*.robot'
14
+ mimetypes 'text/x-robot'
15
+
16
+ def initialize(opts = {})
17
+ super(opts)
18
+ @col = 0
19
+ @next = nil
20
+ @is_template = false
21
+ end
22
+
23
+ def self.settings_with_keywords
24
+ @settings_with_keywords ||= Set.new [
25
+ "library", "resource", "setup", "teardown", "template", "suite setup",
26
+ "suite teardown", "task setup", "task teardown", "task template",
27
+ "test setup", "test teardown", "test template", "variables"
28
+ ]
29
+ end
30
+
31
+ def self.settings_with_args
32
+ @settings_with_args ||= Set.new [
33
+ "arguments", "default tags", "documentation", "force tags",
34
+ "metadata", "return", "tags", "timeout", "task timeout",
35
+ "test timeout"
36
+ ]
37
+ end
38
+
39
+ id = %r/(?:\\|[^|$@&% \t\n])+(?: (?:\\.|[^|$@&% \t\n])+)*/
40
+ bdd = %r/(?:Given|When|Then|And|But) /i
41
+ sep = %r/ +\| +|[ ]{2,}|\t+/
42
+
43
+ start do
44
+ push :prior_text
45
+ end
46
+
47
+ state :prior_text do
48
+ rule %r/^[^*].*/, Text
49
+ rule(//) { pop! }
50
+ end
51
+
52
+ # Mixins
53
+
54
+ state :whitespace do
55
+ rule %r/\s+/, Text::Whitespace
56
+ end
57
+
58
+ state :section_include do
59
+ mixin :end_section
60
+ mixin :sep
61
+ mixin :newline
62
+ end
63
+
64
+ state :end_section do
65
+ rule(/(?=^(?:\| )?\*)/) { pop! }
66
+ end
67
+
68
+ state :return do
69
+ rule(//) { pop! }
70
+ end
71
+
72
+ state :sep do
73
+ rule %r/\| /, Text::Whitespace
74
+
75
+ rule sep do
76
+ token Text::Whitespace
77
+ @col = @col + 1
78
+ if @next
79
+ push @next
80
+ elsif @is_template
81
+ push :args
82
+ elsif @col == 1
83
+ @next = :keyword
84
+ push :keyword
85
+ else
86
+ push :args
87
+ end
88
+ push :cell_start
89
+ end
90
+
91
+ rule %r/\.\.\. */ do
92
+ token Text::Whitespace
93
+ @col = @col + 1
94
+ push :args
95
+ end
96
+
97
+ rule %r/ ?\|/, Text::Whitespace
98
+ end
99
+
100
+ state :newline do
101
+ rule %r/\n/ do
102
+ token Text::Whitespace
103
+ @col = 0
104
+ @next = nil
105
+ push :cell_start
106
+ end
107
+ end
108
+
109
+ # States
110
+
111
+ state :root do
112
+ mixin :whitespace
113
+
114
+ rule %r/^(?:\| )?\*[* ]*([A-Z]+(?: [A-Z]+)?).*/i do |m|
115
+ token Generic::Heading, m[0]
116
+ case m[1].chomp("s").downcase
117
+ when "setting" then push :section_settings
118
+ when "test case" then push :section_tests
119
+ when "task" then push :section_tasks
120
+ when "keyword" then push :section_keywords
121
+ when "variable" then push :section_variables
122
+ end
123
+ end
124
+ end
125
+
126
+ state :section_settings do
127
+ mixin :section_include
128
+
129
+ rule %r/([A-Z]+(?: [A-Z]+)?)(:?)/i do |m|
130
+ match = m[1].downcase
131
+ @next = if self.class.settings_with_keywords.include? match
132
+ :keyword
133
+ elsif self.class.settings_with_args.include? match
134
+ :args
135
+ end
136
+ groups Name::Builtin::Pseudo, Punctuation
137
+ end
138
+ end
139
+
140
+ state :section_tests do
141
+ mixin :section_include
142
+
143
+ rule %r/[$@&%{}]+/, Name::Label
144
+ rule %r/( )(?![ |])/, Name::Label
145
+
146
+ rule id do
147
+ @is_template = false
148
+ token Name::Label
149
+ end
150
+ end
151
+
152
+ state :section_tasks do
153
+ mixin :section_tests
154
+ end
155
+
156
+ state :section_keywords do
157
+ mixin :section_include
158
+
159
+ rule %r/[$@&%]\{/ do
160
+ token Name::Variable
161
+ push :var
162
+ end
163
+
164
+ rule %r/[$@&%{}]+/, Name::Label
165
+ rule %r/( )(?![ |])/, Name::Label
166
+
167
+ rule id, Name::Label
168
+ end
169
+
170
+ state :section_variables do
171
+ mixin :section_include
172
+
173
+ rule %r/[$@&%]\{/ do
174
+ token Name::Variable
175
+ @next = :args
176
+ push :var
177
+ end
178
+ end
179
+
180
+ state :cell_start do
181
+ rule %r/#.*/, Comment
182
+ mixin :return
183
+ end
184
+
185
+ state :keyword do
186
+ rule %r/(\[)([A-Z]+(?: [A-Z]+)?)(\])/i do |m|
187
+ groups Punctuation, Name::Builtin::Pseudo, Punctuation
188
+
189
+ match = m[2].downcase
190
+ @is_template = true if match == "template"
191
+ if self.class.settings_with_keywords.include? match
192
+ @next = :keyword
193
+ elsif self.class.settings_with_args.include? match
194
+ @next = :args
195
+ end
196
+
197
+ pop!
198
+ end
199
+
200
+ rule %r/[$@&%]\{/ do
201
+ token Name::Variable
202
+ @next = :keyword unless @next.nil?
203
+ push :var
204
+ end
205
+
206
+ rule %r/FOR/i do
207
+ token Name::Function
208
+ @next = :keyword unless @next.nil?
209
+ end
210
+
211
+ rule %r/( )(?![ |])/, Name::Function
212
+
213
+ rule bdd, Name::Builtin
214
+ rule id do
215
+ token Name::Function
216
+ @next = nil
217
+ end
218
+
219
+ mixin :return
220
+ end
221
+
222
+ state :args do
223
+ rule %r/[$@&%]\{/ do
224
+ token Name::Variable
225
+ @next = :keyword unless @next.nil?
226
+ push :var
227
+ end
228
+
229
+ rule %r/[$@&%]+/, Str
230
+ rule %r/( )(?![ |])/, Str
231
+ rule id, Str
232
+
233
+ mixin :return
234
+ end
235
+
236
+ state :var do
237
+ rule %r/(\})( )(=)/ do
238
+ groups Name::Variable, Text::Whitespace, Punctuation
239
+ pop!
240
+ end
241
+ rule %r/[$@&%]\{/, Name::Variable, :var
242
+ rule %r/[{\[]/, Name::Variable, :var
243
+ rule %r/[}\]]/, Name::Variable, :pop!
244
+ rule %r/[^$@&%{}\[\]]+/, Name::Variable
245
+ rule %r/\}\[/, Name::Variable
246
+ end
247
+ end
248
+ end
249
+ end