WaBis

walter.bislins.ch

String-Typen und Konvertierung

Implem. : Str-Type

Das Wiki unterscheidet intern verschiedene String-Typen.

Wiki-Text
Text, wie er vom User im Edit-Mode oder in Eingabefeldern eingegeben wird. Spezialzeichen in Links und Makros müssen mit \ maskiert werden.
Intern-Text
In diesem Format sind mit \ maskierte Zeichen in spezielle Zeichensequenzen umgewandelt worden, die das Wiki als normalen Text behandelt. Vor der Ausgabe als HTML oder der Interpretation als Seiten- oder Dateinamen müssen diese Zeichensequenzen wieder decodiert werden (DecodeEscChars, DecodeName).
HTML-Text
Dieses Textformat kann direkt an den Browser gesendet werden. Alle maskierten Zeichen sind in entsprechende HTML-Tags oder normale Zeichen decodiert und der Text enthält HTML-Tags.
Namen (native name)
Namen werden als Seitennamen und Dateinamen verwendet. In Namen sind Spezialzeichen nicht maskiert. Namen können benannte HTML-Zeichen enthalten (z.B. &alpha; für α). Andere HTML-Zeichen wie < und > werden als normale Zeichen codiert (nicht als &lt;).

Für die Umwandlung der verschiedenen Formate existiert eine Reihe von entsprechenden Funktionen, die nachfolgend aufgelistet sind:

Syntax

Alle unten aufgeführten Konvertierungsfunktionen haben die folgende Syntax:

targetStr = Convert( sourceStr )

MaskSpecChars, UnMaskSpecChars

Text Wiki-Text (MaskSpecChars)

Wiki-Text Text (UnMaskSpecChars)

Wenn in Text Links oder Makros eingebunden werden soll, müssen Spezialzeichen (Steuerzeichen) innerhalb des Textes mit \ maskiert werden, damit sich nicht mit den entsprechenden Zeichen kollidieren, die als Steuerzeichen in Makros und Links verwendet werden. Mit MaskSpecChars werden alle Sonderzeichen mit einem \ davor maskiert. Die Funktionen PreprocWikiText, PreprocLink und EncodeEscChars verwandeln so maskierte Sonderzeichen in spezielle Zeichensequenzen, die nicht mit den Steuerzeichen kollidieren. Nach der Verarbeitung des Textes werden diese Zeichensequenzen wieder in ihre ursprünglichen Sonderzeichen (ohne ) verwandelt.

Insbesondere in Texten, die an Formular-Makros übergeben werden, müssen Sonderzeichen maskiert werden. Dazu gibt es auch die Funktion FormString, welche in WScripts anwendung findet.

UnMaskSpecCahrs ist die eineindeutige Umkehrfunktion von MaskSpecChars.

EncodeEscChars

Wiki-Text Intern-Text

Codieret alle mit \ maskierten Spezialzeichen durch spezielle Zeichenfolgen $@xx, wobei xx eine zweistellige Zahl ist. Dadurch wird verhindert, dass das Wiki die entsprechenden Zeichen hinter dem \ als Steuerzeichen interpretiert. Vor der Ausgabe oder Weiterverwendung als Namen werden die $@xx vom Wiki in die enstprechenden Spezialzeichen zurückgewandelt (DecodeEscChars, DecodeName).

EncodeEscChars wird intern von den Funktionen PreprocWikiText und PreprocLink gerufen.

Die nicht eineindeutige Umkehrfunktion ist UnEncodeEscChars. EncodeEscChars kann mehrfach auf denselben Text angewandt werden, da sie nicht eineindeutig umkehrbar ist. Das bedeutet, dass es keine unerwünschten Nebeneffekte gibt, wenn derselbe Text an mehreren Stellen (z.B. in Wscripts und intern im Wiki) mehrmals encodet wird. Was schon encodet ist, bleibt encodet, was noch nicht encodet ist, wird encodet.

UnEncodeEscChars

Intern-Text Wiki-Text

Umkehrfunktion zu EncodeEscChars.

DecodeEscChars

Intern-Text HTML-Text

Diese Funktion ist eine Kombination von UnEncodeEscChars und UnMaskSpecChars, wobei aber zusätzlich einige Zeichen im Gegensatz zu DecodeName in benannte HTML-Zeichen wie &gt; für > verwandelt werden.

EncodeSpecChars, UnEncodeSpecChars

Name Intern-Text (EncodeSpecChars)

Intern-Text Name (UnEncodeSpecChars)

Die Funktion EncodeSpecChars makiert Spezialzeichen mit \ und Codiert das Resultat mit EncodeEscChars in ein internes Format. Die nicht eineindeutige Umkehrfunktion ist UnEncodeSpecChars.

Name → MaskSpecCharsEncodeEscChars → Intern-Text

Intern-Text → UnEncodeEscCharsUnMaskSpecChars → Name

Wiki-Text Intern-Text

Codieren alle mit \ maskierten Spezialzeichen durch spezielle Zeichenfolgen $@xx, wobei xx eine zweistellige Zahl ist. Dadurch wird verhindert, dass das Wiki die entsprechenden Zeichen hinter dem \ als Steuerzeichen interpretiert. Vor der Ausgabe oder Weiterverwendung als Namen werden die $@xx vom Wiki in die enstprechenden Spezialzeichen zurückgewandelt (DecodeEscChars, DecodeName).

Wiki-Text → EncodeEscCharsReplaceCharSeq → Intern-Text

Wiki-Text → EncodeEscCharsReplaceCharSeqTrimSpaces → Intern-Text

Diese Funktionen ersetzen zusätzlich spezielle Zeichenfolgen (z.B. << in «, -> in → usw.) und wandeln alleinstehende < und > in benannte HTML Zeichen um (&lt; und &gt;).

Die Funktion PreprocLink entfernt zusätzlich überflüssige Leerzeichen aus dem String. Diese Funktion soll für Wiki-Text verwendet werden, welcher später als Seiten-Name oder Link Verwendung findet.

Die nicht eineindeutige Umkehrfunktion ist UnencodeEscChars. EncodeEscChars, welche intern von den beiden Funktionen gerufen wird, kann mehrfach auf denselben Text angewandt werden, da sie nicht eineindeutig umkehrbar ist. Das bedeutet, dass es keine unerwünschten Nebeneffekte gibt, wenn derselbe Text an mehrere Stellen (z.B. in Wscripts und intern im Wiki) mehrmals encodet wird. Was schon encodet ist, bleibt encodet, was noch nicht encodet ist, wird encodet.

NormName

Wiki-Text Name

Verwende diese Funktion um Text, zum Beispiel von einem Eingabefeld, in einen gültigen normalisierten Namen zu verwandeln.

Wiki-Text → PreprocLinkDecodeName → Name

DecodeName

Intern-Text Name

Verwandelt mit PreprocWikiText, PreprocLink oder EncodeEscChars codierten Inter-Text über die Funktionen DecodeEscChars und DecodeHtmlString in ein Format, welches für Seitennamen oder Filenamen verwendet werden kann.

Inter-Text → DecodeEscCharsDecodeHtmlString → Name

DecodeHtmlString

HTML-Text Name

Wandelt einige HTML-Namen in Zeichen um (z.B. &lt; in <, &#x7B; in { usw.). Diese Funktion ist Teil von DecodeName.

Anwendung für Makros

Es ist manchmal praktisch für eine Wiki-Anwendung, Daten in einem Makro verpackt in einer Seite zu speichern. Eine solche Anwendung muss berücksichtigen, dass Spezialzeichen in den Daten mit \ maskiert werden. Umgekehrt müssen diese Maskierungen vor dem Bearbeiten der Makros temporär in das interne Format konvertiert und vor dem Verwenden der Daten wieder ins native Format umgewandelt werden:

Konvertierung Funktion Beschreibung
Daten → Makros MaskSpecChars Makros können so in Seiten gespeichert werden
Makros → Intern EncodeEscChars vor dem Parsen einer Seite
Intern → Daten UnEncodeSpecChars oder DecodeName geparste Daten in natives Format überführen
Weitere Infos zur Seite
Erzeugt Montag, 10. August 2009
von wabis
Zum Seitenanfang
Geändert Sonntag, 6. Dezember 2015
von wabis