gwenhywfar  5.10.1
g_unorderedlist.c
Go to the documentation of this file.
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 
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,
48 
49  /* set virtual functions */
51 
52  return g;
53 }
54 
55 
56 
58 {
59  GROUP_UNORDEREDLIST *xg;
60 
61  xg=(GROUP_UNORDEREDLIST *) p;
62  GWEN_FREE_OBJECT(xg);
63 }
64 
65 
66 
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 
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);
86  HtmlObject_GridEntry_SetRow(oGrid, xg->row);
88  HtmlObject_Tree_AddChild(HtmlGroup_GetObject(g), oGrid);
89 
90  o=HtmlObject_Word_new(ctx, "-");
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);
98  assert(o);
100  int i;
101 
103  HtmlObject_Grid_SetRows(o, ++i);
104  }
105 
106  /* second column is the content of li */
109  HtmlObject_GridEntry_SetRow(oGrid, xg->row);
111  HtmlObject_Tree_AddChild(oGrid, o);
112 
113  HtmlGroup_SetObject(gNew, o);
114  xg->row++;
115  }
116  else {
118  "Unexpected group [%s]", tagName);
119  return GWEN_ERROR_BAD_DATA;
120  }
121 
122  if (gNew) {
123  HtmlCtx_SetCurrentGroup(ctx, gNew);
125  }
126 
127  return 0;
128 }
129 
130 
131 
struct HTML_GROUP HTML_GROUP
Definition: htmlgroup_l.h:19
HTML_OBJECT * HtmlGroup_GetObject(const HTML_GROUP *g)
Definition: htmlgroup.c:88
void HtmlGroup_SetObject(HTML_GROUP *g, HTML_OBJECT *o)
Definition: htmlgroup.c:96
HTML_OBJECT_TYPE HtmlObject_GetObjectType(const HTML_OBJECT *o)
Definition: htmlobject.c:86
void HtmlObject_GridEntry_SetColumn(HTML_OBJECT *o, int i)
Definition: o_gridentry.c:94
HTML_GROUP_STARTTAG_FN HtmlGroup_SetStartTagFn(HTML_GROUP *g, HTML_GROUP_STARTTAG_FN f)
Definition: htmlgroup.c:128
void GWENHYWFAR_CB HtmlGroup_UnorderedList_FreeData(GWEN_UNUSED void *bp, void *p)
int HtmlGroup_UnorderedList_StartTag(HTML_GROUP *g, const char *tagName)
#define GWEN_FREE_OBJECT(varname)
Definition: memory.h:61
#define NULL
Definition: binreloc.c:300
#define GWEN_LOGDOMAIN
Definition: logger.h:35
HTML_OBJECT * HtmlObject_GridEntry_new(GWEN_XML_CONTEXT *ctx)
Definition: o_gridentry.c:27
#define GWEN_ERROR_BAD_DATA
Definition: error.h:121
#define GWEN_NEW_OBJECT(typ, varname)
Definition: memory.h:55
#define GWENHYWFAR_CB
Definition: gwenhywfarapi.h:89
void HtmlObject_GridEntry_SetRow(HTML_OBJECT *o, int i)
Definition: o_gridentry.c:68
void GWEN_XmlCtx_IncDepth(GWEN_XML_CONTEXT *ctx)
Definition: xmlctx.c:166
HTML_GROUP * HtmlGroup_Box_new(const char *groupName, HTML_GROUP *parent, GWEN_XML_CONTEXT *ctx)
Definition: g_box.c:36
void HtmlObject_SetProperties(HTML_OBJECT *o, HTML_PROPS *pr)
Definition: htmlobject.c:113
void HtmlObject_Grid_SetRows(HTML_OBJECT *o, int i)
Definition: o_grid.c:250
#define DBG_ERROR(dbg_logger, format, args...)
Definition: debug.h:97
HTML_PROPS * HtmlGroup_GetProperties(const HTML_GROUP *g)
Definition: htmlgroup.c:104
GWEN_XML_CONTEXT * HtmlGroup_GetXmlContext(const HTML_GROUP *g)
Definition: htmlgroup.c:72
void HtmlCtx_SetCurrentGroup(GWEN_XML_CONTEXT *ctx, HTML_GROUP *g)
Definition: htmlctx.c:201
HTML_OBJECT * HtmlObject_Word_new(GWEN_XML_CONTEXT *ctx, const char *s)
Definition: o_word.c:49
HTML_GROUP * HtmlGroup_UnorderedList_new(const char *groupName, HTML_GROUP *parent, GWEN_XML_CONTEXT *ctx)
#define GWEN_INHERIT(bt, t)
Definition: inherit.h:264
void HtmlGroup_SetProperties(HTML_GROUP *g, HTML_PROPS *pr)
Definition: htmlgroup.c:112
int HtmlObject_Grid_GetRows(const HTML_OBJECT *o)
Definition: o_grid.c:237
#define GWEN_INHERIT_SETDATA(bt, t, element, data, fn)
Definition: inherit.h:292
HTML_GROUP * HtmlGroup_Generic_new(const char *groupName, HTML_GROUP *parent, GWEN_XML_CONTEXT *ctx)
Definition: g_generic.c:26
struct GWEN_XML_CONTEXT GWEN_XML_CONTEXT
Definition: xmlctx.h:39
#define GWEN_UNUSED
#define GWEN_INHERIT_GETDATA(bt, t, element)
Definition: inherit.h:271
struct HTML_OBJECT HTML_OBJECT
Definition: htmlobject_be.h:25