Updated Prism

Added Lua syntax highlighting
pull/346/head
Julien Desgats 9 years ago
parent 17b269d683
commit 07e4b57375

@ -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+lua+php+python+rust */
var _self = (typeof window !== 'undefined')
? window // if in browser
: (
@ -16,7 +16,7 @@ var _self = (typeof window !== 'undefined')
var Prism = (function(){
// Private helper vars
var lang = /\blang(?:uage)?-(?!\*)(\w+)\b/i;
var lang = /\blang(?:uage)?-(\w+)\b/i;
var _ = _self.Prism = {
util: {
@ -126,16 +126,19 @@ var _ = _self.Prism = {
},
// 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) {
if (o.hasOwnProperty(i)) {
callback.call(o, i, o[i], type || i);
if (_.util.type(o[i]) === 'Object') {
_.languages.DFS(o[i], callback);
if (_.util.type(o[i]) === 'Object' && !visited[o[i]]) {
visited[o[i]] = true;
_.languages.DFS(o[i], callback, null, visited);
}
else if (_.util.type(o[i]) === 'Array') {
_.languages.DFS(o[i], callback, i);
else if (_.util.type(o[i]) === 'Array' && !visited[o[i]]) {
visited[o[i]] = true;
_.languages.DFS(o[i], callback, i, visited);
}
}
}
@ -190,28 +193,28 @@ var _ = _self.Prism = {
_.hooks.run('before-highlight', env);
// if (async && _self.Worker) {
// var worker = new Worker(_.filename);
if (async && _self.Worker) {
var worker = new Worker(_.filename);
// worker.onmessage = function(evt) {
// env.highlightedCode = evt.data;
worker.onmessage = function(evt) {
env.highlightedCode = evt.data;
// _.hooks.run('before-insert', env);
_.hooks.run('before-insert', env);
// env.element.innerHTML = env.highlightedCode;
env.element.innerHTML = env.highlightedCode;
// callback && callback.call(env.element);
// _.hooks.run('after-highlight', env);
// _.hooks.run('complete', env);
// };
callback && callback.call(env.element);
_.hooks.run('after-highlight', env);
_.hooks.run('complete', env);
};
// worker.postMessage(JSON.stringify({
// language: env.language,
// code: env.code,
// immediateClose: true
// }));
// }
// else {
worker.postMessage(JSON.stringify({
language: env.language,
code: env.code,
immediateClose: true
}));
}
else {
env.highlightedCode = _.highlight(env.code, env.grammar, env.language);
_.hooks.run('before-insert', env);
@ -222,7 +225,7 @@ var _ = _self.Prism = {
_.hooks.run('after-highlight', env);
_.hooks.run('complete', env);
// }
}
},
highlight: function (text, grammar, language) {
@ -387,39 +390,37 @@ Token.stringify = function(o, language, parent) {
};
// if (!_self.document) {
// if (!_self.addEventListener) {
// // in Node.js
// return _self.Prism;
// }
// // In worker
// _self.addEventListener('message', function(evt) {
// var message = JSON.parse(evt.data),
// lang = message.language,
// code = message.code,
// immediateClose = message.immediateClose;
// _self.postMessage(_.highlight(code, _.languages[lang], lang));
// if (immediateClose) {
// _self.close();
// }
// }, false);
// return _self.Prism;
// }
if (!_self.document) {
if (!_self.addEventListener) {
// in Node.js
return _self.Prism;
}
// In worker
_self.addEventListener('message', function(evt) {
var message = JSON.parse(evt.data),
lang = message.language,
code = message.code,
immediateClose = message.immediateClose;
_self.postMessage(_.highlight(code, _.languages[lang], lang));
if (immediateClose) {
_self.close();
}
}, false);
// // Get current script and highlight
// var script = document.getElementsByTagName('script');
return _self.Prism;
}
// script = script[script.length - 1];
//Get current script and highlight
var script = document.currentScript || [].slice.call(document.getElementsByTagName("script")).pop();
// if (script) {
// _.filename = script.src;
if (script) {
_.filename = script.src;
// if (document.addEventListener && !script.hasAttribute('data-manual')) {
// document.addEventListener('DOMContentLoaded', _.highlightAll);
// }
// }
if (document.addEventListener && !script.hasAttribute('data-manual')) {
document.addEventListener('DOMContentLoaded', _.highlightAll);
}
}
return _self.Prism;
@ -931,6 +932,23 @@ Prism.languages.elixir.string.forEach(function(o) {
});
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

Loading…
Cancel
Save