Hallo mermshaus,
Das ist leider alles nicht so leicht, dass man das mal eben aus dem Ärmel schüttelt, weil es immer Cornercases gibt. In HTML sind das zumindest Script-Tags und Kommentare, die Winkelklammern enthalten können. In PHP-Code kann auch ein
?>
in einem String oder einem Kommentar stehen und damit keine syntaktische Funktion ausüben.
Mist, dann müsste ich ja dem HTML-Highlighter die PHP-Syntax „beibringen“, damit der so etwas erkennt, was ich eigentlich nicht will.
Wenn du wirklich versuchen möchtest, einen CSS-Parser/-Highlighter zu schreiben, wünsche ich schon jetzt viel Spaß und gute Nerven. :)
Immerhin ist die Erkenntnis, dass das alles nicht ganz so leicht ist, auch eine Erkenntnis ;-)
Ich habe auch mal einen HTML-Highlighter aus dem Internet, der mit Regex arbeitet (böse, böse, ich weiß), getestet und der war auch sehr leicht aus dem Konzept zu bringen...
Der Nachteil an
highlight_string
ist, dass man die Rückgabe noch mal als HTML verarbeiten muss, wenn man aus den Inline-Styles saubere CSS-Klassennamen machen möchte (für Syntax-Highlighter-Themes). Das ist aber vermutlich immer noch besser, als sich einen eigenen PHP-Parser schreiben zu müssen.
Ließe sich cachen, ist aber trotzdem nicht sonderlich elegant.
Ein, zwei Sachen, die mir (oder eher meiner IDE) spontan an deinem Code aufgefallen sind:
Welche IDE benutzt du bzw. kannst du für Webentwicklung unter Linux empfehlen? Eclipse? Ich nutze seit Ewigkeiten gedit, weil ich bisher zu faul war, etwas anderes auszuprobieren...
$content=false;
müsste$comment=false;
heißen? Zumindest ist$content
ungenutzt und$comment
wird nicht initialisiert.Ebenfalls nicht initialisiert werden
$highlight_php
und$attr_marker
.
Werde ich beheben. Danke für deine Hinweise.
Hier eine Eingabe, die einige Probleme demonstriert:
$input = <<<'EOT' <?php echo 'foo ?> "\' bar\\'; /* ?> */ // ?> EOT;
Mh, ich müsste also prüfen, ob das ?>
wirklich das letzte vor dem nächsten <?php
ist und dass dieses im HTML- und nicht im PHP-Kontext steht.
Das ist sicherlich ein denkbarer Ansatz[^pdflatex], aber eine LaTeX-Installation auf dem Server ist für den Fokus meines Tools fünf Nummern zu krass. (Das ist ehrlich gesagt wohl auch für 99 % der Anwender/Webspaces zu krass.) Besser wäre eine LaTeX-Installation auf dem Rechner, auf dem die fertige (und bis auf das Einbinden von clientseitigem JS-Code statische) Seite generiert wird. Man würde dann eben die fertigen SVG-Grafiken während des Build-Vorgangs erzeugen und am Ende mit hochladen. Es bleibt natürlich eine dicke Abhängigkeit, die man erst mal aufsetzen muss, und, ja, es steht dem Ansatz entgegen, eine reine PHP-Lösung für die Grundfunktionalität zu haben.
Mein aktueller Ansatz geht in die Richtung, die Funktionalität in Plugins auszulagern und damit eine Wahlmöglichkeit zu schaffen: Keine Formeln, (Xe-)LaTeX auf dem Server, MathJax (CDN) und MathJax (selbst gehostet) bzw. Kein Highlighting, Selbstgestrickte schlechte Lösung und eine JavaScript-Lösung.
Gruß
Julius
P.S.: Kannst du mir vielleicht ein funktionierendes GeSHi-Beispiel geben, deren Doku ist ziemlich wirr und enthält soetwas nicht?
P.P.S.: Ich habe mal den Baum abonniert, ich hoffe, dass ich jetzt auch Benachrichtungen bekomme, wenn ich eine Antwort erhalte...