16#define DISABLE_DEBUGLOG
23#include <gwenhywfar/misc.h>
24#include <gwenhywfar/debug.h>
25#include <gwenhywfar/text.h>
58 xctx->objects=HtmlObject_Tree_new();
69 HtmlObject_Tree_Add(xctx->objects, o);
84 xctx=(HTML_XMLCTX *)p;
96 free(xctx->currentTagName);
97 HtmlObject_Tree_free(xctx->objects);
116 return xctx->resolutionX;
142 return xctx->resolutionY;
168 return xctx->mediaPaths;
196 return xctx->currentGroup;
209 xctx->currentGroup=g;
222 return xctx->currentTagName;
235 free(xctx->currentTagName);
237 xctx->currentTagName=strdup(s);
239 xctx->currentTagName=
NULL;
252 return xctx->dbCurrentAttribs;
265 return xctx->objects;
295 return HtmlObject_Tree_GetFirst(xctx->objects);
311 uint8_t *lastBlankPos;
327 while (*src && (*src<33 || *src==127))
336 for (i=0; i<size; i++) {
381 return xctx->standardProps;
397 xctx->standardProps=pr;
402 o=HtmlObject_Tree_GetFirst(xctx->objects);
441 (xctx->currentTagName)?xctx->currentTagName:
"<noname>");
445 if (xctx->currentTagName==
NULL) {
452 if (xctx->currentGroup) {
453 if (*(xctx->currentTagName)==
'/') {
458 "Calling %s->EndTag(%s)",
460 xctx->currentTagName);
465 "Error in EndTag(%s) for [%s]",
467 xctx->currentTagName);
476 g=xctx->currentGroup;
478 xctx->currentGroup=gParent;
481 "Calling %s->EndSubGroup(%s)",
495 "Calling %s->StartTag(%s)",
497 xctx->currentTagName);
502 "Error in StartTag(%s) for [%s]",
504 xctx->currentTagName);
527 if (xctx->currentGroup) {
531 "Calling %s->AddData()",
537 "Error in AddData(%s)",
564 const char *attrName,
565 const char *attrData)
573 if (xctx->currentGroup) {
574 assert(xctx->dbCurrentAttribs);
595 if (xctx->getTextWidthFn)
596 return xctx->getTextWidthFn(ctx, fnt, s);
613 if (xctx->getTextHeightFn)
614 return xctx->getTextHeightFn(ctx, fnt, s);
630 if (xctx->getColorFromNameFn)
631 return xctx->getColorFromNameFn(ctx, name);
639 const char *fontName,
650 return xctx->getFontFn(ctx, fontName, fontSize, fontFlags);
665 if (xctx->getImageFn)
666 return xctx->getImageFn(ctx, imageName);
683 of=xctx->getTextWidthFn;
684 xctx->getTextWidthFn=fn;
701 of=xctx->getTextHeightFn;
702 xctx->getTextHeightFn=fn;
719 of=xctx->getColorFromNameFn;
720 xctx->getColorFromNameFn=fn;
771 o=HtmlObject_Tree_GetFirst(xctx->objects);
802 HtmlObject_Tree_Clear(xctx->objects);
812 HtmlObject_Tree_Add(xctx->objects, o);
823 fprintf(stderr,
"============ Objects:\n");
824 fprintf(stderr,
"String: [%s]\n", s);
825 o=HtmlObject_Tree_GetFirst(xctx->objects);
830 fprintf(stderr,
"Object(%d): [%s]\n",
833 o=HtmlObject_Tree_GetBelow(o);
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)
GWEN_DB_NODE * GWEN_DB_Group_new(const char *name)
int GWEN_DB_SetCharValue(GWEN_DB_NODE *n, uint32_t flags, const char *path, const char *val)
void GWEN_DB_Group_free(GWEN_DB_NODE *n)
#define GWEN_DB_FLAGS_DEFAULT
struct GWEN_DB_NODE GWEN_DB_NODE
#define DBG_INFO(dbg_logger, format,...)
#define DBG_ERROR(dbg_logger, format,...)
#define DBG_DEBUG(dbg_logger, format,...)
#define GWEN_ERROR_NOT_IMPLEMENTED
#define GWEN_ERROR_BAD_DATA
HTML_GROUP * HtmlGroup_Box_new(const char *groupName, HTML_GROUP *parent, GWEN_XML_CONTEXT *ctx)
struct GWEN_BUFFER GWEN_BUFFER
A dynamically resizeable text buffer.
HTMLCTX_GET_FONT_FN HtmlCtx_SetGetFontFn(GWEN_XML_CONTEXT *ctx, HTMLCTX_GET_FONT_FN fn)
int HtmlCtx_EndTag(GWEN_XML_CONTEXT *ctx, int closing)
int HtmlCtx_AddData(GWEN_XML_CONTEXT *ctx, const char *data)
HTML_OBJECT_TREE * HtmlCtx_GetObjects(const GWEN_XML_CONTEXT *ctx)
void HtmlCtx_SetResolutionY(GWEN_XML_CONTEXT *ctx, int i)
int HtmlCtx_GetTextHeight(GWEN_XML_CONTEXT *ctx, HTML_FONT *fnt, const char *s)
int HtmlCtx_AddAttr(GWEN_XML_CONTEXT *ctx, const char *attrName, const char *attrData)
HTML_IMAGE * HtmlCtx_GetImage(GWEN_XML_CONTEXT *ctx, const char *imageName)
GWEN_XML_CONTEXT * HtmlCtx_new(uint32_t flags)
HTML_OBJECT * HtmlCtx_GetRootObject(const GWEN_XML_CONTEXT *ctx)
const char * HtmlCtx_GetCurrentTagName(const GWEN_XML_CONTEXT *ctx)
void HtmlCtx_SetCurrentTagName(GWEN_XML_CONTEXT *ctx, const char *s)
int HtmlCtx_Layout(GWEN_XML_CONTEXT *ctx, int width, int height)
int HtmlCtx_GetResolutionX(const GWEN_XML_CONTEXT *ctx)
void HtmlCtx_SetStandardProps(GWEN_XML_CONTEXT *ctx, HTML_PROPS *pr)
HTML_OBJECT_TREE * HtmlCtx_TakeObjects(const GWEN_XML_CONTEXT *ctx)
int HtmlCtx_AddComment(GWEN_XML_CONTEXT *ctx, GWEN_UNUSED const char *data)
void HtmlCtx_SetCurrentGroup(GWEN_XML_CONTEXT *ctx, HTML_GROUP *g)
uint32_t HtmlCtx_GetColorFromName(const GWEN_XML_CONTEXT *ctx, const char *name)
void HtmlCtx_SetResolutionX(GWEN_XML_CONTEXT *ctx, int i)
int HtmlCtx_GetHeight(const GWEN_XML_CONTEXT *ctx)
HTMLCTX_GET_TEXT_HEIGHT_FN HtmlCtx_SetGetTextHeightFn(GWEN_XML_CONTEXT *ctx, HTMLCTX_GET_TEXT_HEIGHT_FN fn)
void HtmlCtx_SetText(GWEN_XML_CONTEXT *ctx, const char *s)
HTMLCTX_GET_IMAGE_FN HtmlCtx_SetGetImageFn(GWEN_XML_CONTEXT *ctx, HTMLCTX_GET_IMAGE_FN fn)
HTML_FONT * HtmlCtx_GetFont(GWEN_XML_CONTEXT *ctx, const char *fontName, int fontSize, uint32_t fontFlags)
void HtmlCtx_AddMediaPath(GWEN_XML_CONTEXT *ctx, const char *s)
int HtmlCtx_StartTag(GWEN_XML_CONTEXT *ctx, const char *tagName)
HTML_GROUP * HtmlCtx_GetCurrentGroup(const GWEN_XML_CONTEXT *ctx)
int HtmlCtx_GetTextWidth(GWEN_XML_CONTEXT *ctx, HTML_FONT *fnt, const char *s)
HTMLCTX_GET_TEXT_WIDTH_FN HtmlCtx_SetGetTextWidthFn(GWEN_XML_CONTEXT *ctx, HTMLCTX_GET_TEXT_WIDTH_FN fn)
GWEN_DB_NODE * HtmlCtx_GetCurrentAttributes(const GWEN_XML_CONTEXT *ctx)
HTML_PROPS * HtmlCtx_GetStandardProps(const GWEN_XML_CONTEXT *ctx)
HTMLCTX_GET_COLOR_FROM_NAME_FN HtmlCtx_SetGetColorFromNameFn(GWEN_XML_CONTEXT *ctx, HTMLCTX_GET_COLOR_FROM_NAME_FN fn)
int HtmlCtx_SanitizeData(GWEN_UNUSED GWEN_XML_CONTEXT *ctx, const char *data, GWEN_BUFFER *buf)
GWEN_STRINGLIST * HtmlCtx_GetMediaPaths(const GWEN_XML_CONTEXT *ctx)
GWENHYWFAR_CB void HtmlCtx_FreeData(GWEN_UNUSED void *bp, void *p)
int HtmlCtx_GetResolutionY(const GWEN_XML_CONTEXT *ctx)
int HtmlCtx_GetWidth(const GWEN_XML_CONTEXT *ctx)
int(* HTMLCTX_GET_TEXT_HEIGHT_FN)(GWEN_XML_CONTEXT *ctx, HTML_FONT *fnt, const char *s)
HTML_FONT *(* HTMLCTX_GET_FONT_FN)(GWEN_XML_CONTEXT *ctx, const char *fontName, int fontSize, uint32_t fontFlags)
int(* HTMLCTX_GET_TEXT_WIDTH_FN)(GWEN_XML_CONTEXT *ctx, HTML_FONT *fnt, const char *s)
HTML_IMAGE *(* HTMLCTX_GET_IMAGE_FN)(GWEN_XML_CONTEXT *ctx, const char *imageName)
uint32_t(* HTMLCTX_GET_COLOR_FROM_NAME_FN)(const GWEN_XML_CONTEXT *ctx, const char *s)
struct HTML_FONT HTML_FONT
const char * HtmlGroup_GetGroupName(const HTML_GROUP *g)
int HtmlGroup_EndTag(HTML_GROUP *g, const char *tagName)
void HtmlGroup_SetObject(HTML_GROUP *g, HTML_OBJECT *o)
int HtmlGroup_StartTag(HTML_GROUP *g, const char *tagName)
void HtmlGroup_free(HTML_GROUP *g)
int HtmlGroup_AddData(HTML_GROUP *g, const char *data)
int HtmlGroup_EndSubGroup(HTML_GROUP *g, HTML_GROUP *sg)
void HtmlGroup_SetProperties(HTML_GROUP *g, HTML_PROPS *pr)
HTML_GROUP * HtmlGroup_GetParent(const HTML_GROUP *g)
struct HTML_GROUP HTML_GROUP
struct HTML_IMAGE HTML_IMAGE
HTML_OBJECT_TYPE HtmlObject_GetObjectType(const HTML_OBJECT *o)
void HtmlObject_SetProperties(HTML_OBJECT *o, HTML_PROPS *pr)
void HtmlObject_SetWidth(HTML_OBJECT *o, int i)
int HtmlObject_GetWidth(const HTML_OBJECT *o)
const char * HtmlObject_GetText(const HTML_OBJECT *o)
void HtmlObject_SetHeight(HTML_OBJECT *o, int i)
HTML_PROPS * HtmlObject_GetProperties(const HTML_OBJECT *o)
int HtmlObject_GetHeight(const HTML_OBJECT *o)
int HtmlObject_Layout(HTML_OBJECT *o)
struct HTML_OBJECT HTML_OBJECT
void HtmlProps_free(HTML_PROPS *pr)
void HtmlProps_Attach(HTML_PROPS *pr)
struct HTML_PROPS HTML_PROPS
#define GWEN_INHERIT_SETDATA(bt, t, element, data, fn)
#define GWEN_INHERIT(bt, t)
#define GWEN_INHERIT_GETDATA(bt, t, element)
#define GWEN_FREE_OBJECT(varname)
#define GWEN_NEW_OBJECT(typ, varname)
HTML_OBJECT * HtmlObject_Box_new(GWEN_XML_CONTEXT *ctx)
void GWEN_StringList_free(GWEN_STRINGLIST *sl)
int GWEN_StringList_AppendString(GWEN_STRINGLIST *sl, const char *s, int take, int checkDouble)
GWEN_STRINGLIST * GWEN_StringList_new(void)
struct GWEN_STRINGLISTSTRUCT GWEN_STRINGLIST
int GWEN_Text_UnescapeXmlToBuffer(const char *src, GWEN_BUFFER *buf)
GWENHYWFAR_API int GWEN_XMLContext_ReadFromString(GWEN_XML_CONTEXT *ctx, const char *text)
GWEN_XMLCTX_ADDDATA_FN GWEN_XmlCtx_SetAddDataFn(GWEN_XML_CONTEXT *ctx, GWEN_XMLCTX_ADDDATA_FN f)
GWEN_XMLCTX_ENDTAG_FN GWEN_XmlCtx_SetEndTagFn(GWEN_XML_CONTEXT *ctx, GWEN_XMLCTX_ENDTAG_FN f)
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)
GWEN_XML_CONTEXT * GWEN_XmlCtx_new(uint32_t flags)
GWEN_XMLCTX_STARTTAG_FN GWEN_XmlCtx_SetStartTagFn(GWEN_XML_CONTEXT *ctx, GWEN_XMLCTX_STARTTAG_FN f)
struct GWEN_XML_CONTEXT GWEN_XML_CONTEXT