rouge 3.1.0 → 3.18.0

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