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