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') var _self = (typeof window !== 'undefined')
? window // if in browser ? window // if in browser
: ( : (
@ -16,7 +16,7 @@ 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 _ = _self.Prism = { var _ = _self.Prism = {
util: { util: {
@ -82,19 +82,19 @@ var _ = _self.Prism = {
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) { if (arguments.length == 2) {
insert = arguments[1]; insert = arguments[1];
for (var newToken in insert) { for (var newToken in insert) {
if (insert.hasOwnProperty(newToken)) { if (insert.hasOwnProperty(newToken)) {
grammar[newToken] = insert[newToken]; grammar[newToken] = insert[newToken];
} }
} }
return grammar; return grammar;
} }
var ret = {}; var ret = {};
for (var token in grammar) { for (var token in grammar) {
@ -114,7 +114,7 @@ var _ = _self.Prism = {
ret[token] = grammar[token]; ret[token] = grammar[token];
} }
} }
// Update references in other language definitions // Update references in other language definitions
_.languages.DFS(_.languages, function(key, value) { _.languages.DFS(_.languages, function(key, value) {
if (value === root[inside] && key != inside) { if (value === root[inside] && key != inside) {
@ -126,23 +126,26 @@ 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[o[i]]) {
_.languages.DFS(o[i], callback); visited[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[o[i]]) {
_.languages.DFS(o[i], callback, i); visited[o[i]] = true;
_.languages.DFS(o[i], callback, i, visited);
} }
} }
} }
} }
}, },
plugins: {}, plugins: {},
highlightAll: function(async, callback) { highlightAll: function(async, callback) {
var elements = document.querySelectorAll('code[class*="language-"], [class*="language-"] code, code[class*="lang-"], [class*="lang-"] code'); var elements = document.querySelectorAll('code[class*="language-"], [class*="language-"] code, code[class*="lang-"], [class*="lang-"] code');
@ -190,28 +193,28 @@ var _ = _self.Prism = {
_.hooks.run('before-highlight', env); _.hooks.run('before-highlight', env);
// if (async && _self.Worker) { if (async && _self.Worker) {
// var worker = new Worker(_.filename); var worker = new Worker(_.filename);
// worker.onmessage = function(evt) { worker.onmessage = function(evt) {
// env.highlightedCode = evt.data; 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); callback && callback.call(env.element);
// _.hooks.run('after-highlight', env); _.hooks.run('after-highlight', env);
// _.hooks.run('complete', env); _.hooks.run('complete', env);
// }; };
// worker.postMessage(JSON.stringify({ worker.postMessage(JSON.stringify({
// language: env.language, language: env.language,
// code: env.code, code: env.code,
// immediateClose: true immediateClose: true
// })); }));
// } }
// else { else {
env.highlightedCode = _.highlight(env.code, env.grammar, env.language); env.highlightedCode = _.highlight(env.code, env.grammar, env.language);
_.hooks.run('before-insert', env); _.hooks.run('before-insert', env);
@ -222,7 +225,7 @@ var _ = _self.Prism = {
_.hooks.run('after-highlight', env); _.hooks.run('after-highlight', env);
_.hooks.run('complete', env); _.hooks.run('complete', env);
// } }
}, },
highlight: function (text, grammar, language) { highlight: function (text, grammar, language) {
@ -387,39 +390,37 @@ Token.stringify = function(o, language, parent) {
}; };
// if (!_self.document) { if (!_self.document) {
// if (!_self.addEventListener) { if (!_self.addEventListener) {
// // in Node.js // in Node.js
// return _self.Prism; 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,
// immediateClose = message.immediateClose; immediateClose = message.immediateClose;
// _self.postMessage(_.highlight(code, _.languages[lang], lang)); _self.postMessage(_.highlight(code, _.languages[lang], lang));
// if (immediateClose) { if (immediateClose) {
// _self.close(); _self.close();
// } }
// }, false); }, false);
// return _self.Prism;
// }
// // Get current script and highlight return _self.Prism;
// var script = document.getElementsByTagName('script'); }
// script = script[script.length - 1]; //Get current script and highlight
var script = document.currentScript || [].slice.call(document.getElementsByTagName("script")).pop();
// if (script) { if (script) {
// _.filename = script.src; _.filename = script.src;
// if (document.addEventListener && !script.hasAttribute('data-manual')) { if (document.addEventListener && !script.hasAttribute('data-manual')) {
// document.addEventListener('DOMContentLoaded', _.highlightAll); document.addEventListener('DOMContentLoaded', _.highlightAll);
// } }
// } }
return _self.Prism; return _self.Prism;
@ -510,7 +511,7 @@ if (Prism.languages.markup) {
alias: 'language-css' alias: 'language-css'
} }
}); });
Prism.languages.insertBefore('inside', 'attr-value', { Prism.languages.insertBefore('inside', 'attr-value', {
'style-attr': { 'style-attr': {
pattern: /\s*style=("|').*?\1/i, pattern: /\s*style=("|').*?\1/i,
@ -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/ * 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