if(!quoted && wasQuoted)
break;
- if((ch == ' ' || ch == '\t') && !quoted)
+ if((ch == ' ' || ch == '\t') && !quoted)
{
if(!start) break;
}
}
else if(ch != '\r' && ch != '\n')
{
- if(c < maxSize)
+ if(c < maxSize)
keyWord[c++] = ch;
start = false;
}
class XMLParser
{
- virtual void ProcessKeyword(char * keyWord);
- virtual void ProcessCharacterData(char * data);
+ virtual void ProcessKeyword(const char * keyWord);
+ virtual void ProcessCharacterData(const char * data);
char keyWord[1024];
char * string;
int xmlDepth;
bool closingTag;
bool openingTag;
+ char * characterData;
+ uint charBufSize;
+
+ charBufSize = CHARBUFSIZE;
+
+ ~XMLParser()
+ {
+ delete characterData;
+ }
bool GetWord()
{
return false;
}
- bool Parse(char * inputString, int count)
+ bool Parse(const char * inputString, int count)
{
bool insideTag = false;
char tag[MAX_TAG_LEN];
- int tagLen;
+ int tagLen = 0;
bool commented = false;
byte lastCh = ' ';
int stringPos;
- byte characterData[CHARBUFSIZE];
+ char * characterData = this.characterData;
int charLen = 0;
int oldDepth = xmlDepth;
tag[0] = 0;
-
+
closingTag = false;
-
+
// Preparse to check for completeness
for(stringPos = 0; stringPos < count; stringPos++)
{
byte ch = inputString[stringPos];
-
+
if(commented)
{
if((ch == '-' && tagLen < 2) || (ch == '>' && tagLen == 2))
// Parse entire file
for(stringPos = 0; stringPos < count; stringPos++)
{
- byte ch = inputString[stringPos];
-
+ char ch = inputString[stringPos];
+
if(commented)
{
if((ch == '-' && tagLen < 2) || (ch == '>' && tagLen == 2))
}
else
{
- if(ch == '<' || charLen == CHARBUFSIZE - 1)
+ if(!characterData)
+ this.characterData = characterData = new byte[charBufSize];
+ if(ch == '<' || charLen == charBufSize - 1)
{
ProcessCharacterData(characterData);
- charLen = 0;
+ charLen = 0;
}
if(ch == '<')
{