34 for (i=0; i<ind; i++) {
168 const char *encoding,
224 if (n->data[0]==
'?') {
232 else if (n->data[0]==
'!') {
330 const char *encoding,
379 const char *encoding,
441 const char *encoding,
522 const char *encoding;
526 if (strcasecmp(encoding,
"UTF-8")==0 ||
527 strcasecmp(encoding,
"UTF8")==0)
681 uc=(
unsigned char) chr;
735 uc=(
unsigned char) chr;
748 uc=(
unsigned char) chr;
749 if (uc==
'>' || uc<33)
766 uc=(
unsigned char) chr;
792 uc=(
unsigned char) chr;
799 uc=(
unsigned char) chr;
812 uc=(
unsigned char) chr;
819 if (strcmp(p,
"-->")==0) {
855 if (uc==
' ' || uc==
'>' || uc==
'/')
861 if ((fc==
'!' && uc==
'!') || (fc==
'?' && uc==
'?')) {
866 uc=(
unsigned char) chr;
886 uc=(
unsigned char) chr;
900 if (uc==
'/' || uc==
'?' || uc==
'!') {
905 uc=(
unsigned char) chr;
940 uc=(
unsigned char) chr;
947 if (uc==
'/' || uc==
'!' || uc==
'?' || uc==
'=' || uc==
'>')
956 uc=(
unsigned char) chr;
972 uc=(
unsigned char) chr;
983 if (uc==
'>' || uc<33)
987 "Nested element definitions");
993 if (uc==
'/' || uc==
'!' || uc==
'?') {
1002 tc=(
unsigned char) chr;
1052 if (uc==
'>' || uc==
'?' || uc==
'!' || uc==
'/')
1056 if (uc==
'?' || uc==
'!' || uc==
'/') {
1057 unsigned char ucsave=uc;
1063 uc=(
unsigned char) chr;
1076 "Got an unexpected character here (after %02x[%c]): %02x[%c], " 1077 "maybe the text contains unescaped XML characters?",
1078 ucsave, ucsave, uc, uc);
1091 "Internal error: Should never reach this point");
1164 "Not on same level where we started...(%d!=%d)",
1267 if (text && *text) {
static int GWEN_XMLNode__WritePropertiesToStream(const GWEN_XMLNODE *n, GWEN_FAST_BUFFER *fb, const char *encoding)
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)
static int GWEN_XMLNode__WriteTagToStream(const GWEN_XMLNODE *n, GWEN_FAST_BUFFER *fb, uint32_t flags, const char *encoding, unsigned int ind)
#define GWEN_FASTBUFFER_PEEKBYTE(fb, var)
void GWEN_FastBuffer_free(GWEN_FAST_BUFFER *fb)
static int GWEN_XMLNode__WriteCommentToStream(const GWEN_XMLNODE *n, GWEN_FAST_BUFFER *fb, uint32_t flags, const char *encoding, unsigned int ind)
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)
static int GWEN_XMLNode__WriteNamespacesToStream(const GWEN_XMLNODE *n, GWEN_FAST_BUFFER *fb)
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_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
static int GWEN_XMLNode__WriteDataToStream(const GWEN_XMLNODE *n, GWEN_FAST_BUFFER *fb, uint32_t flags, const char *encoding, unsigned int ind)
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)
static int GWEN_XMLNode__WriteToStream(const GWEN_XMLNODE *n, GWEN_FAST_BUFFER *fb, uint32_t flags, const char *encoding, unsigned int ind)
#define DBG_ERROR(dbg_logger, format, args...)
GWEN_XMLNODE * GWEN_XMLNode_GetFirstTag(const GWEN_XMLNODE *n)
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)
static int GWEN_XMLNode__WriteIndents(GWEN_FAST_BUFFER *fb, int ind)
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)