rouge 3.2.0 → 3.18.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (316) hide show
  1. checksums.yaml +5 -5
  2. data/Gemfile +17 -3
  3. data/bin/rougify +1 -0
  4. data/lib/rouge.rb +67 -43
  5. data/lib/rouge/cli.rb +84 -17
  6. data/lib/rouge/demos/ada +26 -0
  7. data/lib/rouge/demos/apex +9 -0
  8. data/lib/rouge/demos/armasm +12 -0
  9. data/lib/rouge/demos/batchfile +3 -0
  10. data/lib/rouge/demos/bbcbasic +6 -0
  11. data/lib/rouge/demos/bpf +7 -0
  12. data/lib/rouge/demos/brainfuck +5 -0
  13. data/lib/rouge/demos/clean +6 -0
  14. data/lib/rouge/demos/cmhg +8 -0
  15. data/lib/rouge/demos/csvs +8 -0
  16. data/lib/rouge/demos/cuda +11 -0
  17. data/lib/rouge/demos/cypher +5 -0
  18. data/lib/rouge/demos/cython +6 -0
  19. data/lib/rouge/demos/datastudio +21 -0
  20. data/lib/rouge/demos/ecl +18 -0
  21. data/lib/rouge/demos/eex +1 -0
  22. data/lib/rouge/demos/epp +4 -0
  23. data/lib/rouge/demos/escape +3 -0
  24. data/lib/rouge/demos/freefem +16 -0
  25. data/lib/rouge/demos/gdscript +18 -0
  26. data/lib/rouge/demos/ghc-cmm +23 -0
  27. data/lib/rouge/demos/ghc-core +26 -0
  28. data/lib/rouge/demos/haxe +5 -0
  29. data/lib/rouge/demos/hocon +8 -0
  30. data/lib/rouge/demos/hql +5 -0
  31. data/lib/rouge/demos/isbl +4 -0
  32. data/lib/rouge/demos/jsl +3 -0
  33. data/lib/rouge/demos/jsp +29 -0
  34. data/lib/rouge/demos/liquid +0 -1
  35. data/lib/rouge/demos/lustre +6 -0
  36. data/lib/rouge/demos/lutin +18 -0
  37. data/lib/rouge/demos/m68k +16 -0
  38. data/lib/rouge/demos/magik +6 -0
  39. data/lib/rouge/demos/mason +22 -0
  40. data/lib/rouge/demos/mathematica +8 -0
  41. data/lib/rouge/demos/minizinc +23 -0
  42. data/lib/rouge/demos/msgtrans +4 -0
  43. data/lib/rouge/demos/nasm +6 -6
  44. data/lib/rouge/demos/nesasm +11 -0
  45. data/lib/rouge/demos/objective_cpp +17 -0
  46. data/lib/rouge/demos/openedge +4 -0
  47. data/lib/rouge/demos/opentype_feature_file +6 -0
  48. data/lib/rouge/demos/plist +1 -132
  49. data/lib/rouge/demos/powershell +12 -48
  50. data/lib/rouge/demos/q +6 -0
  51. data/lib/rouge/demos/reasonml +12 -0
  52. data/lib/rouge/demos/rego +8 -0
  53. data/lib/rouge/demos/robot_framework +27 -0
  54. data/lib/rouge/demos/sas +13 -0
  55. data/lib/rouge/demos/slice +10 -0
  56. data/lib/rouge/demos/solidity +13 -0
  57. data/lib/rouge/demos/sparql +6 -0
  58. data/lib/rouge/demos/sqf +14 -0
  59. data/lib/rouge/demos/supercollider +11 -0
  60. data/lib/rouge/demos/terraform +0 -15
  61. data/lib/rouge/demos/ttcn3 +6 -0
  62. data/lib/rouge/demos/vcl +12 -0
  63. data/lib/rouge/demos/xojo +14 -0
  64. data/lib/rouge/demos/xpath +2 -0
  65. data/lib/rouge/demos/xquery +22 -0
  66. data/lib/rouge/demos/yang +17 -0
  67. data/lib/rouge/formatter.rb +39 -2
  68. data/lib/rouge/formatters/html.rb +21 -2
  69. data/lib/rouge/formatters/html_inline.rb +1 -0
  70. data/lib/rouge/formatters/html_legacy.rb +1 -0
  71. data/lib/rouge/formatters/html_line_table.rb +53 -0
  72. data/lib/rouge/formatters/html_linewise.rb +7 -11
  73. data/lib/rouge/formatters/html_pygments.rb +2 -0
  74. data/lib/rouge/formatters/html_table.rb +21 -31
  75. data/lib/rouge/formatters/null.rb +1 -0
  76. data/lib/rouge/formatters/terminal256.rb +23 -5
  77. data/lib/rouge/formatters/terminal_truecolor.rb +37 -0
  78. data/lib/rouge/formatters/tex.rb +92 -0
  79. data/lib/rouge/guesser.rb +2 -0
  80. data/lib/rouge/guessers/disambiguation.rb +35 -0
  81. data/lib/rouge/guessers/filename.rb +2 -0
  82. data/lib/rouge/guessers/glob_mapping.rb +3 -1
  83. data/lib/rouge/guessers/mimetype.rb +2 -0
  84. data/lib/rouge/guessers/modeline.rb +3 -1
  85. data/lib/rouge/guessers/source.rb +3 -1
  86. data/lib/rouge/guessers/util.rb +2 -0
  87. data/lib/rouge/lexer.rb +71 -15
  88. data/lib/rouge/lexers/abap.rb +13 -11
  89. data/lib/rouge/lexers/actionscript.rb +35 -34
  90. data/lib/rouge/lexers/ada.rb +162 -0
  91. data/lib/rouge/lexers/apache.rb +13 -15
  92. data/lib/rouge/lexers/apache/keywords.rb +15 -0
  93. data/lib/rouge/lexers/apex.rb +126 -0
  94. data/lib/rouge/lexers/apiblueprint.rb +2 -0
  95. data/lib/rouge/lexers/apple_script.rb +17 -14
  96. data/lib/rouge/lexers/armasm.rb +145 -0
  97. data/lib/rouge/lexers/awk.rb +26 -25
  98. data/lib/rouge/lexers/batchfile.rb +164 -0
  99. data/lib/rouge/lexers/bbcbasic.rb +112 -0
  100. data/lib/rouge/lexers/biml.rb +6 -4
  101. data/lib/rouge/lexers/bpf.rb +118 -0
  102. data/lib/rouge/lexers/brainfuck.rb +53 -0
  103. data/lib/rouge/lexers/bsl.rb +13 -12
  104. data/lib/rouge/lexers/c.rb +35 -57
  105. data/lib/rouge/lexers/ceylon.rb +7 -34
  106. data/lib/rouge/lexers/cfscript.rb +27 -26
  107. data/lib/rouge/lexers/clean.rb +156 -0
  108. data/lib/rouge/lexers/clojure.rb +15 -14
  109. data/lib/rouge/lexers/cmake.rb +16 -14
  110. data/lib/rouge/lexers/cmhg.rb +34 -0
  111. data/lib/rouge/lexers/coffeescript.rb +90 -49
  112. data/lib/rouge/lexers/common_lisp.rb +39 -38
  113. data/lib/rouge/lexers/conf.rb +7 -6
  114. data/lib/rouge/lexers/console.rb +92 -38
  115. data/lib/rouge/lexers/coq.rb +27 -23
  116. data/lib/rouge/lexers/cpp.rb +24 -13
  117. data/lib/rouge/lexers/crystal.rb +71 -70
  118. data/lib/rouge/lexers/csharp.rb +29 -29
  119. data/lib/rouge/lexers/css.rb +24 -23
  120. data/lib/rouge/lexers/csvs.rb +44 -0
  121. data/lib/rouge/lexers/cuda.rb +35 -0
  122. data/lib/rouge/lexers/cypher.rb +108 -0
  123. data/lib/rouge/lexers/cython.rb +151 -0
  124. data/lib/rouge/lexers/d.rb +64 -63
  125. data/lib/rouge/lexers/dart.rb +34 -33
  126. data/lib/rouge/lexers/datastudio.rb +138 -0
  127. data/lib/rouge/lexers/diff.rb +10 -4
  128. data/lib/rouge/lexers/digdag.rb +3 -1
  129. data/lib/rouge/lexers/docker.rb +12 -11
  130. data/lib/rouge/lexers/dot.rb +19 -18
  131. data/lib/rouge/lexers/ecl.rb +175 -0
  132. data/lib/rouge/lexers/eex.rb +52 -0
  133. data/lib/rouge/lexers/eiffel.rb +21 -20
  134. data/lib/rouge/lexers/elixir.rb +52 -36
  135. data/lib/rouge/lexers/elm.rb +30 -29
  136. data/lib/rouge/lexers/epp.rb +51 -0
  137. data/lib/rouge/lexers/erb.rb +5 -4
  138. data/lib/rouge/lexers/erlang.rb +1 -0
  139. data/lib/rouge/lexers/escape.rb +58 -0
  140. data/lib/rouge/lexers/factor.rb +41 -40
  141. data/lib/rouge/lexers/fortran.rb +34 -32
  142. data/lib/rouge/lexers/freefem.rb +240 -0
  143. data/lib/rouge/lexers/fsharp.rb +33 -31
  144. data/lib/rouge/lexers/gdscript.rb +171 -0
  145. data/lib/rouge/lexers/ghc_cmm.rb +340 -0
  146. data/lib/rouge/lexers/ghc_core.rb +151 -0
  147. data/lib/rouge/lexers/gherkin.rb +17 -14
  148. data/lib/rouge/lexers/gherkin/keywords.rb +2 -0
  149. data/lib/rouge/lexers/glsl.rb +2 -5
  150. data/lib/rouge/lexers/go.rb +3 -2
  151. data/lib/rouge/lexers/gradle.rb +1 -0
  152. data/lib/rouge/lexers/graphql.rb +78 -60
  153. data/lib/rouge/lexers/groovy.rb +24 -25
  154. data/lib/rouge/lexers/hack.rb +2 -1
  155. data/lib/rouge/lexers/haml.rb +26 -29
  156. data/lib/rouge/lexers/handlebars.rb +32 -20
  157. data/lib/rouge/lexers/haskell.rb +67 -65
  158. data/lib/rouge/lexers/haxe.rb +246 -0
  159. data/lib/rouge/lexers/hcl.rb +26 -25
  160. data/lib/rouge/lexers/hocon.rb +86 -0
  161. data/lib/rouge/lexers/hql.rb +139 -0
  162. data/lib/rouge/lexers/html.rb +33 -31
  163. data/lib/rouge/lexers/http.rb +10 -9
  164. data/lib/rouge/lexers/hylang.rb +15 -14
  165. data/lib/rouge/lexers/idlang.rb +34 -32
  166. data/lib/rouge/lexers/igorpro.rb +32 -31
  167. data/lib/rouge/lexers/ini.rb +13 -12
  168. data/lib/rouge/lexers/io.rb +10 -9
  169. data/lib/rouge/lexers/irb.rb +6 -5
  170. data/lib/rouge/lexers/isbl.rb +97 -0
  171. data/lib/rouge/lexers/isbl/builtins.rb +17 -0
  172. data/lib/rouge/lexers/java.rb +29 -25
  173. data/lib/rouge/lexers/javascript.rb +58 -61
  174. data/lib/rouge/lexers/jinja.rb +39 -22
  175. data/lib/rouge/lexers/jsl.rb +55 -0
  176. data/lib/rouge/lexers/json.rb +54 -11
  177. data/lib/rouge/lexers/json_doc.rb +8 -5
  178. data/lib/rouge/lexers/jsonnet.rb +19 -18
  179. data/lib/rouge/lexers/jsp.rb +120 -0
  180. data/lib/rouge/lexers/jsx.rb +18 -16
  181. data/lib/rouge/lexers/julia.rb +182 -58
  182. data/lib/rouge/lexers/kotlin.rb +78 -26
  183. data/lib/rouge/lexers/lasso.rb +54 -58
  184. data/lib/rouge/lexers/lasso/keywords.rb +14 -0
  185. data/lib/rouge/lexers/liquid.rb +116 -118
  186. data/lib/rouge/lexers/literate_coffeescript.rb +3 -2
  187. data/lib/rouge/lexers/literate_haskell.rb +6 -5
  188. data/lib/rouge/lexers/llvm.rb +66 -49
  189. data/lib/rouge/lexers/lua.rb +43 -4
  190. data/lib/rouge/lexers/lua/builtins.rb +2 -0
  191. data/lib/rouge/lexers/lustre.rb +79 -0
  192. data/lib/rouge/lexers/lutin.rb +33 -0
  193. data/lib/rouge/lexers/m68k.rb +143 -0
  194. data/lib/rouge/lexers/magik.rb +127 -0
  195. data/lib/rouge/lexers/make.rb +57 -34
  196. data/lib/rouge/lexers/markdown.rb +67 -39
  197. data/lib/rouge/lexers/mason.rb +110 -0
  198. data/lib/rouge/lexers/mathematica.rb +96 -0
  199. data/lib/rouge/lexers/mathematica/builtins.rb +13 -0
  200. data/lib/rouge/lexers/matlab.rb +26 -17
  201. data/lib/rouge/lexers/matlab/builtins.rb +4 -4
  202. data/lib/rouge/lexers/minizinc.rb +87 -0
  203. data/lib/rouge/lexers/moonscript.rb +4 -3
  204. data/lib/rouge/lexers/mosel.rb +64 -63
  205. data/lib/rouge/lexers/msgtrans.rb +26 -0
  206. data/lib/rouge/lexers/mxml.rb +19 -18
  207. data/lib/rouge/lexers/nasm.rb +43 -169
  208. data/lib/rouge/lexers/nesasm.rb +78 -0
  209. data/lib/rouge/lexers/nginx.rb +15 -14
  210. data/lib/rouge/lexers/nim.rb +4 -2
  211. data/lib/rouge/lexers/nix.rb +44 -43
  212. data/lib/rouge/lexers/objective_c.rb +5 -178
  213. data/lib/rouge/lexers/objective_c/common.rb +184 -0
  214. data/lib/rouge/lexers/objective_cpp.rb +31 -0
  215. data/lib/rouge/lexers/ocaml.rb +29 -64
  216. data/lib/rouge/lexers/ocaml/common.rb +53 -0
  217. data/lib/rouge/lexers/openedge.rb +429 -0
  218. data/lib/rouge/lexers/opentype_feature_file.rb +113 -0
  219. data/lib/rouge/lexers/pascal.rb +6 -5
  220. data/lib/rouge/lexers/perl.rb +102 -67
  221. data/lib/rouge/lexers/php.rb +91 -53
  222. data/lib/rouge/lexers/php/builtins.rb +183 -174
  223. data/lib/rouge/lexers/plain_text.rb +2 -1
  224. data/lib/rouge/lexers/plist.rb +16 -14
  225. data/lib/rouge/lexers/pony.rb +21 -20
  226. data/lib/rouge/lexers/powershell.rb +190 -638
  227. data/lib/rouge/lexers/praat.rb +76 -75
  228. data/lib/rouge/lexers/prolog.rb +27 -19
  229. data/lib/rouge/lexers/prometheus.rb +32 -30
  230. data/lib/rouge/lexers/properties.rb +13 -12
  231. data/lib/rouge/lexers/protobuf.rb +23 -22
  232. data/lib/rouge/lexers/puppet.rb +33 -32
  233. data/lib/rouge/lexers/python.rb +124 -99
  234. data/lib/rouge/lexers/q.rb +17 -14
  235. data/lib/rouge/lexers/qml.rb +13 -12
  236. data/lib/rouge/lexers/r.rb +13 -13
  237. data/lib/rouge/lexers/racket.rb +47 -22
  238. data/lib/rouge/lexers/reasonml.rb +65 -0
  239. data/lib/rouge/lexers/rego.rb +45 -0
  240. data/lib/rouge/lexers/robot_framework.rb +249 -0
  241. data/lib/rouge/lexers/ruby.rb +88 -71
  242. data/lib/rouge/lexers/rust.rb +45 -44
  243. data/lib/rouge/lexers/sas.rb +563 -0
  244. data/lib/rouge/lexers/sass.rb +9 -8
  245. data/lib/rouge/lexers/sass/common.rb +41 -40
  246. data/lib/rouge/lexers/scala.rb +67 -40
  247. data/lib/rouge/lexers/scheme.rb +19 -18
  248. data/lib/rouge/lexers/scss.rb +4 -3
  249. data/lib/rouge/lexers/sed.rb +31 -30
  250. data/lib/rouge/lexers/shell.rb +67 -55
  251. data/lib/rouge/lexers/sieve.rb +10 -9
  252. data/lib/rouge/lexers/slice.rb +32 -0
  253. data/lib/rouge/lexers/slim.rb +27 -26
  254. data/lib/rouge/lexers/smalltalk.rb +34 -33
  255. data/lib/rouge/lexers/smarty.rb +20 -19
  256. data/lib/rouge/lexers/sml.rb +68 -67
  257. data/lib/rouge/lexers/solidity.rb +185 -0
  258. data/lib/rouge/lexers/sparql.rb +129 -0
  259. data/lib/rouge/lexers/sqf.rb +109 -0
  260. data/lib/rouge/lexers/sqf/commands.rb +15 -0
  261. data/lib/rouge/lexers/sql.rb +47 -26
  262. data/lib/rouge/lexers/supercollider.rb +116 -0
  263. data/lib/rouge/lexers/swift.rb +49 -44
  264. data/lib/rouge/lexers/tap.rb +22 -20
  265. data/lib/rouge/lexers/tcl.rb +28 -27
  266. data/lib/rouge/lexers/terraform.rb +37 -13
  267. data/lib/rouge/lexers/tex.rb +20 -19
  268. data/lib/rouge/lexers/toml.rb +59 -20
  269. data/lib/rouge/lexers/tsx.rb +1 -0
  270. data/lib/rouge/lexers/ttcn3.rb +119 -0
  271. data/lib/rouge/lexers/tulip.rb +38 -36
  272. data/lib/rouge/lexers/turtle.rb +36 -38
  273. data/lib/rouge/lexers/twig.rb +1 -0
  274. data/lib/rouge/lexers/typescript.rb +12 -0
  275. data/lib/rouge/lexers/typescript/common.rb +1 -0
  276. data/lib/rouge/lexers/vala.rb +19 -18
  277. data/lib/rouge/lexers/varnish.rb +168 -0
  278. data/lib/rouge/lexers/vb.rb +28 -27
  279. data/lib/rouge/lexers/verilog.rb +27 -28
  280. data/lib/rouge/lexers/vhdl.rb +12 -11
  281. data/lib/rouge/lexers/viml.rb +15 -14
  282. data/lib/rouge/lexers/viml/keywords.rb +2 -0
  283. data/lib/rouge/lexers/vue.rb +15 -10
  284. data/lib/rouge/lexers/wollok.rb +27 -26
  285. data/lib/rouge/lexers/xml.rb +18 -21
  286. data/lib/rouge/lexers/xojo.rb +61 -0
  287. data/lib/rouge/lexers/xpath.rb +332 -0
  288. data/lib/rouge/lexers/xquery.rb +145 -0
  289. data/lib/rouge/lexers/yaml.rb +64 -61
  290. data/lib/rouge/lexers/yang.rb +147 -0
  291. data/lib/rouge/plugins/redcarpet.rb +9 -2
  292. data/lib/rouge/regex_lexer.rb +27 -25
  293. data/lib/rouge/template_lexer.rb +1 -0
  294. data/lib/rouge/tex_theme_renderer.rb +132 -0
  295. data/lib/rouge/text_analyzer.rb +1 -0
  296. data/lib/rouge/theme.rb +5 -0
  297. data/lib/rouge/themes/base16.rb +1 -0
  298. data/lib/rouge/themes/bw.rb +41 -0
  299. data/lib/rouge/themes/colorful.rb +1 -0
  300. data/lib/rouge/themes/github.rb +1 -0
  301. data/lib/rouge/themes/gruvbox.rb +1 -0
  302. data/lib/rouge/themes/igor_pro.rb +1 -0
  303. data/lib/rouge/themes/magritte.rb +78 -0
  304. data/lib/rouge/themes/molokai.rb +1 -0
  305. data/lib/rouge/themes/monokai.rb +1 -0
  306. data/lib/rouge/themes/monokai_sublime.rb +4 -1
  307. data/lib/rouge/themes/pastie.rb +2 -1
  308. data/lib/rouge/themes/thankful_eyes.rb +2 -1
  309. data/lib/rouge/themes/tulip.rb +2 -1
  310. data/lib/rouge/token.rb +31 -22
  311. data/lib/rouge/util.rb +3 -2
  312. data/lib/rouge/version.rb +2 -1
  313. data/rouge.gemspec +6 -3
  314. metadata +130 -8
  315. data/lib/rouge/lexers/apache/keywords.yml +0 -764
  316. data/lib/rouge/lexers/lasso/keywords.yml +0 -446
@@ -1,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