prism-rails 1.5.1.2 → 1.6.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (174) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +7 -0
  3. data/LICENSE +21 -0
  4. data/README.md +94 -0
  5. data/lib/prism-rails.rb +3 -5
  6. data/lib/prism-rails/version.rb +1 -1
  7. data/vendor/assets/javascripts/{prism-autolinker.js → prism-plugin/prism-autolinker.js} +0 -0
  8. data/vendor/assets/javascripts/{prism-autoloader.js → prism-plugin/prism-autoloader.js} +1 -1
  9. data/vendor/assets/javascripts/{prism-command-line.js → prism-plugin/prism-command-line.js} +7 -3
  10. data/vendor/assets/javascripts/prism-plugin/prism-copy-to-clipboard.js +75 -0
  11. data/vendor/assets/javascripts/prism-plugin/prism-custom-class.js +29 -0
  12. data/vendor/assets/javascripts/{prism-data-uri-highlight.js → prism-plugin/prism-data-uri-highlight.js} +0 -0
  13. data/vendor/assets/javascripts/{prism-file-highlight.js → prism-plugin/prism-file-highlight.js} +0 -0
  14. data/vendor/assets/javascripts/{prism-highlight-keywords.js → prism-plugin/prism-highlight-keywords.js} +0 -0
  15. data/vendor/assets/javascripts/{prism-ie8.js → prism-plugin/prism-ie8.js} +0 -0
  16. data/vendor/assets/javascripts/{prism-jsonp-highlight.js → prism-plugin/prism-jsonp-highlight.js} +0 -0
  17. data/vendor/assets/javascripts/{prism-keep-markup.js → prism-plugin/prism-keep-markup.js} +0 -0
  18. data/vendor/assets/javascripts/{prism-line-highlight.js → prism-plugin/prism-line-highlight.js} +0 -0
  19. data/vendor/assets/javascripts/{prism-line-numbers.js → prism-plugin/prism-line-numbers.js} +0 -0
  20. data/vendor/assets/javascripts/{prism-normalize-whitespace.js → prism-plugin/prism-normalize-whitespace.js} +0 -0
  21. data/vendor/assets/javascripts/{prism-previewer-angle.js → prism-plugin/prism-previewer-angle.js} +0 -0
  22. data/vendor/assets/javascripts/{prism-previewer-base.js → prism-plugin/prism-previewer-base.js} +0 -0
  23. data/vendor/assets/javascripts/{prism-previewer-color.js → prism-plugin/prism-previewer-color.js} +0 -0
  24. data/vendor/assets/javascripts/{prism-previewer-easing.js → prism-plugin/prism-previewer-easing.js} +0 -0
  25. data/vendor/assets/javascripts/{prism-previewer-gradient.js → prism-plugin/prism-previewer-gradient.js} +0 -0
  26. data/vendor/assets/javascripts/{prism-previewer-time.js → prism-plugin/prism-previewer-time.js} +0 -0
  27. data/vendor/assets/javascripts/{prism-remove-initial-line-feed.js → prism-plugin/prism-remove-initial-line-feed.js} +0 -0
  28. data/vendor/assets/javascripts/{prism-show-invisibles.js → prism-plugin/prism-show-invisibles.js} +0 -0
  29. data/vendor/assets/javascripts/{prism-show-language.js → prism-plugin/prism-show-language.js} +10 -20
  30. data/vendor/assets/javascripts/prism-plugin/prism-toolbar.js +133 -0
  31. data/vendor/assets/javascripts/{prism-unescaped-markup.js → prism-plugin/prism-unescaped-markup.js} +0 -0
  32. data/vendor/assets/javascripts/{prism-wpd.js → prism-plugin/prism-wpd.js} +0 -0
  33. data/vendor/assets/javascripts/prism-rails.js +131 -0
  34. data/vendor/assets/javascripts/prism.js +293 -8
  35. data/vendor/assets/javascripts/{prism-abap.js → prism/prism-abap.js} +0 -0
  36. data/vendor/assets/javascripts/{prism-actionscript.js → prism/prism-actionscript.js} +0 -0
  37. data/vendor/assets/javascripts/{prism-ada.js → prism/prism-ada.js} +0 -0
  38. data/vendor/assets/javascripts/{prism-apacheconf.js → prism/prism-apacheconf.js} +0 -0
  39. data/vendor/assets/javascripts/{prism-apl.js → prism/prism-apl.js} +2 -2
  40. data/vendor/assets/javascripts/{prism-applescript.js → prism/prism-applescript.js} +0 -0
  41. data/vendor/assets/javascripts/{prism-asciidoc.js → prism/prism-asciidoc.js} +0 -0
  42. data/vendor/assets/javascripts/{prism-aspnet.js → prism/prism-aspnet.js} +0 -0
  43. data/vendor/assets/javascripts/{prism-autohotkey.js → prism/prism-autohotkey.js} +0 -0
  44. data/vendor/assets/javascripts/{prism-autoit.js → prism/prism-autoit.js} +0 -0
  45. data/vendor/assets/javascripts/{prism-bash.js → prism/prism-bash.js} +0 -0
  46. data/vendor/assets/javascripts/{prism-basic.js → prism/prism-basic.js} +0 -0
  47. data/vendor/assets/javascripts/{prism-batch.js → prism/prism-batch.js} +0 -0
  48. data/vendor/assets/javascripts/{prism-bison.js → prism/prism-bison.js} +0 -0
  49. data/vendor/assets/javascripts/{prism-brainfuck.js → prism/prism-brainfuck.js} +0 -0
  50. data/vendor/assets/javascripts/{prism-bro.js → prism/prism-bro.js} +0 -0
  51. data/vendor/assets/javascripts/{prism-c.js → prism/prism-c.js} +0 -0
  52. data/vendor/assets/javascripts/{prism-clike.js → prism/prism-clike.js} +0 -0
  53. data/vendor/assets/javascripts/{prism-coffeescript.js → prism/prism-coffeescript.js} +0 -0
  54. data/vendor/assets/javascripts/prism/prism-core.js +511 -0
  55. data/vendor/assets/javascripts/{prism-cpp.js → prism/prism-cpp.js} +0 -0
  56. data/vendor/assets/javascripts/{prism-crystal.js → prism/prism-crystal.js} +0 -0
  57. data/vendor/assets/javascripts/{prism-csharp.js → prism/prism-csharp.js} +0 -0
  58. data/vendor/assets/javascripts/{prism-css-extras.js → prism/prism-css-extras.js} +0 -0
  59. data/vendor/assets/javascripts/{prism-css.js → prism/prism-css.js} +0 -0
  60. data/vendor/assets/javascripts/{prism-d.js → prism/prism-d.js} +0 -0
  61. data/vendor/assets/javascripts/{prism-dart.js → prism/prism-dart.js} +0 -0
  62. data/vendor/assets/javascripts/{prism-diff.js → prism/prism-diff.js} +0 -0
  63. data/vendor/assets/javascripts/{prism-docker.js → prism/prism-docker.js} +0 -0
  64. data/vendor/assets/javascripts/{prism-eiffel.js → prism/prism-eiffel.js} +0 -0
  65. data/vendor/assets/javascripts/{prism-elixir.js → prism/prism-elixir.js} +0 -0
  66. data/vendor/assets/javascripts/{prism-erlang.js → prism/prism-erlang.js} +0 -0
  67. data/vendor/assets/javascripts/{prism-fortran.js → prism/prism-fortran.js} +0 -0
  68. data/vendor/assets/javascripts/{prism-fsharp.js → prism/prism-fsharp.js} +0 -0
  69. data/vendor/assets/javascripts/{prism-gherkin.js → prism/prism-gherkin.js} +0 -0
  70. data/vendor/assets/javascripts/{prism-git.js → prism/prism-git.js} +0 -0
  71. data/vendor/assets/javascripts/{prism-glsl.js → prism/prism-glsl.js} +0 -0
  72. data/vendor/assets/javascripts/{prism-go.js → prism/prism-go.js} +0 -0
  73. data/vendor/assets/javascripts/{prism-graphql.js → prism/prism-graphql.js} +0 -0
  74. data/vendor/assets/javascripts/{prism-groovy.js → prism/prism-groovy.js} +1 -1
  75. data/vendor/assets/javascripts/{prism-haml.js → prism/prism-haml.js} +0 -0
  76. data/vendor/assets/javascripts/{prism-handlebars.js → prism/prism-handlebars.js} +0 -0
  77. data/vendor/assets/javascripts/{prism-haskell.js → prism/prism-haskell.js} +0 -0
  78. data/vendor/assets/javascripts/{prism-haxe.js → prism/prism-haxe.js} +0 -0
  79. data/vendor/assets/javascripts/{prism-http.js → prism/prism-http.js} +0 -0
  80. data/vendor/assets/javascripts/{prism-icon.js → prism/prism-icon.js} +0 -0
  81. data/vendor/assets/javascripts/{prism-inform7.js → prism/prism-inform7.js} +0 -0
  82. data/vendor/assets/javascripts/{prism-ini.js → prism/prism-ini.js} +1 -1
  83. data/vendor/assets/javascripts/{prism-j.js → prism/prism-j.js} +0 -0
  84. data/vendor/assets/javascripts/{prism-jade.js → prism/prism-jade.js} +0 -0
  85. data/vendor/assets/javascripts/{prism-java.js → prism/prism-java.js} +0 -0
  86. data/vendor/assets/javascripts/{prism-javascript.js → prism/prism-javascript.js} +0 -0
  87. data/vendor/assets/javascripts/prism/prism-jolie.js +56 -0
  88. data/vendor/assets/javascripts/{prism-json.js → prism/prism-json.js} +0 -0
  89. data/vendor/assets/javascripts/{prism-jsx.js → prism/prism-jsx.js} +0 -0
  90. data/vendor/assets/javascripts/{prism-julia.js → prism/prism-julia.js} +0 -0
  91. data/vendor/assets/javascripts/{prism-keyman.js → prism/prism-keyman.js} +0 -0
  92. data/vendor/assets/javascripts/{prism-kotlin.js → prism/prism-kotlin.js} +0 -0
  93. data/vendor/assets/javascripts/{prism-latex.js → prism/prism-latex.js} +0 -0
  94. data/vendor/assets/javascripts/{prism-less.js → prism/prism-less.js} +0 -0
  95. data/vendor/assets/javascripts/{prism-livescript.js → prism/prism-livescript.js} +0 -0
  96. data/vendor/assets/javascripts/{prism-lolcode.js → prism/prism-lolcode.js} +0 -0
  97. data/vendor/assets/javascripts/{prism-lua.js → prism/prism-lua.js} +0 -0
  98. data/vendor/assets/javascripts/{prism-makefile.js → prism/prism-makefile.js} +0 -0
  99. data/vendor/assets/javascripts/{prism-markdown.js → prism/prism-markdown.js} +0 -0
  100. data/vendor/assets/javascripts/{prism-markup.js → prism/prism-markup.js} +0 -0
  101. data/vendor/assets/javascripts/{prism-matlab.js → prism/prism-matlab.js} +0 -0
  102. data/vendor/assets/javascripts/{prism-mel.js → prism/prism-mel.js} +0 -0
  103. data/vendor/assets/javascripts/{prism-mizar.js → prism/prism-mizar.js} +0 -0
  104. data/vendor/assets/javascripts/{prism-monkey.js → prism/prism-monkey.js} +0 -0
  105. data/vendor/assets/javascripts/{prism-nasm.js → prism/prism-nasm.js} +0 -0
  106. data/vendor/assets/javascripts/{prism-nginx.js → prism/prism-nginx.js} +0 -0
  107. data/vendor/assets/javascripts/{prism-nim.js → prism/prism-nim.js} +0 -0
  108. data/vendor/assets/javascripts/{prism-nix.js → prism/prism-nix.js} +0 -0
  109. data/vendor/assets/javascripts/prism/prism-nsis.js +26 -0
  110. data/vendor/assets/javascripts/{prism-objectivec.js → prism/prism-objectivec.js} +0 -0
  111. data/vendor/assets/javascripts/{prism-ocaml.js → prism/prism-ocaml.js} +0 -0
  112. data/vendor/assets/javascripts/{prism-oz.js → prism/prism-oz.js} +0 -0
  113. data/vendor/assets/javascripts/{prism-parigp.js → prism/prism-parigp.js} +0 -0
  114. data/vendor/assets/javascripts/{prism-parser.js → prism/prism-parser.js} +0 -0
  115. data/vendor/assets/javascripts/{prism-pascal.js → prism/prism-pascal.js} +0 -0
  116. data/vendor/assets/javascripts/{prism-perl.js → prism/prism-perl.js} +0 -0
  117. data/vendor/assets/javascripts/{prism-php-extras.js → prism/prism-php-extras.js} +0 -0
  118. data/vendor/assets/javascripts/{prism-php.js → prism/prism-php.js} +0 -0
  119. data/vendor/assets/javascripts/{prism-powershell.js → prism/prism-powershell.js} +0 -0
  120. data/vendor/assets/javascripts/{prism-processing.js → prism/prism-processing.js} +0 -0
  121. data/vendor/assets/javascripts/{prism-prolog.js → prism/prism-prolog.js} +0 -0
  122. data/vendor/assets/javascripts/{prism-properties.js → prism/prism-properties.js} +0 -0
  123. data/vendor/assets/javascripts/{prism-protobuf.js → prism/prism-protobuf.js} +0 -0
  124. data/vendor/assets/javascripts/{prism-puppet.js → prism/prism-puppet.js} +0 -0
  125. data/vendor/assets/javascripts/{prism-pure.js → prism/prism-pure.js} +0 -0
  126. data/vendor/assets/javascripts/{prism-python.js → prism/prism-python.js} +0 -0
  127. data/vendor/assets/javascripts/{prism-q.js → prism/prism-q.js} +0 -0
  128. data/vendor/assets/javascripts/{prism-qore.js → prism/prism-qore.js} +0 -0
  129. data/vendor/assets/javascripts/{prism-r.js → prism/prism-r.js} +0 -0
  130. data/vendor/assets/javascripts/prism/prism-reason.js +32 -0
  131. data/vendor/assets/javascripts/{prism-rest.js → prism/prism-rest.js} +0 -0
  132. data/vendor/assets/javascripts/{prism-rip.js → prism/prism-rip.js} +0 -0
  133. data/vendor/assets/javascripts/{prism-roboconf.js → prism/prism-roboconf.js} +0 -0
  134. data/vendor/assets/javascripts/{prism-ruby.js → prism/prism-ruby.js} +6 -0
  135. data/vendor/assets/javascripts/{prism-rust.js → prism/prism-rust.js} +0 -0
  136. data/vendor/assets/javascripts/{prism-sas.js → prism/prism-sas.js} +0 -0
  137. data/vendor/assets/javascripts/{prism-sass.js → prism/prism-sass.js} +0 -0
  138. data/vendor/assets/javascripts/{prism-scala.js → prism/prism-scala.js} +0 -0
  139. data/vendor/assets/javascripts/{prism-scheme.js → prism/prism-scheme.js} +0 -0
  140. data/vendor/assets/javascripts/{prism-scss.js → prism/prism-scss.js} +0 -0
  141. data/vendor/assets/javascripts/{prism-smalltalk.js → prism/prism-smalltalk.js} +0 -0
  142. data/vendor/assets/javascripts/{prism-smarty.js → prism/prism-smarty.js} +0 -0
  143. data/vendor/assets/javascripts/{prism-sql.js → prism/prism-sql.js} +0 -0
  144. data/vendor/assets/javascripts/{prism-stylus.js → prism/prism-stylus.js} +0 -0
  145. data/vendor/assets/javascripts/{prism-swift.js → prism/prism-swift.js} +0 -0
  146. data/vendor/assets/javascripts/{prism-tcl.js → prism/prism-tcl.js} +0 -0
  147. data/vendor/assets/javascripts/{prism-textile.js → prism/prism-textile.js} +0 -0
  148. data/vendor/assets/javascripts/{prism-twig.js → prism/prism-twig.js} +0 -0
  149. data/vendor/assets/javascripts/prism/prism-typescript.js +5 -0
  150. data/vendor/assets/javascripts/{prism-verilog.js → prism/prism-verilog.js} +0 -0
  151. data/vendor/assets/javascripts/{prism-vhdl.js → prism/prism-vhdl.js} +0 -0
  152. data/vendor/assets/javascripts/{prism-vim.js → prism/prism-vim.js} +0 -0
  153. data/vendor/assets/javascripts/{prism-wiki.js → prism/prism-wiki.js} +0 -0
  154. data/vendor/assets/javascripts/{prism-xojo.js → prism/prism-xojo.js} +0 -0
  155. data/vendor/assets/javascripts/{prism-yaml.js → prism/prism-yaml.js} +0 -0
  156. data/vendor/assets/stylesheets/{prism-autolinker.css → prism-plugin/prism-autolinker.css} +0 -0
  157. data/vendor/assets/stylesheets/{prism-command-line.css → prism-plugin/prism-command-line.css} +0 -0
  158. data/vendor/assets/stylesheets/{prism-ie8.css → prism-plugin/prism-ie8.css} +0 -0
  159. data/vendor/assets/stylesheets/{prism-line-highlight.css → prism-plugin/prism-line-highlight.css} +0 -0
  160. data/vendor/assets/stylesheets/{prism-line-numbers.css → prism-plugin/prism-line-numbers.css} +0 -0
  161. data/vendor/assets/stylesheets/{prism-previewer-angle.css → prism-plugin/prism-previewer-angle.css} +0 -0
  162. data/vendor/assets/stylesheets/{prism-previewer-base.css → prism-plugin/prism-previewer-base.css} +0 -0
  163. data/vendor/assets/stylesheets/{prism-previewer-color.css → prism-plugin/prism-previewer-color.css} +0 -0
  164. data/vendor/assets/stylesheets/{prism-previewer-easing.css → prism-plugin/prism-previewer-easing.css} +0 -0
  165. data/vendor/assets/stylesheets/{prism-previewer-gradient.css → prism-plugin/prism-previewer-gradient.css} +0 -0
  166. data/vendor/assets/stylesheets/{prism-previewer-time.css → prism-plugin/prism-previewer-time.css} +0 -0
  167. data/vendor/assets/stylesheets/{prism-show-invisibles.css → prism-plugin/prism-show-invisibles.css} +0 -0
  168. data/vendor/assets/stylesheets/prism-plugin/prism-toolbar.css +58 -0
  169. data/vendor/assets/stylesheets/{prism-unescaped-markup.css → prism-plugin/prism-unescaped-markup.css} +0 -0
  170. data/vendor/assets/stylesheets/{prism-wpd.css → prism-plugin/prism-wpd.css} +0 -0
  171. metadata +202 -162
  172. data/vendor/assets/javascripts/prism-nsis.js +0 -19
  173. data/vendor/assets/javascripts/prism-typescript.js +0 -3
  174. data/vendor/assets/stylesheets/prism-show-language.css +0 -27
@@ -8,7 +8,7 @@ Prism.languages.apl = {
8
8
  alias: 'function'
9
9
  },
10
10
  'constant': /[⍬⌾#⎕⍞]/,
11
- 'function': /[-+×÷⌈⌊∣|⍳⍸?*⍟○!⌹<≤=>≥≠≡≢∊⍷∪∩~∨∧⍱⍲⍴,⍪⌽⊖⍉↑↓⊂⊃⌷⍋⍒⊤⊥⍕⍎⊣⊢⍁⍂≈⍯↗¤→]/,
11
+ 'function': /[-+×÷⌈⌊∣|⍳?*⍟○!⌹<≤=>≥≠≡≢∊⍷∪∩~∨∧⍱⍲⍴,⍪⌽⊖⍉↑↓⊂⊃⌷⍋⍒⊤⊥⍕⍎⊣⊢⍁⍂≈⍯↗¤→]/,
12
12
  'monadic-operator': {
13
13
  pattern: /[\\\/⌿⍀¨⍨⌶&∥]/,
14
14
  alias: 'operator'
@@ -26,4 +26,4 @@ Prism.languages.apl = {
26
26
  pattern: /[{}⍺⍵⍶⍹∇⍫:]/,
27
27
  alias: 'builtin'
28
28
  }
29
- };
29
+ };
@@ -0,0 +1,511 @@
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
+ var uniqueId = 0;
20
+
21
+ var _ = _self.Prism = {
22
+ util: {
23
+ encode: function (tokens) {
24
+ if (tokens instanceof Token) {
25
+ return new Token(tokens.type, _.util.encode(tokens.content), tokens.alias);
26
+ } else if (_.util.type(tokens) === 'Array') {
27
+ return tokens.map(_.util.encode);
28
+ } else {
29
+ return tokens.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/\u00a0/g, ' ');
30
+ }
31
+ },
32
+
33
+ type: function (o) {
34
+ return Object.prototype.toString.call(o).match(/\[object (\w+)\]/)[1];
35
+ },
36
+
37
+ objId: function (obj) {
38
+ if (!obj['__id']) {
39
+ Object.defineProperty(obj, '__id', { value: ++uniqueId });
40
+ }
41
+ return obj['__id'];
42
+ },
43
+
44
+ // Deep clone a language definition (e.g. to extend it)
45
+ clone: function (o) {
46
+ var type = _.util.type(o);
47
+
48
+ switch (type) {
49
+ case 'Object':
50
+ var clone = {};
51
+
52
+ for (var key in o) {
53
+ if (o.hasOwnProperty(key)) {
54
+ clone[key] = _.util.clone(o[key]);
55
+ }
56
+ }
57
+
58
+ return clone;
59
+
60
+ case 'Array':
61
+ // Check for existence for IE8
62
+ return o.map && o.map(function(v) { return _.util.clone(v); });
63
+ }
64
+
65
+ return o;
66
+ }
67
+ },
68
+
69
+ languages: {
70
+ extend: function (id, redef) {
71
+ var lang = _.util.clone(_.languages[id]);
72
+
73
+ for (var key in redef) {
74
+ lang[key] = redef[key];
75
+ }
76
+
77
+ return lang;
78
+ },
79
+
80
+ /**
81
+ * Insert a token before another token in a language literal
82
+ * As this needs to recreate the object (we cannot actually insert before keys in object literals),
83
+ * we cannot just provide an object, we need anobject and a key.
84
+ * @param inside The key (or language id) of the parent
85
+ * @param before The key to insert before. If not provided, the function appends instead.
86
+ * @param insert Object with the key/value pairs to insert
87
+ * @param root The object that contains `inside`. If equal to Prism.languages, it can be omitted.
88
+ */
89
+ insertBefore: function (inside, before, insert, root) {
90
+ root = root || _.languages;
91
+ var grammar = root[inside];
92
+
93
+ if (arguments.length == 2) {
94
+ insert = arguments[1];
95
+
96
+ for (var newToken in insert) {
97
+ if (insert.hasOwnProperty(newToken)) {
98
+ grammar[newToken] = insert[newToken];
99
+ }
100
+ }
101
+
102
+ return grammar;
103
+ }
104
+
105
+ var ret = {};
106
+
107
+ for (var token in grammar) {
108
+
109
+ if (grammar.hasOwnProperty(token)) {
110
+
111
+ if (token == before) {
112
+
113
+ for (var newToken in insert) {
114
+
115
+ if (insert.hasOwnProperty(newToken)) {
116
+ ret[newToken] = insert[newToken];
117
+ }
118
+ }
119
+ }
120
+
121
+ ret[token] = grammar[token];
122
+ }
123
+ }
124
+
125
+ // Update references in other language definitions
126
+ _.languages.DFS(_.languages, function(key, value) {
127
+ if (value === root[inside] && key != inside) {
128
+ this[key] = ret;
129
+ }
130
+ });
131
+
132
+ return root[inside] = ret;
133
+ },
134
+
135
+ // Traverse a language definition with Depth First Search
136
+ DFS: function(o, callback, type, visited) {
137
+ visited = visited || {};
138
+ for (var i in o) {
139
+ if (o.hasOwnProperty(i)) {
140
+ callback.call(o, i, o[i], type || i);
141
+
142
+ if (_.util.type(o[i]) === 'Object' && !visited[_.util.objId(o[i])]) {
143
+ visited[_.util.objId(o[i])] = true;
144
+ _.languages.DFS(o[i], callback, null, visited);
145
+ }
146
+ else if (_.util.type(o[i]) === 'Array' && !visited[_.util.objId(o[i])]) {
147
+ visited[_.util.objId(o[i])] = true;
148
+ _.languages.DFS(o[i], callback, i, visited);
149
+ }
150
+ }
151
+ }
152
+ }
153
+ },
154
+ plugins: {},
155
+
156
+ highlightAll: function(async, callback) {
157
+ var env = {
158
+ callback: callback,
159
+ selector: 'code[class*="language-"], [class*="language-"] code, code[class*="lang-"], [class*="lang-"] code'
160
+ };
161
+
162
+ _.hooks.run("before-highlightall", env);
163
+
164
+ var elements = env.elements || document.querySelectorAll(env.selector);
165
+
166
+ for (var i=0, element; element = elements[i++];) {
167
+ _.highlightElement(element, async === true, env.callback);
168
+ }
169
+ },
170
+
171
+ highlightElement: function(element, async, callback) {
172
+ // Find language
173
+ var language, grammar, parent = element;
174
+
175
+ while (parent && !lang.test(parent.className)) {
176
+ parent = parent.parentNode;
177
+ }
178
+
179
+ if (parent) {
180
+ language = (parent.className.match(lang) || [,''])[1].toLowerCase();
181
+ grammar = _.languages[language];
182
+ }
183
+
184
+ // Set language on the element, if not present
185
+ element.className = element.className.replace(lang, '').replace(/\s+/g, ' ') + ' language-' + language;
186
+
187
+ // Set language on the parent, for styling
188
+ parent = element.parentNode;
189
+
190
+ if (/pre/i.test(parent.nodeName)) {
191
+ parent.className = parent.className.replace(lang, '').replace(/\s+/g, ' ') + ' language-' + language;
192
+ }
193
+
194
+ var code = element.textContent;
195
+
196
+ var env = {
197
+ element: element,
198
+ language: language,
199
+ grammar: grammar,
200
+ code: code
201
+ };
202
+
203
+ _.hooks.run('before-sanity-check', env);
204
+
205
+ if (!env.code || !env.grammar) {
206
+ if (env.code) {
207
+ env.element.textContent = env.code;
208
+ }
209
+ _.hooks.run('complete', env);
210
+ return;
211
+ }
212
+
213
+ _.hooks.run('before-highlight', env);
214
+
215
+ if (async && _self.Worker) {
216
+ var worker = new Worker(_.filename);
217
+
218
+ worker.onmessage = function(evt) {
219
+ env.highlightedCode = evt.data;
220
+
221
+ _.hooks.run('before-insert', env);
222
+
223
+ env.element.innerHTML = env.highlightedCode;
224
+
225
+ callback && callback.call(env.element);
226
+ _.hooks.run('after-highlight', env);
227
+ _.hooks.run('complete', env);
228
+ };
229
+
230
+ worker.postMessage(JSON.stringify({
231
+ language: env.language,
232
+ code: env.code,
233
+ immediateClose: true
234
+ }));
235
+ }
236
+ else {
237
+ env.highlightedCode = _.highlight(env.code, env.grammar, env.language);
238
+
239
+ _.hooks.run('before-insert', env);
240
+
241
+ env.element.innerHTML = env.highlightedCode;
242
+
243
+ callback && callback.call(element);
244
+
245
+ _.hooks.run('after-highlight', env);
246
+ _.hooks.run('complete', env);
247
+ }
248
+ },
249
+
250
+ highlight: function (text, grammar, language) {
251
+ var tokens = _.tokenize(text, grammar);
252
+ return Token.stringify(_.util.encode(tokens), language);
253
+ },
254
+
255
+ tokenize: function(text, grammar, language) {
256
+ var Token = _.Token;
257
+
258
+ var strarr = [text];
259
+
260
+ var rest = grammar.rest;
261
+
262
+ if (rest) {
263
+ for (var token in rest) {
264
+ grammar[token] = rest[token];
265
+ }
266
+
267
+ delete grammar.rest;
268
+ }
269
+
270
+ tokenloop: for (var token in grammar) {
271
+ if(!grammar.hasOwnProperty(token) || !grammar[token]) {
272
+ continue;
273
+ }
274
+
275
+ var patterns = grammar[token];
276
+ patterns = (_.util.type(patterns) === "Array") ? patterns : [patterns];
277
+
278
+ for (var j = 0; j < patterns.length; ++j) {
279
+ var pattern = patterns[j],
280
+ inside = pattern.inside,
281
+ lookbehind = !!pattern.lookbehind,
282
+ greedy = !!pattern.greedy,
283
+ lookbehindLength = 0,
284
+ alias = pattern.alias;
285
+
286
+ if (greedy && !pattern.pattern.global) {
287
+ // Without the global flag, lastIndex won't work
288
+ var flags = pattern.pattern.toString().match(/[imuy]*$/)[0];
289
+ pattern.pattern = RegExp(pattern.pattern.source, flags + "g");
290
+ }
291
+
292
+ pattern = pattern.pattern || pattern;
293
+
294
+ // Don’t cache length as it changes during the loop
295
+ for (var i=0, pos = 0; i<strarr.length; pos += strarr[i].length, ++i) {
296
+
297
+ var str = strarr[i];
298
+
299
+ if (strarr.length > text.length) {
300
+ // Something went terribly wrong, ABORT, ABORT!
301
+ break tokenloop;
302
+ }
303
+
304
+ if (str instanceof Token) {
305
+ continue;
306
+ }
307
+
308
+ pattern.lastIndex = 0;
309
+
310
+ var match = pattern.exec(str),
311
+ delNum = 1;
312
+
313
+ // Greedy patterns can override/remove up to two previously matched tokens
314
+ if (!match && greedy && i != strarr.length - 1) {
315
+ pattern.lastIndex = pos;
316
+ match = pattern.exec(text);
317
+ if (!match) {
318
+ break;
319
+ }
320
+
321
+ var from = match.index + (lookbehind ? match[1].length : 0),
322
+ to = match.index + match[0].length,
323
+ k = i,
324
+ p = pos;
325
+
326
+ for (var len = strarr.length; k < len && p < to; ++k) {
327
+ p += strarr[k].length;
328
+ // Move the index i to the element in strarr that is closest to from
329
+ if (from >= p) {
330
+ ++i;
331
+ pos = p;
332
+ }
333
+ }
334
+
335
+ /*
336
+ * If strarr[i] is a Token, then the match starts inside another Token, which is invalid
337
+ * If strarr[k - 1] is greedy we are in conflict with another greedy pattern
338
+ */
339
+ if (strarr[i] instanceof Token || strarr[k - 1].greedy) {
340
+ continue;
341
+ }
342
+
343
+ // Number of tokens to delete and replace with the new match
344
+ delNum = k - i;
345
+ str = text.slice(pos, p);
346
+ match.index -= pos;
347
+ }
348
+
349
+ if (!match) {
350
+ continue;
351
+ }
352
+
353
+ if(lookbehind) {
354
+ lookbehindLength = match[1].length;
355
+ }
356
+
357
+ var from = match.index + lookbehindLength,
358
+ match = match[0].slice(lookbehindLength),
359
+ to = from + match.length,
360
+ before = str.slice(0, from),
361
+ after = str.slice(to);
362
+
363
+ var args = [i, delNum];
364
+
365
+ if (before) {
366
+ args.push(before);
367
+ }
368
+
369
+ var wrapped = new Token(token, inside? _.tokenize(match, inside) : match, alias, match, greedy);
370
+
371
+ args.push(wrapped);
372
+
373
+ if (after) {
374
+ args.push(after);
375
+ }
376
+
377
+ Array.prototype.splice.apply(strarr, args);
378
+ }
379
+ }
380
+ }
381
+
382
+ return strarr;
383
+ },
384
+
385
+ hooks: {
386
+ all: {},
387
+
388
+ add: function (name, callback) {
389
+ var hooks = _.hooks.all;
390
+
391
+ hooks[name] = hooks[name] || [];
392
+
393
+ hooks[name].push(callback);
394
+ },
395
+
396
+ run: function (name, env) {
397
+ var callbacks = _.hooks.all[name];
398
+
399
+ if (!callbacks || !callbacks.length) {
400
+ return;
401
+ }
402
+
403
+ for (var i=0, callback; callback = callbacks[i++];) {
404
+ callback(env);
405
+ }
406
+ }
407
+ }
408
+ };
409
+
410
+ var Token = _.Token = function(type, content, alias, matchedStr, greedy) {
411
+ this.type = type;
412
+ this.content = content;
413
+ this.alias = alias;
414
+ // Copy of the full string this token was created from
415
+ this.length = (matchedStr || "").length|0;
416
+ this.greedy = !!greedy;
417
+ };
418
+
419
+ Token.stringify = function(o, language, parent) {
420
+ if (typeof o == 'string') {
421
+ return o;
422
+ }
423
+
424
+ if (_.util.type(o) === 'Array') {
425
+ return o.map(function(element) {
426
+ return Token.stringify(element, language, o);
427
+ }).join('');
428
+ }
429
+
430
+ var env = {
431
+ type: o.type,
432
+ content: Token.stringify(o.content, language, parent),
433
+ tag: 'span',
434
+ classes: ['token', o.type],
435
+ attributes: {},
436
+ language: language,
437
+ parent: parent
438
+ };
439
+
440
+ if (env.type == 'comment') {
441
+ env.attributes['spellcheck'] = 'true';
442
+ }
443
+
444
+ if (o.alias) {
445
+ var aliases = _.util.type(o.alias) === 'Array' ? o.alias : [o.alias];
446
+ Array.prototype.push.apply(env.classes, aliases);
447
+ }
448
+
449
+ _.hooks.run('wrap', env);
450
+
451
+ var attributes = Object.keys(env.attributes).map(function(name) {
452
+ return name + '="' + (env.attributes[name] || '').replace(/"/g, '&quot;') + '"';
453
+ }).join(' ');
454
+
455
+ return '<' + env.tag + ' class="' + env.classes.join(' ') + '"' + (attributes ? ' ' + attributes : '') + '>' + env.content + '</' + env.tag + '>';
456
+
457
+ };
458
+
459
+ if (!_self.document) {
460
+ if (!_self.addEventListener) {
461
+ // in Node.js
462
+ return _self.Prism;
463
+ }
464
+ // In worker
465
+ _self.addEventListener('message', function(evt) {
466
+ var message = JSON.parse(evt.data),
467
+ lang = message.language,
468
+ code = message.code,
469
+ immediateClose = message.immediateClose;
470
+
471
+ _self.postMessage(_.highlight(code, _.languages[lang], lang));
472
+ if (immediateClose) {
473
+ _self.close();
474
+ }
475
+ }, false);
476
+
477
+ return _self.Prism;
478
+ }
479
+
480
+ //Get current script and highlight
481
+ var script = document.currentScript || [].slice.call(document.getElementsByTagName("script")).pop();
482
+
483
+ if (script) {
484
+ _.filename = script.src;
485
+
486
+ if (document.addEventListener && !script.hasAttribute('data-manual')) {
487
+ if(document.readyState !== "loading") {
488
+ if (window.requestAnimationFrame) {
489
+ window.requestAnimationFrame(_.highlightAll);
490
+ } else {
491
+ window.setTimeout(_.highlightAll, 16);
492
+ }
493
+ }
494
+ else {
495
+ document.addEventListener('DOMContentLoaded', _.highlightAll);
496
+ }
497
+ }
498
+ }
499
+
500
+ return _self.Prism;
501
+
502
+ })();
503
+
504
+ if (typeof module !== 'undefined' && module.exports) {
505
+ module.exports = Prism;
506
+ }
507
+
508
+ // hack for components to work correctly in node.js
509
+ if (typeof global !== 'undefined') {
510
+ global.Prism = Prism;
511
+ }