Update Prism.js

pull/142/head
Thibaut 10 years ago
parent ef4e59a0b0
commit 23a0c830ec

@ -1,16 +1,27 @@
/* http://prismjs.com/download.html?themes=prism&languages=markup+css+clike+javascript+php+coffeescript+c+cpp+python+ruby */
/** /**
* Prism: Lightweight, robust, elegant syntax highlighting * Prism: Lightweight, robust, elegant syntax highlighting
* MIT license http://www.opensource.org/licenses/mit-license.php/ * MIT license http://www.opensource.org/licenses/mit-license.php/
* @author Lea Verou http://lea.verou.me * @author Lea Verou http://lea.verou.me
*/ */
(function(){ var Prism = (function(){
// Private helper vars // Private helper vars
var lang = /\blang(?:uage)?-(?!\*)(\w+)\b/i; var lang = /\blang(?:uage)?-(?!\*)(\w+)\b/i;
var _ = self.Prism = { var _ = self.Prism = {
util: { util: {
encode: function (tokens) {
if (tokens instanceof Token) {
return new Token(tokens.type, _.util.encode(tokens.content), tokens.alias);
} else if (_.util.type(tokens) === 'Array') {
return tokens.map(_.util.encode);
} else {
return tokens.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/\u00a0/g, ' ');
}
},
type: function (o) { type: function (o) {
return Object.prototype.toString.call(o).match(/\[object (\w+)\]/)[1]; return Object.prototype.toString.call(o).match(/\[object (\w+)\]/)[1];
}, },
@ -50,10 +61,31 @@ var _ = self.Prism = {
return lang; return lang;
}, },
// Insert a token before another token in a language literal /**
* Insert a token before another token in a language literal
* As this needs to recreate the object (we cannot actually insert before keys in object literals),
* we cannot just provide an object, we need anobject and a key.
* @param inside The key (or language id) of the parent
* @param before The key to insert before. If not provided, the function appends instead.
* @param insert Object with the key/value pairs to insert
* @param root The object that contains `inside`. If equal to Prism.languages, it can be omitted.
*/
insertBefore: function (inside, before, insert, root) { insertBefore: function (inside, before, insert, root) {
root = root || _.languages; root = root || _.languages;
var grammar = root[inside]; var grammar = root[inside];
if (arguments.length == 2) {
insert = arguments[1];
for (var newToken in insert) {
if (insert.hasOwnProperty(newToken)) {
grammar[newToken] = insert[newToken];
}
}
return grammar;
}
var ret = {}; var ret = {};
for (var token in grammar) { for (var token in grammar) {
@ -74,17 +106,29 @@ var _ = self.Prism = {
} }
} }
// Update references in other language definitions
_.languages.DFS(_.languages, function(key, value) {
if (value === root[inside] && key != inside) {
this[key] = ret;
}
});
return root[inside] = ret; return root[inside] = ret;
}, },
// Traverse a language definition with Depth First Search // Traverse a language definition with Depth First Search
DFS: function(o, callback) { DFS: function(o, callback, type) {
for (var i in o) { for (var i in o) {
callback.call(o, i, o[i]); if (o.hasOwnProperty(i)) {
callback.call(o, i, o[i], type || i);
if (_.util.type(o) === 'Object') { if (_.util.type(o[i]) === 'Object') {
_.languages.DFS(o[i], callback); _.languages.DFS(o[i], callback);
} }
else if (_.util.type(o[i]) === 'Array') {
_.languages.DFS(o[i], callback, i);
}
}
} }
} }
}, },
@ -130,8 +174,6 @@ var _ = self.Prism = {
return; return;
} }
code = code.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/\u00a0/g, ' ');
var env = { var env = {
element: element, element: element,
language: language, language: language,
@ -174,7 +216,8 @@ var _ = self.Prism = {
}, },
highlight: function (text, grammar, language) { highlight: function (text, grammar, language) {
return Token.stringify(_.tokenize(text, grammar), language); var tokens = _.tokenize(text, grammar);
return Token.stringify(_.util.encode(tokens), language);
}, },
tokenize: function(text, grammar, language) { tokenize: function(text, grammar, language) {
@ -197,10 +240,15 @@ var _ = self.Prism = {
continue; continue;
} }
var pattern = grammar[token], var patterns = grammar[token];
patterns = (_.util.type(patterns) === "Array") ? patterns : [patterns];
for (var j = 0; j < patterns.length; ++j) {
var pattern = patterns[j],
inside = pattern.inside, inside = pattern.inside,
lookbehind = !!pattern.lookbehind, lookbehind = !!pattern.lookbehind,
lookbehindLength = 0; lookbehindLength = 0,
alias = pattern.alias;
pattern = pattern.pattern || pattern; pattern = pattern.pattern || pattern;
@ -239,7 +287,7 @@ var _ = self.Prism = {
args.push(before); args.push(before);
} }
var wrapped = new Token(token, inside? _.tokenize(match, inside) : match); var wrapped = new Token(token, inside? _.tokenize(match, inside) : match, alias);
args.push(wrapped); args.push(wrapped);
@ -251,6 +299,7 @@ var _ = self.Prism = {
} }
} }
} }
}
return strarr; return strarr;
}, },
@ -280,9 +329,10 @@ var _ = self.Prism = {
} }
}; };
var Token = _.Token = function(type, content) { var Token = _.Token = function(type, content, alias) {
this.type = type; this.type = type;
this.content = content; this.content = content;
this.alias = alias;
}; };
Token.stringify = function(o, language, parent) { Token.stringify = function(o, language, parent) {
@ -310,6 +360,11 @@ Token.stringify = function(o, language, parent) {
env.attributes['spellcheck'] = 'true'; env.attributes['spellcheck'] = 'true';
} }
if (o.alias) {
var aliases = _.util.type(o.alias) === 'Array' ? o.alias : [o.alias];
Array.prototype.push.apply(env.classes, aliases);
}
_.hooks.run('wrap', env); _.hooks.run('wrap', env);
var attributes = ''; var attributes = '';
@ -323,20 +378,24 @@ Token.stringify = function(o, language, parent) {
}; };
// if (!self.document) { // if (!self.document) {
// if (!self.addEventListener) {
// // in Node.js
// return self.Prism;
// }
// // In worker // // In worker
// self.addEventListener('message', function(evt) { // self.addEventListener('message', function(evt) {
// var message = JSON.parse(evt.data), // var message = JSON.parse(evt.data),
// lang = message.language, // lang = message.language,
// code = message.code; // code = message.code;
// self.postMessage(JSON.stringify(_.tokenize(code, _.languages[lang]))); // self.postMessage(JSON.stringify(_.util.encode(_.tokenize(code, _.languages[lang]))));
// self.close(); // self.close();
// }, false); // }, false);
// return; // return self.Prism;
// } // }
// // Get current script and highlight // Get current script and highlight
// var script = document.getElementsByTagName('script'); // var script = document.getElementsByTagName('script');
// script = script[script.length - 1]; // script = script[script.length - 1];
@ -349,19 +408,26 @@ Token.stringify = function(o, language, parent) {
// } // }
// } // }
})();; return self.Prism;
})();
// if (typeof module !== 'undefined' && module.exports) {
// module.exports = Prism;
// }
// ;
Prism.languages.markup = { Prism.languages.markup = {
'comment': /&lt;!--[\w\W]*?-->/g, 'comment': /<!--[\w\W]*?-->/g,
'prolog': /&lt;\?.+?\?>/, 'prolog': /<\?.+?\?>/,
'doctype': /&lt;!DOCTYPE.+?>/, 'doctype': /<!DOCTYPE.+?>/,
'cdata': /&lt;!\[CDATA\[[\w\W]*?]]>/i, 'cdata': /<!\[CDATA\[[\w\W]*?]]>/i,
'tag': { 'tag': {
pattern: /&lt;\/?[\w:-]+\s*(?:\s+[\w:-]+(?:=(?:("|')(\\?[\w\W])*?\1|[^\s'">=]+))?\s*)*\/?>/gi, pattern: /<\/?[\w:-]+\s*(?:\s+[\w:-]+(?:=(?:("|')(\\?[\w\W])*?\1|[^\s'">=]+))?\s*)*\/?>/gi,
inside: { inside: {
'tag': { 'tag': {
pattern: /^&lt;\/?[\w:-]+/i, pattern: /^<\/?[\w:-]+/i,
inside: { inside: {
'punctuation': /^&lt;\/?/, 'punctuation': /^<\/?/,
'namespace': /^[\w-]+?:/ 'namespace': /^[\w-]+?:/
} }
}, },
@ -381,7 +447,7 @@ Prism.languages.markup = {
} }
}, },
'entity': /&amp;#?[\da-z]{1,8};/gi 'entity': /\&#?[\da-z]{1,8};/gi
}; };
// Plugin to make entity title show the real entity, idea by Roman Komarov // Plugin to make entity title show the real entity, idea by Roman Komarov
@ -405,29 +471,54 @@ Prism.languages.css = {
'property': /(\b|\B)[\w-]+(?=\s*:)/ig, 'property': /(\b|\B)[\w-]+(?=\s*:)/ig,
'string': /("|')(\\?.)*?\1/g, 'string': /("|')(\\?.)*?\1/g,
'important': /\B!important\b/gi, 'important': /\B!important\b/gi,
'ignore': /&(lt|gt|amp);/gi, 'punctuation': /[\{\};:]/g,
'punctuation': /[\{\};:]/g 'function': /[-a-z0-9]+(?=\()/ig
}; };
if (Prism.languages.markup) { if (Prism.languages.markup) {
Prism.languages.insertBefore('markup', 'tag', { Prism.languages.insertBefore('markup', 'tag', {
'style': { 'style': {
pattern: /(&lt;|<)style[\w\W]*?(>|&gt;)[\w\W]*?(&lt;|<)\/style(>|&gt;)/ig, pattern: /<style[\w\W]*?>[\w\W]*?<\/style>/ig,
inside: { inside: {
'tag': { 'tag': {
pattern: /(&lt;|<)style[\w\W]*?(>|&gt;)|(&lt;|<)\/style(>|&gt;)/ig, pattern: /<style[\w\W]*?>|<\/style>/ig,
inside: Prism.languages.markup.tag.inside inside: Prism.languages.markup.tag.inside
}, },
rest: Prism.languages.css rest: Prism.languages.css
} },
alias: 'language-css'
} }
}); });
Prism.languages.insertBefore('inside', 'attr-value', {
'style-attr': {
pattern: /\s*style=("|').+?\1/ig,
inside: {
'attr-name': {
pattern: /^\s*style/ig,
inside: Prism.languages.markup.tag.inside
},
'punctuation': /^\s*=\s*['"]|['"]\s*$/,
'attr-value': {
pattern: /.+/gi,
inside: Prism.languages.css
}
},
alias: 'language-css'
}
}, Prism.languages.markup.tag);
}; };
Prism.languages.clike = { Prism.languages.clike = {
'comment': { 'comment': [
pattern: /(^|[^\\])(\/\*[\w\W]*?\*\/|(^|[^:])\/\/.*?(\r?\n|$))/g, {
pattern: /(^|[^\\])\/\*[\w\W]*?\*\//g,
lookbehind: true lookbehind: true
}, },
{
pattern: /(^|[^\\:])\/\/.*?(\r?\n|$)/g,
lookbehind: true
}
],
'string': /("|')(\\?.)*?\1/g, 'string': /("|')(\\?.)*?\1/g,
'class-name': { 'class-name': {
pattern: /((?:(?:class|interface|extends|implements|trait|instanceof|new)\s+)|(?:catch\s+\())[a-z0-9_\.\\]+/ig, pattern: /((?:(?:class|interface|extends|implements|trait|instanceof|new)\s+)|(?:catch\s+\())[a-z0-9_\.\\]+/ig,
@ -445,13 +536,13 @@ Prism.languages.clike = {
} }
}, },
'number': /\b-?(0x[\dA-Fa-f]+|\d*\.?\d+([Ee]-?\d+)?)\b/g, 'number': /\b-?(0x[\dA-Fa-f]+|\d*\.?\d+([Ee]-?\d+)?)\b/g,
'operator': /[-+]{1,2}|!|&lt;=?|>=?|={1,3}|(&amp;){1,2}|\|?\||\?|\*|\/|\~|\^|\%/g, 'operator': /[-+]{1,2}|!|<=?|>=?|={1,3}|&{1,2}|\|?\||\?|\*|\/|\~|\^|\%/g,
'ignore': /&(lt|gt|amp);/gi, 'ignore': /&(lt|gt|amp);/gi,
'punctuation': /[{}[\];(),.:]/g 'punctuation': /[{}[\];(),.:]/g
}; };
; ;
Prism.languages.javascript = Prism.languages.extend('clike', { Prism.languages.javascript = Prism.languages.extend('clike', {
'keyword': /\b(var|let|if|else|while|do|for|return|in|instanceof|function|get|set|new|with|typeof|try|throw|catch|finally|null|break|continue|this)\b/g, 'keyword': /\b(break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|false|finally|for|function|get|if|implements|import|in|instanceof|interface|let|new|null|package|private|protected|public|return|set|static|super|switch|this|throw|true|try|typeof|var|void|while|with|yield)\b/g,
'number': /\b-?(0x[\dA-Fa-f]+|\d*\.?\d+([Ee]-?\d+)?|NaN|-?Infinity)\b/g 'number': /\b-?(0x[\dA-Fa-f]+|\d*\.?\d+([Ee]-?\d+)?|NaN|-?Infinity)\b/g
}); });
@ -465,21 +556,124 @@ Prism.languages.insertBefore('javascript', 'keyword', {
if (Prism.languages.markup) { if (Prism.languages.markup) {
Prism.languages.insertBefore('markup', 'tag', { Prism.languages.insertBefore('markup', 'tag', {
'script': { 'script': {
pattern: /(&lt;|<)script[\w\W]*?(>|&gt;)[\w\W]*?(&lt;|<)\/script(>|&gt;)/ig, pattern: /<script[\w\W]*?>[\w\W]*?<\/script>/ig,
inside: { inside: {
'tag': { 'tag': {
pattern: /(&lt;|<)script[\w\W]*?(>|&gt;)|(&lt;|<)\/script(>|&gt;)/ig, pattern: /<script[\w\W]*?>|<\/script>/ig,
inside: Prism.languages.markup.tag.inside inside: Prism.languages.markup.tag.inside
}, },
rest: Prism.languages.javascript rest: Prism.languages.javascript
},
alias: 'language-javascript'
}
});
}
;
/**
* Original by Aaron Harun: http://aahacreative.com/2012/07/31/php-syntax-highlighting-prism/
* Modified by Miles Johnson: http://milesj.me
*
* Supports the following:
* - Extends clike syntax
* - Support for PHP 5.3+ (namespaces, traits, generators, etc)
* - Smarter constant and function matching
*
* Adds the following new token classes:
* constant, delimiter, variable, function, package
*/
Prism.languages.php = Prism.languages.extend('clike', {
'keyword': /\b(and|or|xor|array|as|break|case|cfunction|class|const|continue|declare|default|die|do|else|elseif|enddeclare|endfor|endforeach|endif|endswitch|endwhile|extends|for|foreach|function|include|include_once|global|if|new|return|static|switch|use|require|require_once|var|while|abstract|interface|public|implements|private|protected|parent|throw|null|echo|print|trait|namespace|final|yield|goto|instanceof|finally|try|catch)\b/ig,
'constant': /\b[A-Z0-9_]{2,}\b/g,
'comment': {
pattern: /(^|[^\\])(\/\*[\w\W]*?\*\/|(^|[^:])(\/\/|#).*?(\r?\n|$))/g,
lookbehind: true
}
});
Prism.languages.insertBefore('php', 'keyword', {
'delimiter': /(\?>|<\?php|<\?)/ig,
'variable': /(\$\w+)\b/ig,
'package': {
pattern: /(\\|namespace\s+|use\s+)[\w\\]+/g,
lookbehind: true,
inside: {
punctuation: /\\/
}
}
});
// Must be defined after the function pattern
Prism.languages.insertBefore('php', 'operator', {
'property': {
pattern: /(->)[\w]+/g,
lookbehind: true
}
});
// Add HTML support of the markup language exists
if (Prism.languages.markup) {
// Tokenize all inline PHP blocks that are wrapped in <?php ?>
// This allows for easy PHP + markup highlighting
Prism.hooks.add('before-highlight', function(env) {
if (env.language !== 'php') {
return;
}
env.tokenStack = [];
env.backupCode = env.code;
env.code = env.code.replace(/(?:<\?php|<\?)[\w\W]*?(?:\?>)/ig, function(match) {
env.tokenStack.push(match);
return '{{{PHP' + env.tokenStack.length + '}}}';
});
});
// Restore env.code for other plugins (e.g. line-numbers)
Prism.hooks.add('before-insert', function(env) {
if (env.language === 'php') {
env.code = env.backupCode;
delete env.backupCode;
}
});
// Re-insert the tokens after highlighting
Prism.hooks.add('after-highlight', function(env) {
if (env.language !== 'php') {
return;
} }
for (var i = 0, t; t = env.tokenStack[i]; i++) {
env.highlightedCode = env.highlightedCode.replace('{{{PHP' + (i + 1) + '}}}', Prism.highlight(t, env.grammar, 'php'));
}
env.element.innerHTML = env.highlightedCode;
});
// Wrap tokens in classes that are missing them
Prism.hooks.add('wrap', function(env) {
if (env.language === 'php' && env.type === 'markup') {
env.content = env.content.replace(/(\{\{\{PHP[0-9]+\}\}\})/g, "<span class=\"token php\">$1</span>");
} }
}); });
// Add the rules before all others
Prism.languages.insertBefore('php', 'comment', {
'markup': {
pattern: /<[^?]\/?(.*?)>/g,
inside: Prism.languages.markup
},
'php': /\{\{\{PHP[0-9]+\}\}\}/g
});
} }
; ;
Prism.languages.coffeescript = Prism.languages.extend('javascript', { Prism.languages.coffeescript = Prism.languages.extend('javascript', {
'block-comment': /([#]{3}\s*\r?\n(.*\s*\r*\n*)\s*?\r?\n[#]{3})/g, 'comment': [
'comment': /(\s|^)([#]{1}[^#^\r^\n]{2,}?(\r?\n|$))/g, /([#]{3}\s*\r?\n(.*\s*\r*\n*)\s*?\r?\n[#]{3})/g,
/(\s|^)([#]{1}[^#^\r^\n]{2,}?(\r?\n|$))/g
],
'keyword': /\b(this|window|delete|class|extends|namespace|extend|ar|let|if|else|while|do|for|each|of|return|in|instanceof|new|with|typeof|try|catch|finally|null|undefined|break|continue)\b/g 'keyword': /\b(this|window|delete|class|extends|namespace|extend|ar|let|if|else|while|do|for|each|of|return|in|instanceof|new|with|typeof|try|catch|finally|null|undefined|break|continue)\b/g
}); });
@ -495,31 +689,49 @@ Prism.languages.insertBefore('coffeescript', 'keyword', {
}); });
; ;
Prism.languages.c = Prism.languages.extend('clike', { Prism.languages.c = Prism.languages.extend('clike', {
// allow for c multiline strings
'string': /("|')([^\n\\\1]|\\.|\\\r*\n)*?\1/g,
'keyword': /\b(asm|typeof|inline|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|int|long|register|return|short|signed|sizeof|static|struct|switch|typedef|union|unsigned|void|volatile|while)\b/g, 'keyword': /\b(asm|typeof|inline|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|int|long|register|return|short|signed|sizeof|static|struct|switch|typedef|union|unsigned|void|volatile|while)\b/g,
'operator': /[-+]{1,2}|!=?|&lt;{1,2}=?|&gt;{1,2}=?|\-&gt;|={1,2}|\^|~|%|(&amp;){1,2}|\|?\||\?|\*|\//g 'operator': /[-+]{1,2}|!=?|<{1,2}=?|>{1,2}=?|\->|={1,2}|\^|~|%|&{1,2}|\|?\||\?|\*|\//g
}); });
Prism.languages.insertBefore('c', 'keyword', { Prism.languages.insertBefore('c', 'string', {
// property class reused for macro statements // property class reused for macro statements
'property': { 'property': {
pattern:/#[a-zA-Z]+\ .*/g, // allow for multiline macro definitions
// spaces after the # character compile fine with gcc
pattern: /((^|\n)\s*)#\s*[a-z]+([^\n\\]|\\.|\\\r*\n)*/gi,
lookbehind: true,
inside: { inside: {
property: /&lt;[a-zA-Z.]+>/g // highlight the path of the include statement as a string
'string': {
pattern: /(#\s*include\s*)(<.+?>|("|')(\\?.)+?\3)/g,
lookbehind: true,
}
} }
} }
}); });
;
delete Prism.languages.c['class-name'];
delete Prism.languages.c['boolean'];;
Prism.languages.cpp = Prism.languages.extend('c', { Prism.languages.cpp = Prism.languages.extend('c', {
'keyword': /\b(alignas|alignof|asm|auto|bool|break|case|catch|char|char16_t|char32_t|class|compl|const|constexpr|const_cast|continue|decltype|default|delete|delete\[\]|do|double|dynamic_cast|else|enum|explicit|export|extern|float|for|friend|goto|if|inline|int|long|mutable|namespace|new|new\[\]|noexcept|nullptr|operator|private|protected|public|register|reinterpret_cast|return|short|signed|sizeof|static|static_assert|static_cast|struct|switch|template|this|thread_local|throw|try|typedef|typeid|typename|union|unsigned|using|virtual|void|volatile|wchar_t|while)\b/g, 'keyword': /\b(alignas|alignof|asm|auto|bool|break|case|catch|char|char16_t|char32_t|class|compl|const|constexpr|const_cast|continue|decltype|default|delete|delete\[\]|do|double|dynamic_cast|else|enum|explicit|export|extern|float|for|friend|goto|if|inline|int|long|mutable|namespace|new|new\[\]|noexcept|nullptr|operator|private|protected|public|register|reinterpret_cast|return|short|signed|sizeof|static|static_assert|static_cast|struct|switch|template|this|thread_local|throw|try|typedef|typeid|typename|union|unsigned|using|virtual|void|volatile|wchar_t|while)\b/g,
'operator': /[-+]{1,2}|!=?|&lt;{1,2}=?|&gt;{1,2}=?|\-&gt;|:{1,2}|={1,2}|\^|~|%|(&amp;){1,2}|\|?\||\?|\*|\/|\b(and|and_eq|bitand|bitor|not|not_eq|or|or_eq|xor|xor_eq)\b/g 'boolean': /\b(true|false)\b/g,
'operator': /[-+]{1,2}|!=?|<{1,2}=?|>{1,2}=?|\->|:{1,2}|={1,2}|\^|~|%|&{1,2}|\|?\||\?|\*|\/|\b(and|and_eq|bitand|bitor|not|not_eq|or|or_eq|xor|xor_eq)\b/g
}); });
;
Prism.languages.insertBefore('cpp', 'keyword', {
'class-name': {
pattern: /(class\s+)[a-z0-9_]+/ig,
lookbehind: true,
},
});;
Prism.languages.python= { Prism.languages.python= {
'comment': { 'comment': {
pattern: /(^|[^\\])#.*?(\r?\n|$)/g, pattern: /(^|[^\\])#.*?(\r?\n|$)/g,
lookbehind: true lookbehind: true
}, },
'string' : /("|')(\\?.)*?\1/g, 'string': /"""[\s\S]+?"""|("|')(\\?.)*?\1/g,
'keyword' : /\b(as|assert|break|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|pass|print|raise|return|try|while|with|yield)\b/g, 'keyword' : /\b(as|assert|break|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|pass|print|raise|return|try|while|with|yield)\b/g,
'boolean' : /\b(True|False)\b/g, 'boolean' : /\b(True|False)\b/g,
'number' : /\b-?(0x)?\d*\.?[\da-f]+\b/g, 'number' : /\b-?(0x)?\d*\.?[\da-f]+\b/g,
@ -551,13 +763,3 @@ Prism.languages.insertBefore('ruby', 'keyword', {
'symbol': /:\b[a-zA-Z_][a-zA-Z_0-9]*[?!]?\b/g 'symbol': /:\b[a-zA-Z_][a-zA-Z_0-9]*[?!]?\b/g
}); });
; ;
Prism.languages.go = Prism.languages.extend('clike', {
'keyword': /\b(break|case|chan|const|continue|default|defer|else|fallthrough|for|func|go(to)?|if|import|interface|map|package|range|return|select|struct|switch|type|var)\b/g,
'builtin': /\b(bool|byte|complex(64|128)|error|float(32|64)|rune|string|u?int(8|16|32|64|)|uintptr|append|cap|close|complex|copy|delete|imag|len|make|new|panic|print(ln)?|real|recover)\b/g,
'boolean': /\b(_|iota|nil|true|false)\b/g,
'operator': /([(){}\[\]]|[*\/%^!]=?|\+[=+]?|-[>=-]?|\|[=|]?|>[=>]?|&lt;(&lt;|[=-])?|==?|&amp;(&amp;|=|^=?)?|\.(\.\.)?|[,;]|:=?)/g,
'number': /\b(-?(0x[a-f\d]+|(\d+\.?\d*|\.\d+)(e[-+]?\d+)?)i?)\b/ig,
'string': /("|'|`)(\\?.|\r|\n)*?\1/g
});
delete Prism.languages.go['class-name'];
;

@ -13,13 +13,19 @@
.token.property, .token.property,
.token.tag, .token.tag,
.token.boolean, .token.boolean,
.token.number { .token.number,
.token.constant,
.token.symbol,
.token.deleted {
color: #905; color: #905;
} }
.token.selector, .token.selector,
.token.attr-name, .token.attr-name,
.token.string { .token.string,
.token.char,
.token.builtin,
.token.inserted {
color: #5e8e01; color: #5e8e01;
} }
@ -37,15 +43,16 @@
color: #0070a3; color: #0070a3;
} }
.token.function {
color: #dd4a68;
}
.token.regex, .token.regex,
.token.important { .token.important,
.token.variable {
color: #e90; color: #e90;
} }
.token.important { .token.important {
font-weight: bold; font-weight: bold;
} }
.token.entity {
cursor: help;
}

Loading…
Cancel
Save