16 #define DISABLE_DEBUGLOG
19 #include "htmlctx_p.h"
23 #include <gwenhywfar/misc.h>
24 #include <gwenhywfar/debug.h>
25 #include <gwenhywfar/text.h>
57 xctx->objects=HtmlObject_Tree_new();
68 HtmlObject_Tree_Add(xctx->objects, o);
94 free(xctx->currentTagName);
95 HtmlObject_Tree_free(xctx->objects);
113 return xctx->resolutionX;
137 return xctx->resolutionY;
161 return xctx->mediaPaths;
187 return xctx->currentGroup;
199 xctx->currentGroup=g;
211 return xctx->currentTagName;
223 free(xctx->currentTagName);
224 if (s) xctx->currentTagName=strdup(s);
225 else xctx->currentTagName=
NULL;
237 return xctx->dbCurrentAttribs;
249 return xctx->objects;
277 return HtmlObject_Tree_GetFirst(xctx->objects);
292 uint8_t *lastBlankPos;
308 while(*src && (*src<33 || *src==127))
317 for (i=0; i<size; i++) {
361 return xctx->standardProps;
376 xctx->standardProps=pr;
381 o=HtmlObject_Tree_GetFirst(xctx->objects);
418 (xctx->currentTagName)?xctx->currentTagName:
"<noname>");
422 if (xctx->currentTagName==
NULL) {
429 if (xctx->currentGroup) {
430 if (*(xctx->currentTagName)==
'/') {
435 "Calling %s->EndTag(%s)",
437 xctx->currentTagName);
442 "Error in EndTag(%s) for [%s]",
444 xctx->currentTagName);
453 g=xctx->currentGroup;
455 xctx->currentGroup=gParent;
458 "Calling %s->EndSubGroup(%s)",
472 "Calling %s->StartTag(%s)",
474 xctx->currentTagName);
479 "Error in StartTag(%s) for [%s]",
481 xctx->currentTagName);
503 if (xctx->currentGroup) {
507 "Calling %s->AddData()",
513 "Error in AddData(%s)",
539 const char *attrName,
540 const char *attrData) {
547 if (xctx->currentGroup) {
548 assert(xctx->dbCurrentAttribs);
568 if (xctx->getTextWidthFn)
569 return xctx->getTextWidthFn(ctx, fnt, s);
585 if (xctx->getTextHeightFn)
586 return xctx->getTextHeightFn(ctx, fnt, s);
601 if (xctx->getColorFromNameFn)
602 return xctx->getColorFromNameFn(ctx, name);
610 const char *fontName,
612 uint32_t fontFlags) {
620 return xctx->getFontFn(ctx, fontName, fontSize, fontFlags);
634 if (xctx->getImageFn)
635 return xctx->getImageFn(ctx, imageName);
651 of=xctx->getTextWidthFn;
652 xctx->getTextWidthFn=fn;
668 of=xctx->getTextHeightFn;
669 xctx->getTextHeightFn=fn;
685 of=xctx->getColorFromNameFn;
686 xctx->getColorFromNameFn=fn;
734 o=HtmlObject_Tree_GetFirst(xctx->objects);
764 HtmlObject_Tree_Clear(xctx->objects);
774 HtmlObject_Tree_Add(xctx->objects, o);
785 fprintf(stderr,
"============ Objects:\n");
786 fprintf(stderr,
"String: [%s]\n", s);
787 o=HtmlObject_Tree_GetFirst(xctx->objects);
792 fprintf(stderr,
"Object(%d): [%s]\n",
795 o=HtmlObject_Tree_GetBelow(o);
void HtmlCtx_SetCurrentTagName(GWEN_XML_CONTEXT *ctx, const char *s)
void HtmlCtx_SetResolutionX(GWEN_XML_CONTEXT *ctx, int i)
struct HTML_GROUP HTML_GROUP
HTMLCTX_GET_TEXT_WIDTH_FN HtmlCtx_SetGetTextWidthFn(GWEN_XML_CONTEXT *ctx, HTMLCTX_GET_TEXT_WIDTH_FN fn)
char * GWEN_Buffer_GetStart(const GWEN_BUFFER *bf)
int HtmlGroup_EndSubGroup(HTML_GROUP *g, HTML_GROUP *sg)
void HtmlCtx_SetStandardProps(GWEN_XML_CONTEXT *ctx, HTML_PROPS *pr)
HTML_OBJECT * HtmlObject_Box_new(GWEN_XML_CONTEXT *ctx)
void HtmlGroup_SetObject(HTML_GROUP *g, HTML_OBJECT *o)
struct GWEN_DB_NODE GWEN_DB_NODE
HTMLCTX_GET_COLOR_FROM_NAME_FN HtmlCtx_SetGetColorFromNameFn(GWEN_XML_CONTEXT *ctx, HTMLCTX_GET_COLOR_FROM_NAME_FN fn)
HTML_OBJECT_TYPE HtmlObject_GetObjectType(const HTML_OBJECT *o)
void GWEN_DB_Group_free(GWEN_DB_NODE *n)
void HtmlProps_free(HTML_PROPS *pr)
GWEN_XMLCTX_ADDATTR_FN GWEN_XmlCtx_SetAddAttrFn(GWEN_XML_CONTEXT *ctx, GWEN_XMLCTX_ADDATTR_FN f)
int HtmlObject_Layout(HTML_OBJECT *o)
HTML_OBJECT_TREE * HtmlCtx_TakeObjects(const GWEN_XML_CONTEXT *ctx)
int(* HTMLCTX_GET_TEXT_WIDTH_FN)(GWEN_XML_CONTEXT *ctx, HTML_FONT *fnt, const char *s)
uint32_t GWEN_Buffer_GetUsedBytes(const GWEN_BUFFER *bf)
uint32_t(* HTMLCTX_GET_COLOR_FROM_NAME_FN)(const GWEN_XML_CONTEXT *ctx, const char *s)
GWEN_XMLCTX_STARTTAG_FN GWEN_XmlCtx_SetStartTagFn(GWEN_XML_CONTEXT *ctx, GWEN_XMLCTX_STARTTAG_FN f)
GWEN_STRINGLIST * HtmlCtx_GetMediaPaths(const GWEN_XML_CONTEXT *ctx)
HTML_GROUP * HtmlGroup_GetParent(const HTML_GROUP *g)
int HtmlCtx_AddAttr(GWEN_XML_CONTEXT *ctx, const char *attrName, const char *attrData)
int HtmlCtx_AddComment(GWEN_XML_CONTEXT *ctx, const char *data)
#define GWEN_FREE_OBJECT(varname)
int HtmlObject_GetWidth(const HTML_OBJECT *o)
HTML_IMAGE *(* HTMLCTX_GET_IMAGE_FN)(GWEN_XML_CONTEXT *ctx, const char *imageName)
GWEN_XML_CONTEXT * GWEN_XmlCtx_new(uint32_t flags)
const char * HtmlGroup_GetGroupName(const HTML_GROUP *g)
GWEN_XMLCTX_ENDTAG_FN GWEN_XmlCtx_SetEndTagFn(GWEN_XML_CONTEXT *ctx, GWEN_XMLCTX_ENDTAG_FN f)
void HtmlProps_Attach(HTML_PROPS *pr)
int HtmlGroup_StartTag(HTML_GROUP *g, const char *tagName)
uint32_t HtmlCtx_GetColorFromName(const GWEN_XML_CONTEXT *ctx, const char *name)
const char * HtmlObject_GetText(const HTML_OBJECT *o)
HTML_PROPS * HtmlObject_GetProperties(const HTML_OBJECT *o)
void HtmlCtx_SetResolutionY(GWEN_XML_CONTEXT *ctx, int i)
#define GWEN_ERROR_BAD_DATA
void GWEN_StringList_free(GWEN_STRINGLIST *sl)
void HtmlObject_SetHeight(HTML_OBJECT *o, int i)
int HtmlCtx_SanitizeData(GWEN_XML_CONTEXT *ctx, const char *data, GWEN_BUFFER *buf)
HTML_PROPS * HtmlCtx_GetStandardProps(const GWEN_XML_CONTEXT *ctx)
#define GWEN_NEW_OBJECT(typ, varname)
struct HTML_IMAGE HTML_IMAGE
int GWEN_StringList_AppendString(GWEN_STRINGLIST *sl, const char *s, int take, int checkDouble)
int HtmlGroup_AddData(HTML_GROUP *g, const char *data)
#define DBG_DEBUG(dbg_logger, format, args...)
GWEN_XMLCTX_ADDCOMMENT_FN GWEN_XmlCtx_SetAddCommentFn(GWEN_XML_CONTEXT *ctx, GWEN_XMLCTX_ADDCOMMENT_FN f)
struct HTML_FONT HTML_FONT
HTML_GROUP * HtmlGroup_Box_new(const char *groupName, HTML_GROUP *parent, GWEN_XML_CONTEXT *ctx)
struct GWEN_STRINGLISTSTRUCT GWEN_STRINGLIST
const char * HtmlCtx_GetCurrentTagName(const GWEN_XML_CONTEXT *ctx)
int HtmlCtx_EndTag(GWEN_XML_CONTEXT *ctx, int closing)
void HtmlObject_SetProperties(HTML_OBJECT *o, HTML_PROPS *pr)
struct HTML_PROPS HTML_PROPS
int HtmlCtx_Layout(GWEN_XML_CONTEXT *ctx, int width, int height)
int GWEN_Text_UnescapeXmlToBuffer(const char *src, GWEN_BUFFER *buf)
void HtmlGroup_free(HTML_GROUP *g)
struct GWEN_BUFFER GWEN_BUFFER
A dynamically resizeable text buffer.
GWEN_DB_NODE * HtmlCtx_GetCurrentAttributes(const GWEN_XML_CONTEXT *ctx)
int GWEN_Buffer_Crop(GWEN_BUFFER *bf, uint32_t pos, uint32_t l)
HTMLCTX_GET_IMAGE_FN HtmlCtx_SetGetImageFn(GWEN_XML_CONTEXT *ctx, HTMLCTX_GET_IMAGE_FN fn)
int GWEN_XmlCtx_DecDepth(GWEN_XML_CONTEXT *ctx)
#define DBG_ERROR(dbg_logger, format, args...)
GWENHYWFAR_API int GWEN_XMLContext_ReadFromString(GWEN_XML_CONTEXT *ctx, const char *text)
GWEN_XML_CONTEXT * HtmlCtx_new(uint32_t flags)
int GWEN_DB_SetCharValue(GWEN_DB_NODE *n, uint32_t flags, const char *path, const char *val)
int(* HTMLCTX_GET_TEXT_HEIGHT_FN)(GWEN_XML_CONTEXT *ctx, HTML_FONT *fnt, const char *s)
HTMLCTX_GET_FONT_FN HtmlCtx_SetGetFontFn(GWEN_XML_CONTEXT *ctx, HTMLCTX_GET_FONT_FN fn)
#define DBG_INFO(dbg_logger, format, args...)
int HtmlCtx_StartTag(GWEN_XML_CONTEXT *ctx, const char *tagName)
HTML_FONT * HtmlCtx_GetFont(GWEN_XML_CONTEXT *ctx, const char *fontName, int fontSize, uint32_t fontFlags)
HTML_GROUP * HtmlCtx_GetCurrentGroup(const GWEN_XML_CONTEXT *ctx)
HTML_IMAGE * HtmlCtx_GetImage(GWEN_XML_CONTEXT *ctx, const char *imageName)
void HtmlCtx_SetCurrentGroup(GWEN_XML_CONTEXT *ctx, HTML_GROUP *g)
GWEN_XMLCTX_ADDDATA_FN GWEN_XmlCtx_SetAddDataFn(GWEN_XML_CONTEXT *ctx, GWEN_XMLCTX_ADDDATA_FN f)
GWEN_DB_NODE * GWEN_DB_Group_new(const char *name)
int HtmlCtx_GetWidth(const GWEN_XML_CONTEXT *ctx)
int HtmlCtx_GetResolutionY(const GWEN_XML_CONTEXT *ctx)
int HtmlCtx_GetHeight(const GWEN_XML_CONTEXT *ctx)
int HtmlCtx_GetTextHeight(GWEN_XML_CONTEXT *ctx, HTML_FONT *fnt, const char *s)
#define GWEN_INHERIT(bt, t)
int HtmlGroup_EndTag(HTML_GROUP *g, const char *tagName)
int HtmlObject_GetHeight(const HTML_OBJECT *o)
void HtmlCtx_SetText(GWEN_XML_CONTEXT *ctx, const char *s)
HTML_FONT *(* HTMLCTX_GET_FONT_FN)(GWEN_XML_CONTEXT *ctx, const char *fontName, int fontSize, uint32_t fontFlags)
int HtmlCtx_GetTextWidth(GWEN_XML_CONTEXT *ctx, HTML_FONT *fnt, const char *s)
void HtmlGroup_SetProperties(HTML_GROUP *g, HTML_PROPS *pr)
GWENHYWFAR_CB void HtmlCtx_FreeData(void *bp, void *p)
HTML_OBJECT_TREE * HtmlCtx_GetObjects(const GWEN_XML_CONTEXT *ctx)
#define GWEN_INHERIT_SETDATA(bt, t, element, data, fn)
int HtmlCtx_AddData(GWEN_XML_CONTEXT *ctx, const char *data)
void HtmlObject_SetWidth(HTML_OBJECT *o, int i)
GWEN_STRINGLIST * GWEN_StringList_new(void)
HTMLCTX_GET_TEXT_HEIGHT_FN HtmlCtx_SetGetTextHeightFn(GWEN_XML_CONTEXT *ctx, HTMLCTX_GET_TEXT_HEIGHT_FN fn)
void HtmlCtx_AddMediaPath(GWEN_XML_CONTEXT *ctx, const char *s)
struct GWEN_XML_CONTEXT GWEN_XML_CONTEXT
#define GWEN_DB_FLAGS_DEFAULT
#define GWEN_INHERIT_GETDATA(bt, t, element)
int HtmlCtx_GetResolutionX(const GWEN_XML_CONTEXT *ctx)
struct HTML_OBJECT HTML_OBJECT
HTML_OBJECT * HtmlCtx_GetRootObject(const GWEN_XML_CONTEXT *ctx)
#define GWEN_ERROR_NOT_IMPLEMENTED