mirror of
https://forge.fsky.io/lda/Parsee.git
synced 2026-03-14 05:15:11 +00:00
76 lines
1.9 KiB
C
76 lines
1.9 KiB
C
#ifndef PARSEE_XML_H
|
|
#define PARSEE_XML_H
|
|
|
|
#include <Cytoplasm/HashMap.h>
|
|
#include <Cytoplasm/Stream.h>
|
|
#include <Cytoplasm/Array.h>
|
|
|
|
typedef struct XMLexer XMLexer;
|
|
typedef struct XMLEvent {
|
|
enum {
|
|
XML_LEXER_UNKNOWN = 0,
|
|
XML_LEXER_STARTELEM,
|
|
XML_LEXER_DATA,
|
|
XML_LEXER_ELEM, /* Empty attr */
|
|
XML_LEXER_ENDELEM,
|
|
|
|
XML_RELAX
|
|
} type;
|
|
|
|
int line, col;
|
|
size_t offset;
|
|
|
|
/* The element name */
|
|
char *element;
|
|
|
|
/* Attributes hashmap */
|
|
HashMap *attrs;
|
|
|
|
/* The decoded data */
|
|
char *data;
|
|
} XMLEvent;
|
|
|
|
extern XMLexer * XMLCreateLexer(Stream *, bool);
|
|
extern XMLEvent * XMLCrank(XMLexer *);
|
|
extern void XMLFreeEvent(XMLEvent *);
|
|
extern void XMLFreeLexer(XMLexer *);
|
|
|
|
typedef struct XMLElement {
|
|
enum {
|
|
XML_ELEMENT_UNKNOWN = 0,
|
|
XML_ELEMENT_TAG,
|
|
XML_ELEMENT_DATA,
|
|
XML_ELEMENT_PI,
|
|
XML_ELEMENT_CDATA
|
|
} type;
|
|
|
|
|
|
/* Only set when the type is a TAG. */
|
|
char *name;
|
|
HashMap *attrs;
|
|
Array *children;
|
|
|
|
/* Only set when the type is DATA or
|
|
* CDATA */
|
|
char *data;
|
|
} XMLElement;
|
|
|
|
/* Decodes 1 element off a stream. */
|
|
extern XMLElement * XMLCDecode(Stream *stream, bool autofree, bool html);
|
|
#define XMLDecode(stream, autofree) XMLCDecode(stream, autofree, false)
|
|
|
|
extern XMLElement * XMLCopy(XMLElement *original);
|
|
extern XMLElement * XMLCreateTag(char *name);
|
|
extern XMLElement * XMLCreateText(char *data);
|
|
extern void XMLAddAttr(XMLElement *element, char *key, char *val);
|
|
extern void XMLAddChild(XMLElement *element, XMLElement *child);
|
|
|
|
extern XMLElement * XMLookForUnique(XMLElement *parent, char *tag);
|
|
extern XMLElement * XMLookForTKV(XMLElement *parent, char *tag, char *k, char *v);
|
|
|
|
/* Frees an XML element properly. */
|
|
extern void XMLFreeElement(XMLElement *element);
|
|
|
|
/* Encodes an XML element to a stream */
|
|
extern void XMLEncode(Stream *stream, XMLElement *element);
|
|
#endif
|