Benutzer:PerfektesChaos/js/WikiSyntaxTextMod/usage/replace/template

WikiSyntaxTextModBenutzungErsetzungen → Vorlagen

Vorlagen-Ersetzung

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

Bearbeiten

Es 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 },
{ detect: { title: Vorlagenerkennung-2 },
Aktivitäten-2 },
… … …
{ detect: { title: Vorlagenerkennung-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
  • clear – (Leere) Parameterwerte entfernen
  • rename – Vorlage oder Parameter umbenennen
  • change(geplant)
  • params(geplant)
  • format – Anordnung (Layout)
  • hook(geplant)

Die 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)

Die Aktivität rename benennt die gesamte Vorlage oder einzelne Parameter um.

Dementsprechend gibt es zwei Unterkomponenten

  • rename.title – Name der Vorlage
  • rename.params – einzelne Parameter

Die Namensersetzung rename.title ist ein komplexer Ersetzungsausdruck; im Fall der Parameter ein Array von komplexen Ersetzungsausdrücken.

rename.title

Bearbeiten

Der Wert ist ein Array mit zwei oder drei Elementen:

  • Suchausdruck
    Zeichenkette oder regulärer Ausdruck
    Wenn leer oder true, wird alles akzeptiert; damit jeder Titel, der von detect 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

Bearbeiten

Der 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.

Die Aktivität clear entfernt Parameter.

Dabei ist clear ein Array, dessen Elemente Arrays mit zwei Komponenten sind:

  1. Zuerst ein Regulärer Ausdruck (Zeichenkette), durch den die gewünschten Parameter beschrieben werden, und
  2. 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

Bearbeiten

Bei 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] ]
   }
                                                    ];


Die 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 – Reihenfolge
  • format.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

Bearbeiten

Das 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

Bearbeiten

Mit 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.

Das Objekt style spezifiziert das Layout für die gesamte Vorlage oder einzelne Parameter.

Nicht gewünschte Komponenten können weggelassen werden.

Komponenten eines style-Objekts
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

Bearbeiten

Es 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 auf rename.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.
  • 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 durch true zu ersetzen.