gwenhywfar 4.0.3
|
00001 /*************************************************************************** 00002 begin : Mon Feb 22 2010 00003 copyright : (C) 2010 by Martin Preuss 00004 email : martin@libchipcard.de 00005 00006 *************************************************************************** 00007 * Please see toplevel file COPYING for license details * 00008 ***************************************************************************/ 00009 00010 #ifdef HAVE_CONFIG_H 00011 # include <config.h> 00012 #endif 00013 00014 #define DISABLE_DEBUGLOG 00015 00016 00017 #include "g_tablerow_p.h" 00018 #include "g_box_l.h" 00019 #include "g_generic_l.h" 00020 #include "htmlctx_l.h" 00021 #include "o_grid_l.h" 00022 #include "o_gridentry_l.h" 00023 00024 #include <gwenhywfar/debug.h> 00025 00026 00027 GWEN_INHERIT(HTML_GROUP, GROUP_TABLEROW) 00028 00029 00030 00031 00032 HTML_GROUP *HtmlGroup_TableRow_new(const char *groupName, 00033 HTML_GROUP *parent, 00034 GWEN_XML_CONTEXT *ctx) { 00035 HTML_GROUP *g; 00036 GROUP_TABLEROW *xg; 00037 00038 /* create base group */ 00039 g=HtmlGroup_Generic_new(groupName, parent, ctx); 00040 assert(g); 00041 GWEN_NEW_OBJECT(GROUP_TABLEROW, xg); 00042 GWEN_INHERIT_SETDATA(HTML_GROUP, GROUP_TABLEROW, g, xg, HtmlGroup_TableRow_FreeData); 00043 00044 /* set virtual functions */ 00045 HtmlGroup_SetStartTagFn(g, HtmlGroup_TableRow_StartTag); 00046 00047 return g; 00048 } 00049 00050 00051 00052 void GWENHYWFAR_CB HtmlGroup_TableRow_FreeData(void *bp, void *p) { 00053 GROUP_TABLEROW *xg; 00054 00055 xg=(GROUP_TABLEROW*) p; 00056 00057 GWEN_FREE_OBJECT(xg); 00058 } 00059 00060 00061 00062 int HtmlGroup_TableRow_GetColumns(const HTML_GROUP *g) { 00063 GROUP_TABLEROW *xg; 00064 00065 assert(g); 00066 xg=GWEN_INHERIT_GETDATA(HTML_GROUP, GROUP_TABLEROW, g); 00067 assert(xg); 00068 00069 return xg->columns; 00070 } 00071 00072 00073 00074 int HtmlGroup_TableRow_StartTag(HTML_GROUP *g, const char *tagName) { 00075 GROUP_TABLEROW *xg; 00076 HTML_GROUP *gNew=NULL; 00077 GWEN_XML_CONTEXT *ctx; 00078 GWEN_DB_NODE *dbAttribs; 00079 00080 assert(g); 00081 xg=GWEN_INHERIT_GETDATA(HTML_GROUP, GROUP_TABLEROW, g); 00082 assert(xg); 00083 00084 ctx=HtmlGroup_GetXmlContext(g); 00085 dbAttribs=HtmlCtx_GetCurrentAttributes(ctx); 00086 00087 if (strcasecmp(tagName, "th")==0) { 00088 HTML_OBJECT *o; 00089 HTML_PROPS *pr; 00090 HTML_FONT *fnt; 00091 00092 /* create new parser group */ 00093 gNew=HtmlGroup_Box_new(tagName, g, ctx); 00094 pr=HtmlProps_dup(HtmlGroup_GetProperties(g)); 00095 fnt=HtmlProps_GetFont(pr); 00096 fnt=HtmlCtx_GetFont(ctx, 00097 HtmlFont_GetFontName(fnt), 00098 HtmlFont_GetFontSize(fnt), 00099 HtmlFont_GetFontFlags(fnt) | HTML_FONT_FLAGS_STRONG); 00100 if (fnt) { 00101 HtmlProps_SetFont(pr, fnt); 00102 //HtmlFont_free(fnt); 00103 } 00104 HtmlGroup_SetProperties(gNew, pr); 00105 HtmlProps_free(pr); 00106 00107 o=HtmlObject_GridEntry_new(ctx); 00108 HtmlObject_SetProperties(o, HtmlGroup_GetProperties(g)); 00109 HtmlObject_GridEntry_SetColumn(o, xg->columns++); 00110 HtmlObject_GridEntry_SetRow(o, xg->row); 00111 HtmlObject_GridEntry_SetIsHeader(o, 1); 00112 00113 if (dbAttribs) { 00114 const char *s; 00115 00116 s=GWEN_DB_GetCharValue(dbAttribs, "align", 0, "left"); 00117 if (s) { 00118 if (strcasecmp(s, "right")==0) 00119 HtmlObject_AddFlags(o, HTML_OBJECT_FLAGS_JUSTIFY_RIGHT); 00120 else if (strcasecmp(s, "center")==0) 00121 HtmlObject_AddFlags(o, HTML_OBJECT_FLAGS_JUSTIFY_HCENTER); 00122 } 00123 } 00124 00125 HtmlObject_Tree_AddChild(HtmlGroup_GetObject(g), o); 00126 HtmlGroup_SetObject(gNew, o); 00127 } 00128 else if (strcasecmp(tagName, "td")==0) { 00129 HTML_OBJECT *o; 00130 00131 /* create new parser group */ 00132 gNew=HtmlGroup_Box_new(tagName, g, ctx); 00133 HtmlGroup_SetProperties(gNew, HtmlGroup_GetProperties(g)); 00134 o=HtmlObject_GridEntry_new(ctx); 00135 HtmlObject_SetProperties(o, HtmlGroup_GetProperties(g)); 00136 HtmlObject_GridEntry_SetColumn(o, xg->columns++); 00137 HtmlObject_GridEntry_SetRow(o, xg->row); 00138 HtmlObject_GridEntry_SetIsHeader(o, 0); 00139 00140 if (dbAttribs) { 00141 const char *s; 00142 00143 s=GWEN_DB_GetCharValue(dbAttribs, "align", 0, "left"); 00144 if (s) { 00145 if (strcasecmp(s, "right")==0) 00146 HtmlObject_AddFlags(o, HTML_OBJECT_FLAGS_JUSTIFY_RIGHT); 00147 else if (strcasecmp(s, "center")==0) 00148 HtmlObject_AddFlags(o, HTML_OBJECT_FLAGS_JUSTIFY_HCENTER); 00149 } 00150 } 00151 00152 HtmlObject_Tree_AddChild(HtmlGroup_GetObject(g), o); 00153 HtmlGroup_SetObject(gNew, o); 00154 } 00155 else { 00156 DBG_ERROR(GWEN_LOGDOMAIN, 00157 "Unexpected group [%s]", tagName); 00158 return GWEN_ERROR_BAD_DATA; 00159 } 00160 00161 if (gNew) { 00162 HtmlCtx_SetCurrentGroup(ctx, gNew); 00163 GWEN_XmlCtx_IncDepth(ctx); 00164 } 00165 00166 return 0; 00167 } 00168 00169 00170 00171 void HtmlGroup_TableRow_SetRow(HTML_GROUP *g, int row) { 00172 GROUP_TABLEROW *xg; 00173 00174 assert(g); 00175 xg=GWEN_INHERIT_GETDATA(HTML_GROUP, GROUP_TABLEROW, g); 00176 assert(xg); 00177 00178 xg->row=row; 00179 } 00180 00181 00182 00183 00184 00185