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