prism-rails 1.6.0.3 → 1.29.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (508) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +12 -0
  3. data/README.md +109 -44
  4. data/lib/prism-rails/version.rb +1 -1
  5. data/vendor/assets/javascripts/languages/index.js +82 -0
  6. data/vendor/assets/javascripts/languages/prism-abap.js +48 -0
  7. data/vendor/assets/javascripts/languages/prism-abnf.js +54 -0
  8. data/vendor/assets/javascripts/languages/prism-actionscript.js +19 -0
  9. data/vendor/assets/javascripts/languages/prism-ada.js +22 -0
  10. data/vendor/assets/javascripts/languages/prism-agda.js +24 -0
  11. data/vendor/assets/javascripts/languages/prism-al.js +25 -0
  12. data/vendor/assets/javascripts/languages/prism-antlr4.js +65 -0
  13. data/vendor/assets/javascripts/languages/prism-apacheconf.js +47 -0
  14. data/vendor/assets/javascripts/languages/prism-apex.js +65 -0
  15. data/vendor/assets/javascripts/{prism → languages}/prism-apl.js +7 -4
  16. data/vendor/assets/javascripts/languages/prism-applescript.js +17 -0
  17. data/vendor/assets/javascripts/languages/prism-aql.js +49 -0
  18. data/vendor/assets/javascripts/languages/prism-arduino.js +7 -0
  19. data/vendor/assets/javascripts/languages/prism-arff.js +10 -0
  20. data/vendor/assets/javascripts/languages/prism-armasm.js +49 -0
  21. data/vendor/assets/javascripts/languages/prism-arturo.js +105 -0
  22. data/vendor/assets/javascripts/{prism → languages}/prism-asciidoc.js +36 -73
  23. data/vendor/assets/javascripts/languages/prism-asm6502.js +29 -0
  24. data/vendor/assets/javascripts/languages/prism-asmatmel.js +43 -0
  25. data/vendor/assets/javascripts/languages/prism-aspnet.js +48 -0
  26. data/vendor/assets/javascripts/languages/prism-autohotkey.js +44 -0
  27. data/vendor/assets/javascripts/languages/prism-autoit.js +34 -0
  28. data/vendor/assets/javascripts/languages/prism-avisynth.js +188 -0
  29. data/vendor/assets/javascripts/languages/prism-avro-idl.js +50 -0
  30. data/vendor/assets/javascripts/languages/prism-awk.js +32 -0
  31. data/vendor/assets/javascripts/languages/prism-bash.js +235 -0
  32. data/vendor/assets/javascripts/{prism → languages}/prism-basic.js +7 -4
  33. data/vendor/assets/javascripts/{prism → languages}/prism-batch.js +10 -10
  34. data/vendor/assets/javascripts/languages/prism-bbcode.js +29 -0
  35. data/vendor/assets/javascripts/languages/prism-bbj.js +19 -0
  36. data/vendor/assets/javascripts/languages/prism-bicep.js +77 -0
  37. data/vendor/assets/javascripts/languages/prism-birb.js +23 -0
  38. data/vendor/assets/javascripts/{prism → languages}/prism-bison.js +2 -2
  39. data/vendor/assets/javascripts/languages/prism-bnf.js +21 -0
  40. data/vendor/assets/javascripts/languages/prism-bqn.js +63 -0
  41. data/vendor/assets/javascripts/{prism → languages}/prism-brainfuck.js +1 -1
  42. data/vendor/assets/javascripts/languages/prism-brightscript.js +44 -0
  43. data/vendor/assets/javascripts/languages/prism-bro.js +37 -0
  44. data/vendor/assets/javascripts/languages/prism-bsl.js +75 -0
  45. data/vendor/assets/javascripts/languages/prism-c.js +80 -0
  46. data/vendor/assets/javascripts/languages/prism-cfscript.js +44 -0
  47. data/vendor/assets/javascripts/languages/prism-chaiscript.js +60 -0
  48. data/vendor/assets/javascripts/languages/prism-cil.js +27 -0
  49. data/vendor/assets/javascripts/languages/prism-cilkc.js +8 -0
  50. data/vendor/assets/javascripts/languages/prism-cilkcpp.js +9 -0
  51. data/vendor/assets/javascripts/languages/prism-clike.js +31 -0
  52. data/vendor/assets/javascripts/languages/prism-clojure.js +31 -0
  53. data/vendor/assets/javascripts/languages/prism-cmake.js +29 -0
  54. data/vendor/assets/javascripts/languages/prism-cobol.js +53 -0
  55. data/vendor/assets/javascripts/languages/prism-coffeescript.js +96 -0
  56. data/vendor/assets/javascripts/languages/prism-concurnas.js +61 -0
  57. data/vendor/assets/javascripts/languages/prism-cooklang.js +146 -0
  58. data/vendor/assets/javascripts/languages/prism-coq.js +54 -0
  59. data/vendor/assets/javascripts/languages/prism-core.js +1263 -0
  60. data/vendor/assets/javascripts/languages/prism-cpp.js +99 -0
  61. data/vendor/assets/javascripts/languages/prism-crystal.js +57 -0
  62. data/vendor/assets/javascripts/languages/prism-csharp.js +366 -0
  63. data/vendor/assets/javascripts/languages/prism-cshtml.js +199 -0
  64. data/vendor/assets/javascripts/languages/prism-csp.js +76 -0
  65. data/vendor/assets/javascripts/languages/prism-css-extras.js +120 -0
  66. data/vendor/assets/javascripts/languages/prism-css.js +64 -0
  67. data/vendor/assets/javascripts/languages/prism-csv.js +6 -0
  68. data/vendor/assets/javascripts/languages/prism-cue.js +84 -0
  69. data/vendor/assets/javascripts/languages/prism-cypher.js +36 -0
  70. data/vendor/assets/javascripts/languages/prism-d.js +84 -0
  71. data/vendor/assets/javascripts/languages/prism-dart.js +79 -0
  72. data/vendor/assets/javascripts/languages/prism-dataweave.js +41 -0
  73. data/vendor/assets/javascripts/languages/prism-dax.js +27 -0
  74. data/vendor/assets/javascripts/languages/prism-dhall.js +69 -0
  75. data/vendor/assets/javascripts/languages/prism-diff.js +64 -0
  76. data/vendor/assets/javascripts/languages/prism-django.js +60 -0
  77. data/vendor/assets/javascripts/languages/prism-dns-zone-file.js +33 -0
  78. data/vendor/assets/javascripts/languages/prism-docker.js +98 -0
  79. data/vendor/assets/javascripts/languages/prism-dot.js +76 -0
  80. data/vendor/assets/javascripts/languages/prism-ebnf.js +22 -0
  81. data/vendor/assets/javascripts/languages/prism-editorconfig.js +26 -0
  82. data/vendor/assets/javascripts/{prism → languages}/prism-eiffel.js +19 -9
  83. data/vendor/assets/javascripts/languages/prism-ejs.js +26 -0
  84. data/vendor/assets/javascripts/languages/prism-elixir.js +98 -0
  85. data/vendor/assets/javascripts/languages/prism-elm.js +45 -0
  86. data/vendor/assets/javascripts/languages/prism-erb.js +25 -0
  87. data/vendor/assets/javascripts/{prism → languages}/prism-erlang.js +12 -9
  88. data/vendor/assets/javascripts/languages/prism-etlua.js +23 -0
  89. data/vendor/assets/javascripts/languages/prism-excel-formula.js +66 -0
  90. data/vendor/assets/javascripts/languages/prism-factor.js +403 -0
  91. data/vendor/assets/javascripts/languages/prism-false.js +32 -0
  92. data/vendor/assets/javascripts/languages/prism-firestore-security-rules.js +35 -0
  93. data/vendor/assets/javascripts/languages/prism-flow.js +35 -0
  94. data/vendor/assets/javascripts/{prism → languages}/prism-fortran.js +11 -8
  95. data/vendor/assets/javascripts/languages/prism-fsharp.js +75 -0
  96. data/vendor/assets/javascripts/languages/prism-ftl.js +98 -0
  97. data/vendor/assets/javascripts/languages/prism-gap.js +54 -0
  98. data/vendor/assets/javascripts/languages/prism-gcode.js +16 -0
  99. data/vendor/assets/javascripts/languages/prism-gdscript.js +27 -0
  100. data/vendor/assets/javascripts/languages/prism-gedcom.js +28 -0
  101. data/vendor/assets/javascripts/languages/prism-gettext.js +43 -0
  102. data/vendor/assets/javascripts/languages/prism-gherkin.js +85 -0
  103. data/vendor/assets/javascripts/{prism → languages}/prism-git.js +3 -3
  104. data/vendor/assets/javascripts/languages/prism-glsl.js +3 -0
  105. data/vendor/assets/javascripts/languages/prism-gml.js +7 -0
  106. data/vendor/assets/javascripts/languages/prism-gn.js +51 -0
  107. data/vendor/assets/javascripts/languages/prism-go-module.js +24 -0
  108. data/vendor/assets/javascripts/languages/prism-go.js +28 -0
  109. data/vendor/assets/javascripts/languages/prism-gradle.js +63 -0
  110. data/vendor/assets/javascripts/languages/prism-graphql.js +211 -0
  111. data/vendor/assets/javascripts/languages/prism-groovy.js +65 -0
  112. data/vendor/assets/javascripts/{prism → languages}/prism-haml.js +32 -37
  113. data/vendor/assets/javascripts/languages/prism-handlebars.js +40 -0
  114. data/vendor/assets/javascripts/languages/prism-haskell.js +66 -0
  115. data/vendor/assets/javascripts/languages/prism-haxe.js +78 -0
  116. data/vendor/assets/javascripts/languages/prism-hcl.js +63 -0
  117. data/vendor/assets/javascripts/languages/prism-hlsl.js +20 -0
  118. data/vendor/assets/javascripts/languages/prism-hoon.js +14 -0
  119. data/vendor/assets/javascripts/languages/prism-hpkp.js +14 -0
  120. data/vendor/assets/javascripts/languages/prism-hsts.js +14 -0
  121. data/vendor/assets/javascripts/languages/prism-http.js +151 -0
  122. data/vendor/assets/javascripts/languages/prism-ichigojam.js +15 -0
  123. data/vendor/assets/javascripts/{prism → languages}/prism-icon.js +6 -3
  124. data/vendor/assets/javascripts/languages/prism-icu-message-format.js +148 -0
  125. data/vendor/assets/javascripts/languages/prism-idris.js +19 -0
  126. data/vendor/assets/javascripts/languages/prism-iecst.js +32 -0
  127. data/vendor/assets/javascripts/languages/prism-ignore.js +23 -0
  128. data/vendor/assets/javascripts/{prism → languages}/prism-inform7.js +14 -11
  129. data/vendor/assets/javascripts/languages/prism-ini.js +42 -0
  130. data/vendor/assets/javascripts/languages/prism-io.js +22 -0
  131. data/vendor/assets/javascripts/{prism → languages}/prism-j.js +12 -6
  132. data/vendor/assets/javascripts/languages/prism-java.js +124 -0
  133. data/vendor/assets/javascripts/languages/prism-javadoc.js +82 -0
  134. data/vendor/assets/javascripts/languages/prism-javadoclike.js +87 -0
  135. data/vendor/assets/javascripts/languages/prism-javascript.js +172 -0
  136. data/vendor/assets/javascripts/languages/prism-javastacktrace.js +142 -0
  137. data/vendor/assets/javascripts/languages/prism-jexl.js +14 -0
  138. data/vendor/assets/javascripts/languages/prism-jolie.js +41 -0
  139. data/vendor/assets/javascripts/languages/prism-jq.js +69 -0
  140. data/vendor/assets/javascripts/languages/prism-js-extras.js +135 -0
  141. data/vendor/assets/javascripts/languages/prism-js-templates.js +349 -0
  142. data/vendor/assets/javascripts/languages/prism-jsdoc.js +78 -0
  143. data/vendor/assets/javascripts/languages/prism-json.js +27 -0
  144. data/vendor/assets/javascripts/languages/prism-json5.js +23 -0
  145. data/vendor/assets/javascripts/languages/prism-jsonp.js +7 -0
  146. data/vendor/assets/javascripts/languages/prism-jsstacktrace.js +49 -0
  147. data/vendor/assets/javascripts/languages/prism-jsx.js +145 -0
  148. data/vendor/assets/javascripts/languages/prism-julia.js +35 -0
  149. data/vendor/assets/javascripts/languages/prism-keepalived.js +51 -0
  150. data/vendor/assets/javascripts/languages/prism-keyman.js +44 -0
  151. data/vendor/assets/javascripts/languages/prism-kotlin.js +88 -0
  152. data/vendor/assets/javascripts/languages/prism-kumir.js +106 -0
  153. data/vendor/assets/javascripts/languages/prism-kusto.js +44 -0
  154. data/vendor/assets/javascripts/languages/prism-latex.js +64 -0
  155. data/vendor/assets/javascripts/languages/prism-latte.js +63 -0
  156. data/vendor/assets/javascripts/{prism → languages}/prism-less.js +6 -12
  157. data/vendor/assets/javascripts/languages/prism-lilypond.js +69 -0
  158. data/vendor/assets/javascripts/languages/prism-linker-script.js +30 -0
  159. data/vendor/assets/javascripts/languages/prism-liquid.js +66 -0
  160. data/vendor/assets/javascripts/languages/prism-lisp.js +197 -0
  161. data/vendor/assets/javascripts/{prism → languages}/prism-livescript.js +20 -19
  162. data/vendor/assets/javascripts/languages/prism-llvm.js +19 -0
  163. data/vendor/assets/javascripts/languages/prism-log.js +120 -0
  164. data/vendor/assets/javascripts/languages/prism-lolcode.js +55 -0
  165. data/vendor/assets/javascripts/{prism → languages}/prism-lua.js +3 -3
  166. data/vendor/assets/javascripts/languages/prism-magma.js +35 -0
  167. data/vendor/assets/javascripts/languages/prism-makefile.js +34 -0
  168. data/vendor/assets/javascripts/languages/prism-markdown.js +415 -0
  169. data/vendor/assets/javascripts/languages/prism-markup-templating.js +124 -0
  170. data/vendor/assets/javascripts/languages/prism-markup.js +186 -0
  171. data/vendor/assets/javascripts/languages/prism-mata.js +50 -0
  172. data/vendor/assets/javascripts/languages/prism-matlab.js +16 -0
  173. data/vendor/assets/javascripts/languages/prism-maxscript.js +91 -0
  174. data/vendor/assets/javascripts/languages/prism-mel.js +46 -0
  175. data/vendor/assets/javascripts/languages/prism-mermaid.js +113 -0
  176. data/vendor/assets/javascripts/languages/prism-metafont.js +84 -0
  177. data/vendor/assets/javascripts/{prism → languages}/prism-mizar.js +3 -3
  178. data/vendor/assets/javascripts/languages/prism-mongodb.js +97 -0
  179. data/vendor/assets/javascripts/languages/prism-monkey.js +29 -0
  180. data/vendor/assets/javascripts/languages/prism-moonscript.js +57 -0
  181. data/vendor/assets/javascripts/languages/prism-n1ql.js +24 -0
  182. data/vendor/assets/javascripts/languages/prism-n4js.js +14 -0
  183. data/vendor/assets/javascripts/languages/prism-nand2tetris-hdl.js +9 -0
  184. data/vendor/assets/javascripts/languages/prism-naniscript.js +170 -0
  185. data/vendor/assets/javascripts/languages/prism-nasm.js +24 -0
  186. data/vendor/assets/javascripts/languages/prism-neon.js +40 -0
  187. data/vendor/assets/javascripts/languages/prism-nevod.js +125 -0
  188. data/vendor/assets/javascripts/languages/prism-nginx.js +54 -0
  189. data/vendor/assets/javascripts/{prism → languages}/prism-nim.js +26 -12
  190. data/vendor/assets/javascripts/{prism → languages}/prism-nix.js +11 -13
  191. data/vendor/assets/javascripts/languages/prism-nsis.js +30 -0
  192. data/vendor/assets/javascripts/languages/prism-objectivec.js +12 -0
  193. data/vendor/assets/javascripts/languages/prism-ocaml.js +58 -0
  194. data/vendor/assets/javascripts/languages/prism-odin.js +99 -0
  195. data/vendor/assets/javascripts/languages/prism-opencl.js +61 -0
  196. data/vendor/assets/javascripts/languages/prism-openqasm.js +23 -0
  197. data/vendor/assets/javascripts/languages/prism-oz.js +28 -0
  198. data/vendor/assets/javascripts/{prism → languages}/prism-parigp.js +8 -5
  199. data/vendor/assets/javascripts/languages/prism-parser.js +73 -0
  200. data/vendor/assets/javascripts/{prism → languages}/prism-pascal.js +31 -10
  201. data/vendor/assets/javascripts/languages/prism-pascaligo.js +62 -0
  202. data/vendor/assets/javascripts/languages/prism-pcaxis.js +53 -0
  203. data/vendor/assets/javascripts/languages/prism-peoplecode.js +42 -0
  204. data/vendor/assets/javascripts/languages/prism-perl.js +156 -0
  205. data/vendor/assets/javascripts/languages/prism-php-extras.js +14 -0
  206. data/vendor/assets/javascripts/languages/prism-php.js +342 -0
  207. data/vendor/assets/javascripts/languages/prism-phpdoc.js +27 -0
  208. data/vendor/assets/javascripts/languages/prism-plant-uml.js +103 -0
  209. data/vendor/assets/javascripts/languages/prism-plsql.js +17 -0
  210. data/vendor/assets/javascripts/languages/prism-powerquery.js +55 -0
  211. data/vendor/assets/javascripts/languages/prism-powershell.js +58 -0
  212. data/vendor/assets/javascripts/languages/prism-processing.js +15 -0
  213. data/vendor/assets/javascripts/{prism → languages}/prism-prolog.js +10 -8
  214. data/vendor/assets/javascripts/languages/prism-promql.js +99 -0
  215. data/vendor/assets/javascripts/languages/prism-properties.js +13 -0
  216. data/vendor/assets/javascripts/languages/prism-protobuf.js +43 -0
  217. data/vendor/assets/javascripts/languages/prism-psl.js +35 -0
  218. data/vendor/assets/javascripts/languages/prism-pug.js +188 -0
  219. data/vendor/assets/javascripts/{prism → languages}/prism-puppet.js +13 -8
  220. data/vendor/assets/javascripts/{prism → languages}/prism-pure.js +27 -22
  221. data/vendor/assets/javascripts/languages/prism-purebasic.js +70 -0
  222. data/vendor/assets/javascripts/languages/prism-purescript.js +31 -0
  223. data/vendor/assets/javascripts/languages/prism-python.js +65 -0
  224. data/vendor/assets/javascripts/{prism → languages}/prism-q.js +16 -9
  225. data/vendor/assets/javascripts/languages/prism-qml.js +61 -0
  226. data/vendor/assets/javascripts/{prism → languages}/prism-qore.js +12 -9
  227. data/vendor/assets/javascripts/languages/prism-qsharp.js +132 -0
  228. data/vendor/assets/javascripts/languages/prism-r.js +22 -0
  229. data/vendor/assets/javascripts/languages/prism-racket.js +18 -0
  230. data/vendor/assets/javascripts/{prism → languages}/prism-reason.js +8 -15
  231. data/vendor/assets/javascripts/languages/prism-regex.js +104 -0
  232. data/vendor/assets/javascripts/languages/prism-rego.js +30 -0
  233. data/vendor/assets/javascripts/languages/prism-renpy.js +29 -0
  234. data/vendor/assets/javascripts/languages/prism-rescript.js +60 -0
  235. data/vendor/assets/javascripts/{prism → languages}/prism-rest.js +18 -18
  236. data/vendor/assets/javascripts/languages/prism-rip.js +38 -0
  237. data/vendor/assets/javascripts/{prism → languages}/prism-roboconf.js +3 -3
  238. data/vendor/assets/javascripts/languages/prism-robotframework.js +104 -0
  239. data/vendor/assets/javascripts/languages/prism-ruby.js +189 -0
  240. data/vendor/assets/javascripts/languages/prism-rust.js +128 -0
  241. data/vendor/assets/javascripts/languages/prism-sas.js +326 -0
  242. data/vendor/assets/javascripts/{prism → languages}/prism-sass.js +16 -12
  243. data/vendor/assets/javascripts/languages/prism-scala.js +50 -0
  244. data/vendor/assets/javascripts/languages/prism-scheme.js +120 -0
  245. data/vendor/assets/javascripts/{prism → languages}/prism-scss.js +27 -21
  246. data/vendor/assets/javascripts/languages/prism-shell-session.js +70 -0
  247. data/vendor/assets/javascripts/languages/prism-smali.js +87 -0
  248. data/vendor/assets/javascripts/{prism → languages}/prism-smalltalk.js +17 -10
  249. data/vendor/assets/javascripts/languages/prism-smarty.js +131 -0
  250. data/vendor/assets/javascripts/languages/prism-sml.js +68 -0
  251. data/vendor/assets/javascripts/languages/prism-solidity.js +22 -0
  252. data/vendor/assets/javascripts/languages/prism-solution-file.js +51 -0
  253. data/vendor/assets/javascripts/languages/prism-soy.js +96 -0
  254. data/vendor/assets/javascripts/languages/prism-sparql.js +18 -0
  255. data/vendor/assets/javascripts/languages/prism-splunk-spl.js +24 -0
  256. data/vendor/assets/javascripts/languages/prism-sqf.js +34 -0
  257. data/vendor/assets/javascripts/languages/prism-sql.js +32 -0
  258. data/vendor/assets/javascripts/languages/prism-squirrel.js +47 -0
  259. data/vendor/assets/javascripts/languages/prism-stan.js +65 -0
  260. data/vendor/assets/javascripts/languages/prism-stata.js +76 -0
  261. data/vendor/assets/javascripts/languages/prism-stylus.js +143 -0
  262. data/vendor/assets/javascripts/languages/prism-supercollider.js +36 -0
  263. data/vendor/assets/javascripts/languages/prism-swift.js +148 -0
  264. data/vendor/assets/javascripts/languages/prism-systemd.js +74 -0
  265. data/vendor/assets/javascripts/languages/prism-t4-cs.js +1 -0
  266. data/vendor/assets/javascripts/languages/prism-t4-templating.js +49 -0
  267. data/vendor/assets/javascripts/languages/prism-t4-vb.js +1 -0
  268. data/vendor/assets/javascripts/languages/prism-tap.js +22 -0
  269. data/vendor/assets/javascripts/languages/prism-tcl.js +46 -0
  270. data/vendor/assets/javascripts/languages/prism-textile.js +286 -0
  271. data/vendor/assets/javascripts/languages/prism-toml.js +49 -0
  272. data/vendor/assets/javascripts/languages/prism-tremor.js +72 -0
  273. data/vendor/assets/javascripts/languages/prism-tsx.js +15 -0
  274. data/vendor/assets/javascripts/languages/prism-tt2.js +53 -0
  275. data/vendor/assets/javascripts/languages/prism-turtle.js +54 -0
  276. data/vendor/assets/javascripts/languages/prism-twig.js +44 -0
  277. data/vendor/assets/javascripts/languages/prism-typescript.js +60 -0
  278. data/vendor/assets/javascripts/languages/prism-typoscript.js +80 -0
  279. data/vendor/assets/javascripts/languages/prism-unrealscript.js +42 -0
  280. data/vendor/assets/javascripts/languages/prism-uorazor.js +48 -0
  281. data/vendor/assets/javascripts/languages/prism-uri.js +96 -0
  282. data/vendor/assets/javascripts/languages/prism-v.js +81 -0
  283. data/vendor/assets/javascripts/languages/prism-vala.js +84 -0
  284. data/vendor/assets/javascripts/languages/prism-vbnet.js +22 -0
  285. data/vendor/assets/javascripts/languages/prism-velocity.js +72 -0
  286. data/vendor/assets/javascripts/languages/prism-verilog.js +26 -0
  287. data/vendor/assets/javascripts/languages/prism-vhdl.js +26 -0
  288. data/vendor/assets/javascripts/languages/prism-vim.js +10 -0
  289. data/vendor/assets/javascripts/languages/prism-visual-basic.js +29 -0
  290. data/vendor/assets/javascripts/languages/prism-warpscript.js +21 -0
  291. data/vendor/assets/javascripts/languages/prism-wasm.js +31 -0
  292. data/vendor/assets/javascripts/languages/prism-web-idl.js +101 -0
  293. data/vendor/assets/javascripts/languages/prism-wgsl.js +69 -0
  294. data/vendor/assets/javascripts/{prism → languages}/prism-wiki.js +9 -8
  295. data/vendor/assets/javascripts/languages/prism-wolfram.js +29 -0
  296. data/vendor/assets/javascripts/languages/prism-wren.js +100 -0
  297. data/vendor/assets/javascripts/languages/prism-xeora.js +114 -0
  298. data/vendor/assets/javascripts/languages/prism-xml-doc.js +40 -0
  299. data/vendor/assets/javascripts/languages/prism-xojo.js +21 -0
  300. data/vendor/assets/javascripts/languages/prism-xquery.js +162 -0
  301. data/vendor/assets/javascripts/languages/prism-yaml.js +83 -0
  302. data/vendor/assets/javascripts/languages/prism-yang.js +20 -0
  303. data/vendor/assets/javascripts/languages/prism-zig.js +101 -0
  304. data/vendor/assets/javascripts/prism-plugin/prism-autolinker.js +63 -63
  305. data/vendor/assets/javascripts/prism-plugin/prism-autoloader.js +465 -122
  306. data/vendor/assets/javascripts/prism-plugin/prism-command-line.js +221 -63
  307. data/vendor/assets/javascripts/prism-plugin/prism-copy-to-clipboard.js +128 -43
  308. data/vendor/assets/javascripts/prism-plugin/prism-custom-class.js +105 -24
  309. data/vendor/assets/javascripts/prism-plugin/prism-data-uri-highlight.js +4 -8
  310. data/vendor/assets/javascripts/prism-plugin/prism-diff-highlight.js +90 -0
  311. data/vendor/assets/javascripts/prism-plugin/prism-download-button.js +20 -0
  312. data/vendor/assets/javascripts/prism-plugin/prism-file-highlight.js +179 -61
  313. data/vendor/assets/javascripts/prism-plugin/prism-filter-highlight-all.js +127 -0
  314. data/vendor/assets/javascripts/prism-plugin/prism-highlight-keywords.js +10 -13
  315. data/vendor/assets/javascripts/prism-plugin/prism-inline-color.js +105 -0
  316. data/vendor/assets/javascripts/prism-plugin/prism-jsonp-highlight.js +264 -112
  317. data/vendor/assets/javascripts/prism-plugin/prism-keep-markup.js +53 -24
  318. data/vendor/assets/javascripts/prism-plugin/prism-line-highlight.js +328 -115
  319. data/vendor/assets/javascripts/prism-plugin/prism-line-numbers.js +237 -42
  320. data/vendor/assets/javascripts/prism-plugin/prism-match-braces.js +190 -0
  321. data/vendor/assets/javascripts/prism-plugin/prism-normalize-whitespace.js +206 -149
  322. data/vendor/assets/javascripts/prism-plugin/prism-previewers.js +712 -0
  323. data/vendor/assets/javascripts/prism-plugin/prism-remove-initial-line-feed.js +17 -17
  324. data/vendor/assets/javascripts/prism-plugin/prism-show-invisibles.js +83 -19
  325. data/vendor/assets/javascripts/prism-plugin/prism-show-language.js +317 -20
  326. data/vendor/assets/javascripts/prism-plugin/prism-toolbar.js +61 -15
  327. data/vendor/assets/javascripts/prism-plugin/prism-treeview.js +70 -0
  328. data/vendor/assets/javascripts/prism-plugin/prism-unescaped-markup.js +39 -17
  329. data/vendor/assets/javascripts/prism-plugin/prism-wpd.js +132 -147
  330. data/vendor/assets/javascripts/prism.js +302 -127
  331. data/vendor/assets/stylesheets/prism-plugin/prism-autolinker.min.css +1 -0
  332. data/vendor/assets/stylesheets/prism-plugin/prism-command-line.css +11 -1
  333. data/vendor/assets/stylesheets/prism-plugin/prism-command-line.min.css +1 -0
  334. data/vendor/assets/stylesheets/prism-plugin/prism-diff-highlight.css +13 -0
  335. data/vendor/assets/stylesheets/prism-plugin/prism-diff-highlight.min.css +1 -0
  336. data/vendor/assets/stylesheets/prism-plugin/prism-inline-color.css +33 -0
  337. data/vendor/assets/stylesheets/prism-plugin/prism-inline-color.min.css +1 -0
  338. data/vendor/assets/stylesheets/prism-plugin/prism-line-highlight.css +26 -0
  339. data/vendor/assets/stylesheets/prism-plugin/prism-line-highlight.min.css +1 -0
  340. data/vendor/assets/stylesheets/prism-plugin/prism-line-numbers.css +4 -4
  341. data/vendor/assets/stylesheets/prism-plugin/prism-line-numbers.min.css +1 -0
  342. data/vendor/assets/stylesheets/prism-plugin/prism-match-braces.css +29 -0
  343. data/vendor/assets/stylesheets/prism-plugin/prism-match-braces.min.css +1 -0
  344. data/vendor/assets/stylesheets/prism-plugin/prism-previewers.css +243 -0
  345. data/vendor/assets/stylesheets/prism-plugin/prism-previewers.min.css +1 -0
  346. data/vendor/assets/stylesheets/prism-plugin/prism-show-invisibles.css +7 -6
  347. data/vendor/assets/stylesheets/prism-plugin/prism-show-invisibles.min.css +1 -0
  348. data/vendor/assets/stylesheets/prism-plugin/prism-toolbar.css +22 -15
  349. data/vendor/assets/stylesheets/prism-plugin/prism-toolbar.min.css +1 -0
  350. data/vendor/assets/stylesheets/prism-plugin/prism-treeview.css +168 -0
  351. data/vendor/assets/stylesheets/prism-plugin/prism-treeview.min.css +1 -0
  352. data/vendor/assets/stylesheets/prism-plugin/prism-unescaped-markup.css +4 -4
  353. data/vendor/assets/stylesheets/prism-plugin/prism-unescaped-markup.min.css +1 -0
  354. data/vendor/assets/stylesheets/prism-plugin/prism-wpd.min.css +1 -0
  355. data/vendor/assets/stylesheets/prism-theme/prism-a11y-dark.css +161 -0
  356. data/vendor/assets/stylesheets/{prism-atom-dark.css → prism-theme/prism-atom-dark.css} +10 -13
  357. data/vendor/assets/stylesheets/prism-theme/prism-autolinker.css +3 -0
  358. data/vendor/assets/stylesheets/{prism-base16-ateliersulphurpool.light.css → prism-theme/prism-base16-ateliersulphurpool.light.css} +60 -56
  359. data/vendor/assets/stylesheets/{prism-cb.css → prism-theme/prism-cb.css} +20 -50
  360. data/vendor/assets/stylesheets/prism-theme/prism-coldark-cold.css +317 -0
  361. data/vendor/assets/stylesheets/prism-theme/prism-coldark-dark.css +317 -0
  362. data/vendor/assets/stylesheets/prism-theme/prism-command-line.css +33 -0
  363. data/vendor/assets/stylesheets/prism-theme/prism-coy-without-shadows.css +140 -0
  364. data/vendor/assets/stylesheets/{prism-coy.css → prism-theme/prism-coy.css} +17 -19
  365. data/vendor/assets/stylesheets/prism-theme/prism-coy.min.css +1 -0
  366. data/vendor/assets/stylesheets/prism-theme/prism-darcula.css +159 -0
  367. data/vendor/assets/stylesheets/{prism-dark.css → prism-theme/prism-dark.css} +2 -1
  368. data/vendor/assets/stylesheets/prism-theme/prism-dark.min.css +1 -0
  369. data/vendor/assets/stylesheets/prism-theme/prism-dracula.css +122 -0
  370. data/vendor/assets/stylesheets/{prism-duotone-dark.css → prism-theme/prism-duotone-dark.css} +58 -54
  371. data/vendor/assets/stylesheets/{prism-duotone-earth.css → prism-theme/prism-duotone-earth.css} +58 -54
  372. data/vendor/assets/stylesheets/{prism-duotone-forest.css → prism-theme/prism-duotone-forest.css} +58 -54
  373. data/vendor/assets/stylesheets/{prism-duotone-light.css → prism-theme/prism-duotone-light.css} +58 -54
  374. data/vendor/assets/stylesheets/{prism-duotone-sea.css → prism-theme/prism-duotone-sea.css} +58 -54
  375. data/vendor/assets/stylesheets/{prism-duotone-space.css → prism-theme/prism-duotone-space.css} +58 -54
  376. data/vendor/assets/stylesheets/{prism-funky.css → prism-theme/prism-funky.css} +16 -2
  377. data/vendor/assets/stylesheets/prism-theme/prism-funky.min.css +1 -0
  378. data/vendor/assets/stylesheets/{prism-ghcolors.css → prism-theme/prism-ghcolors.css} +47 -44
  379. data/vendor/assets/stylesheets/prism-theme/prism-gruvbox-dark.css +143 -0
  380. data/vendor/assets/stylesheets/prism-theme/prism-gruvbox-light.css +143 -0
  381. data/vendor/assets/stylesheets/prism-theme/prism-holi-theme.css +119 -0
  382. data/vendor/assets/stylesheets/prism-theme/prism-hopscotch.css +132 -0
  383. data/vendor/assets/stylesheets/prism-theme/prism-laserwave.css +133 -0
  384. data/vendor/assets/stylesheets/prism-theme/prism-line-highlight.css +49 -0
  385. data/vendor/assets/stylesheets/prism-theme/prism-line-numbers.css +41 -0
  386. data/vendor/assets/stylesheets/prism-theme/prism-lucario.css +122 -0
  387. data/vendor/assets/stylesheets/prism-theme/prism-material-dark.css +205 -0
  388. data/vendor/assets/stylesheets/prism-theme/prism-material-light.css +207 -0
  389. data/vendor/assets/stylesheets/prism-theme/prism-material-oceanic.css +210 -0
  390. data/vendor/assets/stylesheets/prism-theme/prism-night-owl.css +158 -0
  391. data/vendor/assets/stylesheets/prism-theme/prism-nord.css +124 -0
  392. data/vendor/assets/stylesheets/{prism-okaidia.css → prism-theme/prism-okaidia.css} +5 -3
  393. data/vendor/assets/stylesheets/prism-theme/prism-okaidia.min.css +1 -0
  394. data/vendor/assets/stylesheets/prism-theme/prism-one-dark.css +440 -0
  395. data/vendor/assets/stylesheets/prism-theme/prism-one-light.css +428 -0
  396. data/vendor/assets/stylesheets/prism-theme/prism-pojoaque.css +151 -0
  397. data/vendor/assets/stylesheets/prism-theme/prism-previewers.css +242 -0
  398. data/vendor/assets/stylesheets/prism-theme/prism-shades-of-purple.css +196 -0
  399. data/vendor/assets/stylesheets/prism-theme/prism-show-invisibles.css +34 -0
  400. data/vendor/assets/stylesheets/prism-theme/prism-solarized-dark-atom.css +143 -0
  401. data/vendor/assets/stylesheets/{prism-solarizedlight.css → prism-theme/prism-solarizedlight.css} +5 -3
  402. data/vendor/assets/stylesheets/prism-theme/prism-solarizedlight.min.css +1 -0
  403. data/vendor/assets/stylesheets/prism-theme/prism-synthwave84.css +140 -0
  404. data/vendor/assets/stylesheets/{prism-tomorrow.css → prism-theme/prism-tomorrow.css} +1 -0
  405. data/vendor/assets/stylesheets/prism-theme/prism-tomorrow.min.css +1 -0
  406. data/vendor/assets/stylesheets/{prism-toolbar.css → prism-theme/prism-toolbar.css} +15 -15
  407. data/vendor/assets/stylesheets/{prism-twilight.css → prism-theme/prism-twilight.css} +5 -34
  408. data/vendor/assets/stylesheets/prism-theme/prism-twilight.min.css +1 -0
  409. data/vendor/assets/stylesheets/prism-theme/prism-unescaped-markup.css +10 -0
  410. data/vendor/assets/stylesheets/prism-theme/prism-vs.css +168 -0
  411. data/vendor/assets/stylesheets/prism-theme/prism-vsc-dark-plus.css +275 -0
  412. data/vendor/assets/stylesheets/prism-theme/prism-wpd.css +11 -0
  413. data/vendor/assets/stylesheets/prism-theme/prism-xonokai.css +162 -0
  414. data/vendor/assets/stylesheets/prism-theme/prism-z-touch.css +160 -0
  415. data/vendor/assets/stylesheets/prism.css +6 -3
  416. metadata +392 -151
  417. data/vendor/assets/javascripts/prism/prism-abap.js +0 -48
  418. data/vendor/assets/javascripts/prism/prism-actionscript.js +0 -17
  419. data/vendor/assets/javascripts/prism/prism-ada.js +0 -19
  420. data/vendor/assets/javascripts/prism/prism-apacheconf.js +0 -47
  421. data/vendor/assets/javascripts/prism/prism-applescript.js +0 -20
  422. data/vendor/assets/javascripts/prism/prism-aspnet.js +0 -36
  423. data/vendor/assets/javascripts/prism/prism-autohotkey.js +0 -27
  424. data/vendor/assets/javascripts/prism/prism-autoit.js +0 -33
  425. data/vendor/assets/javascripts/prism/prism-bash.js +0 -80
  426. data/vendor/assets/javascripts/prism/prism-bro.js +0 -50
  427. data/vendor/assets/javascripts/prism/prism-c.js +0 -33
  428. data/vendor/assets/javascripts/prism/prism-clike.js +0 -29
  429. data/vendor/assets/javascripts/prism/prism-coffeescript.js +0 -91
  430. data/vendor/assets/javascripts/prism/prism-core.js +0 -511
  431. data/vendor/assets/javascripts/prism/prism-cpp.js +0 -12
  432. data/vendor/assets/javascripts/prism/prism-crystal.js +0 -53
  433. data/vendor/assets/javascripts/prism/prism-csharp.js +0 -32
  434. data/vendor/assets/javascripts/prism/prism-css-extras.js +0 -16
  435. data/vendor/assets/javascripts/prism/prism-css.js +0 -51
  436. data/vendor/assets/javascripts/prism/prism-d.js +0 -64
  437. data/vendor/assets/javascripts/prism/prism-dart.js +0 -18
  438. data/vendor/assets/javascripts/prism/prism-diff.js +0 -20
  439. data/vendor/assets/javascripts/prism/prism-docker.js +0 -9
  440. data/vendor/assets/javascripts/prism/prism-elixir.js +0 -90
  441. data/vendor/assets/javascripts/prism/prism-fsharp.js +0 -33
  442. data/vendor/assets/javascripts/prism/prism-gherkin.js +0 -78
  443. data/vendor/assets/javascripts/prism/prism-glsl.js +0 -16
  444. data/vendor/assets/javascripts/prism/prism-go.js +0 -9
  445. data/vendor/assets/javascripts/prism/prism-graphql.js +0 -24
  446. data/vendor/assets/javascripts/prism/prism-groovy.js +0 -65
  447. data/vendor/assets/javascripts/prism/prism-handlebars.js +0 -83
  448. data/vendor/assets/javascripts/prism/prism-haskell.js +0 -35
  449. data/vendor/assets/javascripts/prism/prism-haxe.js +0 -43
  450. data/vendor/assets/javascripts/prism/prism-http.js +0 -50
  451. data/vendor/assets/javascripts/prism/prism-ini.js +0 -11
  452. data/vendor/assets/javascripts/prism/prism-java.js +0 -16
  453. data/vendor/assets/javascripts/prism/prism-javascript.js +0 -48
  454. data/vendor/assets/javascripts/prism/prism-jolie.js +0 -56
  455. data/vendor/assets/javascripts/prism/prism-json.js +0 -11
  456. data/vendor/assets/javascripts/prism/prism-jsx.js +0 -27
  457. data/vendor/assets/javascripts/prism/prism-julia.js +0 -12
  458. data/vendor/assets/javascripts/prism/prism-keyman.js +0 -14
  459. data/vendor/assets/javascripts/prism/prism-kotlin.js +0 -62
  460. data/vendor/assets/javascripts/prism/prism-latex.js +0 -61
  461. data/vendor/assets/javascripts/prism/prism-lolcode.js +0 -54
  462. data/vendor/assets/javascripts/prism/prism-makefile.js +0 -31
  463. data/vendor/assets/javascripts/prism/prism-markdown.js +0 -120
  464. data/vendor/assets/javascripts/prism/prism-markup.js +0 -46
  465. data/vendor/assets/javascripts/prism/prism-matlab.js +0 -14
  466. data/vendor/assets/javascripts/prism/prism-mel.js +0 -39
  467. data/vendor/assets/javascripts/prism/prism-monkey.js +0 -25
  468. data/vendor/assets/javascripts/prism/prism-nasm.js +0 -24
  469. data/vendor/assets/javascripts/prism/prism-nginx.js +0 -11
  470. data/vendor/assets/javascripts/prism/prism-nsis.js +0 -26
  471. data/vendor/assets/javascripts/prism/prism-objectivec.js +0 -5
  472. data/vendor/assets/javascripts/prism/prism-ocaml.js +0 -21
  473. data/vendor/assets/javascripts/prism/prism-oz.js +0 -21
  474. data/vendor/assets/javascripts/prism/prism-parser.js +0 -66
  475. data/vendor/assets/javascripts/prism/prism-perl.js +0 -140
  476. data/vendor/assets/javascripts/prism/prism-php-extras.js +0 -11
  477. data/vendor/assets/javascripts/prism/prism-php.js +0 -111
  478. data/vendor/assets/javascripts/prism/prism-powershell.js +0 -52
  479. data/vendor/assets/javascripts/prism/prism-processing.js +0 -18
  480. data/vendor/assets/javascripts/prism/prism-properties.js +0 -9
  481. data/vendor/assets/javascripts/prism/prism-protobuf.js +0 -8
  482. data/vendor/assets/javascripts/prism/prism-python.js +0 -27
  483. data/vendor/assets/javascripts/prism/prism-r.js +0 -19
  484. data/vendor/assets/javascripts/prism/prism-rip.js +0 -28
  485. data/vendor/assets/javascripts/prism/prism-ruby.js +0 -116
  486. data/vendor/assets/javascripts/prism/prism-rust.js +0 -53
  487. data/vendor/assets/javascripts/prism/prism-sas.js +0 -31
  488. data/vendor/assets/javascripts/prism/prism-scala.js +0 -18
  489. data/vendor/assets/javascripts/prism/prism-scheme.js +0 -26
  490. data/vendor/assets/javascripts/prism/prism-smarty.js +0 -127
  491. data/vendor/assets/javascripts/prism/prism-sql.js +0 -17
  492. data/vendor/assets/javascripts/prism/prism-stylus.js +0 -102
  493. data/vendor/assets/javascripts/prism/prism-swift.js +0 -25
  494. data/vendor/assets/javascripts/prism/prism-tcl.js +0 -43
  495. data/vendor/assets/javascripts/prism/prism-textile.js +0 -257
  496. data/vendor/assets/javascripts/prism/prism-twig.js +0 -46
  497. data/vendor/assets/javascripts/prism/prism-typescript.js +0 -5
  498. data/vendor/assets/javascripts/prism/prism-verilog.js +0 -17
  499. data/vendor/assets/javascripts/prism/prism-vhdl.js +0 -23
  500. data/vendor/assets/javascripts/prism/prism-vim.js +0 -10
  501. data/vendor/assets/javascripts/prism/prism-xojo.js +0 -20
  502. data/vendor/assets/javascripts/prism/prism-yaml.js +0 -44
  503. data/vendor/assets/stylesheets/prism-hopscotch.css +0 -124
  504. data/vendor/assets/stylesheets/prism-pojoaque.css +0 -134
  505. data/vendor/assets/stylesheets/prism-vs.css +0 -157
  506. data/vendor/assets/stylesheets/prism-xonokai.css +0 -164
  507. /data/vendor/assets/javascripts/{prism → languages}/prism-jade.js +0 -0
  508. /data/vendor/assets/stylesheets/{prism-show-language.css → prism-theme/prism-show-language.css} +0 -0
@@ -0,0 +1,1263 @@
1
+ /// <reference lib="WebWorker"/>
2
+
3
+ var _self = (typeof window !== 'undefined')
4
+ ? window // if in browser
5
+ : (
6
+ (typeof WorkerGlobalScope !== 'undefined' && self instanceof WorkerGlobalScope)
7
+ ? self // if in worker
8
+ : {} // if in node js
9
+ );
10
+
11
+ /**
12
+ * Prism: Lightweight, robust, elegant syntax highlighting
13
+ *
14
+ * @license MIT <https://opensource.org/licenses/MIT>
15
+ * @author Lea Verou <https://lea.verou.me>
16
+ * @namespace
17
+ * @public
18
+ */
19
+ var Prism = (function (_self) {
20
+
21
+ // Private helper vars
22
+ var lang = /(?:^|\s)lang(?:uage)?-([\w-]+)(?=\s|$)/i;
23
+ var uniqueId = 0;
24
+
25
+ // The grammar object for plaintext
26
+ var plainTextGrammar = {};
27
+
28
+
29
+ var _ = {
30
+ /**
31
+ * By default, Prism will attempt to highlight all code elements (by calling {@link Prism.highlightAll}) on the
32
+ * current page after the page finished loading. This might be a problem if e.g. you wanted to asynchronously load
33
+ * additional languages or plugins yourself.
34
+ *
35
+ * By setting this value to `true`, Prism will not automatically highlight all code elements on the page.
36
+ *
37
+ * You obviously have to change this value before the automatic highlighting started. To do this, you can add an
38
+ * empty Prism object into the global scope before loading the Prism script like this:
39
+ *
40
+ * ```js
41
+ * window.Prism = window.Prism || {};
42
+ * Prism.manual = true;
43
+ * // add a new <script> to load Prism's script
44
+ * ```
45
+ *
46
+ * @default false
47
+ * @type {boolean}
48
+ * @memberof Prism
49
+ * @public
50
+ */
51
+ manual: _self.Prism && _self.Prism.manual,
52
+ /**
53
+ * By default, if Prism is in a web worker, it assumes that it is in a worker it created itself, so it uses
54
+ * `addEventListener` to communicate with its parent instance. However, if you're using Prism manually in your
55
+ * own worker, you don't want it to do this.
56
+ *
57
+ * By setting this value to `true`, Prism will not add its own listeners to the worker.
58
+ *
59
+ * You obviously have to change this value before Prism executes. To do this, you can add an
60
+ * empty Prism object into the global scope before loading the Prism script like this:
61
+ *
62
+ * ```js
63
+ * window.Prism = window.Prism || {};
64
+ * Prism.disableWorkerMessageHandler = true;
65
+ * // Load Prism's script
66
+ * ```
67
+ *
68
+ * @default false
69
+ * @type {boolean}
70
+ * @memberof Prism
71
+ * @public
72
+ */
73
+ disableWorkerMessageHandler: _self.Prism && _self.Prism.disableWorkerMessageHandler,
74
+
75
+ /**
76
+ * A namespace for utility methods.
77
+ *
78
+ * All function in this namespace that are not explicitly marked as _public_ are for __internal use only__ and may
79
+ * change or disappear at any time.
80
+ *
81
+ * @namespace
82
+ * @memberof Prism
83
+ */
84
+ util: {
85
+ encode: function encode(tokens) {
86
+ if (tokens instanceof Token) {
87
+ return new Token(tokens.type, encode(tokens.content), tokens.alias);
88
+ } else if (Array.isArray(tokens)) {
89
+ return tokens.map(encode);
90
+ } else {
91
+ return tokens.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/\u00a0/g, ' ');
92
+ }
93
+ },
94
+
95
+ /**
96
+ * Returns the name of the type of the given value.
97
+ *
98
+ * @param {any} o
99
+ * @returns {string}
100
+ * @example
101
+ * type(null) === 'Null'
102
+ * type(undefined) === 'Undefined'
103
+ * type(123) === 'Number'
104
+ * type('foo') === 'String'
105
+ * type(true) === 'Boolean'
106
+ * type([1, 2]) === 'Array'
107
+ * type({}) === 'Object'
108
+ * type(String) === 'Function'
109
+ * type(/abc+/) === 'RegExp'
110
+ */
111
+ type: function (o) {
112
+ return Object.prototype.toString.call(o).slice(8, -1);
113
+ },
114
+
115
+ /**
116
+ * Returns a unique number for the given object. Later calls will still return the same number.
117
+ *
118
+ * @param {Object} obj
119
+ * @returns {number}
120
+ */
121
+ objId: function (obj) {
122
+ if (!obj['__id']) {
123
+ Object.defineProperty(obj, '__id', { value: ++uniqueId });
124
+ }
125
+ return obj['__id'];
126
+ },
127
+
128
+ /**
129
+ * Creates a deep clone of the given object.
130
+ *
131
+ * The main intended use of this function is to clone language definitions.
132
+ *
133
+ * @param {T} o
134
+ * @param {Record<number, any>} [visited]
135
+ * @returns {T}
136
+ * @template T
137
+ */
138
+ clone: function deepClone(o, visited) {
139
+ visited = visited || {};
140
+
141
+ var clone; var id;
142
+ switch (_.util.type(o)) {
143
+ case 'Object':
144
+ id = _.util.objId(o);
145
+ if (visited[id]) {
146
+ return visited[id];
147
+ }
148
+ clone = /** @type {Record<string, any>} */ ({});
149
+ visited[id] = clone;
150
+
151
+ for (var key in o) {
152
+ if (o.hasOwnProperty(key)) {
153
+ clone[key] = deepClone(o[key], visited);
154
+ }
155
+ }
156
+
157
+ return /** @type {any} */ (clone);
158
+
159
+ case 'Array':
160
+ id = _.util.objId(o);
161
+ if (visited[id]) {
162
+ return visited[id];
163
+ }
164
+ clone = [];
165
+ visited[id] = clone;
166
+
167
+ (/** @type {Array} */(/** @type {any} */(o))).forEach(function (v, i) {
168
+ clone[i] = deepClone(v, visited);
169
+ });
170
+
171
+ return /** @type {any} */ (clone);
172
+
173
+ default:
174
+ return o;
175
+ }
176
+ },
177
+
178
+ /**
179
+ * Returns the Prism language of the given element set by a `language-xxxx` or `lang-xxxx` class.
180
+ *
181
+ * If no language is set for the element or the element is `null` or `undefined`, `none` will be returned.
182
+ *
183
+ * @param {Element} element
184
+ * @returns {string}
185
+ */
186
+ getLanguage: function (element) {
187
+ while (element) {
188
+ var m = lang.exec(element.className);
189
+ if (m) {
190
+ return m[1].toLowerCase();
191
+ }
192
+ element = element.parentElement;
193
+ }
194
+ return 'none';
195
+ },
196
+
197
+ /**
198
+ * Sets the Prism `language-xxxx` class of the given element.
199
+ *
200
+ * @param {Element} element
201
+ * @param {string} language
202
+ * @returns {void}
203
+ */
204
+ setLanguage: function (element, language) {
205
+ // remove all `language-xxxx` classes
206
+ // (this might leave behind a leading space)
207
+ element.className = element.className.replace(RegExp(lang, 'gi'), '');
208
+
209
+ // add the new `language-xxxx` class
210
+ // (using `classList` will automatically clean up spaces for us)
211
+ element.classList.add('language-' + language);
212
+ },
213
+
214
+ /**
215
+ * Returns the script element that is currently executing.
216
+ *
217
+ * This does __not__ work for line script element.
218
+ *
219
+ * @returns {HTMLScriptElement | null}
220
+ */
221
+ currentScript: function () {
222
+ if (typeof document === 'undefined') {
223
+ return null;
224
+ }
225
+ if ('currentScript' in document && 1 < 2 /* hack to trip TS' flow analysis */) {
226
+ return /** @type {any} */ (document.currentScript);
227
+ }
228
+
229
+ // IE11 workaround
230
+ // we'll get the src of the current script by parsing IE11's error stack trace
231
+ // this will not work for inline scripts
232
+
233
+ try {
234
+ throw new Error();
235
+ } catch (err) {
236
+ // Get file src url from stack. Specifically works with the format of stack traces in IE.
237
+ // A stack will look like this:
238
+ //
239
+ // Error
240
+ // at _.util.currentScript (http://localhost/components/prism-core.js:119:5)
241
+ // at Global code (http://localhost/components/prism-core.js:606:1)
242
+
243
+ var src = (/at [^(\r\n]*\((.*):[^:]+:[^:]+\)$/i.exec(err.stack) || [])[1];
244
+ if (src) {
245
+ var scripts = document.getElementsByTagName('script');
246
+ for (var i in scripts) {
247
+ if (scripts[i].src == src) {
248
+ return scripts[i];
249
+ }
250
+ }
251
+ }
252
+ return null;
253
+ }
254
+ },
255
+
256
+ /**
257
+ * Returns whether a given class is active for `element`.
258
+ *
259
+ * The class can be activated if `element` or one of its ancestors has the given class and it can be deactivated
260
+ * if `element` or one of its ancestors has the negated version of the given class. The _negated version_ of the
261
+ * given class is just the given class with a `no-` prefix.
262
+ *
263
+ * Whether the class is active is determined by the closest ancestor of `element` (where `element` itself is
264
+ * closest ancestor) that has the given class or the negated version of it. If neither `element` nor any of its
265
+ * ancestors have the given class or the negated version of it, then the default activation will be returned.
266
+ *
267
+ * In the paradoxical situation where the closest ancestor contains __both__ the given class and the negated
268
+ * version of it, the class is considered active.
269
+ *
270
+ * @param {Element} element
271
+ * @param {string} className
272
+ * @param {boolean} [defaultActivation=false]
273
+ * @returns {boolean}
274
+ */
275
+ isActive: function (element, className, defaultActivation) {
276
+ var no = 'no-' + className;
277
+
278
+ while (element) {
279
+ var classList = element.classList;
280
+ if (classList.contains(className)) {
281
+ return true;
282
+ }
283
+ if (classList.contains(no)) {
284
+ return false;
285
+ }
286
+ element = element.parentElement;
287
+ }
288
+ return !!defaultActivation;
289
+ }
290
+ },
291
+
292
+ /**
293
+ * This namespace contains all currently loaded languages and the some helper functions to create and modify languages.
294
+ *
295
+ * @namespace
296
+ * @memberof Prism
297
+ * @public
298
+ */
299
+ languages: {
300
+ /**
301
+ * The grammar for plain, unformatted text.
302
+ */
303
+ plain: plainTextGrammar,
304
+ plaintext: plainTextGrammar,
305
+ text: plainTextGrammar,
306
+ txt: plainTextGrammar,
307
+
308
+ /**
309
+ * Creates a deep copy of the language with the given id and appends the given tokens.
310
+ *
311
+ * If a token in `redef` also appears in the copied language, then the existing token in the copied language
312
+ * will be overwritten at its original position.
313
+ *
314
+ * ## Best practices
315
+ *
316
+ * Since the position of overwriting tokens (token in `redef` that overwrite tokens in the copied language)
317
+ * doesn't matter, they can technically be in any order. However, this can be confusing to others that trying to
318
+ * understand the language definition because, normally, the order of tokens matters in Prism grammars.
319
+ *
320
+ * Therefore, it is encouraged to order overwriting tokens according to the positions of the overwritten tokens.
321
+ * Furthermore, all non-overwriting tokens should be placed after the overwriting ones.
322
+ *
323
+ * @param {string} id The id of the language to extend. This has to be a key in `Prism.languages`.
324
+ * @param {Grammar} redef The new tokens to append.
325
+ * @returns {Grammar} The new language created.
326
+ * @public
327
+ * @example
328
+ * Prism.languages['css-with-colors'] = Prism.languages.extend('css', {
329
+ * // Prism.languages.css already has a 'comment' token, so this token will overwrite CSS' 'comment' token
330
+ * // at its original position
331
+ * 'comment': { ... },
332
+ * // CSS doesn't have a 'color' token, so this token will be appended
333
+ * 'color': /\b(?:red|green|blue)\b/
334
+ * });
335
+ */
336
+ extend: function (id, redef) {
337
+ var lang = _.util.clone(_.languages[id]);
338
+
339
+ for (var key in redef) {
340
+ lang[key] = redef[key];
341
+ }
342
+
343
+ return lang;
344
+ },
345
+
346
+ /**
347
+ * Inserts tokens _before_ another token in a language definition or any other grammar.
348
+ *
349
+ * ## Usage
350
+ *
351
+ * This helper method makes it easy to modify existing languages. For example, the CSS language definition
352
+ * not only defines CSS highlighting for CSS documents, but also needs to define highlighting for CSS embedded
353
+ * in HTML through `<style>` elements. To do this, it needs to modify `Prism.languages.markup` and add the
354
+ * appropriate tokens. However, `Prism.languages.markup` is a regular JavaScript object literal, so if you do
355
+ * this:
356
+ *
357
+ * ```js
358
+ * Prism.languages.markup.style = {
359
+ * // token
360
+ * };
361
+ * ```
362
+ *
363
+ * then the `style` token will be added (and processed) at the end. `insertBefore` allows you to insert tokens
364
+ * before existing tokens. For the CSS example above, you would use it like this:
365
+ *
366
+ * ```js
367
+ * Prism.languages.insertBefore('markup', 'cdata', {
368
+ * 'style': {
369
+ * // token
370
+ * }
371
+ * });
372
+ * ```
373
+ *
374
+ * ## Special cases
375
+ *
376
+ * If the grammars of `inside` and `insert` have tokens with the same name, the tokens in `inside`'s grammar
377
+ * will be ignored.
378
+ *
379
+ * This behavior can be used to insert tokens after `before`:
380
+ *
381
+ * ```js
382
+ * Prism.languages.insertBefore('markup', 'comment', {
383
+ * 'comment': Prism.languages.markup.comment,
384
+ * // tokens after 'comment'
385
+ * });
386
+ * ```
387
+ *
388
+ * ## Limitations
389
+ *
390
+ * The main problem `insertBefore` has to solve is iteration order. Since ES2015, the iteration order for object
391
+ * properties is guaranteed to be the insertion order (except for integer keys) but some browsers behave
392
+ * differently when keys are deleted and re-inserted. So `insertBefore` can't be implemented by temporarily
393
+ * deleting properties which is necessary to insert at arbitrary positions.
394
+ *
395
+ * To solve this problem, `insertBefore` doesn't actually insert the given tokens into the target object.
396
+ * Instead, it will create a new object and replace all references to the target object with the new one. This
397
+ * can be done without temporarily deleting properties, so the iteration order is well-defined.
398
+ *
399
+ * However, only references that can be reached from `Prism.languages` or `insert` will be replaced. I.e. if
400
+ * you hold the target object in a variable, then the value of the variable will not change.
401
+ *
402
+ * ```js
403
+ * var oldMarkup = Prism.languages.markup;
404
+ * var newMarkup = Prism.languages.insertBefore('markup', 'comment', { ... });
405
+ *
406
+ * assert(oldMarkup !== Prism.languages.markup);
407
+ * assert(newMarkup === Prism.languages.markup);
408
+ * ```
409
+ *
410
+ * @param {string} inside The property of `root` (e.g. a language id in `Prism.languages`) that contains the
411
+ * object to be modified.
412
+ * @param {string} before The key to insert before.
413
+ * @param {Grammar} insert An object containing the key-value pairs to be inserted.
414
+ * @param {Object<string, any>} [root] The object containing `inside`, i.e. the object that contains the
415
+ * object to be modified.
416
+ *
417
+ * Defaults to `Prism.languages`.
418
+ * @returns {Grammar} The new grammar object.
419
+ * @public
420
+ */
421
+ insertBefore: function (inside, before, insert, root) {
422
+ root = root || /** @type {any} */ (_.languages);
423
+ var grammar = root[inside];
424
+ /** @type {Grammar} */
425
+ var ret = {};
426
+
427
+ for (var token in grammar) {
428
+ if (grammar.hasOwnProperty(token)) {
429
+
430
+ if (token == before) {
431
+ for (var newToken in insert) {
432
+ if (insert.hasOwnProperty(newToken)) {
433
+ ret[newToken] = insert[newToken];
434
+ }
435
+ }
436
+ }
437
+
438
+ // Do not insert token which also occur in insert. See #1525
439
+ if (!insert.hasOwnProperty(token)) {
440
+ ret[token] = grammar[token];
441
+ }
442
+ }
443
+ }
444
+
445
+ var old = root[inside];
446
+ root[inside] = ret;
447
+
448
+ // Update references in other language definitions
449
+ _.languages.DFS(_.languages, function (key, value) {
450
+ if (value === old && key != inside) {
451
+ this[key] = ret;
452
+ }
453
+ });
454
+
455
+ return ret;
456
+ },
457
+
458
+ // Traverse a language definition with Depth First Search
459
+ DFS: function DFS(o, callback, type, visited) {
460
+ visited = visited || {};
461
+
462
+ var objId = _.util.objId;
463
+
464
+ for (var i in o) {
465
+ if (o.hasOwnProperty(i)) {
466
+ callback.call(o, i, o[i], type || i);
467
+
468
+ var property = o[i];
469
+ var propertyType = _.util.type(property);
470
+
471
+ if (propertyType === 'Object' && !visited[objId(property)]) {
472
+ visited[objId(property)] = true;
473
+ DFS(property, callback, null, visited);
474
+ } else if (propertyType === 'Array' && !visited[objId(property)]) {
475
+ visited[objId(property)] = true;
476
+ DFS(property, callback, i, visited);
477
+ }
478
+ }
479
+ }
480
+ }
481
+ },
482
+
483
+ plugins: {},
484
+
485
+ /**
486
+ * This is the most high-level function in Prism’s API.
487
+ * It fetches all the elements that have a `.language-xxxx` class and then calls {@link Prism.highlightElement} on
488
+ * each one of them.
489
+ *
490
+ * This is equivalent to `Prism.highlightAllUnder(document, async, callback)`.
491
+ *
492
+ * @param {boolean} [async=false] Same as in {@link Prism.highlightAllUnder}.
493
+ * @param {HighlightCallback} [callback] Same as in {@link Prism.highlightAllUnder}.
494
+ * @memberof Prism
495
+ * @public
496
+ */
497
+ highlightAll: function (async, callback) {
498
+ _.highlightAllUnder(document, async, callback);
499
+ },
500
+
501
+ /**
502
+ * Fetches all the descendants of `container` that have a `.language-xxxx` class and then calls
503
+ * {@link Prism.highlightElement} on each one of them.
504
+ *
505
+ * The following hooks will be run:
506
+ * 1. `before-highlightall`
507
+ * 2. `before-all-elements-highlight`
508
+ * 3. All hooks of {@link Prism.highlightElement} for each element.
509
+ *
510
+ * @param {ParentNode} container The root element, whose descendants that have a `.language-xxxx` class will be highlighted.
511
+ * @param {boolean} [async=false] Whether each element is to be highlighted asynchronously using Web Workers.
512
+ * @param {HighlightCallback} [callback] An optional callback to be invoked on each element after its highlighting is done.
513
+ * @memberof Prism
514
+ * @public
515
+ */
516
+ highlightAllUnder: function (container, async, callback) {
517
+ var env = {
518
+ callback: callback,
519
+ container: container,
520
+ selector: 'code[class*="language-"], [class*="language-"] code, code[class*="lang-"], [class*="lang-"] code'
521
+ };
522
+
523
+ _.hooks.run('before-highlightall', env);
524
+
525
+ env.elements = Array.prototype.slice.apply(env.container.querySelectorAll(env.selector));
526
+
527
+ _.hooks.run('before-all-elements-highlight', env);
528
+
529
+ for (var i = 0, element; (element = env.elements[i++]);) {
530
+ _.highlightElement(element, async === true, env.callback);
531
+ }
532
+ },
533
+
534
+ /**
535
+ * Highlights the code inside a single element.
536
+ *
537
+ * The following hooks will be run:
538
+ * 1. `before-sanity-check`
539
+ * 2. `before-highlight`
540
+ * 3. All hooks of {@link Prism.highlight}. These hooks will be run by an asynchronous worker if `async` is `true`.
541
+ * 4. `before-insert`
542
+ * 5. `after-highlight`
543
+ * 6. `complete`
544
+ *
545
+ * Some the above hooks will be skipped if the element doesn't contain any text or there is no grammar loaded for
546
+ * the element's language.
547
+ *
548
+ * @param {Element} element The element containing the code.
549
+ * It must have a class of `language-xxxx` to be processed, where `xxxx` is a valid language identifier.
550
+ * @param {boolean} [async=false] Whether the element is to be highlighted asynchronously using Web Workers
551
+ * to improve performance and avoid blocking the UI when highlighting very large chunks of code. This option is
552
+ * [disabled by default](https://prismjs.com/faq.html#why-is-asynchronous-highlighting-disabled-by-default).
553
+ *
554
+ * Note: All language definitions required to highlight the code must be included in the main `prism.js` file for
555
+ * asynchronous highlighting to work. You can build your own bundle on the
556
+ * [Download page](https://prismjs.com/download.html).
557
+ * @param {HighlightCallback} [callback] An optional callback to be invoked after the highlighting is done.
558
+ * Mostly useful when `async` is `true`, since in that case, the highlighting is done asynchronously.
559
+ * @memberof Prism
560
+ * @public
561
+ */
562
+ highlightElement: function (element, async, callback) {
563
+ // Find language
564
+ var language = _.util.getLanguage(element);
565
+ var grammar = _.languages[language];
566
+
567
+ // Set language on the element, if not present
568
+ _.util.setLanguage(element, language);
569
+
570
+ // Set language on the parent, for styling
571
+ var parent = element.parentElement;
572
+ if (parent && parent.nodeName.toLowerCase() === 'pre') {
573
+ _.util.setLanguage(parent, language);
574
+ }
575
+
576
+ var code = element.textContent;
577
+
578
+ var env = {
579
+ element: element,
580
+ language: language,
581
+ grammar: grammar,
582
+ code: code
583
+ };
584
+
585
+ function insertHighlightedCode(highlightedCode) {
586
+ env.highlightedCode = highlightedCode;
587
+
588
+ _.hooks.run('before-insert', env);
589
+
590
+ env.element.innerHTML = env.highlightedCode;
591
+
592
+ _.hooks.run('after-highlight', env);
593
+ _.hooks.run('complete', env);
594
+ callback && callback.call(env.element);
595
+ }
596
+
597
+ _.hooks.run('before-sanity-check', env);
598
+
599
+ // plugins may change/add the parent/element
600
+ parent = env.element.parentElement;
601
+ if (parent && parent.nodeName.toLowerCase() === 'pre' && !parent.hasAttribute('tabindex')) {
602
+ parent.setAttribute('tabindex', '0');
603
+ }
604
+
605
+ if (!env.code) {
606
+ _.hooks.run('complete', env);
607
+ callback && callback.call(env.element);
608
+ return;
609
+ }
610
+
611
+ _.hooks.run('before-highlight', env);
612
+
613
+ if (!env.grammar) {
614
+ insertHighlightedCode(_.util.encode(env.code));
615
+ return;
616
+ }
617
+
618
+ if (async && _self.Worker) {
619
+ var worker = new Worker(_.filename);
620
+
621
+ worker.onmessage = function (evt) {
622
+ insertHighlightedCode(evt.data);
623
+ };
624
+
625
+ worker.postMessage(JSON.stringify({
626
+ language: env.language,
627
+ code: env.code,
628
+ immediateClose: true
629
+ }));
630
+ } else {
631
+ insertHighlightedCode(_.highlight(env.code, env.grammar, env.language));
632
+ }
633
+ },
634
+
635
+ /**
636
+ * Low-level function, only use if you know what you’re doing. It accepts a string of text as input
637
+ * and the language definitions to use, and returns a string with the HTML produced.
638
+ *
639
+ * The following hooks will be run:
640
+ * 1. `before-tokenize`
641
+ * 2. `after-tokenize`
642
+ * 3. `wrap`: On each {@link Token}.
643
+ *
644
+ * @param {string} text A string with the code to be highlighted.
645
+ * @param {Grammar} grammar An object containing the tokens to use.
646
+ *
647
+ * Usually a language definition like `Prism.languages.markup`.
648
+ * @param {string} language The name of the language definition passed to `grammar`.
649
+ * @returns {string} The highlighted HTML.
650
+ * @memberof Prism
651
+ * @public
652
+ * @example
653
+ * Prism.highlight('var foo = true;', Prism.languages.javascript, 'javascript');
654
+ */
655
+ highlight: function (text, grammar, language) {
656
+ var env = {
657
+ code: text,
658
+ grammar: grammar,
659
+ language: language
660
+ };
661
+ _.hooks.run('before-tokenize', env);
662
+ if (!env.grammar) {
663
+ throw new Error('The language "' + env.language + '" has no grammar.');
664
+ }
665
+ env.tokens = _.tokenize(env.code, env.grammar);
666
+ _.hooks.run('after-tokenize', env);
667
+ return Token.stringify(_.util.encode(env.tokens), env.language);
668
+ },
669
+
670
+ /**
671
+ * This is the heart of Prism, and the most low-level function you can use. It accepts a string of text as input
672
+ * and the language definitions to use, and returns an array with the tokenized code.
673
+ *
674
+ * When the language definition includes nested tokens, the function is called recursively on each of these tokens.
675
+ *
676
+ * This method could be useful in other contexts as well, as a very crude parser.
677
+ *
678
+ * @param {string} text A string with the code to be highlighted.
679
+ * @param {Grammar} grammar An object containing the tokens to use.
680
+ *
681
+ * Usually a language definition like `Prism.languages.markup`.
682
+ * @returns {TokenStream} An array of strings and tokens, a token stream.
683
+ * @memberof Prism
684
+ * @public
685
+ * @example
686
+ * let code = `var foo = 0;`;
687
+ * let tokens = Prism.tokenize(code, Prism.languages.javascript);
688
+ * tokens.forEach(token => {
689
+ * if (token instanceof Prism.Token && token.type === 'number') {
690
+ * console.log(`Found numeric literal: ${token.content}`);
691
+ * }
692
+ * });
693
+ */
694
+ tokenize: function (text, grammar) {
695
+ var rest = grammar.rest;
696
+ if (rest) {
697
+ for (var token in rest) {
698
+ grammar[token] = rest[token];
699
+ }
700
+
701
+ delete grammar.rest;
702
+ }
703
+
704
+ var tokenList = new LinkedList();
705
+ addAfter(tokenList, tokenList.head, text);
706
+
707
+ matchGrammar(text, tokenList, grammar, tokenList.head, 0);
708
+
709
+ return toArray(tokenList);
710
+ },
711
+
712
+ /**
713
+ * @namespace
714
+ * @memberof Prism
715
+ * @public
716
+ */
717
+ hooks: {
718
+ all: {},
719
+
720
+ /**
721
+ * Adds the given callback to the list of callbacks for the given hook.
722
+ *
723
+ * The callback will be invoked when the hook it is registered for is run.
724
+ * Hooks are usually directly run by a highlight function but you can also run hooks yourself.
725
+ *
726
+ * One callback function can be registered to multiple hooks and the same hook multiple times.
727
+ *
728
+ * @param {string} name The name of the hook.
729
+ * @param {HookCallback} callback The callback function which is given environment variables.
730
+ * @public
731
+ */
732
+ add: function (name, callback) {
733
+ var hooks = _.hooks.all;
734
+
735
+ hooks[name] = hooks[name] || [];
736
+
737
+ hooks[name].push(callback);
738
+ },
739
+
740
+ /**
741
+ * Runs a hook invoking all registered callbacks with the given environment variables.
742
+ *
743
+ * Callbacks will be invoked synchronously and in the order in which they were registered.
744
+ *
745
+ * @param {string} name The name of the hook.
746
+ * @param {Object<string, any>} env The environment variables of the hook passed to all callbacks registered.
747
+ * @public
748
+ */
749
+ run: function (name, env) {
750
+ var callbacks = _.hooks.all[name];
751
+
752
+ if (!callbacks || !callbacks.length) {
753
+ return;
754
+ }
755
+
756
+ for (var i = 0, callback; (callback = callbacks[i++]);) {
757
+ callback(env);
758
+ }
759
+ }
760
+ },
761
+
762
+ Token: Token
763
+ };
764
+ _self.Prism = _;
765
+
766
+
767
+ // Typescript note:
768
+ // The following can be used to import the Token type in JSDoc:
769
+ //
770
+ // @typedef {InstanceType<import("./prism-core")["Token"]>} Token
771
+
772
+ /**
773
+ * Creates a new token.
774
+ *
775
+ * @param {string} type See {@link Token#type type}
776
+ * @param {string | TokenStream} content See {@link Token#content content}
777
+ * @param {string|string[]} [alias] The alias(es) of the token.
778
+ * @param {string} [matchedStr=""] A copy of the full string this token was created from.
779
+ * @class
780
+ * @global
781
+ * @public
782
+ */
783
+ function Token(type, content, alias, matchedStr) {
784
+ /**
785
+ * The type of the token.
786
+ *
787
+ * This is usually the key of a pattern in a {@link Grammar}.
788
+ *
789
+ * @type {string}
790
+ * @see GrammarToken
791
+ * @public
792
+ */
793
+ this.type = type;
794
+ /**
795
+ * The strings or tokens contained by this token.
796
+ *
797
+ * This will be a token stream if the pattern matched also defined an `inside` grammar.
798
+ *
799
+ * @type {string | TokenStream}
800
+ * @public
801
+ */
802
+ this.content = content;
803
+ /**
804
+ * The alias(es) of the token.
805
+ *
806
+ * @type {string|string[]}
807
+ * @see GrammarToken
808
+ * @public
809
+ */
810
+ this.alias = alias;
811
+ // Copy of the full string this token was created from
812
+ this.length = (matchedStr || '').length | 0;
813
+ }
814
+
815
+ /**
816
+ * A token stream is an array of strings and {@link Token Token} objects.
817
+ *
818
+ * Token streams have to fulfill a few properties that are assumed by most functions (mostly internal ones) that process
819
+ * them.
820
+ *
821
+ * 1. No adjacent strings.
822
+ * 2. No empty strings.
823
+ *
824
+ * The only exception here is the token stream that only contains the empty string and nothing else.
825
+ *
826
+ * @typedef {Array<string | Token>} TokenStream
827
+ * @global
828
+ * @public
829
+ */
830
+
831
+ /**
832
+ * Converts the given token or token stream to an HTML representation.
833
+ *
834
+ * The following hooks will be run:
835
+ * 1. `wrap`: On each {@link Token}.
836
+ *
837
+ * @param {string | Token | TokenStream} o The token or token stream to be converted.
838
+ * @param {string} language The name of current language.
839
+ * @returns {string} The HTML representation of the token or token stream.
840
+ * @memberof Token
841
+ * @static
842
+ */
843
+ Token.stringify = function stringify(o, language) {
844
+ if (typeof o == 'string') {
845
+ return o;
846
+ }
847
+ if (Array.isArray(o)) {
848
+ var s = '';
849
+ o.forEach(function (e) {
850
+ s += stringify(e, language);
851
+ });
852
+ return s;
853
+ }
854
+
855
+ var env = {
856
+ type: o.type,
857
+ content: stringify(o.content, language),
858
+ tag: 'span',
859
+ classes: ['token', o.type],
860
+ attributes: {},
861
+ language: language
862
+ };
863
+
864
+ var aliases = o.alias;
865
+ if (aliases) {
866
+ if (Array.isArray(aliases)) {
867
+ Array.prototype.push.apply(env.classes, aliases);
868
+ } else {
869
+ env.classes.push(aliases);
870
+ }
871
+ }
872
+
873
+ _.hooks.run('wrap', env);
874
+
875
+ var attributes = '';
876
+ for (var name in env.attributes) {
877
+ attributes += ' ' + name + '="' + (env.attributes[name] || '').replace(/"/g, '&quot;') + '"';
878
+ }
879
+
880
+ return '<' + env.tag + ' class="' + env.classes.join(' ') + '"' + attributes + '>' + env.content + '</' + env.tag + '>';
881
+ };
882
+
883
+ /**
884
+ * @param {RegExp} pattern
885
+ * @param {number} pos
886
+ * @param {string} text
887
+ * @param {boolean} lookbehind
888
+ * @returns {RegExpExecArray | null}
889
+ */
890
+ function matchPattern(pattern, pos, text, lookbehind) {
891
+ pattern.lastIndex = pos;
892
+ var match = pattern.exec(text);
893
+ if (match && lookbehind && match[1]) {
894
+ // change the match to remove the text matched by the Prism lookbehind group
895
+ var lookbehindLength = match[1].length;
896
+ match.index += lookbehindLength;
897
+ match[0] = match[0].slice(lookbehindLength);
898
+ }
899
+ return match;
900
+ }
901
+
902
+ /**
903
+ * @param {string} text
904
+ * @param {LinkedList<string | Token>} tokenList
905
+ * @param {any} grammar
906
+ * @param {LinkedListNode<string | Token>} startNode
907
+ * @param {number} startPos
908
+ * @param {RematchOptions} [rematch]
909
+ * @returns {void}
910
+ * @private
911
+ *
912
+ * @typedef RematchOptions
913
+ * @property {string} cause
914
+ * @property {number} reach
915
+ */
916
+ function matchGrammar(text, tokenList, grammar, startNode, startPos, rematch) {
917
+ for (var token in grammar) {
918
+ if (!grammar.hasOwnProperty(token) || !grammar[token]) {
919
+ continue;
920
+ }
921
+
922
+ var patterns = grammar[token];
923
+ patterns = Array.isArray(patterns) ? patterns : [patterns];
924
+
925
+ for (var j = 0; j < patterns.length; ++j) {
926
+ if (rematch && rematch.cause == token + ',' + j) {
927
+ return;
928
+ }
929
+
930
+ var patternObj = patterns[j];
931
+ var inside = patternObj.inside;
932
+ var lookbehind = !!patternObj.lookbehind;
933
+ var greedy = !!patternObj.greedy;
934
+ var alias = patternObj.alias;
935
+
936
+ if (greedy && !patternObj.pattern.global) {
937
+ // Without the global flag, lastIndex won't work
938
+ var flags = patternObj.pattern.toString().match(/[imsuy]*$/)[0];
939
+ patternObj.pattern = RegExp(patternObj.pattern.source, flags + 'g');
940
+ }
941
+
942
+ /** @type {RegExp} */
943
+ var pattern = patternObj.pattern || patternObj;
944
+
945
+ for ( // iterate the token list and keep track of the current token/string position
946
+ var currentNode = startNode.next, pos = startPos;
947
+ currentNode !== tokenList.tail;
948
+ pos += currentNode.value.length, currentNode = currentNode.next
949
+ ) {
950
+
951
+ if (rematch && pos >= rematch.reach) {
952
+ break;
953
+ }
954
+
955
+ var str = currentNode.value;
956
+
957
+ if (tokenList.length > text.length) {
958
+ // Something went terribly wrong, ABORT, ABORT!
959
+ return;
960
+ }
961
+
962
+ if (str instanceof Token) {
963
+ continue;
964
+ }
965
+
966
+ var removeCount = 1; // this is the to parameter of removeBetween
967
+ var match;
968
+
969
+ if (greedy) {
970
+ match = matchPattern(pattern, pos, text, lookbehind);
971
+ if (!match || match.index >= text.length) {
972
+ break;
973
+ }
974
+
975
+ var from = match.index;
976
+ var to = match.index + match[0].length;
977
+ var p = pos;
978
+
979
+ // find the node that contains the match
980
+ p += currentNode.value.length;
981
+ while (from >= p) {
982
+ currentNode = currentNode.next;
983
+ p += currentNode.value.length;
984
+ }
985
+ // adjust pos (and p)
986
+ p -= currentNode.value.length;
987
+ pos = p;
988
+
989
+ // the current node is a Token, then the match starts inside another Token, which is invalid
990
+ if (currentNode.value instanceof Token) {
991
+ continue;
992
+ }
993
+
994
+ // find the last node which is affected by this match
995
+ for (
996
+ var k = currentNode;
997
+ k !== tokenList.tail && (p < to || typeof k.value === 'string');
998
+ k = k.next
999
+ ) {
1000
+ removeCount++;
1001
+ p += k.value.length;
1002
+ }
1003
+ removeCount--;
1004
+
1005
+ // replace with the new match
1006
+ str = text.slice(pos, p);
1007
+ match.index -= pos;
1008
+ } else {
1009
+ match = matchPattern(pattern, 0, str, lookbehind);
1010
+ if (!match) {
1011
+ continue;
1012
+ }
1013
+ }
1014
+
1015
+ // eslint-disable-next-line no-redeclare
1016
+ var from = match.index;
1017
+ var matchStr = match[0];
1018
+ var before = str.slice(0, from);
1019
+ var after = str.slice(from + matchStr.length);
1020
+
1021
+ var reach = pos + str.length;
1022
+ if (rematch && reach > rematch.reach) {
1023
+ rematch.reach = reach;
1024
+ }
1025
+
1026
+ var removeFrom = currentNode.prev;
1027
+
1028
+ if (before) {
1029
+ removeFrom = addAfter(tokenList, removeFrom, before);
1030
+ pos += before.length;
1031
+ }
1032
+
1033
+ removeRange(tokenList, removeFrom, removeCount);
1034
+
1035
+ var wrapped = new Token(token, inside ? _.tokenize(matchStr, inside) : matchStr, alias, matchStr);
1036
+ currentNode = addAfter(tokenList, removeFrom, wrapped);
1037
+
1038
+ if (after) {
1039
+ addAfter(tokenList, currentNode, after);
1040
+ }
1041
+
1042
+ if (removeCount > 1) {
1043
+ // at least one Token object was removed, so we have to do some rematching
1044
+ // this can only happen if the current pattern is greedy
1045
+
1046
+ /** @type {RematchOptions} */
1047
+ var nestedRematch = {
1048
+ cause: token + ',' + j,
1049
+ reach: reach
1050
+ };
1051
+ matchGrammar(text, tokenList, grammar, currentNode.prev, pos, nestedRematch);
1052
+
1053
+ // the reach might have been extended because of the rematching
1054
+ if (rematch && nestedRematch.reach > rematch.reach) {
1055
+ rematch.reach = nestedRematch.reach;
1056
+ }
1057
+ }
1058
+ }
1059
+ }
1060
+ }
1061
+ }
1062
+
1063
+ /**
1064
+ * @typedef LinkedListNode
1065
+ * @property {T} value
1066
+ * @property {LinkedListNode<T> | null} prev The previous node.
1067
+ * @property {LinkedListNode<T> | null} next The next node.
1068
+ * @template T
1069
+ * @private
1070
+ */
1071
+
1072
+ /**
1073
+ * @template T
1074
+ * @private
1075
+ */
1076
+ function LinkedList() {
1077
+ /** @type {LinkedListNode<T>} */
1078
+ var head = { value: null, prev: null, next: null };
1079
+ /** @type {LinkedListNode<T>} */
1080
+ var tail = { value: null, prev: head, next: null };
1081
+ head.next = tail;
1082
+
1083
+ /** @type {LinkedListNode<T>} */
1084
+ this.head = head;
1085
+ /** @type {LinkedListNode<T>} */
1086
+ this.tail = tail;
1087
+ this.length = 0;
1088
+ }
1089
+
1090
+ /**
1091
+ * Adds a new node with the given value to the list.
1092
+ *
1093
+ * @param {LinkedList<T>} list
1094
+ * @param {LinkedListNode<T>} node
1095
+ * @param {T} value
1096
+ * @returns {LinkedListNode<T>} The added node.
1097
+ * @template T
1098
+ */
1099
+ function addAfter(list, node, value) {
1100
+ // assumes that node != list.tail && values.length >= 0
1101
+ var next = node.next;
1102
+
1103
+ var newNode = { value: value, prev: node, next: next };
1104
+ node.next = newNode;
1105
+ next.prev = newNode;
1106
+ list.length++;
1107
+
1108
+ return newNode;
1109
+ }
1110
+ /**
1111
+ * Removes `count` nodes after the given node. The given node will not be removed.
1112
+ *
1113
+ * @param {LinkedList<T>} list
1114
+ * @param {LinkedListNode<T>} node
1115
+ * @param {number} count
1116
+ * @template T
1117
+ */
1118
+ function removeRange(list, node, count) {
1119
+ var next = node.next;
1120
+ for (var i = 0; i < count && next !== list.tail; i++) {
1121
+ next = next.next;
1122
+ }
1123
+ node.next = next;
1124
+ next.prev = node;
1125
+ list.length -= i;
1126
+ }
1127
+ /**
1128
+ * @param {LinkedList<T>} list
1129
+ * @returns {T[]}
1130
+ * @template T
1131
+ */
1132
+ function toArray(list) {
1133
+ var array = [];
1134
+ var node = list.head.next;
1135
+ while (node !== list.tail) {
1136
+ array.push(node.value);
1137
+ node = node.next;
1138
+ }
1139
+ return array;
1140
+ }
1141
+
1142
+
1143
+ if (!_self.document) {
1144
+ if (!_self.addEventListener) {
1145
+ // in Node.js
1146
+ return _;
1147
+ }
1148
+
1149
+ if (!_.disableWorkerMessageHandler) {
1150
+ // In worker
1151
+ _self.addEventListener('message', function (evt) {
1152
+ var message = JSON.parse(evt.data);
1153
+ var lang = message.language;
1154
+ var code = message.code;
1155
+ var immediateClose = message.immediateClose;
1156
+
1157
+ _self.postMessage(_.highlight(code, _.languages[lang], lang));
1158
+ if (immediateClose) {
1159
+ _self.close();
1160
+ }
1161
+ }, false);
1162
+ }
1163
+
1164
+ return _;
1165
+ }
1166
+
1167
+ // Get current script and highlight
1168
+ var script = _.util.currentScript();
1169
+
1170
+ if (script) {
1171
+ _.filename = script.src;
1172
+
1173
+ if (script.hasAttribute('data-manual')) {
1174
+ _.manual = true;
1175
+ }
1176
+ }
1177
+
1178
+ function highlightAutomaticallyCallback() {
1179
+ if (!_.manual) {
1180
+ _.highlightAll();
1181
+ }
1182
+ }
1183
+
1184
+ if (!_.manual) {
1185
+ // If the document state is "loading", then we'll use DOMContentLoaded.
1186
+ // If the document state is "interactive" and the prism.js script is deferred, then we'll also use the
1187
+ // DOMContentLoaded event because there might be some plugins or languages which have also been deferred and they
1188
+ // might take longer one animation frame to execute which can create a race condition where only some plugins have
1189
+ // been loaded when Prism.highlightAll() is executed, depending on how fast resources are loaded.
1190
+ // See https://github.com/PrismJS/prism/issues/2102
1191
+ var readyState = document.readyState;
1192
+ if (readyState === 'loading' || readyState === 'interactive' && script && script.defer) {
1193
+ document.addEventListener('DOMContentLoaded', highlightAutomaticallyCallback);
1194
+ } else {
1195
+ if (window.requestAnimationFrame) {
1196
+ window.requestAnimationFrame(highlightAutomaticallyCallback);
1197
+ } else {
1198
+ window.setTimeout(highlightAutomaticallyCallback, 16);
1199
+ }
1200
+ }
1201
+ }
1202
+
1203
+ return _;
1204
+
1205
+ }(_self));
1206
+
1207
+ if (typeof module !== 'undefined' && module.exports) {
1208
+ module.exports = Prism;
1209
+ }
1210
+
1211
+ // hack for components to work correctly in node.js
1212
+ if (typeof global !== 'undefined') {
1213
+ global.Prism = Prism;
1214
+ }
1215
+
1216
+ // some additional documentation/types
1217
+
1218
+ /**
1219
+ * The expansion of a simple `RegExp` literal to support additional properties.
1220
+ *
1221
+ * @typedef GrammarToken
1222
+ * @property {RegExp} pattern The regular expression of the token.
1223
+ * @property {boolean} [lookbehind=false] If `true`, then the first capturing group of `pattern` will (effectively)
1224
+ * behave as a lookbehind group meaning that the captured text will not be part of the matched text of the new token.
1225
+ * @property {boolean} [greedy=false] Whether the token is greedy.
1226
+ * @property {string|string[]} [alias] An optional alias or list of aliases.
1227
+ * @property {Grammar} [inside] The nested grammar of this token.
1228
+ *
1229
+ * The `inside` grammar will be used to tokenize the text value of each token of this kind.
1230
+ *
1231
+ * This can be used to make nested and even recursive language definitions.
1232
+ *
1233
+ * Note: This can cause infinite recursion. Be careful when you embed different languages or even the same language into
1234
+ * each another.
1235
+ * @global
1236
+ * @public
1237
+ */
1238
+
1239
+ /**
1240
+ * @typedef Grammar
1241
+ * @type {Object<string, RegExp | GrammarToken | Array<RegExp | GrammarToken>>}
1242
+ * @property {Grammar} [rest] An optional grammar object that will be appended to this grammar.
1243
+ * @global
1244
+ * @public
1245
+ */
1246
+
1247
+ /**
1248
+ * A function which will invoked after an element was successfully highlighted.
1249
+ *
1250
+ * @callback HighlightCallback
1251
+ * @param {Element} element The element successfully highlighted.
1252
+ * @returns {void}
1253
+ * @global
1254
+ * @public
1255
+ */
1256
+
1257
+ /**
1258
+ * @callback HookCallback
1259
+ * @param {Object<string, any>} env The environment variables of the hook.
1260
+ * @returns {void}
1261
+ * @global
1262
+ * @public
1263
+ */