Gumbo
Erfahrenes Mitglied
Hallo,
ich suche einen Algorithmus, mit dem zusammengehörige Klammernpaare einer Quellcodedarstellung hervorgehoben werden.
Dazu habe ich erst einmal alle Klammen mit entsprechenden Elementen und Klassen (<span class="brace">x</span>) ausgezeichnet.
Nachfolgende JavaScript-Funktion soll nun die zusammengehörigen Klammernpaare hervorheben. Teilweise funktioniert es auch bereits – jedoch nur teilweise.
Dazu noch ein passendes Testobjekt:
Ich hoffe, dieses Thema ist nicht zu kompliziert für euch und jemand kann mir einen guten Ratschlag geben.
ich suche einen Algorithmus, mit dem zusammengehörige Klammernpaare einer Quellcodedarstellung hervorgehoben werden.
Dazu habe ich erst einmal alle Klammen mit entsprechenden Elementen und Klassen (<span class="brace">x</span>) ausgezeichnet.
Nachfolgende JavaScript-Funktion soll nun die zusammengehörigen Klammernpaare hervorheben. Teilweise funktioniert es auch bereits – jedoch nur teilweise.
Code:
function init() {
var allowedBrackets = new Array(
new Array("(", ")"),
new Array("{", "}"),
new Array("[", "]")
);
var brackets = new Array();
var brackets_count = new Array(1, 1, 1);
var bracket_className = "brace";
var bracket_className_hover = "brace-hover";
var spanElements = document.getElementsByTagName("span");
for(var i=0; i<spanElements.length; i++) {
if( spanElements[i].getAttribute("class").indexOf("brace") < 0 ) {
continue;
}
brackets.push(spanElements[i]);
}
for(i=0; i<brackets.length; i++) {
for(var j=0; j<allowedBrackets.length; j++) {
if( allowedBrackets[j][0] == brackets[i].firstChild.nodeValue ) {
brackets[i].setAttribute("id", "bracket-" + j + "-" + brackets_count[j] + "-open");
brackets[i].onmouseover = new Function("this.className='" + bracket_className_hover + "'; document.getElementById('bracket-" + j + "-" + brackets_count[j] + "-close').className='" + bracket_className_hover + "'");
brackets[i].onmouseout = new Function("this.className='" + bracket_className + "'; document.getElementById('bracket-" + j + "-" + brackets_count[j] + "-close').className='" + bracket_className + "'");
brackets_count[j]++;
}
if( allowedBrackets[j][1] == brackets[i].firstChild.nodeValue ) {
brackets_count[j]--;
brackets[i].setAttribute("id", "bracket-" + j + "-" + brackets_count[j] + "-close");
brackets[i].onmouseover = new Function("this.className='" + bracket_className_hover + "'; document.getElementById('bracket-" + j + "-" + brackets_count[j] + "-open').className='" + bracket_className_hover + "'");
brackets[i].onmouseout = new Function("this.className='" + bracket_className + "'; document.getElementById('bracket-" + j + "-" + brackets_count[j] + "-open').className='" + bracket_className + "'");
}
}
}
}
HTML:
<pre>if<span class="brace">(</span> isset<span class="brace">(</span>$bla<span class="brace">[</span>0<span class="brace">]</span><span class="brace">)</span> <span class="brace">)</span> <span class="brace">{</span>
echo dummy<span class="brace">(</span>$bla<span class="brace">)</span>;
<span class="brace">}</span></pre>
Ich hoffe, dieses Thema ist nicht zu kompliziert für euch und jemand kann mir einen guten Ratschlag geben.