enable quoted tokens in the token enumerator
This commit is contained in:
@@ -231,6 +231,8 @@ bool test_enumerate_token()
|
|||||||
{" abc 1:2 cde;3 4efg5. ", ":;.,", " 12345"},
|
{" abc 1:2 cde;3 4efg5. ", ":;.,", " 12345"},
|
||||||
{"abc.cde,efg", ",.", ""},
|
{"abc.cde,efg", ",.", ""},
|
||||||
{" abc cde efg ", " ", " "},
|
{" abc cde efg ", " ", " "},
|
||||||
|
{"a'abc' c 'cde' cefg", " ", " abcd"},
|
||||||
|
{"'abc' abc 'cde'd 'efg'", " ", " abcd"},
|
||||||
}, tests2[] = {
|
}, tests2[] = {
|
||||||
{"a, b, c", ",", " "},
|
{"a, b, c", ",", " "},
|
||||||
{"a,b,c", ",", " "},
|
{"a,b,c", ",", " "},
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
|
* Copyright (C) 2008 Tobias Brunner
|
||||||
* Copyright (C) 2007 Martin Willi
|
* Copyright (C) 2007 Martin Willi
|
||||||
* Hochschule fuer Technik Rapperswil
|
* Hochschule fuer Technik Rapperswil
|
||||||
*
|
*
|
||||||
@@ -215,27 +216,48 @@ static bool enumerate_token_enum(token_enum_t *this, char **token)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* find separators */
|
switch (*this->pos)
|
||||||
sep = this->sep;
|
|
||||||
while (*sep)
|
|
||||||
{
|
{
|
||||||
tmp = strchr(this->pos, *sep);
|
case '"':
|
||||||
if (tmp && (pos == NULL || tmp < pos))
|
case '\'':
|
||||||
{
|
{
|
||||||
pos = tmp;
|
/* read quoted token */
|
||||||
|
tmp = strchr(this->pos + 1, *this->pos);
|
||||||
|
if (tmp)
|
||||||
|
{
|
||||||
|
*token = this->pos + 1;
|
||||||
|
*tmp = '\0';
|
||||||
|
this->pos = tmp + 1;
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
/* unterminated string, FALL-THROUGH */
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
{
|
||||||
|
/* find nearest separator */
|
||||||
|
sep = this->sep;
|
||||||
|
while (*sep)
|
||||||
|
{
|
||||||
|
tmp = strchr(this->pos, *sep);
|
||||||
|
if (tmp && (pos == NULL || tmp < pos))
|
||||||
|
{
|
||||||
|
pos = tmp;
|
||||||
|
}
|
||||||
|
sep++;
|
||||||
|
}
|
||||||
|
*token = this->pos;
|
||||||
|
if (pos)
|
||||||
|
{
|
||||||
|
*pos = '\0';
|
||||||
|
this->pos = pos + 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
last = TRUE;
|
||||||
|
pos = this->pos = strchr(this->pos, '\0');
|
||||||
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
sep++;
|
|
||||||
}
|
|
||||||
*token = this->pos;
|
|
||||||
if (pos)
|
|
||||||
{
|
|
||||||
*pos = '\0';
|
|
||||||
this->pos = pos + 1;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
last = TRUE;
|
|
||||||
pos = this->pos = strchr(this->pos, '\0');
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* trim trailing characters/separators */
|
/* trim trailing characters/separators */
|
||||||
|
|||||||
Reference in New Issue
Block a user