34 #include "gwenhywfar/debug.h" 35 #include "gwenhywfar/misc.h" 36 #include "gwenhywfar/text.h" 37 #include "gwenhywfar/path.h" 70 assert(ctx->_refCount);
71 if (ctx->_refCount==1) {
88 assert(ctx->_refCount);
113 return ctx->encoding;
174 return ctx->finishedElements;
182 ctx->finishedElements++;
190 ctx->finishedElements=0;
206 return ctx->currentNode;
214 ctx->currentHeader=n;
222 return ctx->currentHeader;
285 of=ctx->addCommentFn;
298 return ctx->startTagFn(ctx, tagName);
312 return ctx->endTagFn(ctx, closing);
326 return ctx->addDataFn(ctx, data);
339 if (ctx->addCommentFn)
340 return ctx->addCommentFn(ctx, data);
350 const char *attrName,
351 const char *attrData)
356 return ctx->addAttrFn(ctx, attrName, attrData);
409 else if (strcasecmp(tagName,
"!DOCTYPE")==0) {
418 else if (*tagName==
'/') {
429 if (strcasecmp(s, tagName)!=0) {
432 "Endtag does not match curent tag (%s != %s)", s, tagName);
441 if (strcasecmp(s, tagName)==0)
498 closing?
"closing":
"not closing");
547 uint8_t *lastBlankPos;
554 while (*src && (*src==32 || *src==9))
558 while (*src && *src<33)
569 for (i=0; i<size; i++) {
624 const char *attrName,
625 const char *attrData)
632 && (strcmp(attrName,
"encoding")==0)) {
633 if (strcasecmp(attrData,
"UTF-8")==0)
643 int isNormalProperty=1;
652 if (strcasecmp(attrName,
"xmlns")==0) {
662 else if (strncasecmp(attrName,
"xmlns:", 6)==0) {
665 name=strchr(attrName,
':');
682 if (isNormalProperty) {
int(* GWEN_XMLCTX_ADDATTR_FN)(GWEN_XML_CONTEXT *ctx, const char *attrName, const char *attrData)
char * GWEN_Buffer_GetStart(const GWEN_BUFFER *bf)
struct GWEN_XMLNODE_NAMESPACE GWEN_XMLNODE_NAMESPACE
void GWEN_XMLNode_AddHeader(GWEN_XMLNODE *n, GWEN_XMLNODE *nh)
#define GWEN_INHERIT_FINI(t, element)
#define GWEN_ERROR_INVALID
GWEN_XMLCTX_ADDATTR_FN GWEN_XmlCtx_SetAddAttrFn(GWEN_XML_CONTEXT *ctx, GWEN_XMLCTX_ADDATTR_FN f)
uint32_t GWEN_Buffer_GetUsedBytes(const GWEN_BUFFER *bf)
GWEN_XMLCTX_STARTTAG_FN GWEN_XmlCtx_SetStartTagFn(GWEN_XML_CONTEXT *ctx, GWEN_XMLCTX_STARTTAG_FN f)
#define GWEN_XML_FLAGS_KEEP_BLANKS
#define GWEN_FREE_OBJECT(varname)
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)
void GWEN_XMLNode_SetProperty(GWEN_XMLNODE *n, const char *name, const char *value)
int GWEN_XmlCtx_StartTag(GWEN_XML_CONTEXT *ctx, const char *tagName)
GWEN_XML_CONTEXT * GWEN_XmlCtx_new(uint32_t flags)
int(* GWEN_XMLCTX_ADDCOMMENT_FN)(GWEN_XML_CONTEXT *ctx, const char *data)
GWEN_XMLCTX_ENDTAG_FN GWEN_XmlCtx_SetEndTagFn(GWEN_XML_CONTEXT *ctx, GWEN_XMLCTX_ENDTAG_FN f)
void GWEN_XMLNode_AddNameSpace(GWEN_XMLNODE *n, const GWEN_XMLNODE_NAMESPACE *ns)
int GWEN_XmlCtx_GetDepth(const GWEN_XML_CONTEXT *ctx)
void GWEN_XmlCtx_Attach(GWEN_XML_CONTEXT *ctx)
GWEN_XMLNODE * GWEN_XMLNode_new(GWEN_XMLNODE_TYPE t, const char *data)
void GWEN_XMLNode_NameSpace_free(GWEN_XMLNODE_NAMESPACE *ns)
GWEN_BUFFER * GWEN_Buffer_new(char *buffer, uint32_t size, uint32_t used, int take)
int(* GWEN_XMLCTX_ENDTAG_FN)(GWEN_XML_CONTEXT *ctx, int closing)
uint32_t GWEN_XmlCtx_GetFinishedElement(const GWEN_XML_CONTEXT *ctx)
GWEN_XMLNODE_NAMESPACE * GWEN_XMLNode_NameSpace_new(const char *name, const char *url)
void GWEN_XmlCtx_free(GWEN_XML_CONTEXT *ctx)
#define GWEN_ERROR_BAD_DATA
#define GWEN_NEW_OBJECT(typ, varname)
void GWEN_XmlCtx_SetCurrentHeader(GWEN_XML_CONTEXT *ctx, GWEN_XMLNODE *n)
int GWEN_XmlCtx_EndTag(GWEN_XML_CONTEXT *ctx, int closing)
int GWEN_XmlCtxStore_StartTag(GWEN_XML_CONTEXT *ctx, const char *tagName)
#define GWEN_XML_FLAGS_NO_CONDENSE
void GWEN_XmlCtx_SetDepth(GWEN_XML_CONTEXT *ctx, int i)
int GWEN_XmlCtx_AddData(GWEN_XML_CONTEXT *ctx, const char *data)
void GWEN_XmlCtx_SetEncoding(GWEN_XML_CONTEXT *ctx, const char *encoding)
GWEN_XMLCTX_ADDCOMMENT_FN GWEN_XmlCtx_SetAddCommentFn(GWEN_XML_CONTEXT *ctx, GWEN_XMLCTX_ADDCOMMENT_FN f)
void GWEN_XmlCtx_IncDepth(GWEN_XML_CONTEXT *ctx)
#define GWEN_XML_FLAGS_TOLERANT_ENDTAGS
void GWEN_XmlCtx_IncFinishedElement(GWEN_XML_CONTEXT *ctx)
GWEN_XMLNODE * GWEN_XmlCtx_GetCurrentHeader(const GWEN_XML_CONTEXT *ctx)
GWEN_XML_CONTEXT * GWEN_XmlCtxStore_new(GWEN_XMLNODE *n, uint32_t flags)
#define GWEN_INHERIT_INIT(t, element)
int GWEN_Text_UnescapeXmlToBuffer(const char *src, GWEN_BUFFER *buf)
int GWEN_XmlCtxStore_AddComment(GWEN_UNUSED GWEN_XML_CONTEXT *ctx, GWEN_UNUSED const char *data)
void GWEN_XmlCtx_SetFlags(GWEN_XML_CONTEXT *ctx, uint32_t f)
void GWEN_Buffer_free(GWEN_BUFFER *bf)
struct GWEN_BUFFER GWEN_BUFFER
A dynamically resizeable text buffer.
int(* GWEN_XMLCTX_STARTTAG_FN)(GWEN_XML_CONTEXT *ctx, const char *tagName)
#define GWEN_XML_FLAGS_KEEP_CNTRL
GWEN_XMLNODE * GWEN_XMLNode_GetParent(const GWEN_XMLNODE *n)
int GWEN_XmlCtxStore_AddAttr(GWEN_XML_CONTEXT *ctx, const char *attrName, const char *attrData)
int GWEN_Buffer_Crop(GWEN_BUFFER *bf, uint32_t pos, uint32_t l)
int(* GWEN_XMLCTX_ADDDATA_FN)(GWEN_XML_CONTEXT *ctx, const char *data)
int GWEN_XmlCtx_DecDepth(GWEN_XML_CONTEXT *ctx)
uint32_t GWEN_XmlCtx_GetFlags(const GWEN_XML_CONTEXT *ctx)
void GWEN_XmlCtx_SetCurrentNode(GWEN_XML_CONTEXT *ctx, GWEN_XMLNODE *n)
const char * GWEN_XMLNode_GetData(const GWEN_XMLNODE *n)
#define DBG_INFO(dbg_logger, format, args...)
int GWEN_XmlCtx_AddComment(GWEN_XML_CONTEXT *ctx, const char *data)
GWEN_XMLCTX_ADDDATA_FN GWEN_XmlCtx_SetAddDataFn(GWEN_XML_CONTEXT *ctx, GWEN_XMLCTX_ADDDATA_FN f)
const char * GWEN_XmlCtx_GetEncoding(const GWEN_XML_CONTEXT *ctx)
int GWEN_XmlCtxStore_EndTag(GWEN_XML_CONTEXT *ctx, int closing)
#define GWEN_XML_FLAGS_HANDLE_HEADERS
#define GWEN_XML_FLAGS_HANDLE_NAMESPACES
GWEN_XMLNODE * GWEN_XmlCtx_GetCurrentNode(const GWEN_XML_CONTEXT *ctx)
#define GWEN_INHERIT_FUNCTIONS(t)
struct GWEN__XMLNODE GWEN_XMLNODE
struct GWEN_XML_CONTEXT GWEN_XML_CONTEXT
void GWEN_XMLNode_AddChild(GWEN_XMLNODE *n, GWEN_XMLNODE *child)
int GWEN_XmlCtxStore_AddData(GWEN_XML_CONTEXT *ctx, const char *data)