1 /***************************************************************************
2     begin       : Thu Jul 02 2009
3     copyright   : (C) 2009 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 
15 #include "tm_group_p.h"
16 
17 
18 #include <gwenhywfar/debug.h>
19 #include <gwenhywfar/misc.h>
20 
21 #include <assert.h>
22 
23 
24 
GWEN_TREE_FUNCTIONS(TYPEMAKER2_GROUP,Typemaker2_Group)25 GWEN_TREE_FUNCTIONS(TYPEMAKER2_GROUP, Typemaker2_Group)
26 
27 
28 
29 TYPEMAKER2_GROUP *Typemaker2_Group_new()
30 {
31   TYPEMAKER2_GROUP *gr;
32 
33   GWEN_NEW_OBJECT(TYPEMAKER2_GROUP, gr);
34   gr->refCount=1;
35   GWEN_TREE_INIT(TYPEMAKER2_GROUP, gr);
36 
37   return gr;
38 }
39 
40 
41 
Typemaker2_Group_free(TYPEMAKER2_GROUP * gr)42 void Typemaker2_Group_free(TYPEMAKER2_GROUP *gr)
43 {
44   if (gr) {
45     assert(gr->refCount);
46     if (gr->refCount==1) {
47       GWEN_TREE_FINI(TYPEMAKER2_GROUP, gr);
48       free(gr->title);
49       free(gr->description);
50       gr->refCount=0;
51       GWEN_FREE_OBJECT(gr);
52     }
53     else
54       gr->refCount++;
55   }
56 }
57 
58 
59 
Typemaker2_Group_Attach(TYPEMAKER2_GROUP * gr)60 void Typemaker2_Group_Attach(TYPEMAKER2_GROUP *gr)
61 {
62   assert(gr);
63   assert(gr->refCount);
64   gr->refCount++;
65 }
66 
67 
68 
Typemaker2_Group_GetTitle(TYPEMAKER2_GROUP * gr)69 const char *Typemaker2_Group_GetTitle(TYPEMAKER2_GROUP *gr)
70 {
71   assert(gr);
72   assert(gr->refCount);
73 
74   return gr->title;
75 }
76 
77 
78 
Typemaker2_Group_SetTitle(TYPEMAKER2_GROUP * gr,const char * s)79 void Typemaker2_Group_SetTitle(TYPEMAKER2_GROUP *gr, const char *s)
80 {
81   assert(gr);
82   assert(gr->refCount);
83 
84   free(gr->title);
85   if (s && *s)
86     gr->title=strdup(s);
87   else
88     gr->title=NULL;
89 }
90 
91 
92 
Typemaker2_Group_GetDescription(TYPEMAKER2_GROUP * gr)93 const char *Typemaker2_Group_GetDescription(TYPEMAKER2_GROUP *gr)
94 {
95   assert(gr);
96   assert(gr->refCount);
97 
98   return gr->description;
99 }
100 
101 
102 
Typemaker2_Group_SetDescription(TYPEMAKER2_GROUP * gr,const char * s)103 void Typemaker2_Group_SetDescription(TYPEMAKER2_GROUP *gr, const char *s)
104 {
105   assert(gr);
106   assert(gr->refCount);
107 
108   free(gr->description);
109   if (s && *s)
110     gr->description=strdup(s);
111   else
112     gr->description=NULL;
113 }
114 
115 
116 
Typemaker2_Group_readXml(TYPEMAKER2_GROUP * gr,GWEN_XMLNODE * node,GWEN_UNUSED const char * wantedLang)117 int Typemaker2_Group_readXml(TYPEMAKER2_GROUP *gr, GWEN_XMLNODE *node, GWEN_UNUSED const char *wantedLang)
118 {
119   const char *s;
120   GWEN_XMLNODE *n;
121 
122   assert(gr);
123   assert(gr->refCount);
124 
125   /* read title */
126   s=GWEN_XMLNode_GetProperty(node, "title", NULL);
127   if (s && *s)
128     Typemaker2_Group_SetTitle(gr, s);
129 
130   /* read descr */
131   n=GWEN_XMLNode_FindFirstTag(node, "descr", NULL, NULL);
132   if (n) {
133     GWEN_BUFFER *tbuf;
134     int rv;
135 
136     tbuf=GWEN_Buffer_new(0, 256, 0, 1);
137     rv=GWEN_XMLNode_toBuffer(n, tbuf, GWEN_XML_FLAGS_SIMPLE | GWEN_XML_FLAGS_HANDLE_COMMENTS);
138     if (rv<0) {
139       DBG_ERROR(0, "here (%d)", rv);
140     }
141     else {
142       Typemaker2_Group_SetDescription(gr, GWEN_Buffer_GetStart(tbuf));
143     }
144     GWEN_Buffer_free(tbuf);
145   }
146 
147   return 0;
148 }
149 
150 
151 
152 
153 
154 
155 
156