Add Go syntax highlighting

Closes .
pull/343/merge
Thibaut Courouble 9 years ago
parent 073fb8f9bc
commit b3edb575f3

@ -1,4 +1,4 @@
/* http://prismjs.com/download.html?themes=prism&languages=markup+css+clike+javascript+c+cpp+coffeescript+ruby+elixir+php+python+rust */ /* http://prismjs.com/download.html?themes=prism&languages=markup+css+clike+javascript+c+cpp+coffeescript+ruby+elixir+go+php+python+rust */
var _self = (typeof window !== 'undefined') var _self = (typeof window !== 'undefined')
? window // if in browser ? window // if in browser
: ( : (
@ -16,7 +16,8 @@ var _self = (typeof window !== 'undefined')
var Prism = (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 uniqueId = 0;
var _ = _self.Prism = { var _ = _self.Prism = {
util: { util: {
@ -34,6 +35,13 @@ var _ = _self.Prism = {
return Object.prototype.toString.call(o).match(/\[object (\w+)\]/)[1]; return Object.prototype.toString.call(o).match(/\[object (\w+)\]/)[1];
}, },
objId: function (obj) {
if (!obj['__id']) {
Object.defineProperty(obj, '__id', { value: ++uniqueId });
}
return obj['__id'];
},
// Deep clone a language definition (e.g. to extend it) // Deep clone a language definition (e.g. to extend it)
clone: function (o) { clone: function (o) {
var type = _.util.type(o); var type = _.util.type(o);
@ -126,16 +134,19 @@ var _ = _self.Prism = {
}, },
// Traverse a language definition with Depth First Search // Traverse a language definition with Depth First Search
DFS: function(o, callback, type) { DFS: function(o, callback, type, visited) {
visited = visited || {};
for (var i in o) { for (var i in o) {
if (o.hasOwnProperty(i)) { if (o.hasOwnProperty(i)) {
callback.call(o, i, o[i], type || i); callback.call(o, i, o[i], type || i);
if (_.util.type(o[i]) === 'Object') { if (_.util.type(o[i]) === 'Object' && !visited[_.util.objId(o[i])]) {
_.languages.DFS(o[i], callback); visited[_.util.objId(o[i])] = true;
_.languages.DFS(o[i], callback, null, visited);
} }
else if (_.util.type(o[i]) === 'Array') { else if (_.util.type(o[i]) === 'Array' && !visited[_.util.objId(o[i])]) {
_.languages.DFS(o[i], callback, i); visited[_.util.objId(o[i])] = true;
_.languages.DFS(o[i], callback, i, visited);
} }
} }
} }
@ -408,10 +419,8 @@ Token.stringify = function(o, language, parent) {
// return _self.Prism; // return _self.Prism;
// } // }
// // Get current script and highlight // //Get current script and highlight
// var script = document.getElementsByTagName('script'); // var script = document.currentScript || [].slice.call(document.getElementsByTagName("script")).pop();
// script = script[script.length - 1];
// if (script) { // if (script) {
// _.filename = script.src; // _.filename = script.src;
@ -931,6 +940,16 @@ Prism.languages.elixir.string.forEach(function(o) {
}); });
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/,
'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/,
'boolean': /\b(_|iota|nil|true|false)\b/,
'operator': /[*\/%^!=]=?|\+[=+]?|-[=-]?|\|[=|]?|&(?:=|&|\^=?)?|>(?:>=?|=)?|<(?:<=?|=|-)?|:=|\.\.\./,
'number': /\b(-?(0x[a-f\d]+|(\d+\.?\d*|\.\d+)(e[-+]?\d+)?)i?)\b/i,
'string': /("|'|`)(\\?.|\r|\n)*?\1/
});
delete Prism.languages.go['class-name'];
/** /**
* Original by Aaron Harun: http://aahacreative.com/2012/07/31/php-syntax-highlighting-prism/ * Original by Aaron Harun: http://aahacreative.com/2012/07/31/php-syntax-highlighting-prism/
* Modified by Miles Johnson: http://milesj.me * Modified by Miles Johnson: http://milesj.me

Loading…
Cancel
Save