rouge 3.0.0 → 3.18.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (320) hide show
  1. checksums.yaml +5 -5
  2. data/Gemfile +17 -3
  3. data/bin/rougify +1 -0
  4. data/lib/rouge.rb +67 -42
  5. data/lib/rouge/cli.rb +87 -18
  6. data/lib/rouge/demos/ada +26 -0
  7. data/lib/rouge/demos/apex +9 -0
  8. data/lib/rouge/demos/armasm +12 -0
  9. data/lib/rouge/demos/batchfile +3 -0
  10. data/lib/rouge/demos/bbcbasic +6 -0
  11. data/lib/rouge/demos/bpf +7 -0
  12. data/lib/rouge/demos/brainfuck +5 -0
  13. data/lib/rouge/demos/clean +6 -0
  14. data/lib/rouge/demos/cmhg +8 -0
  15. data/lib/rouge/demos/crystal +45 -0
  16. data/lib/rouge/demos/csvs +8 -0
  17. data/lib/rouge/demos/cuda +11 -0
  18. data/lib/rouge/demos/cypher +5 -0
  19. data/lib/rouge/demos/cython +6 -0
  20. data/lib/rouge/demos/datastudio +21 -0
  21. data/lib/rouge/demos/ecl +18 -0
  22. data/lib/rouge/demos/eex +1 -0
  23. data/lib/rouge/demos/elm +4 -0
  24. data/lib/rouge/demos/epp +4 -0
  25. data/lib/rouge/demos/escape +3 -0
  26. data/lib/rouge/demos/freefem +16 -0
  27. data/lib/rouge/demos/gdscript +18 -0
  28. data/lib/rouge/demos/ghc-cmm +23 -0
  29. data/lib/rouge/demos/ghc-core +26 -0
  30. data/lib/rouge/demos/hack +5 -0
  31. data/lib/rouge/demos/haxe +5 -0
  32. data/lib/rouge/demos/hcl +7 -0
  33. data/lib/rouge/demos/hocon +8 -0
  34. data/lib/rouge/demos/hql +5 -0
  35. data/lib/rouge/demos/isbl +4 -0
  36. data/lib/rouge/demos/jsl +3 -0
  37. data/lib/rouge/demos/jsp +29 -0
  38. data/lib/rouge/demos/liquid +0 -1
  39. data/lib/rouge/demos/lustre +6 -0
  40. data/lib/rouge/demos/lutin +18 -0
  41. data/lib/rouge/demos/m68k +16 -0
  42. data/lib/rouge/demos/magik +6 -0
  43. data/lib/rouge/demos/mason +22 -0
  44. data/lib/rouge/demos/mathematica +8 -0
  45. data/lib/rouge/demos/minizinc +23 -0
  46. data/lib/rouge/demos/msgtrans +4 -0
  47. data/lib/rouge/demos/nasm +6 -6
  48. data/lib/rouge/demos/nesasm +11 -0
  49. data/lib/rouge/demos/objective_cpp +17 -0
  50. data/lib/rouge/demos/openedge +4 -0
  51. data/lib/rouge/demos/opentype_feature_file +6 -0
  52. data/lib/rouge/demos/plist +1 -132
  53. data/lib/rouge/demos/powershell +12 -48
  54. data/lib/rouge/demos/q +6 -0
  55. data/lib/rouge/demos/reasonml +12 -0
  56. data/lib/rouge/demos/rego +8 -0
  57. data/lib/rouge/demos/robot_framework +27 -0
  58. data/lib/rouge/demos/sas +13 -0
  59. data/lib/rouge/demos/slice +10 -0
  60. data/lib/rouge/demos/solidity +13 -0
  61. data/lib/rouge/demos/sparql +6 -0
  62. data/lib/rouge/demos/sqf +14 -0
  63. data/lib/rouge/demos/supercollider +11 -0
  64. data/lib/rouge/demos/terraform +16 -0
  65. data/lib/rouge/demos/ttcn3 +6 -0
  66. data/lib/rouge/demos/vcl +12 -0
  67. data/lib/rouge/demos/xojo +14 -0
  68. data/lib/rouge/demos/xpath +2 -0
  69. data/lib/rouge/demos/xquery +22 -0
  70. data/lib/rouge/demos/yang +17 -0
  71. data/lib/rouge/formatter.rb +39 -2
  72. data/lib/rouge/formatters/html.rb +21 -2
  73. data/lib/rouge/formatters/html_inline.rb +1 -0
  74. data/lib/rouge/formatters/html_legacy.rb +1 -0
  75. data/lib/rouge/formatters/html_line_table.rb +53 -0
  76. data/lib/rouge/formatters/html_linewise.rb +7 -11
  77. data/lib/rouge/formatters/html_pygments.rb +2 -0
  78. data/lib/rouge/formatters/html_table.rb +21 -31
  79. data/lib/rouge/formatters/null.rb +1 -0
  80. data/lib/rouge/formatters/terminal256.rb +23 -5
  81. data/lib/rouge/formatters/terminal_truecolor.rb +37 -0
  82. data/lib/rouge/formatters/tex.rb +92 -0
  83. data/lib/rouge/guesser.rb +2 -0
  84. data/lib/rouge/guessers/disambiguation.rb +48 -0
  85. data/lib/rouge/guessers/filename.rb +2 -0
  86. data/lib/rouge/guessers/glob_mapping.rb +3 -1
  87. data/lib/rouge/guessers/mimetype.rb +2 -0
  88. data/lib/rouge/guessers/modeline.rb +3 -1
  89. data/lib/rouge/guessers/source.rb +3 -1
  90. data/lib/rouge/guessers/util.rb +2 -0
  91. data/lib/rouge/lexer.rb +71 -15
  92. data/lib/rouge/lexers/abap.rb +13 -11
  93. data/lib/rouge/lexers/actionscript.rb +35 -34
  94. data/lib/rouge/lexers/ada.rb +162 -0
  95. data/lib/rouge/lexers/apache.rb +13 -15
  96. data/lib/rouge/lexers/apache/keywords.rb +15 -0
  97. data/lib/rouge/lexers/apex.rb +126 -0
  98. data/lib/rouge/lexers/apiblueprint.rb +2 -0
  99. data/lib/rouge/lexers/apple_script.rb +17 -14
  100. data/lib/rouge/lexers/armasm.rb +145 -0
  101. data/lib/rouge/lexers/awk.rb +26 -25
  102. data/lib/rouge/lexers/batchfile.rb +164 -0
  103. data/lib/rouge/lexers/bbcbasic.rb +112 -0
  104. data/lib/rouge/lexers/biml.rb +6 -4
  105. data/lib/rouge/lexers/bpf.rb +118 -0
  106. data/lib/rouge/lexers/brainfuck.rb +53 -0
  107. data/lib/rouge/lexers/bsl.rb +13 -12
  108. data/lib/rouge/lexers/c.rb +36 -58
  109. data/lib/rouge/lexers/ceylon.rb +7 -34
  110. data/lib/rouge/lexers/cfscript.rb +27 -26
  111. data/lib/rouge/lexers/clean.rb +156 -0
  112. data/lib/rouge/lexers/clojure.rb +15 -14
  113. data/lib/rouge/lexers/cmake.rb +16 -14
  114. data/lib/rouge/lexers/cmhg.rb +34 -0
  115. data/lib/rouge/lexers/coffeescript.rb +90 -49
  116. data/lib/rouge/lexers/common_lisp.rb +39 -38
  117. data/lib/rouge/lexers/conf.rb +7 -6
  118. data/lib/rouge/lexers/console.rb +92 -38
  119. data/lib/rouge/lexers/coq.rb +27 -23
  120. data/lib/rouge/lexers/cpp.rb +24 -13
  121. data/lib/rouge/lexers/crystal.rb +430 -0
  122. data/lib/rouge/lexers/csharp.rb +29 -29
  123. data/lib/rouge/lexers/css.rb +24 -23
  124. data/lib/rouge/lexers/csvs.rb +44 -0
  125. data/lib/rouge/lexers/cuda.rb +35 -0
  126. data/lib/rouge/lexers/cypher.rb +108 -0
  127. data/lib/rouge/lexers/cython.rb +151 -0
  128. data/lib/rouge/lexers/d.rb +64 -63
  129. data/lib/rouge/lexers/dart.rb +34 -33
  130. data/lib/rouge/lexers/datastudio.rb +138 -0
  131. data/lib/rouge/lexers/diff.rb +10 -4
  132. data/lib/rouge/lexers/digdag.rb +3 -1
  133. data/lib/rouge/lexers/docker.rb +12 -11
  134. data/lib/rouge/lexers/dot.rb +19 -18
  135. data/lib/rouge/lexers/ecl.rb +175 -0
  136. data/lib/rouge/lexers/eex.rb +52 -0
  137. data/lib/rouge/lexers/eiffel.rb +21 -20
  138. data/lib/rouge/lexers/elixir.rb +52 -36
  139. data/lib/rouge/lexers/elm.rb +90 -0
  140. data/lib/rouge/lexers/epp.rb +51 -0
  141. data/lib/rouge/lexers/erb.rb +5 -4
  142. data/lib/rouge/lexers/erlang.rb +1 -0
  143. data/lib/rouge/lexers/escape.rb +58 -0
  144. data/lib/rouge/lexers/factor.rb +41 -40
  145. data/lib/rouge/lexers/fortran.rb +36 -34
  146. data/lib/rouge/lexers/freefem.rb +240 -0
  147. data/lib/rouge/lexers/fsharp.rb +34 -32
  148. data/lib/rouge/lexers/gdscript.rb +171 -0
  149. data/lib/rouge/lexers/ghc_cmm.rb +340 -0
  150. data/lib/rouge/lexers/ghc_core.rb +151 -0
  151. data/lib/rouge/lexers/gherkin.rb +17 -14
  152. data/lib/rouge/lexers/gherkin/keywords.rb +2 -0
  153. data/lib/rouge/lexers/glsl.rb +2 -5
  154. data/lib/rouge/lexers/go.rb +3 -2
  155. data/lib/rouge/lexers/gradle.rb +1 -0
  156. data/lib/rouge/lexers/graphql.rb +78 -60
  157. data/lib/rouge/lexers/groovy.rb +24 -25
  158. data/lib/rouge/lexers/hack.rb +49 -0
  159. data/lib/rouge/lexers/haml.rb +26 -29
  160. data/lib/rouge/lexers/handlebars.rb +32 -20
  161. data/lib/rouge/lexers/haskell.rb +78 -62
  162. data/lib/rouge/lexers/haxe.rb +246 -0
  163. data/lib/rouge/lexers/hcl.rb +163 -0
  164. data/lib/rouge/lexers/hocon.rb +86 -0
  165. data/lib/rouge/lexers/hql.rb +139 -0
  166. data/lib/rouge/lexers/html.rb +36 -33
  167. data/lib/rouge/lexers/http.rb +10 -9
  168. data/lib/rouge/lexers/hylang.rb +15 -14
  169. data/lib/rouge/lexers/idlang.rb +34 -32
  170. data/lib/rouge/lexers/igorpro.rb +481 -225
  171. data/lib/rouge/lexers/ini.rb +13 -12
  172. data/lib/rouge/lexers/io.rb +10 -9
  173. data/lib/rouge/lexers/irb.rb +6 -5
  174. data/lib/rouge/lexers/isbl.rb +97 -0
  175. data/lib/rouge/lexers/isbl/builtins.rb +17 -0
  176. data/lib/rouge/lexers/java.rb +30 -26
  177. data/lib/rouge/lexers/javascript.rb +59 -61
  178. data/lib/rouge/lexers/jinja.rb +39 -22
  179. data/lib/rouge/lexers/jsl.rb +55 -0
  180. data/lib/rouge/lexers/json.rb +54 -11
  181. data/lib/rouge/lexers/json_doc.rb +8 -5
  182. data/lib/rouge/lexers/jsonnet.rb +19 -18
  183. data/lib/rouge/lexers/jsp.rb +120 -0
  184. data/lib/rouge/lexers/jsx.rb +18 -16
  185. data/lib/rouge/lexers/julia.rb +192 -74
  186. data/lib/rouge/lexers/kotlin.rb +79 -27
  187. data/lib/rouge/lexers/lasso.rb +54 -58
  188. data/lib/rouge/lexers/lasso/keywords.rb +14 -0
  189. data/lib/rouge/lexers/liquid.rb +116 -118
  190. data/lib/rouge/lexers/literate_coffeescript.rb +3 -2
  191. data/lib/rouge/lexers/literate_haskell.rb +6 -5
  192. data/lib/rouge/lexers/llvm.rb +66 -49
  193. data/lib/rouge/lexers/lua.rb +43 -4
  194. data/lib/rouge/lexers/lua/builtins.rb +2 -0
  195. data/lib/rouge/lexers/lustre.rb +79 -0
  196. data/lib/rouge/lexers/lutin.rb +33 -0
  197. data/lib/rouge/lexers/m68k.rb +143 -0
  198. data/lib/rouge/lexers/magik.rb +127 -0
  199. data/lib/rouge/lexers/make.rb +57 -34
  200. data/lib/rouge/lexers/markdown.rb +67 -39
  201. data/lib/rouge/lexers/mason.rb +110 -0
  202. data/lib/rouge/lexers/mathematica.rb +96 -0
  203. data/lib/rouge/lexers/mathematica/builtins.rb +13 -0
  204. data/lib/rouge/lexers/matlab.rb +26 -17
  205. data/lib/rouge/lexers/matlab/builtins.rb +4 -4
  206. data/lib/rouge/lexers/minizinc.rb +87 -0
  207. data/lib/rouge/lexers/moonscript.rb +4 -3
  208. data/lib/rouge/lexers/mosel.rb +64 -63
  209. data/lib/rouge/lexers/msgtrans.rb +26 -0
  210. data/lib/rouge/lexers/mxml.rb +19 -18
  211. data/lib/rouge/lexers/nasm.rb +43 -169
  212. data/lib/rouge/lexers/nesasm.rb +78 -0
  213. data/lib/rouge/lexers/nginx.rb +15 -14
  214. data/lib/rouge/lexers/nim.rb +4 -2
  215. data/lib/rouge/lexers/nix.rb +48 -42
  216. data/lib/rouge/lexers/objective_c.rb +5 -178
  217. data/lib/rouge/lexers/objective_c/common.rb +184 -0
  218. data/lib/rouge/lexers/objective_cpp.rb +31 -0
  219. data/lib/rouge/lexers/ocaml.rb +29 -64
  220. data/lib/rouge/lexers/ocaml/common.rb +53 -0
  221. data/lib/rouge/lexers/openedge.rb +429 -0
  222. data/lib/rouge/lexers/opentype_feature_file.rb +113 -0
  223. data/lib/rouge/lexers/pascal.rb +6 -5
  224. data/lib/rouge/lexers/perl.rb +103 -68
  225. data/lib/rouge/lexers/php.rb +94 -54
  226. data/lib/rouge/lexers/php/builtins.rb +183 -174
  227. data/lib/rouge/lexers/plain_text.rb +2 -1
  228. data/lib/rouge/lexers/plist.rb +16 -14
  229. data/lib/rouge/lexers/pony.rb +21 -20
  230. data/lib/rouge/lexers/powershell.rb +191 -639
  231. data/lib/rouge/lexers/praat.rb +76 -75
  232. data/lib/rouge/lexers/prolog.rb +27 -19
  233. data/lib/rouge/lexers/prometheus.rb +32 -30
  234. data/lib/rouge/lexers/properties.rb +13 -12
  235. data/lib/rouge/lexers/protobuf.rb +23 -22
  236. data/lib/rouge/lexers/puppet.rb +33 -32
  237. data/lib/rouge/lexers/python.rb +124 -98
  238. data/lib/rouge/lexers/q.rb +17 -14
  239. data/lib/rouge/lexers/qml.rb +13 -12
  240. data/lib/rouge/lexers/r.rb +13 -13
  241. data/lib/rouge/lexers/racket.rb +47 -22
  242. data/lib/rouge/lexers/reasonml.rb +65 -0
  243. data/lib/rouge/lexers/rego.rb +45 -0
  244. data/lib/rouge/lexers/robot_framework.rb +249 -0
  245. data/lib/rouge/lexers/ruby.rb +88 -71
  246. data/lib/rouge/lexers/rust.rb +47 -46
  247. data/lib/rouge/lexers/sas.rb +563 -0
  248. data/lib/rouge/lexers/sass.rb +11 -10
  249. data/lib/rouge/lexers/sass/common.rb +41 -40
  250. data/lib/rouge/lexers/scala.rb +67 -40
  251. data/lib/rouge/lexers/scheme.rb +19 -18
  252. data/lib/rouge/lexers/scss.rb +6 -5
  253. data/lib/rouge/lexers/sed.rb +31 -30
  254. data/lib/rouge/lexers/shell.rb +83 -62
  255. data/lib/rouge/lexers/sieve.rb +10 -9
  256. data/lib/rouge/lexers/slice.rb +32 -0
  257. data/lib/rouge/lexers/slim.rb +27 -26
  258. data/lib/rouge/lexers/smalltalk.rb +34 -33
  259. data/lib/rouge/lexers/smarty.rb +20 -19
  260. data/lib/rouge/lexers/sml.rb +68 -67
  261. data/lib/rouge/lexers/solidity.rb +185 -0
  262. data/lib/rouge/lexers/sparql.rb +129 -0
  263. data/lib/rouge/lexers/sqf.rb +109 -0
  264. data/lib/rouge/lexers/sqf/commands.rb +15 -0
  265. data/lib/rouge/lexers/sql.rb +47 -26
  266. data/lib/rouge/lexers/supercollider.rb +116 -0
  267. data/lib/rouge/lexers/swift.rb +63 -38
  268. data/lib/rouge/lexers/tap.rb +22 -20
  269. data/lib/rouge/lexers/tcl.rb +28 -27
  270. data/lib/rouge/lexers/terraform.rb +128 -0
  271. data/lib/rouge/lexers/tex.rb +20 -19
  272. data/lib/rouge/lexers/toml.rb +59 -20
  273. data/lib/rouge/lexers/tsx.rb +1 -0
  274. data/lib/rouge/lexers/ttcn3.rb +119 -0
  275. data/lib/rouge/lexers/tulip.rb +38 -36
  276. data/lib/rouge/lexers/turtle.rb +36 -38
  277. data/lib/rouge/lexers/twig.rb +1 -0
  278. data/lib/rouge/lexers/typescript.rb +12 -0
  279. data/lib/rouge/lexers/typescript/common.rb +1 -0
  280. data/lib/rouge/lexers/vala.rb +19 -18
  281. data/lib/rouge/lexers/varnish.rb +168 -0
  282. data/lib/rouge/lexers/vb.rb +28 -27
  283. data/lib/rouge/lexers/verilog.rb +27 -28
  284. data/lib/rouge/lexers/vhdl.rb +13 -12
  285. data/lib/rouge/lexers/viml.rb +15 -14
  286. data/lib/rouge/lexers/viml/keywords.rb +2 -0
  287. data/lib/rouge/lexers/vue.rb +19 -12
  288. data/lib/rouge/lexers/wollok.rb +27 -26
  289. data/lib/rouge/lexers/xml.rb +18 -21
  290. data/lib/rouge/lexers/xojo.rb +61 -0
  291. data/lib/rouge/lexers/xpath.rb +332 -0
  292. data/lib/rouge/lexers/xquery.rb +145 -0
  293. data/lib/rouge/lexers/yaml.rb +64 -61
  294. data/lib/rouge/lexers/yang.rb +147 -0
  295. data/lib/rouge/plugins/redcarpet.rb +9 -2
  296. data/lib/rouge/regex_lexer.rb +27 -25
  297. data/lib/rouge/template_lexer.rb +1 -0
  298. data/lib/rouge/tex_theme_renderer.rb +132 -0
  299. data/lib/rouge/text_analyzer.rb +1 -0
  300. data/lib/rouge/theme.rb +5 -0
  301. data/lib/rouge/themes/base16.rb +1 -0
  302. data/lib/rouge/themes/bw.rb +41 -0
  303. data/lib/rouge/themes/colorful.rb +1 -0
  304. data/lib/rouge/themes/github.rb +1 -0
  305. data/lib/rouge/themes/gruvbox.rb +1 -0
  306. data/lib/rouge/themes/igor_pro.rb +1 -0
  307. data/lib/rouge/themes/magritte.rb +78 -0
  308. data/lib/rouge/themes/molokai.rb +1 -0
  309. data/lib/rouge/themes/monokai.rb +1 -0
  310. data/lib/rouge/themes/monokai_sublime.rb +4 -1
  311. data/lib/rouge/themes/pastie.rb +2 -1
  312. data/lib/rouge/themes/thankful_eyes.rb +2 -1
  313. data/lib/rouge/themes/tulip.rb +2 -1
  314. data/lib/rouge/token.rb +31 -22
  315. data/lib/rouge/util.rb +3 -2
  316. data/lib/rouge/version.rb +2 -1
  317. data/rouge.gemspec +8 -1
  318. metadata +141 -7
  319. data/lib/rouge/lexers/apache/keywords.yml +0 -764
  320. data/lib/rouge/lexers/lasso/keywords.yml +0 -446
@@ -1,4 +1,5 @@
1
1
  # -*- coding: utf-8 -*- #
2
+ # frozen_string_literal: true
2
3
 
3
4
  module Rouge
4
5
  module Lexers
@@ -13,38 +14,38 @@ module Rouge
13
14
  identifier = /[\w.-]+/
14
15
 
15
16
  state :basic do
16
- rule /[!#].*?\n/, Comment
17
- rule /\s+/, Text
18
- rule /\\\n/, Str::Escape
17
+ rule %r/[!#].*?\n/, Comment
18
+ rule %r/\s+/, Text
19
+ rule %r/\\\n/, Str::Escape
19
20
  end
20
21
 
21
22
  state :root do
22
23
  mixin :basic
23
24
 
24
- rule /(#{identifier})(\s*)([=:])/ do
25
+ rule %r/(#{identifier})(\s*)([=:])/ do
25
26
  groups Name::Property, Text, Punctuation
26
27
  push :value
27
28
  end
28
29
  end
29
30
 
30
31
  state :value do
31
- rule /\n/, Text, :pop!
32
+ rule %r/\n/, Text, :pop!
32
33
  mixin :basic
33
- rule /"/, Str, :dq
34
- rule /'.*?'/, Str
34
+ rule %r/"/, Str, :dq
35
+ rule %r/'.*?'/, Str
35
36
  mixin :esc_str
36
- rule /[^\\\n]+/, Str
37
+ rule %r/[^\\\n]+/, Str
37
38
  end
38
39
 
39
40
  state :dq do
40
- rule /"/, Str, :pop!
41
+ rule %r/"/, Str, :pop!
41
42
  mixin :esc_str
42
- rule /[^\\"]+/m, Str
43
+ rule %r/[^\\"]+/m, Str
43
44
  end
44
45
 
45
46
  state :esc_str do
46
- rule /\\u[0-9]{4}/, Str::Escape
47
- rule /\\./m, Str::Escape
47
+ rule %r/\\u[0-9]{4}/, Str::Escape
48
+ rule %r/\\./m, Str::Escape
48
49
  end
49
50
  end
50
51
  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
@@ -14,55 +15,55 @@ module Rouge
14
15
  datatype = /\b(bool|bytes|double|fixed32|fixed64|float|int32|int64|sfixed32|sfixed64|sint32|sint64|string|uint32|uint64)\b/
15
16
 
16
17
  state :root do
17
- rule /[\s]+/, Text
18
- rule /[,;{}\[\]()]/, Punctuation
19
- rule /\/(\\\n)?\/(\n|(.|\n)*?[^\\]\n)/, Comment::Single
20
- rule /\/(\\\n)?\*(.|\n)*?\*(\\\n)?\//, Comment::Multiline
18
+ rule %r/[\s]+/, Text
19
+ rule %r/[,;{}\[\]()]/, Punctuation
20
+ rule %r/\/(\\\n)?\/($|(.|\n)*?[^\\]$)/, Comment::Single
21
+ rule %r/\/(\\\n)?\*(.|\n)*?\*(\\\n)?\//, Comment::Multiline
21
22
  rule kw, Keyword
22
23
  rule datatype, Keyword::Type
23
- rule /true|false/, Keyword::Constant
24
- rule /(package)(\s+)/ do
24
+ rule %r/true|false/, Keyword::Constant
25
+ rule %r/(package)(\s+)/ do
25
26
  groups Keyword::Namespace, Text
26
27
  push :package
27
28
  end
28
29
 
29
- rule /(message|extend)(\s+)/ do
30
+ rule %r/(message|extend)(\s+)/ do
30
31
  groups Keyword::Declaration, Text
31
32
  push :message
32
33
  end
33
34
 
34
- rule /(enum|group|service)(\s+)/ do
35
+ rule %r/(enum|group|service)(\s+)/ do
35
36
  groups Keyword::Declaration, Text
36
37
  push :type
37
38
  end
38
39
 
39
- rule /".*?"/, Str
40
- rule /'.*?'/, Str
41
- rule /(\d+\.\d*|\.\d+|\d+)[eE][+-]?\d+[LlUu]*/, Num::Float
42
- rule /(\d+\.\d*|\.\d+|\d+[fF])[fF]?/, Num::Float
43
- rule /(\-?(inf|nan))\b/, Num::Float
44
- rule /0x[0-9a-fA-F]+[LlUu]*/, Num::Hex
45
- rule /0[0-7]+[LlUu]*/, Num::Oct
46
- rule /\d+[LlUu]*/, Num::Integer
47
- rule /[+-=]/, Operator
48
- rule /([a-zA-Z_][\w.]*)([ \t]*)(=)/ do
40
+ rule %r/".*?"/, Str
41
+ rule %r/'.*?'/, Str
42
+ rule %r/(\d+\.\d*|\.\d+|\d+)[eE][+-]?\d+[LlUu]*/, Num::Float
43
+ rule %r/(\d+\.\d*|\.\d+|\d+[fF])[fF]?/, Num::Float
44
+ rule %r/(\-?(inf|nan))\b/, Num::Float
45
+ rule %r/0x[0-9a-fA-F]+[LlUu]*/, Num::Hex
46
+ rule %r/0[0-7]+[LlUu]*/, Num::Oct
47
+ rule %r/\d+[LlUu]*/, Num::Integer
48
+ rule %r/[+-=]/, Operator
49
+ rule %r/([a-zA-Z_][\w.]*)([ \t]*)(=)/ do
49
50
  groups Name::Attribute, Text, Operator
50
51
  end
51
- rule /[a-zA-Z_][\w.]*/, Name
52
+ rule %r/[a-zA-Z_][\w.]*/, Name
52
53
  end
53
54
 
54
55
  state :package do
55
- rule /[a-zA-Z_]\w*/, Name::Namespace, :pop!
56
+ rule %r/[a-zA-Z_]\w*/, Name::Namespace, :pop!
56
57
  rule(//) { pop! }
57
58
  end
58
59
 
59
60
  state :message do
60
- rule /[a-zA-Z_]\w*/, Name::Class, :pop!
61
+ rule %r/[a-zA-Z_]\w*/, Name::Class, :pop!
61
62
  rule(//) { pop! }
62
63
  end
63
64
 
64
65
  state :type do
65
- rule /[a-zA-Z_]\w*/, Name, :pop!
66
+ rule %r/[a-zA-Z_]\w*/, Name, :pop!
66
67
  rule(//) { pop! }
67
68
  end
68
69
  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
@@ -38,15 +39,15 @@ module Rouge
38
39
  qualname = /(::)?(#{id}::)*\w+/
39
40
 
40
41
  state :whitespace do
41
- rule /\s+/m, Text
42
- rule /#.*?\n/, Comment
42
+ rule %r/\s+/m, Text
43
+ rule %r/#.*?\n/, Comment
43
44
  end
44
45
 
45
46
  state :root do
46
47
  mixin :whitespace
47
48
 
48
- rule /[$]#{qualname}/, Name::Variable
49
- rule /(#{id})(?=\s*[=+]>)/m do |m|
49
+ rule %r/[$]#{qualname}/, Name::Variable
50
+ rule %r/(#{id})(?=\s*[=+]>)/m do |m|
50
51
  if self.class.metaparameters.include? m[0]
51
52
  token Keyword::Pseudo
52
53
  else
@@ -54,31 +55,31 @@ module Rouge
54
55
  end
55
56
  end
56
57
 
57
- rule /(#{qualname})(?=\s*[(])/m, Name::Function
58
+ rule %r/(#{qualname})(?=\s*[(])/m, Name::Function
58
59
  rule cap_id, Name::Class
59
60
 
60
- rule /[+=|~-]>|<[|~-]/, Punctuation
61
- rule /[:}();\[\]]/, Punctuation
61
+ rule %r/[+=|~-]>|<[|~-]/, Punctuation
62
+ rule %r/[|:}();\[\]]/, Punctuation
62
63
 
63
64
  # HACK for case statements and selectors
64
- rule /{/, Punctuation, :regex_allowed
65
- rule /,/, Punctuation, :regex_allowed
65
+ rule %r/{/, Punctuation, :regex_allowed
66
+ rule %r/,/, Punctuation, :regex_allowed
66
67
 
67
- rule /(in|and|or)\b/, Operator::Word
68
- rule /[=!<>]=/, Operator
69
- rule /[=!]~/, Operator, :regex_allowed
70
- rule %r([<>!+*/-]), Operator
68
+ rule %r/(in|and|or)\b/, Operator::Word
69
+ rule %r/[=!<>]=/, Operator
70
+ rule %r/[=!]~/, Operator, :regex_allowed
71
+ rule %r([.=<>!+*/-]), Operator
71
72
 
72
- rule /(class|include)(\s*)(#{qualname})/ do
73
+ rule %r/(class|include)(\s*)(#{qualname})/ do
73
74
  groups Keyword, Text, Name::Class
74
75
  end
75
76
 
76
- rule /node\b/, Keyword, :regex_allowed
77
+ rule %r/node\b/, Keyword, :regex_allowed
77
78
 
78
- rule /'(\\[\\']|[^'])*'/m, Str::Single
79
- rule /"/, Str::Double, :dquotes
79
+ rule %r/'(\\[\\']|[^'])*'/m, Str::Single
80
+ rule %r/"/, Str::Double, :dquotes
80
81
 
81
- rule /\d+([.]\d+)?(e[+-]\d+)?/, Num
82
+ rule %r/\d+([.]\d+)?(e[+-]\d+)?/, Num
82
83
 
83
84
  # a valid regex. TODO: regexes are only allowed
84
85
  # in certain places in puppet.
@@ -102,26 +103,26 @@ module Rouge
102
103
 
103
104
  state :regex do
104
105
  rule %r(/), Str::Regex, :pop!
105
- rule /\\./, Str::Escape
106
- rule /[(){}]/, Str::Interpol
107
- rule /\[/, Str::Interpol, :regex_class
108
- rule /./, Str::Regex
106
+ rule %r/\\./, Str::Escape
107
+ rule %r/[(){}]/, Str::Interpol
108
+ rule %r/\[/, Str::Interpol, :regex_class
109
+ rule %r/./, Str::Regex
109
110
  end
110
111
 
111
112
  state :regex_class do
112
- rule /\]/, Str::Interpol, :pop!
113
- rule /(?<!\[)-(?=\])/, Str::Regex
114
- rule /-/, Str::Interpol
115
- rule /\\./, Str::Escape
116
- rule /[^\\\]-]+/, Str::Regex
113
+ rule %r/\]/, Str::Interpol, :pop!
114
+ rule %r/(?<!\[)-(?=\])/, Str::Regex
115
+ rule %r/-/, Str::Interpol
116
+ rule %r/\\./, Str::Escape
117
+ rule %r/[^\\\]-]+/, Str::Regex
117
118
  end
118
119
 
119
120
  state :dquotes do
120
- rule /"/, Str::Double, :pop!
121
- rule /[^$\\"]+/m, Str::Double
122
- rule /\\./m, Str::Escape
123
- rule /[$]#{qualname}/, Name::Variable
124
- rule /[$][{]#{qualname}[}]/, Name::Variable
121
+ rule %r/"/, Str::Double, :pop!
122
+ rule %r/[^$\\"]+/m, Str::Double
123
+ rule %r/\\./m, Str::Escape
124
+ rule %r/[$]#{qualname}/, Name::Variable
125
+ rule %r/[$][{]#{qualname}[}]/, Name::Variable
125
126
  end
126
127
  end
127
128
  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
@@ -7,11 +8,12 @@ module Rouge
7
8
  desc "The Python programming language (python.org)"
8
9
  tag 'python'
9
10
  aliases 'py'
10
- filenames '*.py', '*.pyw', '*.sc', 'SConstruct', 'SConscript', '*.tac'
11
+ filenames '*.py', '*.pyw', '*.sc', 'SConstruct', 'SConscript', '*.tac',
12
+ '*.bzl', 'BUCK', 'BUILD', 'BUILD.bazel', 'WORKSPACE'
11
13
  mimetypes 'text/x-python', 'application/x-python'
12
14
 
13
15
  def self.detect?(text)
14
- return true if text.shebang?(/pythonw?(3|2(\.\d)?)?/)
16
+ return true if text.shebang?(/pythonw?(?:[23](?:\.\d+)?)?/)
15
17
  end
16
18
 
17
19
  def self.keywords
@@ -19,17 +21,18 @@ module Rouge
19
21
  assert break continue del elif else except exec
20
22
  finally for global if lambda pass print raise
21
23
  return try while yield as with from import yield
24
+ async await nonlocal
22
25
  )
23
26
  end
24
27
 
25
28
  def self.builtins
26
29
  @builtins ||= %w(
27
- __import__ abs all any apply basestring bin bool buffer
30
+ __import__ abs all any apply ascii basestring bin bool buffer
28
31
  bytearray bytes callable chr classmethod cmp coerce compile
29
32
  complex delattr dict dir divmod enumerate eval execfile exit
30
- file filter float frozenset getattr globals hasattr hash hex id
33
+ file filter float format frozenset getattr globals hasattr hash hex id
31
34
  input int intern isinstance issubclass iter len list locals
32
- long map max min next object oct open ord pow property range
35
+ long map max memoryview min next object oct open ord pow property range
33
36
  raw_input reduce reload repr reversed round set setattr slice
34
37
  sorted staticmethod str sum super tuple type unichr unicode
35
38
  vars xrange zip
@@ -43,15 +46,21 @@ module Rouge
43
46
  def self.exceptions
44
47
  @exceptions ||= %w(
45
48
  ArithmeticError AssertionError AttributeError
46
- BaseException DeprecationWarning EOFError EnvironmentError
47
- Exception FloatingPointError FutureWarning GeneratorExit IOError
48
- ImportError ImportWarning IndentationError IndexError KeyError
49
- KeyboardInterrupt LookupError MemoryError NameError
50
- NotImplemented NotImplementedError OSError OverflowError
51
- OverflowWarning PendingDeprecationWarning ReferenceError
52
- RuntimeError RuntimeWarning StandardError StopIteration
53
- SyntaxError SyntaxWarning SystemError SystemExit TabError
54
- TypeError UnboundLocalError UnicodeDecodeError
49
+ BaseException BlockingIOError BrokenPipeError BufferError
50
+ BytesWarning ChildProcessError ConnectionAbortedError
51
+ ConnectionError ConnectionRefusedError ConnectionResetError
52
+ DeprecationWarning EOFError EnvironmentError
53
+ Exception FileExistsError FileNotFoundError
54
+ FloatingPointError FutureWarning GeneratorExit IOError
55
+ ImportError ImportWarning IndentationError IndexError
56
+ InterruptedError IsADirectoryError KeyError KeyboardInterrupt
57
+ LookupError MemoryError ModuleNotFoundError NameError
58
+ NotADirectoryError NotImplemented NotImplementedError OSError
59
+ OverflowError OverflowWarning PendingDeprecationWarning
60
+ ProcessLookupError RecursionError ReferenceError ResourceWarning
61
+ RuntimeError RuntimeWarning StandardError StopAsyncIteration
62
+ StopIteration SyntaxError SyntaxWarning SystemError SystemExit
63
+ TabError TimeoutError TypeError UnboundLocalError UnicodeDecodeError
55
64
  UnicodeEncodeError UnicodeError UnicodeTranslateError
56
65
  UnicodeWarning UserWarning ValueError VMSError Warning
57
66
  WindowsError ZeroDivisionError
@@ -60,22 +69,28 @@ module Rouge
60
69
 
61
70
  identifier = /[a-z_][a-z0-9_]*/i
62
71
  dotted_identifier = /[a-z_.][a-z0-9_.]*/i
72
+
73
+ def current_string
74
+ @string_register ||= StringRegister.new
75
+ end
76
+
63
77
  state :root do
64
- rule /\n+/m, Text
65
- rule /^(:)(\s*)([ru]{,2}""".*?""")/mi do
78
+ rule %r/\n+/m, Text
79
+ rule %r/^(:)(\s*)([ru]{,2}""".*?""")/mi do
66
80
  groups Punctuation, Text, Str::Doc
67
81
  end
68
82
 
69
- rule /[^\S\n]+/, Text
70
- rule /#.*$/, Comment
71
- rule /[\[\]{}:(),;]/, Punctuation
72
- rule /\\\n/, Text
73
- rule /\\/, Text
83
+ rule %r/[^\S\n]+/, Text
84
+ rule %r(#(.*)?\n?), Comment::Single
85
+ rule %r/[\[\]{}:(),;.]/, Punctuation
86
+ rule %r/\\\n/, Text
87
+ rule %r/\\/, Text
74
88
 
75
- rule /(in|is|and|or|not)\b/, Operator::Word
76
- rule /!=|==|<<|>>|[-~+\/*%=<>&^|.]/, Operator
89
+ rule %r/(in|is|and|or|not)\b/, Operator::Word
90
+ rule %r/(<<|>>|\/\/|\*\*)=?/, Operator
91
+ rule %r/[-~+\/*%=<>&^|@]=?|!=/, Operator
77
92
 
78
- rule /(from)((?:\\\s|\s)+)(#{dotted_identifier})((?:\\\s|\s)+)(import)/ do
93
+ rule %r/(from)((?:\\\s|\s)+)(#{dotted_identifier})((?:\\\s|\s)+)(import)/ do
79
94
  groups Keyword::Namespace,
80
95
  Text,
81
96
  Name::Namespace,
@@ -83,35 +98,32 @@ module Rouge
83
98
  Keyword::Namespace
84
99
  end
85
100
 
86
- rule /(import)(\s+)(#{dotted_identifier})/ do
101
+ rule %r/(import)(\s+)(#{dotted_identifier})/ do
87
102
  groups Keyword::Namespace, Text, Name::Namespace
88
103
  end
89
104
 
90
- rule /(def)((?:\s|\\\s)+)/ do
105
+ rule %r/(def)((?:\s|\\\s)+)/ do
91
106
  groups Keyword, Text
92
107
  push :funcname
93
108
  end
94
109
 
95
- rule /(class)((?:\s|\\\s)+)/ do
110
+ rule %r/(class)((?:\s|\\\s)+)/ do
96
111
  groups Keyword, Text
97
112
  push :classname
98
113
  end
99
114
 
100
115
  # TODO: not in python 3
101
- rule /`.*?`/, Str::Backtick
102
- rule /(?:r|ur|ru)"""/i, Str, :raw_tdqs
103
- rule /(?:r|ur|ru)'''/i, Str, :raw_tsqs
104
- rule /(?:r|ur|ru)"/i, Str, :raw_dqs
105
- rule /(?:r|ur|ru)'/i, Str, :raw_sqs
106
- rule /u?"""/i, Str, :tdqs
107
- rule /u?'''/i, Str, :tsqs
108
- rule /u?"/i, Str, :dqs
109
- rule /u?'/i, Str, :sqs
110
-
111
- rule /@#{dotted_identifier}/i, Name::Decorator
116
+ rule %r/`.*?`/, Str::Backtick
117
+ rule %r/([rfbu]{0,2})('''|"""|['"])/i do |m|
118
+ token Str
119
+ current_string.register type: m[1].downcase, delim: m[2]
120
+ push :generic_string
121
+ end
122
+
123
+ rule %r/@#{dotted_identifier}/i, Name::Decorator
112
124
 
113
125
  # using negative lookbehind so we don't match property names
114
- rule /(?<!\.)#{identifier}/ do |m|
126
+ rule %r/(?<!\.)#{identifier}/ do |m|
115
127
  if self.class.keywords.include? m[0]
116
128
  token Keyword
117
129
  elsif self.class.exceptions.include? m[0]
@@ -127,12 +139,18 @@ module Rouge
127
139
 
128
140
  rule identifier, Name
129
141
 
130
- rule /(\d+\.\d*|\d*\.\d+)(e[+-]?[0-9]+)?/i, Num::Float
131
- rule /\d+e[+-]?[0-9]+/i, Num::Float
132
- rule /0[0-7]+/, Num::Oct
133
- rule /0x[a-f0-9]+/i, Num::Hex
134
- rule /\d+L/, Num::Integer::Long
135
- rule /\d+/, Num::Integer
142
+ digits = /[0-9](_?[0-9])*/
143
+ decimal = /((#{digits})?\.#{digits}|#{digits}\.)/
144
+ exponent = /e[+-]?#{digits}/i
145
+ rule %r/#{decimal}(#{exponent})?j?/i, Num::Float
146
+ rule %r/#{digits}#{exponent}j?/i, Num::Float
147
+ rule %r/#{digits}j/i, Num::Float
148
+
149
+ rule %r/0b(_?[0-1])+/i, Num::Bin
150
+ rule %r/0o(_?[0-7])+/i, Num::Oct
151
+ rule %r/0x(_?[a-f0-9])+/i, Num::Hex
152
+ rule %r/\d+L/, Num::Integer::Long
153
+ rule %r/([1-9](_?[0-9])*|0(_?0)*)/, Num::Integer
136
154
  end
137
155
 
138
156
  state :funcname do
@@ -144,11 +162,11 @@ module Rouge
144
162
  end
145
163
 
146
164
  state :raise do
147
- rule /from\b/, Keyword
148
- rule /raise\b/, Keyword
149
- rule /yield\b/, Keyword
150
- rule /\n/, Text, :pop!
151
- rule /;/, Punctuation, :pop!
165
+ rule %r/from\b/, Keyword
166
+ rule %r/raise\b/, Keyword
167
+ rule %r/yield\b/, Keyword
168
+ rule %r/\n/, Text, :pop!
169
+ rule %r/;/, Punctuation, :pop!
152
170
  mixin :root
153
171
  end
154
172
 
@@ -156,76 +174,84 @@ module Rouge
156
174
  mixin :raise
157
175
  end
158
176
 
159
- state :strings do
160
- rule /%(\([a-z0-9_]+\))?[-#0 +]*([0-9]+|[*])?(\.([0-9]+|[*]))?/i, Str::Interpol
161
- end
177
+ state :generic_string do
178
+ rule %r/[^'"\\{]+/, Str
179
+ rule %r/{{/, Str
162
180
 
163
- state :strings_double do
164
- rule /[^\\"%\n]+/, Str
165
- mixin :strings
166
- end
181
+ rule %r/'''|"""|['"]/ do |m|
182
+ token Str
183
+ if current_string.delim? m[0]
184
+ current_string.remove
185
+ pop!
186
+ end
187
+ end
167
188
 
168
- state :strings_single do
169
- rule /[^\\'%\n]+/, Str
170
- mixin :strings
171
- end
189
+ rule %r/\\/ do |m|
190
+ if current_string.type? "r"
191
+ token Str
192
+ else
193
+ token Str::Interpol
194
+ end
195
+ push :generic_escape
196
+ end
172
197
 
173
- state :nl do
174
- rule /\n/, Str
198
+ rule %r/{/ do |m|
199
+ if current_string.type? "f"
200
+ token Str::Interpol
201
+ push :generic_interpol
202
+ else
203
+ token Str
204
+ end
205
+ end
175
206
  end
176
207
 
177
- state :escape do
178
- rule %r(\\
208
+ state :generic_escape do
209
+ rule %r(
179
210
  ( [\\abfnrtv"']
180
211
  | \n
181
- | N{[a-zA-z][a-zA-Z ]+[a-zA-Z]}
212
+ | N{[a-zA-Z][a-zA-Z ]+[a-zA-Z]}
182
213
  | u[a-fA-F0-9]{4}
183
214
  | U[a-fA-F0-9]{8}
184
215
  | x[a-fA-F0-9]{2}
185
216
  | [0-7]{1,3}
186
217
  )
187
- )x, Str::Escape
188
- end
189
-
190
- state :raw_escape do
191
- rule /\\./, Str
218
+ )x do
219
+ if current_string.type? "r"
220
+ token Str
221
+ else
222
+ token Str::Escape
223
+ end
224
+ pop!
225
+ end
192
226
  end
193
227
 
194
- state :dqs do
195
- rule /"/, Str, :pop!
196
- mixin :escape
197
- mixin :strings_double
228
+ state :generic_interpol do
229
+ rule %r/[^{}]+/ do |m|
230
+ recurse m[0]
231
+ end
232
+ rule %r/{/, Str::Interpol, :generic_interpol
233
+ rule %r/}/, Str::Interpol, :pop!
198
234
  end
199
235
 
200
- state :sqs do
201
- rule /'/, Str, :pop!
202
- mixin :escape
203
- mixin :strings_single
204
- end
236
+ class StringRegister < Array
237
+ def delim?(delim)
238
+ self.last[1] == delim
239
+ end
205
240
 
206
- state :tdqs do
207
- rule /"""/, Str, :pop!
208
- rule /"/, Str
209
- mixin :escape
210
- mixin :strings_double
211
- mixin :nl
212
- end
241
+ def register(type: "u", delim: "'")
242
+ self.push [type, delim]
243
+ end
213
244
 
214
- state :tsqs do
215
- rule /'''/, Str, :pop!
216
- rule /'/, Str
217
- mixin :escape
218
- mixin :strings_single
219
- mixin :nl
220
- end
245
+ def remove
246
+ self.pop
247
+ end
221
248
 
222
- %w(tdqs tsqs dqs sqs).each do |qtype|
223
- state :"raw_#{qtype}" do
224
- mixin :raw_escape
225
- mixin :"#{qtype}"
249
+ def type?(type)
250
+ self.last[0].include? type
226
251
  end
227
252
  end
228
253
 
254
+ private_constant :StringRegister
229
255
  end
230
256
  end
231
257
  end