gwenhywfar 4.0.3

g_tablerow.c

Go to the documentation of this file.
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