gwenhywfar 5.14.1
xmlcmd_gxml.c
Go to the documentation of this file.
1/***************************************************************************
2 begin : Sat Apr 18 2018
3 copyright : (C) 2020 by Martin Preuss
4 email : martin@libchipcard.de
5
6 ***************************************************************************
7 * *
8 * This library is free software; you can redistribute it and/or *
9 * modify it under the terms of the GNU Lesser General Public *
10 * License as published by the Free Software Foundation; either *
11 * version 2.1 of the License, or (at your option) any later version. *
12 * *
13 * This library is distributed in the hope that it will be useful, *
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
16 * Lesser General Public License for more details. *
17 * *
18 * You should have received a copy of the GNU Lesser General Public *
19 * License along with this library; if not, write to the Free Software *
20 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, *
21 * MA 02111-1307 USA *
22 * *
23 ***************************************************************************/
24
25
26#ifdef HAVE_CONFIG_H
27# include <config.h>
28#endif
29
30
31
32#include "xmlcmd_gxml_p.h"
33
34#include <gwenhywfar/debug.h>
35
36
37#include <ctype.h>
38
39
40GWEN_INHERIT(GWEN_XMLCOMMANDER, GWEN_XMLCMD_GXML)
41
42
43
44
45static void GWENHYWFAR_CB _freeData(void *bp, void *p);
46
47
48
49
50
51
53{
55 GWEN_XMLCMD_GXML *xcmd;
56
58 GWEN_NEW_OBJECT(GWEN_XMLCMD_GXML, xcmd);
59 GWEN_INHERIT_SETDATA(GWEN_XMLCOMMANDER, GWEN_XMLCMD_GXML, cmd, xcmd, _freeData);
60
61 xcmd->docRoot=documentRoot;
62 xcmd->xmlNodeStack=GWEN_XMLNode_List2_new();
63 xcmd->dbRoot=dbRoot;
64 xcmd->tempDbRoot=GWEN_DB_Group_new("dbTempRoot");
65
66 xcmd->currentDbGroup=xcmd->dbRoot;
67 xcmd->currentTempDbGroup=xcmd->tempDbRoot;
68 xcmd->currentDocNode=documentRoot;
69
70 return cmd;
71}
72
73
74
75void GWENHYWFAR_CB _freeData(GWEN_UNUSED void *bp, void *p)
76{
77 GWEN_XMLCMD_GXML *xcmd;
78
79 xcmd=(GWEN_XMLCMD_GXML*) p;
80
81 GWEN_XMLNode_List2_free(xcmd->xmlNodeStack);
82 xcmd->xmlNodeStack=NULL;
83
84 GWEN_DB_Group_free(xcmd->tempDbRoot);
85 GWEN_FREE_OBJECT(xcmd);
86}
87
88
89
91{
92 GWEN_XMLCMD_GXML *xcmd;
93
94 assert(cmd);
95 xcmd=GWEN_INHERIT_GETDATA(GWEN_XMLCOMMANDER, GWEN_XMLCMD_GXML, cmd);
96 assert(xcmd);
97
98 return xcmd->docRoot;
99}
100
101
102
104{
105 GWEN_XMLCMD_GXML *xcmd;
106
107 assert(cmd);
108 xcmd=GWEN_INHERIT_GETDATA(GWEN_XMLCOMMANDER, GWEN_XMLCMD_GXML, cmd);
109 assert(xcmd);
110
111 return xcmd->currentDocNode;
112}
113
114
115
117{
118 GWEN_XMLCMD_GXML *xcmd;
119
120 assert(cmd);
121 xcmd=GWEN_INHERIT_GETDATA(GWEN_XMLCOMMANDER, GWEN_XMLCMD_GXML, cmd);
122 assert(xcmd);
123
124 xcmd->currentDocNode=n;
125}
126
127
128
130{
131 GWEN_XMLCMD_GXML *xcmd;
132
133 assert(cmd);
134 xcmd=GWEN_INHERIT_GETDATA(GWEN_XMLCOMMANDER, GWEN_XMLCMD_GXML, cmd);
135 assert(xcmd);
136
137 return xcmd->dbRoot;
138}
139
140
141
143{
144 GWEN_XMLCMD_GXML *xcmd;
145
146 assert(cmd);
147 xcmd=GWEN_INHERIT_GETDATA(GWEN_XMLCOMMANDER, GWEN_XMLCMD_GXML, cmd);
148 assert(xcmd);
149
150 return xcmd->currentDbGroup;
151}
152
153
154
156{
157 GWEN_XMLCMD_GXML *xcmd;
158
159 assert(cmd);
160 xcmd=GWEN_INHERIT_GETDATA(GWEN_XMLCOMMANDER, GWEN_XMLCMD_GXML, cmd);
161 assert(xcmd);
162
163 xcmd->currentDbGroup=db;
164}
165
166
167
169{
170 GWEN_XMLCMD_GXML *xcmd;
171
172 assert(cmd);
173 xcmd=GWEN_INHERIT_GETDATA(GWEN_XMLCOMMANDER, GWEN_XMLCMD_GXML, cmd);
174 assert(xcmd);
175
176 return xcmd->tempDbRoot;
177}
178
179
180
182{
183 GWEN_XMLCMD_GXML *xcmd;
184
185 assert(cmd);
186 xcmd=GWEN_INHERIT_GETDATA(GWEN_XMLCOMMANDER, GWEN_XMLCMD_GXML, cmd);
187 assert(xcmd);
188
189 return xcmd->currentTempDbGroup;
190}
191
192
193
195{
196 GWEN_XMLCMD_GXML *xcmd;
197
198 assert(cmd);
199 xcmd=GWEN_INHERIT_GETDATA(GWEN_XMLCOMMANDER, GWEN_XMLCMD_GXML, cmd);
200 assert(xcmd);
201
202 xcmd->currentTempDbGroup=db;
203}
204
205
206
208{
209 GWEN_XMLCMD_GXML *xcmd;
210
211 assert(cmd);
212 xcmd=GWEN_INHERIT_GETDATA(GWEN_XMLCOMMANDER, GWEN_XMLCMD_GXML, cmd);
213 assert(xcmd);
214
215 assert(xmlNode);
216
217 GWEN_XMLNode_List2_PushBack(xcmd->xmlNodeStack, xcmd->currentDocNode);
218 xcmd->currentDocNode=xmlNode;
219}
220
221
222
224{
225 GWEN_XMLCMD_GXML *xcmd;
226 GWEN_XMLNODE *xmlNode;
227
228 assert(cmd);
229 xcmd=GWEN_INHERIT_GETDATA(GWEN_XMLCOMMANDER, GWEN_XMLCMD_GXML, cmd);
230 assert(xcmd);
231
232 xmlNode=GWEN_XMLNode_List2_GetBack(xcmd->xmlNodeStack);
233 if (xmlNode==NULL) {
234 DBG_ERROR(GWEN_LOGDOMAIN, "Nothing on stack");
235 assert(xmlNode);
236 }
237 xcmd->currentDocNode=xmlNode;
238 GWEN_XMLNode_List2_PopBack(xcmd->xmlNodeStack);
239}
240
241
242
243
244
245
246
247
#define NULL
Definition binreloc.c:300
GWEN_DB_NODE * GWEN_DB_Group_new(const char *name)
Definition db.c:173
void GWEN_DB_Group_free(GWEN_DB_NODE *n)
Definition db.c:421
struct GWEN_DB_NODE GWEN_DB_NODE
Definition db.h:228
#define DBG_ERROR(dbg_logger, format,...)
Definition debug.h:97
#define GWEN_UNUSED
#define GWENHYWFAR_CB
#define GWEN_INHERIT_SETDATA(bt, t, element, data, fn)
Definition inherit.h:300
#define GWEN_INHERIT(bt, t)
Definition inherit.h:264
#define GWEN_INHERIT_GETDATA(bt, t, element)
Definition inherit.h:279
void GWEN_XMLNode_List2_PushBack(GWEN_XMLNODE_LIST2 *l, GWEN_XMLNODE *p)
GWEN_XMLNODE_LIST2 * GWEN_XMLNode_List2_new()
GWEN_XMLNODE * GWEN_XMLNode_List2_GetBack(GWEN_XMLNODE_LIST2 *l)
void GWEN_XMLNode_List2_free(GWEN_XMLNODE_LIST2 *l)
void GWEN_XMLNode_List2_PopBack(GWEN_XMLNODE_LIST2 *l)
#define GWEN_LOGDOMAIN
Definition logger.h:32
#define GWEN_FREE_OBJECT(varname)
Definition memory.h:61
#define GWEN_NEW_OBJECT(typ, varname)
Definition memory.h:55
static void GWENHYWFAR_CB _freeData(GWEN_UNUSED void *bp, void *p)
Definition nogui.c:222
struct GWEN__XMLNODE GWEN_XMLNODE
Definition xml.h:156
GWEN_XMLCOMMANDER * GWEN_XmlCommander_new(void)
Definition xmlcmd.c:46
struct GWEN_XMLCOMMANDER GWEN_XMLCOMMANDER
Definition xmlcmd.h:39
void GWEN_XmlCommanderGwenXml_SetCurrentDocNode(GWEN_XMLCOMMANDER *cmd, GWEN_XMLNODE *n)
void GWEN_XmlCommanderGwenXml_SetCurrentTempDbGroup(GWEN_XMLCOMMANDER *cmd, GWEN_DB_NODE *db)
GWEN_DB_NODE * GWEN_XmlCommanderGwenXml_GetCurrentDbGroup(const GWEN_XMLCOMMANDER *cmd)
GWEN_DB_NODE * GWEN_XmlCommanderGwenXml_GetCurrentTempDbGroup(const GWEN_XMLCOMMANDER *cmd)
static void GWENHYWFAR_CB _freeData(void *bp, void *p)
GWEN_XMLNODE * GWEN_XmlCommanderGwenXml_GetCurrentDocNode(const GWEN_XMLCOMMANDER *cmd)
GWEN_DB_NODE * GWEN_XmlCommanderGwenXml_GetTempDbRoot(const GWEN_XMLCOMMANDER *cmd)
void GWEN_XmlCommanderGwenXml_LeaveDocNode(GWEN_XMLCOMMANDER *cmd)
GWEN_XMLCOMMANDER * GWEN_XmlCommanderGwenXml_new(GWEN_XMLNODE *documentRoot, GWEN_DB_NODE *dbRoot)
Definition xmlcmd_gxml.c:52
void GWEN_XmlCommanderGwenXml_EnterDocNode(GWEN_XMLCOMMANDER *cmd, GWEN_XMLNODE *xmlNode)
GWEN_DB_NODE * GWEN_XmlCommanderGwenXml_GetDbRoot(const GWEN_XMLCOMMANDER *cmd)
GWEN_XMLNODE * GWEN_XmlCommanderGwenXml_GetDocRoot(const GWEN_XMLCOMMANDER *cmd)
Definition xmlcmd_gxml.c:90
void GWEN_XmlCommanderGwenXml_SetCurrentDbGroup(GWEN_XMLCOMMANDER *cmd, GWEN_DB_NODE *db)