libcomps  ..
 All Data Structures Files Functions Variables Enumerations Macros Groups Pages
comps_doc.h
Go to the documentation of this file.
1 /* libcomps - C alternative to yum.comps library
2  * Copyright (C) 2013 Jindrich Luza
3  *
4  * This program is free software; you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License as published by
6  * the Free Software Foundation; either version 2 of the License, or
7  * any later version.
8  *
9  * This program is distributed in the hope that it will be useful, but
10  * WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to Free Software
16  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
17  * USA
18  */
19 
20 #ifndef COMPS_DOC_H
21 #define COMPS_DOC_H
22 
23 #include "comps_obj.h"
24 #include "comps_objdict.h"
25 #include "comps_objlist.h"
26 #include "comps_log.h"
27 #include "comps_types.h"
28 #include "comps_docgroup.h"
29 #include "comps_doccategory.h"
30 #include "comps_docenv.h"
31 #include "comps_validate.h"
32 #include "comps_default.h"
33 
44 #define COMPS_DOC_GETOBJLIST(OBJS) COMPS_ObjList* CONCAT(comps_doc_, OBJS)\
45  (COMPS_Doc *doc){\
46  COMPS_ObjList *ret;\
47  ret = (COMPS_ObjList*)comps_objdict_get(doc->objects, #OBJS);\
48  if (!ret) {\
49  ret = COMPS_OBJECT_CREATE(COMPS_ObjList, NULL);\
50  comps_objdict_set_x(doc->objects, #OBJS, (COMPS_Object*)ret);\
51  ret = (COMPS_ObjList*)comps_object_incref((COMPS_Object*)ret);\
52  }\
53  return ret;\
54 }
55 
57 #define HEAD_COMPS_DOC_GETOBJLIST(OBJS) COMPS_ObjList* CONCAT(comps_doc_, OBJS)\
58  (COMPS_Doc *doc);
59 
61 #define COMPS_DOC_SETOBJLIST(OBJS) void CONCAT(comps_doc_set_, OBJS)\
62  (COMPS_Doc *doc,\
63  COMPS_ObjList *list){\
64  comps_objdict_set(doc->objects, #OBJS, (COMPS_Object*)list);\
65 }
66 
67 #define HEAD_COMPS_DOC_SETOBJLIST(OBJS) void CONCAT(comps_doc_set_, OBJS)\
68  (COMPS_Doc *doc,\
69  COMPS_ObjList *list);
70 
72 #define COMPS_DOC_GETOBJDICT(OBJNAME) COMPS_ObjDict* CONCAT(comps_doc_, OBJNAME)\
73  (COMPS_Doc *doc){\
74  COMPS_ObjDict *ret;\
75  ret = (COMPS_ObjDict*)comps_objdict_get(doc->objects, #OBJNAME);\
76  if (!ret) {\
77  ret = COMPS_OBJECT_CREATE(COMPS_ObjDict, NULL);\
78  comps_objdict_set_x(doc->objects, #OBJNAME, (COMPS_Object*)ret);\
79  ret = (COMPS_ObjDict*)comps_object_incref((COMPS_Object*)ret);\
80  }\
81  return ret;\
82 }
83 
84 #define HEAD_COMPS_DOC_GETOBJDICT(OBJNAME) COMPS_ObjDict* CONCAT(comps_doc_, OBJNAME)\
85  (COMPS_Doc *doc);
86 
88 #define COMPS_DOC_GETOBJMDICT(OBJNAME) COMPS_ObjMDict* CONCAT(comps_doc_, OBJNAME)\
89  (COMPS_Doc *doc){\
90  COMPS_ObjMDict *ret;\
91  ret = (COMPS_ObjMDict*)comps_objdict_get(doc->objects, #OBJNAME);\
92  if (!ret) {\
93  ret = COMPS_OBJECT_CREATE(COMPS_ObjMDict, NULL);\
94  comps_objdict_set_x(doc->objects, #OBJNAME, (COMPS_Object*)ret);\
95  ret = (COMPS_ObjMDict*)comps_object_incref((COMPS_Object*)ret);\
96  }\
97  return ret;\
98 }
99 
100 #define HEAD_COMPS_DOC_GETOBJMDICT(OBJNAME) COMPS_ObjMDict* CONCAT(comps_doc_, OBJNAME)\
101  (COMPS_Doc *doc);
102 
104 #define COMPS_DOC_SETOBJDICT(OBJS) void CONCAT(comps_doc_set_, OBJS)\
105  (COMPS_Doc *doc,\
106  COMPS_ObjDict *dict){\
107  comps_objdict_set(doc->objects, #OBJS, (COMPS_Object*)dict);\
108 }
109 
110 #define HEAD_COMPS_DOC_SETOBJDICT(OBJS) void CONCAT(comps_doc_set_, OBJS)\
111  (COMPS_Doc *doc,\
112  COMPS_ObjDict *dict);
113 
115 #define COMPS_DOC_SETOBJMDICT(OBJS) void CONCAT(comps_doc_set_, OBJS)\
116  (COMPS_Doc *doc,\
117  COMPS_ObjMDict *dict){\
118  comps_objdict_set(doc->objects, #OBJS, (COMPS_Object*)dict);\
119 }
120 
121 #define HEAD_COMPS_DOC_SETOBJMDICT(OBJS) void CONCAT(comps_doc_set_, OBJS)\
122  (COMPS_Doc *doc,\
123  COMPS_ObjMDict *dict);
124 
127 #define COMPS_DOC_ADDOBJLIST(OBJS, OBJNAME, OBJTYPE) void CONCAT(comps_doc_add_,\
128  OBJNAME)\
129  (COMPS_Doc *doc,\
130  OBJTYPE *obj){\
131  COMPS_ObjList *ret;\
132  ret = (COMPS_ObjList*)comps_objdict_get(doc->objects, #OBJS);\
133  if (!ret) {\
134  ret = COMPS_OBJECT_CREATE(COMPS_ObjList, NULL);\
135  comps_objdict_set(doc->objects, #OBJS, (COMPS_Object*)ret);\
136  } else {\
137  }\
138  comps_objlist_append_x(ret, (COMPS_Object*)obj);\
139  COMPS_OBJECT_DESTROY(ret);\
140 }
141 
142 #define HEAD_COMPS_DOC_ADDOBJLIST(OBJNAME, OBJTYPE) void CONCAT(comps_doc_add_,\
143  OBJNAME)\
144  (COMPS_Doc *doc,\
145  OBJTYPE *obj);
146 
148 #define COMPS_DOC_ADDOBJDICT(OBJS, OBJNAME) void CONCAT(comps_doc_add_,\
149  OBJNAME)\
150  (COMPS_Doc *doc,\
151  char *key,\
152  COMPS_Str *obj){\
153  COMPS_ObjDict *ret;\
154  ret = (COMPS_ObjDict*)comps_objdict_get(doc->objects, #OBJS);\
155  if (!ret) {\
156  ret = COMPS_OBJECT_CREATE(COMPS_ObjDict, NULL);\
157  comps_objdict_set(doc->objects, #OBJS, (COMPS_Object*)ret);\
158  }\
159  comps_objdict_set_x(ret, key, (COMPS_Object*)obj);\
160  COMPS_OBJECT_DESTROY(ret);\
161 }
162 
163 #define HEAD_COMPS_DOC_ADDOBJDICT(OBJNAME) void CONCAT(comps_doc_add_,\
164  OBJNAME)\
165  (COMPS_Doc *doc,\
166  char *key,\
167  COMPS_Str *obj);
168 
171 #define COMPS_DOC_ADDOBJMDICT(OBJS, OBJNAME) void CONCAT(comps_doc_add_,\
172  OBJNAME)\
173  (COMPS_Doc *doc,\
174  char *key,\
175  COMPS_Str *obj){\
176  COMPS_ObjMDict *ret;\
177  ret = (COMPS_ObjMDict*)comps_objdict_get(doc->objects, #OBJS);\
178  if (!ret) {\
179  ret = COMPS_OBJECT_CREATE(COMPS_ObjMDict, NULL);\
180  comps_objdict_set(doc->objects, #OBJS, (COMPS_Object*)ret);\
181  }\
182  comps_objmdict_set_x(ret, key, (COMPS_Object*)obj);\
183  COMPS_OBJECT_DESTROY(ret);\
184 }
185 
186 #define HEAD_COMPS_DOC_ADDOBJMDICT(OBJNAME) void CONCAT(comps_doc_add_,\
187  OBJNAME)\
188  (COMPS_Doc *doc,\
189  char *key,\
190  COMPS_Str *obj);
191 
197 typedef struct {
199  COMPS_ObjDict *objects;
200  COMPS_Log *log;
204  COMPS_Str *doctype_name;
205  COMPS_Str *doctype_sysid;
206  COMPS_Str *doctype_pubid;
207  } COMPS_Doc;
209 
210 //HEAD_COMPS_CREATE_u(doc, COMPS_Doc) /*comps_utils.h macro*/
211 //HEAD_COMPS_COPY_u(doc, COMPS_Doc) /*comps_utils.h macro*/
212 //HEAD_COMPS_DESTROY_u(doc, COMPS_Doc) /*comps_utils.h macro*/
213 
222 void comps_doc_create(COMPS_Doc* doc, COMPS_Object **args);
223 
225 void comps_doc_copy(COMPS_Doc *doc_dst, COMPS_Doc *doc_src);
226 
229 void comps_doc_destroy(COMPS_Doc *doc);
230 
232 signed char comps_doc_cmp_u(COMPS_Object *obj1, COMPS_Object *obj2);
233 
241 HEAD_COMPS_DOC_GETOBJLIST(groups) /*comps_doc.h macro*/
242 
243 
246 HEAD_COMPS_DOC_GETOBJLIST(categories) /*comps_doc.h macro*/
247 
251 HEAD_COMPS_DOC_GETOBJLIST(environments) /*comps_doc.h macro*/
252 
256 HEAD_COMPS_DOC_GETOBJDICT(langpacks) /*comps_doc.h macro*/
257 
261 HEAD_COMPS_DOC_GETOBJMDICT(blacklist) /*comps_doc.h macro*/
262 
266 HEAD_COMPS_DOC_GETOBJMDICT(whiteout) /*comps_doc.h macro*/
267 
280 HEAD_COMPS_DOC_SETOBJLIST(groups) /*comps_doc.h macro*/
281 
288 HEAD_COMPS_DOC_SETOBJLIST(categories) /*comps_doc.h macro*/
289 
296 HEAD_COMPS_DOC_SETOBJLIST(environments) /*comps_doc.h macro*/
297 
304 HEAD_COMPS_DOC_SETOBJDICT(langpacks) /*comps_doc.h macro*/
305 
312 HEAD_COMPS_DOC_SETOBJMDICT(blacklist) /*comps_doc.h macro*/
313 
320 HEAD_COMPS_DOC_SETOBJMDICT(whiteout) /*comps_doc.h macro*/
321 
334 HEAD_COMPS_DOC_ADDOBJLIST(group, COMPS_DocGroup) /*comps_doc.h macro*/
335 
342 HEAD_COMPS_DOC_ADDOBJLIST(category, COMPS_DocCategory) /*comps_doc.h macro*/
343 
350 HEAD_COMPS_DOC_ADDOBJLIST(environment, COMPS_DocEnv) /*comps_doc.h macro*/
351 
360 HEAD_COMPS_DOC_ADDOBJDICT(langpack) /*comps_doc.h macro*/
361 
370 HEAD_COMPS_DOC_ADDOBJMDICT(blacklist) /*comps_doc.h macro*/
371 
380 HEAD_COMPS_DOC_ADDOBJMDICT(whiteout) /*comps_doc.h macro*/
381 
384 COMPS_ObjList* comps_doc_get_groups(COMPS_Doc *doc, char *id, char *name,
385  char *desc, char *lang);
386 
387 //char* comps_doc_xml_str(COMPS_Doc* doc, char *enc, COMPS_Log *log);
388 
389 
390 //static signed char comps_doc_xml(COMPS_Doc *doc, xmlTextWriterPtr writer);
391 
400 signed char comps2xml_f(COMPS_Doc * doc, char *filename, char stdoutredirect,
401  COMPS_XMLOptions *xml_options,
402  COMPS_DefaultsOptions *def_options);
403 
408 char* comps2xml_str(COMPS_Doc *doc, COMPS_XMLOptions *options,
409  COMPS_DefaultsOptions *def_options);
410 
420 
421 COMPS_Doc* comps_doc_arch_filter(COMPS_Doc *source, COMPS_ObjList *arches);
422 
423 COMPS_Str* comps_doc_doctype_name_get(COMPS_Doc* doc);
424 COMPS_Str* comps_doc_doctype_pubid_get(COMPS_Doc* doc);
425 COMPS_Str* comps_doc_doctype_sysid_get(COMPS_Doc* doc);
426 void comps_doc_doctype_name_set(COMPS_Doc* doc, COMPS_Str *val);
427 void comps_doc_doctype_sysid_set(COMPS_Doc* doc, COMPS_Str *val);
428 void comps_doc_doctype_pubid_set(COMPS_Doc* doc, COMPS_Str *val);
429 
430 //extern COMPS_ObjectInfo COMPS_Doc_ObjInfo;
431 extern COMPS_ValRuleGeneric* COMPS_Doc_ValidateRules[];
432 
433 #endif //COMPS_DOC_H
434 
COMPS_Doc * comps_doc_union(COMPS_Doc *c1, COMPS_Doc *c2)
#define COMPS_Object_HEAD
Definition: comps_obj.h:86
COMPS_Object header file.
COMPS_DocCategory header file.
Definition: comps_obj.h:124
Definition: comps_objlist.h:41
#define COMPS_Object_TAIL(obj)
insert "extern COMPS_ObjectInfo <obj>_ObjInfo" statement. Use this macro in combination with COMPS_OB...
Definition: comps_obj.h:89
COMPS_DocGroup header file.
void comps_doc_create(COMPS_Doc *doc, COMPS_Object **args)
void comps_doc_copy(COMPS_Doc *doc_dst, COMPS_Doc *doc_src)
Definition: comps_obj.h:143
void comps_doc_destroy(COMPS_Doc *doc)
COMPS_DocGroup HEAD_COMPS_DOC_ADDOBJLIST(category, COMPS_DocCategory) HEAD_COMPS_DOC_ADDOBJLIST(environment
Definition: comps_docenv.h:18
Libcomps dictionary and multi-dictionary. COMPS_ObjDict and COMPS_ObjMDict are both derivates of COMP...
A Documented file. Details.
COMPS_Str * encoding
Definition: comps_doc.h:203
COMPS_Log * log
Definition: comps_doc.h:200
signed char comps2xml_f(COMPS_Doc *doc, char *filename, char stdoutredirect, COMPS_XMLOptions *xml_options, COMPS_DefaultsOptions *def_options)
Definition: comps_docgroup.h:49
char * comps2xml_str(COMPS_Doc *doc, COMPS_XMLOptions *options, COMPS_DefaultsOptions *def_options)
COMPS_DocEnv header file.
Definition: comps_doccategory.h:49
COMPS_ObjDict * objects
Definition: comps_doc.h:199
Definition: comps_doc.h:197
signed char comps_doc_cmp_u(COMPS_Object *obj1, COMPS_Object *obj2)