Index: ossp-pkg/var/TODO RCS File: /v/ossp/cvs/ossp-pkg/var/Attic/TODO,v rcsdiff -q -kk '-r1.1' '-r1.2' -u '/v/ossp/cvs/ossp-pkg/var/Attic/TODO,v' 2>/dev/null --- 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-}, ${parameter:o-} - - - ${parameter:o,}, ${parameter:o,} - - - ${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///} expandiert - "parameter" in einen String der Mindestbreite , wobei abhaengig - von ("r" = right, "l" = left, "c" = center) noch fehlende - Zeichen mit 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.