int picolParseVar(picolParser *p) { int parened = 0; p->start = ++p->p; p->len--; /* skip the $ */ if (*p->p == '{') { picolParseBrace(p); p->type = PT_VAR; return PICOL_OK; } if(COLONED(p->p)) {p->p += 2; p->len -= 2;} /* while(isalnum(*p->p) || strchr("()_",*p->p)) { p->p++; p->len--; }*/ #if 1 while(myisalnum(*p->p) || *p->p == '_' || *p->p=='('||*p->p==')') { if(*p->p=='(') parened = 1; p->p++; p->len--; } if(!parened && *(p->p-1)==')') {p->p--; p->len++;} #endif if (p->start == p->p) { /* It's just a single char string "$" */ picolParseString(p); p->start--; p->len++; /* back to the $ sign */ p->type = PT_VAR; return PICOL_OK; } else RETURN_PARSED(PT_VAR); }
static char *next_word(char *p, char *end) { while (p < end && !myisalnum(p)) p = next_char(p); while (p < end && myisalnum(p)) p = next_char(p); return p; }
static char *prev_word(char *p, char *start) { while (p > start && !myisalnum(prev_char(p, start))) p = prev_char(p, start); while (p > start && myisalnum(prev_char(p, start))) p = prev_char(p, start); return p; }