Benutzer:PerfektesChaos/js/WikiSyntaxTextMod/usage/replace/template
WikiSyntaxTextMod → Benutzung → Ersetzungen → Vorlagen
Benutzerdefinierte Vorlagen-Ersetzungen wirken nicht auf geschützte Bereiche.
Die Syntaxelemente bestimmter Vorlageneinbindungen lassen sich allgemein nicht durch Text-Ersetzungen ändern. Abhängig von Eigenschaften des Wikitextes wird intern festgelegt, ob und welche Vorlageneinbindungen in Elemente zerlegt werden.
Link-Ersetzungen innerhalb von Vorlageneinbindungen, auf die benutzerdefinierte Vorlagen-Ersetzungen wirken sollen, sind bereits ausgeführt worden, bevor die Vorlageneinbindung als Ganzes bearbeitet wird.
Die Technik befindet sich zurzeit noch im Aufbau und in der Erprobung; weitere Möglichkeiten sind vorgesehen. Die Methodik ist komplex.
Definition
BearbeitenEs wird eine Liste von komplexen Operationen vereinbart, die in genau dieser Reihenfolge abgearbeitet werden.
mw.libs.WikiSyntaxTextMod.config.mod.template = [
{ detect: { title:
Vorlagenerkennung-1},
- Aktivitäten-1
},
- Aktivitäten-1
{ detect: { title:
Vorlagenerkennung-2},
- Aktivitäten-2
},
- Aktivitäten-2
- … … …
{ detect: { title:
Vorlagenerkennung-n},
- Aktivitäten-n
}
- Aktivitäten-n
];
Jede Operation muss eine Komponente detect
enthalten und darin einen Regulären Ausdruck title
– darüber wird ausgewählt, auf welche Vorlageneinbindungen die Aktivitäten wirken sollen.
Jedes Operations-Objekt enthält weitere Komponenten für die Aktivitäten:
- Operations-Objekt
detect
BearbeitenDie Komponente detect
enthält Kriterien, die alle zutreffen müssen, damit die Operation ausgeführt wird. Dabei ist title
Pflichtangabe.
- prolog (geplant)
title
– Regulärer Ausdruck (Zeichenkette)
Wirkt auf den dekodierten Namen der Vorlage(n); Namensraum ist entfernt; Groß- oder Kleinschreibung des ersten Buchstabens muss ermöglicht sein.
Das Einschließen in^
und$
ist nicht erforderlich. Es wird immer der ganze Name gefordert; sollen nur Teile bereits wirksam werden, ist.*
vor- oder nachzustellen.- epilog (geplant)
rename
BearbeitenDie Aktivität rename
benennt die gesamte Vorlage oder einzelne Parameter um.
Dementsprechend gibt es zwei Unterkomponenten
rename.title
– Name der Vorlagerename.params
– einzelne Parameter
Die Namensersetzung rename.title
ist ein komplexer Ersetzungsausdruck; im Fall der Parameter ein Array von komplexen Ersetzungsausdrücken.
rename.title
BearbeitenDer Wert ist ein Array mit zwei oder drei Elementen:
- Suchausdruck
Zeichenkette oder regulärer Ausdruck
Wenn leer odertrue
, wird alles akzeptiert; damit jeder Titel, der vondetect
zugelassen wurde. - Ersetzungsausdruck (Zeichenkette oder Funktion)
- Flag (optional)
- Sofern der Suchausdruck eine Zeichenkette ist: RegExp-Flag.
Beispiel:
{ detect: { title: "[Ii]nfobox (Autobahn|hochrangige Straße)" },
rename: { title: [true, "Infobox hochrangige Straße"] }
}
Alle Vorkommen der alten Schreibweise der Infobox werden gefunden und ersetzt.
rename.params
BearbeitenDer Wert ist ein Array beliebiger Länge, deren jeder eine Umbenennung für einen Einzelparameter angibt.
Wenn der entstehende neue Parametername bereits vorhanden war (auch bei leerem Wert), so erfolgt keine Umbenennung.
Der Wert für jeden Einzelparameter ist ein Array mit zwei oder drei Elementen:
- Suchausdruck (Zeichenkette oder regulärer Ausdruck)
- Ersetzungsausdruck (Zeichenkette oder Funktion)
- Flag (optional).
- Sofern der Suchausdruck eine Zeichenkette ist: RegExp-Flag als Zeichenkette.
- Andere Datentypen werden hier ignoriert; format.order kennzeichnet damit Pflichtparameter.
clear
BearbeitenDie Aktivität clear
entfernt Parameter.
Dabei ist clear
ein Array, dessen Elemente Arrays mit zwei Komponenten sind:
- Zuerst ein Regulärer Ausdruck (Zeichenkette), durch den die gewünschten Parameter beschrieben werden, und
false
– nur bei leerem Parameterwert entfernen;true
– auf jeden Fall entfernen.
Normalerweise würden nur ein oder zwei Elemente im Array clear
benötigt, eines für false
und eines für true
– weitere Elemente werden aber genauso abgearbeitet.
Sollten Umbenennungen definiert sein, so sind diese bereits ausgeführt worden.
Anwendungsbeispiel
BearbeitenBei Einbindungen der drei Vorlagen {{Der Spiegel}}, {{Internetquelle}}, {{Literatur}} sollen Parameter ohne Wertangabe entfernt werden, wie sie häufig beim Ausfüllen von Kopiervorlagen stehenbleiben, aber oft unmöglich sinnvoll mit Werten belegt werden können. Unabdingbare oder oft noch ergänzbare Parameter bleiben zum nachträglichen Ausfüllen stehen.
mw.libs.WikiSyntaxTextMod.config.mod.template = [
{ detect: { title: "^[Dd]er Spiegel$"
},
clear: [ ["^(Jg|Datum|Kommentar|Zitat)$",
false] ]
},
{ detect: { title: "^[Ii]nternetquelle$"
},
clear: [ ["^(autor|hrsg|format|sprache|titelerg"
+ "|werk|seiten|datum|archiv-url|archiv-datum"
+ "|kommentar|zitat|offline)$",
false] ]
},
{ detect: { title: "^[Ll]iteratur$"
},
clear: [ ["^(TitelErg|WerkErg|Band|Nummer|Auflage|Reihe"
+ "|Monat|Tag|Kapitel|Seiten|Spalten"
+ "|ISBN|ISBNistFormalFalsch|DNB|ZDB|LCCN|ISSN"
+ "|Kommentar|Originaltitel|Originalsprache|Übersetzer"
+ "|Online|Zugriff|DOI|arxiv|PMID|OCLC|Typ)$",
false] ]
}
];
format
BearbeitenDie Aktivität format
macht Vorgaben für das Layout, also Leerzeichen oder Zeilenumbrüche. Weiterhin kann die Reihenfolge der Parameter bestimmt werden.
Dabei ist format
ein Objekt mit ein oder zwei Komponenten:
format.order
– Reihenfolgeformat.style
– Layout
Bei Änderung der Reihenfolge der Parameter sollte immer auch das Layout explizit vorgegeben werden, da sonst nicht eindeutig zugeordnet werden kann, in welchem Zusammenhang vorgefundene Zeilenumbrüche und Leerzeichen stehen sollen: In Abhängigkeit von der vorgefundenen Einbindung kann es sonst zu unerwarteten Anordnungen führen.
format.style
BearbeitenDas Objekt format.style
macht detaillierte Vorgaben zum Layout. Es wird standardmäßig auf alle Parameter angewendet, sofern nicht einzelnen Parametern ein eigener style
zugewiesen wurde.
format.order
BearbeitenMit format.order
wird (nach Ausführung von Umbenennungen) angegeben, in welcher Folge die verbliebenen Parameter in der Vorlageneinbindung aufgeführt werden sollen; es ist im einfachen Fall ein Array von Strings mit den einzelnen Namen.
- Bereits vorhandene Parameterzuweisungen werden an die entsprechende Stelle vorgezogen.
- Bislang in der Einbindung fehlende Parameter werden mit leerem Wert eingefügt.
Alle nicht erwähnten Parameter verbleiben am Ende der neuen Parameterliste.
Die Standardform ist ein Array von Strings; alternativ kann an Stelle jeder einzelnen Zeichenkette pro Parameter ein Array benutzt werden, dessen zweites Element [1]
diese Zeichenkette sein muss. Hat ein mögliches drittes Element [2]
den Wert true
, so wird dieser Parameter mit einem leeren Wert an dieser Stelle eingefügt, falls er noch nicht vorhanden war.
Auf den Namen des Parameters war zuvor eine Umbenennung angewendet worden.
style
BearbeitenDas Objekt style
spezifiziert das Layout für die gesamte Vorlage oder einzelne Parameter.
Nicht gewünschte Komponenten können weggelassen werden.
Bezeichner | Bedeutung | Werte | Wirkung |
---|---|---|---|
.indent
|
Anzahl der Leerzeichen vor dem Pipe-Symbol (nach .linebreak )
|
≥ 0 | Feste Vorgabe |
sonst | wie vorgefunden | ||
.lastline
|
(Nur Gesamt-Vorlage) Vorlagen-Ende }} nur in Verbindung mit .linebreak
|
true
|
Neue Zeile (.indent sinnvoll)
|
false
|
Anschluss an letzten Parameter | ||
sonst | wie vorgefunden | ||
.later
|
Leerzeichen nach dem Gleichheitszeichen | true
|
Ein Leerzeichen |
false
|
Kein Leerzeichen | ||
sonst | wie vorgefunden | ||
.leap
|
Leerzeichen nach dem Pipe-Symbol | true
|
Ein Leerzeichen |
false
|
Kein Leerzeichen | ||
sonst | wie vorgefunden | ||
.leave
|
Leerzeichen vor dem Gleichheitszeichen | true
|
Mindestens eins |
false
|
Keines wäre möglich | ||
sonst | wie vorgefunden | ||
.linebreak
|
Zeilenumbruch vor dem Pipe-Symbol (und vor .indent )
|
true
|
Genau einer |
false
|
Keiner | ||
sonst | wie vorgefunden | ||
.lineup
|
(Nur Gesamt-Vorlage) Ausrichtung aller Gleichheitszeichen nur in Verbindung mit .linebreak sinnvoll
|
true
|
Gleiche Position |
sonst | wie vorgefunden | ||
.lone
|
Leerzeichen nach Gleichheitszeichen ohne Parameterwert nur in Verbindung mit .later sinnvoll
|
true
|
Auch dann Leerzeichen, wenn kein Parameterwert |
sonst | Nur dann Leerzeichen, wenn .later und Parameterwert
|
Vorlagenparameter-Schema
BearbeitenEs kann das Schema für eine Vorlage in einer Variablen vorgegeben werden und danach dieses Array sowohl für rename.params
als auch für format.order
benutzt werden.
Beispiel (Vorlage:BBKL):
var vorlageBBKL = [
[ false, "1", true ],
[ /autor/i, "autor", false ],
[ /artikel/i, "artikel", false ],
[ /band/i, "band", false ],
[ /spalten/i, "spalten", false ]
];
mw.libs.WikiSyntaxTextMod.config.mod.template = [
{ detect: { title: "[Bb]BKL" },
rename: { title: [true, "BBKL"],
params: vorlageBBKL },
format: { order: vorlageBBKL }
}
];
Wirkung:
- Falls seltsamerweise als Vorlagenname
bBKL
benutzt worden war, wird dies beiläufig ausgebügelt. - Dasselbe Array mit dem Parameterschema
vorlageBBKL
wird zweimal ausgewertet. - Die ersten beiden Elemente jedes einzelnen Arrays in
vorlageBBKL
werden aufrename.params
wirken.- Fehler in der Groß- und Kleinschreibung der Parameter werden berichtigt, falls sie falsch angegeben wurden. Das wird durch den regulären Ausdruck als erstes Element bewirkt, der mit dem Flag
i
(für ignore case) auf beliebige Schreibung reagiert.
- Fehler in der Groß- und Kleinschreibung der Parameter werden berichtigt, falls sie falsch angegeben wurden. Das wird durch den regulären Ausdruck als erstes Element bewirkt, der mit dem Flag
- Das Array als Ganzes sortiert mittels
format.order
die Reihenfolge der Parameter in der Einbindung.- Das zweite und dritte Element des Arrays gibt den Namen des Parameters an, und ob er hinzugefügt werden soll, falls er fehlt.
- In der Vorlagenprogrammierung sei der erste Parameter ein unbenannter Pflichtparameter; die weiteren optionale benannte Parameter.
- Um zu erreichen, dass bisher nicht angegebene optionale Parameter mit leerem Wert eingefügt werden, wäre jeweils das
false
durchtrue
zu ersetzen.
- Um zu erreichen, dass bisher nicht angegebene optionale Parameter mit leerem Wert eingefügt werden, wäre jeweils das