717983f125d0fb3c4acb8dfc77b3812ec5096bdd
[platform/upstream/libsolv.git] / ext / solv_xmlparser.h
1
2 struct solv_xmlparser_element {
3   int fromstate;
4   char *element;
5   int tostate;
6   int docontent;
7 };
8
9 struct solv_xmlparser {
10   void *userdata;
11   char *errstr;
12   unsigned int line;
13   unsigned int column;
14
15   int state;
16   int docontent;
17
18   Queue elementq;
19   int unknowncnt;
20
21   char *content;
22   int lcontent;         /* current content length */
23   int acontent;         /* allocated content length */
24
25   struct solv_xmlparser_element *elements;
26   int nelements;
27
28   void (*startelement)(struct solv_xmlparser *xmlp, int state, const char *name, const char **atts);
29   void (*endelement)(struct solv_xmlparser *xmlp, int state, char *content);
30
31   Id *elementhelper;
32   void *parser;
33   void *attsdata;
34 };
35
36 #define SOLV_XMLPARSER_OK       0
37 #define SOLV_XMLPARSER_ERROR    -1
38
39 static inline const char *
40 solv_xmlparser_find_attr(const char *txt, const char **atts)
41 {
42   for (; *atts; atts += 2)
43     if (!strcmp(*atts, txt))
44       return atts[1];
45   return 0;
46 }
47
48 extern void solv_xmlparser_init(struct solv_xmlparser *xmlp, struct solv_xmlparser_element *elements, void *userdata,
49     void (*startelement)(struct solv_xmlparser *xmlp, int state, const char *name, const char **atts),
50     void (*endelement)(struct solv_xmlparser *xmlp, int state, char *content));
51
52 extern void solv_xmlparser_free(struct solv_xmlparser *xmlp);
53 extern int solv_xmlparser_parse(struct solv_xmlparser *xmlp, FILE *fp);
54 unsigned int solv_xmlparser_lineno(struct solv_xmlparser *xmlp);
55 char *solv_xmlparser_contentspace(struct solv_xmlparser *xmlp, int l);
56
57