42 #define CHECK_ERROR(rv) \ 44 DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);\ 45 GWEN_Buffer_free(buf);\ 56 for (i=0; i<ind; i++) {
117 p->value, strlen(p->value), buf);
129 if (n->data[0]==
'?') {
134 else if (n->data[0]==
'!') {
156 for (i=0; i<ind; i++) {
185 for (i=0; i<ind; i++) {
193 n->data, strlen(n->data), buf);
207 for (i=0; i<ind; i++) {
217 n->data, strlen(n->data), buf);
280 const char *encoding;
284 if (strcasecmp(encoding,
"UTF-8")==0 ||
285 strcasecmp(encoding,
"UTF8")==0)
439 uc=(
unsigned char) chr;
493 uc=(
unsigned char) chr;
506 uc=(
unsigned char) chr;
507 if (uc==
'>' || uc<33)
524 uc=(
unsigned char) chr;
550 uc=(
unsigned char) chr;
557 uc=(
unsigned char) chr;
570 uc=(
unsigned char) chr;
577 if (strcmp(p,
"-->")==0) {
613 if (uc==
' ' || uc==
'>' || uc==
'/')
619 if ((fc==
'!' && uc==
'!') || (fc==
'?' && uc==
'?')) {
624 uc=(
unsigned char) chr;
644 uc=(
unsigned char) chr;
658 if (uc==
'/' || uc==
'?' || uc==
'!') {
663 uc=(
unsigned char) chr;
698 uc=(
unsigned char) chr;
705 if (uc==
'/' || uc==
'!' || uc==
'?' || uc==
'=' || uc==
'>')
714 uc=(
unsigned char) chr;
730 uc=(
unsigned char) chr;
741 if (uc==
'>' || uc<33)
745 "Nested element definitions");
751 if (uc==
'/' || uc==
'!' || uc==
'?') {
760 tc=(
unsigned char) chr;
810 if (uc==
'>' || uc==
'?' || uc==
'!' || uc==
'/')
814 if (uc==
'?' || uc==
'!' || uc==
'/') {
815 unsigned char ucsave=uc;
821 uc=(
unsigned char) chr;
834 "Got an unexpected character here (after %02x[%c]): %02x[%c], " 835 "maybe the text contains unescaped XML characters?",
836 ucsave, ucsave, uc, uc);
849 "Internal error: Should never reach this point");
922 "Not on same level where we started...(%d!=%d)",
1025 if (text && *text) {
GWEN_XMLNODE * GWEN_XMLNode_GetHeader(const GWEN_XMLNODE *n)
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_GetProperty(const GWEN_XMLNODE *n, const char *name, const char *defaultValue)
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)
int GWEN_Text_ConvertCharset(const char *fromCharset, const char *toCharset, const char *text, int len, GWEN_BUFFER *tbuf)
#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)
void GWEN_XmlCtx_SetEncoding(GWEN_XML_CONTEXT *ctx, const char *encoding)
#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_XMLNode__WriteToStream(const GWEN_XMLNODE *n, GWEN_FAST_BUFFER *fb, uint32_t flags, const char *encoding, unsigned int ind)
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)
const char * GWEN_XMLNode_GetData(const GWEN_XMLNODE *n)
#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
const char * GWEN_XmlCtx_GetEncoding(const GWEN_XML_CONTEXT *ctx)
#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)