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; |
} |