Kamel:J*/Labor/wikifindbroken.js

/* * kleines Helferscript gegen "zerschossene" Seiten: * Das Script findet nicht geschlossene oder in der falschen Reihenfolge geschlossene * oder –  {| |} inclusive nowiki und kommentare. * * TODO: Läuft bisher gut im Firebug, mal bei Gelegenheit mit UI versehen... * * tagparse liefert eine Liste zurück: * [ [t1, n1, l1], [t2, n2, l2], ... ] * dabei steht: *    t für den Tagnamen ('div', '!--', '{|' ...) *    n für die Anzahl der ungeschlossen (negativ: ungeöffneten) Tags *    l für eine Liste der Zeilen, in denen die Tags geöffnet (geschlossen) wurden. * * Fehler zwischen nowiki- oder Kommentar-Tags (nowiki,!--) können in der Regel ignoriert werden, * wenn die Summe der n der umschließenden nowiki- bzw. Kommentar-Tags in der Summe 0 ergeben. * * Beispiele: * * tagparse(" ") * -> [] * # keine Fehler * * tagparse("  ") * -> "span", 1, [1, ["div", 1, [1]], ["span", -1, [1]]] * # Fehler: ungeschlossener div * * tagparse($("wpTextbox1").value) * -> analysiert die aktuelle Textbox * */

function Taglist {	this.open = function (t,l) { console.log("opening "+t+" ["+l+"]") if (this.length > 0 && this[this.length-1][0] == t)               { this[this.length-1][1] ++; if (this[this.length-1][1] > 0) this[this.length-1][2].push(line) else this[this.length-1][2].pop }		else this.push([t,1,[l]]); this.clean; }	this.close = function (t,l) { console.log("closing /"+t+" ["+l+"]") if (this.length > 0 && this[this.length-1][0] == t)               { this[this.length-1][1] --; if (this[this.length-1][1] < 0) this[this.length-1][2].push(line) else this[this.length-1][2].pop }		else this.push([t,-1,[l]]); this.clean; }	this.clean = function { while (this.length > 0 && this[this.length-1][1] == 0) this.pop; } } Taglist.prototype = new Array;

function tagparse(s) {	matchall = /(\{\{|\}\}|\{\||\|\}|<\/?[A-Za-z0-9]+\s*[^>]*>||\n)/g; m = s.match(matchall); taglist = new Taglist line = 1 for (var i=0; i]*)?(\/\s*)?>$|^<)/g,""); if (x == "br") continue; else if (x == "\n") line ++; else if (x == "--") taglist.close("!--",line); else if (x == "}}") taglist.close("{{"),line; else if (x == "|}") taglist.close("{|",line); else if (x[0] == "/") taglist.close(x.slice(1),line); else taglist.open(x,line); }   	return taglist; }