This is an automated email from the git hooks/post-receive script.

gregoa pushed a commit to branch master
in repository libmojomojo-perl.

commit bc54db8c67aaec2f3c28b586e4a7a0b91e969861
Author: gregor herrmann <[email protected]>
Date:   Sat Jan 13 22:31:15 2018 +0100

    Handle new third-party Javascript files.
---
 debian/copyright                          |   5 +
 debian/libmojomojo-perl.lintian-overrides |   1 -
 debian/missing-sources/prism.js           | 884 ++++++++++++++++++++++++++++++
 debian/source.lintian-overrides           |   6 +
 4 files changed, 895 insertions(+), 1 deletion(-)

diff --git a/debian/copyright b/debian/copyright
index fdc9ecd..f6469cf 100644
--- a/debian/copyright
+++ b/debian/copyright
@@ -49,6 +49,11 @@ Files: root/static/js/jquery.editinplace.js
 Copyright: 2009, Dave Hauenstein <[email protected]>
 License: BSD-3-clause
 
+Files: root/static/js/prism.js root/static/css/prism.css
+Copyright: 2012, Lea Verou
+License: MIT
+Comment: Information taken from 
https://github.com/PrismJS/prism/blob/gh-pages/LICENSE
+
 Files: root/static/js/swfupload.js root/static/js/swfupload.queue.js
 Copyright: 2007-2008, Jake Roberts
  2006-2007, Lars Huring
diff --git a/debian/libmojomojo-perl.lintian-overrides 
b/debian/libmojomojo-perl.lintian-overrides
index 958cdd8..9e330f5 100644
--- a/debian/libmojomojo-perl.lintian-overrides
+++ b/debian/libmojomojo-perl.lintian-overrides
@@ -2,7 +2,6 @@
 # ever be implemented in a language other than Perl. Changing these
 # names would require changing them in various online tutorials, so
 # the potential impact of renaming is significant.
-
 libmojomojo-perl: script-with-language-extension usr/bin/mojomojo_cgi.pl
 libmojomojo-perl: script-with-language-extension usr/bin/mojomojo_create.pl
 libmojomojo-perl: script-with-language-extension usr/bin/mojomojo_fastcgi.pl
diff --git a/debian/missing-sources/prism.js b/debian/missing-sources/prism.js
new file mode 100644
index 0000000..a1d911a
--- /dev/null
+++ b/debian/missing-sources/prism.js
@@ -0,0 +1,884 @@
+/* PrismJS 1.9.0
+http://prismjs.com/download.html?themes=prism&languages=clike+javascript+c+cpp+nginx+perl
 */
+var _self = (typeof window !== 'undefined')
+       ? window   // if in browser
+       : (
+               (typeof WorkerGlobalScope !== 'undefined' && self instanceof 
WorkerGlobalScope)
+               ? self // if in worker
+               : {}   // if in node js
+       );
+
+/**
+ * Prism: Lightweight, robust, elegant syntax highlighting
+ * MIT license http://www.opensource.org/licenses/mit-license.php/
+ * @author Lea Verou http://lea.verou.me
+ */
+
+var Prism = (function(){
+
+// Private helper vars
+var lang = /\blang(?:uage)?-(\w+)\b/i;
+var uniqueId = 0;
+
+var _ = _self.Prism = {
+       manual: _self.Prism && _self.Prism.manual,
+       disableWorkerMessageHandler: _self.Prism && 
_self.Prism.disableWorkerMessageHandler,
+       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) {
+                       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)
+               clone: function (o) {
+                       var type = _.util.type(o);
+
+                       switch (type) {
+                               case 'Object':
+                                       var clone = {};
+
+                                       for (var key in o) {
+                                               if (o.hasOwnProperty(key)) {
+                                                       clone[key] = 
_.util.clone(o[key]);
+                                               }
+                                       }
+
+                                       return clone;
+
+                               case 'Array':
+                                       return o.map(function(v) { return 
_.util.clone(v); });
+                       }
+
+                       return o;
+               }
+       },
+
+       languages: {
+               extend: function (id, redef) {
+                       var lang = _.util.clone(_.languages[id]);
+
+                       for (var key in redef) {
+                               lang[key] = redef[key];
+                       }
+
+                       return lang;
+               },
+
+               /**
+                * 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) {
+                       root = root || _.languages;
+                       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 = {};
+
+                       for (var token in grammar) {
+
+                               if (grammar.hasOwnProperty(token)) {
+
+                                       if (token == before) {
+
+                                               for (var newToken in insert) {
+
+                                                       if 
(insert.hasOwnProperty(newToken)) {
+                                                               ret[newToken] = 
insert[newToken];
+                                                       }
+                                               }
+                                       }
+
+                                       ret[token] = grammar[token];
+                               }
+                       }
+
+                       // 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;
+               },
+
+               // Traverse a language definition with Depth First Search
+               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' && 
!visited[_.util.objId(o[i])]) {
+                                               visited[_.util.objId(o[i])] = 
true;
+                                               _.languages.DFS(o[i], callback, 
null, visited);
+                                       }
+                                       else if (_.util.type(o[i]) === 'Array' 
&& !visited[_.util.objId(o[i])]) {
+                                               visited[_.util.objId(o[i])] = 
true;
+                                               _.languages.DFS(o[i], callback, 
i, visited);
+                                       }
+                               }
+                       }
+               }
+       },
+       plugins: {},
+
+       highlightAll: function(async, callback) {
+               _.highlightAllUnder(document, async, callback);
+       },
+
+       highlightAllUnder: function(container, async, callback) {
+               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 || 
container.querySelectorAll(env.selector);
+
+               for (var i=0, element; element = elements[i++];) {
+                       _.highlightElement(element, async === true, 
env.callback);
+               }
+       },
+
+       highlightElement: function(element, async, callback) {
+               // Find language
+               var language, grammar, parent = element;
+
+               while (parent && !lang.test(parent.className)) {
+                       parent = parent.parentNode;
+               }
+
+               if (parent) {
+                       language = (parent.className.match(lang) || 
[,''])[1].toLowerCase();
+                       grammar = _.languages[language];
+               }
+
+               // Set language on the element, if not present
+               element.className = element.className.replace(lang, 
'').replace(/\s+/g, ' ') + ' language-' + language;
+
+               if (element.parentNode) {
+                       // Set language on the parent, for styling
+                       parent = element.parentNode;
+
+                       if (/pre/i.test(parent.nodeName)) {
+                               parent.className = 
parent.className.replace(lang, '').replace(/\s+/g, ' ') + ' language-' + 
language;
+                       }
+               }
+
+               var code = element.textContent;
+
+               var env = {
+                       element: element,
+                       language: language,
+                       grammar: grammar,
+                       code: code
+               };
+
+               _.hooks.run('before-sanity-check', env);
+
+               if (!env.code || !env.grammar) {
+                       if (env.code) {
+                               _.hooks.run('before-highlight', env);
+                               env.element.textContent = env.code;
+                               _.hooks.run('after-highlight', env);
+                       }
+                       _.hooks.run('complete', env);
+                       return;
+               }
+
+               _.hooks.run('before-highlight', env);
+
+               if (async && _self.Worker) {
+                       var worker = new Worker(_.filename);
+
+                       worker.onmessage = function(evt) {
+                               env.highlightedCode = evt.data;
+
+                               _.hooks.run('before-insert', env);
+
+                               env.element.innerHTML = env.highlightedCode;
+
+                               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 {
+                       env.highlightedCode = _.highlight(env.code, 
env.grammar, env.language);
+
+                       _.hooks.run('before-insert', env);
+
+                       env.element.innerHTML = env.highlightedCode;
+
+                       callback && callback.call(element);
+
+                       _.hooks.run('after-highlight', env);
+                       _.hooks.run('complete', env);
+               }
+       },
+
+       highlight: function (text, grammar, language) {
+               var tokens = _.tokenize(text, grammar);
+               return Token.stringify(_.util.encode(tokens), language);
+       },
+
+       matchGrammar: function (text, strarr, grammar, index, startPos, 
oneshot, target) {
+               var Token = _.Token;
+
+               for (var token in grammar) {
+                       if(!grammar.hasOwnProperty(token) || !grammar[token]) {
+                               continue;
+                       }
+
+                       if (token == target) {
+                               return;
+                       }
+
+                       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,
+                                       lookbehind = !!pattern.lookbehind,
+                                       greedy = !!pattern.greedy,
+                                       lookbehindLength = 0,
+                                       alias = pattern.alias;
+
+                               if (greedy && !pattern.pattern.global) {
+                                       // Without the global flag, lastIndex 
won't work
+                                       var flags = 
pattern.pattern.toString().match(/[imuy]*$/)[0];
+                                       pattern.pattern = 
RegExp(pattern.pattern.source, flags + "g");
+                               }
+
+                               pattern = pattern.pattern || pattern;
+
+                               // Don’t cache length as it changes during the 
loop
+                               for (var i = index, pos = startPos; i < 
strarr.length; pos += strarr[i].length, ++i) {
+
+                                       var str = strarr[i];
+
+                                       if (strarr.length > text.length) {
+                                               // Something went terribly 
wrong, ABORT, ABORT!
+                                               return;
+                                       }
+
+                                       if (str instanceof Token) {
+                                               continue;
+                                       }
+
+                                       pattern.lastIndex = 0;
+
+                                       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) {
+                                               pattern.lastIndex = pos;
+                                               match = pattern.exec(text);
+                                               if (!match) {
+                                                       break;
+                                               }
+
+                                               var from = match.index + 
(lookbehind ? match[1].length : 0),
+                                                   to = match.index + 
match[0].length,
+                                                   k = i,
+                                                   p = pos;
+
+                                               for (var len = strarr.length; k 
< len && (p < to || (!strarr[k].type && !strarr[k - 1].greedy)); ++k) {
+                                                       p += strarr[k].length;
+                                                       // Move the index i to 
the element in strarr that is closest to from
+                                                       if (from >= p) {
+                                                               ++i;
+                                                               pos = p;
+                                                       }
+                                               }
+
+                                               /*
+                                                * If strarr[i] is a Token, 
then the match starts inside another Token, which is invalid
+                                                * If strarr[k - 1] is greedy 
we are in conflict with another greedy pattern
+                                                */
+                                               if (strarr[i] instanceof Token 
|| strarr[k - 1].greedy) {
+                                                       continue;
+                                               }
+
+                                               // Number of tokens to delete 
and replace with the new match
+                                               delNum = k - i;
+                                               str = text.slice(pos, p);
+                                               match.index -= pos;
+                                       }
+
+                                       if (!match) {
+                                               if (oneshot) {
+                                                       break;
+                                               }
+
+                                               continue;
+                                       }
+
+                                       if(lookbehind) {
+                                               lookbehindLength = 
match[1].length;
+                                       }
+
+                                       var from = match.index + 
lookbehindLength,
+                                           match = 
match[0].slice(lookbehindLength),
+                                           to = from + match.length,
+                                           before = str.slice(0, from),
+                                           after = str.slice(to);
+
+                                       var args = [i, delNum];
+
+                                       if (before) {
+                                               ++i;
+                                               pos += before.length;
+                                               args.push(before);
+                                       }
+
+                                       var wrapped = new Token(token, inside? 
_.tokenize(match, inside) : match, alias, match, greedy);
+
+                                       args.push(wrapped);
+
+                                       if (after) {
+                                               args.push(after);
+                                       }
+
+                                       Array.prototype.splice.apply(strarr, 
args);
+
+                                       if (delNum != 1)
+                                               _.matchGrammar(text, strarr, 
grammar, i, pos, true, token);
+
+                                       if (oneshot)
+                                               break;
+                               }
+                       }
+               }
+       },
+
+       tokenize: function(text, grammar, language) {
+               var strarr = [text];
+
+               var rest = grammar.rest;
+
+               if (rest) {
+                       for (var token in rest) {
+                               grammar[token] = rest[token];
+                       }
+
+                       delete grammar.rest;
+               }
+
+               _.matchGrammar(text, strarr, grammar, 0, 0, false);
+
+               return strarr;
+       },
+
+       hooks: {
+               all: {},
+
+               add: function (name, callback) {
+                       var hooks = _.hooks.all;
+
+                       hooks[name] = hooks[name] || [];
+
+                       hooks[name].push(callback);
+               },
+
+               run: function (name, env) {
+                       var callbacks = _.hooks.all[name];
+
+                       if (!callbacks || !callbacks.length) {
+                               return;
+                       }
+
+                       for (var i=0, callback; callback = callbacks[i++];) {
+                               callback(env);
+                       }
+               }
+       }
+};
+
+var Token = _.Token = function(type, content, alias, matchedStr, greedy) {
+       this.type = type;
+       this.content = content;
+       this.alias = alias;
+       // Copy of the full string this token was created from
+       this.length = (matchedStr || "").length|0;
+       this.greedy = !!greedy;
+};
+
+Token.stringify = function(o, language, parent) {
+       if (typeof o == 'string') {
+               return o;
+       }
+
+       if (_.util.type(o) === 'Array') {
+               return o.map(function(element) {
+                       return Token.stringify(element, language, o);
+               }).join('');
+       }
+
+       var env = {
+               type: o.type,
+               content: Token.stringify(o.content, language, parent),
+               tag: 'span',
+               classes: ['token', o.type],
+               attributes: {},
+               language: language,
+               parent: parent
+       };
+
+       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);
+
+       var attributes = Object.keys(env.attributes).map(function(name) {
+               return name + '="' + (env.attributes[name] || '').replace(/"/g, 
'&quot;') + '"';
+       }).join(' ');
+
+       return '<' + env.tag + ' class="' + env.classes.join(' ') + '"' + 
(attributes ? ' ' + attributes : '') + '>' + env.content + '</' + env.tag + '>';
+
+};
+
+if (!_self.document) {
+       if (!_self.addEventListener) {
+               // in Node.js
+               return _self.Prism;
+       }
+
+       if (!_.disableWorkerMessageHandler) {
+               // 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;
+}
+
+//Get current script and highlight
+var script = document.currentScript || 
[].slice.call(document.getElementsByTagName("script")).pop();
+
+if (script) {
+       _.filename = script.src;
+
+       if (!_.manual && !script.hasAttribute('data-manual')) {
+               if(document.readyState !== "loading") {
+                       if (window.requestAnimationFrame) {
+                               window.requestAnimationFrame(_.highlightAll);
+                       } else {
+                               window.setTimeout(_.highlightAll, 16);
+                       }
+               }
+               else {
+                       document.addEventListener('DOMContentLoaded', 
_.highlightAll);
+               }
+       }
+}
+
+return _self.Prism;
+
+})();
+
+if (typeof module !== 'undefined' && module.exports) {
+       module.exports = Prism;
+}
+
+// hack for components to work correctly in node.js
+if (typeof global !== 'undefined') {
+       global.Prism = Prism;
+}
+;
+Prism.languages.clike = {
+       'comment': [
+               {
+                       pattern: /(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,
+                       lookbehind: true
+               },
+               {
+                       pattern: /(^|[^\\:])\/\/.*/,
+                       lookbehind: true
+               }
+       ],
+       '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+\())[\w.\\]+/i,
+               lookbehind: true,
+               inside: {
+                       punctuation: /[.\\]/
+               }
+       },
+       'keyword': 
/\b(?:if|else|while|do|for|return|in|instanceof|function|new|try|throw|catch|finally|null|break|continue)\b/,
+       'boolean': /\b(?:true|false)\b/,
+       'function': /[a-z0-9_]+(?=\()/i,
+       'number': /\b-?(?:0x[\da-f]+|\d*\.?\d+(?:e[+-]?\d+)?)\b/i,
+       'operator': /--?|\+\+?|!=?=?|<=?|>=?|==?=?|&&?|\|\|?|\?|\*|\/|~|\^|%/,
+       'punctuation': /[{}[\];(),.:]/
+};
+
+Prism.languages.javascript = Prism.languages.extend('clike', {
+       'keyword': 
/\b(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|var|void|while|with|yield)\b/,
+       'number': 
/\b-?(?:0[xX][\dA-Fa-f]+|0[bB][01]+|0[oO][0-7]+|\d*\.?\d+(?:[Ee][+-]?\d+)?|NaN|Infinity)\b/,
+       // Allow for all non-ASCII characters (See 
http://stackoverflow.com/a/2008444)
+       'function': /[_$a-z\xA0-\uFFFF][$\w\xA0-\uFFFF]*(?=\s*\()/i,
+       'operator': 
/-[-=]?|\+[+=]?|!=?=?|<<?=?|>>?>?=?|=(?:==?|>)?|&[&=]?|\|[|=]?|\*\*?=?|\/=?|~|\^=?|%=?|\?|\.{3}/
+});
+
+Prism.languages.insertBefore('javascript', 'keyword', {
+       'regex': {
+               pattern: 
/(^|[^/])\/(?!\/)(\[[^\]\r\n]+]|\\.|[^/\\\[\r\n])+\/[gimyu]{0,5}(?=\s*($|[\r\n,.;})]))/,
+               lookbehind: true,
+               greedy: true
+       },
+       // This must be declared before keyword because we use "function" 
inside the look-forward
+       'function-variable': {
+               pattern: 
/[_$a-z\xA0-\uFFFF][$\w\xA0-\uFFFF]*(?=\s*=\s*(?:function\b|(?:\([^()]*\)|[_$a-z\xA0-\uFFFF][$\w\xA0-\uFFFF]*)\s*=>))/i,
+               alias: 'function'
+       }
+});
+
+Prism.languages.insertBefore('javascript', 'string', {
+       'template-string': {
+               pattern: /`(?:\\[\s\S]|[^\\`])*`/,
+               greedy: true,
+               inside: {
+                       'interpolation': {
+                               pattern: /\$\{[^}]+\}/,
+                               inside: {
+                                       'interpolation-punctuation': {
+                                               pattern: /^\$\{|\}$/,
+                                               alias: 'punctuation'
+                                       },
+                                       rest: Prism.languages.javascript
+                               }
+                       },
+                       'string': /[\s\S]+/
+               }
+       }
+});
+
+if (Prism.languages.markup) {
+       Prism.languages.insertBefore('markup', 'tag', {
+               'script': {
+                       pattern: /(<script[\s\S]*?>)[\s\S]*?(?=<\/script>)/i,
+                       lookbehind: true,
+                       inside: Prism.languages.javascript,
+                       alias: 'language-javascript',
+                       greedy: true
+               }
+       });
+}
+
+Prism.languages.js = Prism.languages.javascript;
+
+Prism.languages.c = Prism.languages.extend('clike', {
+       'keyword': 
/\b(?:_Alignas|_Alignof|_Atomic|_Bool|_Complex|_Generic|_Imaginary|_Noreturn|_Static_assert|_Thread_local|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/,
+       'operator': /-[>-]?|\+\+?|!=?|<<?=?|>>?=?|==?|&&?|\|\|?|[~^%?*\/]/,
+       'number': /\b-?(?:0x[\da-f]+|\d*\.?\d+(?:e[+-]?\d+)?)[ful]*\b/i
+});
+
+Prism.languages.insertBefore('c', 'string', {
+       'macro': {
+               // allow for multiline macro definitions
+               // spaces after the # character compile fine with gcc
+               pattern: /(^\s*)#\s*[a-z]+(?:[^\r\n\\]|\\(?:\r\n|[\s\S]))*/im,
+               lookbehind: true,
+               alias: 'property',
+               inside: {
+                       // highlight the path of the include statement as a 
string
+                       'string': {
+                               pattern: 
/(#\s*include\s*)(?:<.+?>|("|')(?:\\?.)+?\2)/,
+                               lookbehind: true
+                       },
+                       // highlight macro directives as keywords
+                       'directive': {
+                               pattern: 
/(#\s*)\b(?:define|defined|elif|else|endif|error|ifdef|ifndef|if|import|include|line|pragma|undef|using)\b/,
+                               lookbehind: true,
+                               alias: 'keyword'
+                       }
+               }
+       },
+       // highlight predefined macros as constants
+       'constant': 
/\b(?:__FILE__|__LINE__|__DATE__|__TIME__|__TIMESTAMP__|__func__|EOF|NULL|SEEK_CUR|SEEK_END|SEEK_SET|stdin|stdout|stderr)\b/
+});
+
+delete Prism.languages.c['class-name'];
+delete Prism.languages.c['boolean'];
+
+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|do|double|dynamic_cast|else|enum|explicit|export|extern|float|for|friend|goto|if|inline|int|long|mutable|namespace|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|u
 [...]
+       'boolean': /\b(?:true|false)\b/,
+       'operator': 
/--?|\+\+?|!=?|<{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/
+});
+
+Prism.languages.insertBefore('cpp', 'keyword', {
+       'class-name': {
+               pattern: /(class\s+)\w+/i,
+               lookbehind: true
+       }
+});
+
+Prism.languages.insertBefore('cpp', 'string', {
+       'raw-string': {
+               pattern: /R"([^()\\ ]{0,16})\([\s\S]*?\)\1"/,
+               alias: 'string',
+               greedy: true
+       }
+});
+Prism.languages.nginx = Prism.languages.extend('clike', {
+        'comment': {
+                pattern: /(^|[^"{\\])#.*/,
+                lookbehind: true
+        },
+        'keyword': 
/\b(?:CONTENT_|DOCUMENT_|GATEWAY_|HTTP_|HTTPS|if_not_empty|PATH_|QUERY_|REDIRECT_|REMOTE_|REQUEST_|SCGI|SCRIPT_|SERVER_|http|events|accept_mutex|accept_mutex_delay|access_log|add_after_body|add_before_body|add_header|addition_types|aio|alias|allow|ancient_browser|ancient_browser_value|auth|auth_basic|auth_basic_user_file|auth_http|auth_http_header|auth_http_timeout|autoindex|autoindex_exact_size|autoindex_localtime|break|charset|charset_map|charset_types|chunked_transf
 [...]
+});
+
+Prism.languages.insertBefore('nginx', 'keyword', {
+        'variable': /\$[a-z_]+/i
+});
+Prism.languages.perl = {
+       'comment': [
+               {
+                       // POD
+                       pattern: /(^\s*)=\w+[\s\S]*?=cut.*/m,
+                       lookbehind: true
+               },
+               {
+                       pattern: /(^|[^\\$])#.*/,
+                       lookbehind: true
+               }
+       ],
+       // TODO Could be nice to handle Heredoc too.
+       'string': [
+               // q/.../
+               {
+                       pattern: 
/\b(?:q|qq|qx|qw)\s*([^a-zA-Z0-9\s{(\[<])(?:(?!\1)[^\\]|\\[\s\S])*\1/,
+                       greedy: true
+               },
+       
+               // q a...a
+               {
+                       pattern: 
/\b(?:q|qq|qx|qw)\s+([a-zA-Z0-9])(?:(?!\1)[^\\]|\\[\s\S])*\1/,
+                       greedy: true
+               },
+       
+               // q(...)
+               {
+                       pattern: /\b(?:q|qq|qx|qw)\s*\((?:[^()\\]|\\[\s\S])*\)/,
+                       greedy: true
+               },
+       
+               // q{...}
+               {
+                       pattern: /\b(?:q|qq|qx|qw)\s*\{(?:[^{}\\]|\\[\s\S])*\}/,
+                       greedy: true
+               },
+       
+               // q[...]
+               {
+                       pattern: 
/\b(?:q|qq|qx|qw)\s*\[(?:[^[\]\\]|\\[\s\S])*\]/,
+                       greedy: true
+               },
+       
+               // q<...>
+               {
+                       pattern: /\b(?:q|qq|qx|qw)\s*<(?:[^<>\\]|\\[\s\S])*>/,
+                       greedy: true
+               },
+
+               // "...", `...`
+               {
+                       pattern: /("|`)(?:(?!\1)[^\\]|\\[\s\S])*\1/,
+                       greedy: true
+               },
+
+               // '...'
+               // FIXME Multi-line single-quoted strings are not supported as 
they would break variables containing '
+               {
+                       pattern: /'(?:[^'\\\r\n]|\\.)*'/,
+                       greedy: true
+               }
+       ],
+       'regex': [
+               // m/.../
+               {
+                       pattern: 
/\b(?:m|qr)\s*([^a-zA-Z0-9\s{(\[<])(?:(?!\1)[^\\]|\\[\s\S])*\1[msixpodualngc]*/,
+                       greedy: true
+               },
+       
+               // m a...a
+               {
+                       pattern: 
/\b(?:m|qr)\s+([a-zA-Z0-9])(?:(?!\1)[^\\]|\\[\s\S])*\1[msixpodualngc]*/,
+                       greedy: true
+               },
+       
+               // m(...)
+               {
+                       pattern: 
/\b(?:m|qr)\s*\((?:[^()\\]|\\[\s\S])*\)[msixpodualngc]*/,
+                       greedy: true
+               },
+       
+               // m{...}
+               {
+                       pattern: 
/\b(?:m|qr)\s*\{(?:[^{}\\]|\\[\s\S])*\}[msixpodualngc]*/,
+                       greedy: true
+               },
+       
+               // m[...]
+               {
+                       pattern: 
/\b(?:m|qr)\s*\[(?:[^[\]\\]|\\[\s\S])*\][msixpodualngc]*/,
+                       greedy: true
+               },
+       
+               // m<...>
+               {
+                       pattern: 
/\b(?:m|qr)\s*<(?:[^<>\\]|\\[\s\S])*>[msixpodualngc]*/,
+                       greedy: true
+               },
+
+               // The lookbehinds prevent -s from breaking
+               // FIXME We don't handle change of separator like s(...)[...]
+               // s/.../.../
+               {
+                       pattern: 
/(^|[^-]\b)(?:s|tr|y)\s*([^a-zA-Z0-9\s{(\[<])(?:(?!\2)[^\\]|\\[\s\S])*\2(?:(?!\2)[^\\]|\\[\s\S])*\2[msixpodualngcer]*/,
+                       lookbehind: true,
+                       greedy: true
+               },
+       
+               // s a...a...a
+               {
+                       pattern: 
/(^|[^-]\b)(?:s|tr|y)\s+([a-zA-Z0-9])(?:(?!\2)[^\\]|\\[\s\S])*\2(?:(?!\2)[^\\]|\\[\s\S])*\2[msixpodualngcer]*/,
+                       lookbehind: true,
+                       greedy: true
+               },
+       
+               // s(...)(...)
+               {
+                       pattern: 
/(^|[^-]\b)(?:s|tr|y)\s*\((?:[^()\\]|\\[\s\S])*\)\s*\((?:[^()\\]|\\[\s\S])*\)[msixpodualngcer]*/,
+                       lookbehind: true,
+                       greedy: true
+               },
+       
+               // s{...}{...}
+               {
+                       pattern: 
/(^|[^-]\b)(?:s|tr|y)\s*\{(?:[^{}\\]|\\[\s\S])*\}\s*\{(?:[^{}\\]|\\[\s\S])*\}[msixpodualngcer]*/,
+                       lookbehind: true,
+                       greedy: true
+               },
+       
+               // s[...][...]
+               {
+                       pattern: 
/(^|[^-]\b)(?:s|tr|y)\s*\[(?:[^[\]\\]|\\[\s\S])*\]\s*\[(?:[^[\]\\]|\\[\s\S])*\][msixpodualngcer]*/,
+                       lookbehind: true,
+                       greedy: true
+               },
+       
+               // s<...><...>
+               {
+                       pattern: 
/(^|[^-]\b)(?:s|tr|y)\s*<(?:[^<>\\]|\\[\s\S])*>\s*<(?:[^<>\\]|\\[\s\S])*>[msixpodualngcer]*/,
+                       lookbehind: true,
+                       greedy: true
+               },
+       
+               // /.../
+               // The look-ahead tries to prevent two divisions on
+               // the same line from being highlighted as regex.
+               // This does not support multi-line regex.
+               {
+                       pattern: 
/\/(?:[^\/\\\r\n]|\\.)*\/[msixpodualngc]*(?=\s*(?:$|[\r\n,.;})&|\-+*~<>!?^]|(lt|gt|le|ge|eq|ne|cmp|not|and|or|xor|x)\b))/,
+                       greedy: true
+               }
+       ],
+
+       // FIXME Not sure about the handling of ::, ', and #
+       'variable': [
+               // ${^POSTMATCH}
+               /[&*$@%]\{\^[A-Z]+\}/,
+               // $^V
+               /[&*$@%]\^[A-Z_]/,
+               // ${...}
+               /[&*$@%]#?(?=\{)/,
+               // $foo
+               /[&*$@%]#?(?:(?:::)*'?(?!\d)[\w$]+)+(?:::)*/i,
+               // $1
+               /[&*$@%]\d+/,
+               // $_, @_, %!
+               // The negative lookahead prevents from breaking the %= operator
+               /(?!%=)[$@%][!"#$%&'()*+,\-.\/:;<=>?@[\\\]^_`{|}~]/
+       ],
+       'filehandle': {
+               // <>, <FOO>, _
+               pattern: /<(?![<=])\S*>|\b_\b/,
+               alias: 'symbol'
+       },
+       'vstring': {
+               // v1.2, 1.2.3
+               pattern: /v\d+(?:\.\d+)*|\d+(?:\.\d+){2,}/,
+               alias: 'string'
+       },
+       'function': {
+               pattern: /sub [a-z0-9_]+/i,
+               inside: {
+                       keyword: /sub/
+               }
+       },
+       'keyword': 
/\b(?:any|break|continue|default|delete|die|do|else|elsif|eval|for|foreach|given|goto|if|last|local|my|next|our|package|print|redo|require|say|state|sub|switch|undef|unless|until|use|when|while)\b/,
+       'number': 
/\b-?(?:0x[\dA-Fa-f](?:_?[\dA-Fa-f])*|0b[01](?:_?[01])*|(?:\d(?:_?\d)*)?\.?\d(?:_?\d)*(?:[Ee][+-]?\d+)?)\b/,
+       'operator': 
/-[rwxoRWXOezsfdlpSbctugkTBMAC]\b|\+[+=]?|-[-=>]?|\*\*?=?|\/\/?=?|=[=~>]?|~[~=]?|\|\|?=?|&&?=?|<(?:=>?|<=?)?|>>?=?|![~=]?|[%^]=?|\.(?:=|\.\.?)?|[\\?]|\bx(?:=|\b)|\b(?:lt|gt|le|ge|eq|ne|cmp|not|and|or|xor)\b/,
+       'punctuation': /[{}[\];(),:]/
+};
+
diff --git a/debian/source.lintian-overrides b/debian/source.lintian-overrides
new file mode 100644
index 0000000..f0fe621
--- /dev/null
+++ b/debian/source.lintian-overrides
@@ -0,0 +1,6 @@
+# this is really the source, even if some lines are a bit long
+# the minified version (and the reason why we include the original here) is
+# root/static/js/prism.js
+libmojomojo-perl source: source-is-missing debian/missing-sources/prism.js 
line length is 551 characters (>512)
+libmojomojo-perl source: insane-line-length-in-source-file 
debian/missing-sources/prism.js line length is 552 characters (>512)
+libmojomojo-perl source: source-contains-prebuilt-javascript-object 
debian/missing-sources/prism.js line length is 551 characters (>512)

-- 
Alioth's /usr/local/bin/git-commit-notice on 
/srv/git.debian.org/git/pkg-perl/packages/libmojomojo-perl.git

_______________________________________________
Pkg-perl-cvs-commits mailing list
[email protected]
http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pkg-perl-cvs-commits

Reply via email to