On Tue, Sep 13, 2005 at 08:16:29AM +0200, Viktor Griph wrote:
> I've written a patch to allow nesting of variables as 
> in $[desk.name$[desk.n]].

I wonder if we actually want to do that. I mean, what happens if
the value of a variable happend to contain "$w" or something?

> Index: ChangeLog
> ===================================================================
> RCS file: /home/cvs/fvwm/fvwm/ChangeLog,v
> retrieving revision 1.2621
> diff -u -r1.2621 ChangeLog
> --- ChangeLog 26 Aug 2005 02:11:58 -0000      1.2621
> +++ ChangeLog 13 Sep 2005 06:00:41 -0000
> @@ -1,3 +1,10 @@
> +2005-09-13  Viktor Griph  <[EMAIL PROTECTED]>
> +
> +     * NEWS: 
> +     * AUTHORS: 
> +     * fvwm/expand.c (expand_vars_extended, expand_vars): 
> +     allow nesting of variables
> +
>  2005-08-26  Mikhael Goikhman  <[EMAIL PROTECTED]>
>  
>       * NEWS:
> Index: AUTHORS
> ===================================================================
> RCS file: /home/cvs/fvwm/fvwm/AUTHORS,v
> retrieving revision 1.105
> diff -u -r1.105 AUTHORS
> --- AUTHORS   23 Aug 2005 23:14:02 -0000      1.105
> +++ AUTHORS   13 Sep 2005 06:00:41 -0000
> @@ -8,6 +8,7 @@
>  Viktor Griph:
>  Patch for Perl modules on 64 bit machines.
>  EdgeHasPointer and EdgeIsActive test conditions.
> +Nested variable expansion
>  
>  Bjoern Steinbrink:
>  Patch for FvwmScript tasks running too often.
> Index: NEWS
> ===================================================================
> RCS file: /home/cvs/fvwm/fvwm/NEWS,v
> retrieving revision 1.573
> diff -u -r1.573 NEWS
> --- NEWS      26 Aug 2005 02:11:58 -0000      1.573
> +++ NEWS      13 Sep 2005 06:00:42 -0000
> @@ -5,6 +5,10 @@
>  
>  Changes in beta release 2.5.15 (not released yet)
>  
> +* New features:
> +
> +   - Variables can be nested as $[desk.name$[desk.n]]
> +
>  * Bug Fixes:
>  
>     - Supported a new fribidi version 0.10.5 in addition to 0.10.4.
> Index: fvwm/expand.c
> ===================================================================
> RCS file: /home/cvs/fvwm/fvwm/fvwm/expand.c,v
> retrieving revision 1.17
> diff -u -r1.17 expand.c
> --- fvwm/expand.c     3 Jun 2004 12:43:24 -0000       1.17
> +++ fvwm/expand.c     13 Sep 2005 06:00:42 -0000
> @@ -196,7 +196,7 @@
>  /* ---------------------------- local functions ---------------------------- 
> */
>  
>  static signed int expand_vars_extended(
> -     char *var_name, char *output, cond_rc_t *cond_rc,
> +     char *var_name, char *output,char *arguments[], cond_rc_t *cond_rc,
>       const exec_context_t *exc)
>  {
>       char *s;
> @@ -217,6 +217,8 @@
>       Window context_w = Scr.Root;
>       FvwmWindow *fw = exc->w.fw;
>  
> +     /* handle nested variables */
> +     var_name=expand_vars(var_name,arguments,False,False,cond_rc,exc);
>       /* allow partial matches for *.cs, gt, ... etc. variables */
>       switch ((i = GetTokenIndex(var_name, partial_function_vars, -1, &rest)))
>       {
> @@ -723,7 +725,7 @@
>       cond_rc_t *cond_rc, const exec_context_t *exc)
>  {
>       int l, i, l2, n, k, j, m;
> -     int xlen;
> +     int xlen, xlevel;
>       char *out;
>       char *var;
>       const char *string = NULL;
> @@ -755,9 +757,22 @@
>                               /* extended variables */
>                               var = &input[i+2];
>                               m = i + 2;
> -                             while (m < l && input[m] != ']' && input[m])
> +                             xlevel = 1;
> +                             while (m < l && xlevel && input[m])
>                               {
> -                                     m++;
> +                                     /* handle nested variables */
> +                                     if (input[m] == ']')
> +                                     {
> +                                             xlevel--;
> +                                     }
> +                                     else if (input[m] == '[')
> +                                     {
> +                                             xlevel++;
> +                                     }
> +                                     if (xlevel)
> +                                     {
> +                                             m++;
> +                                     }
>                               }
>                               if (input[m] == ']')
>                               {
> @@ -767,7 +782,8 @@
>                                       if (!addto)
>                                       {
>                                               xlen = expand_vars_extended(
> -                                                     var, NULL, cond_rc,
> +                                                     var, NULL, arguments,
> +                                                     cond_rc,
>                                                       exc);
>                                               if (xlen >= 0)
>                                               {
> @@ -890,9 +906,22 @@
>                               }
>                               var = &input[i+2];
>                               m = i + 2;
> -                             while (m < l && input[m] != ']' && input[m])
> +                             xlevel = 1;
> +                             while (m < l && xlevel && input[m])
>                               {
> -                                     m++;
> +                                     /* handle nested variables */
> +                                     if (input[m] == ']')
> +                                     {
> +                                             xlevel--;
> +                                     }
> +                                     else if (input[m] == '[')
> +                                     {
> +                                             xlevel++;
> +                                     }
> +                                     if (xlevel)
> +                                     {
> +                                             m++;
> +                                     }
>                               }
>                               if (input[m] == ']')
>                               {
> @@ -900,7 +929,8 @@
>                                       /* handle variable name */
>                                       k = strlen(var);
>                                       xlen = expand_vars_extended(
> -                                             var, &out[j], cond_rc, exc);
> +                                             var, &out[j], arguments,
> +                                             cond_rc, exc);
>                                       input[m] = ']';
>                                       if (xlen >= 0)
>                                       {



Ciao

Dominik ^_^  ^_^

 --
Dominik Vogt, [EMAIL PROTECTED]

Attachment: signature.asc
Description: Digital signature

Reply via email to