highlighting 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (236) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +52 -0
  3. data/app/helpers/syntax_helper.rb +2 -0
  4. data/lib/highlighting.rb +6 -0
  5. data/lib/highlighting/version.rb +3 -0
  6. data/vendor/assets/javascripts/prism-abap.js +48 -0
  7. data/vendor/assets/javascripts/prism-abap.min.js +1 -0
  8. data/vendor/assets/javascripts/prism-actionscript.js +17 -0
  9. data/vendor/assets/javascripts/prism-actionscript.min.js +1 -0
  10. data/vendor/assets/javascripts/prism-apacheconf.js +47 -0
  11. data/vendor/assets/javascripts/prism-apacheconf.min.js +1 -0
  12. data/vendor/assets/javascripts/prism-apl.js +29 -0
  13. data/vendor/assets/javascripts/prism-apl.min.js +1 -0
  14. data/vendor/assets/javascripts/prism-applescript.js +20 -0
  15. data/vendor/assets/javascripts/prism-applescript.min.js +1 -0
  16. data/vendor/assets/javascripts/prism-asciidoc.js +271 -0
  17. data/vendor/assets/javascripts/prism-asciidoc.min.js +1 -0
  18. data/vendor/assets/javascripts/prism-aspnet.js +36 -0
  19. data/vendor/assets/javascripts/prism-aspnet.min.js +1 -0
  20. data/vendor/assets/javascripts/prism-autohotkey.js +27 -0
  21. data/vendor/assets/javascripts/prism-autohotkey.min.js +1 -0
  22. data/vendor/assets/javascripts/prism-autoit.js +33 -0
  23. data/vendor/assets/javascripts/prism-autoit.min.js +1 -0
  24. data/vendor/assets/javascripts/prism-bash.js +78 -0
  25. data/vendor/assets/javascripts/prism-bash.min.js +1 -0
  26. data/vendor/assets/javascripts/prism-basic.js +14 -0
  27. data/vendor/assets/javascripts/prism-basic.min.js +1 -0
  28. data/vendor/assets/javascripts/prism-batch.js +99 -0
  29. data/vendor/assets/javascripts/prism-batch.min.js +1 -0
  30. data/vendor/assets/javascripts/prism-bison.js +39 -0
  31. data/vendor/assets/javascripts/prism-bison.min.js +1 -0
  32. data/vendor/assets/javascripts/prism-brainfuck.js +20 -0
  33. data/vendor/assets/javascripts/prism-brainfuck.min.js +1 -0
  34. data/vendor/assets/javascripts/prism-c.js +33 -0
  35. data/vendor/assets/javascripts/prism-c.min.js +1 -0
  36. data/vendor/assets/javascripts/prism-clike.js +26 -0
  37. data/vendor/assets/javascripts/prism-clike.min.js +1 -0
  38. data/vendor/assets/javascripts/prism-coffeescript.js +83 -0
  39. data/vendor/assets/javascripts/prism-coffeescript.min.js +1 -0
  40. data/vendor/assets/javascripts/prism-core.js +434 -0
  41. data/vendor/assets/javascripts/prism-core.min.js +1 -0
  42. data/vendor/assets/javascripts/prism-cpp.js +12 -0
  43. data/vendor/assets/javascripts/prism-cpp.min.js +1 -0
  44. data/vendor/assets/javascripts/prism-crystal.js +53 -0
  45. data/vendor/assets/javascripts/prism-crystal.min.js +1 -0
  46. data/vendor/assets/javascripts/prism-csharp.js +24 -0
  47. data/vendor/assets/javascripts/prism-csharp.min.js +1 -0
  48. data/vendor/assets/javascripts/prism-css-extras.js +15 -0
  49. data/vendor/assets/javascripts/prism-css-extras.min.js +1 -0
  50. data/vendor/assets/javascripts/prism-css.js +48 -0
  51. data/vendor/assets/javascripts/prism-css.min.js +1 -0
  52. data/vendor/assets/javascripts/prism-d.js +64 -0
  53. data/vendor/assets/javascripts/prism-d.min.js +1 -0
  54. data/vendor/assets/javascripts/prism-dart.js +18 -0
  55. data/vendor/assets/javascripts/prism-dart.min.js +1 -0
  56. data/vendor/assets/javascripts/prism-diff.js +20 -0
  57. data/vendor/assets/javascripts/prism-diff.min.js +1 -0
  58. data/vendor/assets/javascripts/prism-docker.js +9 -0
  59. data/vendor/assets/javascripts/prism-docker.min.js +1 -0
  60. data/vendor/assets/javascripts/prism-eiffel.js +24 -0
  61. data/vendor/assets/javascripts/prism-eiffel.min.js +1 -0
  62. data/vendor/assets/javascripts/prism-elixir.js +90 -0
  63. data/vendor/assets/javascripts/prism-elixir.min.js +1 -0
  64. data/vendor/assets/javascripts/prism-erlang.js +41 -0
  65. data/vendor/assets/javascripts/prism-erlang.min.js +1 -0
  66. data/vendor/assets/javascripts/prism-fortran.js +37 -0
  67. data/vendor/assets/javascripts/prism-fortran.min.js +1 -0
  68. data/vendor/assets/javascripts/prism-fsharp.js +33 -0
  69. data/vendor/assets/javascripts/prism-fsharp.min.js +1 -0
  70. data/vendor/assets/javascripts/prism-gherkin.js +78 -0
  71. data/vendor/assets/javascripts/prism-gherkin.min.js +1 -0
  72. data/vendor/assets/javascripts/prism-git.js +68 -0
  73. data/vendor/assets/javascripts/prism-git.min.js +1 -0
  74. data/vendor/assets/javascripts/prism-glsl.js +16 -0
  75. data/vendor/assets/javascripts/prism-glsl.min.js +1 -0
  76. data/vendor/assets/javascripts/prism-go.js +9 -0
  77. data/vendor/assets/javascripts/prism-go.min.js +1 -0
  78. data/vendor/assets/javascripts/prism-groovy.js +51 -0
  79. data/vendor/assets/javascripts/prism-groovy.min.js +1 -0
  80. data/vendor/assets/javascripts/prism-haml.js +154 -0
  81. data/vendor/assets/javascripts/prism-haml.min.js +1 -0
  82. data/vendor/assets/javascripts/prism-handlebars.js +83 -0
  83. data/vendor/assets/javascripts/prism-handlebars.min.js +1 -0
  84. data/vendor/assets/javascripts/prism-haskell.js +32 -0
  85. data/vendor/assets/javascripts/prism-haskell.min.js +1 -0
  86. data/vendor/assets/javascripts/prism-haxe.js +43 -0
  87. data/vendor/assets/javascripts/prism-haxe.min.js +1 -0
  88. data/vendor/assets/javascripts/prism-http.js +50 -0
  89. data/vendor/assets/javascripts/prism-http.min.js +1 -0
  90. data/vendor/assets/javascripts/prism-icon.js +17 -0
  91. data/vendor/assets/javascripts/prism-icon.min.js +1 -0
  92. data/vendor/assets/javascripts/prism-inform7.js +58 -0
  93. data/vendor/assets/javascripts/prism-inform7.min.js +1 -0
  94. data/vendor/assets/javascripts/prism-ini.js +11 -0
  95. data/vendor/assets/javascripts/prism-ini.min.js +1 -0
  96. data/vendor/assets/javascripts/prism-j.js +22 -0
  97. data/vendor/assets/javascripts/prism-j.min.js +1 -0
  98. data/vendor/assets/javascripts/prism-jade.js +198 -0
  99. data/vendor/assets/javascripts/prism-jade.min.js +1 -0
  100. data/vendor/assets/javascripts/prism-java.js +8 -0
  101. data/vendor/assets/javascripts/prism-java.min.js +1 -0
  102. data/vendor/assets/javascripts/prism-javascript.js +45 -0
  103. data/vendor/assets/javascripts/prism-javascript.min.js +1 -0
  104. data/vendor/assets/javascripts/prism-jsx.js +24 -0
  105. data/vendor/assets/javascripts/prism-jsx.min.js +1 -0
  106. data/vendor/assets/javascripts/prism-julia.js +12 -0
  107. data/vendor/assets/javascripts/prism-julia.min.js +1 -0
  108. data/vendor/assets/javascripts/prism-keyman.js +14 -0
  109. data/vendor/assets/javascripts/prism-keyman.min.js +1 -0
  110. data/vendor/assets/javascripts/prism-kotlin.js +68 -0
  111. data/vendor/assets/javascripts/prism-kotlin.min.js +1 -0
  112. data/vendor/assets/javascripts/prism-latex.js +61 -0
  113. data/vendor/assets/javascripts/prism-latex.min.js +1 -0
  114. data/vendor/assets/javascripts/prism-less.js +60 -0
  115. data/vendor/assets/javascripts/prism-less.min.js +1 -0
  116. data/vendor/assets/javascripts/prism-lolcode.js +54 -0
  117. data/vendor/assets/javascripts/prism-lolcode.min.js +1 -0
  118. data/vendor/assets/javascripts/prism-lua.js +17 -0
  119. data/vendor/assets/javascripts/prism-lua.min.js +1 -0
  120. data/vendor/assets/javascripts/prism-makefile.js +31 -0
  121. data/vendor/assets/javascripts/prism-makefile.min.js +1 -0
  122. data/vendor/assets/javascripts/prism-markdown.js +120 -0
  123. data/vendor/assets/javascripts/prism-markdown.min.js +1 -0
  124. data/vendor/assets/javascripts/prism-markup.js +46 -0
  125. data/vendor/assets/javascripts/prism-markup.min.js +1 -0
  126. data/vendor/assets/javascripts/prism-matlab.js +14 -0
  127. data/vendor/assets/javascripts/prism-matlab.min.js +1 -0
  128. data/vendor/assets/javascripts/prism-mel.js +39 -0
  129. data/vendor/assets/javascripts/prism-mel.min.js +1 -0
  130. data/vendor/assets/javascripts/prism-mizar.js +12 -0
  131. data/vendor/assets/javascripts/prism-mizar.min.js +1 -0
  132. data/vendor/assets/javascripts/prism-monkey.js +25 -0
  133. data/vendor/assets/javascripts/prism-monkey.min.js +1 -0
  134. data/vendor/assets/javascripts/prism-nasm.js +24 -0
  135. data/vendor/assets/javascripts/prism-nasm.min.js +1 -0
  136. data/vendor/assets/javascripts/prism-nginx.js +11 -0
  137. data/vendor/assets/javascripts/prism-nginx.min.js +1 -0
  138. data/vendor/assets/javascripts/prism-nim.js +30 -0
  139. data/vendor/assets/javascripts/prism-nim.min.js +1 -0
  140. data/vendor/assets/javascripts/prism-nix.js +39 -0
  141. data/vendor/assets/javascripts/prism-nix.min.js +1 -0
  142. data/vendor/assets/javascripts/prism-nsis.js +19 -0
  143. data/vendor/assets/javascripts/prism-nsis.min.js +1 -0
  144. data/vendor/assets/javascripts/prism-objectivec.js +5 -0
  145. data/vendor/assets/javascripts/prism-objectivec.min.js +1 -0
  146. data/vendor/assets/javascripts/prism-ocaml.js +21 -0
  147. data/vendor/assets/javascripts/prism-ocaml.min.js +1 -0
  148. data/vendor/assets/javascripts/prism-oz.js +21 -0
  149. data/vendor/assets/javascripts/prism-oz.min.js +1 -0
  150. data/vendor/assets/javascripts/prism-parigp.js +27 -0
  151. data/vendor/assets/javascripts/prism-parigp.min.js +1 -0
  152. data/vendor/assets/javascripts/prism-parser.js +66 -0
  153. data/vendor/assets/javascripts/prism-parser.min.js +1 -0
  154. data/vendor/assets/javascripts/prism-pascal.js +50 -0
  155. data/vendor/assets/javascripts/prism-pascal.min.js +1 -0
  156. data/vendor/assets/javascripts/prism-perl.js +140 -0
  157. data/vendor/assets/javascripts/prism-perl.min.js +1 -0
  158. data/vendor/assets/javascripts/prism-php-extras.js +11 -0
  159. data/vendor/assets/javascripts/prism-php-extras.min.js +1 -0
  160. data/vendor/assets/javascripts/prism-php.js +110 -0
  161. data/vendor/assets/javascripts/prism-php.min.js +1 -0
  162. data/vendor/assets/javascripts/prism-powershell.js +48 -0
  163. data/vendor/assets/javascripts/prism-powershell.min.js +1 -0
  164. data/vendor/assets/javascripts/prism-processing.js +18 -0
  165. data/vendor/assets/javascripts/prism-processing.min.js +1 -0
  166. data/vendor/assets/javascripts/prism-prolog.js +17 -0
  167. data/vendor/assets/javascripts/prism-prolog.min.js +1 -0
  168. data/vendor/assets/javascripts/prism-puppet.js +131 -0
  169. data/vendor/assets/javascripts/prism-puppet.min.js +1 -0
  170. data/vendor/assets/javascripts/prism-pure.js +77 -0
  171. data/vendor/assets/javascripts/prism-pure.min.js +1 -0
  172. data/vendor/assets/javascripts/prism-python.js +24 -0
  173. data/vendor/assets/javascripts/prism-python.min.js +1 -0
  174. data/vendor/assets/javascripts/prism-q.js +44 -0
  175. data/vendor/assets/javascripts/prism-q.min.js +1 -0
  176. data/vendor/assets/javascripts/prism-qore.js +17 -0
  177. data/vendor/assets/javascripts/prism-qore.min.js +1 -0
  178. data/vendor/assets/javascripts/prism-r.js +19 -0
  179. data/vendor/assets/javascripts/prism-r.min.js +1 -0
  180. data/vendor/assets/javascripts/prism-rest.js +205 -0
  181. data/vendor/assets/javascripts/prism-rest.min.js +1 -0
  182. data/vendor/assets/javascripts/prism-rip.js +28 -0
  183. data/vendor/assets/javascripts/prism-rip.min.js +1 -0
  184. data/vendor/assets/javascripts/prism-roboconf.js +27 -0
  185. data/vendor/assets/javascripts/prism-roboconf.min.js +1 -0
  186. data/vendor/assets/javascripts/prism-ruby.js +110 -0
  187. data/vendor/assets/javascripts/prism-ruby.min.js +1 -0
  188. data/vendor/assets/javascripts/prism-rust.js +53 -0
  189. data/vendor/assets/javascripts/prism-rust.min.js +1 -0
  190. data/vendor/assets/javascripts/prism-sas.js +31 -0
  191. data/vendor/assets/javascripts/prism-sas.min.js +1 -0
  192. data/vendor/assets/javascripts/prism-sass.js +73 -0
  193. data/vendor/assets/javascripts/prism-sass.min.js +1 -0
  194. data/vendor/assets/javascripts/prism-scala.js +9 -0
  195. data/vendor/assets/javascripts/prism-scala.min.js +1 -0
  196. data/vendor/assets/javascripts/prism-scheme.js +26 -0
  197. data/vendor/assets/javascripts/prism-scheme.min.js +1 -0
  198. data/vendor/assets/javascripts/prism-scss.js +60 -0
  199. data/vendor/assets/javascripts/prism-scss.min.js +1 -0
  200. data/vendor/assets/javascripts/prism-smalltalk.js +31 -0
  201. data/vendor/assets/javascripts/prism-smalltalk.min.js +1 -0
  202. data/vendor/assets/javascripts/prism-smarty.js +127 -0
  203. data/vendor/assets/javascripts/prism-smarty.min.js +1 -0
  204. data/vendor/assets/javascripts/prism-sql.js +17 -0
  205. data/vendor/assets/javascripts/prism-sql.min.js +1 -0
  206. data/vendor/assets/javascripts/prism-stylus.js +102 -0
  207. data/vendor/assets/javascripts/prism-stylus.min.js +1 -0
  208. data/vendor/assets/javascripts/prism-swift.js +24 -0
  209. data/vendor/assets/javascripts/prism-swift.min.js +1 -0
  210. data/vendor/assets/javascripts/prism-tcl.js +43 -0
  211. data/vendor/assets/javascripts/prism-tcl.min.js +1 -0
  212. data/vendor/assets/javascripts/prism-textile.js +254 -0
  213. data/vendor/assets/javascripts/prism-textile.min.js +1 -0
  214. data/vendor/assets/javascripts/prism-twig.js +46 -0
  215. data/vendor/assets/javascripts/prism-twig.min.js +1 -0
  216. data/vendor/assets/javascripts/prism-typescript.js +3 -0
  217. data/vendor/assets/javascripts/prism-typescript.min.js +1 -0
  218. data/vendor/assets/javascripts/prism-verilog.js +17 -0
  219. data/vendor/assets/javascripts/prism-verilog.min.js +1 -0
  220. data/vendor/assets/javascripts/prism-vhdl.js +23 -0
  221. data/vendor/assets/javascripts/prism-vhdl.min.js +1 -0
  222. data/vendor/assets/javascripts/prism-vim.js +10 -0
  223. data/vendor/assets/javascripts/prism-vim.min.js +1 -0
  224. data/vendor/assets/javascripts/prism-wiki.js +81 -0
  225. data/vendor/assets/javascripts/prism-wiki.min.js +1 -0
  226. data/vendor/assets/javascripts/prism-yaml.js +44 -0
  227. data/vendor/assets/javascripts/prism-yaml.min.js +1 -0
  228. data/vendor/assets/javascripts/prism.js +708 -0
  229. data/vendor/assets/stylesheets/prism-coy.css +235 -0
  230. data/vendor/assets/stylesheets/prism-dark.css +128 -0
  231. data/vendor/assets/stylesheets/prism-funky.css +117 -0
  232. data/vendor/assets/stylesheets/prism-okaidia.css +121 -0
  233. data/vendor/assets/stylesheets/prism-tomorrow.css +121 -0
  234. data/vendor/assets/stylesheets/prism-twilight.css +201 -0
  235. data/vendor/assets/stylesheets/prism.css +137 -0
  236. metadata +306 -0
@@ -0,0 +1 @@
1
+ Prism.languages.clike={comment:[{pattern:/(^|[^\\])\/\*[\w\W]*?\*\//,lookbehind:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0}],string:/(["'])(\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,"class-name":{pattern:/((?:\b(?:class|interface|extends|implements|trait|instanceof|new)\s+)|(?:catch\s+\())[a-z0-9_\.\\]+/i,lookbehind:!0,inside:{punctuation:/(\.|\\)/}},keyword:/\b(if|else|while|do|for|return|in|instanceof|function|new|try|throw|catch|finally|null|break|continue)\b/,"boolean":/\b(true|false)\b/,"function":/[a-z0-9_]+(?=\()/i,number:/\b-?(?:0x[\da-f]+|\d*\.?\d+(?:e[+-]?\d+)?)\b/i,operator:/--?|\+\+?|!=?=?|<=?|>=?|==?=?|&&?|\|\|?|\?|\*|\/|~|\^|%/,punctuation:/[{}[\];(),.:]/};
@@ -0,0 +1,83 @@
1
+ (function(Prism) {
2
+
3
+ // Ignore comments starting with { to privilege string interpolation highlighting
4
+ var comment = /#(?!\{).+/,
5
+ interpolation = {
6
+ pattern: /#\{[^}]+\}/,
7
+ alias: 'variable'
8
+ };
9
+
10
+ Prism.languages.coffeescript = Prism.languages.extend('javascript', {
11
+ 'comment': comment,
12
+ 'string': [
13
+
14
+ // Strings are multiline
15
+ /'(?:\\?[^\\])*?'/,
16
+
17
+ {
18
+ // Strings are multiline
19
+ pattern: /"(?:\\?[^\\])*?"/,
20
+ inside: {
21
+ 'interpolation': interpolation
22
+ }
23
+ }
24
+ ],
25
+ 'keyword': /\b(and|break|by|catch|class|continue|debugger|delete|do|each|else|extend|extends|false|finally|for|if|in|instanceof|is|isnt|let|loop|namespace|new|no|not|null|of|off|on|or|own|return|super|switch|then|this|throw|true|try|typeof|undefined|unless|until|when|while|window|with|yes|yield)\b/,
26
+ 'class-member': {
27
+ pattern: /@(?!\d)\w+/,
28
+ alias: 'variable'
29
+ }
30
+ });
31
+
32
+ Prism.languages.insertBefore('coffeescript', 'comment', {
33
+ 'multiline-comment': {
34
+ pattern: /###[\s\S]+?###/,
35
+ alias: 'comment'
36
+ },
37
+
38
+ // Block regexp can contain comments and interpolation
39
+ 'block-regex': {
40
+ pattern: /\/{3}[\s\S]*?\/{3}/,
41
+ alias: 'regex',
42
+ inside: {
43
+ 'comment': comment,
44
+ 'interpolation': interpolation
45
+ }
46
+ }
47
+ });
48
+
49
+ Prism.languages.insertBefore('coffeescript', 'string', {
50
+ 'inline-javascript': {
51
+ pattern: /`(?:\\?[\s\S])*?`/,
52
+ inside: {
53
+ 'delimiter': {
54
+ pattern: /^`|`$/,
55
+ alias: 'punctuation'
56
+ },
57
+ rest: Prism.languages.javascript
58
+ }
59
+ },
60
+
61
+ // Block strings
62
+ 'multiline-string': [
63
+ {
64
+ pattern: /'''[\s\S]*?'''/,
65
+ alias: 'string'
66
+ },
67
+ {
68
+ pattern: /"""[\s\S]*?"""/,
69
+ alias: 'string',
70
+ inside: {
71
+ interpolation: interpolation
72
+ }
73
+ }
74
+ ]
75
+
76
+ });
77
+
78
+ Prism.languages.insertBefore('coffeescript', 'keyword', {
79
+ // Object property
80
+ 'property': /(?!\d)\w+(?=\s*:(?!:))/
81
+ });
82
+
83
+ }(Prism));
@@ -0,0 +1 @@
1
+ !function(e){var n=/#(?!\{).+/,t={pattern:/#\{[^}]+\}/,alias:"variable"};e.languages.coffeescript=e.languages.extend("javascript",{comment:n,string:[/'(?:\\?[^\\])*?'/,{pattern:/"(?:\\?[^\\])*?"/,inside:{interpolation:t}}],keyword:/\b(and|break|by|catch|class|continue|debugger|delete|do|each|else|extend|extends|false|finally|for|if|in|instanceof|is|isnt|let|loop|namespace|new|no|not|null|of|off|on|or|own|return|super|switch|then|this|throw|true|try|typeof|undefined|unless|until|when|while|window|with|yes|yield)\b/,"class-member":{pattern:/@(?!\d)\w+/,alias:"variable"}}),e.languages.insertBefore("coffeescript","comment",{"multiline-comment":{pattern:/###[\s\S]+?###/,alias:"comment"},"block-regex":{pattern:/\/{3}[\s\S]*?\/{3}/,alias:"regex",inside:{comment:n,interpolation:t}}}),e.languages.insertBefore("coffeescript","string",{"inline-javascript":{pattern:/`(?:\\?[\s\S])*?`/,inside:{delimiter:{pattern:/^`|`$/,alias:"punctuation"},rest:e.languages.javascript}},"multiline-string":[{pattern:/'''[\s\S]*?'''/,alias:"string"},{pattern:/"""[\s\S]*?"""/,alias:"string",inside:{interpolation:t}}]}),e.languages.insertBefore("coffeescript","keyword",{property:/(?!\d)\w+(?=\s*:(?!:))/})}(Prism);
@@ -0,0 +1,434 @@
1
+ var _self = (typeof window !== 'undefined')
2
+ ? window // if in browser
3
+ : (
4
+ (typeof WorkerGlobalScope !== 'undefined' && self instanceof WorkerGlobalScope)
5
+ ? self // if in worker
6
+ : {} // if in node js
7
+ );
8
+
9
+ /**
10
+ * Prism: Lightweight, robust, elegant syntax highlighting
11
+ * MIT license http://www.opensource.org/licenses/mit-license.php/
12
+ * @author Lea Verou http://lea.verou.me
13
+ */
14
+
15
+ var Prism = (function(){
16
+
17
+ // Private helper vars
18
+ var lang = /\blang(?:uage)?-(?!\*)(\w+)\b/i;
19
+
20
+ var _ = _self.Prism = {
21
+ util: {
22
+ encode: function (tokens) {
23
+ if (tokens instanceof Token) {
24
+ return new Token(tokens.type, _.util.encode(tokens.content), tokens.alias);
25
+ } else if (_.util.type(tokens) === 'Array') {
26
+ return tokens.map(_.util.encode);
27
+ } else {
28
+ return tokens.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/\u00a0/g, ' ');
29
+ }
30
+ },
31
+
32
+ type: function (o) {
33
+ return Object.prototype.toString.call(o).match(/\[object (\w+)\]/)[1];
34
+ },
35
+
36
+ // Deep clone a language definition (e.g. to extend it)
37
+ clone: function (o) {
38
+ var type = _.util.type(o);
39
+
40
+ switch (type) {
41
+ case 'Object':
42
+ var clone = {};
43
+
44
+ for (var key in o) {
45
+ if (o.hasOwnProperty(key)) {
46
+ clone[key] = _.util.clone(o[key]);
47
+ }
48
+ }
49
+
50
+ return clone;
51
+
52
+ case 'Array':
53
+ // Check for existence for IE8
54
+ return o.map && o.map(function(v) { return _.util.clone(v); });
55
+ }
56
+
57
+ return o;
58
+ }
59
+ },
60
+
61
+ languages: {
62
+ extend: function (id, redef) {
63
+ var lang = _.util.clone(_.languages[id]);
64
+
65
+ for (var key in redef) {
66
+ lang[key] = redef[key];
67
+ }
68
+
69
+ return lang;
70
+ },
71
+
72
+ /**
73
+ * Insert a token before another token in a language literal
74
+ * As this needs to recreate the object (we cannot actually insert before keys in object literals),
75
+ * we cannot just provide an object, we need anobject and a key.
76
+ * @param inside The key (or language id) of the parent
77
+ * @param before The key to insert before. If not provided, the function appends instead.
78
+ * @param insert Object with the key/value pairs to insert
79
+ * @param root The object that contains `inside`. If equal to Prism.languages, it can be omitted.
80
+ */
81
+ insertBefore: function (inside, before, insert, root) {
82
+ root = root || _.languages;
83
+ var grammar = root[inside];
84
+
85
+ if (arguments.length == 2) {
86
+ insert = arguments[1];
87
+
88
+ for (var newToken in insert) {
89
+ if (insert.hasOwnProperty(newToken)) {
90
+ grammar[newToken] = insert[newToken];
91
+ }
92
+ }
93
+
94
+ return grammar;
95
+ }
96
+
97
+ var ret = {};
98
+
99
+ for (var token in grammar) {
100
+
101
+ if (grammar.hasOwnProperty(token)) {
102
+
103
+ if (token == before) {
104
+
105
+ for (var newToken in insert) {
106
+
107
+ if (insert.hasOwnProperty(newToken)) {
108
+ ret[newToken] = insert[newToken];
109
+ }
110
+ }
111
+ }
112
+
113
+ ret[token] = grammar[token];
114
+ }
115
+ }
116
+
117
+ // Update references in other language definitions
118
+ _.languages.DFS(_.languages, function(key, value) {
119
+ if (value === root[inside] && key != inside) {
120
+ this[key] = ret;
121
+ }
122
+ });
123
+
124
+ return root[inside] = ret;
125
+ },
126
+
127
+ // Traverse a language definition with Depth First Search
128
+ DFS: function(o, callback, type) {
129
+ for (var i in o) {
130
+ if (o.hasOwnProperty(i)) {
131
+ callback.call(o, i, o[i], type || i);
132
+
133
+ if (_.util.type(o[i]) === 'Object') {
134
+ _.languages.DFS(o[i], callback);
135
+ }
136
+ else if (_.util.type(o[i]) === 'Array') {
137
+ _.languages.DFS(o[i], callback, i);
138
+ }
139
+ }
140
+ }
141
+ }
142
+ },
143
+ plugins: {},
144
+
145
+ highlightAll: function(async, callback) {
146
+ var elements = document.querySelectorAll('code[class*="language-"], [class*="language-"] code, code[class*="lang-"], [class*="lang-"] code');
147
+
148
+ for (var i=0, element; element = elements[i++];) {
149
+ _.highlightElement(element, async === true, callback);
150
+ }
151
+ },
152
+
153
+ highlightElement: function(element, async, callback) {
154
+ // Find language
155
+ var language, grammar, parent = element;
156
+
157
+ while (parent && !lang.test(parent.className)) {
158
+ parent = parent.parentNode;
159
+ }
160
+
161
+ if (parent) {
162
+ language = (parent.className.match(lang) || [,''])[1];
163
+ grammar = _.languages[language];
164
+ }
165
+
166
+ // Set language on the element, if not present
167
+ element.className = element.className.replace(lang, '').replace(/\s+/g, ' ') + ' language-' + language;
168
+
169
+ // Set language on the parent, for styling
170
+ parent = element.parentNode;
171
+
172
+ if (/pre/i.test(parent.nodeName)) {
173
+ parent.className = parent.className.replace(lang, '').replace(/\s+/g, ' ') + ' language-' + language;
174
+ }
175
+
176
+ var code = element.textContent;
177
+
178
+ var env = {
179
+ element: element,
180
+ language: language,
181
+ grammar: grammar,
182
+ code: code
183
+ };
184
+
185
+ if (!code || !grammar) {
186
+ _.hooks.run('complete', env);
187
+ return;
188
+ }
189
+
190
+ _.hooks.run('before-highlight', env);
191
+
192
+ if (async && _self.Worker) {
193
+ var worker = new Worker(_.filename);
194
+
195
+ worker.onmessage = function(evt) {
196
+ env.highlightedCode = evt.data;
197
+
198
+ _.hooks.run('before-insert', env);
199
+
200
+ env.element.innerHTML = env.highlightedCode;
201
+
202
+ callback && callback.call(env.element);
203
+ _.hooks.run('after-highlight', env);
204
+ _.hooks.run('complete', env);
205
+ };
206
+
207
+ worker.postMessage(JSON.stringify({
208
+ language: env.language,
209
+ code: env.code,
210
+ immediateClose: true
211
+ }));
212
+ }
213
+ else {
214
+ env.highlightedCode = _.highlight(env.code, env.grammar, env.language);
215
+
216
+ _.hooks.run('before-insert', env);
217
+
218
+ env.element.innerHTML = env.highlightedCode;
219
+
220
+ callback && callback.call(element);
221
+
222
+ _.hooks.run('after-highlight', env);
223
+ _.hooks.run('complete', env);
224
+ }
225
+ },
226
+
227
+ highlight: function (text, grammar, language) {
228
+ var tokens = _.tokenize(text, grammar);
229
+ return Token.stringify(_.util.encode(tokens), language);
230
+ },
231
+
232
+ tokenize: function(text, grammar, language) {
233
+ var Token = _.Token;
234
+
235
+ var strarr = [text];
236
+
237
+ var rest = grammar.rest;
238
+
239
+ if (rest) {
240
+ for (var token in rest) {
241
+ grammar[token] = rest[token];
242
+ }
243
+
244
+ delete grammar.rest;
245
+ }
246
+
247
+ tokenloop: for (var token in grammar) {
248
+ if(!grammar.hasOwnProperty(token) || !grammar[token]) {
249
+ continue;
250
+ }
251
+
252
+ var patterns = grammar[token];
253
+ patterns = (_.util.type(patterns) === "Array") ? patterns : [patterns];
254
+
255
+ for (var j = 0; j < patterns.length; ++j) {
256
+ var pattern = patterns[j],
257
+ inside = pattern.inside,
258
+ lookbehind = !!pattern.lookbehind,
259
+ lookbehindLength = 0,
260
+ alias = pattern.alias;
261
+
262
+ pattern = pattern.pattern || pattern;
263
+
264
+ for (var i=0; i<strarr.length; i++) { // Don’t cache length as it changes during the loop
265
+
266
+ var str = strarr[i];
267
+
268
+ if (strarr.length > text.length) {
269
+ // Something went terribly wrong, ABORT, ABORT!
270
+ break tokenloop;
271
+ }
272
+
273
+ if (str instanceof Token) {
274
+ continue;
275
+ }
276
+
277
+ pattern.lastIndex = 0;
278
+
279
+ var match = pattern.exec(str);
280
+
281
+ if (match) {
282
+ if(lookbehind) {
283
+ lookbehindLength = match[1].length;
284
+ }
285
+
286
+ var from = match.index - 1 + lookbehindLength,
287
+ match = match[0].slice(lookbehindLength),
288
+ len = match.length,
289
+ to = from + len,
290
+ before = str.slice(0, from + 1),
291
+ after = str.slice(to + 1);
292
+
293
+ var args = [i, 1];
294
+
295
+ if (before) {
296
+ args.push(before);
297
+ }
298
+
299
+ var wrapped = new Token(token, inside? _.tokenize(match, inside) : match, alias);
300
+
301
+ args.push(wrapped);
302
+
303
+ if (after) {
304
+ args.push(after);
305
+ }
306
+
307
+ Array.prototype.splice.apply(strarr, args);
308
+ }
309
+ }
310
+ }
311
+ }
312
+
313
+ return strarr;
314
+ },
315
+
316
+ hooks: {
317
+ all: {},
318
+
319
+ add: function (name, callback) {
320
+ var hooks = _.hooks.all;
321
+
322
+ hooks[name] = hooks[name] || [];
323
+
324
+ hooks[name].push(callback);
325
+ },
326
+
327
+ run: function (name, env) {
328
+ var callbacks = _.hooks.all[name];
329
+
330
+ if (!callbacks || !callbacks.length) {
331
+ return;
332
+ }
333
+
334
+ for (var i=0, callback; callback = callbacks[i++];) {
335
+ callback(env);
336
+ }
337
+ }
338
+ }
339
+ };
340
+
341
+ var Token = _.Token = function(type, content, alias) {
342
+ this.type = type;
343
+ this.content = content;
344
+ this.alias = alias;
345
+ };
346
+
347
+ Token.stringify = function(o, language, parent) {
348
+ if (typeof o == 'string') {
349
+ return o;
350
+ }
351
+
352
+ if (_.util.type(o) === 'Array') {
353
+ return o.map(function(element) {
354
+ return Token.stringify(element, language, o);
355
+ }).join('');
356
+ }
357
+
358
+ var env = {
359
+ type: o.type,
360
+ content: Token.stringify(o.content, language, parent),
361
+ tag: 'span',
362
+ classes: ['token', o.type],
363
+ attributes: {},
364
+ language: language,
365
+ parent: parent
366
+ };
367
+
368
+ if (env.type == 'comment') {
369
+ env.attributes['spellcheck'] = 'true';
370
+ }
371
+
372
+ if (o.alias) {
373
+ var aliases = _.util.type(o.alias) === 'Array' ? o.alias : [o.alias];
374
+ Array.prototype.push.apply(env.classes, aliases);
375
+ }
376
+
377
+ _.hooks.run('wrap', env);
378
+
379
+ var attributes = '';
380
+
381
+ for (var name in env.attributes) {
382
+ attributes += (attributes ? ' ' : '') + name + '="' + (env.attributes[name] || '') + '"';
383
+ }
384
+
385
+ return '<' + env.tag + ' class="' + env.classes.join(' ') + '" ' + attributes + '>' + env.content + '</' + env.tag + '>';
386
+
387
+ };
388
+
389
+ if (!_self.document) {
390
+ if (!_self.addEventListener) {
391
+ // in Node.js
392
+ return _self.Prism;
393
+ }
394
+ // In worker
395
+ _self.addEventListener('message', function(evt) {
396
+ var message = JSON.parse(evt.data),
397
+ lang = message.language,
398
+ code = message.code,
399
+ immediateClose = message.immediateClose;
400
+
401
+ _self.postMessage(_.highlight(code, _.languages[lang], lang));
402
+ if (immediateClose) {
403
+ _self.close();
404
+ }
405
+ }, false);
406
+
407
+ return _self.Prism;
408
+ }
409
+
410
+ // Get current script and highlight
411
+ var script = document.getElementsByTagName('script');
412
+
413
+ script = script[script.length - 1];
414
+
415
+ if (script) {
416
+ _.filename = script.src;
417
+
418
+ if (document.addEventListener && !script.hasAttribute('data-manual')) {
419
+ document.addEventListener('DOMContentLoaded', _.highlightAll);
420
+ }
421
+ }
422
+
423
+ return _self.Prism;
424
+
425
+ })();
426
+
427
+ if (typeof module !== 'undefined' && module.exports) {
428
+ module.exports = Prism;
429
+ }
430
+
431
+ // hack for components to work correctly in node.js
432
+ if (typeof global !== 'undefined') {
433
+ global.Prism = Prism;
434
+ }