Benutzer:PerfektesChaos/js/WikiSyntaxTextMod/flow/char

WikiSyntaxTextModSyntaxpolitur → Schritt 1

Einzelzeichen

Der erste Schritt bei der Syntaxpolitur ist die Standardisierung auf der Ebene einzelner Zeichen.

Dies ist die Voraussetzung dafür, dass in weiteren Schritten und bei der späteren Analyse durch bots und andere Benutzerskripte bestimmte Textelemente gefunden werden können.

Zurzeit implementiertes Vorgehen Bearbeiten

1–31 ASCII-Steuerzeichen Bearbeiten

10 – newline
Das einzige willkommene Zeichen ist der Zeilenumbruch.
Alle anderen Zeichen sollen entfernt werden.
9 – hor tab
Der horizontale Tabulator wird durch genau ein Leerzeichen ersetzt.
Dies hat im Wikitext identische Auswirkungen.
Tabulatoren werden oft durch copy&paste von Benutzern eingeschleppt, wenn vorhandene Texte (besonders Aufzählungen und Tabellen) in die Wikipedia eingefügt werden. Beim Editieren im TEXTAREA kommt es dann für Benutzer zu seltsamen Effekten.
Die einzige Ausnahme sind die syntaxhighlight-Bereiche. In ihnen werden die Tabs belassen.[1] Deshalb wird das Vorkommen eines Tabs nur vorgemerkt; falls irgendein Tabulatorzeichen festgestellt wird, so wird deren Bereinigung vertagt auf den Moment, an dem die tag-Analyse abgeschlossen ist und die syntaxhighlight geschützt wurden.
11 – ver tab, 12 – form feed
Diese Zeichen können normalerweise nicht eingegegeben werden, könnten allenfalls mittels copy&paste eingefügt worden sein. Sie werden offenbar zurzeit (2009–2021) auch nicht in der Datenbank abgespeichert. An ihrer Stelle wird anscheinend ein Ersatzcode gesetzt: FFFD16 (replacement character).
Diese beiden Zeichen markieren eine Trennung zwischen Abschnitten. Falls sie tatsächlich einmal im Wikitext gefunden werden sollten, werden sie deshalb durch ein newline ersetzt.
Alle anderen Zeichen ≤ 31
Wie vor; können weder eingefügt werden, noch gibt die Datenbank sie heraus.
Sollten sie trotzdem auftreten, werden sie ersatzlos entfernt.

Unicode-Steuerzeichen Bearbeiten

Schreibrichtung Links-rechts
Die unsichtbaren l-t-r und r-t-l (200E16 und 200F16) mögen bei Interwiki und fremdschriftlichen Artikel-Inhalten sehr sinnvoll sein und werden zunächst belassen.
Sie werden einheitlich als ‎ und ‏ sichtbar gemacht.
Stehen diese Zeichen gerade
werden sie kommentarlos vom Skript entfernt.
Bei Vorlageneinbindung zur Fremdsprachenunterstützung wird die Schreibrichtung in den entsprechenden Schriften bereits geregelt und im Artikel können diese Zeichen folgenlos entfernt werden; siehe benutzerdefinierte Ersetzung.
Breitenlose Zeichen
Dies sind zurzeit 200B16 (ZERO WIDTH SPACE), 200C16 (ZERO WIDTH NON-JOINER) und 200D16 (ZERO WIDTH JOINER) und sie werden einheitlich als ​, ‌ und ‍ sichtbar gemacht.
In nichtlateinischen Schriften haben diese zwar eine gewisse Bedeutung, aber kaum in kurzen Zitaten der deutschsprachigen WP. Unbeabsichtigt stammen sie meist aus Copy&Paste-Einfügungen, etwa von Datenbankabfragen, und können dann gelöscht werden. Sie kommen regelmäßig innerhalb von Interwiki-Links vor und sind dort zwingend notwendig; deshalb werden sie in Verlinkungen unverändert belassen.
Line Separator
In Unicode gibt es den „Line Separator“ 202816, der in normalen Browser-Ansichten nicht dargestellt wird; wikEd weist mit einem kleinen orangen Quadrat darauf hin. Dieser spezielle Zeilenumbruch hat im Wikitext nichts zu suchen; er wird durch einen gewöhnlichen Zeilenumbruch ersetzt. In Verlinkungen wird das Zeichen vom Parser ohnehin ignoriert und deshalb dort ersatzlos entfernt. Das Zeichen stammt aus Copy&Paste-Einfügungen, wenn in der Darstellung des abkopierten Textes bestimmter Textsysteme ein meist „weicher“ Zeilenumbruch eingefügt war.

Unicode-Typografie Bearbeiten

Leerzeichen
Durch einfache Leerzeichen (ASCII) werden ersetzt:
  • 200216 – N-SPACE
  • 200316 – M-SPACE
Nicht-umbrechender Bindestrich
Dieses Zeichen (201116 = 820910 – NON-BREAKING HYPHEN) kann für künftige Darstellung von Webseiten mit verbesserter automatischer Worttrennung sinnvoll sein; allerdings behindert es Suchvorgänge nach Zeichenketten.
Direkt vor oder nach einem (normalen) Leerzeichen oder einem Zeilenumbruch (sowohl \n wie auch <br />) ist es in jedem Fall sinnlos. Hier wird es stets in einen ASCII-Bindestrich umgewandelt.
Eine benutzerdefinierte Umwandlung in einen normalen Bindestrich bleibt unbenommen.

Exotische Zeichen Bearbeiten

  • Statt des normalen Zeichen werden mitunter Schmuckvarianten aus Dingbats benutzt. Diese Kodierungen sind in vielen Fonts (noch) nicht belegt, deshalb beim Leser nicht dargestellt. Software (wie etwa Skripte) wird an der Interpretation gehindert.
    • Statt Gestorben-Zeichens † (822410, dagger) eine der drei Darstellungen 10013–1001510 (271D–271F16); dies wird ersetzt.
    • Statt des Mal-Kreuzchens × (21510, times) eines der beiden Zeichen 10005/1000610 (2715/271616); dies wird ersetzt.
  • Das (männliche) Nummernzeichen º \xBA &ordm; sieht dem Gradzeichen ° \xB0 &deg; zum Verwechseln ähnlich. Vor dem Nummernzeichen müsste ein großes N stehen (Nº); es gibt aber auch Kombinationen mit römischen und arabischen Ziffern. Vorangehende Ziffern weisen auf ein Gradzeichen hin, außerdem käme eine Temperaturangabe (°C) in Frage; in den letztgenannten Fällen wird das Zeichen automatisch berichtigt.
  • Manche Autoren setzen Römische Zahlen 8544–857510 (216016 –217F16) ein – diese sind aber mit den gängigen Fonts beim Leser nicht darstellbar und werden deshalb außerhalb geschützter Bereiche durch die allgemein üblichen Buchstaben ersetzt. Im Kontext von CJK wäre das aber üblich und typografisch vorzuziehen; grenzen diese an, so erfolgt keine Ersetzung.
  • CJK-Zeichen mit lateinischer Entsprechung zwischen lateinischen Zeichen (meist ASCII) werden als ASCII-Zeichen vereinfacht. Das betrifft die Bereiche U+3000-300D und U+FF01-U+FF5E.

Unsichtbare Zeichen Bearbeiten

  • Manche Quelltexte enthalten aus copy&paste-Aktivitäten im normalen TEXTAREA verborgene Zeichen – im wikEd als kleines oranges Quadrat visualisiert (mit Tooltip), die vom Skript als &lrm; oder &zwj; sichtbar gemacht werden und nun manuell gelöscht werden können (und sollten[2]) – siehe etwa auch bugzilla:29794). Bleibt das eingefügte Entity im Quelltext, hat dies keine Wirkung auf die Darstellung des Artikels oder die Funktionalität von Wikilinks. Steht dieses Zeichen gerade am Ende eines Wikilink-Ziels oder Vorlagen-Namens (was relativ häufig vorkommt), wird es kommentarlos vom Skript entfernt.
  • Allgemein werden unsichtbare Zeichen zur Steuerung der Schreibrichtung (Links/Rechts) als hexadezimale Entities sichtbar gemacht, damit sie entfernt werden können. Gleiches gilt für das breitenlose Leerzeichen U+200B (ZERO WIDTH SPACE) usw.:
Unsichtbare Zeichen, umgewandelt in Entities
Hexcode dezimal benannt Bedeutung Anmerkung
00A0 160 nbsp geschütztes Leerzeichen &#160; wenn als Zeichen im Text vorgefunden; siehe unten.
034F 847 COMBINING GRAPHEME JOINER
2009 8201 thinsp Schmales Leerzeichen
200A 8202 HAIR SPACE
200B 8203 ZERO WIDTH SPACE
200C 8204 zwnj ZERO WIDTH NON-JOINER siehe oben
200D 8205 zwj ZERO WIDTH JOINER
200E 8206 lrm LEFT-TO-RIGHT MARK siehe oben
200F 8207 rlm RIGHT-TO-LEFT MARK
202A 8234 LEFT-TO-RIGHT EMBEDDING
202B 8235 RIGHT-TO-LEFT EMBEDDING
202C 8236 POP DIRECTIONAL FORMATTING
202D 8237 LEFT-TO-RIGHT OVERRIDE
202E 8238 RIGHT-TO-LEFT OVERRIDE
202F 8239 NARROW NO-BREAK SPACE
2060 8288 WORD JOINER

Breitenlose Zeichen Bearbeiten

In einigen nichtlateinischen Schriften kommen unsichtbare „nullbreite“ Zeichen vor. Bei Verlinkungen (vor allem Interlanguage) oder erkannten Textsequenzen (insbesondere die ganze Seite) werden sie unsichtbar einkodiert; sonst als Entity sichtbar gemacht.

Entity Sprachen
&zwj; kn ml sa si
&zwnj; bn fa kn ml mr mzn te
&#x200A; bo km

Leerzeichen am Zeilenende Bearbeiten

  1. Besteht eine Zeile nunmehr ausschließlich aus Leerzeichen, werden alle diese Leerzeichen immer gelöscht.
    Damit wird vermieden, dass Suchausdrücke nach einer Leerzeile wie \n\n fehlschlagen.
  2. Falls es aus irgendwelchen anderen Gründen zu einer Änderung des Textes gekommen war, werden beim Abschluss der automatisierten Bearbeitung die unsichtbar am Ende einer Zeile stehenden Leerzeichen entfernt.
    • Wäre dies jedoch die einzige Änderung, so wird bei standardmäßig eingeschalteter Anzeige der Kontrollseite darauf verzichtet, um Benutzer nicht durch lediglich unsichtbare Veränderungen zu verwirren.
    • Steht am Zeilenende ansonsten genau ein einzelnes Gleichheitszeichen, so wird von vorhandenen Leerzeichen genau eines belassen.
      Chemiker wünschen sich dies bei leeren Vorlagenparametern.[3]

Character Entities Bearbeiten

  • Weil ein Character Entity durch nowiki oder syntaxhighlight (source) geschützt werden darf oder in einem Kommentar im Klartext genutzt werden kann, werden Entities nicht in diesem ersten Schritt, sondern erst nach der Identifizierung geschützter Bereiche durch UCS ersetzt (Syntax-Lesbarkeit).

Beibehaltene Zeichen Bearbeiten

Der Sinn einiger Zeichenkodierungen im Wikitext ist hinterfragbar. Das Skript ersetzt sie standardmäßig nicht, sie können jedoch durch benutzerdefinierte Ersetzungen entfernt oder verändert werden.

U+00A0 – Geschütztes Leerzeichen
Als kodiertes Zeichen (nicht nur als Entity &nbsp;) sind sie seit einiger Zeit im Wikitext möglich.
Das Entity &nbsp; war von Anbeginn wegen für technikfernere Autoren erschwert lesbarem Quellcode umstritten.
Ein kodiertes Einzelzeichen, das im normalen Editierfeld unterscheidbar vom normalen Leerzeichen wäre und im wikEd vielleicht hellgrau oder gelb unterlegt wird, könnte eine Lösung sein.
Bis auf Weiteres werden sie erstmal als &#160; sichtbar gemacht.
U+00AD – Weicher Trennstrich
AD16 = 17310 ist gelegentlich im Wikitext zu sehen; vor allem, wenn offenbar aus anderen Systemen fertige Texte importiert wurden. Er kann der künftigen Darstellung von Webseiten mit verbesserter automatischer Worttrennung dienen. Im wikEd wird er in türkisblau mit einem „s“ dargestellt. Das normale Editierfenster eines Browsers verwendet oft einen ASCII-Bindestrich; teils wird das Zeichen aber gar nicht angezeigt.
Suchvorgänge nach Zeichenketten werden behindert. Das Zeichen kann ansonsten folgenlos (sofern kein Wikilink angrenzt) benutzerdefiniert entfernt oder als soft hyphen durch das Entity &shy; ersetzt werden.
U+2010 – Bindestrich
Der Unicode-Bindestrich 820810 wird durch die Software von Textsystemen bei automatischer Worttrennung eingefügt. Eine manuelle Eingabe ist wenig wahrscheinlich; vermutlich war Copy&Paste eines geschlossenen Wortes erfolgt. Im Wikitext wäre zu vermuten, dass die voneinander getrennten Bestandteile wieder zu einem einzelnen Wort zusammengefügt werden müssen. Unicode-Bindestrich und ggf. ein Leerzeichen wären zu entfernen oder durch ein weiches Trennzeichen zu ersetzen; dies bedarf aber der menschlichen Kontrolle.

127–159 (Windows-Zeichenbelegung) Bearbeiten

  • Dieser Zeichenbereich ist bei ANSI/UCS nicht definiert.
  • Derartige Zeichen tauchen gelegentlich im Wikitext auf, sind aber für viele Autoren unsichtbar.
  • Sie werden standardmäßig als dezimale Entities sichtbar gemacht.
  • In der deutschsprachigen WP lässt sich unterstellen, dass diese Zeichen 128–159 gemäß Codepage 1252 zu interpretieren sind. Benutzerdefinierte Ersetzungen können bei der Korrektur helfen.

Programmablauf Bearbeiten

Mit Start des Skriptes wird die numerische Kodierung jedes Zeichens festgestellt, klassifiziert und ggf. sofort in ein anderes Zeichen oder Entity umgewandelt.

Werden Zeichen oder Entities angetroffen, die in Kommentaren oder syntaxhighlight-Bereichen sinnvoll sein können, wird das zunächst nur vorgemerkt. Nach Abgrenzung dieser geschützten Bereiche werden die Vormerkungen dann abgearbeitet.

Ausblick: künftige Möglichkeiten Bearbeiten

Zurzeit nicht implementiert, aber perspektivisch möglich:

Unicode-Kontroll-Zeichen Bearbeiten

Es wären solche UCS-Steuerzeichen und ML-Entities zu entfernen, die in einem Wikitext sinnlos sind.

Es kann außerdem darüber nachgedacht werden, ob einzelne Unicode-Kontroll-Zeichen immer in die Form &NAME; gebracht werden sollten, damit ihre Bedeutung bei der manuellen Bearbeitung für Menschen deutlich wird und sie ggf. gelöscht werden. Die gleiche Überlegung (als Konvertierung in dezimale oder hexadezimale Entities) ließe sich anstellen betreffend außereuropäischer Zeichen ab etwa 280016 / 300016.

Im Einzelnen sind gemeint:

xFFFD16Replacement Character
Zurzeit wird bei der Abspeicherung in der oder Aufbau der HTML-Seite aus der Wiki-Datenbank für die \f, \v usw. dieser Ersatzcode gesetzt. Altbestände unter 32 sind in der deutschsprachigen WP nicht mehr vorhanden.
Der replacement character wird im Browser meist als Kombination mit einem Fragezeichen dargestellt, auch als leeres Rechteck.
200916Schmales Leerzeichen
THIN SPACE ist für zukünftige Entwicklungen sinnvoll und bleibt unangetastet.
Alternative Codes für weitere schmale Leerzeichen (823910, 820210) wären zunächst einheitlich durch 200916 zu ersetzen; eigentlich ist aber das in der Typografie lateinischer Schriften notwendige Zeichen
  • 202F16 = 823910 – NARROW NO-BREAK SPACE

Anmerkungen Bearbeiten

  1. Streng genommen sollten nur führende Tabs am Zeilenanfang erhalten bleiben.
  2. Im normalen TEXTAREA ohne wikEd kann es dazu kommen, dass der Browser sich verzählt. Steht ein solches Zeichen »|« im Text, etwa zwischen A und B: A|BCEF, und der Cursor zwischen C und E, dann kann es sein, dass das hier beabsichtigte „d“ falsch eingefügt wird: A|BdCEF oder A|BCEdF statt ABCdEF.
  3. Streng genommen soll dies nur innerhalb von Vorlagen geschehen. Vorlagen werden aber nur vollständig analysiert, wenn auch benutzerdefinierte oder interne Text-Änderungen anstehen.