| Index: lib/src/prism/prism.js
|
| diff --git a/lib/src/prism/prism.js b/lib/src/prism/prism.js
|
| index 8282b5719342deb6867ec8c6cb797ed545a7c9e0..f575db3ae87b1530b188fdbe7f600f3391dabd5d 100644
|
| --- a/lib/src/prism/prism.js
|
| +++ b/lib/src/prism/prism.js
|
| @@ -145,7 +145,8 @@ var _ = _self.Prism = {
|
| }
|
| }
|
| },
|
| -
|
| + plugins: {},
|
| +
|
| highlightAll: function(async, callback) {
|
| var elements = document.querySelectorAll('code[class*="language-"], [class*="language-"] code, code[class*="lang-"], [class*="lang-"] code');
|
|
|
| @@ -177,18 +178,8 @@ var _ = _self.Prism = {
|
| parent.className = parent.className.replace(lang, '').replace(/\s+/g, ' ') + ' language-' + language;
|
| }
|
|
|
| - if (!grammar) {
|
| - return;
|
| - }
|
| -
|
| var code = element.textContent;
|
|
|
| - if(!code) {
|
| - return;
|
| - }
|
| -
|
| - code = code.replace(/^(?:\r?\n|\r)/,'');
|
| -
|
| var env = {
|
| element: element,
|
| language: language,
|
| @@ -196,13 +187,18 @@ var _ = _self.Prism = {
|
| code: code
|
| };
|
|
|
| + if (!code || !grammar) {
|
| + _.hooks.run('complete', env);
|
| + return;
|
| + }
|
| +
|
| _.hooks.run('before-highlight', env);
|
|
|
| if (async && _self.Worker) {
|
| var worker = new Worker(_.filename);
|
|
|
| worker.onmessage = function(evt) {
|
| - env.highlightedCode = Token.stringify(JSON.parse(evt.data), language);
|
| + env.highlightedCode = evt.data;
|
|
|
| _.hooks.run('before-insert', env);
|
|
|
| @@ -210,11 +206,13 @@ var _ = _self.Prism = {
|
|
|
| callback && callback.call(env.element);
|
| _.hooks.run('after-highlight', env);
|
| + _.hooks.run('complete', env);
|
| };
|
|
|
| worker.postMessage(JSON.stringify({
|
| language: env.language,
|
| - code: env.code
|
| + code: env.code,
|
| + immediateClose: true
|
| }));
|
| }
|
| else {
|
| @@ -227,6 +225,7 @@ var _ = _self.Prism = {
|
| callback && callback.call(element);
|
|
|
| _.hooks.run('after-highlight', env);
|
| + _.hooks.run('complete', env);
|
| }
|
| },
|
|
|
| @@ -385,7 +384,7 @@ Token.stringify = function(o, language, parent) {
|
| var attributes = '';
|
|
|
| for (var name in env.attributes) {
|
| - attributes += name + '="' + (env.attributes[name] || '') + '"';
|
| + attributes += (attributes ? ' ' : '') + name + '="' + (env.attributes[name] || '') + '"';
|
| }
|
|
|
| return '<' + env.tag + ' class="' + env.classes.join(' ') + '" ' + attributes + '>' + env.content + '</' + env.tag + '>';
|
| @@ -401,10 +400,13 @@ if (!_self.document) {
|
| _self.addEventListener('message', function(evt) {
|
| var message = JSON.parse(evt.data),
|
| lang = message.language,
|
| - code = message.code;
|
| + code = message.code,
|
| + immediateClose = message.immediateClose;
|
|
|
| - _self.postMessage(JSON.stringify(_.util.encode(_.tokenize(code, _.languages[lang]))));
|
| - _self.close();
|
| + _self.postMessage(_.highlight(code, _.languages[lang], lang));
|
| + if (immediateClose) {
|
| + _self.close();
|
| + }
|
| }, false);
|
|
|
| return _self.Prism;
|
| @@ -431,6 +433,11 @@ if (typeof module !== 'undefined' && module.exports) {
|
| module.exports = Prism;
|
| }
|
|
|
| +// hack for components to work correctly in node.js
|
| +if (typeof global !== 'undefined') {
|
| + global.Prism = Prism;
|
| +}
|
| +
|
|
|
| /* **********************************************
|
| Begin prism-markup.js
|
| @@ -442,7 +449,7 @@ Prism.languages.markup = {
|
| 'doctype': /<!DOCTYPE[\w\W]+?>/,
|
| 'cdata': /<!\[CDATA\[[\w\W]*?]]>/i,
|
| 'tag': {
|
| - pattern: /<\/?[^\s>\/]+(?:\s+[^\s>\/=]+(?:=(?:("|')(?:\\\1|\\?(?!\1)[\w\W])*\1|[^\s'">=]+))?)*\s*\/?>/i,
|
| + pattern: /<\/?[^\s>\/=.]+(?:\s+[^\s>\/=]+(?:=(?:("|')(?:\\\1|\\?(?!\1)[\w\W])*\1|[^\s'">=]+))?)*\s*\/?>/i,
|
| inside: {
|
| 'tag': {
|
| pattern: /^<\/?[^\s>\/]+/i,
|
| @@ -478,6 +485,11 @@ Prism.hooks.add('wrap', function(env) {
|
| }
|
| });
|
|
|
| +Prism.languages.xml = Prism.languages.markup;
|
| +Prism.languages.html = Prism.languages.markup;
|
| +Prism.languages.mathml = Prism.languages.markup;
|
| +Prism.languages.svg = Prism.languages.markup;
|
| +
|
|
|
| /* **********************************************
|
| Begin prism-css.js
|
| @@ -506,14 +518,9 @@ Prism.languages.css['atrule'].inside.rest = Prism.util.clone(Prism.languages.css
|
| if (Prism.languages.markup) {
|
| Prism.languages.insertBefore('markup', 'tag', {
|
| 'style': {
|
| - pattern: /<style[\w\W]*?>[\w\W]*?<\/style>/i,
|
| - inside: {
|
| - 'tag': {
|
| - pattern: /<style[\w\W]*?>|<\/style>/i,
|
| - inside: Prism.languages.markup.tag.inside
|
| - },
|
| - rest: Prism.languages.css
|
| - },
|
| + pattern: /(<style[\w\W]*?>)[\w\W]*?(?=<\/style>)/i,
|
| + lookbehind: true,
|
| + inside: Prism.languages.css,
|
| alias: 'language-css'
|
| }
|
| });
|
| @@ -552,9 +559,9 @@ Prism.languages.clike = {
|
| lookbehind: true
|
| }
|
| ],
|
| - 'string': /("|')(\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,
|
| + 'string': /(["'])(\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,
|
| 'class-name': {
|
| - pattern: /((?:(?:class|interface|extends|implements|trait|instanceof|new)\s+)|(?:catch\s+\())[a-z0-9_\.\\]+/i,
|
| + pattern: /((?:\b(?:class|interface|extends|implements|trait|instanceof|new)\s+)|(?:catch\s+\())[a-z0-9_\.\\]+/i,
|
| lookbehind: true,
|
| inside: {
|
| punctuation: /(\.|\\)/
|
| @@ -563,8 +570,8 @@ Prism.languages.clike = {
|
| '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-Fa-f]+|\d*\.?\d+([Ee]-?\d+)?)\b/,
|
| - 'operator': /[-+]{1,2}|!|<=?|>=?|={1,3}|&{1,2}|\|?\||\?|\*|\/|~|\^|%/,
|
| + 'number': /\b-?(?:0x[\da-f]+|\d*\.?\d+(?:e[+-]?\d+)?)\b/i,
|
| + 'operator': /--?|\+\+?|!=?=?|<=?|>=?|==?=?|&&?|\|\|?|\?|\*|\/|~|\^|%/,
|
| 'punctuation': /[{}[\];(),.:]/
|
| };
|
|
|
| @@ -576,7 +583,8 @@ Prism.languages.clike = {
|
| Prism.languages.javascript = Prism.languages.extend('clike', {
|
| 'keyword': /\b(as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|false|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|true|try|typeof|var|void|while|with|yield)\b/,
|
| 'number': /\b-?(0x[\dA-Fa-f]+|0b[01]+|0o[0-7]+|\d*\.?\d+([Ee][+-]?\d+)?|NaN|Infinity)\b/,
|
| - 'function': /(?!\d)[a-z0-9_$]+(?=\()/i
|
| + // Allow for all non-ASCII characters (See http://stackoverflow.com/a/2008444)
|
| + 'function': /[_$a-zA-Z\xA0-\uFFFF][_$a-zA-Z0-9\xA0-\uFFFF]*(?=\()/i
|
| });
|
|
|
| Prism.languages.insertBefore('javascript', 'keyword', {
|
| @@ -608,26 +616,22 @@ Prism.languages.insertBefore('javascript', 'class-name', {
|
| if (Prism.languages.markup) {
|
| Prism.languages.insertBefore('markup', 'tag', {
|
| 'script': {
|
| - pattern: /<script[\w\W]*?>[\w\W]*?<\/script>/i,
|
| - inside: {
|
| - 'tag': {
|
| - pattern: /<script[\w\W]*?>|<\/script>/i,
|
| - inside: Prism.languages.markup.tag.inside
|
| - },
|
| - rest: Prism.languages.javascript
|
| - },
|
| + pattern: /(<script[\w\W]*?>)[\w\W]*?(?=<\/script>)/i,
|
| + lookbehind: true,
|
| + inside: Prism.languages.javascript,
|
| alias: 'language-javascript'
|
| }
|
| });
|
| }
|
|
|
| +Prism.languages.js = Prism.languages.javascript;
|
|
|
| /* **********************************************
|
| Begin prism-file-highlight.js
|
| ********************************************** */
|
|
|
| (function () {
|
| - if (!self.Prism || !self.document || !document.querySelector) {
|
| + if (typeof self === 'undefined' || !self.Prism || !self.document || !document.querySelector) {
|
| return;
|
| }
|
|
|
|
|