assert(start != (const char *) NULL);
assert(token != (char *) NULL);
i=0;
- for (p=start; *p != '\0'; )
+ p=start;
+ while ((isspace((int) ((unsigned char) *p)) != 0) && (*p != '\0'))
+ p++;
+ if (*p == '\0')
+ break;
+ switch (*p)
{
- while ((isspace((int) ((unsigned char) *p)) != 0) && (*p != '\0'))
- p++;
- if (*p == '\0')
- break;
- switch (*p)
+ case '"':
+ case '\'':
+ case '`':
+ case '{':
{
- case '"':
- case '\'':
- case '`':
- case '{':
+ register char
+ escape;
+
+ switch (*p)
+ {
+ case '"': escape='"'; break;
+ case '\'': escape='\''; break;
+ case '`': escape='\''; break;
+ case '{': escape='}'; break;
+ default: escape=(*p); break;
+ }
+ for (p++; *p != '\0'; p++)
{
- register char
- escape;
+ if ((*p == '\\') && ((*(p+1) == escape) || (*(p+1) == '\\')))
+ p++;
+ else
+ if (*p == escape)
+ {
+ p++;
+ break;
+ }
+ token[i++]=(*p);
+ }
+ break;
+ }
+ case '/':
+ {
+ token[i++]=(*p++);
+ if ((*p == '>') || (*p == '/'))
+ token[i++]=(*p++);
+ break;
+ }
+ default:
+ {
+ char
+ *q;
- switch (*p)
+ value=StringToDouble(p,&q);
+ (void) value;
+ if ((p != q) && (*p != ','))
{
- case '"': escape='"'; break;
- case '\'': escape='\''; break;
- case '`': escape='\''; break;
- case '{': escape='}'; break;
- default: escape=(*p); break;
+ for ( ; (p < q) && (*p != ','); p++)
+ token[i++]=(*p);
+ if (*p == '%')
+ token[i++]=(*p++);
+ break;
}
- for (p++; *p != '\0'; p++)
+ if ((*p != '\0') && (isalpha((int) ((unsigned char) *p)) == 0) &&
+ (*p != *DirectorySeparator) && (*p != '#') && (*p != '<'))
{
- if ((*p == '\\') && ((*(p+1) == escape) || (*(p+1) == '\\')))
- p++;
- else
- if (*p == escape)
- {
- p++;
- break;
- }
- token[i++]=(*p);
- }
- break;
- }
- case '/':
- {
- token[i++]=(*p++);
- if ((*p == '>') || (*p == '/'))
token[i++]=(*p++);
- break;
- }
- default:
+ break;
+ }
+ for ( ; *p != '\0'; p++)
{
- char
- *q;
-
- value=StringToDouble(p,&q);
- (void) value;
- if ((p != q) && (*p != ','))
- {
- for ( ; (p < q) && (*p != ','); p++)
- token[i++]=(*p);
- if (*p == '%')
- token[i++]=(*p++);
- break;
- }
- if ((*p != '\0') && (isalpha((int) ((unsigned char) *p)) == 0) &&
- (*p != *DirectorySeparator) && (*p != '#') && (*p != '<'))
+ if (((isspace((int) ((unsigned char) *p)) != 0) || (*p == '=') ||
+ (*p == ':') || (*p == ',') || (*p == '|') || (*p == ';')) &&
+ (*(p-1) != '\\'))
+ break;
+ if ((i > 0) && (*p == '<'))
+ break;
+ token[i++]=(*p);
+ if (*p == '>')
+ break;
+ if (*p == '(')
+ for (p++; *p != '\0'; p++)
{
- token[i++]=(*p++);
- break;
+ token[i++]=(*p);
+ if ((*p == ')') && (*(p-1) != '\\'))
+ break;
}
- for ( ; *p != '\0'; p++)
- {
- if (((isspace((int) ((unsigned char) *p)) != 0) || (*p == '=') ||
- (*p == ':') || (*p == ',') || (*p == '|') || (*p == ';')) &&
- (*(p-1) != '\\'))
- break;
- if ((i > 0) && (*p == '<'))
- break;
- token[i++]=(*p);
- if (*p == '>')
- break;
- if (*p == '(')
- for (p++; *p != '\0'; p++)
- {
- token[i++]=(*p);
- if ((*p == ')') && (*(p-1) != '\\'))
- break;
- }
- }
- break;
}
+ break;
}
- break;
}
token[i]='\0';
if (LocaleNCompare(token,"url(",4) == 0)