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,6 @@
1
1
  # -*- coding: utf-8 -*- #
2
+ # frozen_string_literal: true
3
+
2
4
  # vim: set ts=2 sw=2 et:
3
5
 
4
6
  # TODO: Implement format list support.
@@ -10,8 +12,8 @@ module Rouge
10
12
  desc "Fortran 2008 (free-form)"
11
13
 
12
14
  tag 'fortran'
13
- filenames '*.f90', '*.f95', '*.f03', '*.f08',
14
- '*.F90', '*.F95', '*.F03', '*.F08'
15
+ filenames '*.f', '*.f90', '*.f95', '*.f03', '*.f08',
16
+ '*.F', '*.F90', '*.F95', '*.F03', '*.F08'
15
17
  mimetypes 'text/x-fortran'
16
18
 
17
19
  name = /[A-Z][_A-Z0-9]*/i
@@ -86,21 +88,21 @@ module Rouge
86
88
  end
87
89
 
88
90
  state :root do
89
- rule /[\s\n]+/, Text::Whitespace
90
- rule /!.*$/, Comment::Single
91
- rule /^#.*$/, Comment::Preproc
91
+ rule %r/[\s]+/, Text::Whitespace
92
+ rule %r/!.*$/, Comment::Single
93
+ rule %r/^#.*$/, Comment::Preproc
92
94
 
93
- rule /::|[()\/;,:&\[\]]/, Punctuation
95
+ rule %r/::|[()\/;,:&\[\]]/, Punctuation
94
96
 
95
97
  # TODO: This does not take into account line continuation.
96
- rule /^(\s*)([0-9]+)\b/m do |m|
98
+ rule %r/^(\s*)([0-9]+)\b/m do |m|
97
99
  token Text::Whitespace, m[1]
98
100
  token Name::Label, m[2]
99
101
  end
100
102
 
101
103
  # Format statements are quite a strange beast.
102
104
  # Better process them in their own state.
103
- rule /\b(FORMAT)(\s*)(\()/mi do |m|
105
+ rule %r/\b(FORMAT)(\s*)(\()/mi do |m|
104
106
  token Keyword, m[1]
105
107
  token Text::Whitespace, m[2]
106
108
  token Punctuation, m[3]
@@ -116,25 +118,25 @@ module Rouge
116
118
  (_#{kind_param})? # kind parameter
117
119
  )xi, Num::Float
118
120
 
119
- rule /[+-]?\d+(_#{kind_param})?/i, Num::Integer
120
- rule /B'[01]+'|B"[01]+"/i, Num::Bin
121
- rule /O'[0-7]+'|O"[0-7]+"/i, Num::Oct
122
- rule /Z'[0-9A-F]+'|Z"[0-9A-F]+"/i, Num::Hex
123
- rule /(#{kind_param}_)?'/, Str::Single, :string_single
124
- rule /(#{kind_param}_)?"/, Str::Double, :string_double
125
- rule /[.](TRUE|FALSE)[.](_#{kind_param})?/i, Keyword::Constant
121
+ rule %r/[+-]?\d+(_#{kind_param})?/i, Num::Integer
122
+ rule %r/B'[01]+'|B"[01]+"/i, Num::Bin
123
+ rule %r/O'[0-7]+'|O"[0-7]+"/i, Num::Oct
124
+ rule %r/Z'[0-9A-F]+'|Z"[0-9A-F]+"/i, Num::Hex
125
+ rule %r/(#{kind_param}_)?'/, Str::Single, :string_single
126
+ rule %r/(#{kind_param}_)?"/, Str::Double, :string_double
127
+ rule %r/[.](TRUE|FALSE)[.](_#{kind_param})?/i, Keyword::Constant
126
128
 
127
129
  rule %r{\*\*|//|==|/=|<=|>=|=>|[-+*/<>=%]}, Operator
128
- rule /\.(?:EQ|NE|LT|LE|GT|GE|NOT|AND|OR|EQV|NEQV|[A-Z]+)\./i, Operator::Word
130
+ rule %r/\.(?:EQ|NE|LT|LE|GT|GE|NOT|AND|OR|EQV|NEQV|[A-Z]+)\./i, Operator::Word
129
131
 
130
132
  # Special rules for two-word keywords and types.
131
133
  # Note: "doubleprecision" is covered by the normal keyword rule.
132
- rule /double\s+precision\b/i, Keyword::Type
133
- rule /go\s+to\b/i, Keyword
134
- rule /sync\s+(all|images|memory)\b/i, Keyword
135
- rule /error\s+stop\b/i, Keyword
134
+ rule %r/double\s+precision\b/i, Keyword::Type
135
+ rule %r/go\s+to\b/i, Keyword
136
+ rule %r/sync\s+(all|images|memory)\b/i, Keyword
137
+ rule %r/error\s+stop\b/i, Keyword
136
138
 
137
- rule /#{name}/m do |m|
139
+ rule %r/#{name}/m do |m|
138
140
  match = m[0].downcase
139
141
  if self.class.keywords.include? match
140
142
  token Keyword
@@ -150,26 +152,26 @@ module Rouge
150
152
  end
151
153
 
152
154
  state :string_single do
153
- rule /[^']+/, Str::Single
154
- rule /''/, Str::Escape
155
- rule /'/, Str::Single, :pop!
155
+ rule %r/[^']+/, Str::Single
156
+ rule %r/''/, Str::Escape
157
+ rule %r/'/, Str::Single, :pop!
156
158
  end
157
159
 
158
160
  state :string_double do
159
- rule /[^"]+/, Str::Double
160
- rule /""/, Str::Escape
161
- rule /"/, Str::Double, :pop!
161
+ rule %r/[^"]+/, Str::Double
162
+ rule %r/""/, Str::Escape
163
+ rule %r/"/, Str::Double, :pop!
162
164
  end
163
165
 
164
166
  state :format_spec do
165
- rule /'/, Str::Single, :string_single
166
- rule /"/, Str::Double, :string_double
167
- rule /\(/, Punctuation, :format_spec
168
- rule /\)/, Punctuation, :pop!
169
- rule /,/, Punctuation
170
- rule /[\s\n]+/, Text::Whitespace
167
+ rule %r/'/, Str::Single, :string_single
168
+ rule %r/"/, Str::Double, :string_double
169
+ rule %r/\(/, Punctuation, :format_spec
170
+ rule %r/\)/, Punctuation, :pop!
171
+ rule %r/,/, Punctuation
172
+ rule %r/[\s]+/, Text::Whitespace
171
173
  # Edit descriptors could be seen as a kind of "format literal".
172
- rule /[^\s'"(),]+/, Literal
174
+ rule %r/[^\s'"(),]+/, Literal
173
175
  end
174
176
  end
175
177
  end
@@ -0,0 +1,240 @@
1
+ # -*- coding: utf-8 -*- #
2
+ # frozen_string_literal: true
3
+
4
+ module Rouge
5
+ module Lexers
6
+ load_lexer 'cpp.rb'
7
+
8
+ class FreeFEM < Cpp
9
+ title "FreeFEM"
10
+ desc "The FreeFEM programming language (freefem.org)"
11
+
12
+ tag 'freefem'
13
+ aliases 'ff'
14
+ filenames '*.edp', '*.idp'
15
+ mimetypes 'text/x-ffhdr', 'text/x-ffsrc'
16
+
17
+ # Override C/C++ ones (for example, `do` does not exists)
18
+ def self.keywords
19
+ @keywords ||= Set.new(%w(
20
+ break catch continue else for if return try while
21
+ ))
22
+ end
23
+
24
+ # Override C/C++ ones (for example, `double` does not exists)
25
+ def self.keywords_type
26
+ @keywords_type ||= Set.new(%w(
27
+ bool border complex dmatrix fespace func gslspline ifstream int macro
28
+ matrix mesh mesh3 mpiComm mpiGroup mpiRequest NewMacro EndMacro
29
+ ofstream Pmmap problem Psemaphore real solve string varf
30
+ ))
31
+ end
32
+
33
+ # Override C/C++ ones (totally different)
34
+ def self.reserved
35
+ @reserved ||= Set.new(%w(
36
+ BDM1 BDM1Ortho Edge03d Edge13d Edge23d FEQF HCT P0 P03d P0Edge P1
37
+ P13d P1b P1b3d P1bl P1bl3d P1dc P1Edge P1nc P2 P23d P2b P2BR P2dc
38
+ P2Edge P2h P2Morley P2pnc P3 P3dc P3Edge P4 P4dc P4Edge P5Edge RT0
39
+ RT03d RT0Ortho RT1 RT1Ortho RT2 RT2Ortho
40
+
41
+ qf1pE qf1pElump qf1pT qf1pTlump qfV1 qfV1lump qf2pE qf2pT qf2pT4P1
42
+ qfV2 qf3pE qf4pE qf5pE qf5pT qfV5 qf7pT qf9pT qfnbpE
43
+
44
+ ARGV append area be binary BoundaryEdge bordermeasure CG Cholesky cin
45
+ cout Crout default diag edgeOrientation endl FILE fixed GMRES good
46
+ hTriangle im imax imin InternalEdge l1 l2 label lenEdge length LINE
47
+ linfty LU m max measure min mpiAnySource mpiBAND mpiBXOR mpiCommWorld
48
+ mpiLAND mpiLOR mpiLXOR mpiMAX mpiMIN mpiPROD mpirank mpisize mpiSUM
49
+ mpiUndefined n N nbe ndof ndofK noshowbase noshowpos notaregion nt
50
+ nTonEdge nuEdge nuTriangle nv P pi precision quantile re region
51
+ scientific searchMethod setw showbase showpos sparsesolver sum tellp
52
+ true UMFPACK unused whoinElement verbosity version volume x y z
53
+ ))
54
+ end
55
+
56
+ def self.builtins
57
+ @builtins ||= Set.new(%w(
58
+ abs acos acosh adaptmesh adj AffineCG AffineGMRES arg asin asinh
59
+ assert atan atan2 atanh atof atoi BFGS broadcast buildlayers
60
+ buildmesh ceil chi complexEigenValue copysign change checkmovemesh
61
+ clock cmaes conj convect cos cosh cube d dd dfft diffnp diffpos
62
+ dimKrylov dist dumptable dx dxx dxy dxz dy dyx dyy dyz dz dzx dzy dzz
63
+ EigenValue emptymesh erf erfc exec exit exp fdim ffind find floor
64
+ flush fmax fmin fmod freeyams getARGV getline gmshload gmshload3
65
+ gslcdfugaussianP gslcdfugaussianQ gslcdfugaussianPinv
66
+ gslcdfugaussianQinv gslcdfgaussianP gslcdfgaussianQ
67
+ gslcdfgaussianPinv gslcdfgaussianQinv gslcdfgammaP gslcdfgammaQ
68
+ gslcdfgammaPinv gslcdfgammaQinv gslcdfcauchyP gslcdfcauchyQ
69
+ gslcdfcauchyPinv gslcdfcauchyQinv gslcdflaplaceP gslcdflaplaceQ
70
+ gslcdflaplacePinv gslcdflaplaceQinv gslcdfrayleighP gslcdfrayleighQ
71
+ gslcdfrayleighPinv gslcdfrayleighQinv gslcdfchisqP gslcdfchisqQ
72
+ gslcdfchisqPinv gslcdfchisqQinv gslcdfexponentialP gslcdfexponentialQ
73
+ gslcdfexponentialPinv gslcdfexponentialQinv gslcdfexppowP
74
+ gslcdfexppowQ gslcdftdistP gslcdftdistQ gslcdftdistPinv
75
+ gslcdftdistQinv gslcdffdistP gslcdffdistQ gslcdffdistPinv
76
+ gslcdffdistQinv gslcdfbetaP gslcdfbetaQ gslcdfbetaPinv gslcdfbetaQinv
77
+ gslcdfflatP gslcdfflatQ gslcdfflatPinv gslcdfflatQinv
78
+ gslcdflognormalP gslcdflognormalQ gslcdflognormalPinv
79
+ gslcdflognormalQinv gslcdfgumbel1P gslcdfgumbel1Q gslcdfgumbel1Pinv
80
+ gslcdfgumbel1Qinv gslcdfgumbel2P gslcdfgumbel2Q gslcdfgumbel2Pinv
81
+ gslcdfgumbel2Qinv gslcdfweibullP gslcdfweibullQ gslcdfweibullPinv
82
+ gslcdfweibullQinv gslcdfparetoP gslcdfparetoQ gslcdfparetoPinv
83
+ gslcdfparetoQinv gslcdflogisticP gslcdflogisticQ gslcdflogisticPinv
84
+ gslcdflogisticQinv gslcdfbinomialP gslcdfbinomialQ gslcdfpoissonP
85
+ gslcdfpoissonQ gslcdfgeometricP gslcdfgeometricQ
86
+ gslcdfnegativebinomialP gslcdfnegativebinomialQ gslcdfpascalP
87
+ gslcdfpascalQ gslinterpakima gslinterpakimaperiodic
88
+ gslinterpcsplineperiodic gslinterpcspline gslinterpsteffen
89
+ gslinterplinear gslinterppolynomial gslranbernoullipdf gslranbeta
90
+ gslranbetapdf gslranbinomialpdf gslranexponential
91
+ gslranexponentialpdf gslranexppow gslranexppowpdf gslrancauchy
92
+ gslrancauchypdf gslranchisq gslranchisqpdf gslranerlang
93
+ gslranerlangpdf gslranfdist gslranfdistpdf gslranflat gslranflatpdf
94
+ gslrangamma gslrangammaint gslrangammapdf gslrangammamt
95
+ gslrangammaknuth gslrangaussian gslrangaussianratiomethod
96
+ gslrangaussianziggurat gslrangaussianpdf gslranugaussian
97
+ gslranugaussianratiomethod gslranugaussianpdf gslrangaussiantail
98
+ gslrangaussiantailpdf gslranugaussiantail gslranugaussiantailpdf
99
+ gslranlandau gslranlandaupdf gslrangeometricpdf gslrangumbel1
100
+ gslrangumbel1pdf gslrangumbel2 gslrangumbel2pdf gslranlogistic
101
+ gslranlogisticpdf gslranlognormal gslranlognormalpdf
102
+ gslranlogarithmicpdf gslrannegativebinomialpdf gslranpascalpdf
103
+ gslranpareto gslranparetopdf gslranpoissonpdf gslranrayleigh
104
+ gslranrayleighpdf gslranrayleightail gslranrayleightailpdf
105
+ gslrantdist gslrantdistpdf gslranlaplace gslranlaplacepdf gslranlevy
106
+ gslranweibull gslranweibullpdf gslsfairyAi gslsfairyBi
107
+ gslsfairyAiscaled gslsfairyBiscaled gslsfairyAideriv gslsfairyBideriv
108
+ gslsfairyAiderivscaled gslsfairyBiderivscaled gslsfairyzeroAi
109
+ gslsfairyzeroBi gslsfairyzeroAideriv gslsfairyzeroBideriv
110
+ gslsfbesselJ0 gslsfbesselJ1 gslsfbesselJn gslsfbesselY0 gslsfbesselY1
111
+ gslsfbesselYn gslsfbesselI0 gslsfbesselI1 gslsfbesselIn
112
+ gslsfbesselI0scaled gslsfbesselI1scaled gslsfbesselInscaled
113
+ gslsfbesselK0 gslsfbesselK1 gslsfbesselKn gslsfbesselK0scaled
114
+ gslsfbesselK1scaled gslsfbesselKnscaled gslsfbesselj0 gslsfbesselj1
115
+ gslsfbesselj2 gslsfbesseljl gslsfbessely0 gslsfbessely1 gslsfbessely2
116
+ gslsfbesselyl gslsfbesseli0scaled gslsfbesseli1scaled
117
+ gslsfbesseli2scaled gslsfbesselilscaled gslsfbesselk0scaled
118
+ gslsfbesselk1scaled gslsfbesselk2scaled gslsfbesselklscaled
119
+ gslsfbesselJnu gslsfbesselYnu gslsfbesselInuscaled gslsfbesselInu
120
+ gslsfbesselKnuscaled gslsfbesselKnu gslsfbessellnKnu
121
+ gslsfbesselzeroJ0 gslsfbesselzeroJ1 gslsfbesselzeroJnu gslsfclausen
122
+ gslsfhydrogenicR1 gslsfdawson gslsfdebye1 gslsfdebye2 gslsfdebye3
123
+ gslsfdebye4 gslsfdebye5 gslsfdebye6 gslsfdilog gslsfmultiply
124
+ gslsfellintKcomp gslsfellintEcomp gslsfellintPcomp gslsfellintDcomp
125
+ gslsfellintF gslsfellintE gslsfellintRC gslsferfc gslsflogerfc
126
+ gslsferf gslsferfZ gslsferfQ gslsfhazard gslsfexp gslsfexpmult
127
+ gslsfexpm1 gslsfexprel gslsfexprel2 gslsfexpreln gslsfexpintE1
128
+ gslsfexpintE2 gslsfexpintEn gslsfexpintE1scaled gslsfexpintE2scaled
129
+ gslsfexpintEnscaled gslsfexpintEi gslsfexpintEiscaled gslsfShi
130
+ gslsfChi gslsfexpint3 gslsfSi gslsfCi gslsfatanint gslsffermidiracm1
131
+ gslsffermidirac0 gslsffermidirac1 gslsffermidirac2 gslsffermidiracint
132
+ gslsffermidiracmhalf gslsffermidirachalf gslsffermidirac3half
133
+ gslsffermidiracinc0 gslsflngamma gslsfgamma gslsfgammastar
134
+ gslsfgammainv gslsftaylorcoeff gslsffact gslsfdoublefact gslsflnfact
135
+ gslsflndoublefact gslsflnchoose gslsfchoose gslsflnpoch gslsfpoch
136
+ gslsfpochrel gslsfgammaincQ gslsfgammaincP gslsfgammainc gslsflnbeta
137
+ gslsfbeta gslsfbetainc gslsfgegenpoly1 gslsfgegenpoly2
138
+ gslsfgegenpoly3 gslsfgegenpolyn gslsfhyperg0F1 gslsfhyperg1F1int
139
+ gslsfhyperg1F1 gslsfhypergUint gslsfhypergU gslsfhyperg2F0
140
+ gslsflaguerre1 gslsflaguerre2 gslsflaguerre3 gslsflaguerren
141
+ gslsflambertW0 gslsflambertWm1 gslsflegendrePl gslsflegendreP1
142
+ gslsflegendreP2 gslsflegendreP3 gslsflegendreQ0 gslsflegendreQ1
143
+ gslsflegendreQl gslsflegendrePlm gslsflegendresphPlm
144
+ gslsflegendrearraysize gslsfconicalPhalf gslsfconicalPmhalf
145
+ gslsfconicalP0 gslsfconicalP1 gslsfconicalPsphreg gslsfconicalPcylreg
146
+ gslsflegendreH3d0 gslsflegendreH3d1 gslsflegendreH3d gslsflog
147
+ gslsflogabs gslsflog1plusx gslsflog1plusxmx gslsfpowint gslsfpsiint
148
+ gslsfpsi gslsfpsi1piy gslsfpsi1int gslsfpsi1 gslsfpsin
149
+ gslsfsynchrotron1 gslsfsynchrotron2 gslsftransport2 gslsftransport3
150
+ gslsftransport4 gslsftransport5 gslsfsin gslsfcos gslsfhypot
151
+ gslsfsinc gslsflnsinh gslsflncosh gslsfanglerestrictsymm
152
+ gslsfanglerestrictpos gslsfzetaint gslsfzeta gslsfzetam1
153
+ gslsfzetam1int gslsfhzeta gslsfetaint gslsfeta imag int1d int2d int3d
154
+ intalledges intallfaces interpolate invdiff invdiffnp invdiffpos
155
+ Isend isInf isNaN isoline Irecv j0 j1 jn jump lgamma LinearCG
156
+ LinearGMRES log log10 lrint lround max mean medit min mmg3d movemesh
157
+ movemesh23 mpiAlltoall mpiAlltoallv mpiAllgather mpiAllgatherv
158
+ mpiAllReduce mpiBarrier mpiGather mpiGatherv mpiRank mpiReduce
159
+ mpiScatter mpiScatterv mpiSize mpiWait mpiWaitAny mpiWtick mpiWtime
160
+ mshmet NLCG on plot polar Post pow processor processorblock
161
+ projection randinit randint31 randint32 random randreal1 randreal2
162
+ randreal3 randres53 Read readmesh readmesh3 Recv rfind rint round
163
+ savemesh savesol savevtk seekg Sent set sign signbit sin sinh sort
164
+ splitComm splitmesh sqrt square srandom srandomdev Stringification
165
+ swap system tan tanh tellg tetg tetgconvexhull tetgreconstruction
166
+ tetgtransfo tgamma triangulate trunc Wait Write y0 y1 yn
167
+ ))
168
+ end
169
+
170
+ def self.attributes
171
+ @builtinsParameters ||= Set.new(%w(
172
+ A A1 abserror absolute aniso aspectratio B B1 bb beginend bin
173
+ boundary bw close cmm coef composante cutoff datafilename dataname
174
+ dim distmax displacement doptions dparams eps err errg facemerge
175
+ facetcl factorize file fill fixedborder flabel flags floatmesh
176
+ floatsol fregion gradation grey hmax hmin holelist hsv init inquire
177
+ inside IsMetric iso ivalue keepbackvertices label labeldown labelmid
178
+ labelup levelset loptions lparams maxit maxsubdiv meditff mem memory
179
+ metric mode nbarrow nbiso nbiter nbjacoby nboffacetcl nbofholes
180
+ nbofregions nbregul nbsmooth nbvx ncv nev nomeshgeneration
181
+ normalization omega op optimize option options order orientation
182
+ periodic power precon prev ps ptmerge qfe qforder qft qfV ratio
183
+ rawvector reffacelow reffacemid reffaceup refnum reftet reftri region
184
+ regionlist renumv rescaling ridgeangle save sigma sizeofvolume
185
+ smoothing solver sparams split splitin2 splitpbedge stop strategy
186
+ swap switch sym t tgv thetamax tol tolpivot tolpivotsym transfo U2Vc
187
+ value varrow vector veps viso wait width withsurfacemesh WindowIndex
188
+ which zbound
189
+ ))
190
+ end
191
+
192
+ id = /[a-z_]\w*/i
193
+
194
+ state :expr_bol do
195
+ mixin :inline_whitespace
196
+
197
+ rule %r/include/, Comment::Preproc, :macro
198
+ rule %r/load/, Comment::Preproc, :macro
199
+ rule %r/ENDIFMACRO/, Comment::Preproc, :macro
200
+ rule %r/IFMACRO/, Comment::Preproc, :macro
201
+
202
+ rule(//) { pop! }
203
+ end
204
+
205
+ state :statements do
206
+ mixin :whitespace
207
+ rule %r/(u8|u|U|L)?"/, Str, :string
208
+ rule %r((u8|u|U|L)?'(\\.|\\[0-7]{1,3}|\\x[a-f0-9]{1,2}|[^\\'\n])')i, Str::Char
209
+ rule %r((\d+[.]\d*|[.]?\d+)e[+-]?\d+[lu]*)i, Num::Float
210
+ rule %r(\d+e[+-]?\d+[lu]*)i, Num::Float
211
+ rule %r/0x[0-9a-f]+[lu]*/i, Num::Hex
212
+ rule %r/0[0-7]+[lu]*/i, Num::Oct
213
+ rule %r/\d+[lu]*/i, Num::Integer
214
+ rule %r(\*/), Error
215
+ rule %r([~!%^&*+=\|?:<>/-]), Operator
216
+ rule %r/'/, Operator
217
+ rule %r/[()\[\],.;]/, Punctuation
218
+ rule %r/\bcase\b/, Keyword, :case
219
+ rule %r/(?:true|false|NaN)\b/, Name::Builtin
220
+ rule id do |m|
221
+ name = m[0]
222
+
223
+ if self.class.keywords.include? name
224
+ token Keyword
225
+ elsif self.class.keywords_type.include? name
226
+ token Keyword::Type
227
+ elsif self.class.reserved.include? name
228
+ token Keyword::Reserved
229
+ elsif self.class.builtins.include? name
230
+ token Name::Builtin
231
+ elsif self.class.attributes.include? name
232
+ token Name::Attribute
233
+ else
234
+ token Name
235
+ end
236
+ end
237
+ end
238
+ end
239
+ end
240
+ 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
@@ -6,7 +7,7 @@ module Rouge
6
7
  title "FSharp"
7
8
  desc 'F# (fsharp.net)'
8
9
  tag 'fsharp'
9
- filenames '*.fs', '*.fsx'
10
+ filenames '*.fs', '*.fsi', '*.fsx'
10
11
  mimetypes 'application/fsharp-script', 'text/x-fsharp', 'text/x-fsi'
11
12
 
12
13
  def self.keywords
@@ -17,10 +18,10 @@ module Rouge
17
18
  internal lazy let let! match member module mutable namespace
18
19
  new not null of open or override private public rec return
19
20
  return! select static struct then to true try type upcast
20
- use use! val void when while with yield yield! sig atomic
21
- break checked component const constraint constructor
22
- continue eager event external fixed functor include method
23
- mixin object parallel process protected pure sealed tailcall
21
+ use use! val void when while with yield yield! sig atomic
22
+ break checked component const constraint constructor
23
+ continue eager event external fixed functor include method
24
+ mixin object parallel process protected pure sealed tailcall
24
25
  trait virtual volatile
25
26
  )
26
27
  end
@@ -45,11 +46,11 @@ module Rouge
45
46
  upper_id = /[A-Z][\w']*/
46
47
 
47
48
  state :root do
48
- rule /\s+/m, Text
49
- rule /false|true|[(][)]|\[\]/, Name::Builtin::Pseudo
50
- rule /#{upper_id}(?=\s*[.])/, Name::Namespace, :dotted
49
+ rule %r/\s+/m, Text
50
+ rule %r/false|true|[(][)]|\[\]/, Name::Builtin::Pseudo
51
+ rule %r/#{upper_id}(?=\s*[.])/, Name::Namespace, :dotted
51
52
  rule upper_id, Name::Class
52
- rule /[(][*](?![)])/, Comment, :comment
53
+ rule %r/[(][*](?![)])/, Comment, :comment
53
54
  rule %r(//.*?$), Comment::Single
54
55
  rule id do |m|
55
56
  match = m[0]
@@ -73,45 +74,46 @@ module Rouge
73
74
  end
74
75
  end
75
76
 
76
- rule /-?\d[\d_]*(.[\d_]*)?(e[+-]?\d[\d_]*)/i, Num::Float
77
- rule /0x\h[\h_]*/i, Num::Hex
78
- rule /0o[0-7][0-7_]*/i, Num::Oct
79
- rule /0b[01][01_]*/i, Num::Bin
80
- rule /\d[\d_]*/, Num::Integer
77
+ rule %r/-?\d[\d_]*(.[\d_]*)?(e[+-]?\d[\d_]*)/i, Num::Float
78
+ rule %r/0x\h[\h_]*/i, Num::Hex
79
+ rule %r/0o[0-7][0-7_]*/i, Num::Oct
80
+ rule %r/0b[01][01_]*/i, Num::Bin
81
+ rule %r/\d[\d_]*/, Num::Integer
81
82
 
82
- rule /'(?:(\\[\\"'ntbr ])|(\\[0-9]{3})|(\\x\h{2}))'/, Str::Char
83
- rule /'[.]'/, Str::Char
84
- rule /'/, Keyword
85
- rule /"/, Str::Double, :string
86
- rule /[~?]#{id}/, Name::Variable
83
+ rule %r/'(?:(\\[\\"'ntbr ])|(\\[0-9]{3})|(\\x\h{2}))'/, Str::Char
84
+ rule %r/'[.]'/, Str::Char
85
+ rule %r/'/, Keyword
86
+ rule %r/"/, Str::Double, :string
87
+ rule %r/[~?]#{id}/, Name::Variable
87
88
  end
88
89
 
89
90
  state :comment do
90
- rule /[^(*)]+/, Comment
91
+ rule %r/[^(*)]+/, Comment
91
92
  rule(/[(][*]/) { token Comment; push }
92
- rule /[*][)]/, Comment, :pop!
93
- rule /[(*)]/, Comment
93
+ rule %r/[*][)]/, Comment, :pop!
94
+ rule %r/[(*)]/, Comment
94
95
  end
95
96
 
96
97
  state :string do
97
- rule /[^\\"]+/, Str::Double
98
+ rule %r/[^\\"]+/, Str::Double
98
99
  mixin :escape_sequence
99
- rule /\\\n/, Str::Double
100
- rule /"/, Str::Double, :pop!
100
+ rule %r/\\\n/, Str::Double
101
+ rule %r/"/, Str::Double, :pop!
101
102
  end
102
103
 
103
104
  state :escape_sequence do
104
- rule /\\[\\"'ntbr]/, Str::Escape
105
- rule /\\\d{3}/, Str::Escape
106
- rule /\\x\h{2}/, Str::Escape
105
+ rule %r/\\[\\"'ntbr]/, Str::Escape
106
+ rule %r/\\\d{3}/, Str::Escape
107
+ rule %r/\\x\h{2}/, Str::Escape
107
108
  end
108
109
 
109
110
  state :dotted do
110
- rule /\s+/m, Text
111
- rule /[.]/, Punctuation
112
- rule /#{upper_id}(?=\s*[.])/, Name::Namespace
111
+ rule %r/\s+/m, Text
112
+ rule %r/[.]/, Punctuation
113
+ rule %r/#{upper_id}(?=\s*[.])/, Name::Namespace
113
114
  rule upper_id, Name::Class, :pop!
114
115
  rule id, Name, :pop!
116
+ rule %r/\[/, Punctuation, :pop!
115
117
  end
116
118
  end
117
119
  end