Team:Aachen/Scripts/jquery.syntax.core.js

From 2014.igem.org

// This file is part of the "jQuery.Syntax" project, and is distributed under the MIT License. // Copyright (c) 2011 Samuel G. D. Williams. <http://www.oriontransfer.co.nz>

RegExp.prototype.indexOf||(RegExp.indexOf=function(a,b){return a[0].indexOf(a[b])+a.index});RegExp.prototype.escape||(RegExp.escape=function(a){return a.replace(/[\-\[\]{}()*+?.\\\^$|,#\s]/g,"\\$&")});String.prototype.repeat||(String.prototype.repeat=function(a){return Array(a+1).join(this)});Syntax.innerText=function(a){var b;if(!a)return"";if("BR"==a.nodeName)return"\n";a.textContent?b=a.textContent:document.body.innerText&&(b=a.innerText);return b.replace(/\r\n?/g,"\n")}; Syntax.extractElementMatches=function(a,b,c){var d=[];b=b||0;(function(a){for(var c=0;a[c];c++){var g=null,h=a[c];3===h.nodeType||4===h.nodeType?b+=h.nodeValue.length:1===h.nodeType&&(g=Syntax.innerText(h),d.push(new Syntax.Match(b,g.length,{klass:h.className,force:!0,element:h,allow:"*"},g)));8!==h.nodeType&&h.children&&arguments.callee(h.childNodes,b)}})(a);d.shift();return d};Syntax.layouts.preformatted=function(a,b,c){return b}; Syntax.modeLineOptions={"tab-width":function(a,b,c){c.tabWidth=parseInt(b,10)}};Syntax.convertTabsToSpaces=function(a,b){var c=[],d=0,e=[],f=0;b=b||4;for(var g="";g.length<=b;g+=" ")c.push(g);a=a.replace(/\r|\n|\t/g,function(a){var g=arguments[arguments.length-2];if("\r"===a||"\n"===a)return d=-(g+1),a;var k=b-(d+g)%b;d+=k-1;f+=k-1;e.push([g,k,f]);return c[k]});return{text:a,offsets:e}}; Syntax.convertToLinearOffsets=function(a,b){for(var c=0,d=[],e=0;ea[c][0]?a[c+1]?e<=a[c+1][0]?d.push(a[c][2]):(c+=1,e-=1):d.push(a[c][2]):d.push(d[d.length-1]||0);return d};Syntax.updateMatchesWithOffsets=function(a,b,c){(function(a){for(var e=0;e<a.length;e++){var f=a[e],g=f.offset+b[f.offset],h=f.offset+f.length,h=h+b[h];f.adjust(b[f.offset],h-g,c);0<f.children.length&&arguments.callee(f.children)}})(a);return a}; Syntax.extractMatches=function(){var a=arguments;return function(b,c){for(var d=[],e=0;e<a.length;e+=1){var f=a[e],g=e+1;null!=f&&("undefined"!=typeof f.index&&(g=f.index),f.debug&&Syntax.log("extractMatches",f,g,b[g],b),0<b[g].length&&(f.brush?d.push(Syntax.Brush.buildTree(f,b[g],RegExp.indexOf(b,g))):(f=jQuery.extend({owner:c.owner},f),d.push(new Syntax.Match(RegExp.indexOf(b,g),b[g].length,f,b[g])))))}return d}}; Syntax.lib.webLinkProcess=function(a,b){b&&(a="http://www.google.com/search?btnI=I&q="+encodeURIComponent(a+" "));return function(b,d,e){if(!1===e.linkify)return b;d=document.createElement("a");d.href=a+encodeURIComponent(Syntax.innerText(b));for(d.className=b.className;0<b.childNodes.length;)d.appendChild(b.childNodes[0]);return d}};Syntax.register=function(a,b){var c=Syntax.brushes[a]=new Syntax.Brush;c.klass=a;b(c)};Syntax.lib.cStyleComment={pattern:/\/\*[\s\S]*?\*\//gm,klass:"comment",allow:["href"]}; Syntax.lib.cppStyleComment={pattern:/\/\/.*$/gm,klass:"comment",allow:["href"]};Syntax.lib.perlStyleComment={pattern:/#.*$/gm,klass:"comment",allow:["href"]};Syntax.lib.perlStyleRegularExpression={pattern:/\B\/([^\\\/]|\\.)*\/[a-z]*(?=\s*($|[^\w\s'"\(]))/gm,klass:"constant",incremental:!0};Syntax.lib.cStyleFunction={pattern:/([a-z_][a-z0-9_]*)\s*\(/gi,matches:Syntax.extractMatches({klass:"function"})};Syntax.lib.camelCaseType={pattern:/\b_*[A-Z][\w]*\b/g,klass:"type"}; Syntax.lib.cStyleType={pattern:/\b[_a-z][_\w]*_t\b/gi,klass:"type"};Syntax.lib.xmlComment={pattern:/(<|<)!--[\s\S]*?--(>|>)/gm,klass:"comment"};Syntax.lib.webLink={pattern:/\w+:\/\/[\w\-.\/?%&=@:;#]*/g,klass:"href"};Syntax.lib.hexNumber={pattern:/\b0x[0-9a-fA-F]+/g,klass:"constant"};Syntax.lib.decimalNumber={pattern:/\b[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?/g,klass:"constant"};Syntax.lib.doubleQuotedString={pattern:/"([^\\"\n]|\\.)*"/g,klass:"string"}; Syntax.lib.singleQuotedString={pattern:/'([^\\'\n]|\\.)*'/g,klass:"string"};Syntax.lib.multiLineDoubleQuotedString={pattern:/"([^\\"]|\\.)*"/g,klass:"string"};Syntax.lib.multiLineSingleQuotedString={pattern:/'([^\\']|\\.)*'/g,klass:"string"};Syntax.lib.stringEscape={pattern:/\\./g,klass:"escape",only:["string"]};Syntax.Match=function(a,b,c,d){this.offset=a;this.endOffset=a+b;this.length=b;this.expression=c;this.value=d;this.children=[];this.next=this.parent=null}; Syntax.Match.prototype.shift=function(a,b){this.adjust(a,null,b);for(var c=0;c<this.children.length;c++)this.children[c].shift(a,b)};Syntax.Match.prototype.adjust=function(a,b,c){this.offset+=a;this.endOffset+=a;b&&(this.length=b,this.endOffset=this.offset+b);c&&(this.value=c.substr(this.offset,this.length))};Syntax.Match.sort=function(a,b){return a.offset-b.offset||b.length-a.length};Syntax.Match.prototype.contains=function(a){return a.offset>=this.offset&&a.endOffset<=this.endOffset}; Syntax.Match.defaultReduceCallback=function(a,b){"string"===typeof a&&(a=document.createTextNode(a));b.appendChild(a)}; Syntax.Match.prototype.reduce=function(a,b){var c=this.offset,d=document.createElement("span");a=a||Syntax.Match.defaultReduceCallback;this.expression&&this.expression.klass&&(0<d.className.length&&(d.className+=" "),d.className+=this.expression.klass);for(var e=0;e<this.children.length;e+=1){var f=this.children[e],g=f.offset;f.offset<this.offset&&Syntax.log("Syntax Warning: Offset of child",f,"is before offset of parent",this);c=this.value.substr(c-this.offset,g-c);a(c,d);a(f.reduce(a,b),d);c=f.endOffset}c=== this.offset?a(this.value,d):c<this.endOffset?a(this.value.substr(c-this.offset,this.endOffset-c),d):c>this.endOffset&&Syntax.log("Syntax Warning: Start position "+c+" exceeds end of value "+this.endOffset);b&&(d=b(d,this));return d}; Syntax.Match.prototype.canContain=function(a){return a.expression.force?!0:this.complete?!1:a.expression.only?!0:"undefined"===typeof this.expression.allow||jQuery.isArray(this.expression.disallow)&&-1!==jQuery.inArray(a.expression.klass,this.expression.disallow)?!1:"*"===this.expression.allow||jQuery.isArray(this.expression.allow)&&-1!==jQuery.inArray(a.expression.klass,this.expression.allow)?!0:!1}; Syntax.Match.prototype.canHaveChild=function(a){if(a=a.expression.only){for(var b=this;null!==b;){if(-1!==jQuery.inArray(b.expression.klass,a))return!0;if((b=b.parent)&&b.complete)break}return!1}return!0};Syntax.Match.prototype._splice=function(a,b){return this.canHaveChild(b)?(this.children.splice(a,0,b),b.parent=this,b.expression.owner||(b.expression.owner=this.expression.owner),this):null}; Syntax.Match.prototype.insert=function(a,b){if(!this.contains(a))return null;if(b){for(var c=this,d=0;d<c.children.length;)c.children[d].contains(a)?(c=c.children[d],d=0):d+=1;return c._insertWhole(a)}return this._insert(a)}; Syntax.Match.prototype._insertWhole=function(a){var b=this.bisectAtOffsets([a.offset,a.endOffset]);this.children=[];b[0]&&(this.children=this.children.concat(b[0].children));if(b[1]){a.children=[];this.expression&&this.expression.owner&&(a.expression=this.expression.owner.getRuleForKlass(a.expression.klass)||a.expression);for(var c=0;c<b[1].children.length;c+=1){var d=b[1].children[c];a.canContain(d)&&a.children.push(d)}this.children.push(a)}b[2]&&(this.children=this.children.concat(b[2].children)); return this};Syntax.Match.prototype.insertAtEnd=function(a){if(!this.contains(a))return Syntax.log("Syntax Error: Child is not contained in parent node!"),null;if(!this.canContain(a))return null;if(0<this.children.length){var b=this.children.length-1,c=this.children[b];return a.offset<c.offset?a.force?this._insert(a):null:a.offset<c.endOffset?a.endOffset<=c.endOffset?c.insertAtEnd(a):a.force?this._insert(a):null:this._splice(b+1,a)}return this._splice(0,a)}; Syntax.Match.prototype._insert=function(a){if(0==this.children.length)return this._splice(0,a);for(var b=0;b<this.children.length;b+=1){var c=this.children[b];if(a.endOffset<=c.offset)return this._splice(b,a);if(!(a.offset>=c.endOffset)){if(c.contains(a))return c._insert(a);a=a.bisectAtOffsets([c.offset,c.endOffset]);a[0]&&this._splice(b,a[0]);a[1]&&c.insert(a[1]);if(a[2])a=a[2];else return this}}this._splice(this.children.length,a)}; Syntax.Match.prototype.bisectAtOffsets=function(a){var b=[],c=this.offset,d=null,e=jQuery.merge([],this.children);a=a.slice(0);a.push(this.endOffset);a.sort(function(a,b){return a-b});for(var f=0;f<a.length;f+=1){var g=a[f];if(g>this.endOffset)break;g<this.offset||0==g-c?(b.push(null),c=g):(c<this.offset&&(c=this.offset),g=new Syntax.Match(c,g-c,this.expression),g.value=this.value.substr(c-this.offset,g.length),d&&(d.next=g),d=g,c=g.endOffset,b.push(g))}a.length=b.length;for(f=0;f<b.length;f+=1)if(null!= b[f]){for(g=a[0];0<e.length;)if(e[0].endOffset<=b[f].endOffset)b[f].children.push(e.shift());else break;if(e.length&&e[0].offset<b[f].endOffset){c=e.shift().bisectAtOffsets(a);for(d=0;d<c.length;d+=1)null!=c[d]&&b[f+d].children.push(c[d]);f+=c.length-2;a.splice(0,c.length-2)}a.shift()}e.length&&Syntax.log("Syntax Error: Children nodes not consumed",e.length," remaining!");return b}; Syntax.Match.prototype.split=function(a){for(var b=[];null!==a.exec(this.value);)b.push(a.lastIndex);a=this.bisectAtOffsets(b);return jQuery.grep(a,function(a,b){return a})};Syntax.Brush=function(){this.klass=null;this.rules=[];this.parents=[];this.processes={}};Syntax.Brush.prototype.derives=function(a){this.parents.push(a);this.rules.push({apply:function(b,c){return Syntax.brushes[a].getMatches(b)}})}; Syntax.Brush.prototype.allKlasses=function(){for(var a=[this.klass],b=0;b<this.parents.length;b+=1)a=a.concat(Syntax.brushes[this.parents[b]].allKlasses());return a};Syntax.Brush.convertStringToTokenPattern=function(a,b){var c="\\b",d="\\b";a.match(/^\w/)?a.match(/\w$/)||(d="\\B"):c=a.match(/\w$/)?"\\B":d="";b&&(a=RegExp.escape(a));return c+a+d}; Syntax.Brush.MatchPattern=function(a,b){if(!b.pattern)return[];var c=[],d=RegExp();for(d.compile(b.pattern);null!==(match=d.exec(a));)b.matches?c=c.concat(b.matches(match,b)):b.brush?c.push(Syntax.Brush.buildTree(b,match[0],match.index)):c.push(new Syntax.Match(match.index,match[0].length,b,match[0])),b.incremental&&(d.lastIndex=match.index+1);return c}; Syntax.Brush.prototype.push=function(a,b){if(jQuery.isArray(a)){for(var c=b,d="(",e=0;e<a.length;e+=1){0<e&&(d+="|");var f=a[e],d=f instanceof RegExp?d+f.source:d+Syntax.Brush.convertStringToTokenPattern(f,!0)}this.push(jQuery.extend({pattern:RegExp(d+")",c.options||"g")},c))}else c=a,"string"===typeof c.pattern&&(c.string=c.pattern,c.pattern=RegExp(Syntax.Brush.convertStringToTokenPattern(c.string,!0),c.options||"g")),"undefined"!==typeof XRegExp&&(c.pattern=new XRegExp(c.pattern)),c.apply=c.apply|| Syntax.Brush.MatchPattern,c.pattern&&c.pattern.global||"undefined"==typeof c.pattern?this.rules.push(jQuery.extend({owner:this},c)):Syntax.log("Syntax Error: Malformed rule: ",c)};Syntax.Brush.prototype.getMatchesForRule=function(a,b){var c=[];"undefined"!=typeof b.apply&&(c=b.apply(a,b));b.debug&&Syntax.log("Syntax matches:",b,a,c);return c};Syntax.Brush.prototype.getRuleForKlass=function(a){for(var b=0;b<this.rules.length;b+=1)if(this.rules[b].klass==a)return this.rules[b];return null}; Syntax.Brush.prototype.getMatches=function(a){for(var b=[],c=0;c<this.rules.length;c+=1)b=b.concat(this.getMatchesForRule(a,this.rules[c]));return b};Syntax.Brush.buildTree=function(a,b,c,d){b=Syntax.brushes[a.brush].buildTree(b,c,d);jQuery.extend(b.expression,a);return b}; Syntax.Brush.prototype.buildTree=function(a,b,c){b=b||0;a=a.replace(/\r/g,"");var d=this.getMatches(a);if(b&&0<b)for(var e=0;e<d.length;e+=1)d[e].shift(b);a=new Syntax.Match(b,a.length,{klass:this.allKlasses().join(" "),allow:"*",owner:this},a);d.sort(Syntax.Match.sort);for(e=0;e<d.length;e+=1)a.insertAtEnd(d[e]);if(c)for(e=0;e<c.length;e+=1)a.insert(c[e],!0);a.complete=!0;return a}; Syntax.Brush.prototype.process=function(a,b,c){a=this.buildTree(a,0,b).split(/\n/g);b=document.createElement("pre");b.className="syntax";for(var d=0;d<a.length;d+=1){var e=a[d].reduce(null,function(a,b){if(b.expression&&(b.expression.process&&(a=b.expression.process(a,b,c)),b.expression.owner)){var d=b.expression.owner.processes[b.expression.klass];d&&(a=d(a,b,c))}return a});b.appendChild(e)}return b}; Syntax.highlightText=function(a,b,c){var d=(b.brush||"plain").toLowerCase(),d=Syntax.aliases[d]||d;Syntax.brushes.get(d,function(d){if(b.tabWidth){replacement=Syntax.convertTabsToSpaces(a,b.tabWidth);if(b.matches&&b.matches.length){var f=Syntax.convertToLinearOffsets(replacement.offsets,a.length);b.matches=Syntax.updateMatchesWithOffsets(b.matches,f,replacement.text)}a=replacement.text}f=d.process(a,b.matches,b);!1!==b.linkify&&jQuery("span.href",f).each(function(){jQuery(this).replaceWith(jQuery("<a>").attr("href", this.innerHTML).text(this.innerHTML))});c(f,d,a,b)})}; Syntax.highlight=function(a,b,c){"function"===typeof b&&(c=b,b={});b.layout=b.layout||"preformatted";b.matches=[];"undefined"===typeof b.tabWidth&&(b.tabWidth=4);a.each(function(){var a=jQuery(this);b.matches=b.matches.concat(Syntax.extractElementMatches(a));var e=Syntax.innerText(this),f=e.match(/-\*- mode: (.+?);(.*?)-\*-/i),g=e.indexOf("\n",e.indexOf("\n")+1);if(f&&f.index<g){b.brush=b.brush||f[1];for(var g=f[2],h=/([a-z\-]+)\:(.*?)\;/gi;null!==(f=h.exec(g));){var l=Syntax.modeLineOptions[f[1]]; l&&l(f[1],f[2],b)}}Syntax.highlightText(e,b,function(e,f){Syntax.layouts.get(b.layout,function(g){e=g(b,jQuery(e),jQuery(a));if(b.theme){g=Syntax.themes[b.theme];for(var h=0;h<g.length;h+=1)e.addClass("syntax-theme-"+g[h]);e.addClass("syntax-theme-"+b.theme)}f.postprocess&&(e=f.postprocess(b,e,a));c&&(e=c(b,e,a));e&&!0===b.replace&&a.replaceWith(e)})})})};Syntax.loader.core=!0;