rouge 3.17.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (429) hide show
  1. checksums.yaml +7 -0
  2. data/Gemfile +40 -0
  3. data/LICENSE +186 -0
  4. data/bin/rougify +18 -0
  5. data/lib/rouge.rb +93 -0
  6. data/lib/rouge/cli.rb +498 -0
  7. data/lib/rouge/demos/abap +6 -0
  8. data/lib/rouge/demos/actionscript +4 -0
  9. data/lib/rouge/demos/ada +26 -0
  10. data/lib/rouge/demos/apache +21 -0
  11. data/lib/rouge/demos/apex +9 -0
  12. data/lib/rouge/demos/apiblueprint +33 -0
  13. data/lib/rouge/demos/applescript +2 -0
  14. data/lib/rouge/demos/armasm +12 -0
  15. data/lib/rouge/demos/awk +4 -0
  16. data/lib/rouge/demos/batchfile +3 -0
  17. data/lib/rouge/demos/bbcbasic +6 -0
  18. data/lib/rouge/demos/biml +38 -0
  19. data/lib/rouge/demos/bpf +7 -0
  20. data/lib/rouge/demos/brainfuck +5 -0
  21. data/lib/rouge/demos/bsl +7 -0
  22. data/lib/rouge/demos/c +8 -0
  23. data/lib/rouge/demos/ceylon +7 -0
  24. data/lib/rouge/demos/cfscript +18 -0
  25. data/lib/rouge/demos/clean +6 -0
  26. data/lib/rouge/demos/clojure +5 -0
  27. data/lib/rouge/demos/cmake +7 -0
  28. data/lib/rouge/demos/cmhg +8 -0
  29. data/lib/rouge/demos/coffeescript +5 -0
  30. data/lib/rouge/demos/common_lisp +1 -0
  31. data/lib/rouge/demos/conf +4 -0
  32. data/lib/rouge/demos/console +6 -0
  33. data/lib/rouge/demos/coq +13 -0
  34. data/lib/rouge/demos/cpp +8 -0
  35. data/lib/rouge/demos/crystal +45 -0
  36. data/lib/rouge/demos/csharp +5 -0
  37. data/lib/rouge/demos/css +4 -0
  38. data/lib/rouge/demos/csvs +8 -0
  39. data/lib/rouge/demos/cuda +11 -0
  40. data/lib/rouge/demos/cython +6 -0
  41. data/lib/rouge/demos/d +16 -0
  42. data/lib/rouge/demos/dart +6 -0
  43. data/lib/rouge/demos/diff +7 -0
  44. data/lib/rouge/demos/digdag +19 -0
  45. data/lib/rouge/demos/docker +9 -0
  46. data/lib/rouge/demos/dot +5 -0
  47. data/lib/rouge/demos/ecl +18 -0
  48. data/lib/rouge/demos/eex +1 -0
  49. data/lib/rouge/demos/eiffel +30 -0
  50. data/lib/rouge/demos/elixir +1 -0
  51. data/lib/rouge/demos/elm +4 -0
  52. data/lib/rouge/demos/epp +4 -0
  53. data/lib/rouge/demos/erb +1 -0
  54. data/lib/rouge/demos/erlang +7 -0
  55. data/lib/rouge/demos/escape +3 -0
  56. data/lib/rouge/demos/factor +5 -0
  57. data/lib/rouge/demos/fortran +22 -0
  58. data/lib/rouge/demos/freefem +16 -0
  59. data/lib/rouge/demos/fsharp +12 -0
  60. data/lib/rouge/demos/gdscript +18 -0
  61. data/lib/rouge/demos/ghc-core +26 -0
  62. data/lib/rouge/demos/gherkin +17 -0
  63. data/lib/rouge/demos/glsl +14 -0
  64. data/lib/rouge/demos/go +7 -0
  65. data/lib/rouge/demos/gradle +10 -0
  66. data/lib/rouge/demos/graphql +17 -0
  67. data/lib/rouge/demos/groovy +9 -0
  68. data/lib/rouge/demos/hack +5 -0
  69. data/lib/rouge/demos/haml +5 -0
  70. data/lib/rouge/demos/handlebars +7 -0
  71. data/lib/rouge/demos/haskell +6 -0
  72. data/lib/rouge/demos/haxe +5 -0
  73. data/lib/rouge/demos/hcl +7 -0
  74. data/lib/rouge/demos/hocon +8 -0
  75. data/lib/rouge/demos/hql +5 -0
  76. data/lib/rouge/demos/html +8 -0
  77. data/lib/rouge/demos/http +14 -0
  78. data/lib/rouge/demos/hylang +10 -0
  79. data/lib/rouge/demos/idlang +8 -0
  80. data/lib/rouge/demos/igorpro +9 -0
  81. data/lib/rouge/demos/ini +4 -0
  82. data/lib/rouge/demos/io +11 -0
  83. data/lib/rouge/demos/irb +4 -0
  84. data/lib/rouge/demos/irb_output +2 -0
  85. data/lib/rouge/demos/java +5 -0
  86. data/lib/rouge/demos/javascript +1 -0
  87. data/lib/rouge/demos/jinja +9 -0
  88. data/lib/rouge/demos/jsl +3 -0
  89. data/lib/rouge/demos/json +1 -0
  90. data/lib/rouge/demos/json-doc +1 -0
  91. data/lib/rouge/demos/jsonnet +28 -0
  92. data/lib/rouge/demos/jsp +29 -0
  93. data/lib/rouge/demos/jsx +17 -0
  94. data/lib/rouge/demos/julia +11 -0
  95. data/lib/rouge/demos/kotlin +3 -0
  96. data/lib/rouge/demos/lasso +12 -0
  97. data/lib/rouge/demos/liquid +10 -0
  98. data/lib/rouge/demos/literate_coffeescript +3 -0
  99. data/lib/rouge/demos/literate_haskell +7 -0
  100. data/lib/rouge/demos/llvm +20 -0
  101. data/lib/rouge/demos/lua +12 -0
  102. data/lib/rouge/demos/lustre +6 -0
  103. data/lib/rouge/demos/lutin +18 -0
  104. data/lib/rouge/demos/m68k +16 -0
  105. data/lib/rouge/demos/magik +6 -0
  106. data/lib/rouge/demos/make +6 -0
  107. data/lib/rouge/demos/markdown +4 -0
  108. data/lib/rouge/demos/mason +22 -0
  109. data/lib/rouge/demos/mathematica +8 -0
  110. data/lib/rouge/demos/matlab +6 -0
  111. data/lib/rouge/demos/minizinc +23 -0
  112. data/lib/rouge/demos/moonscript +16 -0
  113. data/lib/rouge/demos/mosel +10 -0
  114. data/lib/rouge/demos/msgtrans +4 -0
  115. data/lib/rouge/demos/mxml +22 -0
  116. data/lib/rouge/demos/nasm +26 -0
  117. data/lib/rouge/demos/nesasm +11 -0
  118. data/lib/rouge/demos/nginx +5 -0
  119. data/lib/rouge/demos/nim +27 -0
  120. data/lib/rouge/demos/nix +19 -0
  121. data/lib/rouge/demos/objective_c +18 -0
  122. data/lib/rouge/demos/objective_cpp +17 -0
  123. data/lib/rouge/demos/ocaml +12 -0
  124. data/lib/rouge/demos/openedge +4 -0
  125. data/lib/rouge/demos/opentype_feature_file +6 -0
  126. data/lib/rouge/demos/pascal +14 -0
  127. data/lib/rouge/demos/perl +5 -0
  128. data/lib/rouge/demos/php +3 -0
  129. data/lib/rouge/demos/plaintext +1 -0
  130. data/lib/rouge/demos/plist +11 -0
  131. data/lib/rouge/demos/pony +17 -0
  132. data/lib/rouge/demos/powershell +13 -0
  133. data/lib/rouge/demos/praat +26 -0
  134. data/lib/rouge/demos/prolog +9 -0
  135. data/lib/rouge/demos/prometheus +9 -0
  136. data/lib/rouge/demos/properties +7 -0
  137. data/lib/rouge/demos/protobuf +5 -0
  138. data/lib/rouge/demos/puppet +6 -0
  139. data/lib/rouge/demos/python +6 -0
  140. data/lib/rouge/demos/q +8 -0
  141. data/lib/rouge/demos/qml +9 -0
  142. data/lib/rouge/demos/r +8 -0
  143. data/lib/rouge/demos/racket +24 -0
  144. data/lib/rouge/demos/reasonml +12 -0
  145. data/lib/rouge/demos/robot_framework +27 -0
  146. data/lib/rouge/demos/ruby +9 -0
  147. data/lib/rouge/demos/rust +12 -0
  148. data/lib/rouge/demos/sas +13 -0
  149. data/lib/rouge/demos/sass +3 -0
  150. data/lib/rouge/demos/scala +3 -0
  151. data/lib/rouge/demos/scheme +4 -0
  152. data/lib/rouge/demos/scss +5 -0
  153. data/lib/rouge/demos/sed +4 -0
  154. data/lib/rouge/demos/shell +2 -0
  155. data/lib/rouge/demos/sieve +10 -0
  156. data/lib/rouge/demos/slice +10 -0
  157. data/lib/rouge/demos/slim +17 -0
  158. data/lib/rouge/demos/smalltalk +6 -0
  159. data/lib/rouge/demos/smarty +12 -0
  160. data/lib/rouge/demos/sml +4 -0
  161. data/lib/rouge/demos/sparql +6 -0
  162. data/lib/rouge/demos/sqf +14 -0
  163. data/lib/rouge/demos/sql +1 -0
  164. data/lib/rouge/demos/supercollider +11 -0
  165. data/lib/rouge/demos/swift +5 -0
  166. data/lib/rouge/demos/tap +5 -0
  167. data/lib/rouge/demos/tcl +1 -0
  168. data/lib/rouge/demos/terraform +16 -0
  169. data/lib/rouge/demos/tex +1 -0
  170. data/lib/rouge/demos/toml +9 -0
  171. data/lib/rouge/demos/tsx +17 -0
  172. data/lib/rouge/demos/ttcn3 +6 -0
  173. data/lib/rouge/demos/tulip +13 -0
  174. data/lib/rouge/demos/turtle +26 -0
  175. data/lib/rouge/demos/twig +9 -0
  176. data/lib/rouge/demos/typescript +1 -0
  177. data/lib/rouge/demos/vala +8 -0
  178. data/lib/rouge/demos/vb +4 -0
  179. data/lib/rouge/demos/vcl +12 -0
  180. data/lib/rouge/demos/verilog +27 -0
  181. data/lib/rouge/demos/vhdl +23 -0
  182. data/lib/rouge/demos/viml +14 -0
  183. data/lib/rouge/demos/vue +11 -0
  184. data/lib/rouge/demos/wollok +11 -0
  185. data/lib/rouge/demos/xml +2 -0
  186. data/lib/rouge/demos/xojo +14 -0
  187. data/lib/rouge/demos/xpath +2 -0
  188. data/lib/rouge/demos/xquery +22 -0
  189. data/lib/rouge/demos/yaml +4 -0
  190. data/lib/rouge/formatter.rb +112 -0
  191. data/lib/rouge/formatters/html.rb +56 -0
  192. data/lib/rouge/formatters/html_inline.rb +31 -0
  193. data/lib/rouge/formatters/html_legacy.rb +45 -0
  194. data/lib/rouge/formatters/html_line_table.rb +53 -0
  195. data/lib/rouge/formatters/html_linewise.rb +23 -0
  196. data/lib/rouge/formatters/html_pygments.rb +18 -0
  197. data/lib/rouge/formatters/html_table.rb +51 -0
  198. data/lib/rouge/formatters/null.rb +20 -0
  199. data/lib/rouge/formatters/terminal256.rb +198 -0
  200. data/lib/rouge/formatters/terminal_truecolor.rb +37 -0
  201. data/lib/rouge/formatters/tex.rb +92 -0
  202. data/lib/rouge/guesser.rb +57 -0
  203. data/lib/rouge/guessers/disambiguation.rb +136 -0
  204. data/lib/rouge/guessers/filename.rb +27 -0
  205. data/lib/rouge/guessers/glob_mapping.rb +45 -0
  206. data/lib/rouge/guessers/mimetype.rb +16 -0
  207. data/lib/rouge/guessers/modeline.rb +46 -0
  208. data/lib/rouge/guessers/source.rb +31 -0
  209. data/lib/rouge/guessers/util.rb +34 -0
  210. data/lib/rouge/lexer.rb +516 -0
  211. data/lib/rouge/lexers/abap.rb +240 -0
  212. data/lib/rouge/lexers/actionscript.rb +196 -0
  213. data/lib/rouge/lexers/ada.rb +162 -0
  214. data/lib/rouge/lexers/apache.rb +73 -0
  215. data/lib/rouge/lexers/apache/keywords.yml +764 -0
  216. data/lib/rouge/lexers/apex.rb +126 -0
  217. data/lib/rouge/lexers/apiblueprint.rb +49 -0
  218. data/lib/rouge/lexers/apple_script.rb +370 -0
  219. data/lib/rouge/lexers/armasm.rb +145 -0
  220. data/lib/rouge/lexers/awk.rb +162 -0
  221. data/lib/rouge/lexers/batchfile.rb +164 -0
  222. data/lib/rouge/lexers/bbcbasic.rb +112 -0
  223. data/lib/rouge/lexers/biml.rb +43 -0
  224. data/lib/rouge/lexers/bpf.rb +118 -0
  225. data/lib/rouge/lexers/brainfuck.rb +53 -0
  226. data/lib/rouge/lexers/bsl.rb +82 -0
  227. data/lib/rouge/lexers/c.rb +190 -0
  228. data/lib/rouge/lexers/ceylon.rb +96 -0
  229. data/lib/rouge/lexers/cfscript.rb +154 -0
  230. data/lib/rouge/lexers/clean.rb +156 -0
  231. data/lib/rouge/lexers/clojure.rb +113 -0
  232. data/lib/rouge/lexers/cmake.rb +207 -0
  233. data/lib/rouge/lexers/cmhg.rb +34 -0
  234. data/lib/rouge/lexers/coffeescript.rb +215 -0
  235. data/lib/rouge/lexers/common_lisp.rb +346 -0
  236. data/lib/rouge/lexers/conf.rb +25 -0
  237. data/lib/rouge/lexers/console.rb +174 -0
  238. data/lib/rouge/lexers/coq.rb +191 -0
  239. data/lib/rouge/lexers/cpp.rb +82 -0
  240. data/lib/rouge/lexers/crystal.rb +430 -0
  241. data/lib/rouge/lexers/csharp.rb +114 -0
  242. data/lib/rouge/lexers/css.rb +274 -0
  243. data/lib/rouge/lexers/csvs.rb +44 -0
  244. data/lib/rouge/lexers/cuda.rb +35 -0
  245. data/lib/rouge/lexers/cython.rb +151 -0
  246. data/lib/rouge/lexers/d.rb +177 -0
  247. data/lib/rouge/lexers/dart.rb +105 -0
  248. data/lib/rouge/lexers/diff.rb +37 -0
  249. data/lib/rouge/lexers/digdag.rb +70 -0
  250. data/lib/rouge/lexers/docker.rb +51 -0
  251. data/lib/rouge/lexers/dot.rb +69 -0
  252. data/lib/rouge/lexers/ecl.rb +175 -0
  253. data/lib/rouge/lexers/eex.rb +52 -0
  254. data/lib/rouge/lexers/eiffel.rb +66 -0
  255. data/lib/rouge/lexers/elixir.rb +149 -0
  256. data/lib/rouge/lexers/elm.rb +90 -0
  257. data/lib/rouge/lexers/epp.rb +51 -0
  258. data/lib/rouge/lexers/erb.rb +53 -0
  259. data/lib/rouge/lexers/erlang.rb +115 -0
  260. data/lib/rouge/lexers/escape.rb +58 -0
  261. data/lib/rouge/lexers/factor.rb +303 -0
  262. data/lib/rouge/lexers/fortran.rb +178 -0
  263. data/lib/rouge/lexers/freefem.rb +240 -0
  264. data/lib/rouge/lexers/fsharp.rb +119 -0
  265. data/lib/rouge/lexers/gdscript.rb +171 -0
  266. data/lib/rouge/lexers/ghc_core.rb +151 -0
  267. data/lib/rouge/lexers/gherkin.rb +140 -0
  268. data/lib/rouge/lexers/gherkin/keywords.rb +16 -0
  269. data/lib/rouge/lexers/glsl.rb +132 -0
  270. data/lib/rouge/lexers/go.rb +175 -0
  271. data/lib/rouge/lexers/gradle.rb +38 -0
  272. data/lib/rouge/lexers/graphql.rb +261 -0
  273. data/lib/rouge/lexers/groovy.rb +111 -0
  274. data/lib/rouge/lexers/hack.rb +49 -0
  275. data/lib/rouge/lexers/haml.rb +226 -0
  276. data/lib/rouge/lexers/handlebars.rb +91 -0
  277. data/lib/rouge/lexers/haskell.rb +199 -0
  278. data/lib/rouge/lexers/haxe.rb +246 -0
  279. data/lib/rouge/lexers/hcl.rb +163 -0
  280. data/lib/rouge/lexers/hocon.rb +86 -0
  281. data/lib/rouge/lexers/hql.rb +139 -0
  282. data/lib/rouge/lexers/html.rb +141 -0
  283. data/lib/rouge/lexers/http.rb +81 -0
  284. data/lib/rouge/lexers/hylang.rb +94 -0
  285. data/lib/rouge/lexers/idlang.rb +312 -0
  286. data/lib/rouge/lexers/igorpro.rb +664 -0
  287. data/lib/rouge/lexers/ini.rb +54 -0
  288. data/lib/rouge/lexers/io.rb +69 -0
  289. data/lib/rouge/lexers/irb.rb +67 -0
  290. data/lib/rouge/lexers/java.rb +91 -0
  291. data/lib/rouge/lexers/javascript.rb +279 -0
  292. data/lib/rouge/lexers/jinja.rb +154 -0
  293. data/lib/rouge/lexers/jsl.rb +55 -0
  294. data/lib/rouge/lexers/json.rb +69 -0
  295. data/lib/rouge/lexers/json_doc.rb +25 -0
  296. data/lib/rouge/lexers/jsonnet.rb +152 -0
  297. data/lib/rouge/lexers/jsp.rb +120 -0
  298. data/lib/rouge/lexers/jsx.rb +104 -0
  299. data/lib/rouge/lexers/julia.rb +290 -0
  300. data/lib/rouge/lexers/kotlin.rb +127 -0
  301. data/lib/rouge/lexers/lasso.rb +215 -0
  302. data/lib/rouge/lexers/lasso/keywords.yml +446 -0
  303. data/lib/rouge/lexers/liquid.rb +285 -0
  304. data/lib/rouge/lexers/literate_coffeescript.rb +34 -0
  305. data/lib/rouge/lexers/literate_haskell.rb +37 -0
  306. data/lib/rouge/lexers/llvm.rb +97 -0
  307. data/lib/rouge/lexers/lua.rb +164 -0
  308. data/lib/rouge/lexers/lua/builtins.rb +24 -0
  309. data/lib/rouge/lexers/lustre.rb +79 -0
  310. data/lib/rouge/lexers/lutin.rb +33 -0
  311. data/lib/rouge/lexers/m68k.rb +143 -0
  312. data/lib/rouge/lexers/magik.rb +127 -0
  313. data/lib/rouge/lexers/make.rb +135 -0
  314. data/lib/rouge/lexers/markdown.rb +182 -0
  315. data/lib/rouge/lexers/mason.rb +110 -0
  316. data/lib/rouge/lexers/mathematica.rb +96 -0
  317. data/lib/rouge/lexers/mathematica/builtins.rb +13 -0
  318. data/lib/rouge/lexers/matlab.rb +81 -0
  319. data/lib/rouge/lexers/matlab/builtins.yml +3515 -0
  320. data/lib/rouge/lexers/minizinc.rb +87 -0
  321. data/lib/rouge/lexers/moonscript.rb +115 -0
  322. data/lib/rouge/lexers/mosel.rb +232 -0
  323. data/lib/rouge/lexers/msgtrans.rb +26 -0
  324. data/lib/rouge/lexers/mxml.rb +69 -0
  325. data/lib/rouge/lexers/nasm.rb +72 -0
  326. data/lib/rouge/lexers/nesasm.rb +78 -0
  327. data/lib/rouge/lexers/nginx.rb +72 -0
  328. data/lib/rouge/lexers/nim.rb +154 -0
  329. data/lib/rouge/lexers/nix.rb +211 -0
  330. data/lib/rouge/lexers/objective_c.rb +21 -0
  331. data/lib/rouge/lexers/objective_c/common.rb +184 -0
  332. data/lib/rouge/lexers/objective_cpp.rb +31 -0
  333. data/lib/rouge/lexers/ocaml.rb +65 -0
  334. data/lib/rouge/lexers/ocaml/common.rb +53 -0
  335. data/lib/rouge/lexers/openedge.rb +429 -0
  336. data/lib/rouge/lexers/opentype_feature_file.rb +113 -0
  337. data/lib/rouge/lexers/pascal.rb +67 -0
  338. data/lib/rouge/lexers/perl.rb +231 -0
  339. data/lib/rouge/lexers/php.rb +216 -0
  340. data/lib/rouge/lexers/php/builtins.rb +203 -0
  341. data/lib/rouge/lexers/plain_text.rb +27 -0
  342. data/lib/rouge/lexers/plist.rb +47 -0
  343. data/lib/rouge/lexers/pony.rb +94 -0
  344. data/lib/rouge/lexers/powershell.rb +230 -0
  345. data/lib/rouge/lexers/praat.rb +351 -0
  346. data/lib/rouge/lexers/prolog.rb +67 -0
  347. data/lib/rouge/lexers/prometheus.rb +123 -0
  348. data/lib/rouge/lexers/properties.rb +52 -0
  349. data/lib/rouge/lexers/protobuf.rb +71 -0
  350. data/lib/rouge/lexers/puppet.rb +129 -0
  351. data/lib/rouge/lexers/python.rb +248 -0
  352. data/lib/rouge/lexers/q.rb +126 -0
  353. data/lib/rouge/lexers/qml.rb +74 -0
  354. data/lib/rouge/lexers/r.rb +89 -0
  355. data/lib/rouge/lexers/racket.rb +545 -0
  356. data/lib/rouge/lexers/reasonml.rb +65 -0
  357. data/lib/rouge/lexers/robot_framework.rb +249 -0
  358. data/lib/rouge/lexers/ruby.rb +444 -0
  359. data/lib/rouge/lexers/rust.rb +193 -0
  360. data/lib/rouge/lexers/sas.rb +563 -0
  361. data/lib/rouge/lexers/sass.rb +75 -0
  362. data/lib/rouge/lexers/sass/common.rb +181 -0
  363. data/lib/rouge/lexers/scala.rb +169 -0
  364. data/lib/rouge/lexers/scheme.rb +113 -0
  365. data/lib/rouge/lexers/scss.rb +35 -0
  366. data/lib/rouge/lexers/sed.rb +173 -0
  367. data/lib/rouge/lexers/shell.rb +201 -0
  368. data/lib/rouge/lexers/sieve.rb +97 -0
  369. data/lib/rouge/lexers/slice.rb +32 -0
  370. data/lib/rouge/lexers/slim.rb +229 -0
  371. data/lib/rouge/lexers/smalltalk.rb +117 -0
  372. data/lib/rouge/lexers/smarty.rb +81 -0
  373. data/lib/rouge/lexers/sml.rb +345 -0
  374. data/lib/rouge/lexers/sparql.rb +129 -0
  375. data/lib/rouge/lexers/sqf.rb +109 -0
  376. data/lib/rouge/lexers/sqf/commands.rb +15 -0
  377. data/lib/rouge/lexers/sql.rb +161 -0
  378. data/lib/rouge/lexers/supercollider.rb +116 -0
  379. data/lib/rouge/lexers/swift.rb +186 -0
  380. data/lib/rouge/lexers/tap.rb +89 -0
  381. data/lib/rouge/lexers/tcl.rb +193 -0
  382. data/lib/rouge/lexers/terraform.rb +113 -0
  383. data/lib/rouge/lexers/tex.rb +70 -0
  384. data/lib/rouge/lexers/toml.rb +106 -0
  385. data/lib/rouge/lexers/tsx.rb +20 -0
  386. data/lib/rouge/lexers/ttcn3.rb +119 -0
  387. data/lib/rouge/lexers/tulip.rb +108 -0
  388. data/lib/rouge/lexers/turtle.rb +61 -0
  389. data/lib/rouge/lexers/twig.rb +40 -0
  390. data/lib/rouge/lexers/typescript.rb +30 -0
  391. data/lib/rouge/lexers/typescript/common.rb +34 -0
  392. data/lib/rouge/lexers/vala.rb +78 -0
  393. data/lib/rouge/lexers/varnish.rb +168 -0
  394. data/lib/rouge/lexers/vb.rb +165 -0
  395. data/lib/rouge/lexers/verilog.rb +163 -0
  396. data/lib/rouge/lexers/vhdl.rb +98 -0
  397. data/lib/rouge/lexers/viml.rb +102 -0
  398. data/lib/rouge/lexers/viml/keywords.rb +14 -0
  399. data/lib/rouge/lexers/vue.rb +124 -0
  400. data/lib/rouge/lexers/wollok.rb +104 -0
  401. data/lib/rouge/lexers/xml.rb +54 -0
  402. data/lib/rouge/lexers/xojo.rb +61 -0
  403. data/lib/rouge/lexers/xpath.rb +332 -0
  404. data/lib/rouge/lexers/xquery.rb +145 -0
  405. data/lib/rouge/lexers/yaml.rb +376 -0
  406. data/lib/rouge/plugins/redcarpet.rb +37 -0
  407. data/lib/rouge/regex_lexer.rb +443 -0
  408. data/lib/rouge/template_lexer.rb +21 -0
  409. data/lib/rouge/tex_theme_renderer.rb +132 -0
  410. data/lib/rouge/text_analyzer.rb +50 -0
  411. data/lib/rouge/theme.rb +218 -0
  412. data/lib/rouge/themes/base16.rb +131 -0
  413. data/lib/rouge/themes/bw.rb +41 -0
  414. data/lib/rouge/themes/colorful.rb +68 -0
  415. data/lib/rouge/themes/github.rb +72 -0
  416. data/lib/rouge/themes/gruvbox.rb +168 -0
  417. data/lib/rouge/themes/igor_pro.rb +21 -0
  418. data/lib/rouge/themes/magritte.rb +78 -0
  419. data/lib/rouge/themes/molokai.rb +83 -0
  420. data/lib/rouge/themes/monokai.rb +93 -0
  421. data/lib/rouge/themes/monokai_sublime.rb +93 -0
  422. data/lib/rouge/themes/pastie.rb +70 -0
  423. data/lib/rouge/themes/thankful_eyes.rb +75 -0
  424. data/lib/rouge/themes/tulip.rb +70 -0
  425. data/lib/rouge/token.rb +191 -0
  426. data/lib/rouge/util.rb +102 -0
  427. data/lib/rouge/version.rb +8 -0
  428. data/rouge.gemspec +26 -0
  429. metadata +476 -0
@@ -0,0 +1,191 @@
1
+ # -*- coding: utf-8 -*- #
2
+ # frozen_string_literal: true
3
+
4
+ module Rouge
5
+ module Lexers
6
+ class Coq < RegexLexer
7
+ title "Coq"
8
+ desc 'Coq (coq.inria.fr)'
9
+ tag 'coq'
10
+ mimetypes 'text/x-coq'
11
+
12
+ def self.gallina
13
+ @gallina ||= Set.new %w(
14
+ as fun if in let match then else return end Type Set Prop
15
+ forall
16
+ )
17
+ end
18
+
19
+ def self.coq
20
+ @coq ||= Set.new %w(
21
+ Definition Theorem Lemma Remark Example Fixpoint CoFixpoint
22
+ Record Inductive CoInductive Corollary Goal Proof
23
+ Ltac Require Import Export Module Section End Variable
24
+ Context Polymorphic Monomorphic Universe Universes
25
+ Variables Class Instance Global Local Include
26
+ Printing Notation Infix Arguments Hint Rewrite Immediate
27
+ Qed Defined Opaque Transparent Existing
28
+ Compute Eval Print SearchAbout Search About Check
29
+ )
30
+ end
31
+
32
+ def self.ltac
33
+ @ltac ||= Set.new %w(
34
+ apply eapply auto eauto rewrite setoid_rewrite
35
+ with in as at destruct split inversion injection
36
+ intro intros unfold fold cbv cbn lazy subst
37
+ clear symmetry transitivity etransitivity erewrite
38
+ edestruct constructor econstructor eexists exists
39
+ f_equal refine instantiate revert simpl
40
+ specialize generalize dependent red induction
41
+ beta iota zeta delta exfalso autorewrite setoid_rewrite
42
+ compute vm_compute native_compute
43
+ )
44
+ end
45
+
46
+ def self.tacticals
47
+ @tacticals ||= Set.new %w(
48
+ repeat first try
49
+ )
50
+ end
51
+
52
+ def self.terminators
53
+ @terminators ||= Set.new %w(
54
+ omega solve congruence reflexivity exact
55
+ assumption eassumption
56
+ )
57
+ end
58
+
59
+ def self.keyopts
60
+ @keyopts ||= Set.new %w(
61
+ := => -> /\\ \\/ _ ; :> : ⇒ → ↔ ⇔ ≔ ≡ ∀ ∃ ∧ ∨ ¬ ⊤ ⊥ ⊢ ⊨ ∈
62
+ )
63
+ end
64
+
65
+ def self.end_sentence
66
+ @end_sentence ||= Punctuation::Indicator
67
+ end
68
+
69
+ def self.classify(x)
70
+ if self.coq.include? x
71
+ return Keyword
72
+ elsif self.gallina.include? x
73
+ return Keyword::Reserved
74
+ elsif self.ltac.include? x
75
+ return Keyword::Pseudo
76
+ elsif self.terminators.include? x
77
+ return Name::Exception
78
+ elsif self.tacticals.include? x
79
+ return Keyword::Pseudo
80
+ else
81
+ return Name::Constant
82
+ end
83
+ end
84
+
85
+ operator = %r([\[\];,{}_()!$%&*+./:<=>?@^|~#-]+)
86
+ id = /(?:[a-z][\w']*)|(?:[_a-z][\w']+)/i
87
+ dot_id = /\.((?:[a-z][\w']*)|(?:[_a-z][\w']+))/i
88
+ dot_space = /\.(\s+)/
89
+ module_type = /Module(\s+)Type(\s+)/
90
+ set_options = /(Set|Unset)(\s+)(Universe|Printing|Implicit|Strict)(\s+)(Polymorphism|All|Notations|Arguments|Universes|Implicit)(\s*)\./m
91
+
92
+ state :root do
93
+ rule %r/[(][*](?![)])/, Comment, :comment
94
+ rule %r/\s+/m, Text::Whitespace
95
+ rule module_type do |m|
96
+ token Keyword , 'Module'
97
+ token Text::Whitespace , m[1]
98
+ token Keyword , 'Type'
99
+ token Text::Whitespace , m[2]
100
+ end
101
+ rule set_options do |m|
102
+ token Keyword , m[1]
103
+ i = 2
104
+ while m[i] != ''
105
+ token Text::Whitespace , m[i]
106
+ token Keyword , m[i+1]
107
+ i += 2
108
+ end
109
+ token self.class.end_sentence , '.'
110
+ end
111
+ rule id do |m|
112
+ @name = m[0]
113
+ @continue = false
114
+ push :continue_id
115
+ end
116
+ rule %r(/\\), Operator
117
+ rule %r/\\\//, Operator
118
+
119
+ rule %r/-?\d[\d_]*(.[\d_]*)?(e[+-]?\d[\d_]*)/i, Num::Float
120
+ rule %r/\d[\d_]*/, Num::Integer
121
+
122
+ rule %r/'(?:(\\[\\"'ntbr ])|(\\[0-9]{3})|(\\x\h{2}))'/, Str::Char
123
+ rule %r/'/, Keyword
124
+ rule %r/"/, Str::Double, :string
125
+ rule %r/[~?]#{id}/, Name::Variable
126
+
127
+ rule %r/./ do |m|
128
+ match = m[0]
129
+ if self.class.keyopts.include? match
130
+ token Punctuation
131
+ elsif match =~ operator
132
+ token Operator
133
+ else
134
+ token Error
135
+ end
136
+ end
137
+ end
138
+
139
+ state :comment do
140
+ rule %r/[^(*)]+/, Comment
141
+ rule(/[(][*]/) { token Comment; push }
142
+ rule %r/[*][)]/, Comment, :pop!
143
+ rule %r/[(*)]/, Comment
144
+ end
145
+
146
+ state :string do
147
+ rule %r/(?:\\")+|[^"]/, Str::Double
148
+ mixin :escape_sequence
149
+ rule %r/\\\n/, Str::Double
150
+ rule %r/"/, Str::Double, :pop!
151
+ end
152
+
153
+ state :escape_sequence do
154
+ rule %r/\\[\\"'ntbr]/, Str::Escape
155
+ end
156
+
157
+ state :continue_id do
158
+ # the stream starts with an id (stored in @name) and continues here
159
+ rule dot_id do |m|
160
+ token Name::Namespace , @name
161
+ token Punctuation , '.'
162
+ @continue = true
163
+ @name = m[1]
164
+ end
165
+ rule dot_space do |m|
166
+ if @continue
167
+ token Name::Constant , @name
168
+ else
169
+ token self.class.classify(@name) , @name
170
+ end
171
+ token self.class.end_sentence , '.'
172
+ token Text::Whitespace , m[1]
173
+ @name = false
174
+ @continue = false
175
+ pop!
176
+ end
177
+ rule %r// do
178
+ if @continue
179
+ token Name::Constant , @name
180
+ else
181
+ token self.class.classify(@name) , @name
182
+ end
183
+ @name = false
184
+ @continue = false
185
+ pop!
186
+ end
187
+ end
188
+
189
+ end
190
+ end
191
+ end
@@ -0,0 +1,82 @@
1
+ # -*- coding: utf-8 -*- #
2
+ # frozen_string_literal: true
3
+
4
+ module Rouge
5
+ module Lexers
6
+ load_lexer 'c.rb'
7
+
8
+ class Cpp < C
9
+ title "C++"
10
+ desc "The C++ programming language"
11
+
12
+ tag 'cpp'
13
+ aliases 'c++'
14
+ # the many varied filenames of c++ source files...
15
+ filenames '*.cpp', '*.hpp',
16
+ '*.c++', '*.h++',
17
+ '*.cc', '*.hh',
18
+ '*.cxx', '*.hxx',
19
+ '*.pde', '*.ino',
20
+ '*.tpp', '*.h'
21
+ mimetypes 'text/x-c++hdr', 'text/x-c++src'
22
+
23
+ def self.keywords
24
+ @keywords ||= super + Set.new(%w(
25
+ asm auto catch const_cast delete dynamic_cast explicit export
26
+ friend mutable namespace new operator private protected public
27
+ reinterpret_cast restrict size_of static_cast template this throw
28
+ throws typeid typename using virtual final override
29
+
30
+ alignas alignof constexpr decltype noexcept static_assert
31
+ thread_local try
32
+ ))
33
+ end
34
+
35
+ def self.keywords_type
36
+ @keywords_type ||= super + Set.new(%w(
37
+ bool
38
+ ))
39
+ end
40
+
41
+ def self.reserved
42
+ @reserved ||= super + Set.new(%w(
43
+ __virtual_inheritance __uuidof __super __single_inheritance
44
+ __multiple_inheritance __interface __event
45
+ ))
46
+ end
47
+
48
+ id = /[a-zA-Z_][a-zA-Z0-9_]*/
49
+
50
+ prepend :root do
51
+ # Offload C++ extensions, http://offload.codeplay.com/
52
+ rule %r/(?:__offload|__blockingoffload|__outer)\b/, Keyword::Pseudo
53
+ end
54
+
55
+ # digits with optional inner quotes
56
+ # see www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3781.pdf
57
+ dq = /\d('?\d)*/
58
+
59
+ prepend :statements do
60
+ rule %r/class\b/, Keyword, :classname
61
+ rule %r/\d+(\.\d+)?(?:h|(?:min)|s|(?:ms)|(?:us)|(?:ns))/, Num::Other
62
+ rule %r((#{dq}[.]#{dq}?|[.]#{dq})(e[+-]?#{dq}[lu]*)?)i, Num::Float
63
+ rule %r(#{dq}e[+-]?#{dq}[lu]*)i, Num::Float
64
+ rule %r/0x\h('?\h)*[lu]*/i, Num::Hex
65
+ rule %r/0b[01]+(?:_[01]+)*/, Num::Bin
66
+ rule %r/0[0-7]('?[0-7])*[lu]*/i, Num::Oct
67
+ rule %r/#{dq}[lu]*/i, Num::Integer
68
+ rule %r/\bnullptr\b/, Name::Builtin
69
+ rule %r/(?:u8|u|U|L)?R"([a-zA-Z0-9_{}\[\]#<>%:;.?*\+\-\/\^&|~!=,"']{,16})\(.*?\)\1"/m, Str
70
+ end
71
+
72
+ state :classname do
73
+ rule id, Name::Class, :pop!
74
+
75
+ # template specification
76
+ rule %r/\s*(?=>)/m, Text, :pop!
77
+ rule %r/[.]{3}/, Operator
78
+ mixin :whitespace
79
+ end
80
+ end
81
+ end
82
+ end
@@ -0,0 +1,430 @@
1
+ # -*- coding: utf-8 -*- #
2
+ # frozen_string_literal: true
3
+
4
+ module Rouge
5
+ module Lexers
6
+ class Crystal < RegexLexer
7
+ title "Crystal"
8
+ desc "Crystal The Programming Language (crystal-lang.org)"
9
+ tag 'crystal'
10
+ aliases 'cr'
11
+ filenames '*.cr'
12
+
13
+ mimetypes 'text/x-crystal', 'application/x-crystal'
14
+
15
+ def self.detect?(text)
16
+ return true if text.shebang? 'crystal'
17
+ end
18
+
19
+ state :symbols do
20
+ # symbols
21
+ rule %r(
22
+ : # initial :
23
+ @{0,2} # optional ivar, for :@foo and :@@foo
24
+ [a-z_]\w*[!?]? # the symbol
25
+ )xi, Str::Symbol
26
+
27
+ # special symbols
28
+ rule %r(:(?:\*\*|[-+]@|[/\%&\|^`~]|\[\]=?|<<|>>|<=?>|<=?|===?)),
29
+ Str::Symbol
30
+
31
+ rule %r/:'(\\\\|\\'|[^'])*'/, Str::Symbol
32
+ rule %r/:"/, Str::Symbol, :simple_sym
33
+ end
34
+
35
+ state :sigil_strings do
36
+ # %-sigiled strings
37
+ # %(abc), %[abc], %<abc>, %.abc., %r.abc., etc
38
+ delimiter_map = { '{' => '}', '[' => ']', '(' => ')', '<' => '>' }
39
+ rule %r/%([rqswQWxiI])?([^\w\s])/ do |m|
40
+ open = Regexp.escape(m[2])
41
+ close = Regexp.escape(delimiter_map[m[2]] || m[2])
42
+ interp = /[rQWxI]/ === m[1]
43
+ toktype = Str::Other
44
+
45
+ puts " open: #{open.inspect}" if @debug
46
+ puts " close: #{close.inspect}" if @debug
47
+
48
+ # regexes
49
+ if m[1] == 'r'
50
+ toktype = Str::Regex
51
+ push :regex_flags
52
+ end
53
+
54
+ token toktype
55
+
56
+ push do
57
+ rule %r/\\[##{open}#{close}\\]/, Str::Escape
58
+ # nesting rules only with asymmetric delimiters
59
+ if open != close
60
+ rule %r/#{open}/ do
61
+ token toktype
62
+ push
63
+ end
64
+ end
65
+ rule %r/#{close}/, toktype, :pop!
66
+
67
+ if interp
68
+ mixin :string_intp_escaped
69
+ rule %r/#/, toktype
70
+ else
71
+ rule %r/[\\#]/, toktype
72
+ end
73
+
74
+ rule %r/[^##{open}#{close}\\]+/m, toktype
75
+ end
76
+ end
77
+ end
78
+
79
+ state :strings do
80
+ mixin :symbols
81
+ rule %r/\b[a-z_]\w*?[?!]?:\s+/, Str::Symbol, :expr_start
82
+ rule %r/'(\\\\|\\'|[^'])*'/, Str::Single
83
+ rule %r/"/, Str::Double, :simple_string
84
+ rule %r/(?<!\.)`/, Str::Backtick, :simple_backtick
85
+ end
86
+
87
+ state :regex_flags do
88
+ rule %r/[mixounse]*/, Str::Regex, :pop!
89
+ end
90
+
91
+ # double-quoted string and symbol
92
+ [[:string, Str::Double, '"'],
93
+ [:sym, Str::Symbol, '"'],
94
+ [:backtick, Str::Backtick, '`']].each do |name, tok, fin|
95
+ state :"simple_#{name}" do
96
+ mixin :string_intp_escaped
97
+ rule %r/[^\\#{fin}#]+/m, tok
98
+ rule %r/[\\#]/, tok
99
+ rule %r/#{fin}/, tok, :pop!
100
+ end
101
+ end
102
+
103
+ keywords = %w(
104
+ BEGIN END alias begin break case defined\? do else elsif end
105
+ ensure for if ifdef in next redo rescue raise retry return super then
106
+ undef unless until when while yield lib fun type of as
107
+ )
108
+
109
+ keywords_pseudo = %w(
110
+ initialize new loop include extend raise attr_reader attr_writer
111
+ attr_accessor alias_method attr catch throw private module_function
112
+ public protected true false nil __FILE__ __LINE__
113
+ getter getter? getter! property property? property! struct record
114
+ )
115
+
116
+ builtins_g = %w(
117
+ abort ancestors at_exit
118
+ caller catch chomp chop clone constants
119
+ display dup eval exec exit extend fail fork format freeze
120
+ getc gets global_variables gsub hash id included_modules
121
+ inspect instance_eval instance_method instance_methods
122
+ lambda loop method method_missing
123
+ methods module_eval name object_id open p print printf
124
+ proc putc puts raise rand
125
+ readline readlines require scan select self send
126
+ sleep split sprintf srand sub syscall system
127
+ test throw to_a to_s trap warn
128
+ )
129
+
130
+ builtins_q = %w(
131
+ eql equal include is_a iterator kind_of nil
132
+ )
133
+
134
+ builtins_b = %w(chomp chop exit gsub sub)
135
+
136
+ start do
137
+ push :expr_start
138
+ @heredoc_queue = []
139
+ end
140
+
141
+ state :whitespace do
142
+ mixin :inline_whitespace
143
+ rule %r/\n\s*/m, Text, :expr_start
144
+ rule %r/#.*$/, Comment::Single
145
+
146
+ rule %r(=begin\b.*?\n=end\b)m, Comment::Multiline
147
+ end
148
+
149
+ state :inline_whitespace do
150
+ rule %r/[ \t\r]+/, Text
151
+ end
152
+
153
+ state :root do
154
+ mixin :whitespace
155
+ rule %r/__END__/, Comment::Preproc, :end_part
156
+
157
+ rule %r/0_?[0-7]+(?:_[0-7]+)*/, Num::Oct
158
+ rule %r/0x[0-9A-Fa-f]+(?:_[0-9A-Fa-f]+)*/, Num::Hex
159
+ rule %r/0b[01]+(?:_[01]+)*/, Num::Bin
160
+ rule %r/\d+\.\d+(e[\+\-]?\d+)?/, Num::Float
161
+ rule %r/[\d]+(?:_\d+)*/, Num::Integer
162
+
163
+ rule %r/@\[([^\]]+)\]/, Name::Decorator
164
+
165
+ # names
166
+ rule %r/@@[a-z_]\w*/i, Name::Variable::Class
167
+ rule %r/@[a-z_]\w*/i, Name::Variable::Instance
168
+ rule %r/\$\w+/, Name::Variable::Global
169
+ rule %r(\$[!@&`'+~=/\\,;.<>_*\$?:"]), Name::Variable::Global
170
+ rule %r/\$-[0adFiIlpvw]/, Name::Variable::Global
171
+ rule %r/::/, Operator
172
+
173
+ mixin :strings
174
+
175
+ rule %r/(?:#{keywords.join('|')})\b/, Keyword, :expr_start
176
+ rule %r/(?:#{keywords_pseudo.join('|')})\b/, Keyword::Pseudo, :expr_start
177
+
178
+ rule %r(
179
+ (module)
180
+ (\s+)
181
+ ([a-zA-Z_][a-zA-Z0-9_]*(::[a-zA-Z_][a-zA-Z0-9_]*)*)
182
+ )x do
183
+ groups Keyword, Text, Name::Namespace
184
+ end
185
+
186
+ rule %r/(def\b)(\s*)/ do
187
+ groups Keyword, Text
188
+ push :funcname
189
+ end
190
+
191
+ rule %r/(class\b)(\s*)/ do
192
+ groups Keyword, Text
193
+ push :classname
194
+ end
195
+
196
+ rule %r/(?:#{builtins_q.join('|')})[?]/, Name::Builtin, :expr_start
197
+ rule %r/(?:#{builtins_b.join('|')})!/, Name::Builtin, :expr_start
198
+ rule %r/(?<!\.)(?:#{builtins_g.join('|')})\b/,
199
+ Name::Builtin, :method_call
200
+
201
+ mixin :has_heredocs
202
+
203
+ # `..` and `...` for ranges must have higher priority than `.`
204
+ # Otherwise, they will be parsed as :method_call
205
+ rule %r/\.{2,3}/, Operator, :expr_start
206
+
207
+ rule %r/[A-Z][a-zA-Z0-9_]*/, Name::Constant, :method_call
208
+ rule %r/(\.|::)(\s*)([a-z_]\w*[!?]?|[*%&^`~+-\/\[<>=])/ do
209
+ groups Punctuation, Text, Name::Function
210
+ push :method_call
211
+ end
212
+
213
+ rule %r/[a-zA-Z_]\w*[?!]/, Name, :expr_start
214
+ rule %r/[a-zA-Z_]\w*/, Name, :method_call
215
+ rule %r/\*\*|<<?|>>?|>=|<=|<=>|=~|={3}|!~|&&?|\|\||\./,
216
+ Operator, :expr_start
217
+ rule %r/[-+\/*%=<>&!^|~]=?/, Operator, :expr_start
218
+ rule(/[?]/) { token Punctuation; push :ternary; push :expr_start }
219
+ rule %r<[\[({,:\\;/]>, Punctuation, :expr_start
220
+ rule %r<[\])}]>, Punctuation
221
+ end
222
+
223
+ state :has_heredocs do
224
+ rule %r/(?<!\w)(<<[-~]?)(["`']?)([a-zA-Z_]\w*)(\2)/ do |m|
225
+ token Operator, m[1]
226
+ token Name::Constant, "#{m[2]}#{m[3]}#{m[4]}"
227
+ @heredoc_queue << [['<<-', '<<~'].include?(m[1]), m[3]]
228
+ push :heredoc_queue unless state? :heredoc_queue
229
+ end
230
+
231
+ rule %r/(<<[-~]?)(["'])(\2)/ do |m|
232
+ token Operator, m[1]
233
+ token Name::Constant, "#{m[2]}#{m[3]}#{m[4]}"
234
+ @heredoc_queue << [['<<-', '<<~'].include?(m[1]), '']
235
+ push :heredoc_queue unless state? :heredoc_queue
236
+ end
237
+ end
238
+
239
+ state :heredoc_queue do
240
+ rule %r/(?=\n)/ do
241
+ goto :resolve_heredocs
242
+ end
243
+
244
+ mixin :root
245
+ end
246
+
247
+ state :resolve_heredocs do
248
+ mixin :string_intp_escaped
249
+
250
+ rule %r/\n/, Str::Heredoc, :test_heredoc
251
+ rule %r/[#\\\n]/, Str::Heredoc
252
+ rule %r/[^#\\\n]+/, Str::Heredoc
253
+ end
254
+
255
+ state :test_heredoc do
256
+ rule %r/[^#\\\n]*$/ do |m|
257
+ tolerant, heredoc_name = @heredoc_queue.first
258
+ check = tolerant ? m[0].strip : m[0].rstrip
259
+
260
+ # check if we found the end of the heredoc
261
+ puts " end heredoc check #{check.inspect} = #{heredoc_name.inspect}" if @debug
262
+ if check == heredoc_name
263
+ @heredoc_queue.shift
264
+ # if there's no more, we're done looking.
265
+ pop! if @heredoc_queue.empty?
266
+ token Name::Constant
267
+ else
268
+ token Str::Heredoc
269
+ end
270
+
271
+ pop!
272
+ end
273
+
274
+ rule(//) { pop! }
275
+ end
276
+
277
+ state :funcname do
278
+ rule %r/\s+/, Text
279
+ rule %r/\(/, Punctuation, :defexpr
280
+ rule %r(
281
+ (?:([a-zA-Z_]\w*)(\.))?
282
+ (
283
+ [a-zA-Z_]\w*[!?]? |
284
+ \*\*? | [-+]@? | [/%&\|^`~] | \[\]=? |
285
+ <<? | >>? | <=>? | >= | ===?
286
+ )
287
+ )x do |m|
288
+ puts "matches: #{[m[0], m[1], m[2], m[3]].inspect}" if @debug
289
+ groups Name::Class, Operator, Name::Function
290
+ pop!
291
+ end
292
+
293
+ rule(//) { pop! }
294
+ end
295
+
296
+ state :classname do
297
+ rule %r/\s+/, Text
298
+ rule %r/\(/ do
299
+ token Punctuation
300
+ push :defexpr
301
+ push :expr_start
302
+ end
303
+
304
+ # class << expr
305
+ rule %r/<</ do
306
+ token Operator
307
+ goto :expr_start
308
+ end
309
+
310
+ rule %r/[A-Z_]\w*/, Name::Class, :pop!
311
+
312
+ rule(//) { pop! }
313
+ end
314
+
315
+ state :ternary do
316
+ rule(/:(?!:)/) { token Punctuation; goto :expr_start }
317
+
318
+ mixin :root
319
+ end
320
+
321
+ state :defexpr do
322
+ rule %r/(\))(\.|::)?/ do
323
+ groups Punctuation, Operator
324
+ pop!
325
+ end
326
+ rule %r/\(/ do
327
+ token Punctuation
328
+ push :defexpr
329
+ push :expr_start
330
+ end
331
+
332
+ mixin :root
333
+ end
334
+
335
+ state :in_interp do
336
+ rule %r/}/, Str::Interpol, :pop!
337
+ mixin :root
338
+ end
339
+
340
+ state :string_intp do
341
+ rule %r/[#][{]/, Str::Interpol, :in_interp
342
+ rule %r/#(@@?|\$)[a-z_]\w*/i, Str::Interpol
343
+ end
344
+
345
+ state :string_intp_escaped do
346
+ mixin :string_intp
347
+ rule %r/\\([\\abefnrstv#"']|x[a-fA-F0-9]{1,2}|[0-7]{1,3})/,
348
+ Str::Escape
349
+ rule %r/\\./, Str::Escape
350
+ end
351
+
352
+ state :method_call do
353
+ rule %r(/) do
354
+ token Operator
355
+ goto :expr_start
356
+ end
357
+
358
+ rule(/(?=\n)/) { pop! }
359
+
360
+ rule(//) { goto :method_call_spaced }
361
+ end
362
+
363
+ state :method_call_spaced do
364
+ mixin :whitespace
365
+
366
+ rule %r([%/]=) do
367
+ token Operator
368
+ goto :expr_start
369
+ end
370
+
371
+ rule %r((/)(?=\S|\s*/)) do
372
+ token Str::Regex
373
+ goto :slash_regex
374
+ end
375
+
376
+ mixin :sigil_strings
377
+
378
+ rule(%r((?=\s*/))) { pop! }
379
+
380
+ rule(/\s+/) { token Text; goto :expr_start }
381
+ rule(//) { pop! }
382
+ end
383
+
384
+ state :expr_start do
385
+ mixin :inline_whitespace
386
+
387
+ rule %r(/) do
388
+ token Str::Regex
389
+ goto :slash_regex
390
+ end
391
+
392
+ # char operator. ?x evaulates to "x", unless there's a digit
393
+ # beforehand like x>=0?n[x]:""
394
+ rule %r(
395
+ [?](\\[MC]-)* # modifiers
396
+ (\\([\\abefnrstv\#"']|x[a-fA-F0-9]{1,2}|[0-7]{1,3})|\S)
397
+ (?!\w)
398
+ )x, Str::Char, :pop!
399
+
400
+ # special case for using a single space. Ruby demands that
401
+ # these be in a single line, otherwise it would make no sense.
402
+ rule %r/(\s*)(%[rqswQWxiI]? \S* )/ do
403
+ groups Text, Str::Other
404
+ pop!
405
+ end
406
+
407
+ mixin :sigil_strings
408
+
409
+ rule(//) { pop! }
410
+ end
411
+
412
+ state :slash_regex do
413
+ mixin :string_intp
414
+ rule %r(\\\\), Str::Regex
415
+ rule %r(\\/), Str::Regex
416
+ rule %r([\\#]), Str::Regex
417
+ rule %r([^\\/#]+)m, Str::Regex
418
+ rule %r(/) do
419
+ token Str::Regex
420
+ goto :regex_flags
421
+ end
422
+ end
423
+
424
+ state :end_part do
425
+ # eat up the rest of the stream as Comment::Preproc
426
+ rule %r/.+/m, Comment::Preproc, :pop!
427
+ end
428
+ end
429
+ end
430
+ end