Javascript - Eigener Code Parser

Javascript - Eigener Code Parser

Gesamter Quelltext

Natürlich ist das bei weitem kein perfekter Code Parser. Es gibt einige Macken und nicht alle Fälle sind abgedeckt. Aber vielleicht versteht der ein oder andere jetzt das Prinzip dahinter. Für mich persönlich ist das die bessere Lösung als einen fertigen Parser zu verwenden. Man besitzt die komplette Freiheit exakt das einzubauen was man benötigt ohne irgendwelche riesen Plugins mit hoher Ladezeit zu verwenden.

function escapeRegExp(str)
{
return str.replace(/([.*+?^=!:${}()|\[\]\/\\])/g, "\\$1");
}

function replaceAll(str, find, replace)
{
return str.replace(new RegExp(escapeRegExp(find), 'g'), replace);
}

document.addEventListener("DOMContentLoaded", function() 
{
var codes = document.getElementsByTagName("PRE");
for(var i = 0; i < codes.length; ++i)
{
var code = codes[i].innerHTML;
var keywords = ["span", "int", "if", "while", "foreach", "for", "float", "double", "char ", "void", "this", "true", "false", "return"];

for(var x = 0; x < keywords.length; ++x)
{
if(code.indexOf(keywords[x]) !== false) 
{
code = replaceAll(code, keywords[x], "<span>" + keywords[x] + "</span>");
}
}

codes[i].innerHTML = code;
var lines = code.split("\n");

for(var x = 0; x < lines.length; ++x)
{
// Finde Zeichenketten in Anführungszeichen
if(lines[x].match(/(?:"[^"]*"|^[^"]*$)/g) != lines[x])
{
var replaceStrings = lines[x].match(/(?:"[^"]*"|^[^"]*$)/g);

for(var y = 0; y < replaceStrings.length; ++y)
{
var replaceString = replaceStrings[y];
lines[x] = lines[x].replace(new RegExp(escapeRegExp(replaceString), "g"), "<span class='string'>" + replaceString + "</span>");
}
}

var trimmed = lines[x].trim();

// Prüfe ob aktuelle Zeile ein einzeiliger Kommentar ist
if(trimmed.length >= 2 && trimmed.charAt(0) == "/" && trimmed.charAt("1") == "/")
{
lines[x] = '<span class="comment">' + lines[x] + '</span>';
}
else if(trimmed.length >= 2 && trimmed.charAt(0) == "*" && trimmed.charAt("1") == "*")
{
// Hervorzuhebende Zeile?
lines[x] = '<span class="highlight">' + lines[x].replace("**", "") + '</span>';
}
}

codes[i].innerHTML = lines.join("\n");
}
});
Hinterlasse gerne einen Like oder Kommentar (~‾▿‾)~
Name Text