Parser

Ein Parser interpretiert den rohen Text einer Seite um daraus --über eine Serie von Aufrufen des Formatierers-- die Ausgabe zu erzeugen, die der Benutzer wünscht. Meist ist dies HTML. MoinMoin hat zwei unterschiedliche Wege, um den verwendeten Parser zu wählen:

  1. die #FORMAT-Verarbeitungsanweisungen (siehe HilfeZuVerarbeitungsAnweisungen)

    • Eine #FORMAT-Verarbeitungsanweisung teilt MoinMoin mit, welchen Parser es für die gesamte Seite verwenden soll. Voreingestellt ist der wiki-Parser. Beispiel:

      #FORMAT cplusplus
      ... C++ Quelltext ...
  2. sogenannte vorformatierte Bereiche (siehe HilfeZumEditieren)

    • Mit der Hilfe von vorformatierten Bereichen (Quelltextanzeige) ist es möglich, einen Parser nur auf einen Teil einer Seite anzuwenden (früher war dies mit sogenannten Prozessoren möglich). Mit Hilfe eines Hash-Bang #! in der ersten Zeile der Region wird der Parser gewählt. Ein Hash-Bang Pfad in Shell-Skripten dient genau dem selben zweck: er wählt den Interpreter mit dem das Skript interpretiert werden soll. Zum Beispiel:

      {{{#!CSV ,
      a,b,c
      d,e,f
      }}}

erzeugt die Tabelle:

a b c
d e f

(!) Bitte beachten Sie, dass es 2 Methoden gibt, Verschachtelungs-Probleme mit }}} zu lösen:

Lesen Sie auch HilfeZumFormatieren für mehr Informationen zum Editieren von Seiten.

ParserBase

ParserBase stellt eine Basisklasse für Parser die Quelltext einfärben da, welche sehr einfach erweitert werden kann. Der HTML Formatierer stellt diese mit optional ein- und ausschaltbaren Zeilennummern da, wenn der Browser des Betrachters DOM und JavaScript unterstützt.

Ein ParserBase Einfärbeparser versteht die folgenden Argumente zu einer #FORMAT Verarbeitungsanweisung oder einer Hash-Bang Zeile. Diese werden einfach, durch Leerzeichen getrennt, hinter dem Namen des Parsers angegeben (#FORMAT python start=10 step=10 numbers=on oder #!python numbers=off).

numbers

sollen Zeilennummern angezeigt werden? Der Standard ist 'on'. Mögliche Werte: 'on', 'off' (keine Zeilennummern, aber JavaScript falls möglich), 'disable' (überhauptkeine Zeilennummern)

start
Startzeilennummer (Standard: 1)
step
Inkrement der Zeilennummer (Standard: 1)

MoinMoin hat einige Quelltext-Einfärbe-Parser:

python

Färbt Python Code ein. Dieser Parser ist nicht von ParserBase abgeleitet, stellt aber die selben Argumente zur Verfügung:

   1 def hello():
   2     print "Hello World!"

def hello():
    print "Hello World!"

def hello():
    print "Hello World!"

cplusplus

   1 int main(int argc, char **argv) {
   2   return 0;
   3 }

java

   1 import java.util.Date;
   2 import java.util.Calendar;
   3 
   4 public class IntDate
   5 {
   6   public static Date getDate(String year, String month, String day)
   7     {
   8       // Date(int, int, int) has been deprecated, so use Calendar to
   9       // set the year, month, and day.
  10       Calendar c = Calendar.getInstance();
  11       // Convert each argument to int.
  12       c.set(Integer.parseInt(year),Integer.parseInt(month),Integer.parseInt(day));
  13       return c.getTime();
  14     }
  15 }

pascal

   1 function TRegEx.Match(const s:string):boolean;
   2 var
   3     l,i : integer;
   4 begin
   5     result := MatchPos(s,l,i);
   6 end;

CSV

Der CSV-Parser arbeitet mit sogenannten kommaseparierten Werten, wobei das Komma heutzutage üblicherweise ein Semikolon ist. Es wird davon ausgegangen, dass die erste Zeile die Titel der Spalten enthält; diese werden fett dargestellt. Wenn man keinen Tabellenkopf benötigt, kann man die erste Zeile leer lassen.

Der bang path kann ein oder mehrere "-index" Argumente enthalten, um die Darstellung bestimmter Spalten in der Ausgabe zu unterdrücken; die Spalten werden beginnend von 1 indiziert.

Ein Argument, das nicht mit - anfängt, bestimmt den Separator - z.B. Kommata (,) statt of Semicolons (;). Wenn Sie keinen Separator angeben, wird ; benutzt.

/!\ Der aktuelle CSV-Parser ist sehr schlicht.

Beispiel-Tabellen (bitte schauen Sie in den Quelltext dieser Seite, um das benutzte Markup zu sehen):

MoinMoin 1.3 - Ausschnitt aus der Patch-Historie:

patch-366 make _normalize_text public method Nir Soffer
patch-367 fixed failing test wikiutil: good system page names Nir Soffer
patch-368 Fixed DeprecationWarning in RandomPage.py and an unused import in twistedmoin.py Alexander Schremmer
patch-369 remove duplicate code in formatter.base Thomas Waldmann
patch-370 fixed long int in mig3 Thomas Waldmann
patch-371 fixed unicode error on eventlog Nir Soffer
patch-372 fixed util.web.makeQueryString and Page.url Nir Soffer
patch-373 fixed again non ascii http_referer Nir Soffer
patch-374 CSV.py supports different separators now Alexander Schremmer
patch-375 improved searchform behavior on Mozilla/Firefox Nir Soffer
patch-376 More correct script for actions menu init Nir Soffer

MoinMoin Versionshistorie:

Version Date
0.11 2002-03-11
0.10 2001-10-28
0.9 2001-05-07
0.8 2001-01-23
0.7 2000-12-06
0.6 2000-12-04
0.5 2000-11-17
0.4 2000-11-01
0.3 2000-10-25
0.2 2000-08-26
0.1 2000-07-29

reStructuredText

siehe /ReStructuredText

XML/XSLT/DocBook

siehe HilfeZuXmlSeiten.

Zusätzliche Parser

Für viele weitere Parser und eine Installations-Anleitung siehe ParserMarket.