34 for (i=0; i<ind; i++) {
169 const char *encoding,
225 if (n->data[0]==
'?') {
233 else if (n->data[0]==
'!') {
331 const char *encoding,
380 const char *encoding,
442 const char *encoding,
523 const char *encoding;
527 if (strcasecmp(encoding,
"UTF-8")==0 ||
528 strcasecmp(encoding,
"UTF8")==0)
682 uc=(
unsigned char) chr;
736 uc=(
unsigned char) chr;
749 uc=(
unsigned char) chr;
750 if (uc==
'>' || uc<33)
767 uc=(
unsigned char) chr;
793 uc=(
unsigned char) chr;
800 uc=(
unsigned char) chr;
813 uc=(
unsigned char) chr;
820 if (strcmp(p,
"-->")==0) {
856 if (uc==
' ' || uc==
'>' || uc==
'/')
862 if ((fc==
'!' && uc==
'!') || (fc==
'?' && uc==
'?')) {
867 uc=(
unsigned char) chr;
887 uc=(
unsigned char) chr;
901 if (uc==
'/' || uc==
'?' || uc==
'!') {
906 uc=(
unsigned char) chr;
941 uc=(
unsigned char) chr;
948 if (uc==
'/' || uc==
'!' || uc==
'?' || uc==
'=' || uc==
'>')
957 uc=(
unsigned char) chr;
973 uc=(
unsigned char) chr;
984 if (uc==
'>' || uc<33)
988 "Nested element definitions");
994 if (uc==
'/' || uc==
'!' || uc==
'?') {
1003 tc=(
unsigned char) chr;
1053 if (uc==
'>' || uc==
'?' || uc==
'!' || uc==
'/')
1057 if (uc==
'?' || uc==
'!' || uc==
'/') {
1058 unsigned char ucsave=uc;
1064 uc=(
unsigned char) chr;
1077 "Got an unexpected character here (after %02x[%c]): %02x[%c], "
1078 "maybe the text contains unescaped XML characters?",
1079 ucsave, ucsave, uc, uc);
1092 "Internal error: Should never reach this point");
1165 "Not on same level where we started...(%d!=%d)",
1268 if (text && *text) {
GWEN_BUFFER * GWEN_Buffer_new(char *buffer, uint32_t size, uint32_t used, int take)
void GWEN_Buffer_Reset(GWEN_BUFFER *bf)
void GWEN_Buffer_SubMode(GWEN_BUFFER *bf, uint32_t mode)
void GWEN_Buffer_Dump(GWEN_BUFFER *bf, unsigned int insert)
void GWEN_Buffer_free(GWEN_BUFFER *bf)
int GWEN_Buffer_AppendString(GWEN_BUFFER *bf, const char *buffer)
uint32_t GWEN_Buffer_GetUsedBytes(const GWEN_BUFFER *bf)
char * GWEN_Buffer_GetStart(const GWEN_BUFFER *bf)
void GWEN_Buffer_AddMode(GWEN_BUFFER *bf, uint32_t mode)
int GWEN_Buffer_AppendByte(GWEN_BUFFER *bf, char c)
#define GWEN_BUFFER_MODE_DYNAMIC
#define GWEN_BUFFER_MODE_READONLY
#define DBG_VERBOUS(dbg_logger, format,...)
#define DBG_INFO(dbg_logger, format,...)
#define DBG_ERROR(dbg_logger, format,...)
#define DBG_DEBUG(dbg_logger, format,...)
#define GWEN_ERROR_INTERNAL
#define GWEN_ERROR_BAD_DATA
uint32_t GWEN_FastBuffer_GetBytesRead(const GWEN_FAST_BUFFER *fb)
void GWEN_FastBuffer_free(GWEN_FAST_BUFFER *fb)
GWEN_FAST_BUFFER * GWEN_FastBuffer_new(uint32_t bsize, GWEN_SYNCIO *io)
#define GWEN_FASTBUFFER_WRITEBYTE(fb, var, chr)
#define GWEN_FASTBUFFER_READBYTE(fb, var)
#define GWEN_FASTBUFFER_FLUSH(fb, var)
#define GWEN_FASTBUFFER_WRITELINE(fb, var, p)
#define GWEN_FASTBUFFER_WRITEFORCED(fb, var, p, len)
#define GWEN_FASTBUFFER_PEEKBYTE(fb, var)
struct GWEN_BUFFER GWEN_BUFFER
A dynamically resizeable text buffer.
GWEN_XMLNODE_NAMESPACE * GWEN_XMLNode_NameSpace_List_First(const GWEN_XMLNODE_NAMESPACE_LIST *l)
GWEN_XMLNODE_NAMESPACE * GWEN_XMLNode_NameSpace_List_Next(const GWEN_XMLNODE_NAMESPACE *element)
int GWEN_SyncIo_Connect(GWEN_SYNCIO *sio)
void GWEN_SyncIo_AddFlags(GWEN_SYNCIO *sio, uint32_t fl)
void GWEN_SyncIo_free(GWEN_SYNCIO *sio)
int GWEN_SyncIo_Disconnect(GWEN_SYNCIO *sio)
struct GWEN_SYNCIO GWEN_SYNCIO
@ GWEN_SyncIo_File_CreationMode_CreateAlways
@ GWEN_SyncIo_File_CreationMode_OpenExisting
#define GWEN_SYNCIO_FILE_FLAGS_UWRITE
GWENHYWFAR_API GWEN_SYNCIO * GWEN_SyncIo_File_new(const char *path, GWEN_SYNCIO_FILE_CREATIONMODE cm)
#define GWEN_SYNCIO_FILE_FLAGS_READ
#define GWEN_SYNCIO_FILE_FLAGS_UREAD
#define GWEN_SYNCIO_FILE_FLAGS_WRITE
GWEN_SYNCIO * GWEN_SyncIo_Memory_new(GWEN_BUFFER *buffer, int take)
GWEN_SYNCIO * GWEN_SyncIo_Memory_fromBuffer(const uint8_t *buffer, int size)
int GWEN_Text_ConvertCharset(const char *fromCharset, const char *toCharset, const char *text, int len, GWEN_BUFFER *tbuf)
const char * GWEN_XMLNode_GetProperty(const GWEN_XMLNODE *n, const char *name, const char *defaultValue)
GWEN_XMLNODE * GWEN_XMLNode_GetFirstTag(const GWEN_XMLNODE *n)
GWEN_XMLNODE * GWEN_XMLNode_new(GWEN_XMLNODE_TYPE t, const char *data)
const char * GWEN_XMLNode_NameSpace_GetName(const GWEN_XMLNODE_NAMESPACE *ns)
GWEN_XMLNODE * GWEN_XMLNode_Next(const GWEN_XMLNODE *n)
GWEN_XMLNODE * GWEN_XMLNode_GetHeader(const GWEN_XMLNODE *n)
const char * GWEN_XMLNode_NameSpace_GetUrl(const GWEN_XMLNODE_NAMESPACE *ns)
#define GWEN_XML_BUFFERSIZE
void GWEN_XMLNode_free(GWEN_XMLNODE *n)
const char * GWEN_XMLNode_GetData(const GWEN_XMLNODE *n)
GWEN_XMLNODE * GWEN_XMLNode_GetChild(const GWEN_XMLNODE *n)
#define GWEN_XML_FLAGS_HANDLE_NAMESPACES
struct GWEN_XMLNODE_NAMESPACE GWEN_XMLNODE_NAMESPACE
#define GWEN_XML_FLAGS_HANDLE_COMMENTS
#define GWEN_XML_FLAGS_INDENT
#define GWEN_XML_FLAGS_HANDLE_HEADERS
struct GWEN__XMLNODE GWEN_XMLNODE
@ GWEN_XMLNodeTypeComment
#define GWEN_XML_FLAGS_SIMPLE
struct GWEN__XMLPROPERTY GWEN_XMLPROPERTY
void GWEN_XmlCtx_ResetFinishedElement(GWEN_XML_CONTEXT *ctx)
const char * GWEN_XmlCtx_GetEncoding(const GWEN_XML_CONTEXT *ctx)
void GWEN_XmlCtx_SetEncoding(GWEN_XML_CONTEXT *ctx, const char *encoding)
int GWEN_XmlCtx_AddAttr(GWEN_XML_CONTEXT *ctx, const char *attrName, const char *attrData)
int GWEN_XmlCtx_EndTag(GWEN_XML_CONTEXT *ctx, int closing)
int GWEN_XmlCtx_GetDepth(const GWEN_XML_CONTEXT *ctx)
int GWEN_XmlCtx_AddData(GWEN_XML_CONTEXT *ctx, const char *data)
void GWEN_XmlCtx_free(GWEN_XML_CONTEXT *ctx)
int GWEN_XmlCtx_AddComment(GWEN_XML_CONTEXT *ctx, const char *data)
uint32_t GWEN_XmlCtx_GetFinishedElement(const GWEN_XML_CONTEXT *ctx)
GWEN_XML_CONTEXT * GWEN_XmlCtxStore_new(GWEN_XMLNODE *n, uint32_t flags)
int GWEN_XmlCtx_StartTag(GWEN_XML_CONTEXT *ctx, const char *tagName)
uint32_t GWEN_XmlCtx_GetFlags(const GWEN_XML_CONTEXT *ctx)
struct GWEN_XML_CONTEXT GWEN_XML_CONTEXT
int GWEN_XMLContext_ReadFromIo(GWEN_XML_CONTEXT *ctx, GWEN_SYNCIO *sio)
int GWEN_XMLContext_ReadFromFile(GWEN_XML_CONTEXT *ctx, const char *fname)
static int GWEN_XMLNode__WriteToStream(const GWEN_XMLNODE *n, GWEN_FAST_BUFFER *fb, uint32_t flags, const char *encoding, unsigned int ind)
int GWEN_XMLNode_WriteFile(const GWEN_XMLNODE *n, const char *fname, uint32_t flags)
int GWEN_XML__ReadTag(GWEN_XML_CONTEXT *ctx, GWEN_FAST_BUFFER *fb, GWEN_UNUSED uint32_t flags, GWEN_BUFFER *dbuf)
static int GWEN_XMLNode__WriteDataToStream(const GWEN_XMLNODE *n, GWEN_FAST_BUFFER *fb, uint32_t flags, const char *encoding, unsigned int ind)
static int GWEN_XMLNode__WriteTagToStream(const GWEN_XMLNODE *n, GWEN_FAST_BUFFER *fb, uint32_t flags, const char *encoding, unsigned int ind)
int GWEN_XML_ReadFromFastBuffer(GWEN_XML_CONTEXT *ctx, GWEN_FAST_BUFFER *fb)
int GWEN_XMLNode_WriteToStream(const GWEN_XMLNODE *n, GWEN_XML_CONTEXT *ctx, GWEN_SYNCIO *sio)
int GWEN_XMLNode_toBuffer(const GWEN_XMLNODE *n, GWEN_BUFFER *buf, uint32_t flags)
int GWEN_XML__ReadData(GWEN_XML_CONTEXT *ctx, GWEN_FAST_BUFFER *fb, GWEN_UNUSED uint32_t flags)
int GWEN_XML__ReadAllFromIo(GWEN_XML_CONTEXT *ctx, GWEN_SYNCIO *sio)
int GWEN_XML_ReadFile(GWEN_XMLNODE *n, const char *filepath, uint32_t flags)
static int GWEN_XMLNode__WriteNamespacesToStream(const GWEN_XMLNODE *n, GWEN_FAST_BUFFER *fb)
GWEN_XMLNODE * GWEN_XMLNode_fromString(const char *s, int len, uint32_t flags)
static int GWEN_XMLNode__WritePropertiesToStream(const GWEN_XMLNODE *n, GWEN_FAST_BUFFER *fb, const char *encoding)
static int GWEN_XMLNode__WriteCommentToStream(const GWEN_XMLNODE *n, GWEN_FAST_BUFFER *fb, uint32_t flags, const char *encoding, unsigned int ind)
int GWEN_XMLContext_ReadFromString(GWEN_XML_CONTEXT *ctx, const char *text)
static int GWEN_XMLNode__WriteIndents(GWEN_FAST_BUFFER *fb, int ind)