39 #define CHECK_ERROR(rv) \
41 DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);\
51 for(i=0; i<ind; i++) {
120 if (n->data[0]==
'?') {
125 else if (n->data[0]==
'!') {
130 if (flags & GWEN_XML_FLAGS_SIMPLE) {
145 if (!(flags & GWEN_XML_FLAGS_SIMPLE)) {
147 for(i=0; i<ind; i++) {
158 if (flags & GWEN_XML_FLAGS_SIMPLE) {
176 for(i=0; i<ind; i++) {
185 if (!(flags & GWEN_XML_FLAGS_SIMPLE)) {
194 for(i=0; i<ind; i++) {
404 uc=(
unsigned char) chr;
445 uc=(
unsigned char) chr;
458 uc=(
unsigned char) chr;
459 if (uc==
'>' || uc<33)
476 uc=(
unsigned char) chr;
502 uc=(
unsigned char) chr;
509 uc=(
unsigned char) chr;
522 uc=(
unsigned char) chr;
529 if (strcmp(p,
"-->")==0) {
552 if (uc==
' ' || uc==
'>' || uc==
'/')
558 if ((fc==
'!' && uc==
'!') || (fc==
'?' && uc==
'?')) {
563 uc=(
unsigned char) chr;
583 uc=(
unsigned char) chr;
597 if (uc==
'/' || uc==
'?' || uc==
'!') {
602 uc=(
unsigned char) chr;
637 uc=(
unsigned char) chr;
644 if (uc==
'/' || uc==
'!' || uc==
'?' || uc==
'=' || uc==
'>')
653 uc=(
unsigned char) chr;
668 uc=(
unsigned char) chr;
679 if (uc==
'>' || uc<33)
683 "Nested element definitions");
689 if (uc==
'/' || uc==
'!' || uc==
'?') {
698 tc=(
unsigned char) chr;
733 if (uc==
'>' || uc==
'?' || uc==
'!' || uc==
'/')
737 if (uc==
'?' || uc==
'!' || uc==
'/') {
738 unsigned char ucsave=uc;
744 uc=(
unsigned char) chr;
757 "Got an unexpected character here (after %02x[%c]): %02x[%c], "
758 "maybe the text contains unescaped XML characters?",
759 ucsave, ucsave, uc, uc);
772 "Internal error: Should never reach this point");
844 "Not on same level where we started...(%d!=%d)",
GWEN_XMLNODE * GWEN_XMLNode_GetHeader(const GWEN_XMLNODE *n)
int GWEN_XMLNode__WriteToStream(const GWEN_XMLNODE *n, GWEN_FAST_BUFFER *fb, uint32_t flags, unsigned int ind)
int GWEN_XML__ReadData(GWEN_XML_CONTEXT *ctx, GWEN_FAST_BUFFER *fb, GWEN_UNUSED uint32_t flags)
char * GWEN_Buffer_GetStart(const GWEN_BUFFER *bf)
struct GWEN_XMLNODE_NAMESPACE GWEN_XMLNODE_NAMESPACE
int GWEN_SyncIo_Connect(GWEN_SYNCIO *sio)
int GWEN_XMLNode_toBuffer(const GWEN_XMLNODE *n, GWEN_BUFFER *buf, uint32_t flags)
#define GWEN_SYNCIO_FILE_FLAGS_WRITE
uint32_t GWEN_Buffer_GetUsedBytes(const GWEN_BUFFER *bf)
#define GWEN_SYNCIO_FILE_FLAGS_READ
#define GWEN_XML_FLAGS_SIMPLE
const char * GWEN_XMLNode_NameSpace_GetName(const GWEN_XMLNODE_NAMESPACE *ns)
struct GWEN__XMLPROPERTY GWEN_XMLPROPERTY
uint32_t GWEN_FastBuffer_GetBytesRead(const GWEN_FAST_BUFFER *fb)
const char * GWEN_XMLNode_NameSpace_GetUrl(const GWEN_XMLNODE_NAMESPACE *ns)
#define GWEN_SYNCIO_FILE_FLAGS_UREAD
void GWEN_XmlCtx_ResetFinishedElement(GWEN_XML_CONTEXT *ctx)
#define DBG_VERBOUS(dbg_logger, format, args...)
int GWEN_XmlCtx_AddAttr(GWEN_XML_CONTEXT *ctx, const char *attrName, const char *attrData)
int GWEN_XML_ReadFile(GWEN_XMLNODE *n, const char *filepath, uint32_t flags)
int GWEN_XmlCtx_StartTag(GWEN_XML_CONTEXT *ctx, const char *tagName)
#define GWEN_FASTBUFFER_PEEKBYTE(fb, var)
void GWEN_FastBuffer_free(GWEN_FAST_BUFFER *fb)
int GWEN_XMLNode_WriteToStream(const GWEN_XMLNODE *n, GWEN_XML_CONTEXT *ctx, GWEN_SYNCIO *sio)
int GWEN_XmlCtx_GetDepth(const GWEN_XML_CONTEXT *ctx)
GWEN_XMLNODE * GWEN_XMLNode_new(GWEN_XMLNODE_TYPE t, const char *data)
GWEN_BUFFER * GWEN_Buffer_new(char *buffer, uint32_t size, uint32_t used, int take)
void GWEN_Buffer_Dump(GWEN_BUFFER *bf, unsigned int insert)
uint32_t GWEN_XmlCtx_GetFinishedElement(const GWEN_XML_CONTEXT *ctx)
void GWEN_Buffer_Reset(GWEN_BUFFER *bf)
#define GWEN_FASTBUFFER_FLUSH(fb, var)
GWEN_XMLNODE * GWEN_XMLNode_GetChild(const GWEN_XMLNODE *n)
void GWEN_XmlCtx_free(GWEN_XML_CONTEXT *ctx)
#define GWEN_ERROR_BAD_DATA
struct GWEN_SYNCIO GWEN_SYNCIO
int GWEN_XmlCtx_EndTag(GWEN_XML_CONTEXT *ctx, int closing)
void GWEN_Buffer_SubMode(GWEN_BUFFER *bf, uint32_t mode)
GWEN_SYNCIO * GWEN_SyncIo_Memory_new(GWEN_BUFFER *buffer, int take)
int GWEN_XmlCtx_AddData(GWEN_XML_CONTEXT *ctx, const char *data)
#define DBG_DEBUG(dbg_logger, format, args...)
#define GWEN_XML_BUFFERSIZE
int GWEN_XML_ReadFromFastBuffer(GWEN_XML_CONTEXT *ctx, GWEN_FAST_BUFFER *fb)
int GWEN_XMLContext_ReadFromFile(GWEN_XML_CONTEXT *ctx, const char *fname)
int GWEN_XML__ReadTag(GWEN_XML_CONTEXT *ctx, GWEN_FAST_BUFFER *fb, GWEN_UNUSED uint32_t flags, GWEN_BUFFER *dbuf)
GWEN_XMLNODE * GWEN_XMLNode_Next(const GWEN_XMLNODE *n)
#define GWEN_BUFFER_MODE_DYNAMIC
void GWEN_Buffer_AddMode(GWEN_BUFFER *bf, uint32_t mode)
GWEN_XML_CONTEXT * GWEN_XmlCtxStore_new(GWEN_XMLNODE *n, uint32_t flags)
int GWEN_Buffer_AppendByte(GWEN_BUFFER *bf, char c)
#define GWEN_SYNCIO_FILE_FLAGS_UWRITE
GWEN_XMLNODE * GWEN_XMLNode_fromString(const char *s, int len, uint32_t flags)
GWEN_SYNCIO * GWEN_SyncIo_Memory_fromBuffer(const uint8_t *buffer, int size)
int GWEN_XMLNode_WriteFile(const GWEN_XMLNODE *n, const char *fname, uint32_t flags)
void GWEN_Buffer_free(GWEN_BUFFER *bf)
void GWEN_XMLNode_free(GWEN_XMLNODE *n)
struct GWEN_BUFFER GWEN_BUFFER
A dynamically resizeable text buffer.
void GWEN_SyncIo_free(GWEN_SYNCIO *sio)
void GWEN_SyncIo_AddFlags(GWEN_SYNCIO *sio, uint32_t fl)
#define GWEN_XML_FLAGS_HANDLE_COMMENTS
#define GWEN_FASTBUFFER_READBYTE(fb, var)
#define DBG_ERROR(dbg_logger, format, args...)
uint32_t GWEN_XmlCtx_GetFlags(const GWEN_XML_CONTEXT *ctx)
int GWEN_XML__ReadAllFromIo(GWEN_XML_CONTEXT *ctx, GWEN_SYNCIO *sio)
#define GWEN_FASTBUFFER_WRITEFORCED(fb, var, p, len)
int GWEN_XMLContext_ReadFromString(GWEN_XML_CONTEXT *ctx, const char *text)
int GWEN_SyncIo_Disconnect(GWEN_SYNCIO *sio)
int GWEN_XMLContext_ReadFromIo(GWEN_XML_CONTEXT *ctx, GWEN_SYNCIO *sio)
#define GWEN_FASTBUFFER_WRITEBYTE(fb, var, chr)
#define DBG_INFO(dbg_logger, format, args...)
int GWEN_XmlCtx_AddComment(GWEN_XML_CONTEXT *ctx, const char *data)
#define GWEN_XML_FLAGS_INDENT
#define GWEN_BUFFER_MODE_READONLY
#define GWEN_XML_FLAGS_HANDLE_HEADERS
GWENHYWFAR_API GWEN_SYNCIO * GWEN_SyncIo_File_new(const char *path, GWEN_SYNCIO_FILE_CREATIONMODE cm)
#define GWEN_FASTBUFFER_WRITELINE(fb, var, p)
#define GWEN_XML_FLAGS_HANDLE_NAMESPACES
#define GWEN_ERROR_INTERNAL
GWEN_XMLNODE_NAMESPACE * GWEN_XMLNode_NameSpace_List_Next(const GWEN_XMLNODE_NAMESPACE *element)
GWEN_FAST_BUFFER * GWEN_FastBuffer_new(uint32_t bsize, GWEN_SYNCIO *io)
struct GWEN__XMLNODE GWEN_XMLNODE
struct GWEN_XML_CONTEXT GWEN_XML_CONTEXT
int GWEN_Buffer_AppendString(GWEN_BUFFER *bf, const char *buffer)
GWEN_XMLNODE_NAMESPACE * GWEN_XMLNode_NameSpace_List_First(const GWEN_XMLNODE_NAMESPACE_LIST *l)