Hilfe:Vorlagenprogrammierung/Parserfunktionen
Parserfunktionen sind eingebaute Werkzeuge in der Wiki-Software, mit denen sich einfache Logik, Bedingungen und Formatierungen direkt im Wikitext umsetzen lassen. Sie ergänzen klassische Vorlagen um Möglichkeiten wie Vergleiche, Datumsausgaben oder das Zerlegen von Seitentiteln. Einen Überblick über die zur Verfügung stehenden Funktionen findest du auf dieser Seite, die als Orientierung und Einstieg in das Thema dient.
Grundlegendes[Bearbeiten | Quelltext bearbeiten]
Parserfunktionen folgen einer einheitlichen Syntax, bei der der Funktionsname mit einem führenden # notiert und innerhalb doppelter geschweifter Klammern ausgeführt wird.
Parameter werden durch senkrechte Striche | getrennt, leere Parameter gelten grundsätzlich als „falsch“, alle anderen als „wahr“. Viele Funktionen basieren auf dieser simplen Wahr/Falsch-Logik, weshalb korrekte Leerzeichen und eine klare Parameterstruktur wichtig sind.
Grundsyntax[Bearbeiten | Quelltext bearbeiten]
{{#funktionsname: Parameter 1 | Parameter 2 | Parameter 3 … }}
Parserfunktionen werden früh in der Parserauswertung verarbeitet, was ihr Zusammenspiel mit Vorlagen und Lua-Modulen beeinflussen kann.
Erweiterungsfunktionen[Bearbeiten | Quelltext bearbeiten]
Einige MediaWiki-Erweiterungen bringen eigene parsernahe Funktionen oder Tags mit, etwa für Diagramme, Grafiken oder spezielle Inhaltsformate. Beispiele sind Konstrukte wie #mermaid oder eigene Tag-Syntaxen, die nur zur Verfügung stehen, wenn die entsprechende Erweiterung installiert und konfiguriert ist. Diese Funktionen werden in der Regel in den Hilfeseiten der jeweiligen Erweiterung dokumentiert und sind nicht Teil des Kernumfangs der Parserfunktionen; auf dieser Seite werden sie daher nur der Vollständigkeit halber erwähnt.
Abgrenzung zu anderen parsernahen Funktionen[Bearbeiten | Quelltext bearbeiten]
Parserfunktionen sind nur ein Teil der Mechanismen, die MediaWiki zur Verarbeitung von Wikitext bereitstellt. Daneben existieren weitere Funktionsarten, die häufig ähnlich aussehen, aber technisch unterschiedlich arbeiten. Eine klare Unterscheidung ist sinnvoll, um Fehlinterpretationen zu vermeiden und gezielt auf die passende Dokumentation zuzugreifen.
Die folgende Übersicht zeigt die wichtigsten Kategorien parsernaher Konstrukte:
| Kategorie | Beispielsyntax | Zweck / Beschreibung |
|---|---|---|
| Parserfunktionen | {{#if: …}} |
Auswertung von Bedingungen, Berechnungen, Datumsformatierung, Titelverarbeitung; Funktionsaufruf mit führendem #.
|
Funktionen ohne # |
{{lc:Text}} |
Einfache Textumwandlungen wie Groß-/Kleinschreibung, Zahlformatierung oder URL-Kodierung; Teil des Kernumfangs. |
| Magische Wörter | {{PAGENAME}} |
Stellen Seiteneigenschaften, Zeitwerte oder Umgebungsdaten bereit; liefern direkte Werte ohne Parameterlogik. |
| Verhaltensschalter | __NOTOC__ |
Steuern das Verhalten der Seite selbst (z. B. Inhaltsverzeichnis, Indizierung, Abschnittslinks); wirken auf Parser- oder Ausgabestufe. |
Parserfunktionen und die weiteren Klassen können miteinander kombiniert werden, erfüllen jedoch unterschiedliche Aufgaben. Eine ausführlichere Dokumentation zu magischen Wörtern und Verhaltensschaltern erfolgt auf eigenen Hilfeseiten.
Überblick der Funktionsgruppen[Bearbeiten | Quelltext bearbeiten]
Parserfunktionen decken unterschiedliche Aufgaben ab, die sich grob in thematische Bereiche gliedern lassen. Einige Gruppen sind eher für Bedingungen und Verzweigungen zuständig, andere kümmern sich um Datumsformatierung, Seitentitel oder die Umwandlung von Text. Die folgenden Abschnitte skizzieren diese Funktionsgruppen und nennen typische Einsatzgebiete; weiterführende Details werden bei Bedarf auf eigenen Unterseiten erläutert.
Bedingungen und Logik[Bearbeiten | Quelltext bearbeiten]
Diese Gruppe umfasst Funktionen, mit denen einfache oder verschachtelte Bedingungen im Wikitext abgebildet werden können. Typische Vertreter sind #if, #ifeq, #ifexist, #iferror, #ifexpr und #switch. Sie entscheiden zum Beispiel, ob ein Parameter gesetzt ist, ob zwei Werte übereinstimmen oder welcher Text bei mehreren möglichen Fällen ausgegeben werden soll. Für eine ausführlichere Beschreibung der einzelnen Varianten steht die Seite Parserfunktionen/Bedingungen zur Verfügung.
Datum und Zeit[Bearbeiten | Quelltext bearbeiten]
Datumsbezogene Parserfunktionen erzeugen oder formatieren Zeitangaben auf Basis der MediaWiki-Systemzeit. Mit #time, #timel und #timef lassen sich Datums- und Zeitwerte in unterschiedliche Formate bringen, zum Beispiel zur Anzeige in Vorlagen oder zur Erzeugung von sortierbaren Ausgaben. Dabei ist zu beachten, dass die Funktionen intern mit UNIX-Zeitstempeln arbeiten und Lokalisierung sowie Zeitzonen-Effekte eine Rolle spielen können. Details und Beispiel-Formatierungen werden auf Parserfunktionen/Datum und Zeit erläutert.
Struktur, Seitentitel und Pfade[Bearbeiten | Quelltext bearbeiten]
Funktionen in diesem Bereich helfen dabei, Seitennamen und Pfadangaben auszuwerten oder umzuschreiben. Mit #titleparts lassen sich Seitentitel in einzelne Bestandteile zerlegen, etwa um Präfixe oder Unterseiten abzutrennen. #rel2abs rechnet relative Pfade gegen einen Basiswert in absolute Pfade um, während #namespace, #special und #tag beim Umgang mit Namensräumen, Spezialseiten und parsergenerierten Tags unterstützen. Eine ausführlichere Darstellung findet sich auf Parserfunktionen/Struktur und Titel.
Mathematische Ausdrücke[Bearbeiten | Quelltext bearbeiten]
Die Parserfunktion #expr ermöglicht die Auswertung mathematischer Ausdrücke direkt im Wikitext. Sie unterstützt Grundrechenarten, Vergleichsoperatoren, Klammerausdrücke sowie einige vordefinierte Konstanten und mathematische Funktionen. Die Berechnung erfolgt in einer frühen Phase des Parsers, weshalb bereits kleine Syntaxfehler zu sichtbaren Fehlermeldungen führen können.
- Einfache Beispiele
{{#expr: 3 + 3 }}→ 6{{#expr: 3 + 3 -2 }}→ 4- Punkt vor Strich → Siehe: Klammern
{{#expr: 3 + 3 * 2 }}→ 9{{#expr: 3 * 3 + 2 }}→ 11
- Potenzrechnung und Potenzdarstellung
{{#expr: 3 ^ 3 }}→ 27{{#expr: 300 ^ 900 }}→ 2.0589113209465E+44 ⇒ 2,0589… × 1044
Die folgenden Abschnitte bieten einen kompakten Überblick über die möglichen Operatoren, Konstanten und Funktionen.
Unterstützte Operatoren[Bearbeiten | Quelltext bearbeiten]
| Kategorie | Operatoren |
|---|---|
| Arithmetik | + - * / ^
|
| Klammern | ( )
|
| Vorzeichen | + -
|
| Konstanten | pi e
|
| Funktionen | abs sqrt mod sin exp cos tan ln asin acos atan
|
| Vergleich | = != < > <= >= <>
|
| Rundung | round ceil floor trunc
|
Die Funktion selbst, kann neben den Grundrechenarten eine Vielzahl an Operatoren unterstützen, die es ermöglicht auch komplexere mathematische Operationen auszuführen.
Neben der Portenzrechnung sind auch komplexere trigonometrische und unäre Funktionen möglich. Ebenso unterstützt #expr auch Vergleichsoperatoren und einfache Boole'sche Algebra.→ Siehe: Vergleichsausdrücke
Klammern[Bearbeiten | Quelltext bearbeiten]
#expr unterstützt beliebig verschachtelte Klammern:
{{#expr: (2 + 3) * ((4 * 2) - 1) }} → 35
Vorzeichen[Bearbeiten | Quelltext bearbeiten]
Es ist möglich mit Vorzeichen zu arbeiten, die Postion des Vorzeichens ist immer vor der betreffenden Zahl. Die Funktion unterscheidet jedoch nicht ob ein Leerzeichen folgt oder nicht, zur besseren Lesbarkeit des Codes empfiehlt es sich diese Regel:
-1ist „Negativ Eins“,- während
- 1„substrahiere Eins“ bedeutet.
Konstanten[Bearbeiten | Quelltext bearbeiten]
Es werden Naturlonstaten in begrenztem Umfang unterstützt. Beide Konstanten werden als Gleitkommazahlen ausgewertet.
| Beispiel | Bezeichnung | Beispiel und Ergebnis |
|---|---|---|
pi |
Kreiszahl π | {{#expr: pi * 2 }} → 6.2831853071796
|
e |
Eulersche Zahl | {{#expr: e ^ 2 }} → 7.3890560989306
|
Weitere Konstanten existieren nicht nativ in der Funktion.
Mathematische Funktionen[Bearbeiten | Quelltext bearbeiten]
| Beispiel | Bezeichnung | Beispiel und Ergebnis |
|---|---|---|
abs(x) |
Absolutwert | {{#expr: abs(-7) }} → 7
|
sin(x) |
Sinus (in Rad) | {{#expr: sin(pi / 2) }} → 1
|
cos(x) |
Cosinus (in Rad) | {{#expr: cos(3.17/10) }} → 0.95 (gerundet)
|
tan(x) |
Tangens | {{#expr: tan(3.17/10) }} → 0.328 (gerundet)
|
ln(x) |
Natürlicher Logarithmus | {{#expr: ln(2) }} → 0.693 (gerundet)
|
sqrt(x) |
Quadratwurzel | {{#expr: sqrt(9) }} → 3
|
Es existieren noch weitere trigonometrische Funktionen, wie asin, acos, atan und die Exponentialfunkion exp. Die Verwendung folgt dem obigen Beispiel.
Vergleichsausdrücke[Bearbeiten | Quelltext bearbeiten]
| Operator | Bedeutung |
|---|---|
= |
(ist) gleich |
> |
größer |
>= |
größer gleich |
< |
kleiner |
<= |
kleiner gleich |
<> |
ungleich |
!= |
nicht |
and |
und |
or |
oder |
#expr kann auch als logische Prüfung genutzt werden:
{{#expr: (5 < 8) }}
→ 1 (wahr)
Auch lässt sich hier begrenzt Boole'sche Algebra anwenden, mit den Vergleichsoperatoren, sowie mit der Verkettung durch die Operatoren and und or.
Dabei liefert #expr zwei Ausgabewerte zurück: 1 für wahr; 0 für falsch.
Dabei lassen sich jedoch nur Zahlenwerte sinnvoll vergleichen, für den Vergleich von Zeichenketten, sowie erweiterter Vergleichslogiken mit Bedingungen, gibt es gesonderte Bedingungs-Funktionen
| Beispiel | Ergebnis |
|---|---|
{{#expr: 2 = 1}} |
0 |
{{#expr: 2 > 1}} |
1 |
{{#expr: 2 > 2}} |
0 |
{{#expr: 2 >= 2}} |
1 |
{{#expr: 2 != 1}} |
1 |
{{#expr: (2 != 1) and (1 = 4)}} |
0 |
{{#expr: (2 != 1) or (1 = 4)}} |
1 |
Rundung und Gleitkommazahlen[Bearbeiten | Quelltext bearbeiten]
#expr gibt Ergebnisse nach internem Gleitkommaformat aus. Für die Rundung gibt es diverse Möglichkeiten, die sich unterschiedlich verhalten.
Wie bei der Zahlenverarbeitung durch Computer üblich werden Nullwerte als Nachkommastellen nicht mitgeschrieben. 3.40 wird immer als 3.4 ausgegeben.
| Funktion | Beschreibung | Beispiel und Ergebnis |
|---|---|---|
| Mathematisches Runden auf eine Anzahl von Dezimalstellen | ||
round 0 |
Rundet auf ganze Zahl | {{#expr: 3.14 round 0 }} → 3
|
round x |
Rundet die Zahl auf x stellen. | {{#expr: pi round 2 }} → 3.14
|
| Gezieltes Auf- oder Abrunden | ||
ceil() |
Aufrunden zur nächsten Ganzzahl | {{#expr: ceil(3.22) }} → 4
|
floor() |
Abrunden zur nächsten Ganzzahl | {{#expr: floor(5.77) }} → 5
|
| Entfernen von Nachkommestellen | ||
trunc(x) |
Schneidet Nachkommastellen ab | {{#expr: trunc(3.99) }} → 3
|
- Typische Probleme
- Dezimaltrennzeichen ist immer ein Punkt, kein Komma.
- Ungültige Ausdrücke erzeugen sichtbare Fehlermeldungen.
- Division durch 0 führt zu einem Parserfehler.
- Whitespace kann die Auswertung beeinflussen
- insbesondere vor Klammern
- oder vor Minuszeichen → siehe: Vorzeichen
- Sehr große oder sehr kleine Werte können zu Rundungsfehlern führen.
Textmanipulation[Bearbeiten | Quelltext bearbeiten]
Neben den eigentlichen Parserfunktionen existiert eine Reihe von Funktionen ohne führendes #, die häufig zur Umwandlung von Text genutzt werden. Dazu gehören unter anderem lc, uc, lcfirst, ucfirst, formatnum, padleft, padright, urlencode und anchorencode. Sie werden wie Vorlagen in doppelten geschweiften Klammern verwendet und dienen zum Beispiel dazu, Text zu kleinschreiben, Zahlen zu formatieren oder Zeichen für URLs zu kodieren. Da erweiterte Textoperationen wie Längenberechnungen oder Ersetzungen in Wikonia nicht über String-Parserfunktionen bereitgestellt werden, übernimmt dies das Modul:String in Verbindung mit Lua; die Übersicht dazu steht auf Parserfunktionen/Textmanipulation.
Nicht aktivierte String-Funktionen und Alternativen[Bearbeiten | Quelltext bearbeiten]
Die optionalen String-Funktionen der Erweiterung ParserFunctions (z. B. #len oder #sub) sind in Wikonia nicht aktiviert. Stattdessen stehen die gleichnamigen oder erweiterten Lua-Funktionen des Modul:String zur Verfügung, die in vielen Wikimedia-Wikis als Standardlösung verwendet werden. Die folgende Tabelle zeigt die üblichen ParserFunctions-Stringfunktionen und jeweils passende Alternativen im Modul:
| ParserFunctions | Enstprechung im Modul:String | Hinweis |
|---|---|---|
#len
|
{{#invoke:String|len|text}}
|
Zeichenanzahl bestimmen |
#sub
|
{{#invoke:String|sub|text|start|end}}
|
Teilstring |
#pos
|
{{#invoke:String|pos|text|index}}
|
Zeichen an Position |
#rpos
|
– | keine Rückwärtssuche im Modul vorhanden |
#replace
|
{{#invoke:String|replace|source|pattern|replacement|limit|plain}}
|
Ersetzt ein Muster |
#count
|
{{#invoke:String|count|source|pattern|plain}}
|
Zählt Treffer eines Musters |
#match
|
{{#invoke:String|match|source|pattern|start|match_number|plain|nomatch}}
|
Muster auslesen |
#explode
|
– | keine Split-Funktion im Modul vorhanden |
#urldecode
|
– | vom Modul nicht abgedeckt |
Siehe auch
- Hilfe:Vorlagen – Verwendung von Vorlagen
- Hilfe:Vorlagenprogrammierung – Einstieg in die Programmierung
- /Bedingungen – Funktionen zu Konditionen (if, switch, etc.)
- /Datum und Zeit – Auswertung und Darstellung von Zeiten
- /Struktur und Titel – Wiki-Titel und Unterseiten auswerten
- Hilfe:Magische Wörter – Globale Werte auslesen
