rouge 3.18.0

Sign up to get free protection for your applications and to get access to all the features.
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