rouge 3.18.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 (444) 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 +107 -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/cypher +5 -0
  41. data/lib/rouge/demos/cython +6 -0
  42. data/lib/rouge/demos/d +16 -0
  43. data/lib/rouge/demos/dart +6 -0
  44. data/lib/rouge/demos/datastudio +21 -0
  45. data/lib/rouge/demos/diff +7 -0
  46. data/lib/rouge/demos/digdag +19 -0
  47. data/lib/rouge/demos/docker +9 -0
  48. data/lib/rouge/demos/dot +5 -0
  49. data/lib/rouge/demos/ecl +18 -0
  50. data/lib/rouge/demos/eex +1 -0
  51. data/lib/rouge/demos/eiffel +30 -0
  52. data/lib/rouge/demos/elixir +1 -0
  53. data/lib/rouge/demos/elm +4 -0
  54. data/lib/rouge/demos/epp +4 -0
  55. data/lib/rouge/demos/erb +1 -0
  56. data/lib/rouge/demos/erlang +7 -0
  57. data/lib/rouge/demos/escape +3 -0
  58. data/lib/rouge/demos/factor +5 -0
  59. data/lib/rouge/demos/fortran +22 -0
  60. data/lib/rouge/demos/freefem +16 -0
  61. data/lib/rouge/demos/fsharp +12 -0
  62. data/lib/rouge/demos/gdscript +18 -0
  63. data/lib/rouge/demos/ghc-cmm +23 -0
  64. data/lib/rouge/demos/ghc-core +26 -0
  65. data/lib/rouge/demos/gherkin +17 -0
  66. data/lib/rouge/demos/glsl +14 -0
  67. data/lib/rouge/demos/go +7 -0
  68. data/lib/rouge/demos/gradle +10 -0
  69. data/lib/rouge/demos/graphql +17 -0
  70. data/lib/rouge/demos/groovy +9 -0
  71. data/lib/rouge/demos/hack +5 -0
  72. data/lib/rouge/demos/haml +5 -0
  73. data/lib/rouge/demos/handlebars +7 -0
  74. data/lib/rouge/demos/haskell +6 -0
  75. data/lib/rouge/demos/haxe +5 -0
  76. data/lib/rouge/demos/hcl +7 -0
  77. data/lib/rouge/demos/hocon +8 -0
  78. data/lib/rouge/demos/hql +5 -0
  79. data/lib/rouge/demos/html +8 -0
  80. data/lib/rouge/demos/http +14 -0
  81. data/lib/rouge/demos/hylang +10 -0
  82. data/lib/rouge/demos/idlang +8 -0
  83. data/lib/rouge/demos/igorpro +9 -0
  84. data/lib/rouge/demos/ini +4 -0
  85. data/lib/rouge/demos/io +11 -0
  86. data/lib/rouge/demos/irb +4 -0
  87. data/lib/rouge/demos/irb_output +2 -0
  88. data/lib/rouge/demos/isbl +4 -0
  89. data/lib/rouge/demos/java +5 -0
  90. data/lib/rouge/demos/javascript +1 -0
  91. data/lib/rouge/demos/jinja +9 -0
  92. data/lib/rouge/demos/jsl +3 -0
  93. data/lib/rouge/demos/json +1 -0
  94. data/lib/rouge/demos/json-doc +1 -0
  95. data/lib/rouge/demos/jsonnet +28 -0
  96. data/lib/rouge/demos/jsp +29 -0
  97. data/lib/rouge/demos/jsx +17 -0
  98. data/lib/rouge/demos/julia +11 -0
  99. data/lib/rouge/demos/kotlin +3 -0
  100. data/lib/rouge/demos/lasso +12 -0
  101. data/lib/rouge/demos/liquid +10 -0
  102. data/lib/rouge/demos/literate_coffeescript +3 -0
  103. data/lib/rouge/demos/literate_haskell +7 -0
  104. data/lib/rouge/demos/llvm +20 -0
  105. data/lib/rouge/demos/lua +12 -0
  106. data/lib/rouge/demos/lustre +6 -0
  107. data/lib/rouge/demos/lutin +18 -0
  108. data/lib/rouge/demos/m68k +16 -0
  109. data/lib/rouge/demos/magik +6 -0
  110. data/lib/rouge/demos/make +6 -0
  111. data/lib/rouge/demos/markdown +4 -0
  112. data/lib/rouge/demos/mason +22 -0
  113. data/lib/rouge/demos/mathematica +8 -0
  114. data/lib/rouge/demos/matlab +6 -0
  115. data/lib/rouge/demos/minizinc +23 -0
  116. data/lib/rouge/demos/moonscript +16 -0
  117. data/lib/rouge/demos/mosel +10 -0
  118. data/lib/rouge/demos/msgtrans +4 -0
  119. data/lib/rouge/demos/mxml +22 -0
  120. data/lib/rouge/demos/nasm +26 -0
  121. data/lib/rouge/demos/nesasm +11 -0
  122. data/lib/rouge/demos/nginx +5 -0
  123. data/lib/rouge/demos/nim +27 -0
  124. data/lib/rouge/demos/nix +19 -0
  125. data/lib/rouge/demos/objective_c +18 -0
  126. data/lib/rouge/demos/objective_cpp +17 -0
  127. data/lib/rouge/demos/ocaml +12 -0
  128. data/lib/rouge/demos/openedge +4 -0
  129. data/lib/rouge/demos/opentype_feature_file +6 -0
  130. data/lib/rouge/demos/pascal +14 -0
  131. data/lib/rouge/demos/perl +5 -0
  132. data/lib/rouge/demos/php +3 -0
  133. data/lib/rouge/demos/plaintext +1 -0
  134. data/lib/rouge/demos/plist +11 -0
  135. data/lib/rouge/demos/pony +17 -0
  136. data/lib/rouge/demos/powershell +13 -0
  137. data/lib/rouge/demos/praat +26 -0
  138. data/lib/rouge/demos/prolog +9 -0
  139. data/lib/rouge/demos/prometheus +9 -0
  140. data/lib/rouge/demos/properties +7 -0
  141. data/lib/rouge/demos/protobuf +5 -0
  142. data/lib/rouge/demos/puppet +6 -0
  143. data/lib/rouge/demos/python +6 -0
  144. data/lib/rouge/demos/q +8 -0
  145. data/lib/rouge/demos/qml +9 -0
  146. data/lib/rouge/demos/r +8 -0
  147. data/lib/rouge/demos/racket +24 -0
  148. data/lib/rouge/demos/reasonml +12 -0
  149. data/lib/rouge/demos/rego +8 -0
  150. data/lib/rouge/demos/robot_framework +27 -0
  151. data/lib/rouge/demos/ruby +9 -0
  152. data/lib/rouge/demos/rust +12 -0
  153. data/lib/rouge/demos/sas +13 -0
  154. data/lib/rouge/demos/sass +3 -0
  155. data/lib/rouge/demos/scala +3 -0
  156. data/lib/rouge/demos/scheme +4 -0
  157. data/lib/rouge/demos/scss +5 -0
  158. data/lib/rouge/demos/sed +4 -0
  159. data/lib/rouge/demos/shell +2 -0
  160. data/lib/rouge/demos/sieve +10 -0
  161. data/lib/rouge/demos/slice +10 -0
  162. data/lib/rouge/demos/slim +17 -0
  163. data/lib/rouge/demos/smalltalk +6 -0
  164. data/lib/rouge/demos/smarty +12 -0
  165. data/lib/rouge/demos/sml +4 -0
  166. data/lib/rouge/demos/solidity +13 -0
  167. data/lib/rouge/demos/sparql +6 -0
  168. data/lib/rouge/demos/sqf +14 -0
  169. data/lib/rouge/demos/sql +1 -0
  170. data/lib/rouge/demos/supercollider +11 -0
  171. data/lib/rouge/demos/swift +5 -0
  172. data/lib/rouge/demos/tap +5 -0
  173. data/lib/rouge/demos/tcl +1 -0
  174. data/lib/rouge/demos/terraform +16 -0
  175. data/lib/rouge/demos/tex +1 -0
  176. data/lib/rouge/demos/toml +9 -0
  177. data/lib/rouge/demos/tsx +17 -0
  178. data/lib/rouge/demos/ttcn3 +6 -0
  179. data/lib/rouge/demos/tulip +13 -0
  180. data/lib/rouge/demos/turtle +26 -0
  181. data/lib/rouge/demos/twig +9 -0
  182. data/lib/rouge/demos/typescript +1 -0
  183. data/lib/rouge/demos/vala +8 -0
  184. data/lib/rouge/demos/vb +4 -0
  185. data/lib/rouge/demos/vcl +12 -0
  186. data/lib/rouge/demos/verilog +27 -0
  187. data/lib/rouge/demos/vhdl +23 -0
  188. data/lib/rouge/demos/viml +14 -0
  189. data/lib/rouge/demos/vue +11 -0
  190. data/lib/rouge/demos/wollok +11 -0
  191. data/lib/rouge/demos/xml +2 -0
  192. data/lib/rouge/demos/xojo +14 -0
  193. data/lib/rouge/demos/xpath +2 -0
  194. data/lib/rouge/demos/xquery +22 -0
  195. data/lib/rouge/demos/yaml +4 -0
  196. data/lib/rouge/demos/yang +17 -0
  197. data/lib/rouge/formatter.rb +112 -0
  198. data/lib/rouge/formatters/html.rb +56 -0
  199. data/lib/rouge/formatters/html_inline.rb +31 -0
  200. data/lib/rouge/formatters/html_legacy.rb +45 -0
  201. data/lib/rouge/formatters/html_line_table.rb +53 -0
  202. data/lib/rouge/formatters/html_linewise.rb +23 -0
  203. data/lib/rouge/formatters/html_pygments.rb +18 -0
  204. data/lib/rouge/formatters/html_table.rb +51 -0
  205. data/lib/rouge/formatters/null.rb +20 -0
  206. data/lib/rouge/formatters/terminal256.rb +198 -0
  207. data/lib/rouge/formatters/terminal_truecolor.rb +37 -0
  208. data/lib/rouge/formatters/tex.rb +92 -0
  209. data/lib/rouge/guesser.rb +57 -0
  210. data/lib/rouge/guessers/disambiguation.rb +136 -0
  211. data/lib/rouge/guessers/filename.rb +27 -0
  212. data/lib/rouge/guessers/glob_mapping.rb +45 -0
  213. data/lib/rouge/guessers/mimetype.rb +16 -0
  214. data/lib/rouge/guessers/modeline.rb +46 -0
  215. data/lib/rouge/guessers/source.rb +31 -0
  216. data/lib/rouge/guessers/util.rb +34 -0
  217. data/lib/rouge/lexer.rb +517 -0
  218. data/lib/rouge/lexers/abap.rb +240 -0
  219. data/lib/rouge/lexers/actionscript.rb +196 -0
  220. data/lib/rouge/lexers/ada.rb +162 -0
  221. data/lib/rouge/lexers/apache.rb +69 -0
  222. data/lib/rouge/lexers/apache/keywords.rb +15 -0
  223. data/lib/rouge/lexers/apex.rb +126 -0
  224. data/lib/rouge/lexers/apiblueprint.rb +49 -0
  225. data/lib/rouge/lexers/apple_script.rb +370 -0
  226. data/lib/rouge/lexers/armasm.rb +145 -0
  227. data/lib/rouge/lexers/awk.rb +162 -0
  228. data/lib/rouge/lexers/batchfile.rb +164 -0
  229. data/lib/rouge/lexers/bbcbasic.rb +112 -0
  230. data/lib/rouge/lexers/biml.rb +43 -0
  231. data/lib/rouge/lexers/bpf.rb +118 -0
  232. data/lib/rouge/lexers/brainfuck.rb +53 -0
  233. data/lib/rouge/lexers/bsl.rb +82 -0
  234. data/lib/rouge/lexers/c.rb +190 -0
  235. data/lib/rouge/lexers/ceylon.rb +96 -0
  236. data/lib/rouge/lexers/cfscript.rb +154 -0
  237. data/lib/rouge/lexers/clean.rb +156 -0
  238. data/lib/rouge/lexers/clojure.rb +113 -0
  239. data/lib/rouge/lexers/cmake.rb +208 -0
  240. data/lib/rouge/lexers/cmhg.rb +34 -0
  241. data/lib/rouge/lexers/coffeescript.rb +215 -0
  242. data/lib/rouge/lexers/common_lisp.rb +346 -0
  243. data/lib/rouge/lexers/conf.rb +25 -0
  244. data/lib/rouge/lexers/console.rb +190 -0
  245. data/lib/rouge/lexers/coq.rb +191 -0
  246. data/lib/rouge/lexers/cpp.rb +89 -0
  247. data/lib/rouge/lexers/crystal.rb +430 -0
  248. data/lib/rouge/lexers/csharp.rb +114 -0
  249. data/lib/rouge/lexers/css.rb +274 -0
  250. data/lib/rouge/lexers/csvs.rb +44 -0
  251. data/lib/rouge/lexers/cuda.rb +35 -0
  252. data/lib/rouge/lexers/cypher.rb +108 -0
  253. data/lib/rouge/lexers/cython.rb +151 -0
  254. data/lib/rouge/lexers/d.rb +177 -0
  255. data/lib/rouge/lexers/dart.rb +105 -0
  256. data/lib/rouge/lexers/datastudio.rb +138 -0
  257. data/lib/rouge/lexers/diff.rb +37 -0
  258. data/lib/rouge/lexers/digdag.rb +70 -0
  259. data/lib/rouge/lexers/docker.rb +51 -0
  260. data/lib/rouge/lexers/dot.rb +69 -0
  261. data/lib/rouge/lexers/ecl.rb +175 -0
  262. data/lib/rouge/lexers/eex.rb +52 -0
  263. data/lib/rouge/lexers/eiffel.rb +66 -0
  264. data/lib/rouge/lexers/elixir.rb +149 -0
  265. data/lib/rouge/lexers/elm.rb +90 -0
  266. data/lib/rouge/lexers/epp.rb +51 -0
  267. data/lib/rouge/lexers/erb.rb +53 -0
  268. data/lib/rouge/lexers/erlang.rb +115 -0
  269. data/lib/rouge/lexers/escape.rb +58 -0
  270. data/lib/rouge/lexers/factor.rb +303 -0
  271. data/lib/rouge/lexers/fortran.rb +178 -0
  272. data/lib/rouge/lexers/freefem.rb +240 -0
  273. data/lib/rouge/lexers/fsharp.rb +120 -0
  274. data/lib/rouge/lexers/gdscript.rb +171 -0
  275. data/lib/rouge/lexers/ghc_cmm.rb +340 -0
  276. data/lib/rouge/lexers/ghc_core.rb +151 -0
  277. data/lib/rouge/lexers/gherkin.rb +140 -0
  278. data/lib/rouge/lexers/gherkin/keywords.rb +16 -0
  279. data/lib/rouge/lexers/glsl.rb +132 -0
  280. data/lib/rouge/lexers/go.rb +175 -0
  281. data/lib/rouge/lexers/gradle.rb +38 -0
  282. data/lib/rouge/lexers/graphql.rb +261 -0
  283. data/lib/rouge/lexers/groovy.rb +111 -0
  284. data/lib/rouge/lexers/hack.rb +49 -0
  285. data/lib/rouge/lexers/haml.rb +226 -0
  286. data/lib/rouge/lexers/handlebars.rb +91 -0
  287. data/lib/rouge/lexers/haskell.rb +199 -0
  288. data/lib/rouge/lexers/haxe.rb +246 -0
  289. data/lib/rouge/lexers/hcl.rb +163 -0
  290. data/lib/rouge/lexers/hocon.rb +86 -0
  291. data/lib/rouge/lexers/hql.rb +139 -0
  292. data/lib/rouge/lexers/html.rb +141 -0
  293. data/lib/rouge/lexers/http.rb +81 -0
  294. data/lib/rouge/lexers/hylang.rb +94 -0
  295. data/lib/rouge/lexers/idlang.rb +312 -0
  296. data/lib/rouge/lexers/igorpro.rb +664 -0
  297. data/lib/rouge/lexers/ini.rb +54 -0
  298. data/lib/rouge/lexers/io.rb +69 -0
  299. data/lib/rouge/lexers/irb.rb +67 -0
  300. data/lib/rouge/lexers/isbl.rb +97 -0
  301. data/lib/rouge/lexers/isbl/builtins.rb +17 -0
  302. data/lib/rouge/lexers/java.rb +91 -0
  303. data/lib/rouge/lexers/javascript.rb +279 -0
  304. data/lib/rouge/lexers/jinja.rb +154 -0
  305. data/lib/rouge/lexers/jsl.rb +55 -0
  306. data/lib/rouge/lexers/json.rb +72 -0
  307. data/lib/rouge/lexers/json_doc.rb +26 -0
  308. data/lib/rouge/lexers/jsonnet.rb +152 -0
  309. data/lib/rouge/lexers/jsp.rb +120 -0
  310. data/lib/rouge/lexers/jsx.rb +104 -0
  311. data/lib/rouge/lexers/julia.rb +290 -0
  312. data/lib/rouge/lexers/kotlin.rb +131 -0
  313. data/lib/rouge/lexers/lasso.rb +210 -0
  314. data/lib/rouge/lexers/lasso/keywords.rb +14 -0
  315. data/lib/rouge/lexers/liquid.rb +285 -0
  316. data/lib/rouge/lexers/literate_coffeescript.rb +34 -0
  317. data/lib/rouge/lexers/literate_haskell.rb +37 -0
  318. data/lib/rouge/lexers/llvm.rb +97 -0
  319. data/lib/rouge/lexers/lua.rb +164 -0
  320. data/lib/rouge/lexers/lua/builtins.rb +24 -0
  321. data/lib/rouge/lexers/lustre.rb +79 -0
  322. data/lib/rouge/lexers/lutin.rb +33 -0
  323. data/lib/rouge/lexers/m68k.rb +143 -0
  324. data/lib/rouge/lexers/magik.rb +127 -0
  325. data/lib/rouge/lexers/make.rb +135 -0
  326. data/lib/rouge/lexers/markdown.rb +182 -0
  327. data/lib/rouge/lexers/mason.rb +110 -0
  328. data/lib/rouge/lexers/mathematica.rb +96 -0
  329. data/lib/rouge/lexers/mathematica/builtins.rb +13 -0
  330. data/lib/rouge/lexers/matlab.rb +80 -0
  331. data/lib/rouge/lexers/matlab/builtins.rb +11 -0
  332. data/lib/rouge/lexers/minizinc.rb +87 -0
  333. data/lib/rouge/lexers/moonscript.rb +115 -0
  334. data/lib/rouge/lexers/mosel.rb +232 -0
  335. data/lib/rouge/lexers/msgtrans.rb +26 -0
  336. data/lib/rouge/lexers/mxml.rb +69 -0
  337. data/lib/rouge/lexers/nasm.rb +72 -0
  338. data/lib/rouge/lexers/nesasm.rb +78 -0
  339. data/lib/rouge/lexers/nginx.rb +72 -0
  340. data/lib/rouge/lexers/nim.rb +154 -0
  341. data/lib/rouge/lexers/nix.rb +211 -0
  342. data/lib/rouge/lexers/objective_c.rb +21 -0
  343. data/lib/rouge/lexers/objective_c/common.rb +184 -0
  344. data/lib/rouge/lexers/objective_cpp.rb +31 -0
  345. data/lib/rouge/lexers/ocaml.rb +65 -0
  346. data/lib/rouge/lexers/ocaml/common.rb +53 -0
  347. data/lib/rouge/lexers/openedge.rb +429 -0
  348. data/lib/rouge/lexers/opentype_feature_file.rb +113 -0
  349. data/lib/rouge/lexers/pascal.rb +67 -0
  350. data/lib/rouge/lexers/perl.rb +231 -0
  351. data/lib/rouge/lexers/php.rb +231 -0
  352. data/lib/rouge/lexers/php/builtins.rb +203 -0
  353. data/lib/rouge/lexers/plain_text.rb +27 -0
  354. data/lib/rouge/lexers/plist.rb +47 -0
  355. data/lib/rouge/lexers/pony.rb +94 -0
  356. data/lib/rouge/lexers/powershell.rb +230 -0
  357. data/lib/rouge/lexers/praat.rb +351 -0
  358. data/lib/rouge/lexers/prolog.rb +67 -0
  359. data/lib/rouge/lexers/prometheus.rb +123 -0
  360. data/lib/rouge/lexers/properties.rb +52 -0
  361. data/lib/rouge/lexers/protobuf.rb +71 -0
  362. data/lib/rouge/lexers/puppet.rb +129 -0
  363. data/lib/rouge/lexers/python.rb +257 -0
  364. data/lib/rouge/lexers/q.rb +126 -0
  365. data/lib/rouge/lexers/qml.rb +74 -0
  366. data/lib/rouge/lexers/r.rb +89 -0
  367. data/lib/rouge/lexers/racket.rb +568 -0
  368. data/lib/rouge/lexers/reasonml.rb +65 -0
  369. data/lib/rouge/lexers/rego.rb +45 -0
  370. data/lib/rouge/lexers/robot_framework.rb +249 -0
  371. data/lib/rouge/lexers/ruby.rb +454 -0
  372. data/lib/rouge/lexers/rust.rb +193 -0
  373. data/lib/rouge/lexers/sas.rb +563 -0
  374. data/lib/rouge/lexers/sass.rb +75 -0
  375. data/lib/rouge/lexers/sass/common.rb +181 -0
  376. data/lib/rouge/lexers/scala.rb +169 -0
  377. data/lib/rouge/lexers/scheme.rb +113 -0
  378. data/lib/rouge/lexers/scss.rb +35 -0
  379. data/lib/rouge/lexers/sed.rb +173 -0
  380. data/lib/rouge/lexers/shell.rb +201 -0
  381. data/lib/rouge/lexers/sieve.rb +97 -0
  382. data/lib/rouge/lexers/slice.rb +32 -0
  383. data/lib/rouge/lexers/slim.rb +229 -0
  384. data/lib/rouge/lexers/smalltalk.rb +117 -0
  385. data/lib/rouge/lexers/smarty.rb +81 -0
  386. data/lib/rouge/lexers/sml.rb +345 -0
  387. data/lib/rouge/lexers/solidity.rb +185 -0
  388. data/lib/rouge/lexers/sparql.rb +129 -0
  389. data/lib/rouge/lexers/sqf.rb +109 -0
  390. data/lib/rouge/lexers/sqf/commands.rb +15 -0
  391. data/lib/rouge/lexers/sql.rb +161 -0
  392. data/lib/rouge/lexers/supercollider.rb +116 -0
  393. data/lib/rouge/lexers/swift.rb +186 -0
  394. data/lib/rouge/lexers/tap.rb +89 -0
  395. data/lib/rouge/lexers/tcl.rb +193 -0
  396. data/lib/rouge/lexers/terraform.rb +128 -0
  397. data/lib/rouge/lexers/tex.rb +70 -0
  398. data/lib/rouge/lexers/toml.rb +106 -0
  399. data/lib/rouge/lexers/tsx.rb +20 -0
  400. data/lib/rouge/lexers/ttcn3.rb +119 -0
  401. data/lib/rouge/lexers/tulip.rb +108 -0
  402. data/lib/rouge/lexers/turtle.rb +61 -0
  403. data/lib/rouge/lexers/twig.rb +40 -0
  404. data/lib/rouge/lexers/typescript.rb +34 -0
  405. data/lib/rouge/lexers/typescript/common.rb +34 -0
  406. data/lib/rouge/lexers/vala.rb +78 -0
  407. data/lib/rouge/lexers/varnish.rb +168 -0
  408. data/lib/rouge/lexers/vb.rb +165 -0
  409. data/lib/rouge/lexers/verilog.rb +163 -0
  410. data/lib/rouge/lexers/vhdl.rb +98 -0
  411. data/lib/rouge/lexers/viml.rb +102 -0
  412. data/lib/rouge/lexers/viml/keywords.rb +14 -0
  413. data/lib/rouge/lexers/vue.rb +127 -0
  414. data/lib/rouge/lexers/wollok.rb +104 -0
  415. data/lib/rouge/lexers/xml.rb +54 -0
  416. data/lib/rouge/lexers/xojo.rb +61 -0
  417. data/lib/rouge/lexers/xpath.rb +332 -0
  418. data/lib/rouge/lexers/xquery.rb +145 -0
  419. data/lib/rouge/lexers/yaml.rb +376 -0
  420. data/lib/rouge/lexers/yang.rb +147 -0
  421. data/lib/rouge/plugins/redcarpet.rb +37 -0
  422. data/lib/rouge/regex_lexer.rb +443 -0
  423. data/lib/rouge/template_lexer.rb +21 -0
  424. data/lib/rouge/tex_theme_renderer.rb +132 -0
  425. data/lib/rouge/text_analyzer.rb +50 -0
  426. data/lib/rouge/theme.rb +218 -0
  427. data/lib/rouge/themes/base16.rb +131 -0
  428. data/lib/rouge/themes/bw.rb +41 -0
  429. data/lib/rouge/themes/colorful.rb +68 -0
  430. data/lib/rouge/themes/github.rb +72 -0
  431. data/lib/rouge/themes/gruvbox.rb +168 -0
  432. data/lib/rouge/themes/igor_pro.rb +21 -0
  433. data/lib/rouge/themes/magritte.rb +78 -0
  434. data/lib/rouge/themes/molokai.rb +83 -0
  435. data/lib/rouge/themes/monokai.rb +93 -0
  436. data/lib/rouge/themes/monokai_sublime.rb +93 -0
  437. data/lib/rouge/themes/pastie.rb +70 -0
  438. data/lib/rouge/themes/thankful_eyes.rb +75 -0
  439. data/lib/rouge/themes/tulip.rb +70 -0
  440. data/lib/rouge/token.rb +191 -0
  441. data/lib/rouge/util.rb +102 -0
  442. data/lib/rouge/version.rb +8 -0
  443. data/rouge.gemspec +26 -0
  444. metadata +491 -0
@@ -0,0 +1,131 @@
1
+ # -*- coding: utf-8 -*- #
2
+ # frozen_string_literal: true
3
+
4
+ module Rouge
5
+ module Lexers
6
+ class Kotlin < RegexLexer
7
+ # https://kotlinlang.org/docs/reference/grammar.html
8
+
9
+ title "Kotlin"
10
+ desc "Kotlin Programming Language (http://kotlinlang.org)"
11
+
12
+ tag 'kotlin'
13
+ filenames '*.kt', '*.kts'
14
+ mimetypes 'text/x-kotlin'
15
+
16
+ keywords = %w(
17
+ abstract annotation as break by catch class companion const
18
+ constructor continue crossinline do dynamic else enum
19
+ external false final finally for fun get if import in infix
20
+ inline inner interface internal is lateinit noinline null
21
+ object open operator out override package private protected
22
+ public reified return sealed set super suspend tailrec this
23
+ throw true try typealias typeof val var vararg when where
24
+ while yield
25
+ )
26
+
27
+ name_chars = %r'[-_\p{Lu}\p{Ll}\p{Lt}\p{Lm}\p{Nl}\p{Nd}\p{Pc}\p{Cf}\p{Mn}\p{Mc}]*'
28
+
29
+ class_name = %r'`?[\p{Lu}]#{name_chars}`?'
30
+ name = %r'`?[_\p{Lu}\p{Ll}\p{Lt}\p{Lm}\p{Nl}]#{name_chars}`?'
31
+
32
+ state :root do
33
+ rule %r'\b(companion)(\s+)(object)\b' do
34
+ groups Keyword, Text, Keyword
35
+ end
36
+ rule %r'\b(class|data\s+class|interface|object)(\s+)' do
37
+ groups Keyword::Declaration, Text
38
+ push :class
39
+ end
40
+ rule %r'\b(fun)(\s+)' do
41
+ groups Keyword, Text
42
+ push :function
43
+ end
44
+ rule %r'\b(package|import)(\s+)' do
45
+ groups Keyword, Text
46
+ push :package
47
+ end
48
+ rule %r'\b(val|var)(\s+)(\()' do
49
+ groups Keyword::Declaration, Text, Punctuation
50
+ push :destructure
51
+ end
52
+ rule %r'\b(val|var)(\s+)' do
53
+ groups Keyword::Declaration, Text
54
+ push :property
55
+ end
56
+ rule %r'(return|continue|break|this|super)(@#{name})?' do
57
+ groups Keyword, Name::Decorator
58
+ end
59
+ rule %r'\bfun\b', Keyword
60
+ rule %r'\b(?:#{keywords.join('|')})\b', Keyword
61
+ rule %r'^\s*\[.*?\]', Name::Attribute
62
+ rule %r'[^\S\n]+', Text
63
+ rule %r'\\\n', Text # line continuation
64
+ rule %r'//.*?$', Comment::Single
65
+ rule %r'/[*].*[*]/', Comment::Multiline # single line block comment
66
+ rule %r'/[*].*', Comment::Multiline, :comment # multiline block comment
67
+ rule %r'\n', Text
68
+ rule %r'::|!!|\?[:.]', Operator
69
+ rule %r"(\.\.)", Operator
70
+ rule %r'[~!%^&*()+=|\[\]:;,.<>/?-]', Punctuation
71
+ rule %r'[{}]', Punctuation
72
+ rule %r'@"(""|[^"])*"'m, Str
73
+ rule %r'""".*?"""'m, Str
74
+ rule %r'"(\\\\|\\"|[^"\n])*["\n]'m, Str
75
+ rule %r"'\\.'|'[^\\]'", Str::Char
76
+ rule %r"[0-9](\.[0-9]+)?([eE][+-][0-9]+)?[flFL]?|0[xX][0-9a-fA-F]+[Ll]?", Num
77
+ rule %r'(@#{class_name})', Name::Decorator
78
+ rule %r'(#{class_name})(<)' do
79
+ groups Name::Class, Punctuation
80
+ push :generic_parameters
81
+ end
82
+ rule class_name, Name::Class
83
+ rule %r'(#{name})(?=\s*[({])', Name::Function
84
+ rule %r'(#{name})@', Name::Decorator # label
85
+ rule name, Name
86
+ end
87
+
88
+ state :package do
89
+ rule %r'\S+', Name::Namespace, :pop!
90
+ end
91
+
92
+ state :class do
93
+ rule class_name, Name::Class, :pop!
94
+ end
95
+
96
+ state :function do
97
+ rule %r'(<)', Punctuation, :generic_parameters
98
+ rule %r'(\s+)', Text
99
+ rule %r'(#{class_name})(\.)' do
100
+ groups Name::Class, Punctuation
101
+ end
102
+ rule name, Name::Function, :pop!
103
+ end
104
+
105
+ state :generic_parameters do
106
+ rule class_name, Name::Class
107
+ rule %r'(<)', Punctuation, :generic_parameters
108
+ rule %r'(,)', Punctuation
109
+ rule %r'(\s+)', Text
110
+ rule %r'(>)', Punctuation, :pop!
111
+ end
112
+
113
+ state :property do
114
+ rule name, Name::Property, :pop!
115
+ end
116
+
117
+ state :destructure do
118
+ rule %r'(,)', Punctuation
119
+ rule %r'(\))', Punctuation, :pop!
120
+ rule %r'(\s+)', Text
121
+ rule name, Name::Property
122
+ end
123
+
124
+ state :comment do
125
+ rule %r'\s*/[*].*', Comment::Multiline, :comment
126
+ rule %r'.*[*]/', Comment::Multiline, :pop!
127
+ rule %r'.*', Comment::Multiline
128
+ end
129
+ end
130
+ end
131
+ end
@@ -0,0 +1,210 @@
1
+ # -*- coding: utf-8 -*- #
2
+ # frozen_string_literal: true
3
+
4
+ require 'yaml'
5
+
6
+ module Rouge
7
+ module Lexers
8
+ class Lasso < TemplateLexer
9
+ title "Lasso"
10
+ desc "The Lasso programming language (lassosoft.com)"
11
+ tag 'lasso'
12
+ aliases 'lassoscript'
13
+ filenames '*.lasso', '*.lasso[89]'
14
+ mimetypes 'text/x-lasso', 'text/html+lasso', 'application/x-httpd-lasso'
15
+
16
+ option :start_inline, 'Whether to start inline instead of requiring <?lasso or ['
17
+
18
+ def self.detect?(text)
19
+ return true if text.shebang?('lasso9')
20
+ return true if text =~ /\A.*?<\?(lasso(script)?|=)/
21
+ end
22
+
23
+ def initialize(*)
24
+ super
25
+
26
+ @start_inline = bool_option(:start_inline)
27
+ end
28
+
29
+ def start_inline?
30
+ @start_inline
31
+ end
32
+
33
+ start do
34
+ push :lasso if start_inline?
35
+ end
36
+
37
+ # self-modifying method that loads the keywords file
38
+ def self.keywords
39
+ load File.join(Lexers::BASE_DIR, 'lasso/keywords.rb')
40
+ keywords
41
+ end
42
+
43
+ id = /[a-z_][\w.]*/i
44
+
45
+ state :root do
46
+ rule %r/^#![ \S]+lasso9\b/, Comment::Preproc, :lasso
47
+ rule(/(?=\[|<)/) { push :delimiters }
48
+ rule %r/\s+/, Text::Whitespace
49
+ rule(//) { push :delimiters; push :lassofile }
50
+ end
51
+
52
+ state :delimiters do
53
+ rule %r/\[no_square_brackets\]/, Comment::Preproc, :nosquarebrackets
54
+ rule %r/\[noprocess\]/, Comment::Preproc, :noprocess
55
+ rule %r/\[/, Comment::Preproc, :squarebrackets
56
+ rule %r/<\?(lasso(script)?|=)/i, Comment::Preproc, :anglebrackets
57
+ rule(/([^\[<]|<!--.*?-->|<(script|style).*?\2>|<(?!\?(lasso(script)?|=)))+/im) { delegate parent }
58
+ end
59
+
60
+ state :nosquarebrackets do
61
+ rule %r/\[noprocess\]/, Comment::Preproc, :noprocess
62
+ rule %r/<\?(lasso(script)?|=)/i, Comment::Preproc, :anglebrackets
63
+ rule(/([^\[<]|<!--.*?-->|<(script|style).*?\2>|<(?!\?(lasso(script)?|=))|\[(?!noprocess))+/im) { delegate parent }
64
+ end
65
+
66
+ state :noprocess do
67
+ rule %r(\[/noprocess\]), Comment::Preproc, :pop!
68
+ rule(%r(([^\[]|\[(?!/noprocess))+)i) { delegate parent }
69
+ end
70
+
71
+ state :squarebrackets do
72
+ rule %r/\]/, Comment::Preproc, :pop!
73
+ mixin :lasso
74
+ end
75
+
76
+ state :anglebrackets do
77
+ rule %r/\?>/, Comment::Preproc, :pop!
78
+ mixin :lasso
79
+ end
80
+
81
+ state :lassofile do
82
+ rule %r/\]|\?>/, Comment::Preproc, :pop!
83
+ mixin :lasso
84
+ end
85
+
86
+ state :whitespacecomments do
87
+ rule %r/\s+/, Text
88
+ rule %r(//.*?\n), Comment::Single
89
+ rule %r(/\*\*!.*?\*/)m, Comment::Doc
90
+ rule %r(/\*.*?\*/)m, Comment::Multiline
91
+ end
92
+
93
+ state :lasso do
94
+ mixin :whitespacecomments
95
+
96
+ # literals
97
+ rule %r/\d*\.\d+(e[+-]?\d+)?/i, Num::Float
98
+ rule %r/0x[\da-f]+/i, Num::Hex
99
+ rule %r/\d+/, Num::Integer
100
+ rule %r/(infinity|NaN)\b/i, Num
101
+ rule %r/'[^'\\]*(\\.[^'\\]*)*'/m, Str::Single
102
+ rule %r/"[^"\\]*(\\.[^"\\]*)*"/m, Str::Double
103
+ rule %r/`[^`]*`/m, Str::Backtick
104
+
105
+ # names
106
+ rule %r/\$#{id}/, Name::Variable
107
+ rule %r/#(#{id}|\d+\b)/, Name::Variable::Instance
108
+ rule %r/(\.\s*)('#{id}')/ do
109
+ groups Name::Builtin::Pseudo, Name::Variable::Class
110
+ end
111
+ rule %r/(self)(\s*->\s*)('#{id}')/i do
112
+ groups Name::Builtin::Pseudo, Operator, Name::Variable::Class
113
+ end
114
+ rule %r/(\.\.?\s*)(#{id}(=(?!=))?)/ do
115
+ groups Name::Builtin::Pseudo, Name::Other
116
+ end
117
+ rule %r/(->\\?\s*|&\s*)(#{id}(=(?!=))?)/ do
118
+ groups Operator, Name::Other
119
+ end
120
+ rule %r/(?<!->)(self|inherited|currentcapture|givenblock)\b/i, Name::Builtin::Pseudo
121
+ rule %r/-(?!infinity)#{id}/i, Name::Attribute
122
+ rule %r/::\s*#{id}/, Name::Label
123
+ rule %r/error_((code|msg)_\w+|adderror|columnrestriction|databaseconnectionunavailable|databasetimeout|deleteerror|fieldrestriction|filenotfound|invaliddatabase|invalidpassword|invalidusername|modulenotfound|noerror|nopermission|outofmemory|reqcolumnmissing|reqfieldmissing|requiredcolumnmissing|requiredfieldmissing|updateerror)/i, Name::Exception
124
+
125
+ # definitions
126
+ rule %r/(define)(\s+)(#{id})(\s*=>\s*)(type|trait|thread)\b/i do
127
+ groups Keyword::Declaration, Text, Name::Class, Operator, Keyword
128
+ end
129
+ rule %r((define)(\s+)(#{id})(\s*->\s*)(#{id}=?|[-+*/%]))i do
130
+ groups Keyword::Declaration, Text, Name::Class, Operator, Name::Function
131
+ push :signature
132
+ end
133
+ rule %r/(define)(\s+)(#{id})/i do
134
+ groups Keyword::Declaration, Text, Name::Function
135
+ push :signature
136
+ end
137
+ rule %r((public|protected|private|provide)(\s+)((#{id}=?|[-+*/%])(?=\s*\()))i do
138
+ groups Keyword, Text, Name::Function
139
+ push :signature
140
+ end
141
+ rule %r/(public|protected|private|provide)(\s+)(#{id})/i do
142
+ groups Keyword, Text, Name::Function
143
+ end
144
+
145
+ # keywords
146
+ rule %r/(true|false|none|minimal|full|all|void)\b/i, Keyword::Constant
147
+ rule %r/(local|var|variable|global|data(?=\s))\b/i, Keyword::Declaration
148
+ rule %r/(array|date|decimal|duration|integer|map|pair|string|tag|xml|null|boolean|bytes|keyword|list|locale|queue|set|stack|staticarray)\b/i, Keyword::Type
149
+ rule %r/(#{id})(\s+)(in)\b/i do
150
+ groups Name, Text, Keyword
151
+ end
152
+ rule %r/(let|into)(\s+)(#{id})/i do
153
+ groups Keyword, Text, Name
154
+ end
155
+
156
+ # other
157
+ rule %r/,/, Punctuation, :commamember
158
+ rule %r/(and|or|not)\b/i, Operator::Word
159
+ rule %r/(#{id})(\s*::\s*#{id})?(\s*=(?!=|>))/ do
160
+ groups Name, Name::Label, Operator
161
+ end
162
+
163
+ rule %r((/?)([\w.]+)) do |m|
164
+ name = m[2].downcase
165
+
166
+ if m[1] != ''
167
+ token Punctuation, m[1]
168
+ end
169
+
170
+ if name == 'namespace_using'
171
+ token Keyword::Namespace, m[2]
172
+ elsif self.class.keywords[:keywords].include? name
173
+ token Keyword, m[2]
174
+ elsif self.class.keywords[:types_traits].include? name
175
+ token Name::Builtin, m[2]
176
+ else
177
+ token Name::Other, m[2]
178
+ end
179
+ end
180
+
181
+ rule %r/(=)(n?bw|n?ew|n?cn|lte?|gte?|n?eq|n?rx|ft)\b/i do
182
+ groups Operator, Operator::Word
183
+ end
184
+ rule %r(:=|[-+*/%=<>&|!?\\]+), Operator
185
+ rule %r/[{}():;,@^]/, Punctuation
186
+ end
187
+
188
+ state :signature do
189
+ rule %r/\=>/, Operator, :pop!
190
+ rule %r/\)/, Punctuation, :pop!
191
+ rule %r/[(,]/, Punctuation, :parameter
192
+ mixin :lasso
193
+ end
194
+
195
+ state :parameter do
196
+ rule %r/\)/, Punctuation, :pop!
197
+ rule %r/-?#{id}/, Name::Attribute, :pop!
198
+ rule %r/\.\.\./, Name::Builtin::Pseudo
199
+ mixin :lasso
200
+ end
201
+
202
+ state :commamember do
203
+ rule %r((#{id}=?|[-+*/%])(?=\s*(\(([^()]*\([^()]*\))*[^\)]*\)\s*)?(::[\w.\s]+)?=>)), Name::Function, :signature
204
+ mixin :whitespacecomments
205
+ rule %r//, Text, :pop!
206
+ end
207
+
208
+ end
209
+ end
210
+ end
@@ -0,0 +1,14 @@
1
+ # -*- coding: utf-8 -*- #
2
+ # frozen_string_literal: true
3
+
4
+ # automatically generated by `rake builtins:lasso`
5
+ module Rouge
6
+ module Lexers
7
+ def Lasso.keywords
8
+ @keywords ||= {}.tap do |h|
9
+ h[:keywords] = Set.new ["cache", "database_names", "database_schemanames", "database_tablenames", "define_tag", "define_type", "email_batch", "encode_set", "html_comment", "handle", "handle_error", "header", "if", "inline", "iterate", "ljax_target", "link", "link_currentaction", "link_currentgroup", "link_currentrecord", "link_detail", "link_firstgroup", "link_firstrecord", "link_lastgroup", "link_lastrecord", "link_nextgroup", "link_nextrecord", "link_prevgroup", "link_prevrecord", "log", "loop", "namespace_using", "output_none", "portal", "private", "protect", "records", "referer", "referrer", "repeating", "resultset", "rows", "search_args", "search_arguments", "select", "sort_args", "sort_arguments", "thread_atomic", "value_list", "while", "abort", "case", "else", "fail_if", "fail_ifnot", "fail", "if_empty", "if_false", "if_null", "if_true", "loop_abort", "loop_continue", "loop_count", "params", "params_up", "return", "return_value", "run_children", "soap_definetag", "soap_lastrequest", "soap_lastresponse", "tag_name", "ascending", "average", "by", "define", "descending", "do", "equals", "frozen", "group", "handle_failure", "import", "in", "into", "join", "let", "match", "max", "min", "on", "order", "parent", "protected", "provide", "public", "require", "returnhome", "skip", "split_thread", "sum", "take", "thread", "to", "trait", "type", "where", "with", "yield", "yieldhome"]
10
+ h[:types_traits] = Set.new ["atbegin", "bson_iter", "bson", "bytes_document_body", "cache_server_element", "cache_server", "capture", "client_address", "client_ip", "component_container", "component_render_state", "component", "curl", "curltoken", "currency", "custom", "data_document", "database_registry", "dateandtime", "dbgp_packet", "dbgp_server", "debugging_stack", "delve", "dir", "dirdesc", "dns_response", "document_base", "document_body", "document_header", "dsinfo", "eacher", "email_compose", "email_parse", "email_pop", "email_queue_impl_base", "email_queue_impl", "email_smtp", "email_stage_impl_base", "email_stage_impl", "fastcgi_each_fcgi_param", "fastcgi_server", "fcgi_record", "fcgi_request", "file", "filedesc", "filemaker_datasource", "generateforeachkeyed", "generateforeachunkeyed", "generateseries", "hash_map", "html_atomic_element", "html_attr", "html_base", "html_binary", "html_br", "html_cdata", "html_container_element", "html_div", "html_document_body", "html_document_head", "html_eol", "html_fieldset", "html_form", "html_h1", "html_h2", "html_h3", "html_h4", "html_h5", "html_h6", "html_hr", "html_img", "html_input", "html_json", "html_label", "html_legend", "html_link", "html_meta", "html_object", "html_option", "html_raw", "html_script", "html_select", "html_span", "html_style", "html_table", "html_td", "html_text", "html_th", "html_tr", "http_document_header", "http_document", "http_error", "http_header_field", "http_server_connection_handler_globals", "http_server_connection_handler", "http_server_request_logger_thread", "http_server_web_connection", "http_server", "image", "include_cache", "inline_type", "java_jnienv", "jbyte", "jbytearray", "jchar", "jchararray", "jfieldid", "jfloat", "jint", "jmethodid", "jobject", "jshort", "json_decode", "json_encode", "json_literal", "json_object", "lassoapp_compiledsrc_appsource", "lassoapp_compiledsrc_fileresource", "lassoapp_content_rep_halt", "lassoapp_dirsrc_appsource", "lassoapp_dirsrc_fileresource", "lassoapp_installer", "lassoapp_livesrc_appsource", "lassoapp_livesrc_fileresource", "lassoapp_long_expiring_bytes", "lassoapp_manualsrc_appsource", "lassoapp_zip_file_server", "lassoapp_zipsrc_appsource", "lassoapp_zipsrc_fileresource", "ldap", "library_thread_loader", "list_node", "log_impl_base", "log_impl", "magick_image", "map_node", "memberstream", "memory_session_driver_impl_entry", "memory_session_driver_impl", "memory_session_driver", "mime_reader", "mongo_client", "mongo_collection", "mongo_cursor", "mustache_ctx", "mysql_session_driver_impl", "mysql_session_driver", "net_named_pipe", "net_tcp_ssl", "net_tcp", "net_udp_packet", "net_udp", "odbc_session_driver_impl", "odbc_session_driver", "opaque", "os_process", "pair_compare", "pairup", "pdf_barcode", "pdf_chunk", "pdf_color", "pdf_doc", "pdf_font", "pdf_hyphenator", "pdf_image", "pdf_list", "pdf_paragraph", "pdf_phrase", "pdf_read", "pdf_table", "pdf_text", "pdf_typebase", "percent", "portal_impl", "queriable_groupby", "queriable_grouping", "queriable_groupjoin", "queriable_join", "queriable_orderby", "queriable_orderbydescending", "queriable_select", "queriable_selectmany", "queriable_skip", "queriable_take", "queriable_thenby", "queriable_thenbydescending", "queriable_where", "raw_document_body", "regexp", "repeat", "scientific", "security_registry", "serialization_element", "serialization_object_identity_compare", "serialization_reader", "serialization_writer_ref", "serialization_writer_standin", "serialization_writer", "session_delete_expired_thread", "signature", "sourcefile", "sqlite_column", "sqlite_currentrow", "sqlite_db", "sqlite_results", "sqlite_session_driver_impl_entry", "sqlite_session_driver_impl", "sqlite_session_driver", "sqlite_table", "sqlite3_stmt", "sqlite3", "sys_process", "text_document", "tie", "timeonly", "tree_base", "tree_node", "tree_nullnode", "ucal", "usgcpu", "usgvm", "web_error_atend", "web_node_base", "web_node_content_representation_css_specialized", "web_node_content_representation_html_specialized", "web_node_content_representation_js_specialized", "web_node_content_representation_xhr_container", "web_node_echo", "web_node_root", "web_request_impl", "web_request", "web_response_impl", "web_response", "web_router", "websocket_handler", "worker_pool", "xml_attr", "xml_cdatasection", "xml_characterdata", "xml_comment", "xml_document", "xml_documentfragment", "xml_documenttype", "xml_domimplementation", "xml_element", "xml_entity", "xml_entityreference", "xml_namednodemap_attr", "xml_namednodemap_ht", "xml_namednodemap", "xml_node", "xml_nodelist", "xml_notation", "xml_processinginstruction", "xml_text", "xmlstream", "zip_file_impl", "zip_file", "zip_impl", "zip", "any", "formattingbase", "html_attributed", "html_element_coreattrs", "html_element_eventsattrs", "html_element_i18nattrs", "lassoapp_capabilities", "lassoapp_resource", "lassoapp_source", "queriable_asstring", "session_driver", "trait_array", "trait_asstring", "trait_backcontractible", "trait_backended", "trait_backexpandable", "trait_close", "trait_contractible", "trait_decompose_assignment", "trait_doubleended", "trait_each_sub", "trait_encodeurl", "trait_endedfullymutable", "trait_expandable", "trait_file", "trait_finite", "trait_finiteforeach", "trait_foreach", "trait_foreachtextelement", "trait_frontcontractible", "trait_frontended", "trait_frontexpandable", "trait_fullymutable", "trait_generator", "trait_generatorcentric", "trait_hashable", "trait_json_serialize", "trait_keyed", "trait_keyedfinite", "trait_keyedforeach", "trait_keyedmutable", "trait_list", "trait_map", "trait_net", "trait_pathcomponents", "trait_positionallykeyed", "trait_positionallysearchable", "trait_queriable", "trait_queriablelambda", "trait_readbytes", "trait_readstring", "trait_scalar", "trait_searchable", "trait_serializable", "trait_setencoding", "trait_setoperations", "trait_stack", "trait_treenode", "trait_writebytes", "trait_writestring", "trait_xml_elementcompat", "trait_xml_nodecompat", "web_connection", "web_node_container", "web_node_content_css_specialized", "web_node_content_document", "web_node_content_html_specialized", "web_node_content_js_specialized", "web_node_content_json_specialized", "web_node_content_representation", "web_node_content", "web_node_postable", "web_node"]
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,285 @@
1
+ # -*- coding: utf-8 -*- #
2
+ # frozen_string_literal: true
3
+
4
+ module Rouge
5
+ module Lexers
6
+ class Liquid < RegexLexer
7
+ title "Liquid"
8
+ desc 'Liquid is a templating engine for Ruby (liquidmarkup.org)'
9
+ tag 'liquid'
10
+ filenames '*.liquid'
11
+
12
+ state :root do
13
+ rule %r/[^\{]+/, Text
14
+
15
+ rule %r/(\{%-?)(\s*)/ do
16
+ groups Punctuation, Text::Whitespace
17
+ push :tag_or_block
18
+ end
19
+
20
+ rule %r/(\{\{-?)(\s*)/ do
21
+ groups Punctuation, Text::Whitespace
22
+ push :output
23
+ end
24
+
25
+ rule %r/\{/, Text
26
+ end
27
+
28
+ state :tag_or_block do
29
+ # builtin logic blocks
30
+ rule %r/(if|elsif|unless|case)\b/, Keyword::Reserved, :condition
31
+ rule %r/(when)\b/, Keyword::Reserved, :when
32
+
33
+ rule %r/(else)(\s*)(-?%\})/ do
34
+ groups Keyword::Reserved, Text::Whitespace, Punctuation
35
+ pop!
36
+ end
37
+
38
+ # other builtin blocks
39
+ rule %r/(capture|(?:in|de)crement)(\s+)([^\s%]+)(\s*)(-?%\})/ do
40
+ groups Name::Tag, Text::Whitespace, Name::Variable, Text::Whitespace, Punctuation
41
+ pop!
42
+ end
43
+
44
+ rule %r/(comment)(\s*)(-?%\})/ do
45
+ groups Name::Tag, Text::Whitespace, Punctuation
46
+ push :comment
47
+ end
48
+
49
+ rule %r/(raw)(\s*)(-?%\})/ do
50
+ groups Name::Tag, Text::Whitespace, Punctuation
51
+ push :raw
52
+ end
53
+
54
+ # end of block
55
+ rule %r/(end(?:if|unless|case))(\s*)(-?%\})/ do
56
+ groups Keyword::Reserved, Text::Whitespace, Punctuation
57
+ pop!
58
+ end
59
+
60
+ rule %r/(end(?:[^\s%]+))(\s*)(-?%\})/ do
61
+ groups Name::Tag, Text::Whitespace, Punctuation
62
+ pop!
63
+ end
64
+
65
+ # builtin tags
66
+ rule %r/(assign|echo)\b/, Name::Tag, :assign
67
+ rule %r/(include|render)\b/, Name::Tag, :include
68
+
69
+ rule %r/(cycle)(\s+)(?:([^\s:]*)(\s*)(:))?(\s*)/ do |m|
70
+ token_class = case m[3]
71
+ when %r/'[^']*'/ then Str::Single
72
+ when %r/"[^"]*"/ then Str::Double
73
+ else
74
+ Name::Attribute
75
+ end
76
+
77
+ groups Name::Tag, Text::Whitespace, token_class,
78
+ Text::Whitespace, Punctuation, Text::Whitespace
79
+
80
+ push :variable_tag_markup
81
+ end
82
+
83
+ # iteration
84
+ rule %r/
85
+ (for|tablerow)(\s+)
86
+ ([\w-]+)(\s+)
87
+ (in)(\s+)
88
+ (
89
+ (?: [^\s%,\|'"] | (?:"[^"]*"|'[^']*') )+
90
+ )(\s*)
91
+ /x do |m|
92
+ groups Name::Tag, Text::Whitespace, Name::Variable, Text::Whitespace,
93
+ Name::Tag, Text::Whitespace
94
+
95
+ token_class = case m[7]
96
+ when %r/'[^']*'/ then Str::Single
97
+ when %r/"[^"]*"/ then Str::Double
98
+ else
99
+ Name::Variable
100
+ end
101
+ token token_class, m[7]
102
+ token Text::Whitespace, m[8]
103
+ push :tag_markup
104
+ end
105
+
106
+ # other tags or blocks
107
+ rule %r/([^\s%]+)(\s*)/ do
108
+ groups Name::Tag, Text::Whitespace
109
+ push :tag_markup
110
+ end
111
+ end
112
+
113
+ state :output do
114
+ rule %r/(\|)(\s*)([a-zA-Z_][^\s}\|:]*)/ do
115
+ groups Punctuation, Text::Whitespace, Name::Function
116
+ push :filters
117
+ end
118
+
119
+ mixin :end_of_tag
120
+ mixin :generic
121
+ end
122
+
123
+ state :filters do
124
+ rule %r/(\|)(\s*)([a-zA-Z_][^\s%}\|:]*)/ do
125
+ groups Punctuation, Text::Whitespace, Name::Function
126
+ end
127
+
128
+ mixin :end_of_tag
129
+ mixin :end_of_block
130
+ mixin :variable_param_markup
131
+ end
132
+
133
+ state :condition do
134
+ rule %r/([=!]=|[<>]=?)/, Operator
135
+ rule %r/(and|or|contains)\b/, Operator::Word
136
+
137
+ mixin :end_of_block
138
+ mixin :generic
139
+ end
140
+
141
+ state :when do
142
+ mixin :end_of_block
143
+ mixin :generic
144
+ end
145
+
146
+ state :end_of_tag do
147
+ rule(/-?\}\}/) { token Punctuation; reset_stack }
148
+ end
149
+
150
+ state :end_of_block do
151
+ rule(/-?%\}/) { token Punctuation; reset_stack }
152
+ end
153
+
154
+ # states for unknown markup
155
+ state :param_markup do
156
+ mixin :whitespace
157
+ mixin :keyword
158
+ mixin :string
159
+ mixin :number
160
+
161
+ rule %r/([^\s=:]+)(\s*)(=|:)/ do
162
+ groups Name::Attribute, Text::Whitespace, Operator
163
+ end
164
+
165
+ rule %r/[,:]/, Punctuation
166
+ end
167
+
168
+ state :default_param_markup do
169
+ mixin :param_markup
170
+
171
+ rule %r/\S+/, Text
172
+ end
173
+
174
+ state :variable_param_markup do
175
+ mixin :param_markup
176
+ mixin :variable
177
+
178
+ rule %r/\S+/, Text
179
+ end
180
+
181
+ state :tag_markup do
182
+ rule %r/(reversed)\b/, Name::Attribute
183
+
184
+ mixin :end_of_block
185
+ mixin :default_param_markup
186
+ end
187
+
188
+ state :variable_tag_markup do
189
+ mixin :end_of_block
190
+ mixin :variable_param_markup
191
+ end
192
+
193
+ # states for different values types
194
+ state :keyword do
195
+ rule %r/(false|true|nil)\b/, Keyword::Constant
196
+ end
197
+
198
+ state :variable do
199
+ rule %r/(empty|blank|forloop\.[^\s%}\|:]+)\b/, Name::Builtin
200
+ rule %r/\.(?=\w)|\[|\]/, Punctuation
201
+ rule %r/(first|last|size)\b/, Name::Function
202
+ rule %r/[a-zA-Z_][\w-]*\??/, Name::Variable
203
+ end
204
+
205
+ state :string do
206
+ rule %r/'[^']*'/, Str::Single
207
+ rule %r/"[^"]*"/, Str::Double
208
+ end
209
+
210
+ state :number do
211
+ rule %r/-/, Operator
212
+ rule %r/\d+\.\d+/, Num::Float
213
+ rule %r/\d+/, Num::Integer
214
+ end
215
+
216
+ state :generic do
217
+ mixin :whitespace
218
+ mixin :keyword
219
+ mixin :string
220
+ mixin :number
221
+ mixin :variable
222
+ end
223
+
224
+ state :whitespace do
225
+ rule %r/[ \t]+/, Text::Whitespace
226
+ end
227
+
228
+ state :comment do
229
+ rule %r/[^\{]+/, Comment
230
+
231
+ rule %r/(\{%-?)(\s*)(endcomment)(\s*)(-?%\})/ do
232
+ groups Punctuation, Text::Whitespace, Name::Tag, Text::Whitespace, Punctuation
233
+ reset_stack
234
+ end
235
+
236
+ rule %r/\{/, Comment
237
+ end
238
+
239
+ state :raw do
240
+ rule %r/[^\{]+/, Text
241
+
242
+ rule %r/(\{%-?)(\s*)(endraw)(\s*)(-?%\})/ do
243
+ groups Punctuation, Text::Whitespace, Name::Tag, Text::Whitespace, Punctuation
244
+ reset_stack
245
+ end
246
+
247
+ rule %r/\{/, Text
248
+ end
249
+
250
+ state :assign do
251
+ rule %r/=/, Operator
252
+
253
+ rule %r/(\|)(\s*)([a-zA-Z_][^\s%\|:]*)/ do
254
+ groups Punctuation, Text::Whitespace, Name::Function
255
+ push :filters
256
+ end
257
+
258
+ mixin :end_of_block
259
+ mixin :generic
260
+ end
261
+
262
+ state :include do
263
+ rule %r/(\{\{-?)(\s*)/ do
264
+ groups Punctuation, Text::Whitespace
265
+ push :output_embed
266
+ end
267
+
268
+ rule %r/(with|for)\b/, Name::Tag
269
+ rule %r/[\/\w-]+(\.[\w-]+)+\b/, Text
270
+
271
+ mixin :variable_tag_markup
272
+ end
273
+
274
+ state :output_embed do
275
+ rule %r/(\|)(\s*)([a-zA-Z_][^\s}\|:]*)/ do
276
+ groups Punctuation, Text::Whitespace, Name::Function
277
+ end
278
+
279
+ rule %r/-?\}\}/, Punctuation, :pop!
280
+
281
+ mixin :variable_param_markup
282
+ end
283
+ end
284
+ end
285
+ end