Index: ossp-pkg/var/TODO RCS File: /v/ossp/cvs/ossp-pkg/var/Attic/TODO,v rcsdiff -q -kk '-r1.9' '-r1.10' -u '/v/ossp/cvs/ossp-pkg/var/Attic/TODO,v' 2>/dev/null --- TODO 2002/01/04 22:31:43 1.9 +++ TODO 2002/02/27 11:36:53 1.10 @@ -1,9 +1,10 @@ OSSP var - - Man braucht ein Schleifenkonstrukt, das über Arrays iteriert: + o document loop construct + --------------------------------------------------------------------- + - Man braucht ein Schleifenkonstrukt, das über Arrays iteriert: [${foo}${bar}] - Dies wird so interpretiert, daß der Parser an den Variablennamen den jeweiligen Index anhängt, und die ganze Zeile expandiert, solange, bis _alle_ in dem Konstrukt verwandten Variablen für den @@ -11,33 +12,23 @@ undefiniert, werden sie durch den Leerstring "" ersetzt. Text innerhalb des Konstrukten wird "verbatim" in jeder Zeile erhalten, beispielsweise: - [${foo}: ${bar}\n] - Hierzu muß var_expand() wissen, wie sie einen indizierten Variablenzugriff erzeugen kann. Hierzu wird var_config_t um "char startindex" und "char endindex" erweitert. Weiterhin wird in var_config_t "char current_index" ein Zeichen konfiguriert, unter dem der aktuelle Index der Schleife zu bekommen ist. Defaults werden sein: "[", "]" und "#" respektive. - Wenn Variablen innerhalb des Konstruktes bereits einen Index haben, wird dieser (unter Beachtung eventuell notwendiger Arithmetik) berechnet und "fest" verwendet, zum Beispiel: - [${foo[1]}] - oder - [${foo[(#+1)/2]}] - Dementsprechend sind die folgenden Ausdrück equivalent: - [${foo[#]}] == [${foo}] - Wir unterstützen die vier Grundrechenarten, Modulo und Klammerung für arithmetische Operationen. - Weiterhin wird der Callback um einen Parameter "int index" erweitert, welchen im Falle eines "normalen Variablenzugriffs" auf Null gesetzt wird. Zugriffe auf Indices, die nicht existieren, @@ -45,24 +36,18 @@ auf einen negativen Index liefert die Anzahl der Elemente in dem Array als String zurück. Ebenso liefert das Konstrukt ${foo:#} die Anzahl der Elemente zurück, wenn $foo ein Array ist. - [...]-Konstrukte können beliebig tief geschachtelt werden. - Innerhalb von Indixangaben dürfen erneut Variablen verwendet werden. - Arrays werden nur in "expressions" erkannt, und im Konstrukt werden auch nur "expressions" gesondert behandelt; normale Variablen werden in jedem Pass normal expandiert. - Sind "stardindex", "endindex" oder "current_index" leer (gleich '\0'), wird dieses Konstrukt vom Parser nicht erkannt und als Text interpretiert -- abgesehen von den Variablen, natürlich, welche aber nicht in einer Schleife expandiert werden, noch werden beim Callback Array-Elemente abgefragt. - - Abgabe: 6.12.2001 zum Nikolaustag im CVS. - **** CLARIFICATION **** < [ $HOME ${ARRAY} ] @@ -129,10 +114,32 @@ [$foo{#}\n]{1,$#{foo}-1} ${empty:p/-/${foo[$#{foo}]:#}/} ${foo[$#{foo}]} + --------------------------------------------------------------------- + + o manual page style cleanup + o docs of o1,2 und o1-2 seem to be still incorrect ---- + o add library context and move initialization and configuration + into this context. -o manual page style cleanup -o docs of o1,2 und o1-2 seem to be still incorrect + o bugfix?: (thl) + habe einen Bug in lib_var gefunden, scheint konzeptioneller Art zu sein. + Ich benoetige zwei Passes fuer eine Anwendung, da es zwei verschiedene + Arten von Variablen gibt. Eine hat nur Zahlen als gueltigen Namen, die + andere Zahlen, Buchstaben, Punkt und Strich. Und die Ergebnisse des + ersten Passes koennen die Namen des zweiten beeinflussen, daher muessen + es zwei Passes sein. Sollte eigentlich funktionieren, dafuer gibt es die + namechars im var_config_t und das force_expand feature. Ich setze also + zuerst die namechars auf "0-9" und force_expand auf FALSE, anschliessend + die namechars auf "0-9a-zA-Z.-" und force_expand auf TRUE. Aber bei + einem Input von "${0}${abc}" bricht der Parser den ersten Pass bei "abc" + mit "failed: incomplete variable" ab! Workaround: gleiche Namespaces, + d.h. namechar's, verwenden - aber das ist nicht wirklich die ultimative + Loesung. + + o additional feature: functions via callback. + ${foo:F:F} calls callback for bar with result of foo + expansion and then callback for quux with the result returned from + bar.