From d30342f36c093e6fe7a693da437dd15cd1e7075b Mon Sep 17 00:00:00 2001 From: Darren Salt Date: Fri, 14 Sep 2007 20:35:21 +0100 Subject: Create child "[CDATA]" nodes for extra text (but prefer merging). b<[CDATA[c]]> gives a.data = "bc". bc gives a.data = "b" & .child = "d" then "[CDATA]" with .data = "c" if XML_PARSER_MULTI_TEXT is set, else a.data = "bc" and there's no "[CDATA]". --- src/xine-utils/xmlparser.h | 15 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 'src/xine-utils/xmlparser.h') diff --git a/src/xine-utils/xmlparser.h b/src/xine-utils/xmlparser.h index 8d4915abf..364cc4c2b 100644 --- a/src/xine-utils/xmlparser.h +++ b/src/xine-utils/xmlparser.h @@ -37,6 +37,12 @@ #define XML_PARSER_OK 0 #define XML_PARSER_ERROR 1 +/* xml_parser_build_tree_with_options flag bits */ +#define XML_PARSER_RELAXED 1 +#define XML_PARSER_MULTI_TEXT 2 + +/* node name for extra text chunks */ +#define CDATA_MARKER "[CDATA]" /* xml property */ typedef struct xml_property_s { @@ -46,6 +52,14 @@ typedef struct xml_property_s { } xml_property_t; /* xml node */ +/* .data contains any text which precedes any subtree elements; + * subtree elements may also contain only text; if so, name is "[CDATA]". + * e.g. bd + * node1: .name="a" .data="b" .child=node2 .next=NULL + * node2: .name="c" .data=NULL .child=NULL .next=node3 + * node3: .name="[CDATA]" .data="d" .child=NULL .next=NULL + * Adjacent text items are merged. + */ typedef struct xml_node_s { char *name; char *data; @@ -58,6 +72,7 @@ void xml_parser_init(const char * buf, int size, int mode) XINE_PROTECTED; int xml_parser_build_tree(xml_node_t **root_node) XINE_PROTECTED; int xml_parser_build_tree_relaxed(xml_node_t **root_node, int relaxed) XINE_PROTECTED; +int xml_parser_build_tree_with_options(xml_node_t **root_node, int flags) XINE_PROTECTED; void xml_parser_free_tree(xml_node_t *root_node) XINE_PROTECTED; -- cgit v1.2.3