|
|
|
@ -1,4 +1,4 @@
|
|
|
|
|
/* http://prismjs.com/download.html?themes=prism&languages=markup+css+clike+javascript+c+cpp+coffeescript+ruby+elixir+go+php+python+rust */
|
|
|
|
|
/* http://prismjs.com/download.html?themes=prism&languages=markup+css+clike+javascript+c+cpp+coffeescript+ruby+elixir+go+lua+php+python+rust */
|
|
|
|
|
var _self = (typeof window !== 'undefined')
|
|
|
|
|
? window // if in browser
|
|
|
|
|
: (
|
|
|
|
@ -155,10 +155,17 @@ var _ = _self.Prism = {
|
|
|
|
|
plugins: {},
|
|
|
|
|
|
|
|
|
|
highlightAll: function(async, callback) {
|
|
|
|
|
var elements = document.querySelectorAll('code[class*="language-"], [class*="language-"] code, code[class*="lang-"], [class*="lang-"] code');
|
|
|
|
|
var env = {
|
|
|
|
|
callback: callback,
|
|
|
|
|
selector: 'code[class*="language-"], [class*="language-"] code, code[class*="lang-"], [class*="lang-"] code'
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
_.hooks.run("before-highlightall", env);
|
|
|
|
|
|
|
|
|
|
var elements = env.elements || document.querySelectorAll(env.selector);
|
|
|
|
|
|
|
|
|
|
for (var i=0, element; element = elements[i++];) {
|
|
|
|
|
_.highlightElement(element, async === true, callback);
|
|
|
|
|
_.highlightElement(element, async === true, env.callback);
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
@ -268,6 +275,7 @@ var _ = _self.Prism = {
|
|
|
|
|
var pattern = patterns[j],
|
|
|
|
|
inside = pattern.inside,
|
|
|
|
|
lookbehind = !!pattern.lookbehind,
|
|
|
|
|
greedy = !!pattern.greedy,
|
|
|
|
|
lookbehindLength = 0,
|
|
|
|
|
alias = pattern.alias;
|
|
|
|
|
|
|
|
|
@ -288,27 +296,65 @@ var _ = _self.Prism = {
|
|
|
|
|
|
|
|
|
|
pattern.lastIndex = 0;
|
|
|
|
|
|
|
|
|
|
var match = pattern.exec(str);
|
|
|
|
|
var match = pattern.exec(str),
|
|
|
|
|
delNum = 1;
|
|
|
|
|
|
|
|
|
|
// Greedy patterns can override/remove up to two previously matched tokens
|
|
|
|
|
if (!match && greedy && i != strarr.length - 1) {
|
|
|
|
|
// Reconstruct the original text using the next two tokens
|
|
|
|
|
var nextToken = strarr[i + 1].matchedStr || strarr[i + 1],
|
|
|
|
|
combStr = str + nextToken;
|
|
|
|
|
|
|
|
|
|
if (i < strarr.length - 2) {
|
|
|
|
|
combStr += strarr[i + 2].matchedStr || strarr[i + 2];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Try the pattern again on the reconstructed text
|
|
|
|
|
pattern.lastIndex = 0;
|
|
|
|
|
match = pattern.exec(combStr);
|
|
|
|
|
if (!match) {
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var from = match.index + (lookbehind ? match[1].length : 0);
|
|
|
|
|
// To be a valid candidate, the new match has to start inside of str
|
|
|
|
|
if (from >= str.length) {
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
var to = match.index + match[0].length,
|
|
|
|
|
len = str.length + nextToken.length;
|
|
|
|
|
|
|
|
|
|
// Number of tokens to delete and replace with the new match
|
|
|
|
|
delNum = 3;
|
|
|
|
|
|
|
|
|
|
if (to <= len) {
|
|
|
|
|
delNum = 2;
|
|
|
|
|
combStr = combStr.slice(0, len);
|
|
|
|
|
}
|
|
|
|
|
str = combStr;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (!match) {
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (match) {
|
|
|
|
|
if(lookbehind) {
|
|
|
|
|
lookbehindLength = match[1].length;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var from = match.index - 1 + lookbehindLength,
|
|
|
|
|
var from = match.index + lookbehindLength,
|
|
|
|
|
match = match[0].slice(lookbehindLength),
|
|
|
|
|
len = match.length,
|
|
|
|
|
to = from + len,
|
|
|
|
|
before = str.slice(0, from + 1),
|
|
|
|
|
after = str.slice(to + 1);
|
|
|
|
|
to = from + match.length,
|
|
|
|
|
before = str.slice(0, from),
|
|
|
|
|
after = str.slice(to);
|
|
|
|
|
|
|
|
|
|
var args = [i, 1];
|
|
|
|
|
var args = [i, delNum];
|
|
|
|
|
|
|
|
|
|
if (before) {
|
|
|
|
|
args.push(before);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var wrapped = new Token(token, inside? _.tokenize(match, inside) : match, alias);
|
|
|
|
|
var wrapped = new Token(token, inside? _.tokenize(match, inside) : match, alias, match);
|
|
|
|
|
|
|
|
|
|
args.push(wrapped);
|
|
|
|
|
|
|
|
|
@ -320,7 +366,6 @@ var _ = _self.Prism = {
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return strarr;
|
|
|
|
|
},
|
|
|
|
@ -350,10 +395,12 @@ var _ = _self.Prism = {
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
var Token = _.Token = function(type, content, alias) {
|
|
|
|
|
var Token = _.Token = function(type, content, alias, matchedStr) {
|
|
|
|
|
this.type = type;
|
|
|
|
|
this.content = content;
|
|
|
|
|
this.alias = alias;
|
|
|
|
|
// Copy of the full string this token was created from
|
|
|
|
|
this.matchedStr = matchedStr || null;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
Token.stringify = function(o, language, parent) {
|
|
|
|
@ -549,7 +596,10 @@ Prism.languages.clike = {
|
|
|
|
|
lookbehind: true
|
|
|
|
|
}
|
|
|
|
|
],
|
|
|
|
|
'string': /(["'])(\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,
|
|
|
|
|
'string': {
|
|
|
|
|
pattern: /(["'])(\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,
|
|
|
|
|
greedy: true
|
|
|
|
|
},
|
|
|
|
|
'class-name': {
|
|
|
|
|
pattern: /((?:\b(?:class|interface|extends|implements|trait|instanceof|new)\s+)|(?:catch\s+\())[a-z0-9_\.\\]+/i,
|
|
|
|
|
lookbehind: true,
|
|
|
|
@ -575,13 +625,14 @@ Prism.languages.javascript = Prism.languages.extend('clike', {
|
|
|
|
|
Prism.languages.insertBefore('javascript', 'keyword', {
|
|
|
|
|
'regex': {
|
|
|
|
|
pattern: /(^|[^/])\/(?!\/)(\[.+?]|\\.|[^/\\\r\n])+\/[gimyu]{0,5}(?=\s*($|[\r\n,.;})]))/,
|
|
|
|
|
lookbehind: true
|
|
|
|
|
lookbehind: true,
|
|
|
|
|
greedy: true
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
Prism.languages.insertBefore('javascript', 'class-name', {
|
|
|
|
|
'template-string': {
|
|
|
|
|
pattern: /`(?:\\`|\\?[^`])*`/,
|
|
|
|
|
pattern: /`(?:\\\\|\\?[^\\])*?`/,
|
|
|
|
|
inside: {
|
|
|
|
|
'interpolation': {
|
|
|
|
|
pattern: /\$\{[^}]+\}/,
|
|
|
|
@ -950,6 +1001,23 @@ Prism.languages.go = Prism.languages.extend('clike', {
|
|
|
|
|
});
|
|
|
|
|
delete Prism.languages.go['class-name'];
|
|
|
|
|
|
|
|
|
|
Prism.languages.lua = {
|
|
|
|
|
'comment': /^#!.+|--(?:\[(=*)\[[\s\S]*?\]\1\]|.*)/m,
|
|
|
|
|
// \z may be used to skip the following space
|
|
|
|
|
'string': /(["'])(?:(?!\1)[^\\\r\n]|\\z(?:\r\n|\s)|\\(?:\r\n|[\s\S]))*\1|\[(=*)\[[\s\S]*?\]\2\]/,
|
|
|
|
|
'number': /\b0x[a-f\d]+\.?[a-f\d]*(?:p[+-]?\d+)?\b|\b\d+(?:\.\B|\.?\d*(?:e[+-]?\d+)?\b)|\B\.\d+(?:e[+-]?\d+)?\b/i,
|
|
|
|
|
'keyword': /\b(?:and|break|do|else|elseif|end|false|for|function|goto|if|in|local|nil|not|or|repeat|return|then|true|until|while)\b/,
|
|
|
|
|
'function': /(?!\d)\w+(?=\s*(?:[({]))/,
|
|
|
|
|
'operator': [
|
|
|
|
|
/[-+*%^&|#]|\/\/?|<[<=]?|>[>=]?|[=~]=?/,
|
|
|
|
|
{
|
|
|
|
|
// Match ".." but don't break "..."
|
|
|
|
|
pattern: /(^|[^.])\.\.(?!\.)/,
|
|
|
|
|
lookbehind: true
|
|
|
|
|
}
|
|
|
|
|
],
|
|
|
|
|
'punctuation': /[\[\](){},;]|\.+|:+/
|
|
|
|
|
};
|
|
|
|
|
/**
|
|
|
|
|
* Original by Aaron Harun: http://aahacreative.com/2012/07/31/php-syntax-highlighting-prism/
|
|
|
|
|
* Modified by Miles Johnson: http://milesj.me
|
|
|
|
|