OLD | NEW |
1 var _self = (typeof window !== 'undefined') | 1 var _self = (typeof window !== 'undefined') |
2 ? window // if in browser | 2 ? window // if in browser |
3 : ( | 3 : ( |
4 (typeof WorkerGlobalScope !== 'undefined' && self instanceof Wor
kerGlobalScope) | 4 (typeof WorkerGlobalScope !== 'undefined' && self instanceof Wor
kerGlobalScope) |
5 ? self // if in worker | 5 ? self // if in worker |
6 : {} // if in node js | 6 : {} // if in node js |
7 ); | 7 ); |
8 | 8 |
9 /** | 9 /** |
10 * Prism: Lightweight, robust, elegant syntax highlighting | 10 * Prism: Lightweight, robust, elegant syntax highlighting |
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
133 if (_.util.type(o[i]) === 'Object') { | 133 if (_.util.type(o[i]) === 'Object') { |
134 _.languages.DFS(o[i], callback); | 134 _.languages.DFS(o[i], callback); |
135 } | 135 } |
136 else if (_.util.type(o[i]) === 'Array')
{ | 136 else if (_.util.type(o[i]) === 'Array')
{ |
137 _.languages.DFS(o[i], callback,
i); | 137 _.languages.DFS(o[i], callback,
i); |
138 } | 138 } |
139 } | 139 } |
140 } | 140 } |
141 } | 141 } |
142 }, | 142 }, |
143 | 143 » plugins: {}, |
| 144 » |
144 highlightAll: function(async, callback) { | 145 highlightAll: function(async, callback) { |
145 var elements = document.querySelectorAll('code[class*="language-
"], [class*="language-"] code, code[class*="lang-"], [class*="lang-"] code'); | 146 var elements = document.querySelectorAll('code[class*="language-
"], [class*="language-"] code, code[class*="lang-"], [class*="lang-"] code'); |
146 | 147 |
147 for (var i=0, element; element = elements[i++];) { | 148 for (var i=0, element; element = elements[i++];) { |
148 _.highlightElement(element, async === true, callback); | 149 _.highlightElement(element, async === true, callback); |
149 } | 150 } |
150 }, | 151 }, |
151 | 152 |
152 highlightElement: function(element, async, callback) { | 153 highlightElement: function(element, async, callback) { |
153 // Find language | 154 // Find language |
(...skipping 11 matching lines...) Expand all Loading... |
165 // Set language on the element, if not present | 166 // Set language on the element, if not present |
166 element.className = element.className.replace(lang, '').replace(
/\s+/g, ' ') + ' language-' + language; | 167 element.className = element.className.replace(lang, '').replace(
/\s+/g, ' ') + ' language-' + language; |
167 | 168 |
168 // Set language on the parent, for styling | 169 // Set language on the parent, for styling |
169 parent = element.parentNode; | 170 parent = element.parentNode; |
170 | 171 |
171 if (/pre/i.test(parent.nodeName)) { | 172 if (/pre/i.test(parent.nodeName)) { |
172 parent.className = parent.className.replace(lang, '').re
place(/\s+/g, ' ') + ' language-' + language; | 173 parent.className = parent.className.replace(lang, '').re
place(/\s+/g, ' ') + ' language-' + language; |
173 } | 174 } |
174 | 175 |
175 if (!grammar) { | |
176 return; | |
177 } | |
178 | |
179 var code = element.textContent; | 176 var code = element.textContent; |
180 | 177 |
181 if(!code) { | |
182 return; | |
183 } | |
184 | |
185 code = code.replace(/^(?:\r?\n|\r)/,''); | |
186 | |
187 var env = { | 178 var env = { |
188 element: element, | 179 element: element, |
189 language: language, | 180 language: language, |
190 grammar: grammar, | 181 grammar: grammar, |
191 code: code | 182 code: code |
192 }; | 183 }; |
193 | 184 |
| 185 if (!code || !grammar) { |
| 186 _.hooks.run('complete', env); |
| 187 return; |
| 188 } |
| 189 |
194 _.hooks.run('before-highlight', env); | 190 _.hooks.run('before-highlight', env); |
195 | 191 |
196 if (async && _self.Worker) { | 192 if (async && _self.Worker) { |
197 var worker = new Worker(_.filename); | 193 var worker = new Worker(_.filename); |
198 | 194 |
199 worker.onmessage = function(evt) { | 195 worker.onmessage = function(evt) { |
200 » » » » env.highlightedCode = Token.stringify(JSON.parse
(evt.data), language); | 196 » » » » env.highlightedCode = evt.data; |
201 | 197 |
202 _.hooks.run('before-insert', env); | 198 _.hooks.run('before-insert', env); |
203 | 199 |
204 env.element.innerHTML = env.highlightedCode; | 200 env.element.innerHTML = env.highlightedCode; |
205 | 201 |
206 callback && callback.call(env.element); | 202 callback && callback.call(env.element); |
207 _.hooks.run('after-highlight', env); | 203 _.hooks.run('after-highlight', env); |
| 204 _.hooks.run('complete', env); |
208 }; | 205 }; |
209 | 206 |
210 worker.postMessage(JSON.stringify({ | 207 worker.postMessage(JSON.stringify({ |
211 language: env.language, | 208 language: env.language, |
212 » » » » code: env.code | 209 » » » » code: env.code, |
| 210 » » » » immediateClose: true |
213 })); | 211 })); |
214 } | 212 } |
215 else { | 213 else { |
216 env.highlightedCode = _.highlight(env.code, env.grammar,
env.language); | 214 env.highlightedCode = _.highlight(env.code, env.grammar,
env.language); |
217 | 215 |
218 _.hooks.run('before-insert', env); | 216 _.hooks.run('before-insert', env); |
219 | 217 |
220 env.element.innerHTML = env.highlightedCode; | 218 env.element.innerHTML = env.highlightedCode; |
221 | 219 |
222 callback && callback.call(element); | 220 callback && callback.call(element); |
223 | 221 |
224 _.hooks.run('after-highlight', env); | 222 _.hooks.run('after-highlight', env); |
| 223 _.hooks.run('complete', env); |
225 } | 224 } |
226 }, | 225 }, |
227 | 226 |
228 highlight: function (text, grammar, language) { | 227 highlight: function (text, grammar, language) { |
229 var tokens = _.tokenize(text, grammar); | 228 var tokens = _.tokenize(text, grammar); |
230 return Token.stringify(_.util.encode(tokens), language); | 229 return Token.stringify(_.util.encode(tokens), language); |
231 }, | 230 }, |
232 | 231 |
233 tokenize: function(text, grammar, language) { | 232 tokenize: function(text, grammar, language) { |
234 var Token = _.Token; | 233 var Token = _.Token; |
(...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
373 if (o.alias) { | 372 if (o.alias) { |
374 var aliases = _.util.type(o.alias) === 'Array' ? o.alias : [o.al
ias]; | 373 var aliases = _.util.type(o.alias) === 'Array' ? o.alias : [o.al
ias]; |
375 Array.prototype.push.apply(env.classes, aliases); | 374 Array.prototype.push.apply(env.classes, aliases); |
376 } | 375 } |
377 | 376 |
378 _.hooks.run('wrap', env); | 377 _.hooks.run('wrap', env); |
379 | 378 |
380 var attributes = ''; | 379 var attributes = ''; |
381 | 380 |
382 for (var name in env.attributes) { | 381 for (var name in env.attributes) { |
383 » » attributes += name + '="' + (env.attributes[name] || '') + '"'; | 382 » » attributes += (attributes ? ' ' : '') + name + '="' + (env.attri
butes[name] || '') + '"'; |
384 } | 383 } |
385 | 384 |
386 return '<' + env.tag + ' class="' + env.classes.join(' ') + '" ' + attri
butes + '>' + env.content + '</' + env.tag + '>'; | 385 return '<' + env.tag + ' class="' + env.classes.join(' ') + '" ' + attri
butes + '>' + env.content + '</' + env.tag + '>'; |
387 | 386 |
388 }; | 387 }; |
389 | 388 |
390 if (!_self.document) { | 389 if (!_self.document) { |
391 if (!_self.addEventListener) { | 390 if (!_self.addEventListener) { |
392 // in Node.js | 391 // in Node.js |
393 return _self.Prism; | 392 return _self.Prism; |
394 } | 393 } |
395 // In worker | 394 // In worker |
396 _self.addEventListener('message', function(evt) { | 395 _self.addEventListener('message', function(evt) { |
397 var message = JSON.parse(evt.data), | 396 var message = JSON.parse(evt.data), |
398 lang = message.language, | 397 lang = message.language, |
399 » » code = message.code; | 398 » » code = message.code, |
| 399 » » immediateClose = message.immediateClose; |
400 | 400 |
401 » » _self.postMessage(JSON.stringify(_.util.encode(_.tokenize(code,
_.languages[lang])))); | 401 » » _self.postMessage(_.highlight(code, _.languages[lang], lang)); |
402 » » _self.close(); | 402 » » if (immediateClose) { |
| 403 » » » _self.close(); |
| 404 » » } |
403 }, false); | 405 }, false); |
404 | 406 |
405 return _self.Prism; | 407 return _self.Prism; |
406 } | 408 } |
407 | 409 |
408 // Get current script and highlight | 410 // Get current script and highlight |
409 var script = document.getElementsByTagName('script'); | 411 var script = document.getElementsByTagName('script'); |
410 | 412 |
411 script = script[script.length - 1]; | 413 script = script[script.length - 1]; |
412 | 414 |
413 if (script) { | 415 if (script) { |
414 _.filename = script.src; | 416 _.filename = script.src; |
415 | 417 |
416 if (document.addEventListener && !script.hasAttribute('data-manual')) { | 418 if (document.addEventListener && !script.hasAttribute('data-manual')) { |
417 document.addEventListener('DOMContentLoaded', _.highlightAll); | 419 document.addEventListener('DOMContentLoaded', _.highlightAll); |
418 } | 420 } |
419 } | 421 } |
420 | 422 |
421 return _self.Prism; | 423 return _self.Prism; |
422 | 424 |
423 })(); | 425 })(); |
424 | 426 |
425 if (typeof module !== 'undefined' && module.exports) { | 427 if (typeof module !== 'undefined' && module.exports) { |
426 module.exports = Prism; | 428 module.exports = Prism; |
427 } | 429 } |
| 430 |
| 431 // hack for components to work correctly in node.js |
| 432 if (typeof global !== 'undefined') { |
| 433 global.Prism = Prism; |
| 434 } |
OLD | NEW |