3 #define MAX_TAG_LEN 2048
12 static WordStatus GetKeyWordEx(char ** input, char * keyWord, int maxSize, bool treatEqual)
14 char * string = *input;
17 bool quoted = false, start = true, wasQuoted = false;
19 for(; (ch = *string); string++)
21 if(!quoted && wasQuoted)
24 if((ch == ' ' || ch == '\t') && !quoted)
30 if(!quoted && ((ch == ',' || (treatEqual && ch == '=')) || ch == '>') )
32 else if(ch == '\"' /*|| ch == '\''*/)
38 else if(ch != '\r' && ch != '\n')
46 for(;*string == '>' || *string == ',' || *string == ' ' || *string == '=' || *string == '\t' || *string == '\r' || *string == '\n'; string++);
49 return (c > 0) ? (wasQuoted ? Quoted : Normal) : None;
52 static WordStatus GetKeyWord(char ** input, char * keyWord, int maxSize)
54 return GetKeyWordEx(input, keyWord, maxSize, true);
57 #define CHARBUFSIZE 65536
61 virtual void ProcessKeyword(char * keyWord);
62 virtual void ProcessCharacterData(char * data);
72 if(string && string[0])
74 GetKeyWord(&string, keyWord, sizeof(keyWord));
80 bool Parse(char * inputString, int count)
82 bool insideTag = false;
83 char tag[MAX_TAG_LEN];
85 bool commented = false;
88 byte characterData[CHARBUFSIZE];
90 int oldDepth = xmlDepth;
94 // Preparse to check for completeness
95 for(stringPos = 0; stringPos < count; stringPos++)
97 byte ch = inputString[stringPos];
101 if((ch == '-' && tagLen < 2) || (ch == '>' && tagLen == 2))
103 if(!strcmp(tag, "-->"))
111 if(ch == '/' && lastCh == '<')
122 else if(lastCh != '?' && lastCh != '/')
128 if(!strcmp(tag, "!--"))
143 if(xmlDepth > 1 || insideTag || commented)
158 for(stringPos = 0; stringPos < count; stringPos++)
160 byte ch = inputString[stringPos];
164 if((ch == '-' && tagLen < 2) || (ch == '>' && tagLen == 2))
168 if(!strcmp(tag, "-->"))
178 if(ch == '/' && lastCh == '<')
189 else if(lastCh != '?' && lastCh != '/')
205 if(GetKeyWord(&string, keyWord, sizeof(keyWord)))
207 ProcessKeyword(keyWord);
217 else if(ch != '/' || lastCh != '<')
224 if(!strcmp(tag, "!--"))
234 if(ch == '<' || charLen == CHARBUFSIZE - 1)
236 ProcessCharacterData(characterData);
247 characterData[charLen++] = ch;
248 characterData[charLen] = 0;