Changeset 3470

Show
Ignore:
Timestamp:
08/09/07 18:04:11 (1 year ago)
Author:
tg
Message:

track the _real_ entry type, for varname expansion:
• KWT_MULTI etc. with a short match become KWT_NORMAL
• KWT_MULTITOP becomes KWT_MULTI xor KWT_MULTITER

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • branches/common-nfo/tools/nfotiser/nfotiser.h

    r3468 r3470  
    4545        CIRCLEQ_ENTRY(parser_res) e; 
    4646        parser_kwords keyword; 
     47        enum parser_kwtype itype; 
    4748        char *kw_multi; 
    4849        unsigned kw_iter; 
  • branches/common-nfo/tools/nfotiser/parser.c

    r3465 r3470  
    105105        char *entry_multi; 
    106106        unsigned entry_iter; 
     107        enum parser_kwtype entry_type; 
    107108 
    108109        res = xmalloc(sizeof (struct parser_result)); 
     
    218219 
    219220                /* exact match? */ 
    220                 if (!strcasecmp(cp, kwp->kwprefix)) 
    221                         /* yepp */ break; 
     221                if (!strcasecmp(cp, kwp->kwprefix)) { 
     222                        /* yep */ 
     223                        entry_type = KWT_NORMAL; 
     224                        break; 
     225                } 
    222226                /* prefix match allowed? */ 
    223227                if (kwp->kwtype == KWT_NORMAL) 
     
    230234                /* okay, we got a prefix match, get args */ 
    231235                np = cp + n + 1; 
     236                entry_type = kwp->kwtype; 
    232237                if (kwp->kwtype == KWT_ITERATED || 
    233238                    (kwp->kwtype == KWT_MULTITOP && 
     
    250255                        entry_iter = (unsigned)strtoul(np, NULL, 0); 
    251256                        np = zp; 
     257                        if (kwp->kwtype == KWT_MULTITOP) 
     258                                entry_type = KWT_MULTITER; 
    252259                } 
     260                if (kwp->kwtype == KWT_MULTITOP) 
     261                        entry_type = KWT_MULTI; 
    253262                if (kwp->kwtype == KWT_MULTI || 
    254263                    kwp->kwtype == KWT_MULTITOP || 
     
    263272        bzero(entry, sizeof (struct parser_res)); 
    264273        entry->keyword = kwp->kwnum; 
     274        entry->itype = entry_type; 
    265275        entry->kw_multi = entry_multi; 
    266276        entry->kw_iter = entry_iter;