ecere/gfx/imgDistMap: authorship notice update
[sdk] / extras / XMLParser.ec
index f2cb196..1822c6b 100644 (file)
@@ -58,14 +58,23 @@ static WordStatus GetKeyWord(char ** input, char * keyWord, int maxSize)
 
 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()
    {
@@ -77,15 +86,15 @@ class XMLParser
       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;
@@ -187,7 +196,7 @@ class XMLParser
       // Parse entire file
       for(stringPos = 0; stringPos < count; stringPos++)
       {
-         byte ch = inputString[stringPos];
+         char ch = inputString[stringPos];
 
          if(commented)
          {
@@ -261,7 +270,9 @@ class XMLParser
          }
          else
          {
-            if(ch == '<' || charLen == CHARBUFSIZE - 1)
+            if(!characterData)
+               this.characterData = characterData = new byte[charBufSize];
+            if(ch == '<' || charLen == charBufSize - 1)
             {
                ProcessCharacterData(characterData);
                charLen = 0;