Mbed port of the Simple Plain Xml parser. See http://code.google.com/p/spxml/ for more details. This library uses less memory and is much better suited to streaming data than TinyXML (doesn\'t use as much C++ features, and especially works without streams). See http://mbed.org/users/hlipka/notebook/xml-parsing/ for usage examples.

Dependents:   spxmltest_weather VFD_fontx2_weather weather_LCD_display News_LCD_display ... more

spxmlstag.hpp

Committer:
hlipka
Date:
2010-11-24
Revision:
0:3fa97f2c0505

File content as of revision 0:3fa97f2c0505:

/*
 * Copyright 2007 Stephen Liu
 * LGPL, see http://code.google.com/p/spxml/
 * For license terms, see the file COPYING along with this library.
 */

#ifndef __spxmlstag_hpp__
#define __spxmlstag_hpp__

class SP_XmlSTagReader;
class SP_XmlStartTagEvent;
class SP_XmlStringBuffer;

class SP_XmlSTagParser {
public:
    SP_XmlSTagParser( const char * encoding );
    ~SP_XmlSTagParser();

    void append( const char * source, int len );

    SP_XmlStartTagEvent * takeEvent();
    const char * getError();

    const char * getEncoding();

protected:
    void changeReader( SP_XmlSTagReader * reader );
    void setError( const char * error );

    SP_XmlStartTagEvent * mEvent;

    SP_XmlStringBuffer * mStartTagName;

    friend class SP_XmlSTagReader;

private:
    SP_XmlSTagReader * mReader;
    char * mError;
    char mEncoding[ 32 ];
};

class SP_XmlSTagReader {
public:
    SP_XmlSTagReader();
    virtual ~SP_XmlSTagReader();
    virtual void read( SP_XmlSTagParser * parser, char c ) = 0;

protected:

    /// help to call parser->xxx
    void changeReader( SP_XmlSTagParser * parser, SP_XmlSTagReader * reader );
    void setError( SP_XmlSTagParser * parser, const char * error );

    /// help to call parser->mEvent->xxx
    void setName( SP_XmlSTagParser * parser, const char * name );
    void addAttrName( SP_XmlSTagParser * parser, const char * name );
    void addAttrValue( SP_XmlSTagParser * parser, const char * value );

    SP_XmlStringBuffer * mBuffer;
};

class SP_XmlSTagNameReader : public SP_XmlSTagReader {
public:
    SP_XmlSTagNameReader();
    virtual ~SP_XmlSTagNameReader();
    virtual void read( SP_XmlSTagParser * parser, char c );
};

class SP_XmlSTagAttrNameReader : public SP_XmlSTagReader {
public:
    SP_XmlSTagAttrNameReader();
    virtual ~SP_XmlSTagAttrNameReader();
    virtual void read( SP_XmlSTagParser * parser, char c );

private:
    int mWait4Quot;
};

class SP_XmlSTagEqualMarkReader : public SP_XmlSTagReader {
public:
    SP_XmlSTagEqualMarkReader();
    virtual ~SP_XmlSTagEqualMarkReader();
    virtual void read( SP_XmlSTagParser * parser, char c );
};

class SP_XmlSTagAttrValueReader : public SP_XmlSTagReader {
public:
    SP_XmlSTagAttrValueReader();
    virtual ~SP_XmlSTagAttrValueReader();
    virtual void read( SP_XmlSTagParser * parser, char c );

private:
    int mHasReadQuot;
};

#endif