File: solv_xmlparser.h

package info (click to toggle)
libsolv 0.7.35-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 4,804 kB
  • sloc: ansic: 73,004; python: 871; perl: 742; tcl: 730; ruby: 705; sh: 263; cpp: 204; makefile: 41
file content (57 lines) | stat: -rw-r--r-- 1,503 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57

struct solv_xmlparser_element {
  int fromstate;
  char *element;
  int tostate;
  int docontent;
};

struct solv_xmlparser {
  void *userdata;
  char *errstr;
  unsigned int line;
  unsigned int column;

  int state;
  int docontent;

  Queue elementq;
  int unknowncnt;

  char *content;
  int lcontent;		/* current content length */
  int acontent;		/* allocated content length */

  struct solv_xmlparser_element *elements;
  int nelements;

  void (*startelement)(struct solv_xmlparser *xmlp, int state, const char *name, const char **atts);
  void (*endelement)(struct solv_xmlparser *xmlp, int state, char *content);

  Id *elementhelper;
  void *parser;
  void *attsdata;
};

#define SOLV_XMLPARSER_OK	0
#define SOLV_XMLPARSER_ERROR	-1

static inline const char *
solv_xmlparser_find_attr(const char *txt, const char **atts)
{
  for (; *atts; atts += 2)
    if (!strcmp(*atts, txt))
      return atts[1];
  return 0;
}

extern void solv_xmlparser_init(struct solv_xmlparser *xmlp, struct solv_xmlparser_element *elements, void *userdata,
    void (*startelement)(struct solv_xmlparser *xmlp, int state, const char *name, const char **atts),
    void (*endelement)(struct solv_xmlparser *xmlp, int state, char *content));

extern void solv_xmlparser_free(struct solv_xmlparser *xmlp);
extern int solv_xmlparser_parse(struct solv_xmlparser *xmlp, FILE *fp);
unsigned int solv_xmlparser_lineno(struct solv_xmlparser *xmlp);
char *solv_xmlparser_contentspace(struct solv_xmlparser *xmlp, int l);