HSGWiki-Syntax-Parser

Zum Test habe ich mal eine Sandbox(engl. Sandkasten) angelegt. Auf dieser Seite kann man die neue Wiki-Syntax ausprobieren. Nach der Funktionsliste erkläre ich noch wie ich es realisiert habe. Grundlegend ist es so, dass das Skript auch auf PHP 4 laufen sollte, aber die finale Version ist wohl auf PHP 5.1 fixiert, da wir so mehr Möglichkeiten bezüglich Perfomance und Funktionsvielfalt haben.
Bisher habe ich mal diese Funktionen eingebaut:

==Text== 1. Überschrift

===Text=== 2. Überschrift

====Text==== 3. Überschrift

”Text” kursiv

”’Text”’ Fett

””’Text””’ kursiv und Fett

* Text ungeordnete List

# Text geordnete Liste

[block]Text[/block] mehrzeilige Einträge bei Listen

DER PHP-CODE meine Vorgehensweise

  1. Damit der Code auch immer schön valide ist lasse ich Tidy über die Ausgabe laufen.Tidy-ob-handler
  2. Danach fange ich mit dem ersten Markup-Tag an ””’ für Fett+Kursiv
    Zum Start setzte ich nun erst mal die “Schleifenvariabeln auf 0/false”.
  3. Jetzt gehe ich immer wieder bis zum nächsten Vorkommen von ””’ durch, sobald eine Stelle finde, wird diese durch < b >< i> bzw < /i > < /b> ersetzt.

    Sollte der Autor noch den Schliessentag vergessen haben, so wird dieser automatisch angehängt.
  4. Diesen Vorgang wiederhole ich nun wieder mit Fett, kursiv, 3. Überschrift, 2.Überschrift, 1.Überschrift(genau diese Reihenfolge!)
  5. Um die Blockabschnitte nun in eine Zeile zu versetzten, gehe ich den Text noch ein Mal ganz durch.

    Dazu suche ich mir Anfang und Ende des Abschnitts,
    hole mir den Text des Blocks,

    und teile diesen dann in die einzelnen Zeilen auf.

    Danach gehe ich nun jede Zeile durch und ersetze den Zeilenumbruch durch < br / >

    Zum Schluss füge ich den Block, umhüllt durch < p > < /p > wieder in den gesamten Text ein.
  6. Da ich den Text nun zeilenweise bearbeite wird der string in einen Array aufgesplittet.
  7. Nun suche ich nicht mehr zuerst nach der Position, sondern gehe Zeilenweise durch(hier mache ich zuerst unsortierte Listen).

    Die aktuelle Zeile suche ich per Regular Expression nach einem * ab.

    Falls der Audruck gefunden wurde wird das < li > der Liste am Ende der Zeile auch wieder beendet(deshalb ist [block][/block] notwendig)

    Sollte die List schon zuende sein, wird dies in der vorherigen Zeile eingetragen.

    Sollte die Liste gleichzeitig mit dem Text enden, so wird die Liste in einer zusätzlichen Zeile beendet.
  8. So nun habe ich den Parser so gut wie fertig, es fehlt nur noch das Syntax-Highlightning von PHP usw, aber das kommt noch.

Share/Save/Bookmark

0 Responses to “HSGWiki-Syntax-Parser”


  1. No Comments

Leave a Reply