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,346 @@
1
+ # -*- coding: utf-8 -*- #
2
+ # frozen_string_literal: true
3
+
4
+ module Rouge
5
+ module Lexers
6
+ class CommonLisp < RegexLexer
7
+ title "Common Lisp"
8
+ desc "The Common Lisp variant of Lisp (common-lisp.net)"
9
+ tag 'common_lisp'
10
+ aliases 'cl', 'common-lisp', 'elisp', 'emacs-lisp', 'lisp'
11
+
12
+ filenames '*.cl', '*.lisp', '*.asd', '*.el' # used for Elisp too
13
+ mimetypes 'text/x-common-lisp'
14
+
15
+ # 638 functions
16
+ BUILTIN_FUNCTIONS = Set.new %w(
17
+ < <= = > >= - / /= * + 1- 1+ abort abs acons acos acosh add-method
18
+ adjoin adjustable-array-p adjust-array allocate-instance
19
+ alpha-char-p alphanumericp append apply apropos apropos-list
20
+ aref arithmetic-error-operands arithmetic-error-operation
21
+ array-dimension array-dimensions array-displacement
22
+ array-element-type array-has-fill-pointer-p array-in-bounds-p
23
+ arrayp array-rank array-row-major-index array-total-size
24
+ ash asin asinh assoc assoc-if assoc-if-not atan atanh atom
25
+ bit bit-and bit-andc1 bit-andc2 bit-eqv bit-ior bit-nand
26
+ bit-nor bit-not bit-orc1 bit-orc2 bit-vector-p bit-xor boole
27
+ both-case-p boundp break broadcast-stream-streams butlast
28
+ byte byte-position byte-size caaaar caaadr caaar caadar
29
+ caaddr caadr caar cadaar cadadr cadar caddar cadddr caddr
30
+ cadr call-next-method car cdaaar cdaadr cdaar cdadar cdaddr
31
+ cdadr cdar cddaar cddadr cddar cdddar cddddr cdddr cddr cdr
32
+ ceiling cell-error-name cerror change-class char char< char<=
33
+ char= char> char>= char/= character characterp char-code
34
+ char-downcase char-equal char-greaterp char-int char-lessp
35
+ char-name char-not-equal char-not-greaterp char-not-lessp
36
+ char-upcase cis class-name class-of clear-input clear-output
37
+ close clrhash code-char coerce compile compiled-function-p
38
+ compile-file compile-file-pathname compiler-macro-function
39
+ complement complex complexp compute-applicable-methods
40
+ compute-restarts concatenate concatenated-stream-streams conjugate
41
+ cons consp constantly constantp continue copy-alist copy-list
42
+ copy-pprint-dispatch copy-readtable copy-seq copy-structure
43
+ copy-symbol copy-tree cos cosh count count-if count-if-not
44
+ decode-float decode-universal-time delete delete-duplicates
45
+ delete-file delete-if delete-if-not delete-package denominator
46
+ deposit-field describe describe-object digit-char digit-char-p
47
+ directory directory-namestring disassemble documentation dpb
48
+ dribble echo-stream-input-stream echo-stream-output-stream
49
+ ed eighth elt encode-universal-time endp enough-namestring
50
+ ensure-directories-exist ensure-generic-function eq
51
+ eql equal equalp error eval evenp every exp export expt
52
+ fboundp fceiling fdefinition ffloor fifth file-author
53
+ file-error-pathname file-length file-namestring file-position
54
+ file-string-length file-write-date fill fill-pointer find
55
+ find-all-symbols find-class find-if find-if-not find-method
56
+ find-package find-restart find-symbol finish-output first
57
+ float float-digits floatp float-precision float-radix
58
+ float-sign floor fmakunbound force-output format fourth
59
+ fresh-line fround ftruncate funcall function-keywords
60
+ function-lambda-expression functionp gcd gensym gentemp get
61
+ get-decoded-time get-dispatch-macro-character getf gethash
62
+ get-internal-real-time get-internal-run-time get-macro-character
63
+ get-output-stream-string get-properties get-setf-expansion
64
+ get-universal-time graphic-char-p hash-table-count hash-table-p
65
+ hash-table-rehash-size hash-table-rehash-threshold
66
+ hash-table-size hash-table-test host-namestring identity
67
+ imagpart import initialize-instance input-stream-p inspect
68
+ integer-decode-float integer-length integerp interactive-stream-p
69
+ intern intersection invalid-method-error invoke-debugger
70
+ invoke-restart invoke-restart-interactively isqrt keywordp
71
+ last lcm ldb ldb-test ldiff length lisp-implementation-type
72
+ lisp-implementation-version list list* list-all-packages listen
73
+ list-length listp load load-logical-pathname-translations
74
+ log logand logandc1 logandc2 logbitp logcount logeqv
75
+ logical-pathname logical-pathname-translations logior
76
+ lognand lognor lognot logorc1 logorc2 logtest logxor
77
+ long-site-name lower-case-p machine-instance machine-type
78
+ machine-version macroexpand macroexpand-1 macro-function
79
+ make-array make-broadcast-stream make-concatenated-stream
80
+ make-condition make-dispatch-macro-character make-echo-stream
81
+ make-hash-table make-instance make-instances-obsolete make-list
82
+ make-load-form make-load-form-saving-slots make-package
83
+ make-pathname make-random-state make-sequence make-string
84
+ make-string-input-stream make-string-output-stream make-symbol
85
+ make-synonym-stream make-two-way-stream makunbound map mapc
86
+ mapcan mapcar mapcon maphash map-into mapl maplist mask-field
87
+ max member member-if member-if-not merge merge-pathnames
88
+ method-combination-error method-qualifiers min minusp mismatch mod
89
+ muffle-warning name-char namestring nbutlast nconc next-method-p
90
+ nintersection ninth no-applicable-method no-next-method not notany
91
+ notevery nreconc nreverse nset-difference nset-exclusive-or
92
+ nstring-capitalize nstring-downcase nstring-upcase nsublis
93
+ nsubst nsubst-if nsubst-if-not nsubstitute nsubstitute-if
94
+ nsubstitute-if-not nth nthcdr null numberp numerator nunion
95
+ oddp open open-stream-p output-stream-p package-error-package
96
+ package-name package-nicknames packagep package-shadowing-symbols
97
+ package-used-by-list package-use-list pairlis parse-integer
98
+ parse-namestring pathname pathname-device pathname-directory
99
+ pathname-host pathname-match-p pathname-name pathnamep
100
+ pathname-type pathname-version peek-char phase plusp
101
+ position position-if position-if-not pprint pprint-dispatch
102
+ pprint-fill pprint-indent pprint-linear pprint-newline pprint-tab
103
+ pprint-tabular prin1 prin1-to-string princ princ-to-string print
104
+ print-object probe-file proclaim provide random random-state-p
105
+ rassoc rassoc-if rassoc-if-not rational rationalize rationalp
106
+ read read-byte read-char read-char-no-hang read-delimited-list
107
+ read-from-string read-line read-preserving-whitespace
108
+ read-sequence readtable-case readtablep realp realpart
109
+ reduce reinitialize-instance rem remhash remove
110
+ remove-duplicates remove-if remove-if-not remove-method
111
+ remprop rename-file rename-package replace require rest
112
+ restart-name revappend reverse room round row-major-aref
113
+ rplaca rplacd sbit scale-float schar search second set
114
+ set-difference set-dispatch-macro-character set-exclusive-or
115
+ set-macro-character set-pprint-dispatch set-syntax-from-char
116
+ seventh shadow shadowing-import shared-initialize
117
+ short-site-name signal signum simple-bit-vector-p
118
+ simple-condition-format-arguments simple-condition-format-control
119
+ simple-string-p simple-vector-p sin sinh sixth sleep slot-boundp
120
+ slot-exists-p slot-makunbound slot-missing slot-unbound slot-value
121
+ software-type software-version some sort special-operator-p
122
+ sqrt stable-sort standard-char-p store-value stream-element-type
123
+ stream-error-stream stream-external-format streamp string string<
124
+ string<= string= string> string>= string/= string-capitalize
125
+ string-downcase string-equal string-greaterp string-left-trim
126
+ string-lessp string-not-equal string-not-greaterp string-not-lessp
127
+ stringp string-right-trim string-trim string-upcase sublis subseq
128
+ subsetp subst subst-if subst-if-not substitute substitute-if
129
+ substitute-if-not subtypepsvref sxhash symbol-function
130
+ symbol-name symbolp symbol-package symbol-plist symbol-value
131
+ synonym-stream-symbol syntax: tailp tan tanh tenth terpri third
132
+ translate-logical-pathname translate-pathname tree-equal truename
133
+ truncate two-way-stream-input-stream two-way-stream-output-stream
134
+ type-error-datum type-error-expected-type type-of
135
+ typep unbound-slot-instance unexport unintern union
136
+ unread-char unuse-package update-instance-for-different-class
137
+ update-instance-for-redefined-class upgraded-array-element-type
138
+ upgraded-complex-part-type upper-case-p use-package
139
+ user-homedir-pathname use-value values values-list vector vectorp
140
+ vector-pop vector-push vector-push-extend warn wild-pathname-p
141
+ write write-byte write-char write-line write-sequence write-string
142
+ write-to-string yes-or-no-p y-or-n-p zerop
143
+ ).freeze
144
+
145
+ SPECIAL_FORMS = Set.new %w(
146
+ block catch declare eval-when flet function go if labels lambda
147
+ let let* load-time-value locally macrolet multiple-value-call
148
+ multiple-value-prog1 progn progv quote return-from setq
149
+ symbol-macrolet tagbody the throw unwind-protect
150
+ )
151
+
152
+ MACROS = Set.new %w(
153
+ and assert call-method case ccase check-type cond ctypecase decf
154
+ declaim defclass defconstant defgeneric define-compiler-macro
155
+ define-condition define-method-combination define-modify-macro
156
+ define-setf-expander define-symbol-macro defmacro defmethod
157
+ defpackage defparameter defsetf defstruct defsystem deftype defun defvar
158
+ destructuring-bind do do* do-all-symbols do-external-symbols
159
+ dolist do-symbols dotimes ecase etypecase formatter
160
+ handler-bind handler-case ignore-errors incf in-package
161
+ lambda loop loop-finish make-method multiple-value-bind
162
+ multiple-value-list multiple-value-setq nth-value or pop
163
+ pprint-exit-if-list-exhausted pprint-logical-block pprint-pop
164
+ print-unreadable-object prog prog* prog1 prog2 psetf psetq
165
+ push pushnew remf restart-bind restart-case return rotatef
166
+ setf shiftf step time trace typecase unless untrace when
167
+ with-accessors with-compilation-unit with-condition-restarts
168
+ with-hash-table-iterator with-input-from-string with-open-file
169
+ with-open-stream with-output-to-string with-package-iterator
170
+ with-simple-restart with-slots with-standard-io-syntax
171
+ )
172
+
173
+ LAMBDA_LIST_KEYWORDS = Set.new %w(
174
+ &allow-other-keys &aux &body &environment &key &optional &rest
175
+ &whole
176
+ )
177
+
178
+ DECLARATIONS = Set.new %w(
179
+ dynamic-extent ignore optimize ftype inline special ignorable
180
+ notinline type
181
+ )
182
+
183
+ BUILTIN_TYPES = Set.new %w(
184
+ atom boolean base-char base-string bignum bit compiled-function
185
+ extended-char fixnum keyword nil signed-byte short-float
186
+ single-float double-float long-float simple-array
187
+ simple-base-string simple-bit-vector simple-string simple-vector
188
+ standard-char unsigned-byte
189
+
190
+ arithmetic-error cell-error condition control-error
191
+ division-by-zero end-of-file error file-error
192
+ floating-point-inexact floating-point-overflow
193
+ floating-point-underflow floating-point-invalid-operation
194
+ parse-error package-error print-not-readable program-error
195
+ reader-error serious-condition simple-condition simple-error
196
+ simple-type-error simple-warning stream-error storage-condition
197
+ style-warning type-error unbound-variable unbound-slot
198
+ undefined-function warning
199
+ )
200
+
201
+ BUILTIN_CLASSES = Set.new %w(
202
+ array broadcast-stream bit-vector built-in-class character
203
+ class complex concatenated-stream cons echo-stream file-stream
204
+ float function generic-function hash-table integer list
205
+ logical-pathname method-combination method null number package
206
+ pathname ratio rational readtable real random-state restart
207
+ sequence standard-class standard-generic-function standard-method
208
+ standard-object string-stream stream string structure-class
209
+ structure-object symbol synonym-stream t two-way-stream vector
210
+ )
211
+
212
+ nonmacro = /\\.|[a-zA-Z0-9!$%&*+-\/<=>?@\[\]^_{}~]/
213
+ constituent = /#{nonmacro}|[#.:]/
214
+ terminated = /(?=[ "'()\n,;`])/ # whitespace or terminating macro chars
215
+ symbol = /(\|[^\|]+\||#{nonmacro}#{constituent}*)/
216
+
217
+ state :root do
218
+ rule %r/\s+/m, Text
219
+ rule %r/;.*$/, Comment::Single
220
+ rule %r/#\|/, Comment::Multiline, :multiline_comment
221
+
222
+ # encoding comment
223
+ rule %r/#\d*Y.*$/, Comment::Special
224
+ rule %r/"(\\.|[^"\\])*"/, Str
225
+
226
+ rule %r/[:']#{symbol}/, Str::Symbol
227
+ rule %r/['`]/, Operator
228
+
229
+ # numbers
230
+ rule %r/[-+]?\d+\.?#{terminated}/, Num::Integer
231
+ rule %r([-+]?\d+/\d+#{terminated}), Num::Integer
232
+ rule %r(
233
+ [-+]?
234
+ (\d*\.\d+([defls][-+]?\d+)?
235
+ |\d+(\.\d*)?[defls][-+]?\d+)
236
+ #{terminated}
237
+ )x, Num::Float
238
+
239
+ # sharpsign strings and characters
240
+ rule %r/#\\.#{terminated}/, Str::Char
241
+ rule %r/#\\#{symbol}/, Str::Char
242
+
243
+ rule %r/#\(/, Operator, :root
244
+
245
+ # bitstring
246
+ rule %r/#\d*\*[01]*/, Other
247
+
248
+ # uninterned symbol
249
+ rule %r/#:#{symbol}/, Str::Symbol
250
+
251
+ # read-time and load-time evaluation
252
+ rule %r/#[.,]/, Operator
253
+
254
+ # function shorthand
255
+ rule %r/#'/, Name::Function
256
+
257
+ # binary rational
258
+ rule %r/#b[+-]?[01]+(\/[01]+)?/i, Num
259
+
260
+ # octal rational
261
+ rule %r/#o[+-]?[0-7]+(\/[0-7]+)?/i, Num::Oct
262
+
263
+ # hex rational
264
+ rule %r/#x[+-]?[0-9a-f]+(\/[0-9a-f]+)?/i, Num
265
+
266
+ # complex
267
+ rule %r/(#c)(\()/i do
268
+ groups Num, Punctuation
269
+ push :root
270
+ end
271
+
272
+ # arrays and structures
273
+ rule %r/(#(?:\d+a|s))(\()/i do
274
+ groups Str::Other, Punctuation
275
+ push :root
276
+ end
277
+
278
+ # path
279
+ rule %r/#p?"(\\.|[^"])*"/i, Str::Symbol
280
+
281
+ # reference
282
+ rule %r/#\d+[=#]/, Operator
283
+
284
+ # read-time comment
285
+ rule %r/#+nil#{terminated}\s*\(/, Comment, :commented_form
286
+
287
+ # read-time conditional
288
+ rule %r/#[+-]/, Operator
289
+
290
+ # special operators that should have been parsed already
291
+ rule %r/(,@|,|\.)/, Operator
292
+
293
+ # special constants
294
+ rule %r/(t|nil)#{terminated}/, Name::Constant
295
+
296
+ # functions and variables
297
+ # note that these get filtered through in stream_tokens
298
+ rule %r/\*#{symbol}\*/, Name::Variable::Global
299
+ rule symbol do |m|
300
+ sym = m[0]
301
+
302
+ if BUILTIN_FUNCTIONS.include? sym
303
+ token Name::Builtin
304
+ elsif SPECIAL_FORMS.include? sym
305
+ token Keyword
306
+ elsif MACROS.include? sym
307
+ token Name::Builtin
308
+ elsif LAMBDA_LIST_KEYWORDS.include? sym
309
+ token Keyword
310
+ elsif DECLARATIONS.include? sym
311
+ token Keyword
312
+ elsif BUILTIN_TYPES.include? sym
313
+ token Keyword::Type
314
+ elsif BUILTIN_CLASSES.include? sym
315
+ token Name::Class
316
+ else
317
+ token Name::Variable
318
+ end
319
+ end
320
+
321
+ rule %r/\(/, Punctuation, :root
322
+ rule %r/\)/, Punctuation do
323
+ if stack.size == 1
324
+ token Error
325
+ else
326
+ token Punctuation
327
+ pop!
328
+ end
329
+ end
330
+ end
331
+
332
+ state :multiline_comment do
333
+ rule %r/#\|/, Comment::Multiline, :multiline_comment
334
+ rule %r/\|#/, Comment::Multiline, :pop!
335
+ rule %r/[^\|#]+/, Comment::Multiline
336
+ rule %r/[\|#]/, Comment::Multiline
337
+ end
338
+
339
+ state :commented_form do
340
+ rule %r/\(/, Comment, :commented_form
341
+ rule %r/\)/, Comment, :pop!
342
+ rule %r/[^()]+/, Comment
343
+ end
344
+ end
345
+ end
346
+ end
@@ -0,0 +1,25 @@
1
+ # -*- coding: utf-8 -*- #
2
+ # frozen_string_literal: true
3
+
4
+ module Rouge
5
+ module Lexers
6
+ class Conf < RegexLexer
7
+ tag 'conf'
8
+ aliases 'config', 'configuration'
9
+
10
+ title "Config File"
11
+ desc 'A generic lexer for configuration files'
12
+ filenames '*.conf', '*.config'
13
+
14
+ # short and sweet
15
+ state :root do
16
+ rule %r/#.*?\n/, Comment
17
+ rule %r/".*?"/, Str::Double
18
+ rule %r/'.*?'/, Str::Single
19
+ rule %r/[a-z]\w*/i, Name
20
+ rule %r/\d+/, Num
21
+ rule %r/[^\w#"']+/, Text
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,190 @@
1
+ # -*- coding: utf-8 -*- #
2
+ # frozen_string_literal: true
3
+
4
+ module Rouge
5
+ module Lexers
6
+ # The {ConsoleLexer} class is intended to lex content that represents the
7
+ # text that would display in a console/terminal. As distinct from the
8
+ # {Shell} lexer, {ConsoleLexer} will try to parse out the prompt from each
9
+ # line before passing the remainder of the line to the language lexer for
10
+ # the shell (by default, the {Shell} lexer).
11
+ #
12
+ # The {ConsoleLexer} class accepts five options:
13
+ # 1. **lang**: the shell language to lex (default: `shell`);
14
+ # 2. **output**: the output language (default: `plaintext?token=Generic.Output`);
15
+ # 3. **prompt**: comma-separated list of strings that indicate the end of a
16
+ # prompt (default: `$,#,>,;`);
17
+ # 4. **comments**: whether to enable comments.
18
+ # 5. **error**: comma-separated list of strings that indicate the start of an
19
+ # error message
20
+ #
21
+ # The comments option, if enabled, will lex lines that begin with a `#` as a
22
+ # comment. Please note that this option will only work if the prompt is
23
+ # either not manually specified or, if manually specified, does not include
24
+ # the `#` character.
25
+ #
26
+ # Most Markdown lexers that recognise GitHub-Flavored Markdown syntax, will
27
+ # pass the language string to Rouge as written in the original document.
28
+ # This allows an end user to pass options to {ConsoleLexer} by passing them
29
+ # as CGI-style parameters as in the example below.
30
+ #
31
+ # @example
32
+ # <pre>Here's some regular text.
33
+ #
34
+ # ```console?comments=true
35
+ # # This is a comment
36
+ # $ cp foo bar
37
+ # ```
38
+ #
39
+ # Some more regular text.</pre>
40
+ class ConsoleLexer < Lexer
41
+ tag 'console'
42
+ aliases 'terminal', 'shell_session', 'shell-session'
43
+ filenames '*.cap'
44
+ desc 'A generic lexer for shell sessions. Accepts ?lang and ?output lexer options, a ?prompt option, ?comments to enable # comments, and ?error to handle error messages.'
45
+
46
+ option :lang, 'the shell language to lex (default: shell)'
47
+ option :output, 'the output language (default: plaintext?token=Generic.Output)'
48
+ option :prompt, 'comma-separated list of strings that indicate the end of a prompt. (default: $,#,>,;)'
49
+ option :comments, 'enable hash-comments at the start of a line - otherwise interpreted as a prompt. (default: false, implied by ?prompt not containing `#`)'
50
+ option :error, 'comma-separated list of strings that indicate the start of an error message'
51
+
52
+ def initialize(*)
53
+ super
54
+ @prompt = list_option(:prompt) { nil }
55
+ @lang = lexer_option(:lang) { 'shell' }
56
+ @output = lexer_option(:output) { PlainText.new(token: Generic::Output) }
57
+ @comments = bool_option(:comments) { :guess }
58
+ @error = list_option(:error) { nil }
59
+ end
60
+
61
+ # whether to allow comments. if manually specifying a prompt that isn't
62
+ # simply "#", we flag this to on
63
+ def allow_comments?
64
+ case @comments
65
+ when :guess
66
+ @prompt && !@prompt.empty? && !end_chars.include?('#')
67
+ else
68
+ @comments
69
+ end
70
+ end
71
+
72
+ def comment_regex
73
+ /\A\s*?#/
74
+ end
75
+
76
+ def end_chars
77
+ @end_chars ||= if @prompt.any?
78
+ @prompt.reject { |c| c.empty? }
79
+ elsif allow_comments?
80
+ %w($ > ;)
81
+ else
82
+ %w($ # > ;)
83
+ end
84
+ end
85
+
86
+ def error_regex
87
+ @error_regex ||= if @error.any?
88
+ /^(?:#{@error.map(&Regexp.method(:escape)).join('|')})/
89
+ end
90
+ end
91
+
92
+ def lang_lexer
93
+ @lang_lexer ||= case @lang
94
+ when Lexer
95
+ @lang
96
+ when nil
97
+ Shell.new(options)
98
+ when Class
99
+ @lang.new(options)
100
+ when String
101
+ Lexer.find(@lang).new(options)
102
+ end
103
+ end
104
+
105
+ def line_regex
106
+ /(\\.|[^\\])*?(\n|$)/m
107
+ end
108
+
109
+ def output_lexer
110
+ @output_lexer ||= case @output
111
+ when nil
112
+ PlainText.new(token: Generic::Output)
113
+ when Lexer
114
+ @output
115
+ when Class
116
+ @output.new(options)
117
+ when String
118
+ Lexer.find(@output).new(options)
119
+ end
120
+ end
121
+
122
+ def process_line(input, &output)
123
+ input.scan(line_regex)
124
+
125
+ # As a nicety, support the use of elisions in input text. A user can
126
+ # write a line with only `<...>` or one or more `.` characters and
127
+ # Rouge will treat it as a comment.
128
+ if input[0] =~ /\A\s*(?:<[.]+>|[.]+)\s*\z/
129
+ puts "console: matched snip #{input[0].inspect}" if @debug
130
+ output_lexer.reset!
131
+ lang_lexer.reset!
132
+
133
+ yield Comment, input[0]
134
+ elsif prompt_regex =~ input[0]
135
+ puts "console: matched prompt #{input[0].inspect}" if @debug
136
+ output_lexer.reset!
137
+
138
+ yield Generic::Prompt, $&
139
+
140
+ # make sure to take care of initial whitespace
141
+ # before we pass to the lang lexer so it can determine where
142
+ # the "real" beginning of the line is
143
+ $' =~ /\A\s*/
144
+ yield Text::Whitespace, $& unless $&.empty?
145
+
146
+ lang_lexer.continue_lex($', &output)
147
+ elsif comment_regex =~ input[0].strip
148
+ puts "console: matched comment #{input[0].inspect}" if @debug
149
+ output_lexer.reset!
150
+ lang_lexer.reset!
151
+
152
+ yield Comment, input[0]
153
+ elsif error_regex =~ input[0]
154
+ puts "console: matched error #{input[0].inspect}" if @debug
155
+ output_lexer.reset!
156
+ lang_lexer.reset!
157
+
158
+ yield Generic::Error, input[0]
159
+ else
160
+ puts "console: matched output #{input[0].inspect}" if @debug
161
+ lang_lexer.reset!
162
+
163
+ output_lexer.continue_lex(input[0], &output)
164
+ end
165
+ end
166
+
167
+ def prompt_prefix_regex
168
+ if allow_comments?
169
+ /[^<#]*?/m
170
+ else
171
+ /.*?/m
172
+ end
173
+ end
174
+
175
+ def prompt_regex
176
+ @prompt_regex ||= begin
177
+ /^#{prompt_prefix_regex}(?:#{end_chars.map(&Regexp.method(:escape)).join('|')})/
178
+ end
179
+ end
180
+
181
+ def stream_tokens(input, &output)
182
+ input = StringScanner.new(input)
183
+ lang_lexer.reset!
184
+ output_lexer.reset!
185
+
186
+ process_line(input, &output) while !input.eos?
187
+ end
188
+ end
189
+ end
190
+ end