31#include "gwenhywfar/debug.h"
32#include "gwenhywfar/misc.h"
33#include "gwenhywfar/text.h"
34#include "gwenhywfar/path.h"
84 assert(ctx->_refCount);
85 if (ctx->_refCount==1) {
102 assert(ctx->_refCount);
127 return ctx->encoding;
188 return ctx->finishedElements;
196 ctx->finishedElements++;
204 ctx->finishedElements=0;
220 return ctx->currentNode;
228 ctx->currentHeader=n;
236 return ctx->currentHeader;
299 of=ctx->addCommentFn;
312 return ctx->startTagFn(ctx, tagName);
326 return ctx->endTagFn(ctx, closing);
340 return ctx->addDataFn(ctx, data);
353 if (ctx->addCommentFn)
354 return ctx->addCommentFn(ctx, data);
364 const char *attrName,
365 const char *attrData)
370 return ctx->addAttrFn(ctx, attrName, attrData);
423 else if (strcasecmp(tagName,
"!DOCTYPE")==0) {
432 else if (*tagName==
'/') {
443 if (strcasecmp(s, tagName)!=0) {
497 if (strcasecmp(s, tagName)==0)
548 closing?
"closing":
"not closing");
597 uint8_t *lastBlankPos;
604 while (*src && (*src==32 || *src==9))
608 while (*src && *src<33)
619 for (i=0; i<size; i++) {
674 const char *attrName,
675 const char *attrData)
682 && (strcmp(attrName,
"encoding")==0)) {
683 if (strcasecmp(attrData,
"UTF-8")==0)
693 int isNormalProperty=1;
702 if (strcasecmp(attrName,
"xmlns")==0) {
712 else if (strncasecmp(attrName,
"xmlns:", 6)==0) {
715 name=strchr(attrName,
':');
732 if (isNormalProperty) {
GWEN_BUFFER * GWEN_Buffer_new(char *buffer, uint32_t size, uint32_t used, int take)
void GWEN_Buffer_free(GWEN_BUFFER *bf)
uint32_t GWEN_Buffer_GetUsedBytes(const GWEN_BUFFER *bf)
char * GWEN_Buffer_GetStart(const GWEN_BUFFER *bf)
int GWEN_Buffer_Crop(GWEN_BUFFER *bf, uint32_t pos, uint32_t l)
#define DBG_VERBOUS(dbg_logger, format,...)
#define DBG_INFO(dbg_logger, format,...)
#define GWEN_ERROR_INVALID
#define GWEN_ERROR_BAD_DATA
struct GWEN_BUFFER GWEN_BUFFER
A dynamically resizeable text buffer.
#define GWEN_INHERIT_FUNCTIONS(t)
#define GWEN_INHERIT_INIT(t, element)
#define GWEN_INHERIT_FINI(t, element)
#define GWEN_FREE_OBJECT(varname)
#define GWEN_NEW_OBJECT(typ, varname)
int GWEN_Text_UnescapeXmlToBuffer(const char *src, GWEN_BUFFER *buf)
GWEN_XMLNODE_NAMESPACE * GWEN_XMLNode_NameSpace_new(const char *name, const char *url)
GWEN_XMLNODE * GWEN_XMLNode_GetParent(const GWEN_XMLNODE *n)
void GWEN_XMLNode_AddHeader(GWEN_XMLNODE *n, GWEN_XMLNODE *nh)
GWEN_XMLNODE * GWEN_XMLNode_GetFirstTag(const GWEN_XMLNODE *n)
void GWEN_XMLNode_NameSpace_free(GWEN_XMLNODE_NAMESPACE *ns)
void GWEN_XMLNode_UnlinkChild(GWEN_XMLNODE *n, GWEN_XMLNODE *child)
void GWEN_XMLNode_SetProperty(GWEN_XMLNODE *n, const char *name, const char *value)
GWEN_XMLNODE * GWEN_XMLNode_new(GWEN_XMLNODE_TYPE t, const char *data)
void GWEN_XMLNode_AddNameSpace(GWEN_XMLNODE *n, const GWEN_XMLNODE_NAMESPACE *ns)
void GWEN_XMLNode_AddChild(GWEN_XMLNODE *n, GWEN_XMLNODE *child)
const char * GWEN_XMLNode_GetData(const GWEN_XMLNODE *n)
#define GWEN_XML_FLAGS_HANDLE_NAMESPACES
#define GWEN_XML_FLAGS_TOLERANT_ENDTAGS
#define GWEN_XML_FLAGS_NO_CONDENSE
struct GWEN_XMLNODE_NAMESPACE GWEN_XMLNODE_NAMESPACE
#define GWEN_XML_FLAGS_KEEP_CNTRL
#define GWEN_XML_FLAGS_HANDLE_HEADERS
struct GWEN__XMLNODE GWEN_XMLNODE
#define GWEN_XML_FLAGS_SGML
#define GWEN_XML_FLAGS_KEEP_BLANKS
static void _moveSubTagsUpOneLevel(GWEN_XMLNODE *currNode)
GWEN_XMLCTX_ADDDATA_FN GWEN_XmlCtx_SetAddDataFn(GWEN_XML_CONTEXT *ctx, GWEN_XMLCTX_ADDDATA_FN f)
void GWEN_XmlCtx_ResetFinishedElement(GWEN_XML_CONTEXT *ctx)
const char * GWEN_XmlCtx_GetEncoding(const GWEN_XML_CONTEXT *ctx)
void GWEN_XmlCtx_IncDepth(GWEN_XML_CONTEXT *ctx)
void GWEN_XmlCtx_SetEncoding(GWEN_XML_CONTEXT *ctx, const char *encoding)
int GWEN_XmlCtxStore_AddData(GWEN_XML_CONTEXT *ctx, const char *data)
void GWEN_XmlCtx_SetCurrentHeader(GWEN_XML_CONTEXT *ctx, GWEN_XMLNODE *n)
void GWEN_XmlCtx_SetCurrentNode(GWEN_XML_CONTEXT *ctx, GWEN_XMLNODE *n)
static GWEN_XMLNODE * _findTagForClosingTagAndcloseAndMoveSubTags(GWEN_XML_CONTEXT *ctx, GWEN_XMLNODE *currNode, const char *tagName)
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_XmlCtxStore_AddAttr(GWEN_XML_CONTEXT *ctx, const char *attrName, const char *attrData)
int GWEN_XmlCtx_GetDepth(const GWEN_XML_CONTEXT *ctx)
GWEN_XMLCTX_ENDTAG_FN GWEN_XmlCtx_SetEndTagFn(GWEN_XML_CONTEXT *ctx, GWEN_XMLCTX_ENDTAG_FN f)
int GWEN_XmlCtxStore_EndTag(GWEN_XML_CONTEXT *ctx, int closing)
void GWEN_XmlCtx_SetFlags(GWEN_XML_CONTEXT *ctx, uint32_t f)
int GWEN_XmlCtxStore_AddComment(GWEN_UNUSED GWEN_XML_CONTEXT *ctx, GWEN_UNUSED const char *data)
GWEN_XMLNODE * GWEN_XmlCtx_GetCurrentHeader(const GWEN_XML_CONTEXT *ctx)
GWEN_XMLCTX_ADDCOMMENT_FN GWEN_XmlCtx_SetAddCommentFn(GWEN_XML_CONTEXT *ctx, GWEN_XMLCTX_ADDCOMMENT_FN f)
GWEN_XMLCTX_ADDATTR_FN GWEN_XmlCtx_SetAddAttrFn(GWEN_XML_CONTEXT *ctx, GWEN_XMLCTX_ADDATTR_FN f)
int GWEN_XmlCtx_DecDepth(GWEN_XML_CONTEXT *ctx)
int GWEN_XmlCtxStore_StartTag(GWEN_XML_CONTEXT *ctx, const char *tagName)
int GWEN_XmlCtx_AddData(GWEN_XML_CONTEXT *ctx, const char *data)
void GWEN_XmlCtx_free(GWEN_XML_CONTEXT *ctx)
GWEN_XML_CONTEXT * GWEN_XmlCtx_new(uint32_t flags)
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)
void GWEN_XmlCtx_Attach(GWEN_XML_CONTEXT *ctx)
GWEN_XMLNODE * GWEN_XmlCtx_GetCurrentNode(const GWEN_XML_CONTEXT *ctx)
void GWEN_XmlCtx_IncFinishedElement(GWEN_XML_CONTEXT *ctx)
void GWEN_XmlCtx_SetDepth(GWEN_XML_CONTEXT *ctx, int i)
GWEN_XMLCTX_STARTTAG_FN GWEN_XmlCtx_SetStartTagFn(GWEN_XML_CONTEXT *ctx, GWEN_XMLCTX_STARTTAG_FN f)
int(* GWEN_XMLCTX_ENDTAG_FN)(GWEN_XML_CONTEXT *ctx, int closing)
struct GWEN_XML_CONTEXT GWEN_XML_CONTEXT
int(* GWEN_XMLCTX_ADDCOMMENT_FN)(GWEN_XML_CONTEXT *ctx, const char *data)
int(* GWEN_XMLCTX_ADDDATA_FN)(GWEN_XML_CONTEXT *ctx, const char *data)
int(* GWEN_XMLCTX_STARTTAG_FN)(GWEN_XML_CONTEXT *ctx, const char *tagName)
int(* GWEN_XMLCTX_ADDATTR_FN)(GWEN_XML_CONTEXT *ctx, const char *attrName, const char *attrData)