--- TODO 2001/11/09 17:01:37 1.1
+++ TODO 2001/11/13 12:18:51 1.2
@@ -1,71 +1,7 @@
- libvar.a
+ OSSP var
- - Prefix ist "var_", beziehungsweise "VAR_".
-
- - Eine Variable kann im Text in der Form $name oder ${name} angegeben
- werden, wobei die Wahl der Klammern '{' '}' und des '$'
- parametriesiert werden können.
-
- - Gültige Zeichen für einen Variablennamen sind konfigurierbar.
- Garbage in -- garbage out.
-
- - Ein echtes '$'-Zeichen im Text kann durch Voranstellung eines
- wählbaren Escapezeichen dargestellt werden. Default ist der
- Backslash ('\').
-
- - Der Aufrufer der Funktion soll steuern können, wie sich die Library
- verhält, wenn eine Variable nicht existiert. Denkbar sind:
-
- - Abbruch mit Fehler,
- - die Variable wird zu "", oder
- - der Ausdruck wird unverändert in den Ausgabetext übernommen,
- sodaß eventuell ein zweiter Pass gemacht werden kann.
-
- - ${parameter:-word} wird normal expandiert. Wenn "parameter" leer
- ist, wird stattdessen "word" eingesetzt.
-
- - ${parameter:+word} substituiert "word" wenn "parameter" nicht leer
- ist, sonst wird "" substituiert.
-
- - ${parameter:o<start>-}, ${parameter:o<start>-<end>}
-
- - ${parameter:o<start>,}, ${parameter:o<start>,<length>}
-
- - ${parameter:#} expandiert zur Länge des Inhaltes von "parameter".
-
- - ${parameter:s/pattern/string/[gti]} expandiert "parameter" und
- führt dann eine Ersetzung mittels des regulären Ausdrucks "pattern"
- durch. Wird das 'g'-Flag angegeben, wird nicht nur eine Instanz von
- "pattern" durch "string" ersetzt, sondern alle. Das 't'-Flag
- signalisiert, daß eine reine Text-Ersetzung ohne Unterstützung von
- regulären Ausdrücken gewünscht ist. Das 'i'-Flag besagt, daß die
- Suche nach "pattern" case-insensitiv durchgeführt wird.
-
- - ${parameter:y/ochars/nchars/} expandiert den Inhalt von "parameter"
- und transformiert dabei nach dem Prinzip von tr(1) die "ochars" im
- Text zu "nchars".
-
- - ${parameter:l} wandelt den Inhalt von "parameter" in
- Kleinbuchstaben, bevor es die Variable expandiert. Dies geschieht
- über toupper(3).
-
- - ${parameter:u} wandelt den Inhalt von "parameter" in
- Großbuchstaben, bevor es die Variable expandiert. Dies geschieht
- über tolower(3).
-
- - ${parameter:*word} expandiert zum leeren Wort, wenn "parameter"
- nicht leer ist, sonst zu "word".
-
- - Padding: ${parameter:p/<width>/<string>/<align>} expandiert
- "parameter" in einen String der Mindestbreite <width>, wobei abhaengig
- von <align> ("r" = right, "l" = left, "c" = center) noch fehlende
- Zeichen mit <string> aufgefuellt werden. Diest ist gedacht, um in
- Templates saubere Tabellen erzeugen zu koennen.
- Beispiele (foo="bar"):
- "${foo:p/6/./r}" -> "bar..."
- "${foo:p/6/./l}" -> "...bar"
- "${foo:p/6/./c}" -> ".bar.." (oder "..bar.", egal)
- "${foo:p/20/-=/c}" -> "-=-=-=-=-bar-=-=-=-="
+ - Beim Suchen/Ersetzen mit Regular-Expression-Unterstützung fehlt
+ noch die Erkennung von \1, \2 etc.
- Jedes Vorkommen eines der folgenden Konstrukte im Text wird durch
das zugehörige Sonderzeichen ersetzt.
@@ -119,57 +55,4 @@
- Doku sollte ein Beispiel für Quoting von Shell- und
Regexp-Ausdrücken enthalten.
- - Wir unterstützen PCRE-, POSIX-Regex- oder keine regulären
- Ausdrücke. Dies kann über autoconf zur Compilezeit angegeben
- werden.
-
- - Das Escaping-Problem:
-
-Unsere Library macht zwei Dinge:
-
- (1) Sie expandiert Variablen-Ausdrücke mit Unterstützung von
- Operationen wie Suchen/Ersetzen, und
-
- (2) sie expandiert sogenannte "quoted pairs", wie zum Beispiel \n.
-
-Das Problem ist nun, daß sie dies in zwei Pässen tun will -- und muß.
-Die Frage ist jedoch, in welcher Reihenfolge tut sie es und welche
-Ergebnisse werden in den Ausgabetext ausgegeben? Betrachtet man
-folgendes Beispiel, wird das Problem klarer:
-
- Variablen: TEST = foo
- Eingabe..: Der Betrag auf Konto $TEST ist \$50.
-
-Soll die korrekte Ausgabe an dieser Stelle nun
-
- Der Betrag auf Konto foo ist \$50.
-
-oder
-
- Der Betrag auf Konto foo ist $50.
-
-sein? Die erste Form ist die, die man intuitiv erwartet, die zweite
-Form ist jedoch die, die man braucht, wenn man den Text durch mehrere
-Pässe jagen will -- was wir ausdrücklich vorgesehen haben.
-
-Schlimmer noch: Wie soll die Library die Eingabe
-
- Der Betrag auf Konto ${TEST:s/(.*)/\1bar/} ist \$50.
-
-interpretieren? Würde unser Parser das Token "\1" interpretieren,
-würde nur eine "1" zurückbleiben, der Benutzer müßte also "\\1"
-schreiben, um das Ergebnis zu erhalten, was er erwartet.
-Interpretierte unser Parser die "quoted pairs" nicht, könnte man den
-Ausdruck
-
- ${TEST:s/\n/ /g}
-
-nicht verwenden, weil die Regular-Expression-Funktionen ein '\n' nicht
-kennen.
-
-Nehmen wir also an, wir interpretieren "quoted pairs" und leben damit,
-daß der Benutzer dann doppelt escapen muß ... Wie verhält sich das
-dann mit mehreren Pässen? Läuft die Library zweimal über die Eingabe,
-bräuchte man bereits
-
- Der Betrag auf Konto ${TEST:s/(.*)/\\1bar/} ist \$50.
+ - Unterstützung von PCRE.
|