Hilfe:Vorlagen/ParserFunctions

Aus PokéWiki
Zur Navigation springen Zur Suche springen

Dieser Artikel basiert auf dem Wikipedia-Artikel „Hilfe:Vorlagenprogrammierung“. Auf ihn wird daher – ungeachtet anderer Bestimmungen auf dieser Seite – dieselbe Lizenz angewandt wie auf Wikipedia-Artikel:
Creative-Commons-Lizenz Attribution-ShareAlike 3.0 Unported

Hilfeseiten
Allgemein:
Seitengestaltung
Community:
Spezielles:

ParserFunctions sind Funktionen innerhalb von Vorlagen, die eine noch bessere Programmierung ermöglichen.

Beschreibung der ParserFunctions

Funktion if

Die #if-Funktion ist ein Wenn-Dann-Sonst-Konstrukt. Die Syntax:

{{#if: <bedingung> | <dann-text> | <sonst-text>}}

Enthält die <bedingung> Text, gilt sie als erfüllt und es wird <dann-text> zurückgegeben. Ist <bedingung> hingegen leer oder besteht ausschließlich aus Leerzeichen (whitespace), gilt sie als nicht erfüllt und es wird <sonst-text> zurückgegeben. <sonst-text> kann auch weggelassen werden, dann wird in diesem Fall nichts zurückgegeben.

Eine wichtige Anwendung ist der Test, ob ein bestimmter Parameter zugewiesen wurde. Dazu gibt man dem Parameter in der Testbedingung einen leeren default-Wert. Beispiel:

{{#if: {{{foo|}}} | foo hat den Wert {{{foo}}} | foo hat keinen Wert }}

Achtung: #if unterstützt keine Gleichungen oder Ähnliches. Siehe dafür #ifeq und #ifexpr.

Funktion ifeq

#ifeq vergleicht zwei Zeichenketten und gibt je nach Ergebnis verschiedene Texte zurück.

{{#ifeq: <text 1> | <text 2> | <text wenn gleich> | <text wenn ungleich> }}

Funktion ifexist

#ifexist prüft, ob ein angegebenes Lemma existiert, und gibt je nachdem verschiedene Texte zurück.

{{#ifexist: <Lemma> | <Text wenn Lemma existiert> | <Text wenn Lemma nicht existiert> }}

Interwiki-Links werden nicht geprüft. Es wird immer angenommen, dass Lemmata in anderen Wikis nicht existieren.

Funktion expr

#expr berechnet mathematische Ausdrücke.

{{ #expr: <ausdruck> }}
Mögliche Operationen
Operator Operation Beispiel
* Multiplikation {{#expr: 30 * 7}} = 210
/ oder div Division {{#expr: 30 / 7}} = 4.2857142857143
+ Addition {{#expr: 30 + 7}} = 37
- Subtraktion (or Negation) {{#expr: 30 - 7}} = 23
mod Modulo, der Rest einer Division {{#expr: 30 mod 7}} = 2
round Rundet die Zahl auf der linken Seite auf die Anzahl Nachkommastellen, die von der Zahl auf der rechten Seite angegeben wird {{#expr: 30 / 7 round 7}} = 4.2857143
= Gleichheit {{#expr: 30 = 7}} = 0
<> oder != Ungleichheit {{#expr: 30 <> 7}} = 1
< Kleiner als {{#expr: 30 < 7}} = 0
> Größer als {{#expr: 30 > 7}} = 1
<= Kleiner oder gleich {{#expr: 30 <= 7}} = 0
>= Größer oder gleich {{#expr: 30 >= 7}} = 1
and Logisches UND {{#expr: 30 and 7}} = 1
or Logisches ODER {{#expr: 30 or 7}} = 1
not Logisches NICHT {{#expr: not 7}} = 0
( ) Gruppierung/Klammerung {{#expr: (30 + 7) * 7 }} = 259

Die booleschen Operatoren behandeln 0 (Null) als falsch und 1 als wahr. Zahlen werden mit dem Punkt als Dezimaltrenner angegeben.

Beispiel:

{{ #expr: (100 - 32) / 9 * 5 round 0 }}

ergibt:

38

Damit werden 100 Fahrenheit auf die Celsius-Skala umgerechnet (auf die nächste Ganze Zahl gerundet).

Da diese Berechnungen aus Kompatibilitätsgründen mit dem englischen Zahlenformat durchgeführt werden (Beispiel: {{ #expr: 13000 / 3.1 round 2 }} ergibt 4193.55) müssen solche Zahlen zusätzlich in das im deutschen Sprachraum übliche Format umgewandelt werden (Beispiel: {{ formatnum: {{ #expr: 13000 / 3.1 round 2 }} }} ergibt 4.193,55).

Wie sind die Zahlen gerundet?

In dieser ParserFunction der Operator round kann Zahlen runden.

Operator Wikicode Ergebnis Hinweis
round -2 {{#expr: 1234.5678 round -2}} 1200 Negativer Operand rundet die Zahl links vom Dezimalpunkt.
round 2 {{#expr: 1234.5678 round 2}} 1234.57 Positiver Operand rundet die Zahl rechts vom Dezimalpunkt.
round 2.3 {{#expr: 1234.5678 round 2.3}} 1234.57 Dezimalstellen im Rundungsindex haben keinen Einfluss auf das gerundete Ergebnis.
trunc {{#expr: trunc 1234.5678}} 1234 trunc löscht alles nach dem Dezimalpunkt.

Fehler

Allen Operatoren muss eine Zahl folgen.

{{#expr: 5 + }}Fehler im Ausdruck: Fehlender Operand für +

Zahlen, die als Divisionsoperanden sehr groß sind, werden als 0 behandelt.

{{#expr: 123 mod (2^64-1)}}Division durch Null (soll 123 sein)

im Vergleichen mit

{{#expr: (2^64-1) mod 123}} → 0

Diese ParserFunction kann nur mit Zahlen richtig funtionieren, jeder Wert wie Text wird ignoriert.

{{#expr: "1" + "1"}}Fehler im Ausdruck: Nicht erkanntes Satzzeichen „"“

{{#expr: a + a}}Fehler im Ausdruck: Unerkanntes Wort „a“

Funktion ifexpr

#ifexpr Wertet einen mathematischen Ausdruck aus.

{{#ifexpr: <ausdruck> | <dann-text> | <sonst-text> }}

Ist das Ergebnis von <ausdruck> 0 (Null), wird <sonst-text> zurückgegeben. Sonst wird <dann-text> zurückgegeben. <sonst-text> kann auch weggelassen werden, dann wird in diesem Fall nichts zurückgegeben.

Die Syntax für Ausdrücke wird in der Beschreibung von expr erklärt.

Funktion replace

#replace erlaubt es, in einem bestimmten Text einen Teil-Text durch einen anderen zu ersetzen.

{{#replace: <zu ersetzender Text> | <neuer Text> | <durchsuchter Text>}}

Dabei werden alle Vorkommen von <zu ersetzender Text> in <durchsuchter Text> durch <neuer Text> ersetzt, LeerraumWikipedia-Icon am Anfang und Ende der einzelnen Parameter wird abgeschnitten.

{{#replace:Foo|Bar|Foo Bar}} ergibt Bar Bar

Zusätzlich dazu gibt es mit #ireplace auch eine case-insensitive Funktion zum Ersetzen. Die Syntax entspricht dabei vollständig der des gewöhnlichen #replace.

{{#ireplace:foo|Bar|Foo Bar}} ergibt Bar Bar

Funktion switch

#switch vergleicht einen Wert mit mehreren anderen. Die Grundsyntax ist:

{{#switch: <vergleichswert>
| <wert1> = <ergebnis1>
| <wert2> = <ergebnis2>
| ...
| <wertn> = <ergebnisn>
| #default = <standardergebnis>
}}

switch geht alle Werte durch, bis der Vergleichswert gefunden wird. Dann wird das entsprechende Ergebnis (hinter dem Gleichheitszeichen) zurückgegeben. Wenn kein Wert übereinstimmt, wird der Eintrag unter #default verwendet, sofern es diesen gibt. (Falls das Standardergebnis kein Gleichheitszeichen enthält, kann #default auch weggelassen werden.)

„Durchfall“-Werte sind ebenfalls möglich:

{{#switch: <vergleichswert>
| <wert1>
| <wert2>
| <wert3> = <ergebnis1,2,3>
| ...
| <wertn> = <ergebnisn>
| #default = <standardergebnis>
}}

Hier wird für <wert1>, <wert2> und <wert3> derselbe Wert <ergebnis1,2,3> zurückgegeben.

Funktion dictionary

#dictionary bildet eine unter Umständen ressourcengünstige Alternative zu #switch. Während die switch-Funktion mit jedem zusätzlichem Element linear mehr Knoten erzeugt (einsehbar in den Profilingdaten des Parsers nach dem Laden einer Seite), sind diese Daten bei dictionary konstant. Dies hängt damit zusammen, dass diese Funktion lediglich zwei, maximal drei Parameter verwendet, während bei switch mit zunehmender Element-Anzahl die Anzahl Parameter steigt. Damit kommt allerdings ein gewisses Risiko: Der Inhalt aller möglichen Ergebnisse wird bei dictionary expandiert, während switch lediglich den Parameter expandiert, dessen Wert dem Vergleichswert entspricht. Stehen im Ergebnis eines Wertes bei #dictionary also nicht nur textuelle Werte, kann es effizienter sein, auch bei großen Datenmengen #switch zu verwenden. Außerdem ist bei der Verwendung von Variables Vorsicht geboten, da diese dabei ebenfalls aktualisiert werden. Ansonsten ähnelt die Syntax von dictionary der von switch:

{{#dictionary: <vergleichswert> | <standardergebnis> |
<wert1> = <ergebnis1>
<wert2> = <ergebnis2>
...
<wertn> = <ergebnisn>
}}

Wie bei #switch kann auch bei #dictionary der Standardergebniswert weggelassen werden:

{{#dictionary: <vergleichswert> |
<wert1> = <ergebnis1>
<wert2> = <ergebnis2>
...
<wertn> = <ergebnisn>
}}

Außerdem sind auch hier „Durchfall“-Werte möglich:

{{#dictionary: <vergleichswert> |
<wert1>;<wert2>;<wert3> = <ergebnis1,2,3>
...
<wertn> = <ergebnisn>
}}

Zu beachten ist hierbei, dass die Werte alle in einer Zeile stehen und durch ein Semikolon getrennt werden.

Funktion time

#time ist eine Zeit- und Datums-Formatierungs-Funktion. Sie liefert die Koordinierte Weltzeit (UTC).

Für die lokale Zeit kann die Funktion #timel angewandt werden.

Die Syntax ist

{{ #time: format }}

oder

{{ #time: format | time }}

Wenn „time“ nicht angegeben wird, wird die Zeit zum Zeitpunkt der Umwandlung in HTML benutzt. Durch das Servercaching kann es dabei zu Abweichungen bei der Artikelanzeige bis zu einer Woche kommen. Eine manuelle Aktualisierung kann durch einen „null edit“ (Seite bearbeiten und Speichern ohne Änderung) erfolgen.

Der „format“-Parameter ist ähnlich den der PHP-Datumsparameter.

Die folgenden Codes haben dieselbe Bedeutung wie in PHP. Bedeutende Differenzen vom PHP-Verhalten (abgesehen von sprachlichen und lokalen Unterschieden) sollten als Fehler der Parserfunktionen gesehen und als Bug gemeldet werden. Alle numerischen Codes geben Zahlen entsprechend der lokalen Spracheinstellung zurück, durch die Nutzung des xn-Codes kann dieses Verhalten überschrieben werden.

Code Beschreibung Ausgabe
d Tag, mit führender Null 28
D Abkürzung des Wochentages, nur in seltenen Fällen internationalisiert. Do
j Tag, ohne führende Null 28
W Nummer der aktuellen Kalenderwoche (z.B. 04 oder 52) nach ISO-8601 13
l Ausgeschriebener Name des Wochentages, nur in seltenen Fällen internationalisiert. Donnerstag
F Ausgeschriebener Name des Monatsnamens, in der Regel internationalisiert März
m Monat, mit führender Null. 03
M Abgekürzter Name des Monatsnamens, in der Regel internationalisiert Mär.
n Monat, ohne führende Null. 3
Y Jahr, 4-stellig 2024
y Jahr, 2-stellig. 24
H Stunde, mit führender Null 11
i Minute, mit führender Null 30
s Sekunde, mit führender Null 47

Die folgenden Codes sind Erweiterungen zu PHP:

Code Beschreibung
xn Formatiert den nächsten numerischen Code als Roh-ASCII. Beispiel, in Hindi: {{ #time:H, xnH}} ergibt ०६, 06.
xr Formatiert den nächsten numerischen Code als römische Zahl.
xg Gibt die Genitivform des Monatsnamens aus; für Sprachen, die zwischen Genitiv und Nominativ unterscheiden.
xx Der Buchstabe „x“

Jedes unbekannte Zeichen wird unbearbeitet zur Ausgabe durchgereicht. Dazu gibt es zwei Konventionen:

  • Zeichen in doppelten Anführungszeichen werden als solche ausgegeben (ohne Anführungszeichen). Anführungszeichen alleine werden als solche ausgegeben. Beispiele:
    • {{ #time: "Der Monat ist" F}} → Der Monat ist März
    • {{ #time:i's"}} → 30'47"
  • Backslash-escaping wird unterstützt: \H ergibt das Zeichen H, \" ergibt das Zeichen ".

Das Format des „time“-Parameters ist identisch mit der PHP-Funktion strtotime(). Relative Angaben, wie zum Beispiel „+10 hours“, werden unterstützt, welche für eine Zeitzonen-Berechnung genutzt werden können.

Code Beschreibung Ausgabe
{{ #time:j"."n"."Y H":"i":"s|2 days 10 hours 40 minutes ago}} Das angezeigte Datum wird um 2 Tage, 10 Stunden und 40 Minuten nach hinten verschoben 26.3.2024 00:50:47
{{ #time:j"."n"."Y H":"i":"s|yesterday}} Gestern 27.3.2024 00:00:00
{{ #time:j"."n"."Y H":"i":"s|tomorrow}} Morgen 29.3.2024 00:00:00
{{#time:j"."n"."Y H":"i":"s|2 days}} Übermorgen 30.3.2024 11:30:47
{{#time:j"."n"."Y H":"i":"s|2 years 2 months 2 weeks 2 days}} In 2 Jahren, 2 Monaten, 2 Wochen und 2 Tagen 13.6.2026 11:30:47
{{#time:j"."n"."Y H":"i":"s|1 year 1 month 1 week 1 day}} In einem Jahr, einem Monat, einer Woche und einem Tag 6.5.2025 11:30:47

Siehe das „GNU tar manual“ für weitere Informationen.

Funktion titleparts

#titleparts gibt die angegebene Anzahl an Teilen (ab einer angegebenen Stelle) eines Seitentitels zurück, die durch einen Schrägstrich („/“) getrennt sind. Beispiele:

  • {{#titleparts:Hilfe:Verweis/a/b|0}} ergibt Hilfe:Verweis/a/b (Der ganze Name)
  • {{#titleparts:Hilfe:Verweis/a/b|1}} ergibt Hilfe:Verweis
  • {{#titleparts:Hilfe:Verweis/a/b|2}} ergibt Hilfe:Verweis/a
  • {{#titleparts:Hilfe:Verweis/a/b|1|2}} ergibt a
  • {{#titleparts:Hilfe:Verweis/a/b|2|2}} ergibt a/b

Verwendung mit subst

Die ParserFunctions können auch mit subst verwendet werden, solange kein Leerzeichen zwischen subst: und # steht.