/* parseAttributes * * Parse the various attributes of an XML-styled config file entry */ LOCAL char* parseAttributes( tOptions* pOpts, char* pzText, tOptionLoadMode* pMode, tOptionValue* pType ) { size_t lenLoadType = strlen( zLoadType ); size_t lenKeyWords = strlen( zKeyWords ); size_t lenSetMem = strlen( zSetMembers ); do { switch (*pzText) { case '/': pType->valType = OPARG_TYPE_NONE; case '>': return pzText; default: case NUL: return NULL; case ' ': case '\t': case '\n': case '\f': case '\r': case '\v': break; } while (isspace( (int)*++pzText )) ; if (strncmp( pzText, zLoadType, lenLoadType ) == 0) { pzText = parseValueType( pzText+lenLoadType, pType ); continue; } if (strncmp( pzText, zKeyWords, lenKeyWords ) == 0) { pzText = parseKeyWordType( pOpts, pzText+lenKeyWords, pType ); continue; } if (strncmp( pzText, zSetMembers, lenSetMem ) == 0) { pzText = parseSetMemType( pOpts, pzText+lenSetMem, pType ); continue; } pzText = parseLoadMode( pzText, pMode ); } while (pzText != NULL); return pzText; }
/* parseAttributes * * Parse the various attributes of an XML-styled config file entry */ LOCAL char* parseAttributes( tOptions* pOpts, char* pzText, tOptionLoadMode* pMode, tOptionValue* pType ) { size_t len; do { if (! IS_WHITESPACE_CHAR(*pzText)) switch (*pzText) { case '/': pType->valType = OPARG_TYPE_NONE; case '>': return pzText; default: case NUL: return NULL; } while (IS_WHITESPACE_CHAR(*++pzText)) ; len = 0; while (IS_LOWER_CASE_CHAR(pzText[len])) len++; switch (find_xat_attribute_id(pzText, len)) { case XAT_KWD_TYPE: pzText = parseValueType( pzText+len, pType ); break; case XAT_KWD_WORDS: pzText = parseKeyWordType( pOpts, pzText+len, pType ); break; case XAT_KWD_MEMBERS: pzText = parseSetMemType( pOpts, pzText+len, pType ); break; case XAT_KWD_COOKED: pzText += len; if (! IS_END_XML_TOKEN_CHAR(*pzText)) goto invalid_kwd; *pMode = OPTION_LOAD_COOKED; break; case XAT_KWD_UNCOOKED: pzText += len; if (! IS_END_XML_TOKEN_CHAR(*pzText)) goto invalid_kwd; *pMode = OPTION_LOAD_UNCOOKED; break; case XAT_KWD_KEEP: pzText += len; if (! IS_END_XML_TOKEN_CHAR(*pzText)) goto invalid_kwd; *pMode = OPTION_LOAD_KEEP; break; default: case XAT_KWD_INVALID: invalid_kwd: pType->valType = OPARG_TYPE_NONE; return skipUnknown( pzText ); } } while (pzText != NULL); return pzText; }