1 /***************************************************************************
2 begin : Mon Feb 22 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 #ifdef HAVE_CONFIG_H
11 # include <config.h>
12 #endif
13
14 #define DISABLE_DEBUGLOG
15
16
17 #include "g_unorderedlist_p.h"
18 #include "g_box_l.h"
19 #include "g_generic_l.h"
20 #include "htmlctx_l.h"
21 #include "o_box_l.h"
22 #include "o_grid_l.h"
23 #include "o_gridentry_l.h"
24 #include "o_word_l.h"
25
26 #include <gwenhywfar/debug.h>
27
28
GWEN_INHERIT(HTML_GROUP,GROUP_UNORDEREDLIST)29 GWEN_INHERIT(HTML_GROUP, GROUP_UNORDEREDLIST)
30
31
32
33 HTML_GROUP *HtmlGroup_UnorderedList_new(const char *groupName,
34 HTML_GROUP *parent,
35 GWEN_XML_CONTEXT *ctx)
36 {
37 HTML_GROUP *g;
38 GROUP_UNORDEREDLIST *xg;
39
40 /* create base group */
41 g=HtmlGroup_Generic_new(groupName, parent, ctx);
42 assert(g);
43
44 /* inherit */
45 GWEN_NEW_OBJECT(GROUP_UNORDEREDLIST, xg);
46 GWEN_INHERIT_SETDATA(HTML_GROUP, GROUP_UNORDEREDLIST, g, xg,
47 HtmlGroup_UnorderedList_FreeData);
48
49 /* set virtual functions */
50 HtmlGroup_SetStartTagFn(g, HtmlGroup_UnorderedList_StartTag);
51
52 return g;
53 }
54
55
56
HtmlGroup_UnorderedList_FreeData(GWEN_UNUSED void * bp,void * p)57 void GWENHYWFAR_CB HtmlGroup_UnorderedList_FreeData(GWEN_UNUSED void *bp, void *p)
58 {
59 GROUP_UNORDEREDLIST *xg;
60
61 xg=(GROUP_UNORDEREDLIST *) p;
62 GWEN_FREE_OBJECT(xg);
63 }
64
65
66
HtmlGroup_UnorderedList_StartTag(HTML_GROUP * g,const char * tagName)67 int HtmlGroup_UnorderedList_StartTag(HTML_GROUP *g, const char *tagName)
68 {
69 GROUP_UNORDEREDLIST *xg;
70 HTML_GROUP *gNew=NULL;
71 GWEN_XML_CONTEXT *ctx;
72
73 assert(g);
74 xg=GWEN_INHERIT_GETDATA(HTML_GROUP, GROUP_UNORDEREDLIST, g);
75 assert(xg);
76
77 ctx=HtmlGroup_GetXmlContext(g);
78
79 if (strcasecmp(tagName, "li")==0) {
80 HTML_OBJECT *o;
81 HTML_OBJECT *oGrid;
82
83 /* first column in the grid is "-" */
84 oGrid=HtmlObject_GridEntry_new(ctx);
85 HtmlObject_GridEntry_SetColumn(oGrid, 0);
86 HtmlObject_GridEntry_SetRow(oGrid, xg->row);
87 HtmlObject_SetProperties(oGrid, HtmlGroup_GetProperties(g));
88 HtmlObject_Tree_AddChild(HtmlGroup_GetObject(g), oGrid);
89
90 o=HtmlObject_Word_new(ctx, "-");
91 HtmlObject_SetProperties(o, HtmlGroup_GetProperties(g));
92 HtmlObject_Tree_AddChild(oGrid, o);
93
94 /* Create new parser group with new properties but use the same object */
95 gNew=HtmlGroup_Box_new(tagName, g, ctx);
96 HtmlGroup_SetProperties(gNew, HtmlGroup_GetProperties(g));
97 o=HtmlGroup_GetObject(g);
98 assert(o);
99 if (HtmlObject_GetObjectType(o)==HtmlObjectType_Grid) {
100 int i;
101
102 i=HtmlObject_Grid_GetRows(o);
103 HtmlObject_Grid_SetRows(o, ++i);
104 }
105
106 /* second column is the content of li */
107 o=HtmlObject_GridEntry_new(ctx);
108 HtmlObject_GridEntry_SetColumn(oGrid, 1);
109 HtmlObject_GridEntry_SetRow(oGrid, xg->row);
110 HtmlObject_SetProperties(o, HtmlGroup_GetProperties(g));
111 HtmlObject_Tree_AddChild(oGrid, o);
112
113 HtmlGroup_SetObject(gNew, o);
114 xg->row++;
115 }
116 else {
117 DBG_ERROR(GWEN_LOGDOMAIN,
118 "Unexpected group [%s]", tagName);
119 return GWEN_ERROR_BAD_DATA;
120 }
121
122 if (gNew) {
123 HtmlCtx_SetCurrentGroup(ctx, gNew);
124 GWEN_XmlCtx_IncDepth(ctx);
125 }
126
127 return 0;
128 }
129
130
131
132