9fb342f42b687ea809f116efa2a2be5ee96ad4f5
[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
12   int state;
13   int docontent;
14
15   Queue elementq;
16   int unknowncnt;
17
18   char *content;
19   int lcontent;         /* current content length */
20   int acontent;         /* allocated content length */
21
22   struct solv_xmlparser_element *elements;
23   int nelements;
24
25   void (*startelement)(struct solv_xmlparser *xmlp, int state, const char *name, const char **atts);
26   void (*endelement)(struct solv_xmlparser *xmlp, int state, char *content);
27   void (*errorhandler)(struct solv_xmlparser *xmlp, const char *errstr, unsigned int line, unsigned int column);
28
29   Id *elementhelper;
30   void *parser;
31 };
32
33 static inline const char *
34 solv_xmlparser_find_attr(const char *txt, const char **atts)
35 {
36   for (; *atts; atts += 2)
37     if (!strcmp(*atts, txt))
38       return atts[1];
39   return 0;
40 }
41
42 extern void solv_xmlparser_init(struct solv_xmlparser *xmlp, struct solv_xmlparser_element *elements, void *userdata,
43     void (*startelement)(struct solv_xmlparser *xmlp, int state, const char *name, const char **atts),
44     void (*endelement)(struct solv_xmlparser *xmlp, int state, char *content),
45     void (*errorhandler)(struct solv_xmlparser *xmlp, const char *errstr, unsigned int line, unsigned int column));
46
47 extern void solv_xmlparser_free(struct solv_xmlparser *xmlp);
48 extern void solv_xmlparser_parse(struct solv_xmlparser *xmlp, FILE *fp);
49 unsigned int solv_xmlparser_lineno(struct solv_xmlparser *xmlp);
50 char *solv_xmlparser_contentspace(struct solv_xmlparser *xmlp, int l);
51
52