File: mxml-private.h

package info (click to toggle)
mxml 4.0.4-3
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 2,672 kB
  • sloc: ansic: 4,246; sh: 3,389; makefile: 522; cpp: 178; xml: 56
file content (144 lines) | stat: -rw-r--r-- 4,369 bytes parent folder | download
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
141
142
143
144
//
// 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);

char *_mxml_vstrdupf(const char *format, va_list ap);
char *_mxml_strdup(const char *s);
char *_mxml_strdupf(const char *format, ...);

#endif // !MXML_PRIVATE_H