-
-
Notifications
You must be signed in to change notification settings - Fork 165
/
mxml-private.h
140 lines (121 loc) · 4.13 KB
/
mxml-private.h
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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
//
// Private definitions for Mini-XML, a small XML file parsing library.
//
// https://www.msweet.org/mxml
//
// Copyright © 2003-2024 by Michael R Sweet.
//
// Licensed under Apache License v2.0. See the file "LICENSE" for more
// information.
//
#ifndef MXML_PRIVATE_H
# define MXML_PRIVATE_H
# include "config.h"
# include "mxml.h"
# include <locale.h>
//
// Private macros...
//
# ifdef DEBUG
# define MXML_DEBUG(...) fprintf(stderr, __VA_ARGS__)
# else
# define MXML_DEBUG(...)
# endif // DEBUG
# ifndef MXML_ALLOC_SIZE
# define MXML_ALLOC_SIZE 16 // Allocation increment
# endif // !MXML_ALLOC_SIZE
# define MXML_TAB 8 // Tabs every N columns
//
// Private structures...
//
typedef struct _mxml_attr_s // An XML element attribute value.
{
char *name; // Attribute name
char *value; // Attribute value
} _mxml_attr_t;
typedef struct _mxml_element_s // An XML element value.
{
char *name; // Name of element
size_t num_attrs; // Number of attributes
_mxml_attr_t *attrs; // Attributes
} _mxml_element_t;
typedef struct _mxml_text_s // An XML text value.
{
bool whitespace; // Leading whitespace?
char *string; // Fragment string
} _mxml_text_t;
typedef struct _mxml_custom_s // An XML custom value.
{
void *data; // Pointer to (allocated) custom data
mxml_custfree_cb_t free_cb; // Free callback function
void *free_cbdata; // Free callback data
} _mxml_custom_t;
typedef union _mxml_value_u // An XML node value.
{
char *cdata; // CDATA string
char *comment; // Common string
char *declaration; // Declaration string
char *directive; // Processing instruction string
_mxml_element_t element; // Element
long integer; // Integer number
char *opaque; // Opaque string
double real; // Real number
_mxml_text_t text; // Text fragment
_mxml_custom_t custom; // Custom data
} _mxml_value_t;
struct _mxml_node_s // An XML node.
{
mxml_type_t type; // Node type
struct _mxml_node_s *next; // Next node under same parent
struct _mxml_node_s *prev; // Previous node under same parent
struct _mxml_node_s *parent; // Parent node
struct _mxml_node_s *child; // First child node
struct _mxml_node_s *last_child; // Last child node
_mxml_value_t value; // Node value
size_t ref_count; // Use count
void *user_data; // User data
};
typedef struct _mxml_global_s // Global, per-thread data
{
mxml_strcopy_cb_t strcopy_cb; // String copy callback function
mxml_strfree_cb_t strfree_cb; // String free callback function
void *str_cbdata; // String callback data
} _mxml_global_t;
struct _mxml_index_s // An XML node index.
{
char *attr; // Attribute used for indexing or NULL
size_t num_nodes; // Number of nodes in index
size_t alloc_nodes; // Allocated nodes in index
size_t cur_node; // Current node
mxml_node_t **nodes; // Node array
};
struct _mxml_options_s // XML options
{
struct lconv *loc; // Locale data
size_t loc_declen; // Length of decimal point string
mxml_custload_cb_t custload_cb; // Custom load callback function
mxml_custsave_cb_t custsave_cb; // Custom save callback function
void *cust_cbdata; // Custom callback data
mxml_entity_cb_t entity_cb; // Entity callback function
void *entity_cbdata; // Entity callback data
mxml_error_cb_t error_cb; // Error callback function
void *error_cbdata; // Error callback data
mxml_sax_cb_t sax_cb; // SAX callback function
void *sax_cbdata; // SAX callback data
mxml_type_cb_t type_cb; // Type callback function
void *type_cbdata; // Type callback data
mxml_type_t type_value; // Fixed type value (if no type callback)
int wrap; // Wrap margin
mxml_ws_cb_t ws_cb; // Whitespace callback function
void *ws_cbdata; // Whitespace callback data
};
//
// Private functions...
//
extern _mxml_global_t *_mxml_global(void);
extern const char *_mxml_entity_string(int ch);
extern int _mxml_entity_value(mxml_options_t *options, const char *name);
extern void _mxml_error(mxml_options_t *options, const char *format, ...) MXML_FORMAT(2,3);
extern char *_mxml_strcopy(const char *s);
extern void _mxml_strfree(char *s);
#endif // !MXML_PRIVATE_H