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