removed the char allocator. Started cleaning up the document code.

This commit is contained in:
Lee Thomason
2012-01-26 18:17:26 -08:00
parent 951d88394c
commit 18d68bdf6b
3 changed files with 76 additions and 21 deletions

View File

@@ -38,6 +38,7 @@ class XMLText;
class XMLStreamer;
/*
// internal - move to separate namespace
struct CharBuffer
{
@@ -47,14 +48,19 @@ struct CharBuffer
static CharBuffer* Construct( const char* in );
static void Free( CharBuffer* );
};
*/
// FIXME: refactor to be the basis for all string handling.
class StrPair
{
public:
enum {
NEEDS_ENTITY_PROCESSING = 0x01,
NEEDS_NEWLINE_NORMALIZATION = 0x02
NEEDS_NEWLINE_NORMALIZATION = 0x02,
TEXT_ELEMENT = NEEDS_ENTITY_PROCESSING | NEEDS_NEWLINE_NORMALIZATION,
ATTRIBUTE_NAME = 0,
ATTRIBUTE_VALUE = NEEDS_ENTITY_PROCESSING | NEEDS_NEWLINE_NORMALIZATION,
COMMENT = NEEDS_NEWLINE_NORMALIZATION,
};
StrPair() : flags( 0 ), start( 0 ), end( 0 ) {}
@@ -103,7 +109,7 @@ protected:
inline static int IsAlphaNum( unsigned char anyByte ) { return ( anyByte <= 127 ) ? isalnum( anyByte ) : 1; }
inline static int IsAlpha( unsigned char anyByte ) { return ( anyByte <= 127 ) ? isalpha( anyByte ) : 1; }
char* ParseText( char* in, StrPair* pair, const char* endTag );
char* ParseText( char* in, StrPair* pair, const char* endTag, int strFlags );
char* ParseName( char* in, StrPair* pair );
char* Identify( XMLDocument* document, char* p, XMLNode** node );
};
@@ -132,7 +138,7 @@ public:
protected:
XMLNode( XMLDocument* );
void Unlink( XMLNode* child );
void ClearChildren();
XMLDocument* document;
XMLNode* parent;
@@ -145,6 +151,7 @@ protected:
XMLNode* next;
private:
void Unlink( XMLNode* child );
};
@@ -233,10 +240,13 @@ private:
class XMLDocument : public XMLNode
{
public:
XMLDocument();
XMLDocument();
~XMLDocument();
bool Parse( const char* );
bool Load( const char* );
bool Load( FILE* );
void Print( XMLStreamer* streamer=0 );
/*
@@ -244,15 +254,25 @@ public:
XMLNode* RootElement();
*/
enum {
NO_ERROR = 0,
ERROR_ELEMENT_MISMATCH,
ERROR_PARSING_ELEMENT,
ERROR_PARSING_ATTRIBUTE
};
void SetError( int error, const char* str1, const char* str2 );
int GetErrorID() const { return errorID; }
const char* GetErrorStr1() const { return errorStr1; }
const char* GetErrorStr2() const { return errorStr2; }
private:
XMLDocument( const XMLDocument& ); // intentionally not implemented
CharBuffer* charBuffer;
void InitDocument();
bool errorID;
const char* errorStr1;
const char* errorStr2;
char* charBuffer;
};