(deutsche Übersetzung der Seite PmWiki.CustomMarkup, Stand 23. Feb. 2005)

Die Markupumwandlung wird bei PmWiki durch einzelne Regeln gesteuert. Jede Regel definiert eine bestimmte Zeichenkette, nach der der Wikitext zuerst durchsucht wird. Anschließend werden die gefunden Stellen durch einen anderen Text ersetzt. Intern wird dazu die PHP Funktion "prog_replace()" verwendet

Regeln werden zur Übersetzungsmaschine über PmWiki's Markup() Funktion angeschlossen, was etwa so aussieht wie:

   Markup($name,$when,$pattern,$replace)

Wobei mit $name ein eindeutiger Name (Zeichenfolge) für die Regel festgelegt wird. Mit $when wird festgelegt, ob die Regel zur Anwendung kommt in Bezug (in Relation) auf andere Regeln. $pattern ist der Suchtext nach dem im Markuptext gesucht wird, und $replace wird angegeben mit welchem Text bei den Fundstellen ersetzt werden.

Als Beispiel hier der Programmcode, der die Regel für ''emphasized text'' (in scripts/stdmarkup.php) erzeugt:

   Markup("em","inline","/''(.*?)''/","<em>$1</em>");

Diese Anweisung erstellt eine Regel, die "em" heißt, welche zusammen mit anderen "inline" Markups ausgeführt wird. Die Regel bewirkt den Ersatz von Text innerhalb doppelter, einfacher Anführungszeichen durch den selben Text ($1), jedoch eingeschlossen in die HTML-Tags <em> und </em>.

Über die ersten beiden Parameter von Markup() wird die Reihenfolge festgelegt, in der Regeln angewendet werden. Der erste Parameter gibt der Regel einen Namen -- "em" im obigen Beispiel. Man könnte einen beliebigen anderen Namen benutzen, etwa "''" oder sogar "twosinglequotes". Im Allgemeinen benutzt PmWiki das Markup selbst als Name der Regel (d.h. PmWiki würde "''" und nicht "em" benutzen), aber im Interesse der Lesbarkeit benutzen die weiteren Ausführungen einen mnemonischen Namen.

Der zweite Parameter sagt, dass die Regel zusammen mit anderem "inline" Markup bearbeitet werden soll. PmWiki erledigt den Übersetzungsvorgang in mehreren Phasen:

   _begin          Begin der Umwandlung
   fulltext        Verarbeitung des gesamten Eingabetextes
   split           Zerteilen des Eingabetextes in einzeln zu verarbeitende Zeilen
   directives      Verarbeitung von Direktiven
   inline          Übersetzung von inline Markup
   links           Übersetzung von links, url-links, and WikiWords     
   block           Übersetzung von block Markup
   style           Übersetzung von styles
   _end            Ende der Umwandlung

Die Angabe "inline" als zweiter Parameter bedeutet somit, dass die Regel zusammem mit anderen "inline" Regeln angewendet wird. Soll die Regel dagegen zusammen mit der Verarbeitung von Direktiven zur Anwendung kommen, würde man "directives" als zweiten Parameter angeben.

Hier die Regel für @@monospaced@@ Text

   Markup("@@","inline","/@@(.*?)@@/","<code>$1</code>");

und die für die [:comment ...:] Direktive (Kommentare werden aus der Ausgabe entfernt):

   Markup("comment","directives","/\\(:comment .*?:\\)/",'');

In einigen Fällen ist allerdings Vorsicht geboten, etwa bei der Regel '''strong emphasis'''. Zwar wird diese zusammen mit anderem inline Markup ausgeführt, aber es muss auch sichergestellt werden, dass die Regel ''' vor the Regel '' behandelt wird,, da ''' auch '' enthält. Der zweite Parameter vom Markup() kann auch benutzt werden, um die Beziehung einer Regel zu einer anderen festzulegen:

   Markup("strong","<em","/'''(.*?)'''/","<strong>$1</strong>");           

Dies erzeugt eine Regel mit Namen "strong" und der zweite Parameter "<em" legt fest, dass die Regel vor der weiter oben gezeigten "em" Regel verarbeitet werden soll. Um sie nach dieser zu bearbeiten, würde man ">em" angeben.

Damit ist es möglich, an jeder Stelle der Markup-Übersetzung Erweiterungen vorzunehmen. (In der Tat sind "inline", "block", "directives", usw. nur Platzhalter um den Gesamtablauf zu strukturieren, so dass andere Regeln an passender Stelle eingefügt werden können. So kann etwa "<inline" benutzt werden, um festzulegen, dass eine Regel vor anderen "inline" Regeln angewendet werden soll.)

Es ist auch möglich, das vordefinierte Markup außer Kraft zu setzen:

   Markup("strong","<em");           

Das Fehlen eines Parameters für den Ersatztext bewirkt hier, dass die Regel "strong" nicht (mehr) angewendet wird.

Die vordefinierten Markup-Regeln von PmWiki sind in scripts/stdmarkup.php definiert.

Um die gesamte Ersetzungstabelle während der Programmausführung auszugeben, gibt es das Modul scripts/diag.php und "?action=ruleset". Damit werden die festgelegten Regeln in der Reihenfolge angezeigt, in der sie angewendet werden. Man sieht dies z.B. in FormatierungsanweisungenAnpassen?action=ruleset.

<< | PmWikiDe.DokumentationsIndex | >>