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_tablerow_p.h"
18 #include "g_box_l.h"
19 #include "g_generic_l.h"
20 #include "htmlctx_l.h"
21 #include "o_grid_l.h"
22 #include "o_gridentry_l.h"
23 
24 #include <gwenhywfar/debug.h>
25 
26 
GWEN_INHERIT(HTML_GROUP,GROUP_TABLEROW)27 GWEN_INHERIT(HTML_GROUP, GROUP_TABLEROW)
28 
29 
30 
31 
32 HTML_GROUP *HtmlGroup_TableRow_new(const char *groupName,
33                                    HTML_GROUP *parent,
34                                    GWEN_XML_CONTEXT *ctx)
35 {
36   HTML_GROUP *g;
37   GROUP_TABLEROW *xg;
38 
39   /* create base group */
40   g=HtmlGroup_Generic_new(groupName, parent, ctx);
41   assert(g);
42   GWEN_NEW_OBJECT(GROUP_TABLEROW, xg);
43   GWEN_INHERIT_SETDATA(HTML_GROUP, GROUP_TABLEROW, g, xg, HtmlGroup_TableRow_FreeData);
44 
45   /* set virtual functions */
46   HtmlGroup_SetStartTagFn(g, HtmlGroup_TableRow_StartTag);
47 
48   return g;
49 }
50 
51 
52 
HtmlGroup_TableRow_FreeData(GWEN_UNUSED void * bp,void * p)53 void GWENHYWFAR_CB HtmlGroup_TableRow_FreeData(GWEN_UNUSED void *bp, void *p)
54 {
55   GROUP_TABLEROW *xg;
56 
57   xg=(GROUP_TABLEROW *) p;
58 
59   GWEN_FREE_OBJECT(xg);
60 }
61 
62 
63 
HtmlGroup_TableRow_GetColumns(const HTML_GROUP * g)64 int HtmlGroup_TableRow_GetColumns(const HTML_GROUP *g)
65 {
66   GROUP_TABLEROW *xg;
67 
68   assert(g);
69   xg=GWEN_INHERIT_GETDATA(HTML_GROUP, GROUP_TABLEROW, g);
70   assert(xg);
71 
72   return xg->columns;
73 }
74 
75 
76 
HtmlGroup_TableRow_StartTag(HTML_GROUP * g,const char * tagName)77 int HtmlGroup_TableRow_StartTag(HTML_GROUP *g, const char *tagName)
78 {
79   GROUP_TABLEROW *xg;
80   HTML_GROUP *gNew=NULL;
81   GWEN_XML_CONTEXT *ctx;
82   GWEN_DB_NODE *dbAttribs;
83 
84   assert(g);
85   xg=GWEN_INHERIT_GETDATA(HTML_GROUP, GROUP_TABLEROW, g);
86   assert(xg);
87 
88   ctx=HtmlGroup_GetXmlContext(g);
89   dbAttribs=HtmlCtx_GetCurrentAttributes(ctx);
90 
91   if (strcasecmp(tagName, "th")==0) {
92     HTML_OBJECT *o;
93     HTML_PROPS *pr;
94     HTML_FONT *fnt;
95 
96     /* create new parser group */
97     gNew=HtmlGroup_Box_new(tagName, g, ctx);
98     pr=HtmlProps_dup(HtmlGroup_GetProperties(g));
99     fnt=HtmlProps_GetFont(pr);
100     fnt=HtmlCtx_GetFont(ctx,
101                         HtmlFont_GetFontName(fnt),
102                         HtmlFont_GetFontSize(fnt),
103                         HtmlFont_GetFontFlags(fnt) | HTML_FONT_FLAGS_STRONG);
104     if (fnt) {
105       HtmlProps_SetFont(pr, fnt);
106       //HtmlFont_free(fnt);
107     }
108     HtmlGroup_SetProperties(gNew, pr);
109     HtmlProps_free(pr);
110 
111     o=HtmlObject_GridEntry_new(ctx);
112     HtmlObject_SetProperties(o, HtmlGroup_GetProperties(g));
113     HtmlObject_GridEntry_SetColumn(o, xg->columns++);
114     HtmlObject_GridEntry_SetRow(o, xg->row);
115     HtmlObject_GridEntry_SetIsHeader(o, 1);
116 
117     if (dbAttribs) {
118       const char *s;
119 
120       s=GWEN_DB_GetCharValue(dbAttribs, "align", 0, "left");
121       if (s) {
122         if (strcasecmp(s, "right")==0)
123           HtmlObject_AddFlags(o, HTML_OBJECT_FLAGS_JUSTIFY_RIGHT);
124         else if (strcasecmp(s, "center")==0)
125           HtmlObject_AddFlags(o, HTML_OBJECT_FLAGS_JUSTIFY_HCENTER);
126       }
127     }
128 
129     HtmlObject_Tree_AddChild(HtmlGroup_GetObject(g), o);
130     HtmlGroup_SetObject(gNew, o);
131   }
132   else if (strcasecmp(tagName, "td")==0) {
133     HTML_OBJECT *o;
134 
135     /* create new parser group */
136     gNew=HtmlGroup_Box_new(tagName, g, ctx);
137     HtmlGroup_SetProperties(gNew, HtmlGroup_GetProperties(g));
138     o=HtmlObject_GridEntry_new(ctx);
139     HtmlObject_SetProperties(o, HtmlGroup_GetProperties(g));
140     HtmlObject_GridEntry_SetColumn(o, xg->columns++);
141     HtmlObject_GridEntry_SetRow(o, xg->row);
142     HtmlObject_GridEntry_SetIsHeader(o, 0);
143 
144     if (dbAttribs) {
145       const char *s;
146 
147       s=GWEN_DB_GetCharValue(dbAttribs, "align", 0, "left");
148       if (s) {
149         if (strcasecmp(s, "right")==0)
150           HtmlObject_AddFlags(o, HTML_OBJECT_FLAGS_JUSTIFY_RIGHT);
151         else if (strcasecmp(s, "center")==0)
152           HtmlObject_AddFlags(o, HTML_OBJECT_FLAGS_JUSTIFY_HCENTER);
153       }
154     }
155 
156     HtmlObject_Tree_AddChild(HtmlGroup_GetObject(g), o);
157     HtmlGroup_SetObject(gNew, o);
158   }
159   else {
160     DBG_ERROR(GWEN_LOGDOMAIN,
161               "Unexpected group [%s]", tagName);
162     return GWEN_ERROR_BAD_DATA;
163   }
164 
165   if (gNew) {
166     HtmlCtx_SetCurrentGroup(ctx, gNew);
167     GWEN_XmlCtx_IncDepth(ctx);
168   }
169 
170   return 0;
171 }
172 
173 
174 
HtmlGroup_TableRow_SetRow(HTML_GROUP * g,int row)175 void HtmlGroup_TableRow_SetRow(HTML_GROUP *g, int row)
176 {
177   GROUP_TABLEROW *xg;
178 
179   assert(g);
180   xg=GWEN_INHERIT_GETDATA(HTML_GROUP, GROUP_TABLEROW, g);
181   assert(xg);
182 
183   xg->row=row;
184 }
185 
186 
187 
188 
189 
190 
191