Jewiki unterstützen. Jewiki, die größte Online-Enzyklopädie zum Judentum.
Helfen Sie Jewiki mit einer kleinen oder auch größeren Spende. Einmalig oder regelmäßig, damit die Zukunft von Jewiki gesichert bleibt ... Vielen Dank für Ihr Engagement! (→ Spendenkonten) |
How to read Jewiki in your desired language · Comment lire Jewiki dans votre langue préférée · Cómo leer Jewiki en su idioma preferido · בשפה הרצויה Jewiki כיצד לקרוא · Как читать Jewiki на предпочитаемом вами языке · كيف تقرأ Jewiki باللغة التي تريدها · Como ler o Jewiki na sua língua preferida |
Vorlage:TitelFormat/core
Diese Vorlage ist Untervorlage für Vorlage:TitelFormat und nur von dieser zu benutzen oder von geübten Vorlagenprogrammierern unter Beachtung der Vorgaben in TitelFormat direkt einzusetzen. Sie erledigt die Hauptarbeit für diese. Die Konstruktion als Untervorlage ist aus zwei Gründen notwendig:
Statt Untervorlagen wird nur auf die Parserfunktion padleft zurückgegriffen, um die Expansionsgröße nicht zu sprengen. Außer sich selbst wird von /core keinerlei externe Vorlage benutzt. Credits to Wikipedia:en:Category:String manipulation templates. ParameterDie Parameter-Systematik gilt für alle Untervorlagen der Familie /core und ihre Variationen.
ErgebnisDas Resultat von /core ist:
ProgrammierungEffizienzMaßnahmen zur Effizienzsteigerung bei der Abarbeitung sind:
Eine weitere Optimierung wäre möglich, wenn es eine Funktion right(T,n) geben würde. Sowohl padleft wie auch padright ermöglichen aber nur ein left(T,n) – ansonsten könnte man grundsätzlich mit einem String fester Länge arbeiten, also den letzten 10 oder ohne Rekursion 4 Zeichen und nur diese analysieren (von links aufgefüllt). Die Länge L könnte dann durch diese Konstante ersetzt werden, die Berechnung der Länge wäre vermeidbar, die size wäre jeweils geringer. – Str right ist aber äußerst rechenintensiv, ruft auch nur Str len auf, beschränkt den Zeichensatz und vervielfacht den Aufwand. RekursionEigentlich war es so gedacht, eine einzige /core rekursiv einzubinden. Wegen „Vorlagenschleife“ ist dies jedoch zurzeit nicht möglich. Sollte diese Beschränkung einmal aufgehoben werden, kann auf auf die Selbstrekursion zurückgegriffen werden. Die Programmierung lautet (zwangsläufig nicht ausgetestet): {{#switch: {{{M}}}
| >={{TitelFormat/core |T={{{T}}}|L={{{L}}}|M=+|K=''|P=.|X={{padleft:|{{{L}}}|&{{{T}}}}}}}
| +={{#switch: &{{{T}}}
| {{{X}}}!
| {{{X}}}?
| {{{X}}}…
| {{{X}}}!
| {{{X}}}.
| {{{X}}}?
| {{{X}}}. = {{{K|}}}
| {{{X}}}' = {{TitelFormat/core |T={{{X}}}|L={{{L}}}|M='|K={{{K|}}}|P={{{P|}}}
|X={{padleft:|{{{L}}}|&{{{X}}}}}}}
| {{{X}}}] = {{TitelFormat/core |T={{{X}}}|L={{{L}}}|M=]|K={{{K|}}}|P={{{P|}}}
|X={{padleft:|{{{L}}}|&{{{X}}}}}}}
| {{{X}}}»
| {{{X}}}«
| {{{X}}}›
| {{{X}}}‹
| {{{X}}}‘
| {{{X}}}’
| {{{X}}}”
| {{{X}}}“
| {{{X}}}"
| {{{X}}}" = {{TitelFormat/core |T={{{T}}}|L={{{L}}}|M=+|K={{{K|}}}|P={{{P|}}}
|X={{padleft:|{{{L}}}|&{{{T}}}}}}}
| #default = {{{K|}}}{{{P|}}}
}}
| ]={{#ifeq: &{{{T}}} | {{{X}}}]
| {{TitelFormat/core |T={{{X}}}|L={{{L}}}|M=+|K={{{K|}}}|P={{{P|}}}
|X={{padleft:|{{{L}}}|&{{{X}}}}}}}
| {{TitelFormat/core |T={{{T}}}|L={{{L}}}|M=+|K={{{K|}}}|P={{{P|}}}
|X={{padleft:|{{{L}}}|&{{{T}}}}}}}
}}
| '={{#ifeq: &{{{T}}} | {{{X}}}'
| {{TitelFormat/core |T={{{X}}}|L={{{L}}}|M=2'|K={{{K|}}}|P={{{P|}}}
|X={{padleft:|{{{L}}}|&{{{X}}}}}}}
| {{TitelFormat/core |T={{{T}}}|L={{{L}}}|M=+|K={{{K|}}}|P={{{P|}}}
|X={{padleft:|{{{L}}}|&{{{T}}}}}}}
}}
| 2'={{#ifeq: &{{{T}}} | {{{X}}}'
| {{TitelFormat/core |T={{{T}}}|L={{{L}}}|M=+|K={{{K|}}}|P={{{P|}}}
|X={{padleft:|{{{L}}}|&{{{T}}}}}}}
| {{TitelFormat/core |T={{{X}}}|L={{{L}}}|M=+|P={{{P|}}}
|X={{padleft:|{{{L}}}|&{{{X}}}}}}}
}}
}}
Die rekursive Analyse des Titel-Endes findet alle Kombinationen aus Verlinkung, Anführungszeichen, Satzzeichen und Kursiv-Syntax. Erläuterungen:
Die Auffindung einer Rekursion ist nicht auf Selbstrekursion beschränkt; Umdribbeln per Doppelpass über /core+ funktioniert leider nicht. Zyklische Zeichenersetzung
Nicht-rekursive AushilfslösungEine leicht reduzierte Funktionalität lässt sich einstweilen erreichen, wenn die einzelnen Modi in verschiedene Untervorlagen aufgespalten werden. Sehr komplexe Formen des ursprünglichen Titels werden nicht mehr richtig erkannt; dann steht halt mal ein Punkt zuviel dahinter. core
{{TitelFormat/core1 |T={{{T}}}|L={{{L}}} |X={{padleft:|{{{L}}}|&{{{T}}}}}}}
Entspricht M=> bei der Rekursion. core1
{{#switch: &{{{T}}}
| {{{X}}}!
| {{{X}}}?
| {{{X}}}…
| {{{X}}}!
| {{{X}}}.
| {{{X}}}?
| {{{X}}}. = ''
| {{{X}}}' = {{TitelFormat/core2 |T={{{X}}}|L={{{L}}}|M='
|X={{padleft:|{{{L}}}|&{{{X}}}}}}}
| {{{X}}}] = {{TitelFormat/core2 |T={{{X}}}|L={{{L}}}|M=]
|X={{padleft:|{{{L}}}|&{{{X}}}}}}}
| {{{X}}}»
| {{{X}}}«
| {{{X}}}›
| {{{X}}}‹
| {{{X}}}‘
| {{{X}}}’
| {{{X}}}”
| {{{X}}}“
| {{{X}}}"
| {{{X}}}" = {{TitelFormat/core2 |T={{{X}}}|L={{{L}}}|M=+
|X={{padleft:|{{{L}}}|&{{{X}}}}}}}
| #default = ''.
}}
Entspricht M=+ bei der Rekursion. core2
{{#switch: &{{{T}}}
| {{{X}}}!
| {{{X}}}?
| {{{X}}}…
| {{{X}}}!
| {{{X}}}.
| {{{X}}}?
| {{{X}}}. = ''
| {{{X}}}' = {{#ifeq: {{{M}}} | '
| .
| {{TitelFormat/core3 |T={{{X}}}|L={{{L}}}
|X={{padleft:|{{{L}}}|&{{{X}}}}}}}
}}
| {{{X}}}] = {{#ifeq: {{{M}}} | ]
| {{TitelFormat/core3 |T={{{X}}}|L={{{L}}}
|X={{padleft:|{{{L}}}|&{{{X}}}}}}}
| ''.
}}
| #default = {{#ifeq: {{{M}}} | '
| .''
| ''.}}
}}
Entspricht den Modi + ] ' bei der Rekursion. core3
{{#switch: &{{{T}}}
| {{{X}}}!
| {{{X}}}?
| {{{X}}}…
| {{{X}}}!
| {{{X}}}.
| {{{X}}}?
| {{{X}}}. = ''
| #default = ''.
}}
Untauglicher AnsatzDie nachfolgende Programmierung für Vorlage:TitelFormat hat erhebliche Nachteile:
''{{{1}}}{{#switch: {{Str index|{{{1}}}}|{{Str len|{{{1}}}}}}}
| .
| !
| ?
| !
| .
| ? = ''
| "
| »
| «
| ›
| ‹
| ‘
| ”
| “
| "
| ] = {{#switch: {{Str index|{{{1}}}}|{{#expr:{{Str len|{{{1}}}}}-1}}}}
| !
| ?
| . = ''
| #default = ''.
}}
| #default = ''.
}}
|
|