recursive parseword
parent
1b25b64ae5
commit
918ca216a3
|
@ -122,9 +122,6 @@ static inline void skipcomments(char const *&p) {
|
||||||
}
|
}
|
||||||
|
|
||||||
static char const *parseword(char const *p) {
|
static char const *parseword(char const *p) {
|
||||||
constexpr int maxbrak = 100;
|
|
||||||
static char brakstack[maxbrak];
|
|
||||||
int brakdepth = 0;
|
|
||||||
for (;;) {
|
for (;;) {
|
||||||
p += strcspn(p, "\"/;()[] \t\r\n\0");
|
p += strcspn(p, "\"/;()[] \t\r\n\0");
|
||||||
switch (p[0]) {
|
switch (p[0]) {
|
||||||
|
@ -142,22 +139,20 @@ static char const *parseword(char const *p) {
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case '[':
|
case '[':
|
||||||
case '(':
|
p = parseword(p + 1);
|
||||||
if (brakdepth >= maxbrak) {
|
if (*p != ']') {
|
||||||
|
return p;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case '(':
|
||||||
|
p = parseword(p + 1);
|
||||||
|
if (*p != ')') {
|
||||||
return p;
|
return p;
|
||||||
}
|
}
|
||||||
brakstack[brakdepth++] = p[0];
|
|
||||||
break;
|
break;
|
||||||
case ']':
|
case ']':
|
||||||
if (brakdepth <= 0 || brakstack[--brakdepth] != '[') {
|
|
||||||
return p;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case ')':
|
case ')':
|
||||||
if (brakdepth <= 0 || brakstack[--brakdepth] != '(') {
|
return p;
|
||||||
return p;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
++p;
|
++p;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue