Update/fix documentation.

Add mxmlNewOpaquef and mxmlSetOpaquef functions.

Fix discussion writing code to look for opaque strings.

Fix dependencies for documentation generation.
pull/196/head
Michael Sweet 7 years ago
parent 48c3c62521
commit bcfa6ef518
  1. 2
      CHANGES.md
  2. 13
      Makefile.in
  3. 1099
      doc/body.md
  4. 204
      doc/mxml.man
  5. 507
      doc/reference.html
  6. 4
      mxml-attr.c
  7. 4
      mxml-entity.c
  8. 120
      mxml-file.c
  9. 20
      mxml-get.c
  10. 30
      mxml-index.c
  11. 127
      mxml-node.c
  12. 32
      mxml-search.c
  13. 44
      mxml-set.c
  14. 18
      mxml.h
  15. 102
      mxmldoc.c

@ -11,6 +11,8 @@
- The mxmldoc utility now supports the `SOURCE_DATE_EPOCH` environment - The mxmldoc utility now supports the `SOURCE_DATE_EPOCH` environment
variable for reproducible builds (Issue #193) variable for reproducible builds (Issue #193)
- The mxmldoc utility now supports Markdown (Issue #194) - The mxmldoc utility now supports Markdown (Issue #194)
- Added `mxmlNewOpaquef` and `mxmlSetOpaquef` functions to add and set formatted
opaque string values.
# Changes in Mini-XML 2.10 # Changes in Mini-XML 2.10

@ -360,7 +360,10 @@ testmxml.o: mxml.h
# mxml.xml # mxml.xml
# #
mxml.xml: mxmldoc-static mxml.h $(PUBLIBOBJS:.o=.c) mxml.xml: mxmldoc-static mxml.h $(PUBLIBOBJS:.o=.c) \
doc/body.man doc/body.md \
doc/docset.css doc/docset.header \
doc/reference.header
echo Generating API documentation... echo Generating API documentation...
$(RM) mxml.xml $(RM) mxml.xml
./mxmldoc-static --header doc/reference.header \ ./mxmldoc-static --header doc/reference.header \
@ -390,13 +393,9 @@ mxml.xml: mxmldoc-static mxml.h $(PUBLIBOBJS:.o=.c)
# mxml.epub # mxml.epub
# #
mxml.epub: mxml.xml mxml.epub: mxml.xml doc/body.md doc/mxml-cover.png
echo Generating EPUB API documentation... echo Generating EPUB API documentation...
./mxmldoc-static --header doc/docset.header \ ./mxmldoc-static --body doc/body.md \
--body doc/body.md \
--docversion @VERSION@ --author "Michael R Sweet" \
--copyright "Copyright 2003-2017, All Rights Reserved." \
--title "Mini-XML API Reference" \
--coverimage doc/mxml-cover.png \ --coverimage doc/mxml-cover.png \
--epub mxml.epub mxml.xml --epub mxml.epub mxml.xml

File diff suppressed because it is too large Load Diff

@ -1,4 +1,4 @@
.TH mxml 3 "Mini-XML API" "04/23/17" "Mini-XML API" .TH mxml 3 "Mini-XML API" "04/24/17" "Mini-XML API"
.SH NAME .SH NAME
mxml \- Mini-XML API mxml \- Mini-XML API
.SH INCLUDE FILE .SH INCLUDE FILE
@ -244,12 +244,12 @@ void mxmlAdd (
); );
.fi .fi
.PP .PP
Adds the specified node to the parent. If the child argument is not Adds the specified node to the parent. If the child argument is not
NULL, puts the new node before or after the specified child depending \fBNULL\fR, puts the new node before or after the specified child depending
on the value of the where argument. If the child argument is NULL, on the value of the where argument. If the child argument is \fBNULL\fR,
puts the new node at the beginning of the child list (MXML_ADD_BEFORE) puts the new node at the beginning of the child list (\fBMXML_ADD_BEFORE\fR)
or at the end of the child list (MXML_ADD_AFTER). The constant or at the end of the child list (\fBMXML_ADD_AFTER\fR). The constant
MXML_ADD_TO_PARENT can be used to specify a NULL child pointer. \fBMXML_ADD_TO_PARENT\fR can be used to specify a \fBNULL\fR child pointer.
.SS mxmlDelete .SS mxmlDelete
Delete a node and all of its children. Delete a node and all of its children.
.PP .PP
@ -260,7 +260,7 @@ void mxmlDelete (
.fi .fi
.PP .PP
If the specified node has a parent, this function first removes the If the specified node has a parent, this function first removes the
node from its parent using the mxmlRemove() function. node from its parent using the \fImxmlRemove\fR function.
.SS mxmlElementDeleteAttr .SS mxmlElementDeleteAttr
Delete an attribute. Delete an attribute.
.PP .PP
@ -282,7 +282,7 @@ const char * mxmlElementGetAttr (
); );
.fi .fi
.PP .PP
This function returns NULL if the node is not an element or the This function returns \fBNULL\fR if the node is not an element or the
named attribute does not exist. named attribute does not exist.
.SS mxmlElementGetAttrByIndex .SS mxmlElementGetAttrByIndex
Get an element attribute by index. Get an element attribute by index.
@ -359,7 +359,7 @@ const char * mxmlEntityGetName (
); );
.fi .fi
.PP .PP
If val does not need to be represented by a named entity, NULL is returned. If val does not need to be represented by a named entity, \fBNULL\fR is returned.
.SS mxmlEntityGetValue .SS mxmlEntityGetValue
Get the character corresponding to a named entity. Get the character corresponding to a named entity.
.PP .PP
@ -386,7 +386,7 @@ Find the named element.
mxml_node_t * mxmlFindElement ( mxml_node_t * mxmlFindElement (
mxml_node_t *node, mxml_node_t *node,
mxml_node_t *top, mxml_node_t *top,
const char *name, const char *element,
const char *attr, const char *attr,
const char *value, const char *value,
int descend int descend
@ -394,12 +394,12 @@ mxml_node_t * mxmlFindElement (
.fi .fi
.PP .PP
The search is constrained by the name, attribute name, and value; any The search is constrained by the name, attribute name, and value; any
NULL names or values are treated as wildcards, so different kinds of \fBNULL\fR names or values are treated as wildcards, so different kinds of
searches can be implemented by looking for all elements of a given name searches can be implemented by looking for all elements of a given name
or all elements with a specific attribute. The descend argument determines or all elements with a specific attribute. The descend argument determines
whether the search descends into child nodes; normally you will use whether the search descends into child nodes; normally you will use
MXML_DESCEND_FIRST for the initial search and MXML_NO_DESCEND to find \fBMXML_DESCEND_FIRST\fR for the initial search and \fBMXML_NO_DESCEND\fR
additional direct descendents of the node. The top node argument to find additional direct descendents of the node. The top node argument
constrains the search to a particular node's children. constrains the search to a particular node's children.
.SS mxmlFindPath .SS mxmlFindPath
Find a node with the given path. Find a node with the given path.
@ -577,7 +577,7 @@ const char * mxmlGetText (
.fi .fi
.PP .PP
\fBNULL\fR is returned if the node (or its first child) is not a text node. \fBNULL\fR is returned if the node (or its first child) is not a text node.
The "whitespace" argument can be NULL. The "whitespace" argument can be \fBNULL\fR.
.SS mxmlGetType .SS mxmlGetType
@ -619,7 +619,9 @@ mxml_node_t * mxmlIndexEnum (
); );
.fi .fi
.PP .PP
Nodes are returned in the sorted order of the index. You should call \fImxmlIndexReset\fR prior to using this function to get
the first node in the index. Nodes are returned in the sorted order of the
index.
.SS mxmlIndexFind .SS mxmlIndexFind
Find the next matching node. Find the next matching node.
.PP .PP
@ -631,10 +633,10 @@ mxml_node_t * mxmlIndexFind (
); );
.fi .fi
.PP .PP
You should call mxmlIndexReset() prior to using this function for You should call \fImxmlIndexReset\fR prior to using this function for
the first time with a particular set of "element" and "value" the first time with a particular set of "element" and "value"
strings. Passing NULL for both "element" and "value" is equivalent strings. Passing \fBNULL\fR for both "element" and "value" is equivalent
to calling mxmlIndexEnum(). to calling \fImxmlIndexEnum\fR.
.SS mxmlIndexGetCount .SS mxmlIndexGetCount
Get the number of nodes in an index. Get the number of nodes in an index.
.PP .PP
@ -657,7 +659,7 @@ mxml_index_t * mxmlIndexNew (
.fi .fi
.PP .PP
The index will contain all nodes that contain the named element and/or The index will contain all nodes that contain the named element and/or
attribute. If both "element" and "attr" are NULL, then the index will attribute. If both "element" and "attr" are \fBNULL\fR, then the index will
contain a sorted list of the elements in the node tree. Nodes are contain a sorted list of the elements in the node tree. Nodes are
sorted by element name and optionally by attribute value if the "attr" sorted by element name and optionally by attribute value if the "attr"
argument is not NULL. argument is not NULL.
@ -671,8 +673,8 @@ mxml_node_t * mxmlIndexReset (
); );
.fi .fi
.PP .PP
This function should be called prior to using mxmlIndexEnum() or This function should be called prior to using \fImxmlIndexEnum\fR or
mxmlIndexFind() for the first time. \fImxmlIndexFind\fR for the first time.
.SS mxmlLoadFd .SS mxmlLoadFd
Load a file descriptor into an XML node tree. Load a file descriptor into an XML node tree.
.PP .PP
@ -688,12 +690,9 @@ The nodes in the specified file are added to the specified top node.
If no top node is provided, the XML file MUST be well-formed with a If no top node is provided, the XML file MUST be well-formed with a
single parent node like <?xml> for the entire file. The callback single parent node like <?xml> for the entire file. The callback
function returns the value type that should be used for child nodes. function returns the value type that should be used for child nodes.
If MXML_NO_CALLBACK is specified then all child nodes will be either The constants \fBMXML_INTEGER_CALLBACK\fR, \fBMXML_OPAQUE_CALLBACK\fR,
MXML_ELEMENT or MXML_TEXT nodes. \fBMXML_REAL_CALLBACK\fR, and \fBMXML_TEXT_CALLBACK\fR are defined for
.PP loading child (data) nodes of the specified type.
The constants MXML_INTEGER_CALLBACK, MXML_OPAQUE_CALLBACK,
MXML_REAL_CALLBACK, and MXML_TEXT_CALLBACK are defined for loading
child nodes of the specified type.
.SS mxmlLoadFile .SS mxmlLoadFile
Load a file into an XML node tree. Load a file into an XML node tree.
.PP .PP
@ -709,12 +708,9 @@ The nodes in the specified file are added to the specified top node.
If no top node is provided, the XML file MUST be well-formed with a If no top node is provided, the XML file MUST be well-formed with a
single parent node like <?xml> for the entire file. The callback single parent node like <?xml> for the entire file. The callback
function returns the value type that should be used for child nodes. function returns the value type that should be used for child nodes.
If MXML_NO_CALLBACK is specified then all child nodes will be either The constants \fBMXML_INTEGER_CALLBACK\fR, \fBMXML_OPAQUE_CALLBACK\fR,
MXML_ELEMENT or MXML_TEXT nodes. \fBMXML_REAL_CALLBACK\fR, and \fBMXML_TEXT_CALLBACK\fR are defined for
.PP loading child (data) nodes of the specified type.
The constants MXML_INTEGER_CALLBACK, MXML_OPAQUE_CALLBACK,
MXML_REAL_CALLBACK, and MXML_TEXT_CALLBACK are defined for loading
child nodes of the specified type.
.SS mxmlLoadString .SS mxmlLoadString
Load a string into an XML node tree. Load a string into an XML node tree.
.PP .PP
@ -730,12 +726,9 @@ The nodes in the specified string are added to the specified top node.
If no top node is provided, the XML string MUST be well-formed with a If no top node is provided, the XML string MUST be well-formed with a
single parent node like <?xml> for the entire string. The callback single parent node like <?xml> for the entire string. The callback
function returns the value type that should be used for child nodes. function returns the value type that should be used for child nodes.
If MXML_NO_CALLBACK is specified then all child nodes will be either The constants \fBMXML_INTEGER_CALLBACK\fR, \fBMXML_OPAQUE_CALLBACK\fR,
MXML_ELEMENT or MXML_TEXT nodes. \fBMXML_REAL_CALLBACK\fR, and \fBMXML_TEXT_CALLBACK\fR are defined for
.PP loading child (data) nodes of the specified type.
The constants MXML_INTEGER_CALLBACK, MXML_OPAQUE_CALLBACK,
MXML_REAL_CALLBACK, and MXML_TEXT_CALLBACK are defined for loading
child nodes of the specified type.
.SS mxmlNewCDATA .SS mxmlNewCDATA
Create a new CDATA node. Create a new CDATA node.
.PP .PP
@ -747,9 +740,10 @@ mxml_node_t * mxmlNewCDATA (
.fi .fi
.PP .PP
The new CDATA node is added to the end of the specified parent's child The new CDATA node is added to the end of the specified parent's child
list. The constant MXML_NO_PARENT can be used to specify that the new list. The constant \fBMXML_NO_PARENT\fR can be used to specify that the new
CDATA node has no parent. The data string must be nul-terminated and CDATA node has no parent. The data string must be nul-terminated and
is copied into the new node. CDATA nodes use the MXML_ELEMENT type. is copied into the new node. CDATA nodes currently use the
\fBMXML_ELEMENT\fR type.
.SS mxmlNewCustom .SS mxmlNewCustom
@ -764,8 +758,8 @@ mxml_node_t * mxmlNewCustom (
.fi .fi
.PP .PP
The new custom node is added to the end of the specified parent's child The new custom node is added to the end of the specified parent's child
list. The constant MXML_NO_PARENT can be used to specify that the new list. The constant \fBMXML_NO_PARENT\fR can be used to specify that the new
element node has no parent. NULL can be passed when the data in the element node has no parent. \fBNULL\fR can be passed when the data in the
node is not dynamically allocated or is separately managed. node is not dynamically allocated or is separately managed.
@ -780,7 +774,7 @@ mxml_node_t * mxmlNewElement (
.fi .fi
.PP .PP
The new element node is added to the end of the specified parent's child The new element node is added to the end of the specified parent's child
list. The constant MXML_NO_PARENT can be used to specify that the new list. The constant \fBMXML_NO_PARENT\fR can be used to specify that the new
element node has no parent. element node has no parent.
.SS mxmlNewInteger .SS mxmlNewInteger
Create a new integer node. Create a new integer node.
@ -793,7 +787,7 @@ mxml_node_t * mxmlNewInteger (
.fi .fi
.PP .PP
The new integer node is added to the end of the specified parent's child The new integer node is added to the end of the specified parent's child
list. The constant MXML_NO_PARENT can be used to specify that the new list. The constant \fBMXML_NO_PARENT\fR can be used to specify that the new
integer node has no parent. integer node has no parent.
.SS mxmlNewOpaque .SS mxmlNewOpaque
Create a new opaque string. Create a new opaque string.
@ -805,10 +799,25 @@ mxml_node_t * mxmlNewOpaque (
); );
.fi .fi
.PP .PP
The new opaque node is added to the end of the specified parent's child The new opaque string node is added to the end of the specified parent's
list. The constant MXML_NO_PARENT can be used to specify that the new child list. The constant \fBMXML_NO_PARENT\fR can be used to specify that
opaque node has no parent. The opaque string must be nul-terminated and the new opaque string node has no parent. The opaque string must be nul-
is copied into the new node. terminated and is copied into the new node.
.SS mxmlNewOpaquef
Create a new formatted opaque string node.
.PP
.nf
mxml_node_t * mxmlNewOpaquef (
mxml_node_t *parent,
const char *format,
...
);
.fi
.PP
The new opaque string node is added to the end of the specified parent's
child list. The constant \fBMXML_NO_PARENT\fR can be used to specify that
the new opaque string node has no parent. The format string must be
nul-terminated and is formatted into the new node.
.SS mxmlNewReal .SS mxmlNewReal
Create a new real number node. Create a new real number node.
.PP .PP
@ -820,7 +829,7 @@ mxml_node_t * mxmlNewReal (
.fi .fi
.PP .PP
The new real number node is added to the end of the specified parent's The new real number node is added to the end of the specified parent's
child list. The constant MXML_NO_PARENT can be used to specify that child list. The constant \fBMXML_NO_PARENT\fR can be used to specify that
the new real number node has no parent. the new real number node has no parent.
.SS mxmlNewText .SS mxmlNewText
Create a new text fragment node. Create a new text fragment node.
@ -834,9 +843,9 @@ mxml_node_t * mxmlNewText (
.fi .fi
.PP .PP
The new text node is added to the end of the specified parent's child The new text node is added to the end of the specified parent's child
list. The constant MXML_NO_PARENT can be used to specify that the new list. The constant \fBMXML_NO_PARENT\fR can be used to specify that the new
text node has no parent. The whitespace parameter is used to specify text node has no parent. The whitespace parameter is used to specify
whether leading whitespace is present before the node. The text whether leading whitespace is present before the node. The text
string must be nul-terminated and is copied into the new node. string must be nul-terminated and is copied into the new node.
.SS mxmlNewTextf .SS mxmlNewTextf
Create a new formatted text fragment node. Create a new formatted text fragment node.
@ -851,9 +860,9 @@ mxml_node_t * mxmlNewTextf (
.fi .fi
.PP .PP
The new text node is added to the end of the specified parent's child The new text node is added to the end of the specified parent's child
list. The constant MXML_NO_PARENT can be used to specify that the new list. The constant \fBMXML_NO_PARENT\fR can be used to specify that the new
text node has no parent. The whitespace parameter is used to specify text node has no parent. The whitespace parameter is used to specify
whether leading whitespace is present before the node. The format whether leading whitespace is present before the node. The format
string must be nul-terminated and is formatted into the new node. string must be nul-terminated and is formatted into the new node.
.SS mxmlNewXML .SS mxmlNewXML
Create a new XML document tree. Create a new XML document tree.
@ -865,7 +874,7 @@ mxml_node_t * mxmlNewXML (
.fi .fi
.PP .PP
The "version" argument specifies the version number to put in the The "version" argument specifies the version number to put in the
?xml element node. If NULL, version 1.0 is assumed. ?xml element node. If \fBNULL\fR, version "1.0" is assumed.
.SS mxmlRelease .SS mxmlRelease
@ -878,7 +887,7 @@ int mxmlRelease (
.fi .fi
.PP .PP
When the reference count reaches zero, the node (and any children) When the reference count reaches zero, the node (and any children)
is deleted via mxmlDelete(). is deleted via \fImxmlDelete\fR.
.SS mxmlRemove .SS mxmlRemove
@ -890,8 +899,8 @@ void mxmlRemove (
); );
.fi .fi
.PP .PP
Does not free memory used by the node - use mxmlDelete() for that. This function does not free memory used by the node - use \fImxmlDelete\fR
This function does nothing if the node has no parent. for that. This function does nothing if the node has no parent.
.SS mxmlRetain .SS mxmlRetain
Retain a node. Retain a node.
.PP .PP
@ -920,14 +929,11 @@ The nodes in the specified file are added to the specified top node.
If no top node is provided, the XML file MUST be well-formed with a If no top node is provided, the XML file MUST be well-formed with a
single parent node like <?xml> for the entire file. The callback single parent node like <?xml> for the entire file. The callback
function returns the value type that should be used for child nodes. function returns the value type that should be used for child nodes.
If MXML_NO_CALLBACK is specified then all child nodes will be either The constants \fBMXML_INTEGER_CALLBACK\fR, \fBMXML_OPAQUE_CALLBACK\fR,
MXML_ELEMENT or MXML_TEXT nodes. \fBMXML_REAL_CALLBACK\fR, and \fBMXML_TEXT_CALLBACK\fR are defined for
.PP loading child nodes of the specified type.
The constants MXML_INTEGER_CALLBACK, MXML_OPAQUE_CALLBACK,
MXML_REAL_CALLBACK, and MXML_TEXT_CALLBACK are defined for loading
child nodes of the specified type.
.PP .PP
The SAX callback must call mxmlRetain() for any nodes that need to The SAX callback must call \fImxmlRetain\fR for any nodes that need to
be kept for later use. Otherwise, nodes are deleted when the parent be kept for later use. Otherwise, nodes are deleted when the parent
node is closed or after each data, comment, CDATA, or directive node. node is closed or after each data, comment, CDATA, or directive node.
@ -950,14 +956,11 @@ The nodes in the specified file are added to the specified top node.
If no top node is provided, the XML file MUST be well-formed with a If no top node is provided, the XML file MUST be well-formed with a
single parent node like <?xml> for the entire file. The callback single parent node like <?xml> for the entire file. The callback
function returns the value type that should be used for child nodes. function returns the value type that should be used for child nodes.
If MXML_NO_CALLBACK is specified then all child nodes will be either The constants \fBMXML_INTEGER_CALLBACK\fR, \fBMXML_OPAQUE_CALLBACK\fR,
MXML_ELEMENT or MXML_TEXT nodes. \fBMXML_REAL_CALLBACK\fR, and \fBMXML_TEXT_CALLBACK\fR are defined for
loading child nodes of the specified type.
.PP .PP
The constants MXML_INTEGER_CALLBACK, MXML_OPAQUE_CALLBACK, The SAX callback must call \fImxmlRetain\fR for any nodes that need to
MXML_REAL_CALLBACK, and MXML_TEXT_CALLBACK are defined for loading
child nodes of the specified type.
.PP
The SAX callback must call mxmlRetain() for any nodes that need to
be kept for later use. Otherwise, nodes are deleted when the parent be kept for later use. Otherwise, nodes are deleted when the parent
node is closed or after each data, comment, CDATA, or directive node. node is closed or after each data, comment, CDATA, or directive node.
@ -980,14 +983,11 @@ The nodes in the specified string are added to the specified top node.
If no top node is provided, the XML string MUST be well-formed with a If no top node is provided, the XML string MUST be well-formed with a
single parent node like <?xml> for the entire string. The callback single parent node like <?xml> for the entire string. The callback
function returns the value type that should be used for child nodes. function returns the value type that should be used for child nodes.
If MXML_NO_CALLBACK is specified then all child nodes will be either The constants \fBMXML_INTEGER_CALLBACK\fR, \fBMXML_OPAQUE_CALLBACK\fR,
MXML_ELEMENT or MXML_TEXT nodes. \fBMXML_REAL_CALLBACK\fR, and \fBMXML_TEXT_CALLBACK\fR are defined for
.PP loading child nodes of the specified type.
The constants MXML_INTEGER_CALLBACK, MXML_OPAQUE_CALLBACK,
MXML_REAL_CALLBACK, and MXML_TEXT_CALLBACK are defined for loading
child nodes of the specified type.
.PP .PP
The SAX callback must call mxmlRetain() for any nodes that need to The SAX callback must call \fImxmlRetain\fR for any nodes that need to
be kept for later use. Otherwise, nodes are deleted when the parent be kept for later use. Otherwise, nodes are deleted when the parent
node is closed or after each data, comment, CDATA, or directive node. node is closed or after each data, comment, CDATA, or directive node.
@ -1004,13 +1004,13 @@ char * mxmlSaveAllocString (
.PP .PP
This function returns a pointer to a string containing the textual This function returns a pointer to a string containing the textual
representation of the XML node tree. The string should be freed representation of the XML node tree. The string should be freed
using the free() function when you are done with it. NULL is returned using the free() function when you are done with it. \fBNULL\fR is returned
if the node would produce an empty string or if the string cannot be if the node would produce an empty string or if the string cannot be
allocated. allocated.
.PP .PP
The callback argument specifies a function that returns a whitespace The callback argument specifies a function that returns a whitespace
string or NULL before and after each element. If MXML_NO_CALLBACK string or NULL before and after each element. If \fBMXML_NO_CALLBACK\fR
is specified, whitespace will only be added before MXML_TEXT nodes is specified, whitespace will only be added before \fBMXML_TEXT\fR nodes
with leading whitespace and before attribute names inside opening with leading whitespace and before attribute names inside opening
element tags. element tags.
.SS mxmlSaveFd .SS mxmlSaveFd
@ -1025,8 +1025,8 @@ int mxmlSaveFd (
.fi .fi
.PP .PP
The callback argument specifies a function that returns a whitespace The callback argument specifies a function that returns a whitespace
string or NULL before and after each element. If MXML_NO_CALLBACK string or NULL before and after each element. If \fBMXML_NO_CALLBACK\fR
is specified, whitespace will only be added before MXML_TEXT nodes is specified, whitespace will only be added before \fBMXML_TEXT\fR nodes
with leading whitespace and before attribute names inside opening with leading whitespace and before attribute names inside opening
element tags. element tags.
.SS mxmlSaveFile .SS mxmlSaveFile
@ -1041,8 +1041,8 @@ int mxmlSaveFile (
.fi .fi
.PP .PP
The callback argument specifies a function that returns a whitespace The callback argument specifies a function that returns a whitespace
string or NULL before and after each element. If MXML_NO_CALLBACK string or NULL before and after each element. If \fBMXML_NO_CALLBACK\fR
is specified, whitespace will only be added before MXML_TEXT nodes is specified, whitespace will only be added before \fBMXML_TEXT\fR nodes
with leading whitespace and before attribute names inside opening with leading whitespace and before attribute names inside opening
element tags. element tags.
.SS mxmlSaveString .SS mxmlSaveString
@ -1062,8 +1062,8 @@ required for the string but only copies (bufsize - 1) characters
into the specified buffer. into the specified buffer.
.PP .PP
The callback argument specifies a function that returns a whitespace The callback argument specifies a function that returns a whitespace
string or NULL before and after each element. If MXML_NO_CALLBACK string or NULL before and after each element. If \fBMXML_NO_CALLBACK\fR
is specified, whitespace will only be added before MXML_TEXT nodes is specified, whitespace will only be added before \fBMXML_TEXT\fR nodes
with leading whitespace and before attribute names inside opening with leading whitespace and before attribute names inside opening
element tags. element tags.
.SS mxmlSetCDATA .SS mxmlSetCDATA
@ -1107,7 +1107,7 @@ The load function accepts a node pointer and a data string and must
return 0 on success and non-zero on error. return 0 on success and non-zero on error.
.PP .PP
The save function accepts a node pointer and must return a malloc'd The save function accepts a node pointer and must return a malloc'd
string on success and NULL on error. string on success and \fBNULL\fR on error.
.SS mxmlSetElement .SS mxmlSetElement
Set the name of an element node. Set the name of an element node.
.PP .PP
@ -1149,6 +1149,20 @@ int mxmlSetOpaque (
.fi .fi
.PP .PP
The node is not changed if it (or its first child) is not an opaque node. The node is not changed if it (or its first child) is not an opaque node.
.SS mxmlSetOpaquef
Set the value of an opaque string node to a formatted string.
.PP
.nf
int mxmlSetOpaquef (
mxml_node_t *node,
const char *format,
...
);
.fi
.PP
The node is not changed if it (or its first child) is not an opaque node.
.SS mxmlSetReal .SS mxmlSetReal
Set the value of a real number node. Set the value of a real number node.
.PP .PP
@ -1220,7 +1234,7 @@ mxml_node_t * mxmlWalkNext (
.fi .fi
.PP .PP
The descend argument controls whether the first child is considered The descend argument controls whether the first child is considered
to be the next node. The top node argument constrains the walk to to be the next node. The top node argument constrains the walk to
the node's children. the node's children.
.SS mxmlWalkPrev .SS mxmlWalkPrev
Walk to the previous logical node in the tree. Walk to the previous logical node in the tree.
@ -1234,7 +1248,7 @@ mxml_node_t * mxmlWalkPrev (
.fi .fi
.PP .PP
The descend argument controls whether the previous node's last child The descend argument controls whether the previous node's last child
is considered to be the previous node. The top node argument constrains is considered to be the previous node. The top node argument constrains
the walk to the node's children. the walk to the node's children.
.SH TYPES .SH TYPES
.SS mxml_custom_destroy_cb_t .SS mxml_custom_destroy_cb_t

@ -85,11 +85,20 @@ div.contents ul.contents {
} }
.variable { .variable {
} }
blockquote {
border: solid thin gray;
box-shadow: 3px 3px 5px rgba(0,0,0,0.5);
padding: 0px 10px;
page-break-inside: avoid;
}
p code, li code, p.code, pre, ul.code li { p code, li code, p.code, pre, ul.code li {
background: rgba(127,127,127,0.1); background: rgba(127,127,127,0.1);
border: thin dotted gray; border: thin dotted gray;
font-family: monospace; font-family: monospace;
font-size: 90%; font-size: 90%;
hyphens: manual;
-webkit-hyphens: manual;
page-break-inside: avoid;
} }
p.code, pre, ul.code li { p.code, pre, ul.code li {
padding: 10px; padding: 10px;
@ -196,6 +205,7 @@ h3.title {
<li><a href="#mxmlNewElement">mxmlNewElement</a></li> <li><a href="#mxmlNewElement">mxmlNewElement</a></li>
<li><a href="#mxmlNewInteger">mxmlNewInteger</a></li> <li><a href="#mxmlNewInteger">mxmlNewInteger</a></li>
<li><a href="#mxmlNewOpaque">mxmlNewOpaque</a></li> <li><a href="#mxmlNewOpaque">mxmlNewOpaque</a></li>
<li><a href="#mxmlNewOpaquef">mxmlNewOpaquef</a></li>
<li><a href="#mxmlNewReal">mxmlNewReal</a></li> <li><a href="#mxmlNewReal">mxmlNewReal</a></li>
<li><a href="#mxmlNewText">mxmlNewText</a></li> <li><a href="#mxmlNewText">mxmlNewText</a></li>
<li><a href="#mxmlNewTextf">mxmlNewTextf</a></li> <li><a href="#mxmlNewTextf">mxmlNewTextf</a></li>
@ -217,6 +227,7 @@ h3.title {
<li><a href="#mxmlSetErrorCallback">mxmlSetErrorCallback</a></li> <li><a href="#mxmlSetErrorCallback">mxmlSetErrorCallback</a></li>
<li><a href="#mxmlSetInteger">mxmlSetInteger</a></li> <li><a href="#mxmlSetInteger">mxmlSetInteger</a></li>
<li><a href="#mxmlSetOpaque">mxmlSetOpaque</a></li> <li><a href="#mxmlSetOpaque">mxmlSetOpaque</a></li>
<li><a href="#mxmlSetOpaquef">mxmlSetOpaquef</a></li>
<li><a href="#mxmlSetReal">mxmlSetReal</a></li> <li><a href="#mxmlSetReal">mxmlSetReal</a></li>
<li><a href="#mxmlSetText">mxmlSetText</a></li> <li><a href="#mxmlSetText">mxmlSetText</a></li>
<li><a href="#mxmlSetTextf">mxmlSetTextf</a></li> <li><a href="#mxmlSetTextf">mxmlSetTextf</a></li>
@ -261,19 +272,12 @@ void mxmlAdd (<br>
<dt>parent</dt> <dt>parent</dt>
<dd class="description">Parent node</dd> <dd class="description">Parent node</dd>
<dt>where</dt> <dt>where</dt>
<dd class="description">Where to add, MXML_ADD_BEFORE or MXML_ADD_AFTER</dd> <dd class="description">Where to add, <code>MXML_ADD_BEFORE</code> or <code>MXML_ADD_AFTER</code></dd>
<dt>child</dt> <dt>child</dt>
<dd class="description">Child node for where or MXML_ADD_TO_PARENT</dd> <dd class="description">Child node for where or <code>MXML_ADD_TO_PARENT</code></dd>
<dt>node</dt> <dt>node</dt>
<dd class="description">Node to add</dd> <dd class="description">Node to add</dd>
</dl> </dl>
<h4 class="discussion">Discussion</h4>
<p class="discussion">Adds the specified node to the parent. If the child argument is not
NULL, puts the new node before or after the specified child depending
on the value of the where argument. If the child argument is NULL,
puts the new node at the beginning of the child list (MXML_ADD_BEFORE)
or at the end of the child list (MXML_ADD_AFTER). The constant
MXML_ADD_TO_PARENT can be used to specify a NULL child pointer.</p>
<h3 class="function"><a id="mxmlDelete">mxmlDelete</a></h3> <h3 class="function"><a id="mxmlDelete">mxmlDelete</a></h3>
<p class="description">Delete a node and all of its children.</p> <p class="description">Delete a node and all of its children.</p>
<p class="code"> <p class="code">
@ -285,9 +289,6 @@ void mxmlDelete (<br>
<dt>node</dt> <dt>node</dt>
<dd class="description">Node to delete</dd> <dd class="description">Node to delete</dd>
</dl> </dl>
<h4 class="discussion">Discussion</h4>
<p class="discussion">If the specified node has a parent, this function first removes the
node from its parent using the mxmlRemove() function.</p>
<h3 class="function"><span class="info">&#160;Mini-XML 2.4&#160;</span><a id="mxmlElementDeleteAttr">mxmlElementDeleteAttr</a></h3> <h3 class="function"><span class="info">&#160;Mini-XML 2.4&#160;</span><a id="mxmlElementDeleteAttr">mxmlElementDeleteAttr</a></h3>
<p class="description">Delete an attribute.</p> <p class="description">Delete an attribute.</p>
<p class="code"> <p class="code">
@ -317,10 +318,7 @@ const char *mxmlElementGetAttr (<br>
<dd class="description">Name of attribute</dd> <dd class="description">Name of attribute</dd>
</dl> </dl>
<h4 class="returnvalue">Return Value</h4> <h4 class="returnvalue">Return Value</h4>
<p class="description">Attribute value or NULL</p> <p class="description">Attribute value or <code>NULL</code></p>
<h4 class="discussion">Discussion</h4>
<p class="discussion">This function returns NULL if the node is not an element or the
named attribute does not exist.</p>
<h3 class="function"><span class="info">&#160;Mini-XML 2.11&#160;</span><a id="mxmlElementGetAttrByIndex">mxmlElementGetAttrByIndex</a></h3> <h3 class="function"><span class="info">&#160;Mini-XML 2.11&#160;</span><a id="mxmlElementGetAttrByIndex">mxmlElementGetAttrByIndex</a></h3>
<p class="description">Get an element attribute by index.</p> <p class="description">Get an element attribute by index.</p>
<p class="code"> <p class="code">
@ -340,11 +338,6 @@ const char *mxmlElementGetAttrByIndex (<br>
</dl> </dl>
<h4 class="returnvalue">Return Value</h4> <h4 class="returnvalue">Return Value</h4>
<p class="description">Attribute value</p> <p class="description">Attribute value</p>
<h4 class="discussion">Discussion</h4>
<p class="discussion">The index (&quot;idx&quot;) is 0-based. <code>NULL</code> is returned if the specified index
is out of range.
</p>
<h3 class="function"><span class="info">&#160;Mini-XML 2.11&#160;</span><a id="mxmlElementGetAttrCount">mxmlElementGetAttrCount</a></h3> <h3 class="function"><span class="info">&#160;Mini-XML 2.11&#160;</span><a id="mxmlElementGetAttrCount">mxmlElementGetAttrCount</a></h3>
<p class="description">Get the number of element attributes.</p> <p class="description">Get the number of element attributes.</p>
<p class="code"> <p class="code">
@ -375,11 +368,6 @@ void mxmlElementSetAttr (<br>
<dt>value</dt> <dt>value</dt>
<dd class="description">Attribute value</dd> <dd class="description">Attribute value</dd>
</dl> </dl>
<h4 class="discussion">Discussion</h4>
<p class="discussion">If the named attribute already exists, the value of the attribute
is replaced by the new string value. The string value is copied
into the element node. This function does nothing if the node is
not an element.</p>
<h3 class="function"><span class="info">&#160;Mini-XML 2.3&#160;</span><a id="mxmlElementSetAttrf">mxmlElementSetAttrf</a></h3> <h3 class="function"><span class="info">&#160;Mini-XML 2.3&#160;</span><a id="mxmlElementSetAttrf">mxmlElementSetAttrf</a></h3>
<p class="description">Set an attribute with a formatted value.</p> <p class="description">Set an attribute with a formatted value.</p>
<p class="code"> <p class="code">
@ -400,13 +388,6 @@ void mxmlElementSetAttrf (<br>
<dt>...</dt> <dt>...</dt>
<dd class="description">Additional arguments as needed</dd> <dd class="description">Additional arguments as needed</dd>
</dl> </dl>
<h4 class="discussion">Discussion</h4>
<p class="discussion">If the named attribute already exists, the value of the attribute
is replaced by the new formatted string. The formatted string value is
copied into the element node. This function does nothing if the node
is not an element.
</p>
<h3 class="function"><a id="mxmlEntityAddCallback">mxmlEntityAddCallback</a></h3> <h3 class="function"><a id="mxmlEntityAddCallback">mxmlEntityAddCallback</a></h3>
<p class="description">Add a callback to convert entities to Unicode.</p> <p class="description">Add a callback to convert entities to Unicode.</p>
<p class="code"> <p class="code">
@ -432,9 +413,7 @@ const char *mxmlEntityGetName (<br>
<dd class="description">Character value</dd> <dd class="description">Character value</dd>
</dl> </dl>
<h4 class="returnvalue">Return Value</h4> <h4 class="returnvalue">Return Value</h4>
<p class="description">Entity name or NULL</p> <p class="description">Entity name or <code>NULL</code></p>
<h4 class="discussion">Discussion</h4>
<p class="discussion">If val does not need to be represented by a named entity, NULL is returned.</p>
<h3 class="function"><a id="mxmlEntityGetValue">mxmlEntityGetValue</a></h3> <h3 class="function"><a id="mxmlEntityGetValue">mxmlEntityGetValue</a></h3>
<p class="description">Get the character corresponding to a named entity.</p> <p class="description">Get the character corresponding to a named entity.</p>
<p class="code"> <p class="code">
@ -448,9 +427,6 @@ int mxmlEntityGetValue (<br>
</dl> </dl>
<h4 class="returnvalue">Return Value</h4> <h4 class="returnvalue">Return Value</h4>
<p class="description">Character value or -1 on error</p> <p class="description">Character value or -1 on error</p>
<h4 class="discussion">Discussion</h4>
<p class="discussion">The entity name can also be a numeric constant. -1 is returned if the
name is not known.</p>
<h3 class="function"><a id="mxmlEntityRemoveCallback">mxmlEntityRemoveCallback</a></h3> <h3 class="function"><a id="mxmlEntityRemoveCallback">mxmlEntityRemoveCallback</a></h3>
<p class="description">Remove a callback.</p> <p class="description">Remove a callback.</p>
<p class="code"> <p class="code">
@ -468,7 +444,7 @@ void mxmlEntityRemoveCallback (<br>
<a href="#mxml_node_t">mxml_node_t</a> *mxmlFindElement (<br> <a href="#mxml_node_t">mxml_node_t</a> *mxmlFindElement (<br>
&#160;&#160;&#160;&#160;<a href="#mxml_node_t">mxml_node_t</a> *node,<br> &#160;&#160;&#160;&#160;<a href="#mxml_node_t">mxml_node_t</a> *node,<br>
&#160;&#160;&#160;&#160;<a href="#mxml_node_t">mxml_node_t</a> *top,<br> &#160;&#160;&#160;&#160;<a href="#mxml_node_t">mxml_node_t</a> *top,<br>
&#160;&#160;&#160;&#160;const char *name,<br> &#160;&#160;&#160;&#160;const char *element,<br>
&#160;&#160;&#160;&#160;const char *attr,<br> &#160;&#160;&#160;&#160;const char *attr,<br>
&#160;&#160;&#160;&#160;const char *value,<br> &#160;&#160;&#160;&#160;const char *value,<br>
&#160;&#160;&#160;&#160;int descend<br> &#160;&#160;&#160;&#160;int descend<br>
@ -479,26 +455,17 @@ void mxmlEntityRemoveCallback (<br>
<dd class="description">Current node</dd> <dd class="description">Current node</dd>
<dt>top</dt> <dt>top</dt>
<dd class="description">Top node</dd> <dd class="description">Top node</dd>
<dt>name</dt> <dt>element</dt>
<dd class="description">Element name or NULL for any</dd> <dd class="description">Element name or <code>NULL</code> for any</dd>
<dt>attr</dt> <dt>attr</dt>
<dd class="description">Attribute name, or NULL for none</dd> <dd class="description">Attribute name, or <code>NULL</code> for none</dd>
<dt>value</dt> <dt>value</dt>
<dd class="description">Attribute value, or NULL for any</dd> <dd class="description">Attribute value, or <code>NULL</code> for any</dd>
<dt>descend</dt> <dt>descend</dt>
<dd class="description">Descend into tree - MXML_DESCEND, MXML_NO_DESCEND, or MXML_DESCEND_FIRST</dd> <dd class="description">Descend into tree - <code>MXML_DESCEND</code>, <code>MXML_NO_DESCEND</code>, or <code>MXML_DESCEND_FIRST</code></dd>
</dl> </dl>
<h4 class="returnvalue">Return Value</h4> <h4 class="returnvalue">Return Value</h4>
<p class="description">Element node or NULL</p> <p class="description">Element node or <code>NULL</code></p>
<h4 class="discussion">Discussion</h4>
<p class="discussion">The search is constrained by the name, attribute name, and value; any
NULL names or values are treated as wildcards, so different kinds of
searches can be implemented by looking for all elements of a given name
or all elements with a specific attribute. The descend argument determines
whether the search descends into child nodes; normally you will use
MXML_DESCEND_FIRST for the initial search and MXML_NO_DESCEND to find
additional direct descendents of the node. The top node argument
constrains the search to a particular node's children.</p>
<h3 class="function"><span class="info">&#160;Mini-XML 2.7&#160;</span><a id="mxmlFindPath">mxmlFindPath</a></h3> <h3 class="function"><span class="info">&#160;Mini-XML 2.7&#160;</span><a id="mxmlFindPath">mxmlFindPath</a></h3>
<p class="description">Find a node with the given path.</p> <p class="description">Find a node with the given path.</p>
<p class="code"> <p class="code">
@ -514,16 +481,7 @@ constrains the search to a particular node's children.</p>
<dd class="description">Path to element</dd> <dd class="description">Path to element</dd>
</dl> </dl>
<h4 class="returnvalue">Return Value</h4> <h4 class="returnvalue">Return Value</h4>
<p class="description">Found node or NULL</p> <p class="description">Found node or <code>NULL</code></p>
<h4 class="discussion">Discussion</h4>
<p class="discussion">The &quot;path&quot; is a slash-separated list of element names. The name &quot;*&quot; is
considered a wildcard for one or more levels of elements. For example,
&quot;foo/one/two&quot;, &quot;bar/two/one&quot;, &quot;*/one&quot;, and so forth.<br>
<br>
The first child node of the found node is returned if the given node has
children and the first child is a value node.
</p>
<h3 class="function"><span class="info">&#160;Mini-XML 2.7&#160;</span><a id="mxmlGetCDATA">mxmlGetCDATA</a></h3> <h3 class="function"><span class="info">&#160;Mini-XML 2.7&#160;</span><a id="mxmlGetCDATA">mxmlGetCDATA</a></h3>
<p class="description">Get the value for a CDATA node.</p> <p class="description">Get the value for a CDATA node.</p>
<p class="code"> <p class="code">
@ -536,11 +494,7 @@ const char *mxmlGetCDATA (<br>
<dd class="description">Node to get</dd> <dd class="description">Node to get</dd>
</dl> </dl>
<h4 class="returnvalue">Return Value</h4> <h4 class="returnvalue">Return Value</h4>
<p class="description">CDATA value or NULL</p> <p class="description">CDATA value or <code>NULL</code></p>
<h4 class="discussion">Discussion</h4>
<p class="discussion"><code>NULL</code> is returned if the node is not a CDATA element.
</p>
<h3 class="function"><span class="info">&#160;Mini-XML 2.7&#160;</span><a id="mxmlGetCustom">mxmlGetCustom</a></h3> <h3 class="function"><span class="info">&#160;Mini-XML 2.7&#160;</span><a id="mxmlGetCustom">mxmlGetCustom</a></h3>
<p class="description">Get the value for a custom node.</p> <p class="description">Get the value for a custom node.</p>
<p class="code"> <p class="code">
@ -553,12 +507,7 @@ const void *mxmlGetCustom (<br>
<dd class="description">Node to get</dd> <dd class="description">Node to get</dd>
</dl> </dl>
<h4 class="returnvalue">Return Value</h4> <h4 class="returnvalue">Return Value</h4>
<p class="description">Custom value or NULL</p> <p class="description">Custom value or <code>NULL</code></p>
<h4 class="discussion">Discussion</h4>
<p class="discussion"><code>NULL</code> is returned if the node (or its first child) is not a custom
value node.
</p>
<h3 class="function"><span class="info">&#160;Mini-XML 2.7&#160;</span><a id="mxmlGetElement">mxmlGetElement</a></h3> <h3 class="function"><span class="info">&#160;Mini-XML 2.7&#160;</span><a id="mxmlGetElement">mxmlGetElement</a></h3>
<p class="description">Get the name for an element node.</p> <p class="description">Get the name for an element node.</p>
<p class="code"> <p class="code">
@ -571,11 +520,7 @@ const char *mxmlGetElement (<br>
<dd class="description">Node to get</dd> <dd class="description">Node to get</dd>
</dl> </dl>
<h4 class="returnvalue">Return Value</h4> <h4 class="returnvalue">Return Value</h4>
<p class="description">Element name or NULL</p> <p class="description">Element name or <code>NULL</code></p>
<h4 class="discussion">Discussion</h4>
<p class="discussion"><code>NULL</code> is returned if the node is not an element node.
</p>
<h3 class="function"><span class="info">&#160;Mini-XML 2.7&#160;</span><a id="mxmlGetFirstChild">mxmlGetFirstChild</a></h3> <h3 class="function"><span class="info">&#160;Mini-XML 2.7&#160;</span><a id="mxmlGetFirstChild">mxmlGetFirstChild</a></h3>
<p class="description">Get the first child of an element node.</p> <p class="description">Get the first child of an element node.</p>
<p class="code"> <p class="code">
@ -588,12 +533,7 @@ const char *mxmlGetElement (<br>
<dd class="description">Node to get</dd> <dd class="description">Node to get</dd>
</dl> </dl>
<h4 class="returnvalue">Return Value</h4> <h4 class="returnvalue">Return Value</h4>
<p class="description">First child or NULL</p> <p class="description">First child or <code>NULL</code></p>
<h4 class="discussion">Discussion</h4>
<p class="discussion"><code>NULL</code> is returned if the node is not an element node or if the node
has no children.
</p>
<h3 class="function"><span class="info">&#160;Mini-XML 2.7&#160;</span><a id="mxmlGetInteger">mxmlGetInteger</a></h3> <h3 class="function"><span class="info">&#160;Mini-XML 2.7&#160;</span><a id="mxmlGetInteger">mxmlGetInteger</a></h3>
<p class="description">Get the integer value from the specified node or its <p class="description">Get the integer value from the specified node or its
first child.</p> first child.</p>
@ -608,10 +548,6 @@ int mxmlGetInteger (<br>
</dl> </dl>
<h4 class="returnvalue">Return Value</h4> <h4 class="returnvalue">Return Value</h4>
<p class="description">Integer value or 0</p> <p class="description">Integer value or 0</p>
<h4 class="discussion">Discussion</h4>
<p class="discussion">0 is returned if the node (or its first child) is not an integer value node.
</p>
<h3 class="function"><span class="info">&#160;Mini-XML 2.7&#160;</span><a id="mxmlGetLastChild">mxmlGetLastChild</a></h3> <h3 class="function"><span class="info">&#160;Mini-XML 2.7&#160;</span><a id="mxmlGetLastChild">mxmlGetLastChild</a></h3>
<p class="description">Get the last child of an element node.</p> <p class="description">Get the last child of an element node.</p>
<p class="code"> <p class="code">
@ -624,12 +560,7 @@ int mxmlGetInteger (<br>
<dd class="description">Node to get</dd> <dd class="description">Node to get</dd>
</dl> </dl>
<h4 class="returnvalue">Return Value</h4> <h4 class="returnvalue">Return Value</h4>
<p class="description">Last child or NULL</p> <p class="description">Last child or <code>NULL</code></p>
<h4 class="discussion">Discussion</h4>
<p class="discussion"><code>NULL</code> is returned if the node is not an element node or if the node
has no children.
</p>
<h3 class="function"><a id="mxmlGetNextSibling">mxmlGetNextSibling</a></h3> <h3 class="function"><a id="mxmlGetNextSibling">mxmlGetNextSibling</a></h3>
<p class="description">Return the node type...</p> <p class="description">Return the node type...</p>
<p class="code"> <p class="code">
@ -658,12 +589,7 @@ const char *mxmlGetOpaque (<br>
<dd class="description">Node to get</dd> <dd class="description">Node to get</dd>
</dl> </dl>
<h4 class="returnvalue">Return Value</h4> <h4 class="returnvalue">Return Value</h4>
<p class="description">Opaque string or NULL</p> <p class="description">Opaque string or <code>NULL</code></p>
<h4 class="discussion">Discussion</h4>
<p class="discussion"><code>NULL</code> is returned if the node (or its first child) is not an opaque
value node.
</p>
<h3 class="function"><span class="info">&#160;Mini-XML 2.7&#160;</span><a id="mxmlGetParent">mxmlGetParent</a></h3> <h3 class="function"><span class="info">&#160;Mini-XML 2.7&#160;</span><a id="mxmlGetParent">mxmlGetParent</a></h3>
<p class="description">Get the parent node.</p> <p class="description">Get the parent node.</p>
<p class="code"> <p class="code">
@ -676,11 +602,7 @@ value node.
<dd class="description">Node to get</dd> <dd class="description">Node to get</dd>
</dl> </dl>
<h4 class="returnvalue">Return Value</h4> <h4 class="returnvalue">Return Value</h4>
<p class="description">Parent node or NULL</p> <p class="description">Parent node or <code>NULL</code></p>
<h4 class="discussion">Discussion</h4>
<p class="discussion"><code>NULL</code> is returned for a root node.
</p>
<h3 class="function"><span class="info">&#160;Mini-XML 2.7&#160;</span><a id="mxmlGetPrevSibling">mxmlGetPrevSibling</a></h3> <h3 class="function"><span class="info">&#160;Mini-XML 2.7&#160;</span><a id="mxmlGetPrevSibling">mxmlGetPrevSibling</a></h3>
<p class="description">Get the previous node for the current parent.</p> <p class="description">Get the previous node for the current parent.</p>
<p class="code"> <p class="code">
@ -693,11 +615,7 @@ value node.
<dd class="description">Node to get</dd> <dd class="description">Node to get</dd>
</dl> </dl>
<h4 class="returnvalue">Return Value</h4> <h4 class="returnvalue">Return Value</h4>
<p class="description">Previous node or NULL</p> <p class="description">Previous node or <code>NULL</code></p>
<h4 class="discussion">Discussion</h4>
<p class="discussion"><code>NULL</code> is returned if this is the first child for the current parent.
</p>
<h3 class="function"><span class="info">&#160;Mini-XML 2.7&#160;</span><a id="mxmlGetReal">mxmlGetReal</a></h3> <h3 class="function"><span class="info">&#160;Mini-XML 2.7&#160;</span><a id="mxmlGetReal">mxmlGetReal</a></h3>
<p class="description">Get the real value for a node or its first child.</p> <p class="description">Get the real value for a node or its first child.</p>
<p class="code"> <p class="code">
@ -711,10 +629,6 @@ double mxmlGetReal (<br>
</dl> </dl>
<h4 class="returnvalue">Return Value</h4> <h4 class="returnvalue">Return Value</h4>
<p class="description">Real value or 0.0</p> <p class="description">Real value or 0.0</p>
<h4 class="discussion">Discussion</h4>
<p class="discussion">0.0 is returned if the node (or its first child) is not a real value node.
</p>
<h3 class="function"><span class="info">&#160;Mini-XML 2.7&#160;</span><a id="mxmlGetRefCount">mxmlGetRefCount</a></h3> <h3 class="function"><span class="info">&#160;Mini-XML 2.7&#160;</span><a id="mxmlGetRefCount">mxmlGetRefCount</a></h3>
<p class="description">Get the current reference (use) count for a node.</p> <p class="description">Get the current reference (use) count for a node.</p>
<p class="code"> <p class="code">
@ -728,12 +642,6 @@ int mxmlGetRefCount (<br>
</dl> </dl>
<h4 class="returnvalue">Return Value</h4> <h4 class="returnvalue">Return Value</h4>
<p class="description">Reference count</p> <p class="description">Reference count</p>
<h4 class="discussion">Discussion</h4>
<p class="discussion">The initial reference count of new nodes is 1. Use the <a href="#mxmlRetain"><code>mxmlRetain</code></a>
and <a href="#mxmlRelease"><code>mxmlRelease</code></a> functions to increment and decrement a node's
reference count.
.</p>
<h3 class="function"><span class="info">&#160;Mini-XML 2.7&#160;</span><a id="mxmlGetText">mxmlGetText</a></h3> <h3 class="function"><span class="info">&#160;Mini-XML 2.7&#160;</span><a id="mxmlGetText">mxmlGetText</a></h3>
<p class="description">Get the text value for a node or its first child.</p> <p class="description">Get the text value for a node or its first child.</p>
<p class="code"> <p class="code">
@ -749,12 +657,7 @@ const char *mxmlGetText (<br>
<dd class="description">1 if string is preceded by whitespace, 0 otherwise</dd> <dd class="description">1 if string is preceded by whitespace, 0 otherwise</dd>
</dl> </dl>
<h4 class="returnvalue">Return Value</h4> <h4 class="returnvalue">Return Value</h4>
<p class="description">Text string or NULL</p> <p class="description">Text string or <code>NULL</code></p>
<h4 class="discussion">Discussion</h4>
<p class="discussion"><code>NULL</code> is returned if the node (or its first child) is not a text node.
The &quot;whitespace&quot; argument can be NULL.
</p>
<h3 class="function"><span class="info">&#160;Mini-XML 2.7&#160;</span><a id="mxmlGetType">mxmlGetType</a></h3> <h3 class="function"><span class="info">&#160;Mini-XML 2.7&#160;</span><a id="mxmlGetType">mxmlGetType</a></h3>
<p class="description">Get the node type.</p> <p class="description">Get the node type.</p>
<p class="code"> <p class="code">
@ -768,10 +671,6 @@ The &quot;whitespace&quot; argument can be NULL.
</dl> </dl>
<h4 class="returnvalue">Return Value</h4> <h4 class="returnvalue">Return Value</h4>
<p class="description">Type of node</p> <p class="description">Type of node</p>
<h4 class="discussion">Discussion</h4>
<p class="discussion"><code>MXML_IGNORE</code> is returned if &quot;node&quot; is <code>NULL</code>.
</p>
<h3 class="function"><span class="info">&#160;Mini-XML 2.7&#160;</span><a id="mxmlGetUserData">mxmlGetUserData</a></h3> <h3 class="function"><span class="info">&#160;Mini-XML 2.7&#160;</span><a id="mxmlGetUserData">mxmlGetUserData</a></h3>
<p class="description">Get the user data pointer for a node.</p> <p class="description">Get the user data pointer for a node.</p>
<p class="code"> <p class="code">
@ -808,9 +707,7 @@ void mxmlIndexDelete (<br>
<dd class="description">Index to enumerate</dd> <dd class="description">Index to enumerate</dd>
</dl> </dl>
<h4 class="returnvalue">Return Value</h4> <h4 class="returnvalue">Return Value</h4>
<p class="description">Next node or NULL if there is none</p> <p class="description">Next node or <code>NULL</code> if there is none</p>
<h4 class="discussion">Discussion</h4>
<p class="discussion">Nodes are returned in the sorted order of the index.</p>
<h3 class="function"><a id="mxmlIndexFind">mxmlIndexFind</a></h3> <h3 class="function"><a id="mxmlIndexFind">mxmlIndexFind</a></h3>
<p class="description">Find the next matching node.</p> <p class="description">Find the next matching node.</p>
<p class="code"> <p class="code">
@ -829,12 +726,7 @@ void mxmlIndexDelete (<br>
<dd class="description">Attribute value, if any</dd> <dd class="description">Attribute value, if any</dd>
</dl> </dl>
<h4 class="returnvalue">Return Value</h4> <h4 class="returnvalue">Return Value</h4>
<p class="description">Node or NULL if none found</p> <p class="description">Node or <code>NULL</code> if none found</p>
<h4 class="discussion">Discussion</h4>
<p class="discussion">You should call mxmlIndexReset() prior to using this function for
the first time with a particular set of &quot;element&quot; and &quot;value&quot;
strings. Passing NULL for both &quot;element&quot; and &quot;value&quot; is equivalent
to calling mxmlIndexEnum().</p>
<h3 class="function"><span class="info">&#160;Mini-XML 2.7&#160;</span><a id="mxmlIndexGetCount">mxmlIndexGetCount</a></h3> <h3 class="function"><span class="info">&#160;Mini-XML 2.7&#160;</span><a id="mxmlIndexGetCount">mxmlIndexGetCount</a></h3>
<p class="description">Get the number of nodes in an index.</p> <p class="description">Get the number of nodes in an index.</p>
<p class="code"> <p class="code">
@ -861,18 +753,12 @@ int mxmlIndexGetCount (<br>
<dt>node</dt> <dt>node</dt>
<dd class="description">XML node tree</dd> <dd class="description">XML node tree</dd>
<dt>element</dt> <dt>element</dt>
<dd class="description">Element to index or NULL for all</dd> <dd class="description">Element to index or <code>NULL</code> for all</dd>
<dt>attr</dt> <dt>attr</dt>
<dd class="description">Attribute to index or NULL for none</dd> <dd class="description">Attribute to index or <code>NULL</code> for none</dd>
</dl> </dl>
<h4 class="returnvalue">Return Value</h4> <h4 class="returnvalue">Return Value</h4>
<p class="description">New index</p> <p class="description">New index</p>
<h4 class="discussion">Discussion</h4>
<p class="discussion">The index will contain all nodes that contain the named element and/or
attribute. If both &quot;element&quot; and &quot;attr&quot; are NULL, then the index will
contain a sorted list of the elements in the node tree. Nodes are
sorted by element name and optionally by attribute value if the &quot;attr&quot;
argument is not NULL.</p>
<h3 class="function"><a id="mxmlIndexReset">mxmlIndexReset</a></h3> <h3 class="function"><a id="mxmlIndexReset">mxmlIndexReset</a></h3>
<p class="description">Reset the enumeration/find pointer in the index and <p class="description">Reset the enumeration/find pointer in the index and
return the first node in the index.</p> return the first node in the index.</p>
@ -886,10 +772,7 @@ return the first node in the index.</p>
<dd class="description">Index to reset</dd> <dd class="description">Index to reset</dd>
</dl> </dl>
<h4 class="returnvalue">Return Value</h4> <h4 class="returnvalue">Return Value</h4>
<p class="description">First node or NULL if there is none</p> <p class="description">First node or <code>NULL</code> if there is none</p>
<h4 class="discussion">Discussion</h4>
<p class="discussion">This function should be called prior to using mxmlIndexEnum() or
mxmlIndexFind() for the first time.</p>
<h3 class="function"><a id="mxmlLoadFd">mxmlLoadFd</a></h3> <h3 class="function"><a id="mxmlLoadFd">mxmlLoadFd</a></h3>
<p class="description">Load a file descriptor into an XML node tree.</p> <p class="description">Load a file descriptor into an XML node tree.</p>
<p class="code"> <p class="code">
@ -905,21 +788,10 @@ mxmlIndexFind() for the first time.</p>
<dt>fd</dt> <dt>fd</dt>
<dd class="description">File descriptor to read from</dd> <dd class="description">File descriptor to read from</dd>
<dt>cb</dt> <dt>cb</dt>
<dd class="description">Callback function or MXML_NO_CALLBACK</dd> <dd class="description">Callback function or constant</dd>
</dl> </dl>
<h4 class="returnvalue">Return Value</h4> <h4 class="returnvalue">Return Value</h4>
<p class="description">First node or NULL if the file could not be read.</p> <p class="description">First node or <code>NULL</code> if the file could not be read.</p>
<h4 class="discussion">Discussion</h4>
<p class="discussion">The nodes in the specified file are added to the specified top node.
If no top node is provided, the XML file MUST be well-formed with a
single parent node like &lt;?xml&gt; for the entire file. The callback
function returns the value type that should be used for child nodes.
If MXML_NO_CALLBACK is specified then all child nodes will be either
MXML_ELEMENT or MXML_TEXT nodes.<br>
<br>
The constants MXML_INTEGER_CALLBACK, MXML_OPAQUE_CALLBACK,
MXML_REAL_CALLBACK, and MXML_TEXT_CALLBACK are defined for loading
child nodes of the specified type.</p>
<h3 class="function"><a id="mxmlLoadFile">mxmlLoadFile</a></h3> <h3 class="function"><a id="mxmlLoadFile">mxmlLoadFile</a></h3>
<p class="description">Load a file into an XML node tree.</p> <p class="description">Load a file into an XML node tree.</p>
<p class="code"> <p class="code">
@ -935,21 +807,10 @@ child nodes of the specified type.</p>
<dt>fp</dt> <dt>fp</dt>
<dd class="description">File to read from</dd> <dd class="description">File to read from</dd>
<dt>cb</dt> <dt>cb</dt>
<dd class="description">Callback function or MXML_NO_CALLBACK</dd> <dd class="description">Callback function or constant</dd>
</dl> </dl>
<h4 class="returnvalue">Return Value</h4> <h4 class="returnvalue">Return Value</h4>
<p class="description">First node or NULL if the file could not be read.</p> <p class="description">First node or <code>NULL</code> if the file could not be read.</p>
<h4 class="discussion">Discussion</h4>
<p class="discussion">The nodes in the specified file are added to the specified top node.
If no top node is provided, the XML file MUST be well-formed with a
single parent node like &lt;?xml&gt; for the entire file. The callback
function returns the value type that should be used for child nodes.
If MXML_NO_CALLBACK is specified then all child nodes will be either
MXML_ELEMENT or MXML_TEXT nodes.<br>
<br>
The constants MXML_INTEGER_CALLBACK, MXML_OPAQUE_CALLBACK,
MXML_REAL_CALLBACK, and MXML_TEXT_CALLBACK are defined for loading
child nodes of the specified type.</p>
<h3 class="function"><a id="mxmlLoadString">mxmlLoadString</a></h3> <h3 class="function"><a id="mxmlLoadString">mxmlLoadString</a></h3>
<p class="description">Load a string into an XML node tree.</p> <p class="description">Load a string into an XML node tree.</p>
<p class="code"> <p class="code">
@ -965,21 +826,10 @@ child nodes of the specified type.</p>
<dt>s</dt> <dt>s</dt>
<dd class="description">String to load</dd> <dd class="description">String to load</dd>
<dt>cb</dt> <dt>cb</dt>
<dd class="description">Callback function or MXML_NO_CALLBACK</dd> <dd class="description">Callback function or constant</dd>
</dl> </dl>
<h4 class="returnvalue">Return Value</h4> <h4 class="returnvalue">Return Value</h4>
<p class="description">First node or NULL if the string has errors.</p> <p class="description">First node or <code>NULL</code> if the string has errors.</p>
<h4 class="discussion">Discussion</h4>
<p class="discussion">The nodes in the specified string are added to the specified top node.
If no top node is provided, the XML string MUST be well-formed with a
single parent node like &lt;?xml&gt; for the entire string. The callback
function returns the value type that should be used for child nodes.
If MXML_NO_CALLBACK is specified then all child nodes will be either
MXML_ELEMENT or MXML_TEXT nodes.<br>
<br>
The constants MXML_INTEGER_CALLBACK, MXML_OPAQUE_CALLBACK,
MXML_REAL_CALLBACK, and MXML_TEXT_CALLBACK are defined for loading
child nodes of the specified type.</p>
<h3 class="function"><span class="info">&#160;Mini-XML 2.3&#160;</span><a id="mxmlNewCDATA">mxmlNewCDATA</a></h3> <h3 class="function"><span class="info">&#160;Mini-XML 2.3&#160;</span><a id="mxmlNewCDATA">mxmlNewCDATA</a></h3>
<p class="description">Create a new CDATA node.</p> <p class="description">Create a new CDATA node.</p>
<p class="code"> <p class="code">
@ -990,19 +840,12 @@ child nodes of the specified type.</p>
<h4 class="parameters">Parameters</h4> <h4 class="parameters">Parameters</h4>
<dl> <dl>
<dt>parent</dt> <dt>parent</dt>
<dd class="description">Parent node or MXML_NO_PARENT</dd> <dd class="description">Parent node or <code>MXML_NO_PARENT</code></dd>
<dt>data</dt> <dt>data</dt>
<dd class="description">Data string</dd> <dd class="description">Data string</dd>
</dl> </dl>
<h4 class="returnvalue">Return Value</h4> <h4 class="returnvalue">Return Value</h4>
<p class="description">New node</p> <p class="description">New node</p>
<h4 class="discussion">Discussion</h4>
<p class="discussion">The new CDATA node is added to the end of the specified parent's child
list. The constant MXML_NO_PARENT can be used to specify that the new
CDATA node has no parent. The data string must be nul-terminated and
is copied into the new node. CDATA nodes use the MXML_ELEMENT type.
</p>
<h3 class="function"><span class="info">&#160;Mini-XML 2.1&#160;</span><a id="mxmlNewCustom">mxmlNewCustom</a></h3> <h3 class="function"><span class="info">&#160;Mini-XML 2.1&#160;</span><a id="mxmlNewCustom">mxmlNewCustom</a></h3>
<p class="description">Create a new custom data node.</p> <p class="description">Create a new custom data node.</p>
<p class="code"> <p class="code">
@ -1014,7 +857,7 @@ is copied into the new node. CDATA nodes use the MXML_ELEMENT type.
<h4 class="parameters">Parameters</h4> <h4 class="parameters">Parameters</h4>
<dl> <dl>
<dt>parent</dt> <dt>parent</dt>
<dd class="description">Parent node or MXML_NO_PARENT</dd> <dd class="description">Parent node or <code>MXML_NO_PARENT</code></dd>
<dt>data</dt> <dt>data</dt>
<dd class="description">Pointer to data</dd> <dd class="description">Pointer to data</dd>
<dt>destroy</dt> <dt>destroy</dt>
@ -1022,13 +865,6 @@ is copied into the new node. CDATA nodes use the MXML_ELEMENT type.
</dl> </dl>
<h4 class="returnvalue">Return Value</h4> <h4 class="returnvalue">Return Value</h4>
<p class="description">New node</p> <p class="description">New node</p>
<h4 class="discussion">Discussion</h4>
<p class="discussion">The new custom node is added to the end of the specified parent's child
list. The constant MXML_NO_PARENT can be used to specify that the new
element node has no parent. NULL can be passed when the data in the
node is not dynamically allocated or is separately managed.
</p>
<h3 class="function"><a id="mxmlNewElement">mxmlNewElement</a></h3> <h3 class="function"><a id="mxmlNewElement">mxmlNewElement</a></h3>
<p class="description">Create a new element node.</p> <p class="description">Create a new element node.</p>
<p class="code"> <p class="code">
@ -1039,16 +875,12 @@ node is not dynamically allocated or is separately managed.
<h4 class="parameters">Parameters</h4> <h4 class="parameters">Parameters</h4>
<dl> <dl>
<dt>parent</dt> <dt>parent</dt>
<dd class="description">Parent node or MXML_NO_PARENT</dd> <dd class="description">Parent node or <code>MXML_NO_PARENT</code></dd>
<dt>name</dt> <dt>name</dt>
<dd class="description">Name of element</dd> <dd class="description">Name of element</dd>
</dl> </dl>
<h4 class="returnvalue">Return Value</h4> <h4 class="returnvalue">Return Value</h4>
<p class="description">New node</p> <p class="description">New node</p>
<h4 class="discussion">Discussion</h4>
<p class="discussion">The new element node is added to the end of the specified parent's child
list. The constant MXML_NO_PARENT can be used to specify that the new
element node has no parent.</p>
<h3 class="function"><a id="mxmlNewInteger">mxmlNewInteger</a></h3> <h3 class="function"><a id="mxmlNewInteger">mxmlNewInteger</a></h3>
<p class="description">Create a new integer node.</p> <p class="description">Create a new integer node.</p>
<p class="code"> <p class="code">
@ -1059,16 +891,12 @@ element node has no parent.</p>
<h4 class="parameters">Parameters</h4> <h4 class="parameters">Parameters</h4>
<dl> <dl>
<dt>parent</dt> <dt>parent</dt>
<dd class="description">Parent node or MXML_NO_PARENT</dd> <dd class="description">Parent node or <code>MXML_NO_PARENT</code></dd>
<dt>integer</dt> <dt>integer</dt>
<dd class="description">Integer value</dd> <dd class="description">Integer value</dd>
</dl> </dl>
<h4 class="returnvalue">Return Value</h4> <h4 class="returnvalue">Return Value</h4>
<p class="description">New node</p> <p class="description">New node</p>
<h4 class="discussion">Discussion</h4>
<p class="discussion">The new integer node is added to the end of the specified parent's child
list. The constant MXML_NO_PARENT can be used to specify that the new
integer node has no parent.</p>
<h3 class="function"><a id="mxmlNewOpaque">mxmlNewOpaque</a></h3> <h3 class="function"><a id="mxmlNewOpaque">mxmlNewOpaque</a></h3>
<p class="description">Create a new opaque string.</p> <p class="description">Create a new opaque string.</p>
<p class="code"> <p class="code">
@ -1079,17 +907,31 @@ integer node has no parent.</p>
<h4 class="parameters">Parameters</h4> <h4 class="parameters">Parameters</h4>
<dl> <dl>
<dt>parent</dt> <dt>parent</dt>
<dd class="description">Parent node or MXML_NO_PARENT</dd> <dd class="description">Parent node or <code>MXML_NO_PARENT</code></dd>
<dt>opaque</dt> <dt>opaque</dt>
<dd class="description">Opaque string</dd> <dd class="description">Opaque string</dd>
</dl> </dl>
<h4 class="returnvalue">Return Value</h4> <h4 class="returnvalue">Return Value</h4>
<p class="description">New node</p> <p class="description">New node</p>
<h4 class="discussion">Discussion</h4> <h3 class="function"><a id="mxmlNewOpaquef">mxmlNewOpaquef</a></h3>
<p class="discussion">The new opaque node is added to the end of the specified parent's child <p class="description">Create a new formatted opaque string node.</p>
list. The constant MXML_NO_PARENT can be used to specify that the new <p class="code">
opaque node has no parent. The opaque string must be nul-terminated and <a href="#mxml_node_t">mxml_node_t</a> *mxmlNewOpaquef (<br>
is copied into the new node.</p> &#160;&#160;&#160;&#160;<a href="#mxml_node_t">mxml_node_t</a> *parent,<br>
&#160;&#160;&#160;&#160;const char *format,<br>
&#160;&#160;&#160;&#160;...<br>
);</p>
<h4 class="parameters">Parameters</h4>
<dl>
<dt>parent</dt>
<dd class="description">Parent node or <code>MXML_NO_PARENT</code></dd>
<dt>format</dt>
<dd class="description">Printf-style format string</dd>
<dt>...</dt>
<dd class="description">Additional args as needed</dd>
</dl>
<h4 class="returnvalue">Return Value</h4>
<p class="description">New node</p>
<h3 class="function"><a id="mxmlNewReal">mxmlNewReal</a></h3> <h3 class="function"><a id="mxmlNewReal">mxmlNewReal</a></h3>
<p class="description">Create a new real number node.</p> <p class="description">Create a new real number node.</p>
<p class="code"> <p class="code">
@ -1100,16 +942,12 @@ is copied into the new node.</p>
<h4 class="parameters">Parameters</h4> <h4 class="parameters">Parameters</h4>
<dl> <dl>
<dt>parent</dt> <dt>parent</dt>
<dd class="description">Parent node or MXML_NO_PARENT</dd> <dd class="description">Parent node or <code>MXML_NO_PARENT</code></dd>
<dt>real</dt> <dt>real</dt>
<dd class="description">Real number value</dd> <dd class="description">Real number value</dd>
</dl> </dl>
<h4 class="returnvalue">Return Value</h4> <h4 class="returnvalue">Return Value</h4>
<p class="description">New node</p> <p class="description">New node</p>
<h4 class="discussion">Discussion</h4>
<p class="discussion">The new real number node is added to the end of the specified parent's
child list. The constant MXML_NO_PARENT can be used to specify that
the new real number node has no parent.</p>
<h3 class="function"><a id="mxmlNewText">mxmlNewText</a></h3> <h3 class="function"><a id="mxmlNewText">mxmlNewText</a></h3>
<p class="description">Create a new text fragment node.</p> <p class="description">Create a new text fragment node.</p>
<p class="code"> <p class="code">
@ -1121,7 +959,7 @@ the new real number node has no parent.</p>
<h4 class="parameters">Parameters</h4> <h4 class="parameters">Parameters</h4>
<dl> <dl>
<dt>parent</dt> <dt>parent</dt>
<dd class="description">Parent node or MXML_NO_PARENT</dd> <dd class="description">Parent node or <code>MXML_NO_PARENT</code></dd>
<dt>whitespace</dt> <dt>whitespace</dt>
<dd class="description">1 = leading whitespace, 0 = no whitespace</dd> <dd class="description">1 = leading whitespace, 0 = no whitespace</dd>
<dt>string</dt> <dt>string</dt>
@ -1129,12 +967,6 @@ the new real number node has no parent.</p>
</dl> </dl>
<h4 class="returnvalue">Return Value</h4> <h4 class="returnvalue">Return Value</h4>
<p class="description">New node</p> <p class="description">New node</p>
<h4 class="discussion">Discussion</h4>
<p class="discussion">The new text node is added to the end of the specified parent's child
list. The constant MXML_NO_PARENT can be used to specify that the new
text node has no parent. The whitespace parameter is used to specify
whether leading whitespace is present before the node. The text
string must be nul-terminated and is copied into the new node.</p>
<h3 class="function"><a id="mxmlNewTextf">mxmlNewTextf</a></h3> <h3 class="function"><a id="mxmlNewTextf">mxmlNewTextf</a></h3>
<p class="description">Create a new formatted text fragment node.</p> <p class="description">Create a new formatted text fragment node.</p>
<p class="code"> <p class="code">
@ -1147,22 +979,16 @@ string must be nul-terminated and is copied into the new node.</p>
<h4 class="parameters">Parameters</h4> <h4 class="parameters">Parameters</h4>
<dl> <dl>
<dt>parent</dt> <dt>parent</dt>
<dd class="description">Parent node or MXML_NO_PARENT</dd> <dd class="description">Parent node or <code>MXML_NO_PARENT</code></dd>
<dt>whitespace</dt> <dt>whitespace</dt>
<dd class="description">1 = leading whitespace, 0 = no whitespace</dd> <dd class="description">1 = leading whitespace, 0 = no whitespace</dd>
<dt>format</dt> <dt>format</dt>
<dd class="description">Printf-style frmat string</dd> <dd class="description">Printf-style format string</dd>
<dt>...</dt> <dt>...</dt>
<dd class="description">Additional args as needed</dd> <dd class="description">Additional args as needed</dd>
</dl> </dl>
<h4 class="returnvalue">Return Value</h4> <h4 class="returnvalue">Return Value</h4>
<p class="description">New node</p> <p class="description">New node</p>
<h4 class="discussion">Discussion</h4>
<p class="discussion">The new text node is added to the end of the specified parent's child
list. The constant MXML_NO_PARENT can be used to specify that the new
text node has no parent. The whitespace parameter is used to specify
whether leading whitespace is present before the node. The format
string must be nul-terminated and is formatted into the new node.</p>
<h3 class="function"><span class="info">&#160;Mini-XML 2.3&#160;</span><a id="mxmlNewXML">mxmlNewXML</a></h3> <h3 class="function"><span class="info">&#160;Mini-XML 2.3&#160;</span><a id="mxmlNewXML">mxmlNewXML</a></h3>
<p class="description">Create a new XML document tree.</p> <p class="description">Create a new XML document tree.</p>
<p class="code"> <p class="code">
@ -1176,11 +1002,6 @@ string must be nul-terminated and is formatted into the new node.</p>
</dl> </dl>
<h4 class="returnvalue">Return Value</h4> <h4 class="returnvalue">Return Value</h4>
<p class="description">New ?xml node</p> <p class="description">New ?xml node</p>
<h4 class="discussion">Discussion</h4>
<p class="discussion">The &quot;version&quot; argument specifies the version number to put in the
?xml element node. If NULL, version 1.0 is assumed.
</p>
<h3 class="function"><span class="info">&#160;Mini-XML 2.3&#160;</span><a id="mxmlRelease">mxmlRelease</a></h3> <h3 class="function"><span class="info">&#160;Mini-XML 2.3&#160;</span><a id="mxmlRelease">mxmlRelease</a></h3>
<p class="description">Release a node.</p> <p class="description">Release a node.</p>
<p class="code"> <p class="code">
@ -1194,11 +1015,6 @@ int mxmlRelease (<br>
</dl> </dl>
<h4 class="returnvalue">Return Value</h4> <h4 class="returnvalue">Return Value</h4>
<p class="description">New reference count</p> <p class="description">New reference count</p>
<h4 class="discussion">Discussion</h4>
<p class="discussion">When the reference count reaches zero, the node (and any children)
is deleted via mxmlDelete().
</p>
<h3 class="function"><a id="mxmlRemove">mxmlRemove</a></h3> <h3 class="function"><a id="mxmlRemove">mxmlRemove</a></h3>
<p class="description">Remove a node from its parent.</p> <p class="description">Remove a node from its parent.</p>
<p class="code"> <p class="code">
@ -1210,9 +1026,6 @@ void mxmlRemove (<br>
<dt>node</dt> <dt>node</dt>
<dd class="description">Node to remove</dd> <dd class="description">Node to remove</dd>
</dl> </dl>
<h4 class="discussion">Discussion</h4>
<p class="discussion">Does not free memory used by the node - use mxmlDelete() for that.
This function does nothing if the node has no parent.</p>
<h3 class="function"><span class="info">&#160;Mini-XML 2.3&#160;</span><a id="mxmlRetain">mxmlRetain</a></h3> <h3 class="function"><span class="info">&#160;Mini-XML 2.3&#160;</span><a id="mxmlRetain">mxmlRetain</a></h3>
<p class="description">Retain a node.</p> <p class="description">Retain a node.</p>
<p class="code"> <p class="code">
@ -1244,31 +1057,14 @@ using a SAX callback.</p>
<dt>fd</dt> <dt>fd</dt>
<dd class="description">File descriptor to read from</dd> <dd class="description">File descriptor to read from</dd>
<dt>cb</dt> <dt>cb</dt>
<dd class="description">Callback function or MXML_NO_CALLBACK</dd> <dd class="description">Callback function or constant</dd>
<dt>sax_cb</dt> <dt>sax_cb</dt>
<dd class="description">SAX callback or MXML_NO_CALLBACK</dd> <dd class="description">SAX callback or <code>MXML_NO_CALLBACK</code></dd>
<dt>sax_data</dt> <dt>sax_data</dt>
<dd class="description">SAX user data</dd> <dd class="description">SAX user data</dd>
</dl> </dl>
<h4 class="returnvalue">Return Value</h4> <h4 class="returnvalue">Return Value</h4>
<p class="description">First node or NULL if the file could not be read.</p> <p class="description">First node or <code>NULL</code> if the file could not be read.</p>
<h4 class="discussion">Discussion</h4>
<p class="discussion">The nodes in the specified file are added to the specified top node.
If no top node is provided, the XML file MUST be well-formed with a
single parent node like &lt;?xml&gt; for the entire file. The callback
function returns the value type that should be used for child nodes.
If MXML_NO_CALLBACK is specified then all child nodes will be either
MXML_ELEMENT or MXML_TEXT nodes.<br>
<br>
The constants MXML_INTEGER_CALLBACK, MXML_OPAQUE_CALLBACK,
MXML_REAL_CALLBACK, and MXML_TEXT_CALLBACK are defined for loading
child nodes of the specified type.<br>
<br>
The SAX callback must call mxmlRetain() for any nodes that need to
be kept for later use. Otherwise, nodes are deleted when the parent
node is closed or after each data, comment, CDATA, or directive node.
</p>
<h3 class="function"><span class="info">&#160;Mini-XML 2.3&#160;</span><a id="mxmlSAXLoadFile">mxmlSAXLoadFile</a></h3> <h3 class="function"><span class="info">&#160;Mini-XML 2.3&#160;</span><a id="mxmlSAXLoadFile">mxmlSAXLoadFile</a></h3>
<p class="description">Load a file into an XML node tree <p class="description">Load a file into an XML node tree
using a SAX callback.</p> using a SAX callback.</p>
@ -1287,31 +1083,14 @@ using a SAX callback.</p>
<dt>fp</dt> <dt>fp</dt>
<dd class="description">File to read from</dd> <dd class="description">File to read from</dd>
<dt>cb</dt> <dt>cb</dt>
<dd class="description">Callback function or MXML_NO_CALLBACK</dd> <dd class="description">Callback function or constant</dd>
<dt>sax_cb</dt> <dt>sax_cb</dt>
<dd class="description">SAX callback or MXML_NO_CALLBACK</dd> <dd class="description">SAX callback or <code>MXML_NO_CALLBACK</code></dd>
<dt>sax_data</dt> <dt>sax_data</dt>
<dd class="description">SAX user data</dd> <dd class="description">SAX user data</dd>
</dl> </dl>
<h4 class="returnvalue">Return Value</h4> <h4 class="returnvalue">Return Value</h4>
<p class="description">First node or NULL if the file could not be read.</p> <p class="description">First node or <code>NULL</code> if the file could not be read.</p>
<h4 class="discussion">Discussion</h4>
<p class="discussion">The nodes in the specified file are added to the specified top node.
If no top node is provided, the XML file MUST be well-formed with a
single parent node like &lt;?xml&gt; for the entire file. The callback
function returns the value type that should be used for child nodes.
If MXML_NO_CALLBACK is specified then all child nodes will be either
MXML_ELEMENT or MXML_TEXT nodes.<br>
<br>
The constants MXML_INTEGER_CALLBACK, MXML_OPAQUE_CALLBACK,
MXML_REAL_CALLBACK, and MXML_TEXT_CALLBACK are defined for loading
child nodes of the specified type.<br>
<br>
The SAX callback must call mxmlRetain() for any nodes that need to
be kept for later use. Otherwise, nodes are deleted when the parent
node is closed or after each data, comment, CDATA, or directive node.
</p>
<h3 class="function"><span class="info">&#160;Mini-XML 2.3&#160;</span><a id="mxmlSAXLoadString">mxmlSAXLoadString</a></h3> <h3 class="function"><span class="info">&#160;Mini-XML 2.3&#160;</span><a id="mxmlSAXLoadString">mxmlSAXLoadString</a></h3>
<p class="description">Load a string into an XML node tree <p class="description">Load a string into an XML node tree
using a SAX callback.</p> using a SAX callback.</p>
@ -1330,31 +1109,14 @@ using a SAX callback.</p>
<dt>s</dt> <dt>s</dt>
<dd class="description">String to load</dd> <dd class="description">String to load</dd>
<dt>cb</dt> <dt>cb</dt>
<dd class="description">Callback function or MXML_NO_CALLBACK</dd> <dd class="description">Callback function or constant</dd>
<dt>sax_cb</dt> <dt>sax_cb</dt>
<dd class="description">SAX callback or MXML_NO_CALLBACK</dd> <dd class="description">SAX callback or <code>MXML_NO_CALLBACK</code></dd>
<dt>sax_data</dt> <dt>sax_data</dt>
<dd class="description">SAX user data</dd> <dd class="description">SAX user data</dd>
</dl> </dl>
<h4 class="returnvalue">Return Value</h4> <h4 class="returnvalue">Return Value</h4>
<p class="description">First node or NULL if the string has errors.</p> <p class="description">First node or <code>NULL</code> if the string has errors.</p>
<h4 class="discussion">Discussion</h4>
<p class="discussion">The nodes in the specified string are added to the specified top node.
If no top node is provided, the XML string MUST be well-formed with a
single parent node like &lt;?xml&gt; for the entire string. The callback
function returns the value type that should be used for child nodes.
If MXML_NO_CALLBACK is specified then all child nodes will be either
MXML_ELEMENT or MXML_TEXT nodes.<br>
<br>
The constants MXML_INTEGER_CALLBACK, MXML_OPAQUE_CALLBACK,
MXML_REAL_CALLBACK, and MXML_TEXT_CALLBACK are defined for loading
child nodes of the specified type.<br>
<br>
The SAX callback must call mxmlRetain() for any nodes that need to
be kept for later use. Otherwise, nodes are deleted when the parent
node is closed or after each data, comment, CDATA, or directive node.
</p>
<h3 class="function"><a id="mxmlSaveAllocString">mxmlSaveAllocString</a></h3> <h3 class="function"><a id="mxmlSaveAllocString">mxmlSaveAllocString</a></h3>
<p class="description">Save an XML tree to an allocated string.</p> <p class="description">Save an XML tree to an allocated string.</p>
<p class="code"> <p class="code">
@ -1367,22 +1129,10 @@ char *mxmlSaveAllocString (<br>
<dt>node</dt> <dt>node</dt>
<dd class="description">Node to write</dd> <dd class="description">Node to write</dd>
<dt>cb</dt> <dt>cb</dt>
<dd class="description">Whitespace callback or MXML_NO_CALLBACK</dd> <dd class="description">Whitespace callback or <code>MXML_NO_CALLBACK</code></dd>
</dl> </dl>
<h4 class="returnvalue">Return Value</h4> <h4 class="returnvalue">Return Value</h4>
<p class="description">Allocated string or NULL</p> <p class="description">Allocated string or <code>NULL</code></p>
<h4 class="discussion">Discussion</h4>
<p class="discussion">This function returns a pointer to a string containing the textual
representation of the XML node tree. The string should be freed
using the free() function when you are done with it. NULL is returned
if the node would produce an empty string or if the string cannot be
allocated.<br>
<br>
The callback argument specifies a function that returns a whitespace
string or NULL before and after each element. If MXML_NO_CALLBACK
is specified, whitespace will only be added before MXML_TEXT nodes
with leading whitespace and before attribute names inside opening
element tags.</p>
<h3 class="function"><a id="mxmlSaveFd">mxmlSaveFd</a></h3> <h3 class="function"><a id="mxmlSaveFd">mxmlSaveFd</a></h3>
<p class="description">Save an XML tree to a file descriptor.</p> <p class="description">Save an XML tree to a file descriptor.</p>
<p class="code"> <p class="code">
@ -1398,16 +1148,10 @@ int mxmlSaveFd (<br>
<dt>fd</dt> <dt>fd</dt>
<dd class="description">File descriptor to write to</dd> <dd class="description">File descriptor to write to</dd>
<dt>cb</dt> <dt>cb</dt>
<dd class="description">Whitespace callback or MXML_NO_CALLBACK</dd> <dd class="description">Whitespace callback or <code>MXML_NO_CALLBACK</code></dd>
</dl> </dl>
<h4 class="returnvalue">Return Value</h4> <h4 class="returnvalue">Return Value</h4>
<p class="description">0 on success, -1 on error.</p> <p class="description">0 on success, -1 on error.</p>
<h4 class="discussion">Discussion</h4>
<p class="discussion">The callback argument specifies a function that returns a whitespace
string or NULL before and after each element. If MXML_NO_CALLBACK
is specified, whitespace will only be added before MXML_TEXT nodes
with leading whitespace and before attribute names inside opening
element tags.</p>
<h3 class="function"><a id="mxmlSaveFile">mxmlSaveFile</a></h3> <h3 class="function"><a id="mxmlSaveFile">mxmlSaveFile</a></h3>
<p class="description">Save an XML tree to a file.</p> <p class="description">Save an XML tree to a file.</p>
<p class="code"> <p class="code">
@ -1423,16 +1167,10 @@ int mxmlSaveFile (<br>
<dt>fp</dt> <dt>fp</dt>
<dd class="description">File to write to</dd> <dd class="description">File to write to</dd>
<dt>cb</dt> <dt>cb</dt>
<dd class="description">Whitespace callback or MXML_NO_CALLBACK</dd> <dd class="description">Whitespace callback or <code>MXML_NO_CALLBACK</code></dd>
</dl> </dl>
<h4 class="returnvalue">Return Value</h4> <h4 class="returnvalue">Return Value</h4>
<p class="description">0 on success, -1 on error.</p> <p class="description">0 on success, -1 on error.</p>
<h4 class="discussion">Discussion</h4>
<p class="discussion">The callback argument specifies a function that returns a whitespace
string or NULL before and after each element. If MXML_NO_CALLBACK
is specified, whitespace will only be added before MXML_TEXT nodes
with leading whitespace and before attribute names inside opening
element tags.</p>
<h3 class="function"><a id="mxmlSaveString">mxmlSaveString</a></h3> <h3 class="function"><a id="mxmlSaveString">mxmlSaveString</a></h3>
<p class="description">Save an XML node tree to a string.</p> <p class="description">Save an XML node tree to a string.</p>
<p class="code"> <p class="code">
@ -1451,20 +1189,10 @@ int mxmlSaveString (<br>
<dt>bufsize</dt> <dt>bufsize</dt>
<dd class="description">Size of string buffer</dd> <dd class="description">Size of string buffer</dd>
<dt>cb</dt> <dt>cb</dt>
<dd class="description">Whitespace callback or MXML_NO_CALLBACK</dd> <dd class="description">Whitespace callback or <code>MXML_NO_CALLBACK</code></dd>
</dl> </dl>
<h4 class="returnvalue">Return Value</h4> <h4 class="returnvalue">Return Value</h4>
<p class="description">Size of string</p> <p class="description">Size of string</p>
<h4 class="discussion">Discussion</h4>
<p class="discussion">This function returns the total number of bytes that would be
required for the string but only copies (bufsize - 1) characters
into the specified buffer.<br>
<br>
The callback argument specifies a function that returns a whitespace
string or NULL before and after each element. If MXML_NO_CALLBACK
is specified, whitespace will only be added before MXML_TEXT nodes
with leading whitespace and before attribute names inside opening
element tags.</p>
<h3 class="function"><span class="info">&#160;Mini-XML 2.3&#160;</span><a id="mxmlSetCDATA">mxmlSetCDATA</a></h3> <h3 class="function"><span class="info">&#160;Mini-XML 2.3&#160;</span><a id="mxmlSetCDATA">mxmlSetCDATA</a></h3>
<p class="description">Set the element name of a CDATA node.</p> <p class="description">Set the element name of a CDATA node.</p>
<p class="code"> <p class="code">
@ -1481,10 +1209,6 @@ int mxmlSetCDATA (<br>
</dl> </dl>
<h4 class="returnvalue">Return Value</h4> <h4 class="returnvalue">Return Value</h4>
<p class="description">0 on success, -1 on failure</p> <p class="description">0 on success, -1 on failure</p>
<h4 class="discussion">Discussion</h4>
<p class="discussion">The node is not changed if it (or its first child) is not a CDATA element node.
</p>
<h3 class="function"><span class="info">&#160;Mini-XML 2.1&#160;</span><a id="mxmlSetCustom">mxmlSetCustom</a></h3> <h3 class="function"><span class="info">&#160;Mini-XML 2.1&#160;</span><a id="mxmlSetCustom">mxmlSetCustom</a></h3>
<p class="description">Set the data and destructor of a custom data node.</p> <p class="description">Set the data and destructor of a custom data node.</p>
<p class="code"> <p class="code">
@ -1504,10 +1228,6 @@ int mxmlSetCustom (<br>
</dl> </dl>
<h4 class="returnvalue">Return Value</h4> <h4 class="returnvalue">Return Value</h4>
<p class="description">0 on success, -1 on failure</p> <p class="description">0 on success, -1 on failure</p>
<h4 class="discussion">Discussion</h4>
<p class="discussion">The node is not changed if it (or its first child) is not a custom node.
</p>
<h3 class="function"><a id="mxmlSetCustomHandlers">mxmlSetCustomHandlers</a></h3> <h3 class="function"><a id="mxmlSetCustomHandlers">mxmlSetCustomHandlers</a></h3>
<p class="description">Set the handling functions for custom data.</p> <p class="description">Set the handling functions for custom data.</p>
<p class="code"> <p class="code">
@ -1522,12 +1242,6 @@ void mxmlSetCustomHandlers (<br>
<dt>save</dt> <dt>save</dt>
<dd class="description">Save function</dd> <dd class="description">Save function</dd>
</dl> </dl>
<h4 class="discussion">Discussion</h4>
<p class="discussion">The load function accepts a node pointer and a data string and must
return 0 on success and non-zero on error.<br>
<br>
The save function accepts a node pointer and must return a malloc'd
string on success and NULL on error.</p>
<h3 class="function"><a id="mxmlSetElement">mxmlSetElement</a></h3> <h3 class="function"><a id="mxmlSetElement">mxmlSetElement</a></h3>
<p class="description">Set the name of an element node.</p> <p class="description">Set the name of an element node.</p>
<p class="code"> <p class="code">
@ -1544,8 +1258,6 @@ int mxmlSetElement (<br>
</dl> </dl>
<h4 class="returnvalue">Return Value</h4> <h4 class="returnvalue">Return Value</h4>
<p class="description">0 on success, -1 on failure</p> <p class="description">0 on success, -1 on failure</p>
<h4 class="discussion">Discussion</h4>
<p class="discussion">The node is not changed if it is not an element node.</p>
<h3 class="function"><a id="mxmlSetErrorCallback">mxmlSetErrorCallback</a></h3> <h3 class="function"><a id="mxmlSetErrorCallback">mxmlSetErrorCallback</a></h3>
<p class="description">Set the error message callback.</p> <p class="description">Set the error message callback.</p>
<p class="code"> <p class="code">
@ -1573,8 +1285,6 @@ int mxmlSetInteger (<br>
</dl> </dl>
<h4 class="returnvalue">Return Value</h4> <h4 class="returnvalue">Return Value</h4>
<p class="description">0 on success, -1 on failure</p> <p class="description">0 on success, -1 on failure</p>
<h4 class="discussion">Discussion</h4>
<p class="discussion">The node is not changed if it (or its first child) is not an integer node.</p>
<h3 class="function"><a id="mxmlSetOpaque">mxmlSetOpaque</a></h3> <h3 class="function"><a id="mxmlSetOpaque">mxmlSetOpaque</a></h3>
<p class="description">Set the value of an opaque node.</p> <p class="description">Set the value of an opaque node.</p>
<p class="code"> <p class="code">
@ -1591,8 +1301,25 @@ int mxmlSetOpaque (<br>
</dl> </dl>
<h4 class="returnvalue">Return Value</h4> <h4 class="returnvalue">Return Value</h4>
<p class="description">0 on success, -1 on failure</p> <p class="description">0 on success, -1 on failure</p>
<h4 class="discussion">Discussion</h4> <h3 class="function"><span class="info">&#160;Mini-XML 2.11&#160;</span><a id="mxmlSetOpaquef">mxmlSetOpaquef</a></h3>
<p class="discussion">The node is not changed if it (or its first child) is not an opaque node.</p> <p class="description">Set the value of an opaque string node to a formatted string.</p>
<p class="code">
int mxmlSetOpaquef (<br>
&#160;&#160;&#160;&#160;<a href="#mxml_node_t">mxml_node_t</a> *node,<br>
&#160;&#160;&#160;&#160;const char *format,<br>
&#160;&#160;&#160;&#160;...<br>
);</p>
<h4 class="parameters">Parameters</h4>
<dl>
<dt>node</dt>
<dd class="description">Node to set</dd>
<dt>format</dt>
<dd class="description">Printf-style format string</dd>
<dt>...</dt>
<dd class="description">Additional arguments as needed</dd>
</dl>
<h4 class="returnvalue">Return Value</h4>
<p class="description">0 on success, -1 on failure</p>
<h3 class="function"><a id="mxmlSetReal">mxmlSetReal</a></h3> <h3 class="function"><a id="mxmlSetReal">mxmlSetReal</a></h3>
<p class="description">Set the value of a real number node.</p> <p class="description">Set the value of a real number node.</p>
<p class="code"> <p class="code">
@ -1609,8 +1336,6 @@ int mxmlSetReal (<br>
</dl> </dl>
<h4 class="returnvalue">Return Value</h4> <h4 class="returnvalue">Return Value</h4>
<p class="description">0 on success, -1 on failure</p> <p class="description">0 on success, -1 on failure</p>
<h4 class="discussion">Discussion</h4>
<p class="discussion">The node is not changed if it (or its first child) is not a real number node.</p>
<h3 class="function"><a id="mxmlSetText">mxmlSetText</a></h3> <h3 class="function"><a id="mxmlSetText">mxmlSetText</a></h3>
<p class="description">Set the value of a text node.</p> <p class="description">Set the value of a text node.</p>
<p class="code"> <p class="code">
@ -1630,8 +1355,6 @@ int mxmlSetText (<br>
</dl> </dl>
<h4 class="returnvalue">Return Value</h4> <h4 class="returnvalue">Return Value</h4>
<p class="description">0 on success, -1 on failure</p> <p class="description">0 on success, -1 on failure</p>
<h4 class="discussion">Discussion</h4>
<p class="discussion">The node is not changed if it (or its first child) is not a text node.</p>
<h3 class="function"><a id="mxmlSetTextf">mxmlSetTextf</a></h3> <h3 class="function"><a id="mxmlSetTextf">mxmlSetTextf</a></h3>
<p class="description">Set the value of a text node to a formatted string.</p> <p class="description">Set the value of a text node to a formatted string.</p>
<p class="code"> <p class="code">
@ -1654,8 +1377,6 @@ int mxmlSetTextf (<br>
</dl> </dl>
<h4 class="returnvalue">Return Value</h4> <h4 class="returnvalue">Return Value</h4>
<p class="description">0 on success, -1 on failure</p> <p class="description">0 on success, -1 on failure</p>
<h4 class="discussion">Discussion</h4>
<p class="discussion">The node is not changed if it (or its first child) is not a text node.</p>
<h3 class="function"><span class="info">&#160;Mini-XML 2.7&#160;</span><a id="mxmlSetUserData">mxmlSetUserData</a></h3> <h3 class="function"><span class="info">&#160;Mini-XML 2.7&#160;</span><a id="mxmlSetUserData">mxmlSetUserData</a></h3>
<p class="description">Set the user data pointer for a node.</p> <p class="description">Set the user data pointer for a node.</p>
<p class="code"> <p class="code">
@ -1683,10 +1404,6 @@ void mxmlSetWrapMargin (<br>
<dt>column</dt> <dt>column</dt>
<dd class="description">Column for wrapping, 0 to disable wrapping</dd> <dd class="description">Column for wrapping, 0 to disable wrapping</dd>
</dl> </dl>
<h4 class="discussion">Discussion</h4>
<p class="discussion">Wrapping is disabled when &quot;column&quot; is 0.
</p>
<h3 class="function"><a id="mxmlWalkNext">mxmlWalkNext</a></h3> <h3 class="function"><a id="mxmlWalkNext">mxmlWalkNext</a></h3>
<p class="description">Walk to the next logical node in the tree.</p> <p class="description">Walk to the next logical node in the tree.</p>
<p class="code"> <p class="code">
@ -1702,14 +1419,10 @@ void mxmlSetWrapMargin (<br>
<dt>top</dt> <dt>top</dt>
<dd class="description">Top node</dd> <dd class="description">Top node</dd>
<dt>descend</dt> <dt>descend</dt>
<dd class="description">Descend into tree - MXML_DESCEND, MXML_NO_DESCEND, or MXML_DESCEND_FIRST</dd> <dd class="description">Descend into tree - <code>MXML_DESCEND</code>, <code>MXML_NO_DESCEND</code>, or <code>MXML_DESCEND_FIRST</code></dd>
</dl> </dl>
<h4 class="returnvalue">Return Value</h4> <h4 class="returnvalue">Return Value</h4>
<p class="description">Next node or NULL</p> <p class="description">Next node or <code>NULL</code></p>
<h4 class="discussion">Discussion</h4>
<p class="discussion">The descend argument controls whether the first child is considered
to be the next node. The top node argument constrains the walk to
the node's children.</p>
<h3 class="function"><a id="mxmlWalkPrev">mxmlWalkPrev</a></h3> <h3 class="function"><a id="mxmlWalkPrev">mxmlWalkPrev</a></h3>
<p class="description">Walk to the previous logical node in the tree.</p> <p class="description">Walk to the previous logical node in the tree.</p>
<p class="code"> <p class="code">
@ -1725,14 +1438,10 @@ the node's children.</p>
<dt>top</dt> <dt>top</dt>
<dd class="description">Top node</dd> <dd class="description">Top node</dd>
<dt>descend</dt> <dt>descend</dt>
<dd class="description">Descend into tree - MXML_DESCEND, MXML_NO_DESCEND, or MXML_DESCEND_FIRST</dd> <dd class="description">Descend into tree - <code>MXML_DESCEND</code>, <code>MXML_NO_DESCEND</code>, or <code>MXML_DESCEND_FIRST</code></dd>
</dl> </dl>
<h4 class="returnvalue">Return Value</h4> <h4 class="returnvalue">Return Value</h4>
<p class="description">Previous node or NULL</p> <p class="description">Previous node or <code>NULL</code></p>
<h4 class="discussion">Discussion</h4>
<p class="discussion">The descend argument controls whether the previous node's last child
is considered to be the previous node. The top node argument constrains
the walk to the node's children.</p>
<h2 class="title"><a id="TYPES">Data Types</a></h2> <h2 class="title"><a id="TYPES">Data Types</a></h2>
<h3 class="typedef"><a id="mxml_custom_destroy_cb_t">mxml_custom_destroy_cb_t</a></h3> <h3 class="typedef"><a id="mxml_custom_destroy_cb_t">mxml_custom_destroy_cb_t</a></h3>
<p class="description">Custom data destructor</p> <p class="description">Custom data destructor</p>

@ -92,11 +92,11 @@ mxmlElementDeleteAttr(mxml_node_t *node,/* I - Element */
/* /*
* 'mxmlElementGetAttr()' - Get an attribute. * 'mxmlElementGetAttr()' - Get an attribute.
* *
* This function returns NULL if the node is not an element or the * This function returns @code NULL@ if the node is not an element or the
* named attribute does not exist. * named attribute does not exist.
*/ */
const char * /* O - Attribute value or NULL */ const char * /* O - Attribute value or @code NULL@ */
mxmlElementGetAttr(mxml_node_t *node, /* I - Element node */ mxmlElementGetAttr(mxml_node_t *node, /* I - Element node */
const char *name) /* I - Name of attribute */ const char *name) /* I - Name of attribute */
{ {

@ -50,10 +50,10 @@ mxmlEntityAddCallback(
/* /*
* 'mxmlEntityGetName()' - Get the name that corresponds to the character value. * 'mxmlEntityGetName()' - Get the name that corresponds to the character value.
* *
* If val does not need to be represented by a named entity, NULL is returned. * If val does not need to be represented by a named entity, @code NULL@ is returned.
*/ */
const char * /* O - Entity name or NULL */ const char * /* O - Entity name or @code NULL@ */
mxmlEntityGetName(int val) /* I - Character value */ mxmlEntityGetName(int val) /* I - Character value */
{ {
switch (val) switch (val)

@ -103,18 +103,15 @@ static int mxml_write_ws(mxml_node_t *node, void *p,
* If no top node is provided, the XML file MUST be well-formed with a * If no top node is provided, the XML file MUST be well-formed with a
* single parent node like <?xml> for the entire file. The callback * single parent node like <?xml> for the entire file. The callback
* function returns the value type that should be used for child nodes. * function returns the value type that should be used for child nodes.
* If MXML_NO_CALLBACK is specified then all child nodes will be either * The constants @code MXML_INTEGER_CALLBACK@, @code MXML_OPAQUE_CALLBACK@,
* MXML_ELEMENT or MXML_TEXT nodes. * @code MXML_REAL_CALLBACK@, and @code MXML_TEXT_CALLBACK@ are defined for
* * loading child (data) nodes of the specified type.
* The constants MXML_INTEGER_CALLBACK, MXML_OPAQUE_CALLBACK,
* MXML_REAL_CALLBACK, and MXML_TEXT_CALLBACK are defined for loading
* child nodes of the specified type.
*/ */
mxml_node_t * /* O - First node or NULL if the file could not be read. */ mxml_node_t * /* O - First node or @code NULL@ if the file could not be read. */
mxmlLoadFd(mxml_node_t *top, /* I - Top node */ mxmlLoadFd(mxml_node_t *top, /* I - Top node */
int fd, /* I - File descriptor to read from */ int fd, /* I - File descriptor to read from */
mxml_load_cb_t cb) /* I - Callback function or MXML_NO_CALLBACK */ mxml_load_cb_t cb) /* I - Callback function or constant */
{ {
_mxml_fdbuf_t buf; /* File descriptor buffer */ _mxml_fdbuf_t buf; /* File descriptor buffer */
@ -142,18 +139,15 @@ mxmlLoadFd(mxml_node_t *top, /* I - Top node */
* If no top node is provided, the XML file MUST be well-formed with a * If no top node is provided, the XML file MUST be well-formed with a
* single parent node like <?xml> for the entire file. The callback * single parent node like <?xml> for the entire file. The callback
* function returns the value type that should be used for child nodes. * function returns the value type that should be used for child nodes.
* If MXML_NO_CALLBACK is specified then all child nodes will be either * The constants @code MXML_INTEGER_CALLBACK@, @code MXML_OPAQUE_CALLBACK@,
* MXML_ELEMENT or MXML_TEXT nodes. * @code MXML_REAL_CALLBACK@, and @code MXML_TEXT_CALLBACK@ are defined for
* * loading child (data) nodes of the specified type.
* The constants MXML_INTEGER_CALLBACK, MXML_OPAQUE_CALLBACK,
* MXML_REAL_CALLBACK, and MXML_TEXT_CALLBACK are defined for loading
* child nodes of the specified type.
*/ */
mxml_node_t * /* O - First node or NULL if the file could not be read. */ mxml_node_t * /* O - First node or @code NULL@ if the file could not be read. */
mxmlLoadFile(mxml_node_t *top, /* I - Top node */ mxmlLoadFile(mxml_node_t *top, /* I - Top node */
FILE *fp, /* I - File to read from */ FILE *fp, /* I - File to read from */
mxml_load_cb_t cb) /* I - Callback function or MXML_NO_CALLBACK */ mxml_load_cb_t cb) /* I - Callback function or constant */
{ {
/* /*
* Read the XML data... * Read the XML data...
@ -170,18 +164,15 @@ mxmlLoadFile(mxml_node_t *top, /* I - Top node */
* If no top node is provided, the XML string MUST be well-formed with a * If no top node is provided, the XML string MUST be well-formed with a
* single parent node like <?xml> for the entire string. The callback * single parent node like <?xml> for the entire string. The callback
* function returns the value type that should be used for child nodes. * function returns the value type that should be used for child nodes.
* If MXML_NO_CALLBACK is specified then all child nodes will be either * The constants @code MXML_INTEGER_CALLBACK@, @code MXML_OPAQUE_CALLBACK@,
* MXML_ELEMENT or MXML_TEXT nodes. * @code MXML_REAL_CALLBACK@, and @code MXML_TEXT_CALLBACK@ are defined for
* * loading child (data) nodes of the specified type.
* The constants MXML_INTEGER_CALLBACK, MXML_OPAQUE_CALLBACK,
* MXML_REAL_CALLBACK, and MXML_TEXT_CALLBACK are defined for loading
* child nodes of the specified type.
*/ */
mxml_node_t * /* O - First node or NULL if the string has errors. */ mxml_node_t * /* O - First node or @code NULL@ if the string has errors. */
mxmlLoadString(mxml_node_t *top, /* I - Top node */ mxmlLoadString(mxml_node_t *top, /* I - Top node */
const char *s, /* I - String to load */ const char *s, /* I - String to load */
mxml_load_cb_t cb) /* I - Callback function or MXML_NO_CALLBACK */ mxml_load_cb_t cb) /* I - Callback function or constant */
{ {
/* /*
* Read the XML data... * Read the XML data...
@ -197,21 +188,21 @@ mxmlLoadString(mxml_node_t *top, /* I - Top node */
* *
* This function returns a pointer to a string containing the textual * This function returns a pointer to a string containing the textual
* representation of the XML node tree. The string should be freed * representation of the XML node tree. The string should be freed
* using the free() function when you are done with it. NULL is returned * using the free() function when you are done with it. @code NULL@ is returned
* if the node would produce an empty string or if the string cannot be * if the node would produce an empty string or if the string cannot be
* allocated. * allocated.
* *
* The callback argument specifies a function that returns a whitespace * The callback argument specifies a function that returns a whitespace
* string or NULL before and after each element. If MXML_NO_CALLBACK * string or NULL before and after each element. If @code MXML_NO_CALLBACK@
* is specified, whitespace will only be added before MXML_TEXT nodes * is specified, whitespace will only be added before @code MXML_TEXT@ nodes
* with leading whitespace and before attribute names inside opening * with leading whitespace and before attribute names inside opening
* element tags. * element tags.
*/ */
char * /* O - Allocated string or NULL */ char * /* O - Allocated string or @code NULL@ */
mxmlSaveAllocString( mxmlSaveAllocString(
mxml_node_t *node, /* I - Node to write */ mxml_node_t *node, /* I - Node to write */
mxml_save_cb_t cb) /* I - Whitespace callback or MXML_NO_CALLBACK */ mxml_save_cb_t cb) /* I - Whitespace callback or @code MXML_NO_CALLBACK@ */
{ {
int bytes; /* Required bytes */ int bytes; /* Required bytes */
char buffer[8192]; /* Temporary buffer */ char buffer[8192]; /* Temporary buffer */
@ -259,8 +250,8 @@ mxmlSaveAllocString(
* 'mxmlSaveFd()' - Save an XML tree to a file descriptor. * 'mxmlSaveFd()' - Save an XML tree to a file descriptor.
* *
* The callback argument specifies a function that returns a whitespace * The callback argument specifies a function that returns a whitespace
* string or NULL before and after each element. If MXML_NO_CALLBACK * string or NULL before and after each element. If @code MXML_NO_CALLBACK@
* is specified, whitespace will only be added before MXML_TEXT nodes * is specified, whitespace will only be added before @code MXML_TEXT@ nodes
* with leading whitespace and before attribute names inside opening * with leading whitespace and before attribute names inside opening
* element tags. * element tags.
*/ */
@ -268,7 +259,7 @@ mxmlSaveAllocString(
int /* O - 0 on success, -1 on error. */ int /* O - 0 on success, -1 on error. */
mxmlSaveFd(mxml_node_t *node, /* I - Node to write */ mxmlSaveFd(mxml_node_t *node, /* I - Node to write */
int fd, /* I - File descriptor to write to */ int fd, /* I - File descriptor to write to */
mxml_save_cb_t cb) /* I - Whitespace callback or MXML_NO_CALLBACK */ mxml_save_cb_t cb) /* I - Whitespace callback or @code MXML_NO_CALLBACK@ */
{ {
int col; /* Final column */ int col; /* Final column */
_mxml_fdbuf_t buf; /* File descriptor buffer */ _mxml_fdbuf_t buf; /* File descriptor buffer */
@ -307,8 +298,8 @@ mxmlSaveFd(mxml_node_t *node, /* I - Node to write */
* 'mxmlSaveFile()' - Save an XML tree to a file. * 'mxmlSaveFile()' - Save an XML tree to a file.
* *
* The callback argument specifies a function that returns a whitespace * The callback argument specifies a function that returns a whitespace
* string or NULL before and after each element. If MXML_NO_CALLBACK * string or NULL before and after each element. If @code MXML_NO_CALLBACK@
* is specified, whitespace will only be added before MXML_TEXT nodes * is specified, whitespace will only be added before @code MXML_TEXT@ nodes
* with leading whitespace and before attribute names inside opening * with leading whitespace and before attribute names inside opening
* element tags. * element tags.
*/ */
@ -316,7 +307,7 @@ mxmlSaveFd(mxml_node_t *node, /* I - Node to write */
int /* O - 0 on success, -1 on error. */ int /* O - 0 on success, -1 on error. */
mxmlSaveFile(mxml_node_t *node, /* I - Node to write */ mxmlSaveFile(mxml_node_t *node, /* I - Node to write */
FILE *fp, /* I - File to write to */ FILE *fp, /* I - File to write to */
mxml_save_cb_t cb) /* I - Whitespace callback or MXML_NO_CALLBACK */ mxml_save_cb_t cb) /* I - Whitespace callback or @code MXML_NO_CALLBACK@ */
{ {
int col; /* Final column */ int col; /* Final column */
_mxml_global_t *global = _mxml_global(); _mxml_global_t *global = _mxml_global();
@ -350,8 +341,8 @@ mxmlSaveFile(mxml_node_t *node, /* I - Node to write */
* into the specified buffer. * into the specified buffer.
* *
* The callback argument specifies a function that returns a whitespace * The callback argument specifies a function that returns a whitespace
* string or NULL before and after each element. If MXML_NO_CALLBACK * string or NULL before and after each element. If @code MXML_NO_CALLBACK@
* is specified, whitespace will only be added before MXML_TEXT nodes * is specified, whitespace will only be added before @code MXML_TEXT@ nodes
* with leading whitespace and before attribute names inside opening * with leading whitespace and before attribute names inside opening
* element tags. * element tags.
*/ */
@ -360,7 +351,7 @@ int /* O - Size of string */
mxmlSaveString(mxml_node_t *node, /* I - Node to write */ mxmlSaveString(mxml_node_t *node, /* I - Node to write */
char *buffer, /* I - String buffer */ char *buffer, /* I - String buffer */
int bufsize, /* I - Size of string buffer */ int bufsize, /* I - Size of string buffer */
mxml_save_cb_t cb) /* I - Whitespace callback or MXML_NO_CALLBACK */ mxml_save_cb_t cb) /* I - Whitespace callback or @code MXML_NO_CALLBACK@ */
{ {
int col; /* Final column */ int col; /* Final column */
char *ptr[2]; /* Pointers for putc_cb */ char *ptr[2]; /* Pointers for putc_cb */
@ -406,25 +397,22 @@ mxmlSaveString(mxml_node_t *node, /* I - Node to write */
* If no top node is provided, the XML file MUST be well-formed with a * If no top node is provided, the XML file MUST be well-formed with a
* single parent node like <?xml> for the entire file. The callback * single parent node like <?xml> for the entire file. The callback
* function returns the value type that should be used for child nodes. * function returns the value type that should be used for child nodes.
* If MXML_NO_CALLBACK is specified then all child nodes will be either * The constants @code MXML_INTEGER_CALLBACK@, @code MXML_OPAQUE_CALLBACK@,
* MXML_ELEMENT or MXML_TEXT nodes. * @code MXML_REAL_CALLBACK@, and @code MXML_TEXT_CALLBACK@ are defined for
* loading child nodes of the specified type.
* *
* The constants MXML_INTEGER_CALLBACK, MXML_OPAQUE_CALLBACK, * The SAX callback must call @link mxmlRetain@ for any nodes that need to
* MXML_REAL_CALLBACK, and MXML_TEXT_CALLBACK are defined for loading
* child nodes of the specified type.
*
* The SAX callback must call mxmlRetain() for any nodes that need to
* be kept for later use. Otherwise, nodes are deleted when the parent * be kept for later use. Otherwise, nodes are deleted when the parent
* node is closed or after each data, comment, CDATA, or directive node. * node is closed or after each data, comment, CDATA, or directive node.
* *
* @since Mini-XML 2.3@ * @since Mini-XML 2.3@
*/ */
mxml_node_t * /* O - First node or NULL if the file could not be read. */ mxml_node_t * /* O - First node or @code NULL@ if the file could not be read. */
mxmlSAXLoadFd(mxml_node_t *top, /* I - Top node */ mxmlSAXLoadFd(mxml_node_t *top, /* I - Top node */
int fd, /* I - File descriptor to read from */ int fd, /* I - File descriptor to read from */
mxml_load_cb_t cb, /* I - Callback function or MXML_NO_CALLBACK */ mxml_load_cb_t cb, /* I - Callback function or constant */
mxml_sax_cb_t sax_cb, /* I - SAX callback or MXML_NO_CALLBACK */ mxml_sax_cb_t sax_cb, /* I - SAX callback or @code MXML_NO_CALLBACK@ */
void *sax_data) /* I - SAX user data */ void *sax_data) /* I - SAX user data */
{ {
_mxml_fdbuf_t buf; /* File descriptor buffer */ _mxml_fdbuf_t buf; /* File descriptor buffer */
@ -454,26 +442,23 @@ mxmlSAXLoadFd(mxml_node_t *top, /* I - Top node */
* If no top node is provided, the XML file MUST be well-formed with a * If no top node is provided, the XML file MUST be well-formed with a
* single parent node like <?xml> for the entire file. The callback * single parent node like <?xml> for the entire file. The callback
* function returns the value type that should be used for child nodes. * function returns the value type that should be used for child nodes.
* If MXML_NO_CALLBACK is specified then all child nodes will be either * The constants @code MXML_INTEGER_CALLBACK@, @code MXML_OPAQUE_CALLBACK@,
* MXML_ELEMENT or MXML_TEXT nodes. * @code MXML_REAL_CALLBACK@, and @code MXML_TEXT_CALLBACK@ are defined for
* * loading child nodes of the specified type.
* The constants MXML_INTEGER_CALLBACK, MXML_OPAQUE_CALLBACK,
* MXML_REAL_CALLBACK, and MXML_TEXT_CALLBACK are defined for loading
* child nodes of the specified type.
* *
* The SAX callback must call mxmlRetain() for any nodes that need to * The SAX callback must call @link mxmlRetain@ for any nodes that need to
* be kept for later use. Otherwise, nodes are deleted when the parent * be kept for later use. Otherwise, nodes are deleted when the parent
* node is closed or after each data, comment, CDATA, or directive node. * node is closed or after each data, comment, CDATA, or directive node.
* *
* @since Mini-XML 2.3@ * @since Mini-XML 2.3@
*/ */
mxml_node_t * /* O - First node or NULL if the file could not be read. */ mxml_node_t * /* O - First node or @code NULL@ if the file could not be read. */
mxmlSAXLoadFile( mxmlSAXLoadFile(
mxml_node_t *top, /* I - Top node */ mxml_node_t *top, /* I - Top node */
FILE *fp, /* I - File to read from */ FILE *fp, /* I - File to read from */
mxml_load_cb_t cb, /* I - Callback function or MXML_NO_CALLBACK */ mxml_load_cb_t cb, /* I - Callback function or constant */
mxml_sax_cb_t sax_cb, /* I - SAX callback or MXML_NO_CALLBACK */ mxml_sax_cb_t sax_cb, /* I - SAX callback or @code MXML_NO_CALLBACK@ */
void *sax_data) /* I - SAX user data */ void *sax_data) /* I - SAX user data */
{ {
/* /*
@ -492,26 +477,23 @@ mxmlSAXLoadFile(
* If no top node is provided, the XML string MUST be well-formed with a * If no top node is provided, the XML string MUST be well-formed with a
* single parent node like <?xml> for the entire string. The callback * single parent node like <?xml> for the entire string. The callback
* function returns the value type that should be used for child nodes. * function returns the value type that should be used for child nodes.
* If MXML_NO_CALLBACK is specified then all child nodes will be either * The constants @code MXML_INTEGER_CALLBACK@, @code MXML_OPAQUE_CALLBACK@,
* MXML_ELEMENT or MXML_TEXT nodes. * @code MXML_REAL_CALLBACK@, and @code MXML_TEXT_CALLBACK@ are defined for
* * loading child nodes of the specified type.
* The constants MXML_INTEGER_CALLBACK, MXML_OPAQUE_CALLBACK,
* MXML_REAL_CALLBACK, and MXML_TEXT_CALLBACK are defined for loading
* child nodes of the specified type.
* *
* The SAX callback must call mxmlRetain() for any nodes that need to * The SAX callback must call @link mxmlRetain@ for any nodes that need to
* be kept for later use. Otherwise, nodes are deleted when the parent * be kept for later use. Otherwise, nodes are deleted when the parent
* node is closed or after each data, comment, CDATA, or directive node. * node is closed or after each data, comment, CDATA, or directive node.
* *
* @since Mini-XML 2.3@ * @since Mini-XML 2.3@
*/ */
mxml_node_t * /* O - First node or NULL if the string has errors. */ mxml_node_t * /* O - First node or @code NULL@ if the string has errors. */
mxmlSAXLoadString( mxmlSAXLoadString(
mxml_node_t *top, /* I - Top node */ mxml_node_t *top, /* I - Top node */
const char *s, /* I - String to load */ const char *s, /* I - String to load */
mxml_load_cb_t cb, /* I - Callback function or MXML_NO_CALLBACK */ mxml_load_cb_t cb, /* I - Callback function or constant */
mxml_sax_cb_t sax_cb, /* I - SAX callback or MXML_NO_CALLBACK */ mxml_sax_cb_t sax_cb, /* I - SAX callback or @code MXML_NO_CALLBACK@ */
void *sax_data) /* I - SAX user data */ void *sax_data) /* I - SAX user data */
{ {
/* /*
@ -529,7 +511,7 @@ mxmlSAXLoadString(
* return 0 on success and non-zero on error. * return 0 on success and non-zero on error.
* *
* The save function accepts a node pointer and must return a malloc'd * The save function accepts a node pointer and must return a malloc'd
* string on success and NULL on error. * string on success and @code NULL@ on error.
* *
*/ */

@ -28,7 +28,7 @@
* @since Mini-XML 2.7@ * @since Mini-XML 2.7@
*/ */
const char * /* O - CDATA value or NULL */ const char * /* O - CDATA value or @code NULL@ */
mxmlGetCDATA(mxml_node_t *node) /* I - Node to get */ mxmlGetCDATA(mxml_node_t *node) /* I - Node to get */
{ {
/* /*
@ -56,7 +56,7 @@ mxmlGetCDATA(mxml_node_t *node) /* I - Node to get */
* @since Mini-XML 2.7@ * @since Mini-XML 2.7@
*/ */
const void * /* O - Custom value or NULL */ const void * /* O - Custom value or @code NULL@ */
mxmlGetCustom(mxml_node_t *node) /* I - Node to get */ mxmlGetCustom(mxml_node_t *node) /* I - Node to get */
{ {
/* /*
@ -89,7 +89,7 @@ mxmlGetCustom(mxml_node_t *node) /* I - Node to get */
* @since Mini-XML 2.7@ * @since Mini-XML 2.7@
*/ */
const char * /* O - Element name or NULL */ const char * /* O - Element name or @code NULL@ */
mxmlGetElement(mxml_node_t *node) /* I - Node to get */ mxmlGetElement(mxml_node_t *node) /* I - Node to get */
{ {
/* /*
@ -116,7 +116,7 @@ mxmlGetElement(mxml_node_t *node) /* I - Node to get */
* @since Mini-XML 2.7@ * @since Mini-XML 2.7@
*/ */
mxml_node_t * /* O - First child or NULL */ mxml_node_t * /* O - First child or @code NULL@ */
mxmlGetFirstChild(mxml_node_t *node) /* I - Node to get */ mxmlGetFirstChild(mxml_node_t *node) /* I - Node to get */
{ {
/* /*
@ -177,7 +177,7 @@ mxmlGetInteger(mxml_node_t *node) /* I - Node to get */
* @since Mini-XML 2.7@ * @since Mini-XML 2.7@
*/ */
mxml_node_t * /* O - Last child or NULL */ mxml_node_t * /* O - Last child or @code NULL@ */
mxmlGetLastChild(mxml_node_t *node) /* I - Node to get */ mxmlGetLastChild(mxml_node_t *node) /* I - Node to get */
{ {
/* /*
@ -230,7 +230,7 @@ mxmlGetNextSibling(mxml_node_t *node) /* I - Node to get */
* @since Mini-XML 2.7@ * @since Mini-XML 2.7@
*/ */
const char * /* O - Opaque string or NULL */ const char * /* O - Opaque string or @code NULL@ */
mxmlGetOpaque(mxml_node_t *node) /* I - Node to get */ mxmlGetOpaque(mxml_node_t *node) /* I - Node to get */
{ {
/* /*
@ -263,7 +263,7 @@ mxmlGetOpaque(mxml_node_t *node) /* I - Node to get */
* @since Mini-XML 2.7@ * @since Mini-XML 2.7@
*/ */
mxml_node_t * /* O - Parent node or NULL */ mxml_node_t * /* O - Parent node or @code NULL@ */
mxmlGetParent(mxml_node_t *node) /* I - Node to get */ mxmlGetParent(mxml_node_t *node) /* I - Node to get */
{ {
/* /*
@ -289,7 +289,7 @@ mxmlGetParent(mxml_node_t *node) /* I - Node to get */
* @since Mini-XML 2.7@ * @since Mini-XML 2.7@
*/ */
mxml_node_t * /* O - Previous node or NULL */ mxml_node_t * /* O - Previous node or @code NULL@ */
mxmlGetPrevSibling(mxml_node_t *node) /* I - Node to get */ mxmlGetPrevSibling(mxml_node_t *node) /* I - Node to get */
{ {
/* /*
@ -344,12 +344,12 @@ mxmlGetReal(mxml_node_t *node) /* I - Node to get */
* 'mxmlGetText()' - Get the text value for a node or its first child. * 'mxmlGetText()' - Get the text value for a node or its first child.
* *
* @code NULL@ is returned if the node (or its first child) is not a text node. * @code NULL@ is returned if the node (or its first child) is not a text node.
* The "whitespace" argument can be NULL. * The "whitespace" argument can be @code NULL@.
* *
* @since Mini-XML 2.7@ * @since Mini-XML 2.7@
*/ */
const char * /* O - Text string or NULL */ const char * /* O - Text string or @code NULL@ */
mxmlGetText(mxml_node_t *node, /* I - Node to get */ mxmlGetText(mxml_node_t *node, /* I - Node to get */
int *whitespace) /* O - 1 if string is preceded by whitespace, 0 otherwise */ int *whitespace) /* O - 1 if string is preceded by whitespace, 0 otherwise */
{ {

@ -62,10 +62,12 @@ mxmlIndexDelete(mxml_index_t *ind) /* I - Index to delete */
/* /*
* 'mxmlIndexEnum()' - Return the next node in the index. * 'mxmlIndexEnum()' - Return the next node in the index.
* *
* Nodes are returned in the sorted order of the index. * You should call @link mxmlIndexReset@ prior to using this function to get
* the first node in the index. Nodes are returned in the sorted order of the
* index.
*/ */
mxml_node_t * /* O - Next node or NULL if there is none */ mxml_node_t * /* O - Next node or @code NULL@ if there is none */
mxmlIndexEnum(mxml_index_t *ind) /* I - Index to enumerate */ mxmlIndexEnum(mxml_index_t *ind) /* I - Index to enumerate */
{ {
/* /*
@ -89,13 +91,13 @@ mxmlIndexEnum(mxml_index_t *ind) /* I - Index to enumerate */
/* /*
* 'mxmlIndexFind()' - Find the next matching node. * 'mxmlIndexFind()' - Find the next matching node.
* *
* You should call mxmlIndexReset() prior to using this function for * You should call @link mxmlIndexReset@ prior to using this function for
* the first time with a particular set of "element" and "value" * the first time with a particular set of "element" and "value"
* strings. Passing NULL for both "element" and "value" is equivalent * strings. Passing @code NULL@ for both "element" and "value" is equivalent
* to calling mxmlIndexEnum(). * to calling @link mxmlIndexEnum@.
*/ */
mxml_node_t * /* O - Node or NULL if none found */ mxml_node_t * /* O - Node or @code NULL@ if none found */
mxmlIndexFind(mxml_index_t *ind, /* I - Index to search */ mxmlIndexFind(mxml_index_t *ind, /* I - Index to search */
const char *element, /* I - Element name to find, if any */ const char *element, /* I - Element name to find, if any */
const char *value) /* I - Attribute value, if any */ const char *value) /* I - Attribute value, if any */
@ -297,7 +299,7 @@ mxmlIndexGetCount(mxml_index_t *ind) /* I - Index of nodes */
* 'mxmlIndexNew()' - Create a new index. * 'mxmlIndexNew()' - Create a new index.
* *
* The index will contain all nodes that contain the named element and/or * The index will contain all nodes that contain the named element and/or
* attribute. If both "element" and "attr" are NULL, then the index will * attribute. If both "element" and "attr" are @code NULL@, then the index will
* contain a sorted list of the elements in the node tree. Nodes are * contain a sorted list of the elements in the node tree. Nodes are
* sorted by element name and optionally by attribute value if the "attr" * sorted by element name and optionally by attribute value if the "attr"
* argument is not NULL. * argument is not NULL.
@ -305,8 +307,8 @@ mxmlIndexGetCount(mxml_index_t *ind) /* I - Index of nodes */
mxml_index_t * /* O - New index */ mxml_index_t * /* O - New index */
mxmlIndexNew(mxml_node_t *node, /* I - XML node tree */ mxmlIndexNew(mxml_node_t *node, /* I - XML node tree */
const char *element, /* I - Element to index or NULL for all */ const char *element, /* I - Element to index or @code NULL@ for all */
const char *attr) /* I - Attribute to index or NULL for none */ const char *attr) /* I - Attribute to index or @code NULL@ for none */
{ {
mxml_index_t *ind; /* New index */ mxml_index_t *ind; /* New index */
mxml_node_t *current, /* Current node in index */ mxml_node_t *current, /* Current node in index */
@ -457,11 +459,11 @@ mxmlIndexNew(mxml_node_t *node, /* I - XML node tree */
* 'mxmlIndexReset()' - Reset the enumeration/find pointer in the index and * 'mxmlIndexReset()' - Reset the enumeration/find pointer in the index and
* return the first node in the index. * return the first node in the index.
* *
* This function should be called prior to using mxmlIndexEnum() or * This function should be called prior to using @link mxmlIndexEnum@ or
* mxmlIndexFind() for the first time. * @link mxmlIndexFind@ for the first time.
*/ */
mxml_node_t * /* O - First node or NULL if there is none */ mxml_node_t * /* O - First node or @code NULL@ if there is none */
mxmlIndexReset(mxml_index_t *ind) /* I - Index to reset */ mxmlIndexReset(mxml_index_t *ind) /* I - Index to reset */
{ {
#ifdef DEBUG #ifdef DEBUG
@ -537,8 +539,8 @@ index_compare(mxml_index_t *ind, /* I - Index */
static int /* O - Result of comparison */ static int /* O - Result of comparison */
index_find(mxml_index_t *ind, /* I - Index */ index_find(mxml_index_t *ind, /* I - Index */
const char *element, /* I - Element name or NULL */ const char *element, /* I - Element name or @code NULL@ */
const char *value, /* I - Attribute value or NULL */ const char *value, /* I - Attribute value or @code NULL@ */
mxml_node_t *node) /* I - Node */ mxml_node_t *node) /* I - Node */
{ {
int diff; /* Difference */ int diff; /* Difference */

@ -31,18 +31,18 @@ static mxml_node_t *mxml_new(mxml_node_t *parent, mxml_type_t type);
/* /*
* 'mxmlAdd()' - Add a node to a tree. * 'mxmlAdd()' - Add a node to a tree.
* *
* Adds the specified node to the parent. If the child argument is not * Adds the specified node to the parent. If the child argument is not
* NULL, puts the new node before or after the specified child depending * @code NULL@, puts the new node before or after the specified child depending
* on the value of the where argument. If the child argument is NULL, * on the value of the where argument. If the child argument is @code NULL@,
* puts the new node at the beginning of the child list (MXML_ADD_BEFORE) * puts the new node at the beginning of the child list (@code MXML_ADD_BEFORE@)
* or at the end of the child list (MXML_ADD_AFTER). The constant * or at the end of the child list (@code MXML_ADD_AFTER@). The constant
* MXML_ADD_TO_PARENT can be used to specify a NULL child pointer. * @code MXML_ADD_TO_PARENT@ can be used to specify a @code NULL@ child pointer.
*/ */
void void
mxmlAdd(mxml_node_t *parent, /* I - Parent node */ mxmlAdd(mxml_node_t *parent, /* I - Parent node */
int where, /* I - Where to add, MXML_ADD_BEFORE or MXML_ADD_AFTER */ int where, /* I - Where to add, @code MXML_ADD_BEFORE@ or @code MXML_ADD_AFTER@ */
mxml_node_t *child, /* I - Child node for where or MXML_ADD_TO_PARENT */ mxml_node_t *child, /* I - Child node for where or @code MXML_ADD_TO_PARENT@ */
mxml_node_t *node) /* I - Node to add */ mxml_node_t *node) /* I - Node to add */
{ {
#ifdef DEBUG #ifdef DEBUG
@ -170,7 +170,7 @@ mxmlAdd(mxml_node_t *parent, /* I - Parent node */
* 'mxmlDelete()' - Delete a node and all of its children. * 'mxmlDelete()' - Delete a node and all of its children.
* *
* If the specified node has a parent, this function first removes the * If the specified node has a parent, this function first removes the
* node from its parent using the mxmlRemove() function. * node from its parent using the @link mxmlRemove@ function.
*/ */
void void
@ -274,15 +274,16 @@ mxmlGetRefCount(mxml_node_t *node) /* I - Node */
* 'mxmlNewCDATA()' - Create a new CDATA node. * 'mxmlNewCDATA()' - Create a new CDATA node.
* *
* The new CDATA node is added to the end of the specified parent's child * The new CDATA node is added to the end of the specified parent's child
* list. The constant MXML_NO_PARENT can be used to specify that the new * list. The constant @code MXML_NO_PARENT@ can be used to specify that the new
* CDATA node has no parent. The data string must be nul-terminated and * CDATA node has no parent. The data string must be nul-terminated and
* is copied into the new node. CDATA nodes use the MXML_ELEMENT type. * is copied into the new node. CDATA nodes currently use the
* @code MXML_ELEMENT@ type.
* *
* @since Mini-XML 2.3@ * @since Mini-XML 2.3@
*/ */
mxml_node_t * /* O - New node */ mxml_node_t * /* O - New node */
mxmlNewCDATA(mxml_node_t *parent, /* I - Parent node or MXML_NO_PARENT */ mxmlNewCDATA(mxml_node_t *parent, /* I - Parent node or @code MXML_NO_PARENT@ */
const char *data) /* I - Data string */ const char *data) /* I - Data string */
{ {
mxml_node_t *node; /* New node */ mxml_node_t *node; /* New node */
@ -315,8 +316,8 @@ mxmlNewCDATA(mxml_node_t *parent, /* I - Parent node or MXML_NO_PARENT */
* 'mxmlNewCustom()' - Create a new custom data node. * 'mxmlNewCustom()' - Create a new custom data node.
* *
* The new custom node is added to the end of the specified parent's child * The new custom node is added to the end of the specified parent's child
* list. The constant MXML_NO_PARENT can be used to specify that the new * list. The constant @code MXML_NO_PARENT@ can be used to specify that the new
* element node has no parent. NULL can be passed when the data in the * element node has no parent. @code NULL@ can be passed when the data in the
* node is not dynamically allocated or is separately managed. * node is not dynamically allocated or is separately managed.
* *
* @since Mini-XML 2.1@ * @since Mini-XML 2.1@
@ -324,7 +325,7 @@ mxmlNewCDATA(mxml_node_t *parent, /* I - Parent node or MXML_NO_PARENT */
mxml_node_t * /* O - New node */ mxml_node_t * /* O - New node */
mxmlNewCustom( mxmlNewCustom(
mxml_node_t *parent, /* I - Parent node or MXML_NO_PARENT */ mxml_node_t *parent, /* I - Parent node or @code MXML_NO_PARENT@ */
void *data, /* I - Pointer to data */ void *data, /* I - Pointer to data */
mxml_custom_destroy_cb_t destroy) /* I - Function to destroy data */ mxml_custom_destroy_cb_t destroy) /* I - Function to destroy data */
{ {
@ -354,12 +355,12 @@ mxmlNewCustom(
* 'mxmlNewElement()' - Create a new element node. * 'mxmlNewElement()' - Create a new element node.
* *
* The new element node is added to the end of the specified parent's child * The new element node is added to the end of the specified parent's child
* list. The constant MXML_NO_PARENT can be used to specify that the new * list. The constant @code MXML_NO_PARENT@ can be used to specify that the new
* element node has no parent. * element node has no parent.
*/ */
mxml_node_t * /* O - New node */ mxml_node_t * /* O - New node */
mxmlNewElement(mxml_node_t *parent, /* I - Parent node or MXML_NO_PARENT */ mxmlNewElement(mxml_node_t *parent, /* I - Parent node or @code MXML_NO_PARENT@ */
const char *name) /* I - Name of element */ const char *name) /* I - Name of element */
{ {
mxml_node_t *node; /* New node */ mxml_node_t *node; /* New node */
@ -392,12 +393,12 @@ mxmlNewElement(mxml_node_t *parent, /* I - Parent node or MXML_NO_PARENT */
* 'mxmlNewInteger()' - Create a new integer node. * 'mxmlNewInteger()' - Create a new integer node.
* *
* The new integer node is added to the end of the specified parent's child * The new integer node is added to the end of the specified parent's child
* list. The constant MXML_NO_PARENT can be used to specify that the new * list. The constant @code MXML_NO_PARENT@ can be used to specify that the new
* integer node has no parent. * integer node has no parent.
*/ */
mxml_node_t * /* O - New node */ mxml_node_t * /* O - New node */
mxmlNewInteger(mxml_node_t *parent, /* I - Parent node or MXML_NO_PARENT */ mxmlNewInteger(mxml_node_t *parent, /* I - Parent node or @code MXML_NO_PARENT@ */
int integer) /* I - Integer value */ int integer) /* I - Integer value */
{ {
mxml_node_t *node; /* New node */ mxml_node_t *node; /* New node */
@ -421,14 +422,14 @@ mxmlNewInteger(mxml_node_t *parent, /* I - Parent node or MXML_NO_PARENT */
/* /*
* 'mxmlNewOpaque()' - Create a new opaque string. * 'mxmlNewOpaque()' - Create a new opaque string.
* *
* The new opaque node is added to the end of the specified parent's child * The new opaque string node is added to the end of the specified parent's
* list. The constant MXML_NO_PARENT can be used to specify that the new * child list. The constant @code MXML_NO_PARENT@ can be used to specify that
* opaque node has no parent. The opaque string must be nul-terminated and * the new opaque string node has no parent. The opaque string must be nul-
* is copied into the new node. * terminated and is copied into the new node.
*/ */
mxml_node_t * /* O - New node */ mxml_node_t * /* O - New node */
mxmlNewOpaque(mxml_node_t *parent, /* I - Parent node or MXML_NO_PARENT */ mxmlNewOpaque(mxml_node_t *parent, /* I - Parent node or @code MXML_NO_PARENT@ */
const char *opaque) /* I - Opaque string */ const char *opaque) /* I - Opaque string */
{ {
mxml_node_t *node; /* New node */ mxml_node_t *node; /* New node */
@ -457,16 +458,62 @@ mxmlNewOpaque(mxml_node_t *parent, /* I - Parent node or MXML_NO_PARENT */
} }
/*
* 'mxmlNewOpaquef()' - Create a new formatted opaque string node.
*
* The new opaque string node is added to the end of the specified parent's
* child list. The constant @code MXML_NO_PARENT@ can be used to specify that
* the new opaque string node has no parent. The format string must be
* nul-terminated and is formatted into the new node.
*/
mxml_node_t * /* O - New node */
mxmlNewOpaquef(mxml_node_t *parent, /* I - Parent node or @code MXML_NO_PARENT@ */
const char *format, /* I - Printf-style format string */
...) /* I - Additional args as needed */
{
mxml_node_t *node; /* New node */
va_list ap; /* Pointer to arguments */
#ifdef DEBUG
fprintf(stderr, "mxmlNewOpaquef(parent=%p, format=\"%s\", ...)\n", parent, format ? format : "(null)");
#endif /* DEBUG */
/*
* Range check input...
*/
if (!format)
return (NULL);
/*
* Create the node and set the text value...
*/
if ((node = mxml_new(parent, MXML_OPAQUE)) != NULL)
{
va_start(ap, format);
node->value.opaque = _mxml_vstrdupf(format, ap);
va_end(ap);
}
return (node);
}
/* /*
* 'mxmlNewReal()' - Create a new real number node. * 'mxmlNewReal()' - Create a new real number node.
* *
* The new real number node is added to the end of the specified parent's * The new real number node is added to the end of the specified parent's
* child list. The constant MXML_NO_PARENT can be used to specify that * child list. The constant @code MXML_NO_PARENT@ can be used to specify that
* the new real number node has no parent. * the new real number node has no parent.
*/ */
mxml_node_t * /* O - New node */ mxml_node_t * /* O - New node */
mxmlNewReal(mxml_node_t *parent, /* I - Parent node or MXML_NO_PARENT */ mxmlNewReal(mxml_node_t *parent, /* I - Parent node or @code MXML_NO_PARENT@ */
double real) /* I - Real number value */ double real) /* I - Real number value */
{ {
mxml_node_t *node; /* New node */ mxml_node_t *node; /* New node */
@ -491,14 +538,14 @@ mxmlNewReal(mxml_node_t *parent, /* I - Parent node or MXML_NO_PARENT */
* 'mxmlNewText()' - Create a new text fragment node. * 'mxmlNewText()' - Create a new text fragment node.
* *
* The new text node is added to the end of the specified parent's child * The new text node is added to the end of the specified parent's child
* list. The constant MXML_NO_PARENT can be used to specify that the new * list. The constant @code MXML_NO_PARENT@ can be used to specify that the new
* text node has no parent. The whitespace parameter is used to specify * text node has no parent. The whitespace parameter is used to specify
* whether leading whitespace is present before the node. The text * whether leading whitespace is present before the node. The text
* string must be nul-terminated and is copied into the new node. * string must be nul-terminated and is copied into the new node.
*/ */
mxml_node_t * /* O - New node */ mxml_node_t * /* O - New node */
mxmlNewText(mxml_node_t *parent, /* I - Parent node or MXML_NO_PARENT */ mxmlNewText(mxml_node_t *parent, /* I - Parent node or @code MXML_NO_PARENT@ */
int whitespace, /* I - 1 = leading whitespace, 0 = no whitespace */ int whitespace, /* I - 1 = leading whitespace, 0 = no whitespace */
const char *string) /* I - String */ const char *string) /* I - String */
{ {
@ -535,16 +582,16 @@ mxmlNewText(mxml_node_t *parent, /* I - Parent node or MXML_NO_PARENT */
* 'mxmlNewTextf()' - Create a new formatted text fragment node. * 'mxmlNewTextf()' - Create a new formatted text fragment node.
* *
* The new text node is added to the end of the specified parent's child * The new text node is added to the end of the specified parent's child
* list. The constant MXML_NO_PARENT can be used to specify that the new * list. The constant @code MXML_NO_PARENT@ can be used to specify that the new
* text node has no parent. The whitespace parameter is used to specify * text node has no parent. The whitespace parameter is used to specify
* whether leading whitespace is present before the node. The format * whether leading whitespace is present before the node. The format
* string must be nul-terminated and is formatted into the new node. * string must be nul-terminated and is formatted into the new node.
*/ */
mxml_node_t * /* O - New node */ mxml_node_t * /* O - New node */
mxmlNewTextf(mxml_node_t *parent, /* I - Parent node or MXML_NO_PARENT */ mxmlNewTextf(mxml_node_t *parent, /* I - Parent node or @code MXML_NO_PARENT@ */
int whitespace, /* I - 1 = leading whitespace, 0 = no whitespace */ int whitespace, /* I - 1 = leading whitespace, 0 = no whitespace */
const char *format, /* I - Printf-style frmat string */ const char *format, /* I - Printf-style format string */
...) /* I - Additional args as needed */ ...) /* I - Additional args as needed */
{ {
mxml_node_t *node; /* New node */ mxml_node_t *node; /* New node */
@ -584,8 +631,8 @@ mxmlNewTextf(mxml_node_t *parent, /* I - Parent node or MXML_NO_PARENT */
/* /*
* 'mxmlRemove()' - Remove a node from its parent. * 'mxmlRemove()' - Remove a node from its parent.
* *
* Does not free memory used by the node - use mxmlDelete() for that. * This function does not free memory used by the node - use @link mxmlDelete@
* This function does nothing if the node has no parent. * for that. This function does nothing if the node has no parent.
*/ */
void void
@ -652,7 +699,7 @@ mxmlRemove(mxml_node_t *node) /* I - Node to remove */
* 'mxmlNewXML()' - Create a new XML document tree. * 'mxmlNewXML()' - Create a new XML document tree.
* *
* The "version" argument specifies the version number to put in the * The "version" argument specifies the version number to put in the
* ?xml element node. If NULL, version 1.0 is assumed. * ?xml element node. If @code NULL@, version "1.0" is assumed.
* *
* @since Mini-XML 2.3@ * @since Mini-XML 2.3@
*/ */
@ -674,7 +721,7 @@ mxmlNewXML(const char *version) /* I - Version number to use */
* 'mxmlRelease()' - Release a node. * 'mxmlRelease()' - Release a node.
* *
* When the reference count reaches zero, the node (and any children) * When the reference count reaches zero, the node (and any children)
* is deleted via mxmlDelete(). * is deleted via @link mxmlDelete@.
* *
* @since Mini-XML 2.3@ * @since Mini-XML 2.3@
*/ */

@ -24,22 +24,22 @@
* 'mxmlFindElement()' - Find the named element. * 'mxmlFindElement()' - Find the named element.
* *
* The search is constrained by the name, attribute name, and value; any * The search is constrained by the name, attribute name, and value; any
* NULL names or values are treated as wildcards, so different kinds of * @code NULL@ names or values are treated as wildcards, so different kinds of
* searches can be implemented by looking for all elements of a given name * searches can be implemented by looking for all elements of a given name
* or all elements with a specific attribute. The descend argument determines * or all elements with a specific attribute. The descend argument determines
* whether the search descends into child nodes; normally you will use * whether the search descends into child nodes; normally you will use
* MXML_DESCEND_FIRST for the initial search and MXML_NO_DESCEND to find * @code MXML_DESCEND_FIRST@ for the initial search and @code MXML_NO_DESCEND@
* additional direct descendents of the node. The top node argument * to find additional direct descendents of the node. The top node argument
* constrains the search to a particular node's children. * constrains the search to a particular node's children.
*/ */
mxml_node_t * /* O - Element node or NULL */ mxml_node_t * /* O - Element node or @code NULL@ */
mxmlFindElement(mxml_node_t *node, /* I - Current node */ mxmlFindElement(mxml_node_t *node, /* I - Current node */
mxml_node_t *top, /* I - Top node */ mxml_node_t *top, /* I - Top node */
const char *name, /* I - Element name or NULL for any */ const char *element, /* I - Element name or @code NULL@ for any */
const char *attr, /* I - Attribute name, or NULL for none */ const char *attr, /* I - Attribute name, or @code NULL@ for none */
const char *value, /* I - Attribute value, or NULL for any */ const char *value, /* I - Attribute value, or @code NULL@ for any */
int descend) /* I - Descend into tree - MXML_DESCEND, MXML_NO_DESCEND, or MXML_DESCEND_FIRST */ int descend) /* I - Descend into tree - @code MXML_DESCEND@, @code MXML_NO_DESCEND@, or @code MXML_DESCEND_FIRST@ */
{ {
const char *temp; /* Current attribute value */ const char *temp; /* Current attribute value */
@ -69,7 +69,7 @@ mxmlFindElement(mxml_node_t *node, /* I - Current node */
if (node->type == MXML_ELEMENT && if (node->type == MXML_ELEMENT &&
node->value.element.name && node->value.element.name &&
(!name || !strcmp(node->value.element.name, name))) (!element || !strcmp(node->value.element.name, element)))
{ {
/* /*
* See if we need to check for an attribute... * See if we need to check for an attribute...
@ -120,7 +120,7 @@ mxmlFindElement(mxml_node_t *node, /* I - Current node */
* @since Mini-XML 2.7@ * @since Mini-XML 2.7@
*/ */
mxml_node_t * /* O - Found node or NULL */ mxml_node_t * /* O - Found node or @code NULL@ */
mxmlFindPath(mxml_node_t *top, /* I - Top node */ mxmlFindPath(mxml_node_t *top, /* I - Top node */
const char *path) /* I - Path to element */ const char *path) /* I - Path to element */
{ {
@ -198,14 +198,14 @@ mxmlFindPath(mxml_node_t *top, /* I - Top node */
* 'mxmlWalkNext()' - Walk to the next logical node in the tree. * 'mxmlWalkNext()' - Walk to the next logical node in the tree.
* *
* The descend argument controls whether the first child is considered * The descend argument controls whether the first child is considered
* to be the next node. The top node argument constrains the walk to * to be the next node. The top node argument constrains the walk to
* the node's children. * the node's children.
*/ */
mxml_node_t * /* O - Next node or NULL */ mxml_node_t * /* O - Next node or @code NULL@ */
mxmlWalkNext(mxml_node_t *node, /* I - Current node */ mxmlWalkNext(mxml_node_t *node, /* I - Current node */
mxml_node_t *top, /* I - Top node */ mxml_node_t *top, /* I - Top node */
int descend) /* I - Descend into tree - MXML_DESCEND, MXML_NO_DESCEND, or MXML_DESCEND_FIRST */ int descend) /* I - Descend into tree - @code MXML_DESCEND@, @code MXML_NO_DESCEND@, or @code MXML_DESCEND_FIRST@ */
{ {
if (!node) if (!node)
return (NULL); return (NULL);
@ -236,14 +236,14 @@ mxmlWalkNext(mxml_node_t *node, /* I - Current node */
* 'mxmlWalkPrev()' - Walk to the previous logical node in the tree. * 'mxmlWalkPrev()' - Walk to the previous logical node in the tree.
* *
* The descend argument controls whether the previous node's last child * The descend argument controls whether the previous node's last child
* is considered to be the previous node. The top node argument constrains * is considered to be the previous node. The top node argument constrains
* the walk to the node's children. * the walk to the node's children.
*/ */
mxml_node_t * /* O - Previous node or NULL */ mxml_node_t * /* O - Previous node or @code NULL@ */
mxmlWalkPrev(mxml_node_t *node, /* I - Current node */ mxmlWalkPrev(mxml_node_t *node, /* I - Current node */
mxml_node_t *top, /* I - Top node */ mxml_node_t *top, /* I - Top node */
int descend) /* I - Descend into tree - MXML_DESCEND, MXML_NO_DESCEND, or MXML_DESCEND_FIRST */ int descend) /* I - Descend into tree - @code MXML_DESCEND@, @code MXML_NO_DESCEND@, or @code MXML_DESCEND_FIRST@ */
{ {
if (!node || node == top) if (!node || node == top)
return (NULL); return (NULL);

@ -193,6 +193,50 @@ mxmlSetOpaque(mxml_node_t *node, /* I - Node to set */
} }
/*
* 'mxmlSetOpaquef()' - Set the value of an opaque string node to a formatted string.
*
* The node is not changed if it (or its first child) is not an opaque node.
*
* @since Mini-XML 2.11@
*/
int /* O - 0 on success, -1 on failure */
mxmlSetOpaquef(mxml_node_t *node, /* I - Node to set */
const char *format, /* I - Printf-style format string */
...) /* I - Additional arguments as needed */
{
va_list ap; /* Pointer to arguments */
/*
* Range check input...
*/
if (node && node->type == MXML_ELEMENT &&
node->child && node->child->type == MXML_OPAQUE)
node = node->child;
if (!node || node->type != MXML_OPAQUE || !format)
return (-1);
/*
* Free any old string value and set the new value...
*/
if (node->value.opaque)
free(node->value.opaque);
va_start(ap, format);
node->value.opaque = _mxml_strdupf(format, ap);
va_end(ap);
return (0);
}
/* /*
* 'mxmlSetReal()' - Set the value of a real number node. * 'mxmlSetReal()' - Set the value of a real number node.
* *

@ -211,7 +211,7 @@ extern const char *mxmlEntityGetName(int val);
extern int mxmlEntityGetValue(const char *name); extern int mxmlEntityGetValue(const char *name);
extern void mxmlEntityRemoveCallback(mxml_entity_cb_t cb); extern void mxmlEntityRemoveCallback(mxml_entity_cb_t cb);
extern mxml_node_t *mxmlFindElement(mxml_node_t *node, mxml_node_t *top, extern mxml_node_t *mxmlFindElement(mxml_node_t *node, mxml_node_t *top,
const char *name, const char *attr, const char *element, const char *attr,
const char *value, int descend); const char *value, int descend);
extern mxml_node_t *mxmlFindPath(mxml_node_t *node, const char *path); extern mxml_node_t *mxmlFindPath(mxml_node_t *node, const char *path);
extern const char *mxmlGetCDATA(mxml_node_t *node); extern const char *mxmlGetCDATA(mxml_node_t *node);
@ -250,11 +250,14 @@ extern mxml_node_t *mxmlNewCustom(mxml_node_t *parent, void *data,
extern mxml_node_t *mxmlNewElement(mxml_node_t *parent, const char *name); extern mxml_node_t *mxmlNewElement(mxml_node_t *parent, const char *name);
extern mxml_node_t *mxmlNewInteger(mxml_node_t *parent, int integer); extern mxml_node_t *mxmlNewInteger(mxml_node_t *parent, int integer);
extern mxml_node_t *mxmlNewOpaque(mxml_node_t *parent, const char *opaque); extern mxml_node_t *mxmlNewOpaque(mxml_node_t *parent, const char *opaque);
extern mxml_node_t *mxmlNewOpaquef(mxml_node_t *parent, const char *format, ...)
# ifdef __GNUC__
__attribute__ ((__format__ (__printf__, 2, 3)))
# endif /* __GNUC__ */
;
extern mxml_node_t *mxmlNewReal(mxml_node_t *parent, double real); extern mxml_node_t *mxmlNewReal(mxml_node_t *parent, double real);
extern mxml_node_t *mxmlNewText(mxml_node_t *parent, int whitespace, extern mxml_node_t *mxmlNewText(mxml_node_t *parent, int whitespace, const char *string);
const char *string); extern mxml_node_t *mxmlNewTextf(mxml_node_t *parent, int whitespace, const char *format, ...)
extern mxml_node_t *mxmlNewTextf(mxml_node_t *parent, int whitespace,
const char *format, ...)
# ifdef __GNUC__ # ifdef __GNUC__
__attribute__ ((__format__ (__printf__, 3, 4))) __attribute__ ((__format__ (__printf__, 3, 4)))
# endif /* __GNUC__ */ # endif /* __GNUC__ */
@ -289,6 +292,11 @@ extern int mxmlSetElement(mxml_node_t *node, const char *name);
extern void mxmlSetErrorCallback(mxml_error_cb_t cb); extern void mxmlSetErrorCallback(mxml_error_cb_t cb);
extern int mxmlSetInteger(mxml_node_t *node, int integer); extern int mxmlSetInteger(mxml_node_t *node, int integer);
extern int mxmlSetOpaque(mxml_node_t *node, const char *opaque); extern int mxmlSetOpaque(mxml_node_t *node, const char *opaque);
extern int mxmlSetOpaquef(mxml_node_t *node, const char *format, ...)
# ifdef __GNUC__
__attribute__ ((__format__ (__printf__, 2, 3)))
# endif /* __GNUC__ */
;
extern int mxmlSetReal(mxml_node_t *node, double real); extern int mxmlSetReal(mxml_node_t *node, double real);
extern int mxmlSetText(mxml_node_t *node, int whitespace, extern int mxmlSetText(mxml_node_t *node, int whitespace,
const char *string); const char *string);

@ -181,7 +181,7 @@ static int scan_file(const char *filename, FILE *fp, mxml_node_t *doc);
static void sort_node(mxml_node_t *tree, mxml_node_t *func); static void sort_node(mxml_node_t *tree, mxml_node_t *func);
static void update_comment(mxml_node_t *parent, mxml_node_t *comment); static void update_comment(mxml_node_t *parent, mxml_node_t *comment);
static void usage(const char *option); static void usage(const char *option);
static void write_description(FILE *out, mxml_node_t *description, const char *element, int summary); static void write_description(FILE *out, int mode, mxml_node_t *description, const char *element, int summary);
#ifdef __APPLE__ #ifdef __APPLE__
static void write_docset(const char *docset, const char *section, const char *title, const char *author, const char *copyright, const char *docversion, const char *feedname, const char *feedurl, const char *cssfile, const char *headerfile, const char *bodyfile, mmd_t *body, mxml_node_t *doc, const char *footerfile); static void write_docset(const char *docset, const char *section, const char *title, const char *author, const char *copyright, const char *docversion, const char *feedname, const char *feedurl, const char *cssfile, const char *headerfile, const char *bodyfile, mmd_t *body, mxml_node_t *doc, const char *footerfile);
#endif /* __APPLE__ */ #endif /* __APPLE__ */
@ -3632,6 +3632,7 @@ usage(const char *option) /* I - Unknown option */
static void static void
write_description( write_description(
FILE *out, /* I - Output file */ FILE *out, /* I - Output file */
int mode, /* I - Output mode */
mxml_node_t *description, /* I - Description node */ mxml_node_t *description, /* I - Description node */
const char *element, /* I - HTML element, if any */ const char *element, /* I - HTML element, if any */
int summary) /* I - Show summary */ int summary) /* I - Show summary */
@ -3775,7 +3776,10 @@ write_description(
} }
else if (*ptr == '\n' && ptr[1] == '\n' && ptr[2] && ptr[2] != '@') else if (*ptr == '\n' && ptr[1] == '\n' && ptr[2] && ptr[2] != '@')
{ {
fputs("<br>\n<br>\n", out); if (mode == OUTPUT_EPUB)
fputs("<br />\n<br />\n", out);
else
fputs("<br>\n<br>\n", out);
ptr ++; ptr ++;
} }
else else
@ -4676,7 +4680,7 @@ write_function(FILE *out, /* I - Output file */
fprintf(out, "<h%d class=\"%s\">%s<a id=\"%s\">%s</a></h%d>\n", level, level == 3 ? "function" : "method", get_comment_info(description), name, name, level); fprintf(out, "<h%d class=\"%s\">%s<a id=\"%s\">%s</a></h%d>\n", level, level == 3 ? "function" : "method", get_comment_info(description), name, name, level);
if (description) if (description)
write_description(out, description, "p", 1); write_description(out, mode, description, "p", 1);
fputs("<p class=\"code\">\n", out); fputs("<p class=\"code\">\n", out);
@ -4702,7 +4706,7 @@ write_function(FILE *out, /* I - Output file */
fprintf(out, "%c%s\n&#160;&#160;&#160;&#160;", prefix, br); fprintf(out, "%c%s\n&#160;&#160;&#160;&#160;", prefix, br);
if (type->child) if (type->child)
write_element(out, doc, type, OUTPUT_HTML); write_element(out, doc, type, mode);
fputs(mxmlElementGetAttr(arg, "name"), out); fputs(mxmlElementGetAttr(arg, "name"), out);
if ((defval = mxmlElementGetAttr(arg, "default")) != NULL) if ((defval = mxmlElementGetAttr(arg, "default")) != NULL)
@ -4729,8 +4733,8 @@ write_function(FILE *out, /* I - Output file */
adesc = mxmlFindElement(arg, arg, "description", NULL, NULL, adesc = mxmlFindElement(arg, arg, "description", NULL, NULL,
MXML_DESCEND_FIRST); MXML_DESCEND_FIRST);
write_description(out, adesc, "dd", 1); write_description(out, mode, adesc, "dd", 1);
write_description(out, adesc, "dd", 0); write_description(out, mode, adesc, "dd", 0);
} }
fputs("</dl>\n", out); fputs("</dl>\n", out);
@ -4747,15 +4751,15 @@ write_function(FILE *out, /* I - Output file */
adesc = mxmlFindElement(arg, arg, "description", NULL, NULL, adesc = mxmlFindElement(arg, arg, "description", NULL, NULL,
MXML_DESCEND_FIRST); MXML_DESCEND_FIRST);
write_description(out, adesc, "p", 1); write_description(out, mode, adesc, "p", 1);
write_description(out, adesc, "p", 0); write_description(out, mode, adesc, "p", 0);
} }
if (description) if (description)
{ {
for (node = description->child; node; node = node->next) for (node = description->child; node; node = node->next)
if (node->value.text.string && if (node->value.opaque &&
(sep = strstr(node->value.text.string, "\n\n")) != NULL) (sep = strstr(node->value.opaque, "\n\n")) != NULL)
{ {
sep += 2; sep += 2;
if (*sep && strncmp(sep, "@since ", 7) && if (*sep && strncmp(sep, "@since ", 7) &&
@ -4767,7 +4771,7 @@ write_function(FILE *out, /* I - Output file */
{ {
fprintf(out, "<h%d class=\"discussion\">Discussion</h%d>\n", level + 1, fprintf(out, "<h%d class=\"discussion\">Discussion</h%d>\n", level + 1,
level + 1); level + 1);
write_description(out, description, "p", 0); write_description(out, mode, description, "p", 0);
} }
} }
} }
@ -5089,7 +5093,7 @@ write_html_body(
fprintf(out, " <h3 class=\"typedef\"><a id=\"%s\">%s%s</a></h3>\n", name, get_comment_info(description), name); fprintf(out, " <h3 class=\"typedef\"><a id=\"%s\">%s%s</a></h3>\n", name, get_comment_info(description), name);
if (description) if (description)
write_description(out, description, "p", 1); write_description(out, mode, description, "p", 1);
fputs(" <p class=\"code\">\n" fputs(" <p class=\"code\">\n"
"typedef ", out); "typedef ", out);
@ -5218,7 +5222,7 @@ write_html_body(
fprintf(out, " <h3 class=\"variable\"><a id=\"%s\">%s%s</a></h3>\n", name, get_comment_info(description), name); fprintf(out, " <h3 class=\"variable\"><a id=\"%s\">%s%s</a></h3>\n", name, get_comment_info(description), name);
if (description) if (description)
write_description(out, description, "p", 1); write_description(out, mode, description, "p", 1);
fputs(" <p class=\"code\">", out); fputs(" <p class=\"code\">", out);
@ -5248,7 +5252,7 @@ write_html_body(
fprintf(out, " <h3 class=\"enumeration\"><a id=\"%s\">%s%s</a></h3>\n", name, get_comment_info(description), name); fprintf(out, " <h3 class=\"enumeration\"><a id=\"%s\">%s%s</a></h3>\n", name, get_comment_info(description), name);
if (description) if (description)
write_description(out, description, "p", 1); write_description(out, mode, description, "p", 1);
fputs(" <h4 class=\"constants\">Constants</h4>\n" fputs(" <h4 class=\"constants\">Constants</h4>\n"
" <dl>\n", out); " <dl>\n", out);
@ -5264,8 +5268,8 @@ write_html_body(
fprintf(out, " <dt>%s %s</dt>\n", fprintf(out, " <dt>%s %s</dt>\n",
mxmlElementGetAttr(arg, "name"), get_comment_info(description)); mxmlElementGetAttr(arg, "name"), get_comment_info(description));
write_description(out, description, "dd", 1); write_description(out, mode, description, "dd", 1);
write_description(out, description, "dd", 0); write_description(out, mode, description, "dd", 0);
} }
fputs("</dl>\n", out); fputs("</dl>\n", out);
@ -5435,11 +5439,20 @@ write_html_head(FILE *out, /* I - Output file */
"}\n" "}\n"
".variable {\n" ".variable {\n"
"}\n" "}\n"
"blockquote {\n"
" border: solid thin gray;\n"
" box-shadow: 3px 3px 5px rgba(0,0,0,0.5);\n"
" padding: 0px 10px;\n"
" page-break-inside: avoid;\n"
"}\n"
"p code, li code, p.code, pre, ul.code li {\n" "p code, li code, p.code, pre, ul.code li {\n"
" background: rgba(127,127,127,0.1);\n" " background: rgba(127,127,127,0.1);\n"
" border: thin dotted gray;\n" " border: thin dotted gray;\n"
" font-family: monospace;\n" " font-family: monospace;\n"
" font-size: 90%;\n" " font-size: 90%;\n"
" hyphens: manual;\n"
" -webkit-hyphens: manual;\n"
" page-break-inside: avoid;\n"
"}\n" "}\n"
"p.code, pre, ul.code li {\n" "p.code, pre, ul.code li {\n"
" padding: 10px;\n" " padding: 10px;\n"
@ -5681,7 +5694,7 @@ write_man(const char *man_name, /* I - Name of manpage */
NULL, MXML_DESCEND_FIRST); NULL, MXML_DESCEND_FIRST);
printf(".SS %s\n", cname); printf(".SS %s\n", cname);
write_description(stdout, description, NULL, 1); write_description(stdout, OUTPUT_MAN, description, NULL, 1);
printf(".PP\n" printf(".PP\n"
".nf\n" ".nf\n"
@ -5771,7 +5784,7 @@ write_man(const char *man_name, /* I - Name of manpage */
puts("};\n" puts("};\n"
".fi"); ".fi");
write_description(stdout, description, NULL, 0); write_description(stdout, OUTPUT_MAN, description, NULL, 0);
} }
} }
@ -5792,8 +5805,8 @@ write_man(const char *man_name, /* I - Name of manpage */
NULL, MXML_DESCEND_FIRST); NULL, MXML_DESCEND_FIRST);
printf(".SS %s\n", name); printf(".SS %s\n", name);
write_description(stdout, description, NULL, 1); write_description(stdout, OUTPUT_MAN, description, NULL, 1);
write_description(stdout, description, NULL, 0); write_description(stdout, OUTPUT_MAN, description, NULL, 0);
for (arg = mxmlFindElement(scut, scut, "constant", NULL, NULL, for (arg = mxmlFindElement(scut, scut, "constant", NULL, NULL,
MXML_DESCEND_FIRST); MXML_DESCEND_FIRST);
@ -5804,7 +5817,7 @@ write_man(const char *man_name, /* I - Name of manpage */
description = mxmlFindElement(arg, arg, "description", NULL, description = mxmlFindElement(arg, arg, "description", NULL,
NULL, MXML_DESCEND_FIRST); NULL, MXML_DESCEND_FIRST);
printf(".TP 5\n%s\n.br\n", mxmlElementGetAttr(arg, "name")); printf(".TP 5\n%s\n.br\n", mxmlElementGetAttr(arg, "name"));
write_description(stdout, description, NULL, 1); write_description(stdout, OUTPUT_MAN, description, NULL, 1);
} }
} }
} }
@ -5826,7 +5839,7 @@ write_man(const char *man_name, /* I - Name of manpage */
NULL, MXML_DESCEND_FIRST); NULL, MXML_DESCEND_FIRST);
printf(".SS %s\n", name); printf(".SS %s\n", name);
write_description(stdout, description, NULL, 1); write_description(stdout, OUTPUT_MAN, description, NULL, 1);
puts(".PP\n" puts(".PP\n"
".nf"); ".nf");
@ -5866,7 +5879,7 @@ write_man(const char *man_name, /* I - Name of manpage */
puts(".fi"); puts(".fi");
write_description(stdout, description, NULL, 0); write_description(stdout, OUTPUT_MAN, description, NULL, 0);
} }
} }
@ -5887,7 +5900,7 @@ write_man(const char *man_name, /* I - Name of manpage */
NULL, MXML_DESCEND_FIRST); NULL, MXML_DESCEND_FIRST);
printf(".SS %s\n", cname); printf(".SS %s\n", cname);
write_description(stdout, description, NULL, 1); write_description(stdout, OUTPUT_MAN, description, NULL, 1);
printf(".PP\n" printf(".PP\n"
".nf\n" ".nf\n"
@ -5956,7 +5969,7 @@ write_man(const char *man_name, /* I - Name of manpage */
puts("};\n" puts("};\n"
".fi"); ".fi");
write_description(stdout, description, NULL, 0); write_description(stdout, OUTPUT_MAN, description, NULL, 0);
} }
} }
@ -5977,7 +5990,7 @@ write_man(const char *man_name, /* I - Name of manpage */
NULL, MXML_DESCEND_FIRST); NULL, MXML_DESCEND_FIRST);
printf(".SS %s\n", name); printf(".SS %s\n", name);
write_description(stdout, description, NULL, 1); write_description(stdout, OUTPUT_MAN, description, NULL, 1);
fputs(".PP\n" fputs(".PP\n"
".nf\n" ".nf\n"
@ -6020,7 +6033,7 @@ write_man(const char *man_name, /* I - Name of manpage */
puts(".fi"); puts(".fi");
write_description(stdout, description, NULL, 0); write_description(stdout, OUTPUT_MAN, description, NULL, 0);
} }
} }
@ -6041,7 +6054,7 @@ write_man(const char *man_name, /* I - Name of manpage */
NULL, MXML_DESCEND_FIRST); NULL, MXML_DESCEND_FIRST);
printf(".SS %s\n", name); printf(".SS %s\n", name);
write_description(stdout, description, NULL, 1); write_description(stdout, OUTPUT_MAN, description, NULL, 1);
printf(".PP\n" printf(".PP\n"
".nf\n" ".nf\n"
@ -6062,7 +6075,7 @@ write_man(const char *man_name, /* I - Name of manpage */
puts("};\n" puts("};\n"
".fi"); ".fi");
write_description(stdout, description, NULL, 0); write_description(stdout, OUTPUT_MAN, description, NULL, 0);
} }
} }
@ -6083,7 +6096,7 @@ write_man(const char *man_name, /* I - Name of manpage */
NULL, MXML_DESCEND_FIRST); NULL, MXML_DESCEND_FIRST);
printf(".SS %s\n", name); printf(".SS %s\n", name);
write_description(stdout, description, NULL, 1); write_description(stdout, OUTPUT_MAN, description, NULL, 1);
puts(".PP\n" puts(".PP\n"
".nf"); ".nf");
@ -6097,7 +6110,7 @@ write_man(const char *man_name, /* I - Name of manpage */
puts(";\n" puts(";\n"
".fi"); ".fi");
write_description(stdout, description, NULL, 0); write_description(stdout, OUTPUT_MAN, description, NULL, 0);
} }
} }
@ -6166,7 +6179,7 @@ write_scu(FILE *out, /* I - Output file */
fprintf(out, "<h3 class=\"%s\">%s<a id=\"%s\">%s</a></h3>\n", scut->value.element.name, get_comment_info(description), cname, cname); fprintf(out, "<h3 class=\"%s\">%s<a id=\"%s\">%s</a></h3>\n", scut->value.element.name, get_comment_info(description), cname, cname);
if (description) if (description)
write_description(out, description, "p", 1); write_description(out, mode, description, "p", 1);
fprintf(out, "<p class=\"code\">%s %s", scut->value.element.name, cname); fprintf(out, "<p class=\"code\">%s %s", scut->value.element.name, cname);
if ((parent = mxmlElementGetAttr(scut, "parent")) != NULL) if ((parent = mxmlElementGetAttr(scut, "parent")) != NULL)
@ -6280,8 +6293,8 @@ write_scu(FILE *out, /* I - Output file */
fprintf(out, "<dt>%s %s</dt>\n", fprintf(out, "<dt>%s %s</dt>\n",
mxmlElementGetAttr(arg, "name"), get_comment_info(description)); mxmlElementGetAttr(arg, "name"), get_comment_info(description));
write_description(out, description, "dd", 1); write_description(out, mode, description, "dd", 1);
write_description(out, description, "dd", 0); write_description(out, mode, description, "dd", 0);
} }
fputs("</dl>\n", out); fputs("</dl>\n", out);
@ -6306,6 +6319,9 @@ write_string(FILE *out, /* I - Output file */
const char *s, /* I - String to write */ const char *s, /* I - String to write */
int mode) /* I - Output mode */ int mode) /* I - Output mode */
{ {
if (!s)
return;
switch (mode) switch (mode)
{ {
case OUTPUT_DOCSET : case OUTPUT_DOCSET :
@ -6413,7 +6429,7 @@ write_tokens(FILE *out, /* I - Output file */
" <Anchor>%s</Anchor>\n" " <Anchor>%s</Anchor>\n"
" <TokenIdentifier>//apple_ref/cpp/cl/%s</TokenIdentifier>\n" " <TokenIdentifier>//apple_ref/cpp/cl/%s</TokenIdentifier>\n"
" <Abstract>", path, cename, cename); " <Abstract>", path, cename, cename);
write_description(out, description, "", 1); write_description(out, OUTPUT_TOKENS, description, "", 1);
fputs(" </Abstract>\n" fputs(" </Abstract>\n"
" </Token>\n", out); " </Token>\n", out);
@ -6467,7 +6483,7 @@ write_tokens(FILE *out, /* I - Output file */
fputs(")</TokenIdentifier>\n" fputs(")</TokenIdentifier>\n"
" <Abstract>", out); " <Abstract>", out);
write_description(out, description, "", 1); write_description(out, OUTPUT_TOKENS, description, "", 1);
fputs(" </Abstract>\n" fputs(" </Abstract>\n"
" <Declaration>", out); " <Declaration>", out);
@ -6536,7 +6552,7 @@ write_tokens(FILE *out, /* I - Output file */
" <Anchor>%s</Anchor>\n" " <Anchor>%s</Anchor>\n"
" <TokenIdentifier>//apple_ref/c/func/%s</TokenIdentifier>\n" " <TokenIdentifier>//apple_ref/c/func/%s</TokenIdentifier>\n"
" <Abstract>", path, name, name); " <Abstract>", path, name, name);
write_description(out, description, "", 1); write_description(out, OUTPUT_TOKENS, description, "", 1);
fputs(" </Abstract>\n" fputs(" </Abstract>\n"
" <Declaration>", out); " <Declaration>", out);
@ -6602,7 +6618,7 @@ write_tokens(FILE *out, /* I - Output file */
" <Anchor>%s</Anchor>\n" " <Anchor>%s</Anchor>\n"
" <TokenIdentifier>//apple_ref/c/tdef/%s</TokenIdentifier>\n" " <TokenIdentifier>//apple_ref/c/tdef/%s</TokenIdentifier>\n"
" <Abstract>", path, name, name); " <Abstract>", path, name, name);
write_description(out, description, "", 1); write_description(out, OUTPUT_TOKENS, description, "", 1);
fputs(" </Abstract>\n" fputs(" </Abstract>\n"
" </Token>\n", out); " </Token>\n", out);
@ -6627,7 +6643,7 @@ write_tokens(FILE *out, /* I - Output file */
" <Anchor>%s</Anchor>\n" " <Anchor>%s</Anchor>\n"
" <TokenIdentifier>//apple_ref/c/tag/%s</TokenIdentifier>\n" " <TokenIdentifier>//apple_ref/c/tag/%s</TokenIdentifier>\n"
" <Abstract>", path, name, name); " <Abstract>", path, name, name);
write_description(out, description, "", 1); write_description(out, OUTPUT_TOKENS, description, "", 1);
fputs(" </Abstract>\n" fputs(" </Abstract>\n"
" </Token>\n", out); " </Token>\n", out);
@ -6652,7 +6668,7 @@ write_tokens(FILE *out, /* I - Output file */
" <Anchor>%s</Anchor>\n" " <Anchor>%s</Anchor>\n"
" <TokenIdentifier>//apple_ref/c/tag/%s</TokenIdentifier>\n" " <TokenIdentifier>//apple_ref/c/tag/%s</TokenIdentifier>\n"
" <Abstract>", path, name, name); " <Abstract>", path, name, name);
write_description(out, description, "", 1); write_description(out, OUTPUT_TOKENS, description, "", 1);
fputs(" </Abstract>\n" fputs(" </Abstract>\n"
" </Token>\n", out); " </Token>\n", out);
@ -6677,7 +6693,7 @@ write_tokens(FILE *out, /* I - Output file */
" <Anchor>%s</Anchor>\n" " <Anchor>%s</Anchor>\n"
" <TokenIdentifier>//apple_ref/c/data/%s</TokenIdentifier>\n" " <TokenIdentifier>//apple_ref/c/data/%s</TokenIdentifier>\n"
" <Abstract>", path, name, name); " <Abstract>", path, name, name);
write_description(out, description, "", 1); write_description(out, OUTPUT_TOKENS, description, "", 1);
fputs(" </Abstract>\n" fputs(" </Abstract>\n"
" </Token>\n", out); " </Token>\n", out);
@ -6702,7 +6718,7 @@ write_tokens(FILE *out, /* I - Output file */
" <Anchor>%s</Anchor>\n" " <Anchor>%s</Anchor>\n"
" <TokenIdentifier>//apple_ref/c/tag/%s</TokenIdentifier>\n" " <TokenIdentifier>//apple_ref/c/tag/%s</TokenIdentifier>\n"
" <Abstract>", path, cename, cename); " <Abstract>", path, cename, cename);
write_description(out, description, "", 1); write_description(out, OUTPUT_TOKENS, description, "", 1);
fputs(" </Abstract>\n" fputs(" </Abstract>\n"
" </Token>\n", out); " </Token>\n", out);
@ -6720,7 +6736,7 @@ write_tokens(FILE *out, /* I - Output file */
" <Anchor>%s</Anchor>\n" " <Anchor>%s</Anchor>\n"
" <TokenIdentifier>//apple_ref/c/econst/%s</TokenIdentifier>\n" " <TokenIdentifier>//apple_ref/c/econst/%s</TokenIdentifier>\n"
" <Abstract>", path, cename, name); " <Abstract>", path, cename, name);
write_description(out, description, "", 1); write_description(out, OUTPUT_TOKENS, description, "", 1);
fputs(" </Abstract>\n" fputs(" </Abstract>\n"
" </Token>\n", out); " </Token>\n", out);
} }

Loading…
Cancel
Save