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,21 @@
1
+ # -*- coding: utf-8 -*- #
2
+ # frozen_string_literal: true
3
+
4
+ module Rouge
5
+ # @abstract
6
+ # A TemplateLexer is one that accepts a :parent option, to specify
7
+ # which language is being templated. The lexer class can specify its
8
+ # own default for the parent lexer, which is otherwise defaulted to
9
+ # HTML.
10
+ class TemplateLexer < RegexLexer
11
+ # the parent lexer - the one being templated.
12
+ def parent
13
+ return @parent if instance_variable_defined? :@parent
14
+ @parent = lexer_option(:parent) || Lexers::HTML.new(@options)
15
+ end
16
+
17
+ option :parent, "the parent language (default: html)"
18
+
19
+ start { parent.reset! }
20
+ end
21
+ end
@@ -0,0 +1,132 @@
1
+ # -*- coding: utf-8 -*- #
2
+ # frozen_string_literal: true
3
+
4
+ module Rouge
5
+ class TexThemeRenderer
6
+ def initialize(theme, opts={})
7
+ @theme = theme
8
+ @prefix = opts.fetch(:prefix) { 'RG' }
9
+ end
10
+
11
+ # Our general strategy is this:
12
+ #
13
+ # * First, define the \RG{tokname}{content} command, which will
14
+ # expand into \RG@tok@tokname{content}. We use \csname...\endcsname
15
+ # to interpolate into a command.
16
+ #
17
+ # * Define the default RG* environment, which will enclose the whole
18
+ # thing. By default this will simply set \ttfamily (select monospace font)
19
+ # but it can be overridden with \renewcommand by the user to be
20
+ # any other formatting.
21
+ #
22
+ # * Define all the colors using xcolors \definecolor command. First we define
23
+ # every palette color with a name such as RG@palette@themneame@colorname.
24
+ # Then we find all foreground and background colors that have literal html
25
+ # colors embedded in them and define them with names such as
26
+ # RG@palette@themename@000000. While html allows three-letter colors such
27
+ # as #FFF, xcolor requires all six characters to be present, so we make sure
28
+ # to normalize that as well as the case convention in #inline_name.
29
+ #
30
+ # * Define the token commands RG@tok@xx. These will take the content as the
31
+ # argument and format it according to the theme, referring to the color
32
+ # in the palette.
33
+ def render(&b)
34
+ yield <<'END'.gsub('RG', @prefix)
35
+ \makeatletter
36
+ \def\RG#1#2{\csname RG@tok@#1\endcsname{#2}}%
37
+ \newenvironment{RG*}{\ttfamily}{\relax}%
38
+ END
39
+
40
+ base = @theme.class.base_style
41
+ yield "\\definecolor{#{@prefix}@fgcolor}{HTML}{#{inline_name(base.fg || '#000000')}}"
42
+ yield "\\definecolor{#{@prefix}@bgcolor}{HTML}{#{inline_name(base.bg || '#FFFFFF')}}"
43
+
44
+ render_palette(@theme.palette, &b)
45
+
46
+ @theme.styles.each do |tok, style|
47
+ render_inline_pallete(style, &b)
48
+ end
49
+
50
+ Token.each_token do |tok|
51
+ style = @theme.class.get_own_style(tok)
52
+ style ? render_style(tok, style, &b) : render_blank(tok, &b)
53
+ end
54
+ yield '\makeatother'
55
+ end
56
+
57
+ def render_palette(palette, &b)
58
+ palette.each do |name, color|
59
+ hex = inline_name(color)
60
+
61
+ yield "\\definecolor{#{palette_name(name)}}{HTML}{#{hex}}%"
62
+ end
63
+ end
64
+
65
+ def render_inline_pallete(style, &b)
66
+ gen_inline(style[:fg], &b)
67
+ gen_inline(style[:bg], &b)
68
+ end
69
+
70
+ def inline_name(color)
71
+ color =~ /^#(\h+)/ or return nil
72
+
73
+ # xcolor does not support 3-character HTML colors,
74
+ # so we convert them here
75
+ case $1.size
76
+ when 6
77
+ $1
78
+ when 3
79
+ # duplicate every character: abc -> aabbcc
80
+ $1.gsub(/\h/, '\0\0')
81
+ else
82
+ raise "invalid HTML color: #{$1}"
83
+ end.upcase
84
+ end
85
+
86
+ def gen_inline(name, &b)
87
+ # detect inline colors
88
+ hex = inline_name(name)
89
+ return unless hex
90
+
91
+ @gen_inline ||= {}
92
+ @gen_inline[hex] ||= begin
93
+ yield "\\definecolor{#{palette_name(hex)}}{HTML}{#{hex}}%"
94
+ end
95
+ end
96
+
97
+ def camelize(name)
98
+ name.gsub(/_(.)/) { $1.upcase }
99
+ end
100
+
101
+ def palette_name(name)
102
+ name = inline_name(name) || name.to_s
103
+
104
+ "#{@prefix}@palette@#{camelize(@theme.name)}@#{camelize(name.to_s)}"
105
+ end
106
+
107
+ def token_name(tok)
108
+ "\\csname #@prefix@tok@#{tok.shortname}\\endcsname"
109
+ end
110
+
111
+ def render_blank(tok, &b)
112
+ out = "\\expandafter\\def#{token_name(tok)}#1{#1}"
113
+ end
114
+
115
+ def render_style(tok, style, &b)
116
+ out = String.new('')
117
+ out << "\\expandafter\\def#{token_name(tok)}#1{"
118
+ out << "\\fboxsep=0pt\\colorbox{#{palette_name(style[:bg])}}{" if style[:bg]
119
+ out << '\\textbf{' if style[:bold]
120
+ out << '\\textit{' if style[:italic]
121
+ out << "\\textcolor{#{palette_name(style[:fg])}}{" if style[:fg]
122
+ out << "#1"
123
+ # close the right number of curlies
124
+ out << "}" if style[:bold]
125
+ out << "}" if style[:italic]
126
+ out << "}" if style[:fg]
127
+ out << "}" if style[:bg]
128
+ out << "}%"
129
+ yield out
130
+ end
131
+ end
132
+ end
@@ -0,0 +1,50 @@
1
+ # -*- coding: utf-8 -*- #
2
+ # frozen_string_literal: true
3
+
4
+ module Rouge
5
+ class TextAnalyzer < String
6
+ # Find a shebang. Returns nil if no shebang is present.
7
+ def shebang
8
+ return @shebang if instance_variable_defined? :@shebang
9
+
10
+ self =~ /\A\s*#!(.*)$/
11
+ @shebang = $1
12
+ end
13
+
14
+ # Check if the given shebang is present.
15
+ #
16
+ # This normalizes things so that `text.shebang?('bash')` will detect
17
+ # `#!/bash`, '#!/bin/bash', '#!/usr/bin/env bash', and '#!/bin/bash -x'
18
+ def shebang?(match)
19
+ return false unless shebang
20
+ match = /\b#{match}(\s|$)/
21
+ match === shebang
22
+ end
23
+
24
+ # Return the contents of the doctype tag if present, nil otherwise.
25
+ def doctype
26
+ return @doctype if instance_variable_defined? :@doctype
27
+
28
+ self =~ %r(\A\s*
29
+ (?:<\?.*?\?>\s*)? # possible <?xml...?> tag
30
+ <!DOCTYPE\s+(.+?)>
31
+ )xm
32
+ @doctype = $1
33
+ end
34
+
35
+ # Check if the doctype matches a given regexp or string
36
+ def doctype?(type=//)
37
+ type === doctype
38
+ end
39
+
40
+ # Return true if the result of lexing with the given lexer contains no
41
+ # error tokens.
42
+ def lexes_cleanly?(lexer)
43
+ lexer.lex(self) do |(tok, _)|
44
+ return false if tok.name == 'Error'
45
+ end
46
+
47
+ true
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,218 @@
1
+ # -*- coding: utf-8 -*- #
2
+ # frozen_string_literal: true
3
+
4
+ module Rouge
5
+ class Theme
6
+ include Token::Tokens
7
+
8
+ class Style < Hash
9
+ def initialize(theme, hsh={})
10
+ super()
11
+ @theme = theme
12
+ merge!(hsh)
13
+ end
14
+
15
+ [:fg, :bg].each do |mode|
16
+ define_method mode do
17
+ return self[mode] unless @theme
18
+ @theme.palette(self[mode]) if self[mode]
19
+ end
20
+ end
21
+
22
+ def render(selector, &b)
23
+ return enum_for(:render, selector).to_a.join("\n") unless b
24
+
25
+ return if empty?
26
+
27
+ yield "#{selector} {"
28
+ rendered_rules.each do |rule|
29
+ yield " #{rule};"
30
+ end
31
+ yield "}"
32
+ end
33
+
34
+ def rendered_rules(&b)
35
+ return enum_for(:rendered_rules) unless b
36
+ yield "color: #{fg}" if fg
37
+ yield "background-color: #{bg}" if bg
38
+ yield "font-weight: bold" if self[:bold]
39
+ yield "font-style: italic" if self[:italic]
40
+ yield "text-decoration: underline" if self[:underline]
41
+
42
+ (self[:rules] || []).each(&b)
43
+ end
44
+ end
45
+
46
+ def styles
47
+ @styles ||= self.class.styles.dup
48
+ end
49
+
50
+ @palette = {}
51
+ def self.palette(arg={})
52
+ @palette ||= InheritableHash.new(superclass.palette)
53
+
54
+ if arg.is_a? Hash
55
+ @palette.merge! arg
56
+ @palette
57
+ else
58
+ case arg
59
+ when /#[0-9a-f]+/i
60
+ arg
61
+ else
62
+ @palette[arg] or raise "not in palette: #{arg.inspect}"
63
+ end
64
+ end
65
+ end
66
+
67
+ def palette(*a) self.class.palette(*a) end
68
+
69
+ @styles = {}
70
+ def self.styles
71
+ @styles ||= InheritableHash.new(superclass.styles)
72
+ end
73
+
74
+ def self.render(opts={}, &b)
75
+ new(opts).render(&b)
76
+ end
77
+
78
+ def get_own_style(token)
79
+ self.class.get_own_style(token)
80
+ end
81
+
82
+ def get_style(token)
83
+ self.class.get_style(token)
84
+ end
85
+
86
+ def name
87
+ self.class.name
88
+ end
89
+
90
+ class << self
91
+ def style(*tokens)
92
+ style = tokens.last.is_a?(Hash) ? tokens.pop : {}
93
+
94
+ tokens.each do |tok|
95
+ styles[tok] = style
96
+ end
97
+ end
98
+
99
+ def get_own_style(token)
100
+ token.token_chain.reverse_each do |anc|
101
+ return Style.new(self, styles[anc]) if styles[anc]
102
+ end
103
+
104
+ nil
105
+ end
106
+
107
+ def get_style(token)
108
+ get_own_style(token) || base_style
109
+ end
110
+
111
+ def base_style
112
+ get_own_style(Token::Tokens::Text)
113
+ end
114
+
115
+ def name(n=nil)
116
+ return @name if n.nil?
117
+
118
+ @name = n.to_s
119
+ register(@name)
120
+ end
121
+
122
+ def register(name)
123
+ Theme.registry[name.to_s] = self
124
+ end
125
+
126
+ def find(n)
127
+ registry[n.to_s]
128
+ end
129
+
130
+ def registry
131
+ @registry ||= {}
132
+ end
133
+ end
134
+ end
135
+
136
+ module HasModes
137
+ def mode(arg=:absent)
138
+ return @mode if arg == :absent
139
+
140
+ @modes ||= {}
141
+ @modes[arg] ||= get_mode(arg)
142
+ end
143
+
144
+ def get_mode(mode)
145
+ return self if self.mode == mode
146
+
147
+ new_name = "#{self.name}.#{mode}"
148
+ Class.new(self) { name(new_name); set_mode!(mode) }
149
+ end
150
+
151
+ def set_mode!(mode)
152
+ @mode = mode
153
+ send("make_#{mode}!")
154
+ end
155
+
156
+ def mode!(arg)
157
+ alt_name = "#{self.name}.#{arg}"
158
+ register(alt_name)
159
+ set_mode!(arg)
160
+ end
161
+ end
162
+
163
+ class CSSTheme < Theme
164
+ def initialize(opts={})
165
+ @scope = opts[:scope] || '.highlight'
166
+ end
167
+
168
+ def render(&b)
169
+ return enum_for(:render).to_a.join("\n") unless b
170
+
171
+ # shared styles for tableized line numbers
172
+ yield "#{@scope} table td { padding: 5px; }"
173
+ yield "#{@scope} table pre { margin: 0; }"
174
+
175
+ styles.each do |tok, style|
176
+ Style.new(self, style).render(css_selector(tok), &b)
177
+ end
178
+ end
179
+
180
+ def render_base(selector, &b)
181
+ self.class.base_style.render(selector, &b)
182
+ end
183
+
184
+ def style_for(tok)
185
+ self.class.get_style(tok)
186
+ end
187
+
188
+ private
189
+ def css_selector(token)
190
+ inflate_token(token).map do |tok|
191
+ raise "unknown token: #{tok.inspect}" if tok.shortname.nil?
192
+
193
+ single_css_selector(tok)
194
+ end.join(', ')
195
+ end
196
+
197
+ def single_css_selector(token)
198
+ return @scope if token == Text
199
+
200
+ "#{@scope} .#{token.shortname}"
201
+ end
202
+
203
+ # yield all of the tokens that should be styled the same
204
+ # as the given token. Essentially this recursively all of
205
+ # the subtokens, except those which are more specifically
206
+ # styled.
207
+ def inflate_token(tok, &b)
208
+ return enum_for(:inflate_token, tok) unless block_given?
209
+
210
+ yield tok
211
+ tok.sub_tokens.each do |(_, st)|
212
+ next if styles[st]
213
+
214
+ inflate_token(st, &b)
215
+ end
216
+ end
217
+ end
218
+ end
@@ -0,0 +1,131 @@
1
+ # -*- coding: utf-8 -*- #
2
+ # frozen_string_literal: true
3
+
4
+ module Rouge
5
+ module Themes
6
+ # default base16 theme
7
+ # by Chris Kempson (http://chriskempson.com)
8
+ class Base16 < CSSTheme
9
+ name 'base16'
10
+
11
+ palette base00: "#151515"
12
+ palette base01: "#202020"
13
+ palette base02: "#303030"
14
+ palette base03: "#505050"
15
+ palette base04: "#b0b0b0"
16
+ palette base05: "#d0d0d0"
17
+ palette base06: "#e0e0e0"
18
+ palette base07: "#f5f5f5"
19
+ palette base08: "#ac4142"
20
+ palette base09: "#d28445"
21
+ palette base0A: "#f4bf75"
22
+ palette base0B: "#90a959"
23
+ palette base0C: "#75b5aa"
24
+ palette base0D: "#6a9fb5"
25
+ palette base0E: "#aa759f"
26
+ palette base0F: "#8f5536"
27
+
28
+ extend HasModes
29
+
30
+ def self.light!
31
+ mode :dark # indicate that there is a dark variant
32
+ mode! :light
33
+ end
34
+
35
+ def self.dark!
36
+ mode :light # indicate that there is a light variant
37
+ mode! :dark
38
+ end
39
+
40
+ def self.make_dark!
41
+ style Text, :fg => :base05, :bg => :base00
42
+ end
43
+
44
+ def self.make_light!
45
+ style Text, :fg => :base02
46
+ end
47
+
48
+ light!
49
+
50
+ style Error, :fg => :base00, :bg => :base08
51
+ style Comment, :fg => :base03
52
+
53
+ style Comment::Preproc,
54
+ Name::Tag, :fg => :base0A
55
+
56
+ style Operator,
57
+ Punctuation, :fg => :base05
58
+
59
+ style Generic::Inserted, :fg => :base0B
60
+ style Generic::Deleted, :fg => :base08
61
+ style Generic::Heading, :fg => :base0D, :bg => :base00, :bold => true
62
+
63
+ style Keyword, :fg => :base0E
64
+ style Keyword::Constant,
65
+ Keyword::Type, :fg => :base09
66
+
67
+ style Keyword::Declaration, :fg => :base09
68
+
69
+ style Literal::String, :fg => :base0B
70
+ style Literal::String::Regex, :fg => :base0C
71
+
72
+ style Literal::String::Interpol,
73
+ Literal::String::Escape, :fg => :base0F
74
+
75
+ style Name::Namespace,
76
+ Name::Class,
77
+ Name::Constant, :fg => :base0A
78
+
79
+ style Name::Attribute, :fg => :base0D
80
+
81
+ style Literal::Number,
82
+ Literal::String::Symbol, :fg => :base0B
83
+
84
+ class Solarized < Base16
85
+ name 'base16.solarized'
86
+ light!
87
+ # author "Ethan Schoonover (http://ethanschoonover.com/solarized)"
88
+
89
+ palette base00: "#002b36"
90
+ palette base01: "#073642"
91
+ palette base02: "#586e75"
92
+ palette base03: "#657b83"
93
+ palette base04: "#839496"
94
+ palette base05: "#93a1a1"
95
+ palette base06: "#eee8d5"
96
+ palette base07: "#fdf6e3"
97
+ palette base08: "#dc322f"
98
+ palette base09: "#cb4b16"
99
+ palette base0A: "#b58900"
100
+ palette base0B: "#859900"
101
+ palette base0C: "#2aa198"
102
+ palette base0D: "#268bd2"
103
+ palette base0E: "#6c71c4"
104
+ palette base0F: "#d33682"
105
+ end
106
+
107
+ class Monokai < Base16
108
+ name 'base16.monokai'
109
+ dark!
110
+
111
+ # author "Wimer Hazenberg (http://www.monokai.nl)"
112
+ palette base00: "#272822"
113
+ palette base01: "#383830"
114
+ palette base02: "#49483e"
115
+ palette base03: "#75715e"
116
+ palette base04: "#a59f85"
117
+ palette base05: "#f8f8f2"
118
+ palette base06: "#f5f4f1"
119
+ palette base07: "#f9f8f5"
120
+ palette base08: "#f92672"
121
+ palette base09: "#fd971f"
122
+ palette base0A: "#f4bf75"
123
+ palette base0B: "#a6e22e"
124
+ palette base0C: "#a1efe4"
125
+ palette base0D: "#66d9ef"
126
+ palette base0E: "#ae81ff"
127
+ palette base0F: "#cc6633"
128
+ end
129
+ end
130
+ end
131
+ end