gwenhywfar 5.14.1
htmlctx.c
Go to the documentation of this file.
1/***************************************************************************
2 begin : Sat Feb 20 2010
3 copyright : (C) 2010 by Martin Preuss
4 email : martin@libchipcard.de
5
6 ***************************************************************************
7 * Please see toplevel file COPYING for license details *
8 ***************************************************************************/
9
10
11
12#ifdef HAVE_CONFIG_H
13# include <config.h>
14#endif
15
16#define DISABLE_DEBUGLOG
17
18
19#include "htmlctx_p.h"
20#include "o_box_l.h"
21#include "g_box_l.h"
22
23#include <gwenhywfar/misc.h>
24#include <gwenhywfar/debug.h>
25#include <gwenhywfar/text.h>
26
27
28
30
31
32
33
35{
37 HTML_XMLCTX *xctx;
38 HTML_GROUP *g;
39 HTML_OBJECT *o;
40
41 /* create base object */
42 ctx=GWEN_XmlCtx_new(flags);
43 assert(ctx);
44
45 /* create and assign extension */
46 GWEN_NEW_OBJECT(HTML_XMLCTX, xctx);
47 assert(xctx);
48 GWEN_INHERIT_SETDATA(GWEN_XML_CONTEXT, HTML_XMLCTX, ctx, xctx,
50
51 /* set virtual functions */
57
58 xctx->objects=HtmlObject_Tree_new();
59 xctx->mediaPaths=GWEN_StringList_new();
60
61 xctx->resolutionX=75;
62 xctx->resolutionY=75;
63
64 /* create initial group */
65 g=HtmlGroup_Box_new("HTML_ROOT", NULL, ctx);
66 assert(g);
67 o=HtmlObject_Box_new(ctx);
69 HtmlObject_Tree_Add(xctx->objects, o);
71
72 /* return base object */
73 return ctx;
74}
75
76
77
79void HtmlCtx_FreeData(GWEN_UNUSED void *bp, void *p)
80{
81 HTML_XMLCTX *xctx;
82 HTML_GROUP *g;
83
84 xctx=(HTML_XMLCTX *)p;
85
86 g=xctx->currentGroup;
87 while (g) {
88 HTML_GROUP *gParent;
89
90 gParent=HtmlGroup_GetParent(g);
92 g=gParent;
93 }
94
95 GWEN_DB_Group_free(xctx->dbCurrentAttribs);
96 free(xctx->currentTagName);
97 HtmlObject_Tree_free(xctx->objects);
98
99 GWEN_StringList_free(xctx->mediaPaths);
100
101 HtmlProps_free(xctx->standardProps);
102
103 GWEN_FREE_OBJECT(xctx);
104}
105
106
107
109{
110 HTML_XMLCTX *xctx;
111
112 assert(ctx);
113 xctx=GWEN_INHERIT_GETDATA(GWEN_XML_CONTEXT, HTML_XMLCTX, ctx);
114 assert(xctx);
115
116 return xctx->resolutionX;
117}
118
119
120
122{
123 HTML_XMLCTX *xctx;
124
125 assert(ctx);
126 xctx=GWEN_INHERIT_GETDATA(GWEN_XML_CONTEXT, HTML_XMLCTX, ctx);
127 assert(xctx);
128
129 xctx->resolutionX=i;
130}
131
132
133
135{
136 HTML_XMLCTX *xctx;
137
138 assert(ctx);
139 xctx=GWEN_INHERIT_GETDATA(GWEN_XML_CONTEXT, HTML_XMLCTX, ctx);
140 assert(xctx);
141
142 return xctx->resolutionY;
143}
144
145
146
148{
149 HTML_XMLCTX *xctx;
150
151 assert(ctx);
152 xctx=GWEN_INHERIT_GETDATA(GWEN_XML_CONTEXT, HTML_XMLCTX, ctx);
153 assert(xctx);
154
155 xctx->resolutionY=i;
156}
157
158
159
161{
162 HTML_XMLCTX *xctx;
163
164 assert(ctx);
165 xctx=GWEN_INHERIT_GETDATA(GWEN_XML_CONTEXT, HTML_XMLCTX, ctx);
166 assert(xctx);
167
168 return xctx->mediaPaths;
169}
170
171
172
173void HtmlCtx_AddMediaPath(GWEN_XML_CONTEXT *ctx, const char *s)
174{
175 HTML_XMLCTX *xctx;
176
177 assert(ctx);
178 xctx=GWEN_INHERIT_GETDATA(GWEN_XML_CONTEXT, HTML_XMLCTX, ctx);
179 assert(xctx);
180
181 assert(s && *s);
182 GWEN_StringList_AppendString(xctx->mediaPaths, s, 0, 1);
183}
184
185
186
187
189{
190 HTML_XMLCTX *xctx;
191
192 assert(ctx);
193 xctx=GWEN_INHERIT_GETDATA(GWEN_XML_CONTEXT, HTML_XMLCTX, ctx);
194 assert(xctx);
195
196 return xctx->currentGroup;
197}
198
199
200
202{
203 HTML_XMLCTX *xctx;
204
205 assert(ctx);
206 xctx=GWEN_INHERIT_GETDATA(GWEN_XML_CONTEXT, HTML_XMLCTX, ctx);
207 assert(xctx);
208
209 xctx->currentGroup=g;
210}
211
212
213
215{
216 HTML_XMLCTX *xctx;
217
218 assert(ctx);
219 xctx=GWEN_INHERIT_GETDATA(GWEN_XML_CONTEXT, HTML_XMLCTX, ctx);
220 assert(xctx);
221
222 return xctx->currentTagName;
223}
224
225
226
228{
229 HTML_XMLCTX *xctx;
230
231 assert(ctx);
232 xctx=GWEN_INHERIT_GETDATA(GWEN_XML_CONTEXT, HTML_XMLCTX, ctx);
233 assert(xctx);
234
235 free(xctx->currentTagName);
236 if (s)
237 xctx->currentTagName=strdup(s);
238 else
239 xctx->currentTagName=NULL;
240}
241
242
243
245{
246 HTML_XMLCTX *xctx;
247
248 assert(ctx);
249 xctx=GWEN_INHERIT_GETDATA(GWEN_XML_CONTEXT, HTML_XMLCTX, ctx);
250 assert(xctx);
251
252 return xctx->dbCurrentAttribs;
253}
254
255
256
257HTML_OBJECT_TREE *HtmlCtx_GetObjects(const GWEN_XML_CONTEXT *ctx)
258{
259 HTML_XMLCTX *xctx;
260
261 assert(ctx);
262 xctx=GWEN_INHERIT_GETDATA(GWEN_XML_CONTEXT, HTML_XMLCTX, ctx);
263 assert(xctx);
264
265 return xctx->objects;
266}
267
268
269
270HTML_OBJECT_TREE *HtmlCtx_TakeObjects(const GWEN_XML_CONTEXT *ctx)
271{
272 HTML_XMLCTX *xctx;
273 HTML_OBJECT_TREE *t;
274
275 assert(ctx);
276 xctx=GWEN_INHERIT_GETDATA(GWEN_XML_CONTEXT, HTML_XMLCTX, ctx);
277 assert(xctx);
278
279 t=xctx->objects;
280 xctx->objects=NULL;
281
282 return t;
283}
284
285
286
288{
289 HTML_XMLCTX *xctx;
290
291 assert(ctx);
292 xctx=GWEN_INHERIT_GETDATA(GWEN_XML_CONTEXT, HTML_XMLCTX, ctx);
293 assert(xctx);
294
295 return HtmlObject_Tree_GetFirst(xctx->objects);
296}
297
298
299
301 const char *data,
302 GWEN_BUFFER *buf)
303{
304 if (data && *data) {
305 const uint8_t *p;
306 uint8_t *dst;
307 uint8_t *src;
308 unsigned int size;
309 unsigned int i;
310 int lastWasBlank;
311 uint8_t *lastBlankPos;
312 uint32_t bStart=0;
313
314 if (GWEN_Text_UnescapeXmlToBuffer(data, buf)) {
315 DBG_INFO(GWEN_LOGDOMAIN, "here");
316 return GWEN_ERROR_BAD_DATA;
317 }
318 if (GWEN_Buffer_GetUsedBytes(buf)==0) {
319 DBG_INFO(GWEN_LOGDOMAIN, "Empty data.");
320 return 0;
321 }
322
323 dst=(uint8_t *)GWEN_Buffer_GetStart(buf);
324 src=dst;
325
326 /* skip leading blanks */
327 while (*src && (*src<33 || *src==127))
328 src++;
329
330 p=src;
331 bStart=src-((uint8_t *)GWEN_Buffer_GetStart(buf));
332 size=GWEN_Buffer_GetUsedBytes(buf)-bStart;
333 lastWasBlank=0;
334 lastBlankPos=0;
335
336 for (i=0; i<size; i++) {
337 uint8_t c;
338
339 c=*p;
340 if (c<32 || c==127)
341 c=32;
342
343 /* remember next loop whether this char was a blank */
344 if (c==32) {
345 if (!lastWasBlank) {
346 /* store only one blank */
347 lastWasBlank=1;
348 lastBlankPos=dst;
349 *(dst++)=c;
350 }
351 }
352 else {
353 lastWasBlank=0;
354 lastBlankPos=0;
355 *(dst++)=c;
356 }
357 p++;
358 }
359
360 /* remove trailing blanks */
361 if (lastBlankPos!=0)
362 dst=lastBlankPos;
363
364 size=dst-(uint8_t *)GWEN_Buffer_GetStart(buf);
365 GWEN_Buffer_Crop(buf, 0, size);
366 }
367
368 return 0;
369}
370
371
372
374{
375 HTML_XMLCTX *xctx;
376
377 assert(ctx);
378 xctx=GWEN_INHERIT_GETDATA(GWEN_XML_CONTEXT, HTML_XMLCTX, ctx);
379 assert(xctx);
380
381 return xctx->standardProps;
382}
383
384
385
387{
388 HTML_XMLCTX *xctx;
389 HTML_OBJECT *o;
390
391 assert(ctx);
392 xctx=GWEN_INHERIT_GETDATA(GWEN_XML_CONTEXT, HTML_XMLCTX, ctx);
393 assert(xctx);
394
396 HtmlProps_free(xctx->standardProps);
397 xctx->standardProps=pr;
398
399 if (pr) {
400 if (xctx->currentGroup && HtmlGroup_GetParent(xctx->currentGroup)==NULL)
401 HtmlGroup_SetProperties(xctx->currentGroup, pr);
402 o=HtmlObject_Tree_GetFirst(xctx->objects);
403 if (o && HtmlObject_GetProperties(o)==NULL)
405 }
406}
407
408
409
410int HtmlCtx_StartTag(GWEN_XML_CONTEXT *ctx, const char *tagName)
411{
412 HTML_XMLCTX *xctx;
413
414 assert(ctx);
415 xctx=GWEN_INHERIT_GETDATA(GWEN_XML_CONTEXT, HTML_XMLCTX, ctx);
416 assert(xctx);
417
418 DBG_DEBUG(GWEN_LOGDOMAIN, "Starting tag [%s]", tagName);
419
420 /* store for later, do nothing more here */
421 HtmlCtx_SetCurrentTagName(ctx, tagName);
422 GWEN_DB_Group_free(xctx->dbCurrentAttribs);
423 xctx->dbCurrentAttribs=GWEN_DB_Group_new("attribs");
424
425 return 0;
426}
427
428
429
430int HtmlCtx_EndTag(GWEN_XML_CONTEXT *ctx, int closing)
431{
432 HTML_XMLCTX *xctx;
433
434 assert(ctx);
435 xctx=GWEN_INHERIT_GETDATA(GWEN_XML_CONTEXT, HTML_XMLCTX, ctx);
436 assert(xctx);
437
438 if (closing) {
439 /* just ignore empty tags which are closed immediately */
440 DBG_DEBUG(GWEN_LOGDOMAIN, "Closing empty tag [%s]",
441 (xctx->currentTagName)?xctx->currentTagName:"<noname>");
442 return 0;
443 }
444
445 if (xctx->currentTagName==NULL) {
446 DBG_INFO(GWEN_LOGDOMAIN, "No tag name, malformed HTML data");
447 return GWEN_ERROR_BAD_DATA;
448 }
449
450 DBG_DEBUG(GWEN_LOGDOMAIN, "Completed tag [%s]", xctx->currentTagName);
451
452 if (xctx->currentGroup) {
453 if (*(xctx->currentTagName)=='/') {
454 int rv;
455
456 /* it is a closing tag, call EndTagFn */
458 "Calling %s->EndTag(%s)",
459 HtmlGroup_GetGroupName(xctx->currentGroup),
460 xctx->currentTagName);
461 rv=HtmlGroup_EndTag(xctx->currentGroup, xctx->currentTagName+1);
462 if (rv<0) {
465 "Error in EndTag(%s) for [%s]",
466 HtmlGroup_GetGroupName(xctx->currentGroup),
467 xctx->currentTagName);
468 return rv;
469 }
470 }
471 else if (rv==1) {
472 HTML_GROUP *g;
473 HTML_GROUP *gParent;
474
475 /* pop current group from stack */
476 g=xctx->currentGroup;
477 gParent=HtmlGroup_GetParent(g);
478 xctx->currentGroup=gParent;
479 if (gParent) {
481 "Calling %s->EndSubGroup(%s)",
482 HtmlGroup_GetGroupName(gParent),
484 HtmlGroup_EndSubGroup(gParent, g);
485 }
488 }
489 }
490 else {
491 int rv;
492
493 /* it is an opening tag, call StartTagFn */
495 "Calling %s->StartTag(%s)",
496 HtmlGroup_GetGroupName(xctx->currentGroup),
497 xctx->currentTagName);
498 rv=HtmlGroup_StartTag(xctx->currentGroup, xctx->currentTagName);
499 if (rv<0) {
502 "Error in StartTag(%s) for [%s]",
503 HtmlGroup_GetGroupName(xctx->currentGroup),
504 xctx->currentTagName);
505 return rv;
506 }
507 }
508 }
509 }
510
511 return 0;
512}
513
514
515
516
517
518
519int HtmlCtx_AddData(GWEN_XML_CONTEXT *ctx, const char *data)
520{
521 HTML_XMLCTX *xctx;
522
523 assert(ctx);
524 xctx=GWEN_INHERIT_GETDATA(GWEN_XML_CONTEXT, HTML_XMLCTX, ctx);
525 assert(xctx);
526
527 if (xctx->currentGroup) {
528 int rv;
529
531 "Calling %s->AddData()",
532 HtmlGroup_GetGroupName(xctx->currentGroup));
533 rv=HtmlGroup_AddData(xctx->currentGroup, data);
534 if (rv<0) {
537 "Error in AddData(%s)",
538 HtmlGroup_GetGroupName(xctx->currentGroup));
539 return rv;
540 }
541 }
542 }
543
544 return 0;
545}
546
547
548
550{
551 HTML_XMLCTX *xctx;
552
553 assert(ctx);
554 xctx=GWEN_INHERIT_GETDATA(GWEN_XML_CONTEXT, HTML_XMLCTX, ctx);
555 assert(xctx);
556
557 /* ignore comments */
558 return 0;
559}
560
561
562
564 const char *attrName,
565 const char *attrData)
566{
567 HTML_XMLCTX *xctx;
568
569 assert(ctx);
570 xctx=GWEN_INHERIT_GETDATA(GWEN_XML_CONTEXT, HTML_XMLCTX, ctx);
571 assert(xctx);
572
573 if (xctx->currentGroup) {
574 assert(xctx->dbCurrentAttribs);
575 GWEN_DB_SetCharValue(xctx->dbCurrentAttribs,
577 attrName, attrData);
578 }
579
580 return 0;
581}
582
583
584
586 HTML_FONT *fnt,
587 const char *s)
588{
589 HTML_XMLCTX *xctx;
590
591 assert(ctx);
592 xctx=GWEN_INHERIT_GETDATA(GWEN_XML_CONTEXT, HTML_XMLCTX, ctx);
593 assert(xctx);
594
595 if (xctx->getTextWidthFn)
596 return xctx->getTextWidthFn(ctx, fnt, s);
597 else
598 return -1;
599}
600
601
602
604 HTML_FONT *fnt,
605 const char *s)
606{
607 HTML_XMLCTX *xctx;
608
609 assert(ctx);
610 xctx=GWEN_INHERIT_GETDATA(GWEN_XML_CONTEXT, HTML_XMLCTX, ctx);
611 assert(xctx);
612
613 if (xctx->getTextHeightFn)
614 return xctx->getTextHeightFn(ctx, fnt, s);
615 else
616 return -1;
617}
618
619
620
622 const char *name)
623{
624 HTML_XMLCTX *xctx;
625
626 assert(ctx);
627 xctx=GWEN_INHERIT_GETDATA(GWEN_XML_CONTEXT, HTML_XMLCTX, ctx);
628 assert(xctx);
629
630 if (xctx->getColorFromNameFn)
631 return xctx->getColorFromNameFn(ctx, name);
632 else
633 return 0xffffffff;
634}
635
636
637
639 const char *fontName,
640 int fontSize,
641 uint32_t fontFlags)
642{
643 HTML_XMLCTX *xctx;
644
645 assert(ctx);
646 xctx=GWEN_INHERIT_GETDATA(GWEN_XML_CONTEXT, HTML_XMLCTX, ctx);
647 assert(xctx);
648
649 if (xctx->getFontFn)
650 return xctx->getFontFn(ctx, fontName, fontSize, fontFlags);
651 else
652 return NULL;
653}
654
655
656
657HTML_IMAGE *HtmlCtx_GetImage(GWEN_XML_CONTEXT *ctx, const char *imageName)
658{
659 HTML_XMLCTX *xctx;
660
661 assert(ctx);
662 xctx=GWEN_INHERIT_GETDATA(GWEN_XML_CONTEXT, HTML_XMLCTX, ctx);
663 assert(xctx);
664
665 if (xctx->getImageFn)
666 return xctx->getImageFn(ctx, imageName);
667 else
668 return NULL;
669}
670
671
672
675{
676 HTML_XMLCTX *xctx;
678
679 assert(ctx);
680 xctx=GWEN_INHERIT_GETDATA(GWEN_XML_CONTEXT, HTML_XMLCTX, ctx);
681 assert(xctx);
682
683 of=xctx->getTextWidthFn;
684 xctx->getTextWidthFn=fn;
685
686 return of;
687}
688
689
690
693{
694 HTML_XMLCTX *xctx;
696
697 assert(ctx);
698 xctx=GWEN_INHERIT_GETDATA(GWEN_XML_CONTEXT, HTML_XMLCTX, ctx);
699 assert(xctx);
700
701 of=xctx->getTextHeightFn;
702 xctx->getTextHeightFn=fn;
703
704 return of;
705}
706
707
708
711{
712 HTML_XMLCTX *xctx;
714
715 assert(ctx);
716 xctx=GWEN_INHERIT_GETDATA(GWEN_XML_CONTEXT, HTML_XMLCTX, ctx);
717 assert(xctx);
718
719 of=xctx->getColorFromNameFn;
720 xctx->getColorFromNameFn=fn;
721
722 return of;
723}
724
725
726
728{
729 HTML_XMLCTX *xctx;
731
732 assert(ctx);
733 xctx=GWEN_INHERIT_GETDATA(GWEN_XML_CONTEXT, HTML_XMLCTX, ctx);
734 assert(xctx);
735
736 of=xctx->getFontFn;
737 xctx->getFontFn=fn;
738
739 return of;
740}
741
742
743
745{
746 HTML_XMLCTX *xctx;
748
749 assert(ctx);
750 xctx=GWEN_INHERIT_GETDATA(GWEN_XML_CONTEXT, HTML_XMLCTX, ctx);
751 assert(xctx);
752
753 of=xctx->getImageFn;
754 xctx->getImageFn=fn;
755
756 return of;
757}
758
759
760
761int HtmlCtx_Layout(GWEN_XML_CONTEXT *ctx, int width, int height)
762{
763 HTML_XMLCTX *xctx;
764 HTML_OBJECT *o;
765 int rv;
766
767 assert(ctx);
768 xctx=GWEN_INHERIT_GETDATA(GWEN_XML_CONTEXT, HTML_XMLCTX, ctx);
769 assert(xctx);
770
771 o=HtmlObject_Tree_GetFirst(xctx->objects);
772 if (o==NULL) {
773 DBG_ERROR(GWEN_LOGDOMAIN, "No objects");
774 return 0;
775 }
776
777 HtmlObject_SetWidth(o, width);
778 HtmlObject_SetHeight(o, height);
779 rv=HtmlObject_Layout(o);
780 if (rv<0) {
781 DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
782 return rv;
783 }
784
785 return 0;
786}
787
788
789
790void HtmlCtx_SetText(GWEN_XML_CONTEXT *ctx, const char *s)
791{
792 HTML_XMLCTX *xctx;
793 int rv;
794 HTML_GROUP *g;
795 HTML_OBJECT *o;
796
797 assert(ctx);
798 xctx=GWEN_INHERIT_GETDATA(GWEN_XML_CONTEXT, HTML_XMLCTX, ctx);
799 assert(xctx);
800
801 /* reset */
802 HtmlObject_Tree_Clear(xctx->objects);
803
804 /* create initial group */
805 g=HtmlGroup_Box_new("HTML_ROOT", NULL, ctx);
806 assert(g);
807
808 HtmlGroup_SetProperties(g, xctx->standardProps);
809 o=HtmlObject_Box_new(ctx);
810 HtmlObject_SetProperties(o, xctx->standardProps);
812 HtmlObject_Tree_Add(xctx->objects, o);
814
815 if (s && *s) {
817 if (rv<0) {
818 DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
819 }
820 }
821
822#if 0
823 fprintf(stderr, "============ Objects:\n");
824 fprintf(stderr, "String: [%s]\n", s);
825 o=HtmlObject_Tree_GetFirst(xctx->objects);
826 while (o) {
827 const char *xx;
828
829 xx=HtmlObject_GetText(o);
830 fprintf(stderr, "Object(%d): [%s]\n",
832 xx?xx:"(NULL)");
833 o=HtmlObject_Tree_GetBelow(o);
834 }
835#endif
836}
837
838
839
841{
842 HTML_OBJECT *o;
843
845 if (o)
846 return HtmlObject_GetWidth(o);
847 else
848 return -1;
849}
850
851
852
854{
855 HTML_OBJECT *o;
856
858 if (o)
859 return HtmlObject_GetHeight(o);
860 else
861 return -1;
862}
863
864
#define NULL
Definition binreloc.c:300
uint32_t GWEN_Buffer_GetUsedBytes(const GWEN_BUFFER *bf)
Definition buffer.c:277
char * GWEN_Buffer_GetStart(const GWEN_BUFFER *bf)
Definition buffer.c:235
int GWEN_Buffer_Crop(GWEN_BUFFER *bf, uint32_t pos, uint32_t l)
Definition buffer.c:950
GWEN_DB_NODE * GWEN_DB_Group_new(const char *name)
Definition db.c:173
int GWEN_DB_SetCharValue(GWEN_DB_NODE *n, uint32_t flags, const char *path, const char *val)
Definition db.c:997
void GWEN_DB_Group_free(GWEN_DB_NODE *n)
Definition db.c:421
#define GWEN_DB_FLAGS_DEFAULT
Definition db.h:168
struct GWEN_DB_NODE GWEN_DB_NODE
Definition db.h:228
#define DBG_INFO(dbg_logger, format,...)
Definition debug.h:181
#define DBG_ERROR(dbg_logger, format,...)
Definition debug.h:97
#define DBG_DEBUG(dbg_logger, format,...)
Definition debug.h:214
#define GWEN_ERROR_NOT_IMPLEMENTED
Definition error.h:108
#define GWEN_ERROR_BAD_DATA
Definition error.h:121
HTML_GROUP * HtmlGroup_Box_new(const char *groupName, HTML_GROUP *parent, GWEN_XML_CONTEXT *ctx)
Definition g_box.c:36
struct GWEN_BUFFER GWEN_BUFFER
A dynamically resizeable text buffer.
Definition buffer.h:38
#define GWEN_UNUSED
#define GWENHYWFAR_CB
HTMLCTX_GET_FONT_FN HtmlCtx_SetGetFontFn(GWEN_XML_CONTEXT *ctx, HTMLCTX_GET_FONT_FN fn)
Definition htmlctx.c:727
int HtmlCtx_EndTag(GWEN_XML_CONTEXT *ctx, int closing)
Definition htmlctx.c:430
int HtmlCtx_AddData(GWEN_XML_CONTEXT *ctx, const char *data)
Definition htmlctx.c:519
HTML_OBJECT_TREE * HtmlCtx_GetObjects(const GWEN_XML_CONTEXT *ctx)
Definition htmlctx.c:257
void HtmlCtx_SetResolutionY(GWEN_XML_CONTEXT *ctx, int i)
Definition htmlctx.c:147
int HtmlCtx_GetTextHeight(GWEN_XML_CONTEXT *ctx, HTML_FONT *fnt, const char *s)
Definition htmlctx.c:603
int HtmlCtx_AddAttr(GWEN_XML_CONTEXT *ctx, const char *attrName, const char *attrData)
Definition htmlctx.c:563
HTML_IMAGE * HtmlCtx_GetImage(GWEN_XML_CONTEXT *ctx, const char *imageName)
Definition htmlctx.c:657
GWEN_XML_CONTEXT * HtmlCtx_new(uint32_t flags)
Definition htmlctx.c:34
HTML_OBJECT * HtmlCtx_GetRootObject(const GWEN_XML_CONTEXT *ctx)
Definition htmlctx.c:287
const char * HtmlCtx_GetCurrentTagName(const GWEN_XML_CONTEXT *ctx)
Definition htmlctx.c:214
void HtmlCtx_SetCurrentTagName(GWEN_XML_CONTEXT *ctx, const char *s)
Definition htmlctx.c:227
int HtmlCtx_Layout(GWEN_XML_CONTEXT *ctx, int width, int height)
Definition htmlctx.c:761
int HtmlCtx_GetResolutionX(const GWEN_XML_CONTEXT *ctx)
Definition htmlctx.c:108
void HtmlCtx_SetStandardProps(GWEN_XML_CONTEXT *ctx, HTML_PROPS *pr)
Definition htmlctx.c:386
HTML_OBJECT_TREE * HtmlCtx_TakeObjects(const GWEN_XML_CONTEXT *ctx)
Definition htmlctx.c:270
int HtmlCtx_AddComment(GWEN_XML_CONTEXT *ctx, GWEN_UNUSED const char *data)
Definition htmlctx.c:549
void HtmlCtx_SetCurrentGroup(GWEN_XML_CONTEXT *ctx, HTML_GROUP *g)
Definition htmlctx.c:201
uint32_t HtmlCtx_GetColorFromName(const GWEN_XML_CONTEXT *ctx, const char *name)
Definition htmlctx.c:621
void HtmlCtx_SetResolutionX(GWEN_XML_CONTEXT *ctx, int i)
Definition htmlctx.c:121
int HtmlCtx_GetHeight(const GWEN_XML_CONTEXT *ctx)
Definition htmlctx.c:853
HTMLCTX_GET_TEXT_HEIGHT_FN HtmlCtx_SetGetTextHeightFn(GWEN_XML_CONTEXT *ctx, HTMLCTX_GET_TEXT_HEIGHT_FN fn)
Definition htmlctx.c:691
void HtmlCtx_SetText(GWEN_XML_CONTEXT *ctx, const char *s)
Definition htmlctx.c:790
HTMLCTX_GET_IMAGE_FN HtmlCtx_SetGetImageFn(GWEN_XML_CONTEXT *ctx, HTMLCTX_GET_IMAGE_FN fn)
Definition htmlctx.c:744
HTML_FONT * HtmlCtx_GetFont(GWEN_XML_CONTEXT *ctx, const char *fontName, int fontSize, uint32_t fontFlags)
Definition htmlctx.c:638
void HtmlCtx_AddMediaPath(GWEN_XML_CONTEXT *ctx, const char *s)
Definition htmlctx.c:173
int HtmlCtx_StartTag(GWEN_XML_CONTEXT *ctx, const char *tagName)
Definition htmlctx.c:410
HTML_GROUP * HtmlCtx_GetCurrentGroup(const GWEN_XML_CONTEXT *ctx)
Definition htmlctx.c:188
int HtmlCtx_GetTextWidth(GWEN_XML_CONTEXT *ctx, HTML_FONT *fnt, const char *s)
Definition htmlctx.c:585
HTMLCTX_GET_TEXT_WIDTH_FN HtmlCtx_SetGetTextWidthFn(GWEN_XML_CONTEXT *ctx, HTMLCTX_GET_TEXT_WIDTH_FN fn)
Definition htmlctx.c:673
GWEN_DB_NODE * HtmlCtx_GetCurrentAttributes(const GWEN_XML_CONTEXT *ctx)
Definition htmlctx.c:244
HTML_PROPS * HtmlCtx_GetStandardProps(const GWEN_XML_CONTEXT *ctx)
Definition htmlctx.c:373
HTMLCTX_GET_COLOR_FROM_NAME_FN HtmlCtx_SetGetColorFromNameFn(GWEN_XML_CONTEXT *ctx, HTMLCTX_GET_COLOR_FROM_NAME_FN fn)
Definition htmlctx.c:709
int HtmlCtx_SanitizeData(GWEN_UNUSED GWEN_XML_CONTEXT *ctx, const char *data, GWEN_BUFFER *buf)
Definition htmlctx.c:300
GWEN_STRINGLIST * HtmlCtx_GetMediaPaths(const GWEN_XML_CONTEXT *ctx)
Definition htmlctx.c:160
GWENHYWFAR_CB void HtmlCtx_FreeData(GWEN_UNUSED void *bp, void *p)
Definition htmlctx.c:79
int HtmlCtx_GetResolutionY(const GWEN_XML_CONTEXT *ctx)
Definition htmlctx.c:134
int HtmlCtx_GetWidth(const GWEN_XML_CONTEXT *ctx)
Definition htmlctx.c:840
int(* HTMLCTX_GET_TEXT_HEIGHT_FN)(GWEN_XML_CONTEXT *ctx, HTML_FONT *fnt, const char *s)
Definition htmlctx_be.h:31
HTML_FONT *(* HTMLCTX_GET_FONT_FN)(GWEN_XML_CONTEXT *ctx, const char *fontName, int fontSize, uint32_t fontFlags)
Definition htmlctx_be.h:39
int(* HTMLCTX_GET_TEXT_WIDTH_FN)(GWEN_XML_CONTEXT *ctx, HTML_FONT *fnt, const char *s)
Definition htmlctx_be.h:27
HTML_IMAGE *(* HTMLCTX_GET_IMAGE_FN)(GWEN_XML_CONTEXT *ctx, const char *imageName)
Definition htmlctx_be.h:44
uint32_t(* HTMLCTX_GET_COLOR_FROM_NAME_FN)(const GWEN_XML_CONTEXT *ctx, const char *s)
Definition htmlctx_be.h:36
struct HTML_FONT HTML_FONT
Definition htmlfont_be.h:23
const char * HtmlGroup_GetGroupName(const HTML_GROUP *g)
Definition htmlgroup.c:80
int HtmlGroup_EndTag(HTML_GROUP *g, const char *tagName)
Definition htmlgroup.c:194
void HtmlGroup_SetObject(HTML_GROUP *g, HTML_OBJECT *o)
Definition htmlgroup.c:96
int HtmlGroup_StartTag(HTML_GROUP *g, const char *tagName)
Definition htmlgroup.c:182
void HtmlGroup_free(HTML_GROUP *g)
Definition htmlgroup.c:50
int HtmlGroup_AddData(HTML_GROUP *g, const char *data)
Definition htmlgroup.c:206
int HtmlGroup_EndSubGroup(HTML_GROUP *g, HTML_GROUP *sg)
Definition htmlgroup.c:218
void HtmlGroup_SetProperties(HTML_GROUP *g, HTML_PROPS *pr)
Definition htmlgroup.c:112
HTML_GROUP * HtmlGroup_GetParent(const HTML_GROUP *g)
Definition htmlgroup.c:64
struct HTML_GROUP HTML_GROUP
Definition htmlgroup_l.h:19
struct HTML_IMAGE HTML_IMAGE
HTML_OBJECT_TYPE HtmlObject_GetObjectType(const HTML_OBJECT *o)
Definition htmlobject.c:86
void HtmlObject_SetProperties(HTML_OBJECT *o, HTML_PROPS *pr)
Definition htmlobject.c:113
void HtmlObject_SetWidth(HTML_OBJECT *o, int i)
Definition htmlobject.c:170
int HtmlObject_GetWidth(const HTML_OBJECT *o)
Definition htmlobject.c:161
const char * HtmlObject_GetText(const HTML_OBJECT *o)
Definition htmlobject.c:233
void HtmlObject_SetHeight(HTML_OBJECT *o, int i)
Definition htmlobject.c:188
HTML_PROPS * HtmlObject_GetProperties(const HTML_OBJECT *o)
Definition htmlobject.c:104
int HtmlObject_GetHeight(const HTML_OBJECT *o)
Definition htmlobject.c:179
int HtmlObject_Layout(HTML_OBJECT *o)
Definition htmlobject.c:295
struct HTML_OBJECT HTML_OBJECT
void HtmlProps_free(HTML_PROPS *pr)
Definition htmlprops.c:40
void HtmlProps_Attach(HTML_PROPS *pr)
Definition htmlprops.c:73
struct HTML_PROPS HTML_PROPS
#define GWEN_INHERIT_SETDATA(bt, t, element, data, fn)
Definition inherit.h:300
#define GWEN_INHERIT(bt, t)
Definition inherit.h:264
#define GWEN_INHERIT_GETDATA(bt, t, element)
Definition inherit.h:279
#define GWEN_LOGDOMAIN
Definition logger.h:32
#define GWEN_FREE_OBJECT(varname)
Definition memory.h:61
#define GWEN_NEW_OBJECT(typ, varname)
Definition memory.h:55
HTML_OBJECT * HtmlObject_Box_new(GWEN_XML_CONTEXT *ctx)
Definition o_box.c:237
void GWEN_StringList_free(GWEN_STRINGLIST *sl)
Definition stringlist.c:62
int GWEN_StringList_AppendString(GWEN_STRINGLIST *sl, const char *s, int take, int checkDouble)
Definition stringlist.c:245
GWEN_STRINGLIST * GWEN_StringList_new(void)
Definition stringlist.c:50
struct GWEN_STRINGLISTSTRUCT GWEN_STRINGLIST
Definition stringlist.h:56
int GWEN_Text_UnescapeXmlToBuffer(const char *src, GWEN_BUFFER *buf)
Definition text.c:1856
GWENHYWFAR_API int GWEN_XMLContext_ReadFromString(GWEN_XML_CONTEXT *ctx, const char *text)
Definition xmlrw.c:1266
GWEN_XMLCTX_ADDDATA_FN GWEN_XmlCtx_SetAddDataFn(GWEN_XML_CONTEXT *ctx, GWEN_XMLCTX_ADDDATA_FN f)
Definition xmlctx.c:267
GWEN_XMLCTX_ENDTAG_FN GWEN_XmlCtx_SetEndTagFn(GWEN_XML_CONTEXT *ctx, GWEN_XMLCTX_ENDTAG_FN f)
Definition xmlctx.c:254
GWEN_XMLCTX_ADDCOMMENT_FN GWEN_XmlCtx_SetAddCommentFn(GWEN_XML_CONTEXT *ctx, GWEN_XMLCTX_ADDCOMMENT_FN f)
Definition xmlctx.c:293
GWEN_XMLCTX_ADDATTR_FN GWEN_XmlCtx_SetAddAttrFn(GWEN_XML_CONTEXT *ctx, GWEN_XMLCTX_ADDATTR_FN f)
Definition xmlctx.c:280
int GWEN_XmlCtx_DecDepth(GWEN_XML_CONTEXT *ctx)
Definition xmlctx.c:174
GWEN_XML_CONTEXT * GWEN_XmlCtx_new(uint32_t flags)
Definition xmlctx.c:66
GWEN_XMLCTX_STARTTAG_FN GWEN_XmlCtx_SetStartTagFn(GWEN_XML_CONTEXT *ctx, GWEN_XMLCTX_STARTTAG_FN f)
Definition xmlctx.c:241
struct GWEN_XML_CONTEXT GWEN_XML_CONTEXT
Definition xmlctx.h:39