nano-max-hub 0.0.1

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 (540) hide show
  1. checksums.yaml +7 -0
  2. data/nano-max-hub.gemspec +12 -0
  3. data/rouge-5.0.0/Gemfile +48 -0
  4. data/rouge-5.0.0/LICENSE +187 -0
  5. data/rouge-5.0.0/bin/rougify +17 -0
  6. data/rouge-5.0.0/lib/rouge/cli.rb +527 -0
  7. data/rouge-5.0.0/lib/rouge/demos/abap +32 -0
  8. data/rouge-5.0.0/lib/rouge/demos/actionscript +4 -0
  9. data/rouge-5.0.0/lib/rouge/demos/ada +26 -0
  10. data/rouge-5.0.0/lib/rouge/demos/apache +21 -0
  11. data/rouge-5.0.0/lib/rouge/demos/apex +9 -0
  12. data/rouge-5.0.0/lib/rouge/demos/apiblueprint +33 -0
  13. data/rouge-5.0.0/lib/rouge/demos/applescript +2 -0
  14. data/rouge-5.0.0/lib/rouge/demos/armasm +12 -0
  15. data/rouge-5.0.0/lib/rouge/demos/augeas +16 -0
  16. data/rouge-5.0.0/lib/rouge/demos/awk +4 -0
  17. data/rouge-5.0.0/lib/rouge/demos/batchfile +3 -0
  18. data/rouge-5.0.0/lib/rouge/demos/bbcbasic +6 -0
  19. data/rouge-5.0.0/lib/rouge/demos/bibtex +12 -0
  20. data/rouge-5.0.0/lib/rouge/demos/bicep +10 -0
  21. data/rouge-5.0.0/lib/rouge/demos/biml +38 -0
  22. data/rouge-5.0.0/lib/rouge/demos/bpf +7 -0
  23. data/rouge-5.0.0/lib/rouge/demos/brainfuck +5 -0
  24. data/rouge-5.0.0/lib/rouge/demos/brightscript +6 -0
  25. data/rouge-5.0.0/lib/rouge/demos/bsl +7 -0
  26. data/rouge-5.0.0/lib/rouge/demos/c +8 -0
  27. data/rouge-5.0.0/lib/rouge/demos/ceylon +7 -0
  28. data/rouge-5.0.0/lib/rouge/demos/cfscript +18 -0
  29. data/rouge-5.0.0/lib/rouge/demos/cisco_ios +19 -0
  30. data/rouge-5.0.0/lib/rouge/demos/clean +6 -0
  31. data/rouge-5.0.0/lib/rouge/demos/clojure +5 -0
  32. data/rouge-5.0.0/lib/rouge/demos/cmake +7 -0
  33. data/rouge-5.0.0/lib/rouge/demos/cmhg +8 -0
  34. data/rouge-5.0.0/lib/rouge/demos/cobol +103 -0
  35. data/rouge-5.0.0/lib/rouge/demos/codeowners +6 -0
  36. data/rouge-5.0.0/lib/rouge/demos/coffeescript +5 -0
  37. data/rouge-5.0.0/lib/rouge/demos/common_lisp +1 -0
  38. data/rouge-5.0.0/lib/rouge/demos/conf +4 -0
  39. data/rouge-5.0.0/lib/rouge/demos/console +6 -0
  40. data/rouge-5.0.0/lib/rouge/demos/cpp +8 -0
  41. data/rouge-5.0.0/lib/rouge/demos/crystal +45 -0
  42. data/rouge-5.0.0/lib/rouge/demos/csharp +5 -0
  43. data/rouge-5.0.0/lib/rouge/demos/css +4 -0
  44. data/rouge-5.0.0/lib/rouge/demos/csvs +8 -0
  45. data/rouge-5.0.0/lib/rouge/demos/cuda +11 -0
  46. data/rouge-5.0.0/lib/rouge/demos/cypher +5 -0
  47. data/rouge-5.0.0/lib/rouge/demos/cython +6 -0
  48. data/rouge-5.0.0/lib/rouge/demos/d +16 -0
  49. data/rouge-5.0.0/lib/rouge/demos/dafny +16 -0
  50. data/rouge-5.0.0/lib/rouge/demos/dart +6 -0
  51. data/rouge-5.0.0/lib/rouge/demos/datastudio +20 -0
  52. data/rouge-5.0.0/lib/rouge/demos/diff +7 -0
  53. data/rouge-5.0.0/lib/rouge/demos/digdag +19 -0
  54. data/rouge-5.0.0/lib/rouge/demos/docker +9 -0
  55. data/rouge-5.0.0/lib/rouge/demos/dot +5 -0
  56. data/rouge-5.0.0/lib/rouge/demos/dylan +8 -0
  57. data/rouge-5.0.0/lib/rouge/demos/ecl +17 -0
  58. data/rouge-5.0.0/lib/rouge/demos/eex +1 -0
  59. data/rouge-5.0.0/lib/rouge/demos/eiffel +30 -0
  60. data/rouge-5.0.0/lib/rouge/demos/elixir +1 -0
  61. data/rouge-5.0.0/lib/rouge/demos/elm +4 -0
  62. data/rouge-5.0.0/lib/rouge/demos/email +11 -0
  63. data/rouge-5.0.0/lib/rouge/demos/epp +4 -0
  64. data/rouge-5.0.0/lib/rouge/demos/erb +1 -0
  65. data/rouge-5.0.0/lib/rouge/demos/erlang +7 -0
  66. data/rouge-5.0.0/lib/rouge/demos/escape +3 -0
  67. data/rouge-5.0.0/lib/rouge/demos/factor +5 -0
  68. data/rouge-5.0.0/lib/rouge/demos/fluent +13 -0
  69. data/rouge-5.0.0/lib/rouge/demos/fortran +22 -0
  70. data/rouge-5.0.0/lib/rouge/demos/freefem +16 -0
  71. data/rouge-5.0.0/lib/rouge/demos/fsharp +12 -0
  72. data/rouge-5.0.0/lib/rouge/demos/gdscript +18 -0
  73. data/rouge-5.0.0/lib/rouge/demos/ghc-cmm +23 -0
  74. data/rouge-5.0.0/lib/rouge/demos/ghc-core +26 -0
  75. data/rouge-5.0.0/lib/rouge/demos/gherkin +17 -0
  76. data/rouge-5.0.0/lib/rouge/demos/gjs +23 -0
  77. data/rouge-5.0.0/lib/rouge/demos/glsl +14 -0
  78. data/rouge-5.0.0/lib/rouge/demos/go +7 -0
  79. data/rouge-5.0.0/lib/rouge/demos/gradle +10 -0
  80. data/rouge-5.0.0/lib/rouge/demos/graphql +17 -0
  81. data/rouge-5.0.0/lib/rouge/demos/groovy +9 -0
  82. data/rouge-5.0.0/lib/rouge/demos/gts +36 -0
  83. data/rouge-5.0.0/lib/rouge/demos/hack +5 -0
  84. data/rouge-5.0.0/lib/rouge/demos/haml +5 -0
  85. data/rouge-5.0.0/lib/rouge/demos/handlebars +7 -0
  86. data/rouge-5.0.0/lib/rouge/demos/haskell +6 -0
  87. data/rouge-5.0.0/lib/rouge/demos/haxe +4 -0
  88. data/rouge-5.0.0/lib/rouge/demos/hcl +7 -0
  89. data/rouge-5.0.0/lib/rouge/demos/hlsl +20 -0
  90. data/rouge-5.0.0/lib/rouge/demos/hocon +8 -0
  91. data/rouge-5.0.0/lib/rouge/demos/hql +5 -0
  92. data/rouge-5.0.0/lib/rouge/demos/html +8 -0
  93. data/rouge-5.0.0/lib/rouge/demos/http +14 -0
  94. data/rouge-5.0.0/lib/rouge/demos/hylang +10 -0
  95. data/rouge-5.0.0/lib/rouge/demos/idlang +8 -0
  96. data/rouge-5.0.0/lib/rouge/demos/idris +13 -0
  97. data/rouge-5.0.0/lib/rouge/demos/iecst +21 -0
  98. data/rouge-5.0.0/lib/rouge/demos/igorpro +9 -0
  99. data/rouge-5.0.0/lib/rouge/demos/ini +4 -0
  100. data/rouge-5.0.0/lib/rouge/demos/io +11 -0
  101. data/rouge-5.0.0/lib/rouge/demos/irb +4 -0
  102. data/rouge-5.0.0/lib/rouge/demos/irb_output +2 -0
  103. data/rouge-5.0.0/lib/rouge/demos/isabelle +16 -0
  104. data/rouge-5.0.0/lib/rouge/demos/isbl +4 -0
  105. data/rouge-5.0.0/lib/rouge/demos/j +12 -0
  106. data/rouge-5.0.0/lib/rouge/demos/janet +3 -0
  107. data/rouge-5.0.0/lib/rouge/demos/java +5 -0
  108. data/rouge-5.0.0/lib/rouge/demos/javascript +1 -0
  109. data/rouge-5.0.0/lib/rouge/demos/jinja +9 -0
  110. data/rouge-5.0.0/lib/rouge/demos/jsl +3 -0
  111. data/rouge-5.0.0/lib/rouge/demos/json +1 -0
  112. data/rouge-5.0.0/lib/rouge/demos/json-doc +1 -0
  113. data/rouge-5.0.0/lib/rouge/demos/json5 +12 -0
  114. data/rouge-5.0.0/lib/rouge/demos/jsonnet +28 -0
  115. data/rouge-5.0.0/lib/rouge/demos/jsp +29 -0
  116. data/rouge-5.0.0/lib/rouge/demos/jsx +17 -0
  117. data/rouge-5.0.0/lib/rouge/demos/julia +11 -0
  118. data/rouge-5.0.0/lib/rouge/demos/kick_assembler +14 -0
  119. data/rouge-5.0.0/lib/rouge/demos/kotlin +3 -0
  120. data/rouge-5.0.0/lib/rouge/demos/lasso +12 -0
  121. data/rouge-5.0.0/lib/rouge/demos/lean +8 -0
  122. data/rouge-5.0.0/lib/rouge/demos/liquid +10 -0
  123. data/rouge-5.0.0/lib/rouge/demos/literate_coffeescript +3 -0
  124. data/rouge-5.0.0/lib/rouge/demos/literate_haskell +7 -0
  125. data/rouge-5.0.0/lib/rouge/demos/livescript +15 -0
  126. data/rouge-5.0.0/lib/rouge/demos/llvm +20 -0
  127. data/rouge-5.0.0/lib/rouge/demos/lua +12 -0
  128. data/rouge-5.0.0/lib/rouge/demos/lustre +6 -0
  129. data/rouge-5.0.0/lib/rouge/demos/lutin +18 -0
  130. data/rouge-5.0.0/lib/rouge/demos/m68k +16 -0
  131. data/rouge-5.0.0/lib/rouge/demos/magik +6 -0
  132. data/rouge-5.0.0/lib/rouge/demos/make +6 -0
  133. data/rouge-5.0.0/lib/rouge/demos/markdown +4 -0
  134. data/rouge-5.0.0/lib/rouge/demos/mason +22 -0
  135. data/rouge-5.0.0/lib/rouge/demos/mathematica +8 -0
  136. data/rouge-5.0.0/lib/rouge/demos/matlab +6 -0
  137. data/rouge-5.0.0/lib/rouge/demos/meson +10 -0
  138. data/rouge-5.0.0/lib/rouge/demos/minizinc +23 -0
  139. data/rouge-5.0.0/lib/rouge/demos/mojo +10 -0
  140. data/rouge-5.0.0/lib/rouge/demos/moonscript +16 -0
  141. data/rouge-5.0.0/lib/rouge/demos/mosel +10 -0
  142. data/rouge-5.0.0/lib/rouge/demos/msgtrans +4 -0
  143. data/rouge-5.0.0/lib/rouge/demos/mxml +22 -0
  144. data/rouge-5.0.0/lib/rouge/demos/nasm +26 -0
  145. data/rouge-5.0.0/lib/rouge/demos/nesasm +11 -0
  146. data/rouge-5.0.0/lib/rouge/demos/nginx +5 -0
  147. data/rouge-5.0.0/lib/rouge/demos/nial +35 -0
  148. data/rouge-5.0.0/lib/rouge/demos/nim +27 -0
  149. data/rouge-5.0.0/lib/rouge/demos/nix +19 -0
  150. data/rouge-5.0.0/lib/rouge/demos/objective_c +18 -0
  151. data/rouge-5.0.0/lib/rouge/demos/objective_cpp +17 -0
  152. data/rouge-5.0.0/lib/rouge/demos/ocaml +12 -0
  153. data/rouge-5.0.0/lib/rouge/demos/ocl +4 -0
  154. data/rouge-5.0.0/lib/rouge/demos/openedge +4 -0
  155. data/rouge-5.0.0/lib/rouge/demos/opentype_feature_file +5 -0
  156. data/rouge-5.0.0/lib/rouge/demos/p4 +99 -0
  157. data/rouge-5.0.0/lib/rouge/demos/pascal +14 -0
  158. data/rouge-5.0.0/lib/rouge/demos/pdf +29 -0
  159. data/rouge-5.0.0/lib/rouge/demos/perl +5 -0
  160. data/rouge-5.0.0/lib/rouge/demos/php +3 -0
  161. data/rouge-5.0.0/lib/rouge/demos/plaintext +1 -0
  162. data/rouge-5.0.0/lib/rouge/demos/plist +11 -0
  163. data/rouge-5.0.0/lib/rouge/demos/plsql +2 -0
  164. data/rouge-5.0.0/lib/rouge/demos/pony +17 -0
  165. data/rouge-5.0.0/lib/rouge/demos/postscript +9 -0
  166. data/rouge-5.0.0/lib/rouge/demos/powershell +13 -0
  167. data/rouge-5.0.0/lib/rouge/demos/praat +26 -0
  168. data/rouge-5.0.0/lib/rouge/demos/prolog +9 -0
  169. data/rouge-5.0.0/lib/rouge/demos/prometheus +9 -0
  170. data/rouge-5.0.0/lib/rouge/demos/properties +7 -0
  171. data/rouge-5.0.0/lib/rouge/demos/protobuf +5 -0
  172. data/rouge-5.0.0/lib/rouge/demos/puppet +6 -0
  173. data/rouge-5.0.0/lib/rouge/demos/python +6 -0
  174. data/rouge-5.0.0/lib/rouge/demos/q +8 -0
  175. data/rouge-5.0.0/lib/rouge/demos/qml +9 -0
  176. data/rouge-5.0.0/lib/rouge/demos/r +8 -0
  177. data/rouge-5.0.0/lib/rouge/demos/racket +24 -0
  178. data/rouge-5.0.0/lib/rouge/demos/reasonml +12 -0
  179. data/rouge-5.0.0/lib/rouge/demos/rego +8 -0
  180. data/rouge-5.0.0/lib/rouge/demos/rescript +26 -0
  181. data/rouge-5.0.0/lib/rouge/demos/rml +33 -0
  182. data/rouge-5.0.0/lib/rouge/demos/robot_framework +27 -0
  183. data/rouge-5.0.0/lib/rouge/demos/rocq +16 -0
  184. data/rouge-5.0.0/lib/rouge/demos/ruby +9 -0
  185. data/rouge-5.0.0/lib/rouge/demos/rust +12 -0
  186. data/rouge-5.0.0/lib/rouge/demos/sas +13 -0
  187. data/rouge-5.0.0/lib/rouge/demos/sass +3 -0
  188. data/rouge-5.0.0/lib/rouge/demos/scala +3 -0
  189. data/rouge-5.0.0/lib/rouge/demos/scheme +4 -0
  190. data/rouge-5.0.0/lib/rouge/demos/scss +5 -0
  191. data/rouge-5.0.0/lib/rouge/demos/sed +4 -0
  192. data/rouge-5.0.0/lib/rouge/demos/shell +2 -0
  193. data/rouge-5.0.0/lib/rouge/demos/sieve +10 -0
  194. data/rouge-5.0.0/lib/rouge/demos/slice +10 -0
  195. data/rouge-5.0.0/lib/rouge/demos/slim +17 -0
  196. data/rouge-5.0.0/lib/rouge/demos/smalltalk +6 -0
  197. data/rouge-5.0.0/lib/rouge/demos/smarty +11 -0
  198. data/rouge-5.0.0/lib/rouge/demos/sml +4 -0
  199. data/rouge-5.0.0/lib/rouge/demos/sparql +6 -0
  200. data/rouge-5.0.0/lib/rouge/demos/sqf +14 -0
  201. data/rouge-5.0.0/lib/rouge/demos/sql +1 -0
  202. data/rouge-5.0.0/lib/rouge/demos/ssh +4 -0
  203. data/rouge-5.0.0/lib/rouge/demos/stan +13 -0
  204. data/rouge-5.0.0/lib/rouge/demos/stata +14 -0
  205. data/rouge-5.0.0/lib/rouge/demos/supercollider +11 -0
  206. data/rouge-5.0.0/lib/rouge/demos/svelte +29 -0
  207. data/rouge-5.0.0/lib/rouge/demos/swift +5 -0
  208. data/rouge-5.0.0/lib/rouge/demos/systemd +4 -0
  209. data/rouge-5.0.0/lib/rouge/demos/syzlang +15 -0
  210. data/rouge-5.0.0/lib/rouge/demos/syzprog +8 -0
  211. data/rouge-5.0.0/lib/rouge/demos/tap +5 -0
  212. data/rouge-5.0.0/lib/rouge/demos/tcl +1 -0
  213. data/rouge-5.0.0/lib/rouge/demos/terraform +16 -0
  214. data/rouge-5.0.0/lib/rouge/demos/tex +1 -0
  215. data/rouge-5.0.0/lib/rouge/demos/thrift +15 -0
  216. data/rouge-5.0.0/lib/rouge/demos/toml +9 -0
  217. data/rouge-5.0.0/lib/rouge/demos/tsx +17 -0
  218. data/rouge-5.0.0/lib/rouge/demos/ttcn3 +6 -0
  219. data/rouge-5.0.0/lib/rouge/demos/tulip +13 -0
  220. data/rouge-5.0.0/lib/rouge/demos/turtle +26 -0
  221. data/rouge-5.0.0/lib/rouge/demos/twig +9 -0
  222. data/rouge-5.0.0/lib/rouge/demos/typescript +1 -0
  223. data/rouge-5.0.0/lib/rouge/demos/vala +8 -0
  224. data/rouge-5.0.0/lib/rouge/demos/vb +4 -0
  225. data/rouge-5.0.0/lib/rouge/demos/vcl +12 -0
  226. data/rouge-5.0.0/lib/rouge/demos/velocity +9 -0
  227. data/rouge-5.0.0/lib/rouge/demos/verilog +27 -0
  228. data/rouge-5.0.0/lib/rouge/demos/veryl +24 -0
  229. data/rouge-5.0.0/lib/rouge/demos/vhdl +23 -0
  230. data/rouge-5.0.0/lib/rouge/demos/viml +14 -0
  231. data/rouge-5.0.0/lib/rouge/demos/vue +11 -0
  232. data/rouge-5.0.0/lib/rouge/demos/wollok +11 -0
  233. data/rouge-5.0.0/lib/rouge/demos/xml +2 -0
  234. data/rouge-5.0.0/lib/rouge/demos/xojo +14 -0
  235. data/rouge-5.0.0/lib/rouge/demos/xpath +2 -0
  236. data/rouge-5.0.0/lib/rouge/demos/xquery +22 -0
  237. data/rouge-5.0.0/lib/rouge/demos/yaml +4 -0
  238. data/rouge-5.0.0/lib/rouge/demos/yang +17 -0
  239. data/rouge-5.0.0/lib/rouge/demos/zig +6 -0
  240. data/rouge-5.0.0/lib/rouge/eager.rb +3 -0
  241. data/rouge-5.0.0/lib/rouge/formatter.rb +112 -0
  242. data/rouge-5.0.0/lib/rouge/formatters/html.rb +64 -0
  243. data/rouge-5.0.0/lib/rouge/formatters/html_debug.rb +16 -0
  244. data/rouge-5.0.0/lib/rouge/formatters/html_inline.rb +30 -0
  245. data/rouge-5.0.0/lib/rouge/formatters/html_legacy.rb +56 -0
  246. data/rouge-5.0.0/lib/rouge/formatters/html_legacy_table.rb +57 -0
  247. data/rouge-5.0.0/lib/rouge/formatters/html_line_highlighter.rb +31 -0
  248. data/rouge-5.0.0/lib/rouge/formatters/html_line_table.rb +56 -0
  249. data/rouge-5.0.0/lib/rouge/formatters/html_linewise.rb +31 -0
  250. data/rouge-5.0.0/lib/rouge/formatters/html_pygments.rb +23 -0
  251. data/rouge-5.0.0/lib/rouge/formatters/html_table.rb +77 -0
  252. data/rouge-5.0.0/lib/rouge/formatters/null.rb +20 -0
  253. data/rouge-5.0.0/lib/rouge/formatters/terminal256.rb +198 -0
  254. data/rouge-5.0.0/lib/rouge/formatters/terminal_truecolor.rb +37 -0
  255. data/rouge-5.0.0/lib/rouge/formatters/tex.rb +92 -0
  256. data/rouge-5.0.0/lib/rouge/guesser.rb +57 -0
  257. data/rouge-5.0.0/lib/rouge/guessers/disambiguation.rb +172 -0
  258. data/rouge-5.0.0/lib/rouge/guessers/filename.rb +27 -0
  259. data/rouge-5.0.0/lib/rouge/guessers/glob_mapping.rb +45 -0
  260. data/rouge-5.0.0/lib/rouge/guessers/mimetype.rb +16 -0
  261. data/rouge-5.0.0/lib/rouge/guessers/modeline.rb +46 -0
  262. data/rouge-5.0.0/lib/rouge/guessers/source.rb +31 -0
  263. data/rouge-5.0.0/lib/rouge/guessers/util.rb +34 -0
  264. data/rouge-5.0.0/lib/rouge/lexer.rb +556 -0
  265. data/rouge-5.0.0/lib/rouge/lexers/abap/builtins.rb +187 -0
  266. data/rouge-5.0.0/lib/rouge/lexers/abap.rb +132 -0
  267. data/rouge-5.0.0/lib/rouge/lexers/actionscript.rb +196 -0
  268. data/rouge-5.0.0/lib/rouge/lexers/ada.rb +162 -0
  269. data/rouge-5.0.0/lib/rouge/lexers/apache/keywords.rb +16 -0
  270. data/rouge-5.0.0/lib/rouge/lexers/apache.rb +84 -0
  271. data/rouge-5.0.0/lib/rouge/lexers/apex.rb +128 -0
  272. data/rouge-5.0.0/lib/rouge/lexers/apiblueprint.rb +49 -0
  273. data/rouge-5.0.0/lib/rouge/lexers/apple_script.rb +370 -0
  274. data/rouge-5.0.0/lib/rouge/lexers/armasm.rb +145 -0
  275. data/rouge-5.0.0/lib/rouge/lexers/augeas.rb +93 -0
  276. data/rouge-5.0.0/lib/rouge/lexers/awk.rb +162 -0
  277. data/rouge-5.0.0/lib/rouge/lexers/batchfile.rb +165 -0
  278. data/rouge-5.0.0/lib/rouge/lexers/bbcbasic.rb +112 -0
  279. data/rouge-5.0.0/lib/rouge/lexers/bibtex.rb +115 -0
  280. data/rouge-5.0.0/lib/rouge/lexers/bicep.rb +111 -0
  281. data/rouge-5.0.0/lib/rouge/lexers/biml.rb +70 -0
  282. data/rouge-5.0.0/lib/rouge/lexers/bpf.rb +118 -0
  283. data/rouge-5.0.0/lib/rouge/lexers/brainfuck.rb +54 -0
  284. data/rouge-5.0.0/lib/rouge/lexers/brightscript.rb +146 -0
  285. data/rouge-5.0.0/lib/rouge/lexers/bsl.rb +82 -0
  286. data/rouge-5.0.0/lib/rouge/lexers/c.rb +204 -0
  287. data/rouge-5.0.0/lib/rouge/lexers/ceylon.rb +96 -0
  288. data/rouge-5.0.0/lib/rouge/lexers/cfscript.rb +154 -0
  289. data/rouge-5.0.0/lib/rouge/lexers/cisco_ios.rb +83 -0
  290. data/rouge-5.0.0/lib/rouge/lexers/clean.rb +156 -0
  291. data/rouge-5.0.0/lib/rouge/lexers/clojure.rb +113 -0
  292. data/rouge-5.0.0/lib/rouge/lexers/cmake.rb +218 -0
  293. data/rouge-5.0.0/lib/rouge/lexers/cmhg.rb +34 -0
  294. data/rouge-5.0.0/lib/rouge/lexers/cobol.rb +137 -0
  295. data/rouge-5.0.0/lib/rouge/lexers/codeowners.rb +30 -0
  296. data/rouge-5.0.0/lib/rouge/lexers/coffeescript.rb +215 -0
  297. data/rouge-5.0.0/lib/rouge/lexers/common_lisp.rb +346 -0
  298. data/rouge-5.0.0/lib/rouge/lexers/conf.rb +25 -0
  299. data/rouge-5.0.0/lib/rouge/lexers/console.rb +196 -0
  300. data/rouge-5.0.0/lib/rouge/lexers/cpp.rb +102 -0
  301. data/rouge-5.0.0/lib/rouge/lexers/crystal.rb +435 -0
  302. data/rouge-5.0.0/lib/rouge/lexers/csharp.rb +118 -0
  303. data/rouge-5.0.0/lib/rouge/lexers/css.rb +337 -0
  304. data/rouge-5.0.0/lib/rouge/lexers/csvs.rb +44 -0
  305. data/rouge-5.0.0/lib/rouge/lexers/cuda.rb +35 -0
  306. data/rouge-5.0.0/lib/rouge/lexers/cypher.rb +116 -0
  307. data/rouge-5.0.0/lib/rouge/lexers/cython.rb +127 -0
  308. data/rouge-5.0.0/lib/rouge/lexers/d.rb +177 -0
  309. data/rouge-5.0.0/lib/rouge/lexers/dafny.rb +128 -0
  310. data/rouge-5.0.0/lib/rouge/lexers/dart.rb +108 -0
  311. data/rouge-5.0.0/lib/rouge/lexers/datastudio.rb +138 -0
  312. data/rouge-5.0.0/lib/rouge/lexers/diff.rb +47 -0
  313. data/rouge-5.0.0/lib/rouge/lexers/digdag.rb +69 -0
  314. data/rouge-5.0.0/lib/rouge/lexers/docker.rb +55 -0
  315. data/rouge-5.0.0/lib/rouge/lexers/dot.rb +70 -0
  316. data/rouge-5.0.0/lib/rouge/lexers/dylan.rb +109 -0
  317. data/rouge-5.0.0/lib/rouge/lexers/ecl.rb +175 -0
  318. data/rouge-5.0.0/lib/rouge/lexers/eex.rb +52 -0
  319. data/rouge-5.0.0/lib/rouge/lexers/eiffel.rb +65 -0
  320. data/rouge-5.0.0/lib/rouge/lexers/elixir.rb +158 -0
  321. data/rouge-5.0.0/lib/rouge/lexers/elm.rb +90 -0
  322. data/rouge-5.0.0/lib/rouge/lexers/email.rb +39 -0
  323. data/rouge-5.0.0/lib/rouge/lexers/epp.rb +51 -0
  324. data/rouge-5.0.0/lib/rouge/lexers/erb.rb +53 -0
  325. data/rouge-5.0.0/lib/rouge/lexers/erlang.rb +115 -0
  326. data/rouge-5.0.0/lib/rouge/lexers/escape.rb +58 -0
  327. data/rouge-5.0.0/lib/rouge/lexers/factor.rb +303 -0
  328. data/rouge-5.0.0/lib/rouge/lexers/fluent.rb +74 -0
  329. data/rouge-5.0.0/lib/rouge/lexers/fortran.rb +178 -0
  330. data/rouge-5.0.0/lib/rouge/lexers/freefem.rb +240 -0
  331. data/rouge-5.0.0/lib/rouge/lexers/fsharp.rb +120 -0
  332. data/rouge-5.0.0/lib/rouge/lexers/gdscript.rb +171 -0
  333. data/rouge-5.0.0/lib/rouge/lexers/ghc_cmm.rb +340 -0
  334. data/rouge-5.0.0/lib/rouge/lexers/ghc_core.rb +152 -0
  335. data/rouge-5.0.0/lib/rouge/lexers/gherkin/keywords.rb +23 -0
  336. data/rouge-5.0.0/lib/rouge/lexers/gherkin.rb +142 -0
  337. data/rouge-5.0.0/lib/rouge/lexers/gjs.rb +39 -0
  338. data/rouge-5.0.0/lib/rouge/lexers/glsl/builtins.rb +17 -0
  339. data/rouge-5.0.0/lib/rouge/lexers/glsl.rb +69 -0
  340. data/rouge-5.0.0/lib/rouge/lexers/go.rb +177 -0
  341. data/rouge-5.0.0/lib/rouge/lexers/gradle.rb +38 -0
  342. data/rouge-5.0.0/lib/rouge/lexers/graphql.rb +261 -0
  343. data/rouge-5.0.0/lib/rouge/lexers/groovy.rb +119 -0
  344. data/rouge-5.0.0/lib/rouge/lexers/gts.rb +39 -0
  345. data/rouge-5.0.0/lib/rouge/lexers/hack.rb +47 -0
  346. data/rouge-5.0.0/lib/rouge/lexers/haml.rb +226 -0
  347. data/rouge-5.0.0/lib/rouge/lexers/handlebars.rb +91 -0
  348. data/rouge-5.0.0/lib/rouge/lexers/haskell.rb +207 -0
  349. data/rouge-5.0.0/lib/rouge/lexers/haxe.rb +265 -0
  350. data/rouge-5.0.0/lib/rouge/lexers/hcl.rb +166 -0
  351. data/rouge-5.0.0/lib/rouge/lexers/hlsl.rb +166 -0
  352. data/rouge-5.0.0/lib/rouge/lexers/hocon.rb +86 -0
  353. data/rouge-5.0.0/lib/rouge/lexers/hql.rb +135 -0
  354. data/rouge-5.0.0/lib/rouge/lexers/html.rb +141 -0
  355. data/rouge-5.0.0/lib/rouge/lexers/http.rb +87 -0
  356. data/rouge-5.0.0/lib/rouge/lexers/hylang.rb +93 -0
  357. data/rouge-5.0.0/lib/rouge/lexers/idlang.rb +312 -0
  358. data/rouge-5.0.0/lib/rouge/lexers/idris.rb +210 -0
  359. data/rouge-5.0.0/lib/rouge/lexers/iecst.rb +92 -0
  360. data/rouge-5.0.0/lib/rouge/lexers/igorpro/builtins.rb +1530 -0
  361. data/rouge-5.0.0/lib/rouge/lexers/igorpro.rb +193 -0
  362. data/rouge-5.0.0/lib/rouge/lexers/ini.rb +56 -0
  363. data/rouge-5.0.0/lib/rouge/lexers/io.rb +69 -0
  364. data/rouge-5.0.0/lib/rouge/lexers/irb.rb +73 -0
  365. data/rouge-5.0.0/lib/rouge/lexers/isabelle.rb +251 -0
  366. data/rouge-5.0.0/lib/rouge/lexers/isbl.rb +61 -0
  367. data/rouge-5.0.0/lib/rouge/lexers/j.rb +244 -0
  368. data/rouge-5.0.0/lib/rouge/lexers/janet.rb +218 -0
  369. data/rouge-5.0.0/lib/rouge/lexers/java.rb +92 -0
  370. data/rouge-5.0.0/lib/rouge/lexers/javascript.rb +315 -0
  371. data/rouge-5.0.0/lib/rouge/lexers/jinja.rb +169 -0
  372. data/rouge-5.0.0/lib/rouge/lexers/jsl.rb +66 -0
  373. data/rouge-5.0.0/lib/rouge/lexers/json.rb +72 -0
  374. data/rouge-5.0.0/lib/rouge/lexers/json5.rb +74 -0
  375. data/rouge-5.0.0/lib/rouge/lexers/json_doc.rb +26 -0
  376. data/rouge-5.0.0/lib/rouge/lexers/jsonnet.rb +153 -0
  377. data/rouge-5.0.0/lib/rouge/lexers/jsp.rb +119 -0
  378. data/rouge-5.0.0/lib/rouge/lexers/jsx.rb +91 -0
  379. data/rouge-5.0.0/lib/rouge/lexers/julia.rb +293 -0
  380. data/rouge-5.0.0/lib/rouge/lexers/kick_assembler.rb +100 -0
  381. data/rouge-5.0.0/lib/rouge/lexers/kotlin.rb +150 -0
  382. data/rouge-5.0.0/lib/rouge/lexers/lasso/keywords.rb +20 -0
  383. data/rouge-5.0.0/lib/rouge/lexers/lasso.rb +212 -0
  384. data/rouge-5.0.0/lib/rouge/lexers/lean.rb +164 -0
  385. data/rouge-5.0.0/lib/rouge/lexers/liquid.rb +284 -0
  386. data/rouge-5.0.0/lib/rouge/lexers/literate_coffeescript.rb +34 -0
  387. data/rouge-5.0.0/lib/rouge/lexers/literate_haskell.rb +37 -0
  388. data/rouge-5.0.0/lib/rouge/lexers/livescript.rb +310 -0
  389. data/rouge-5.0.0/lib/rouge/lexers/llvm/keywords.rb +16 -0
  390. data/rouge-5.0.0/lib/rouge/lexers/llvm.rb +59 -0
  391. data/rouge-5.0.0/lib/rouge/lexers/lua/keywords.rb +26 -0
  392. data/rouge-5.0.0/lib/rouge/lexers/lua.rb +186 -0
  393. data/rouge-5.0.0/lib/rouge/lexers/lustre.rb +79 -0
  394. data/rouge-5.0.0/lib/rouge/lexers/lutin.rb +34 -0
  395. data/rouge-5.0.0/lib/rouge/lexers/m68k.rb +143 -0
  396. data/rouge-5.0.0/lib/rouge/lexers/magik.rb +127 -0
  397. data/rouge-5.0.0/lib/rouge/lexers/make.rb +148 -0
  398. data/rouge-5.0.0/lib/rouge/lexers/markdown.rb +183 -0
  399. data/rouge-5.0.0/lib/rouge/lexers/mason.rb +110 -0
  400. data/rouge-5.0.0/lib/rouge/lexers/mathematica/keywords.rb +15 -0
  401. data/rouge-5.0.0/lib/rouge/lexers/mathematica.rb +95 -0
  402. data/rouge-5.0.0/lib/rouge/lexers/matlab/keywords.rb +15 -0
  403. data/rouge-5.0.0/lib/rouge/lexers/matlab.rb +81 -0
  404. data/rouge-5.0.0/lib/rouge/lexers/meson.rb +158 -0
  405. data/rouge-5.0.0/lib/rouge/lexers/minizinc.rb +87 -0
  406. data/rouge-5.0.0/lib/rouge/lexers/mojo.rb +39 -0
  407. data/rouge-5.0.0/lib/rouge/lexers/moonscript.rb +117 -0
  408. data/rouge-5.0.0/lib/rouge/lexers/mosel.rb +228 -0
  409. data/rouge-5.0.0/lib/rouge/lexers/msgtrans.rb +26 -0
  410. data/rouge-5.0.0/lib/rouge/lexers/mxml.rb +69 -0
  411. data/rouge-5.0.0/lib/rouge/lexers/nasm.rb +73 -0
  412. data/rouge-5.0.0/lib/rouge/lexers/nesasm.rb +78 -0
  413. data/rouge-5.0.0/lib/rouge/lexers/nginx.rb +73 -0
  414. data/rouge-5.0.0/lib/rouge/lexers/nial.rb +165 -0
  415. data/rouge-5.0.0/lib/rouge/lexers/nim.rb +154 -0
  416. data/rouge-5.0.0/lib/rouge/lexers/nix.rb +213 -0
  417. data/rouge-5.0.0/lib/rouge/lexers/objective_c/common.rb +182 -0
  418. data/rouge-5.0.0/lib/rouge/lexers/objective_c.rb +21 -0
  419. data/rouge-5.0.0/lib/rouge/lexers/objective_cpp.rb +32 -0
  420. data/rouge-5.0.0/lib/rouge/lexers/ocaml/common.rb +53 -0
  421. data/rouge-5.0.0/lib/rouge/lexers/ocaml.rb +65 -0
  422. data/rouge-5.0.0/lib/rouge/lexers/ocl.rb +84 -0
  423. data/rouge-5.0.0/lib/rouge/lexers/openedge.rb +632 -0
  424. data/rouge-5.0.0/lib/rouge/lexers/opentype_feature_file.rb +97 -0
  425. data/rouge-5.0.0/lib/rouge/lexers/p4.rb +81 -0
  426. data/rouge-5.0.0/lib/rouge/lexers/pascal.rb +68 -0
  427. data/rouge-5.0.0/lib/rouge/lexers/pdf.rb +109 -0
  428. data/rouge-5.0.0/lib/rouge/lexers/perl.rb +251 -0
  429. data/rouge-5.0.0/lib/rouge/lexers/php/keywords.rb +150 -0
  430. data/rouge-5.0.0/lib/rouge/lexers/php.rb +470 -0
  431. data/rouge-5.0.0/lib/rouge/lexers/plain_text.rb +27 -0
  432. data/rouge-5.0.0/lib/rouge/lexers/plist.rb +47 -0
  433. data/rouge-5.0.0/lib/rouge/lexers/plsql.rb +577 -0
  434. data/rouge-5.0.0/lib/rouge/lexers/pony.rb +94 -0
  435. data/rouge-5.0.0/lib/rouge/lexers/postscript.rb +93 -0
  436. data/rouge-5.0.0/lib/rouge/lexers/powershell.rb +248 -0
  437. data/rouge-5.0.0/lib/rouge/lexers/praat.rb +438 -0
  438. data/rouge-5.0.0/lib/rouge/lexers/prolog.rb +67 -0
  439. data/rouge-5.0.0/lib/rouge/lexers/prometheus.rb +122 -0
  440. data/rouge-5.0.0/lib/rouge/lexers/properties.rb +52 -0
  441. data/rouge-5.0.0/lib/rouge/lexers/protobuf.rb +71 -0
  442. data/rouge-5.0.0/lib/rouge/lexers/puppet.rb +129 -0
  443. data/rouge-5.0.0/lib/rouge/lexers/python.rb +340 -0
  444. data/rouge-5.0.0/lib/rouge/lexers/q.rb +125 -0
  445. data/rouge-5.0.0/lib/rouge/lexers/qml.rb +74 -0
  446. data/rouge-5.0.0/lib/rouge/lexers/r.rb +89 -0
  447. data/rouge-5.0.0/lib/rouge/lexers/racket.rb +568 -0
  448. data/rouge-5.0.0/lib/rouge/lexers/reasonml.rb +66 -0
  449. data/rouge-5.0.0/lib/rouge/lexers/rego.rb +60 -0
  450. data/rouge-5.0.0/lib/rouge/lexers/rescript.rb +119 -0
  451. data/rouge-5.0.0/lib/rouge/lexers/rml.rb +142 -0
  452. data/rouge-5.0.0/lib/rouge/lexers/robot_framework.rb +249 -0
  453. data/rouge-5.0.0/lib/rouge/lexers/rocq.rb +264 -0
  454. data/rouge-5.0.0/lib/rouge/lexers/ruby.rb +481 -0
  455. data/rouge-5.0.0/lib/rouge/lexers/rust.rb +261 -0
  456. data/rouge-5.0.0/lib/rouge/lexers/sas.rb +562 -0
  457. data/rouge-5.0.0/lib/rouge/lexers/sass/common.rb +182 -0
  458. data/rouge-5.0.0/lib/rouge/lexers/sass.rb +75 -0
  459. data/rouge-5.0.0/lib/rouge/lexers/scala.rb +172 -0
  460. data/rouge-5.0.0/lib/rouge/lexers/scheme.rb +113 -0
  461. data/rouge-5.0.0/lib/rouge/lexers/scss.rb +35 -0
  462. data/rouge-5.0.0/lib/rouge/lexers/sed.rb +173 -0
  463. data/rouge-5.0.0/lib/rouge/lexers/shell.rb +205 -0
  464. data/rouge-5.0.0/lib/rouge/lexers/sieve.rb +97 -0
  465. data/rouge-5.0.0/lib/rouge/lexers/slice.rb +32 -0
  466. data/rouge-5.0.0/lib/rouge/lexers/slim.rb +229 -0
  467. data/rouge-5.0.0/lib/rouge/lexers/smalltalk.rb +117 -0
  468. data/rouge-5.0.0/lib/rouge/lexers/smarty.rb +81 -0
  469. data/rouge-5.0.0/lib/rouge/lexers/sml.rb +345 -0
  470. data/rouge-5.0.0/lib/rouge/lexers/sparql.rb +131 -0
  471. data/rouge-5.0.0/lib/rouge/lexers/sqf/keywords.rb +14 -0
  472. data/rouge-5.0.0/lib/rouge/lexers/sqf.rb +108 -0
  473. data/rouge-5.0.0/lib/rouge/lexers/sql.rb +161 -0
  474. data/rouge-5.0.0/lib/rouge/lexers/ssh.rb +33 -0
  475. data/rouge-5.0.0/lib/rouge/lexers/stan.rb +445 -0
  476. data/rouge-5.0.0/lib/rouge/lexers/stata.rb +165 -0
  477. data/rouge-5.0.0/lib/rouge/lexers/supercollider.rb +115 -0
  478. data/rouge-5.0.0/lib/rouge/lexers/svelte.rb +91 -0
  479. data/rouge-5.0.0/lib/rouge/lexers/swift.rb +202 -0
  480. data/rouge-5.0.0/lib/rouge/lexers/systemd.rb +34 -0
  481. data/rouge-5.0.0/lib/rouge/lexers/syzlang.rb +316 -0
  482. data/rouge-5.0.0/lib/rouge/lexers/syzprog.rb +122 -0
  483. data/rouge-5.0.0/lib/rouge/lexers/tap.rb +88 -0
  484. data/rouge-5.0.0/lib/rouge/lexers/tcl.rb +198 -0
  485. data/rouge-5.0.0/lib/rouge/lexers/terraform.rb +121 -0
  486. data/rouge-5.0.0/lib/rouge/lexers/tex.rb +70 -0
  487. data/rouge-5.0.0/lib/rouge/lexers/thrift.rb +120 -0
  488. data/rouge-5.0.0/lib/rouge/lexers/toml.rb +124 -0
  489. data/rouge-5.0.0/lib/rouge/lexers/tsx.rb +33 -0
  490. data/rouge-5.0.0/lib/rouge/lexers/ttcn3.rb +117 -0
  491. data/rouge-5.0.0/lib/rouge/lexers/tulip.rb +107 -0
  492. data/rouge-5.0.0/lib/rouge/lexers/turtle.rb +61 -0
  493. data/rouge-5.0.0/lib/rouge/lexers/twig.rb +40 -0
  494. data/rouge-5.0.0/lib/rouge/lexers/typescript/common.rb +60 -0
  495. data/rouge-5.0.0/lib/rouge/lexers/typescript.rb +23 -0
  496. data/rouge-5.0.0/lib/rouge/lexers/vala.rb +78 -0
  497. data/rouge-5.0.0/lib/rouge/lexers/varnish.rb +168 -0
  498. data/rouge-5.0.0/lib/rouge/lexers/vb.rb +165 -0
  499. data/rouge-5.0.0/lib/rouge/lexers/velocity.rb +71 -0
  500. data/rouge-5.0.0/lib/rouge/lexers/verilog.rb +163 -0
  501. data/rouge-5.0.0/lib/rouge/lexers/veryl.rb +109 -0
  502. data/rouge-5.0.0/lib/rouge/lexers/vhdl.rb +98 -0
  503. data/rouge-5.0.0/lib/rouge/lexers/viml/keywords.rb +19 -0
  504. data/rouge-5.0.0/lib/rouge/lexers/viml.rb +68 -0
  505. data/rouge-5.0.0/lib/rouge/lexers/vue.rb +127 -0
  506. data/rouge-5.0.0/lib/rouge/lexers/wollok.rb +107 -0
  507. data/rouge-5.0.0/lib/rouge/lexers/xml.rb +56 -0
  508. data/rouge-5.0.0/lib/rouge/lexers/xojo.rb +61 -0
  509. data/rouge-5.0.0/lib/rouge/lexers/xpath.rb +332 -0
  510. data/rouge-5.0.0/lib/rouge/lexers/xquery.rb +146 -0
  511. data/rouge-5.0.0/lib/rouge/lexers/yaml.rb +388 -0
  512. data/rouge-5.0.0/lib/rouge/lexers/yang.rb +115 -0
  513. data/rouge-5.0.0/lib/rouge/lexers/zig.rb +139 -0
  514. data/rouge-5.0.0/lib/rouge/plugins/redcarpet.rb +38 -0
  515. data/rouge-5.0.0/lib/rouge/regex_lexer.rb +522 -0
  516. data/rouge-5.0.0/lib/rouge/template_lexer.rb +21 -0
  517. data/rouge-5.0.0/lib/rouge/tex_theme_renderer.rb +132 -0
  518. data/rouge-5.0.0/lib/rouge/text_analyzer.rb +50 -0
  519. data/rouge-5.0.0/lib/rouge/theme.rb +218 -0
  520. data/rouge-5.0.0/lib/rouge/themes/base16.rb +137 -0
  521. data/rouge-5.0.0/lib/rouge/themes/bw.rb +43 -0
  522. data/rouge-5.0.0/lib/rouge/themes/colorful.rb +70 -0
  523. data/rouge-5.0.0/lib/rouge/themes/github.rb +149 -0
  524. data/rouge-5.0.0/lib/rouge/themes/gruvbox.rb +176 -0
  525. data/rouge-5.0.0/lib/rouge/themes/igor_pro.rb +25 -0
  526. data/rouge-5.0.0/lib/rouge/themes/magritte.rb +80 -0
  527. data/rouge-5.0.0/lib/rouge/themes/molokai.rb +84 -0
  528. data/rouge-5.0.0/lib/rouge/themes/monokai.rb +95 -0
  529. data/rouge-5.0.0/lib/rouge/themes/monokai_sublime.rb +94 -0
  530. data/rouge-5.0.0/lib/rouge/themes/pastie.rb +72 -0
  531. data/rouge-5.0.0/lib/rouge/themes/thankful_eyes.rb +77 -0
  532. data/rouge-5.0.0/lib/rouge/themes/tulip.rb +72 -0
  533. data/rouge-5.0.0/lib/rouge/token.rb +192 -0
  534. data/rouge-5.0.0/lib/rouge/util.rb +102 -0
  535. data/rouge-5.0.0/lib/rouge/version.rb +8 -0
  536. data/rouge-5.0.0/lib/rouge.rb +117 -0
  537. data/rouge-5.0.0/lib/rubocop/cop/rouge/no_building_alternation_pattern_in_regexp.rb +71 -0
  538. data/rouge-5.0.0/lib/rubocop/cop/rouge/no_huge_collections.rb +37 -0
  539. data/rouge-5.0.0/rouge.gemspec +29 -0
  540. metadata +579 -0
@@ -0,0 +1,556 @@
1
+ # -*- coding: utf-8 -*- #
2
+ # frozen_string_literal: true
3
+
4
+ module Rouge
5
+ # @abstract
6
+ # A lexer transforms text into a stream of `[token, chunk]` pairs.
7
+ class Lexer
8
+ include Token::Tokens
9
+
10
+ @option_docs = {}
11
+
12
+ class << self
13
+ # Lexes `stream` with the given options. The lex is delegated to a
14
+ # new instance.
15
+ #
16
+ # @see #lex
17
+ def lex(stream, opts={}, &b)
18
+ new(opts).lex(stream, &b)
19
+ end
20
+
21
+ # In case #continue_lex is called statically, we simply
22
+ # begin a new lex from the beginning, since there is no state.
23
+ #
24
+ # @see #continue_lex
25
+ def continue_lex(*a, &b)
26
+ lex(*a, &b)
27
+ end
28
+
29
+ # Given a name in string, return the correct lexer class.
30
+ # @param [String] name
31
+ # @return [Class<Rouge::Lexer>,nil]
32
+ def find(name)
33
+ registry[name.to_s]
34
+ end
35
+
36
+ # Same as ::find_fancy, except instead of returning an instantiated
37
+ # lexer, returns a pair of [lexer_class, options], so that you can
38
+ # modify or provide additional options to the lexer.
39
+ #
40
+ # Please note: the lexer class might be nil!
41
+ def lookup_fancy(str, code=nil, default_options={})
42
+ if str && !str.include?('?') && str != 'guess'
43
+ lexer_class = find(str)
44
+ return [lexer_class, default_options]
45
+ end
46
+
47
+ name, opts = str ? str.split('?', 2) : [nil, '']
48
+
49
+ # parse the options hash from a cgi-style string
50
+ cgi_opts = Hash.new { |hash, key| hash[key] = [] }
51
+ URI.decode_www_form(opts || '').each do |k, val|
52
+ cgi_opts[k] << val
53
+ end
54
+ cgi_opts.transform_values! do |vals|
55
+ case vals.size
56
+ when 0 then true
57
+ when 1 then vals[0]
58
+ else vals
59
+ end
60
+ end
61
+
62
+ opts = default_options.merge(cgi_opts)
63
+
64
+ lexer_class = case name
65
+ when 'guess', nil
66
+ self.guess(:source => code, :mimetype => opts['mimetype'])
67
+ when String
68
+ self.find(name)
69
+ end
70
+
71
+ [lexer_class, opts]
72
+ end
73
+
74
+ # Find a lexer, with fancy shiny features.
75
+ #
76
+ # * The string you pass can include CGI-style options
77
+ #
78
+ # Lexer.find_fancy('erb?parent=tex')
79
+ #
80
+ # * You can pass the special name 'guess' so we guess for you,
81
+ # and you can pass a second argument of the code to guess by
82
+ #
83
+ # Lexer.find_fancy('guess', "#!/bin/bash\necho Hello, world")
84
+ #
85
+ # If the code matches more than one lexer then Guesser::Ambiguous
86
+ # is raised.
87
+ #
88
+ # This is used in the Redcarpet plugin as well as Rouge's own
89
+ # markdown lexer for highlighting internal code blocks.
90
+ #
91
+ def find_fancy(str, code=nil, default_options={})
92
+ lexer_class, opts = lookup_fancy(str, code, default_options)
93
+
94
+ lexer_class && lexer_class.new(opts)
95
+ end
96
+
97
+ # Specify or get this lexer's title. Meant to be human-readable.
98
+ def title(t=nil)
99
+ if t.nil?
100
+ t = tag.capitalize
101
+ end
102
+ @title ||= t
103
+ end
104
+
105
+ # Specify or get this lexer's description.
106
+ def desc(arg=:absent)
107
+ if arg == :absent
108
+ @desc
109
+ else
110
+ @desc = arg
111
+ end
112
+ end
113
+
114
+ def option_docs
115
+ @option_docs ||= InheritableHash.new(superclass.option_docs)
116
+ end
117
+
118
+ def option(name, desc)
119
+ option_docs[name.to_s] = desc
120
+ end
121
+
122
+ # Specify or get the path name containing a small demo for
123
+ # this lexer (can be overriden by {demo}).
124
+ def demo_file(arg=:absent)
125
+ return @demo_file = Pathname.new(arg) unless arg == :absent
126
+
127
+ @demo_file ||= Pathname.new(File.join(__dir__, 'demos', tag))
128
+ end
129
+
130
+ # Specify or get a small demo string for this lexer
131
+ def demo(arg=:absent)
132
+ return @demo = arg unless arg == :absent
133
+
134
+ @demo ||= File.read(demo_file, mode: 'rt:bom|utf-8')
135
+ end
136
+
137
+ # @return a list of all lexers.
138
+ def all
139
+ @all ||= registry.values.uniq
140
+ end
141
+
142
+ # Guess which lexer to use based on a hash of info.
143
+ #
144
+ # This accepts the same arguments as Lexer.guess, but will never throw
145
+ # an error. It will return a (possibly empty) list of potential lexers
146
+ # to use.
147
+ def guesses(info={})
148
+ mimetype, filename, source = info.values_at(:mimetype, :filename, :source)
149
+ custom_globs = info[:custom_globs]
150
+
151
+ guessers = (info[:guessers] || []).dup
152
+
153
+ guessers << Guessers::Mimetype.new(mimetype) if mimetype
154
+ guessers << Guessers::GlobMapping.by_pairs(custom_globs, filename) if custom_globs && filename
155
+ guessers << Guessers::Filename.new(filename) if filename
156
+ guessers << Guessers::Modeline.new(source) if source
157
+ guessers << Guessers::Source.new(source) if source
158
+ guessers << Guessers::Disambiguation.new(filename, source) if source && filename
159
+
160
+ Guesser.guess(guessers, Lexer.all)
161
+ end
162
+
163
+ # Guess which lexer to use based on a hash of info.
164
+ #
165
+ # @option info :mimetype
166
+ # A mimetype to guess by
167
+ # @option info :filename
168
+ # A filename to guess by
169
+ # @option info :source
170
+ # The source itself, which, if guessing by mimetype or filename
171
+ # fails, will be searched for shebangs, <!DOCTYPE ...> tags, and
172
+ # other hints.
173
+ # @param [Proc] fallback called if multiple lexers are detected.
174
+ # If omitted, Guesser::Ambiguous is raised.
175
+ #
176
+ # @see Lexer.detect?
177
+ # @see Lexer.guesses
178
+ # @return [Class<Rouge::Lexer>]
179
+ def guess(info={}, &fallback)
180
+ lexers = guesses(info)
181
+
182
+ return Lexers::PlainText if lexers.empty?
183
+ return lexers[0] if lexers.size == 1
184
+
185
+ if fallback
186
+ yield(lexers)
187
+ else
188
+ raise Guesser::Ambiguous.new(lexers)
189
+ end
190
+ end
191
+
192
+ def guess_by_mimetype(mt)
193
+ guess :mimetype => mt
194
+ end
195
+
196
+ def guess_by_filename(fname)
197
+ guess :filename => fname
198
+ end
199
+
200
+ def guess_by_source(source)
201
+ guess :source => source
202
+ end
203
+
204
+ def enable_debug!
205
+ @debug_enabled = true
206
+ end
207
+
208
+ def disable_debug!
209
+ remove_instance_variable :@debug_enabled if defined? @debug_enabled
210
+ end
211
+
212
+ def debug_enabled?
213
+ (defined? @debug_enabled) ? true : false
214
+ end
215
+
216
+ # Determine if a lexer has a method named +:detect?+ defined in its
217
+ # singleton class.
218
+ def detectable?
219
+ return @detectable if defined?(@detectable)
220
+ @detectable = singleton_methods(false).include?(:detect?)
221
+ end
222
+
223
+ protected
224
+ # @private
225
+ def register(name, lexer)
226
+ # reset an existing list of lexers
227
+ @all = nil if defined?(@all)
228
+ registry[name.to_s] = lexer
229
+ end
230
+
231
+ def lazy_procs
232
+ @lazy_procs ||= []
233
+ end
234
+
235
+ public
236
+ def eager_load!
237
+ return if @_loaded
238
+ @_loaded = true
239
+
240
+ lazy_procs.each { |b| instance_eval(&b) }
241
+
242
+ superclass.eager_load! unless superclass == Lexer
243
+
244
+ self
245
+ end
246
+
247
+ def lazy(auto: true, &block)
248
+ @skip_auto_load = true unless auto
249
+ lazy_procs << block
250
+ end
251
+
252
+ def skip_auto_load?
253
+ return true if @skip_auto_load
254
+ return superclass.skip_auto_load? unless superclass == Lexer
255
+ false
256
+ end
257
+
258
+ # Used to specify or get the canonical name of this lexer class.
259
+ #
260
+ # @example
261
+ # class MyLexer < Lexer
262
+ # tag 'foo'
263
+ # end
264
+ #
265
+ # MyLexer.tag # => 'foo'
266
+ #
267
+ # Lexer.find('foo') # => MyLexer
268
+ def tag(t=nil)
269
+ return @tag if t.nil?
270
+
271
+ @tag = t.to_s
272
+ Lexer.register(@tag, self)
273
+ end
274
+
275
+ # Used to specify alternate names this lexer class may be found by.
276
+ #
277
+ # @example
278
+ # class Erb < Lexer
279
+ # tag 'erb'
280
+ # aliases 'eruby', 'rhtml'
281
+ # end
282
+ #
283
+ # Lexer.find('eruby') # => Erb
284
+ def aliases(*args)
285
+ args.map!(&:to_s)
286
+ args.each { |arg| Lexer.register(arg, self) }
287
+ (@aliases ||= []).concat(args)
288
+ end
289
+
290
+ # Specify a list of filename globs associated with this lexer.
291
+ #
292
+ # If a filename glob is associated with more than one lexer, this can
293
+ # cause a Guesser::Ambiguous error to be raised in various guessing
294
+ # methods. These errors can be avoided by disambiguation. Filename globs
295
+ # are disambiguated in one of two ways. Either the lexer will define a
296
+ # `self.detect?` method (intended for use with shebangs and doctypes) or a
297
+ # manual rule will be specified in Guessers::Disambiguation.
298
+ #
299
+ # @example
300
+ # class Ruby < Lexer
301
+ # filenames '*.rb', '*.ruby', 'Gemfile', 'Rakefile'
302
+ # end
303
+ def filenames(*fnames)
304
+ (@filenames ||= []).concat(fnames)
305
+ end
306
+
307
+ # Specify a list of mimetypes associated with this lexer.
308
+ #
309
+ # @example
310
+ # class Html < Lexer
311
+ # mimetypes 'text/html', 'application/xhtml+xml'
312
+ # end
313
+ def mimetypes(*mts)
314
+ (@mimetypes ||= []).concat(mts)
315
+ end
316
+
317
+ # @private
318
+ def assert_utf8!(str)
319
+ encoding = str.encoding
320
+ return if encoding == Encoding::US_ASCII || encoding == Encoding::UTF_8 || encoding == Encoding::BINARY
321
+
322
+ raise EncodingError.new(
323
+ "Bad encoding: #{str.encoding.names.join(',')}. " +
324
+ "Please convert your string to UTF-8."
325
+ )
326
+ end
327
+
328
+ private
329
+ def registry
330
+ @registry ||= {}
331
+ end
332
+ end
333
+
334
+ # -*- instance methods -*- #
335
+
336
+ attr_reader :options
337
+ # Create a new lexer with the given options. Individual lexers may
338
+ # specify extra options. The only current globally accepted option
339
+ # is `:debug`.
340
+ #
341
+ # @option opts :debug
342
+ # Prints debug information to stdout. The particular info depends
343
+ # on the lexer in question. In regex lexers, this will log the
344
+ # state stack at the beginning of each step, along with each regex
345
+ # tried and each stream consumed. Try it, it's pretty useful.
346
+ def initialize(opts={})
347
+ @options = {}
348
+ opts.each { |k, v| @options[k.to_s] = v }
349
+ eager_load! unless self.class.skip_auto_load?
350
+
351
+ @debug = Lexer.debug_enabled? && bool_option('debug')
352
+ end
353
+
354
+ def eager_load!
355
+ self.class.eager_load!
356
+ end
357
+
358
+ # Returns a new lexer with the given options set. Useful for e.g. setting
359
+ # debug flags post hoc, or providing global overrides for certain options
360
+ def with(opts={})
361
+ new_options = @options.dup
362
+ opts.each { |k, v| new_options[k.to_s] = v }
363
+ self.class.new(new_options)
364
+ end
365
+
366
+ def as_bool(val)
367
+ case val
368
+ when nil, false, 0, '0', 'false', 'off'
369
+ false
370
+ when Array
371
+ val.empty? ? true : as_bool(val.last)
372
+ else
373
+ true
374
+ end
375
+ end
376
+
377
+ def as_string(val)
378
+ return as_string(val.last) if val.is_a?(Array)
379
+
380
+ val ? val.to_s : nil
381
+ end
382
+
383
+ def as_list(val)
384
+ case val
385
+ when Array
386
+ val.flat_map { |v| as_list(v) }
387
+ when String
388
+ val.split(',')
389
+ else
390
+ []
391
+ end
392
+ end
393
+
394
+ def as_lexer(val)
395
+ return as_lexer(val.last) if val.is_a?(Array)
396
+ return val.new(@options) if val.is_a?(Class) && val < Lexer
397
+
398
+ case val
399
+ when Lexer
400
+ val
401
+ when String
402
+ lexer_class = Lexer.find(val)
403
+ lexer_class && lexer_class.new(@options)
404
+ end
405
+ end
406
+
407
+ def as_token(val)
408
+ return as_token(val.last) if val.is_a?(Array)
409
+ case val
410
+ when Token
411
+ val
412
+ else
413
+ Token[val]
414
+ end
415
+ end
416
+
417
+ def bool_option(name, &default)
418
+ name_str = name.to_s
419
+
420
+ if @options.key?(name_str)
421
+ as_bool(@options[name_str])
422
+ else
423
+ default ? yield : false
424
+ end
425
+ end
426
+
427
+ def string_option(name, &default)
428
+ as_string(@options.delete(name.to_s, &default))
429
+ end
430
+
431
+ def lexer_option(name, &default)
432
+ as_lexer(@options.delete(name.to_s, &default))
433
+ end
434
+
435
+ def list_option(name, &default)
436
+ as_list(@options.delete(name.to_s, &default))
437
+ end
438
+
439
+ def token_option(name, &default)
440
+ as_token(@options.delete(name.to_s, &default))
441
+ end
442
+
443
+ def hash_option(name, defaults, &val_cast)
444
+ name = name.to_s
445
+ out = defaults.dup
446
+
447
+ base = @options.delete(name.to_s)
448
+ base = {} unless base.is_a?(Hash)
449
+ base.each { |k, v| out[k.to_s] = val_cast ? yield(v) : v }
450
+
451
+ @options.keys.each do |key|
452
+ next unless key =~ /(\w+)\[(\w+)\]/ and $1 == name
453
+ value = @options.delete(key)
454
+
455
+ out[$2] = val_cast ? yield(value) : value
456
+ end
457
+
458
+ out
459
+ end
460
+
461
+ # @abstract
462
+ #
463
+ # Called after each lex is finished. The default implementation
464
+ # is a noop.
465
+ def reset!
466
+ end
467
+
468
+ # Given a string, yield [token, chunk] pairs. If no block is given,
469
+ # an enumerator is returned.
470
+ #
471
+ # @option opts :continue
472
+ # Continue the lex from the previous state (i.e. don't call #reset!)
473
+ #
474
+ # @note The use of :continue => true has been deprecated. A warning is
475
+ # issued if run with `$VERBOSE` set to true.
476
+ #
477
+ # @note The use of arbitrary `opts` has never been supported, but we
478
+ # previously ignored them with no error. We now warn unconditionally.
479
+ def lex(string, opts=nil, &b)
480
+ if opts
481
+ if (opts.keys - [:continue]).size > 0
482
+ # improper use of options hash
483
+ warn('Improper use of Lexer#lex - this method does not receive options.' +
484
+ ' This will become an error in a future version.')
485
+ end
486
+
487
+ if opts[:continue]
488
+ warn '`lex :continue => true` is deprecated, please use #continue_lex instead'
489
+ return continue_lex(string, &b)
490
+ end
491
+ end
492
+
493
+ return enum_for(:lex, string) unless block_given?
494
+
495
+ Lexer.assert_utf8!(string)
496
+ reset!
497
+
498
+ continue_lex(string, &b)
499
+ end
500
+
501
+ # Continue the lex from the the current state without resetting
502
+ def continue_lex(string, &b)
503
+ return enum_for(:continue_lex, string, &b) unless block_given?
504
+
505
+ # consolidate consecutive tokens of the same type
506
+ last_token = nil
507
+ last_val = nil
508
+ stream_tokens(string) do |tok, val|
509
+ next if val.empty?
510
+
511
+ if tok == last_token
512
+ last_val << val
513
+ next
514
+ end
515
+
516
+ yield(last_token, last_val) if last_token
517
+ last_token = tok
518
+ last_val = val
519
+ end
520
+
521
+ yield(last_token, last_val) if last_token
522
+ end
523
+
524
+ # delegated to {Lexer.tag}
525
+ def tag
526
+ self.class.tag
527
+ end
528
+
529
+ # @abstract
530
+ #
531
+ # Yield `[token, chunk]` pairs, given a prepared input stream. This
532
+ # must be implemented.
533
+ #
534
+ # @param [StringScanner] stream
535
+ # the stream
536
+ def stream_tokens(stream, &b)
537
+ raise 'abstract'
538
+ end
539
+
540
+ # @abstract
541
+ #
542
+ # Return true if there is an in-text indication (such as a shebang
543
+ # or DOCTYPE declaration) that this lexer should be used.
544
+ #
545
+ # @param [TextAnalyzer] text
546
+ # the text to be analyzed, with a couple of handy methods on it,
547
+ # like {TextAnalyzer#shebang?} and {TextAnalyzer#doctype?}
548
+ def self.detect?(text)
549
+ false
550
+ end
551
+ end
552
+
553
+ # container module for built-in lexers
554
+ module Lexers
555
+ end
556
+ end