doco updates

web
Michael R Sweet 21 years ago
parent 9961add0d4
commit d18b4626fd
  1. 104
      documentation.html
  2. 144
      index.html
  3. 14
      mxml-file.c
  4. 72
      mxml.xml
  5. 7
      mxmldoc.c

@ -70,18 +70,12 @@ MXML_ADD_TO_PARENT can be used to specify a NULL child pointer.</p>
<pre>
void
mxmlAdd(
<a href="#mxml_node_t">mxml_node_t</a> * parent,
int where,
<a href="#mxml_node_t">mxml_node_t</a> * child,
<a href="#mxml_node_t">mxml_node_t</a> * node);
<a href="#mxml_node_t">mxml_node_t</a> *parent, int where, <a href="#mxml_node_t">mxml_node_t</a> *child, <a href="#mxml_node_t">mxml_node_t</a> * node);
</pre>
<h3>Arguments</h3>
<p class="table"><table align="center" border="1" width="80%">
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>parent</tt></td><td>Parent node</td></tr>
<tr><td><tt>where</tt></td><td>Where to add, MXML_ADD_BEFORE or MXML_ADD_AFTER</td></tr>
<tr><td><tt>child</tt></td><td>Child node for where or MXML_ADD_TO_PARENT</td></tr>
<tr><td><tt>node</tt></td><td>Node to add</td></tr>
</tbody></table></p>
<h3>Returns</h3>
@ -116,14 +110,12 @@ named attribute does not exist.</p>
<pre>
const char *
mxmlElementGetAttr(
<a href="#mxml_node_t">mxml_node_t</a> * node,
const char * name);
<a href="#mxml_node_t">mxml_node_t</a> *node, const char * name);
</pre>
<h3>Arguments</h3>
<p class="table"><table align="center" border="1" width="80%">
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>node</tt></td><td>Element node</td></tr>
<tr><td><tt>name</tt></td><td>Name of attribute</td></tr>
</tbody></table></p>
<h3>Returns</h3>
@ -140,16 +132,12 @@ not an element.</p>
<pre>
void
mxmlElementSetAttr(
<a href="#mxml_node_t">mxml_node_t</a> * node,
const char * name,
const char * value);
<a href="#mxml_node_t">mxml_node_t</a> *node, const char *name, const char * value);
</pre>
<h3>Arguments</h3>
<p class="table"><table align="center" border="1" width="80%">
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>node</tt></td><td>Element node</td></tr>
<tr><td><tt>name</tt></td><td>Name of attribute</td></tr>
<tr><td><tt>value</tt></td><td>Attribute value</td></tr>
</tbody></table></p>
<h3>Returns</h3>
@ -170,22 +158,12 @@ constrains the search to a particular node's children.</p>
<pre>
<a href="#mxml_node_t">mxml_node_t</a> *
mxmlFindElement(
<a href="#mxml_node_t">mxml_node_t</a> * node,
<a href="#mxml_node_t">mxml_node_t</a> * top,
const char * name,
const char * attr,
const char * value,
int descend);
<a href="#mxml_node_t">mxml_node_t</a> *node, <a href="#mxml_node_t">mxml_node_t</a> *top, const char *name, const char *attr, const char *value, int descend);
</pre>
<h3>Arguments</h3>
<p class="table"><table align="center" border="1" width="80%">
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>node</tt></td><td>Current node</td></tr>
<tr><td><tt>top</tt></td><td>Top node</td></tr>
<tr><td><tt>name</tt></td><td>Element name or NULL for any</td></tr>
<tr><td><tt>attr</tt></td><td>Attribute name, or NULL for none</td></tr>
<tr><td><tt>value</tt></td><td>Attribute value, or NULL for any</td></tr>
<tr><td><tt>descend</tt></td><td>Descend into tree - MXML_DESCEND, MXML_NO_DESCEND, or MXML_DESCEND_FIRST</td></tr>
</tbody></table></p>
<h3>Returns</h3>
@ -204,17 +182,13 @@ MXML_ELEMENT or MXML_TEXT nodes.</p>
<pre>
<a href="#mxml_node_t">mxml_node_t</a> *
mxmlLoadFile(
<a href="#mxml_node_t">mxml_node_t</a> * top,
FILE * fp,
<a href="#mxml_type_t">mxml_type_t</a> (*cb)(mxml_node_t *));
<a href="#mxml_node_t">mxml_node_t</a> *top, FILE *fp, <a href="#mxml_type_t">mxml_type_t</a> (*cb)(mxml_node_t *node));
</pre>
<h3>Arguments</h3>
<p class="table"><table align="center" border="1" width="80%">
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>top</tt></td><td>Top node</td></tr>
<tr><td><tt>fp</tt></td><td>File to read from</td></tr>
<tr><td><tt>(*cb)(mxml_node_t *)</tt></td><td>Callback function or MXML_NO_CALLBACK</td></tr>
<tr><td><tt>(*cb)(mxml_node_t *node)</tt></td><td>Callback function or MXML_NO_CALLBACK</td></tr>
</tbody></table></p>
<h3>Returns</h3>
<p>First node or NULL if the file could not be read.</p>
@ -232,17 +206,13 @@ MXML_ELEMENT or MXML_TEXT nodes.</p>
<pre>
<a href="#mxml_node_t">mxml_node_t</a> *
mxmlLoadString(
<a href="#mxml_node_t">mxml_node_t</a> * top,
const char * s,
<a href="#mxml_type_t">mxml_type_t</a> (*cb)(mxml_node_t *));
<a href="#mxml_node_t">mxml_node_t</a> *top, const char *s, <a href="#mxml_type_t">mxml_type_t</a> (*cb)(mxml_node_t *node));
</pre>
<h3>Arguments</h3>
<p class="table"><table align="center" border="1" width="80%">
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>top</tt></td><td>Top node</td></tr>
<tr><td><tt>s</tt></td><td>String to load</td></tr>
<tr><td><tt>(*cb)(mxml_node_t *)</tt></td><td>Callback function or MXML_NO_CALLBACK</td></tr>
<tr><td><tt>(*cb)(mxml_node_t *node)</tt></td><td>Callback function or MXML_NO_CALLBACK</td></tr>
</tbody></table></p>
<h3>Returns</h3>
<p>First node or NULL if the string has errors.</p>
@ -257,14 +227,12 @@ element node has no parent.</p>
<pre>
<a href="#mxml_node_t">mxml_node_t</a> *
mxmlNewElement(
<a href="#mxml_node_t">mxml_node_t</a> * parent,
const char * name);
<a href="#mxml_node_t">mxml_node_t</a> *parent, const char * name);
</pre>
<h3>Arguments</h3>
<p class="table"><table align="center" border="1" width="80%">
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>parent</tt></td><td>Parent node or MXML_NO_PARENT</td></tr>
<tr><td><tt>name</tt></td><td>Name of element</td></tr>
</tbody></table></p>
<h3>Returns</h3>
@ -280,14 +248,12 @@ integer node has no parent.</p>
<pre>
<a href="#mxml_node_t">mxml_node_t</a> *
mxmlNewInteger(
<a href="#mxml_node_t">mxml_node_t</a> * parent,
int integer);
<a href="#mxml_node_t">mxml_node_t</a> *parent, int integer);
</pre>
<h3>Arguments</h3>
<p class="table"><table align="center" border="1" width="80%">
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>parent</tt></td><td>Parent node or MXML_NO_PARENT</td></tr>
<tr><td><tt>integer</tt></td><td>Integer value</td></tr>
</tbody></table></p>
<h3>Returns</h3>
@ -304,14 +270,12 @@ is copied into the new node.</p>
<pre>
<a href="#mxml_node_t">mxml_node_t</a> *
mxmlNewOpaque(
<a href="#mxml_node_t">mxml_node_t</a> * parent,
const char * opaque);
<a href="#mxml_node_t">mxml_node_t</a> *parent, const char * opaque);
</pre>
<h3>Arguments</h3>
<p class="table"><table align="center" border="1" width="80%">
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>parent</tt></td><td>Parent node or MXML_NO_PARENT</td></tr>
<tr><td><tt>opaque</tt></td><td>Opaque string</td></tr>
</tbody></table></p>
<h3>Returns</h3>
@ -327,14 +291,12 @@ the new real number node has no parent.</p>
<pre>
<a href="#mxml_node_t">mxml_node_t</a> *
mxmlNewReal(
<a href="#mxml_node_t">mxml_node_t</a> * parent,
double real);
<a href="#mxml_node_t">mxml_node_t</a> *parent, double real);
</pre>
<h3>Arguments</h3>
<p class="table"><table align="center" border="1" width="80%">
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>parent</tt></td><td>Parent node or MXML_NO_PARENT</td></tr>
<tr><td><tt>real</tt></td><td>Real number value</td></tr>
</tbody></table></p>
<h3>Returns</h3>
@ -352,16 +314,12 @@ string must be nul-terminated and is copied into the new node.</p>
<pre>
<a href="#mxml_node_t">mxml_node_t</a> *
mxmlNewText(
<a href="#mxml_node_t">mxml_node_t</a> * parent,
int whitespace,
const char * string);
<a href="#mxml_node_t">mxml_node_t</a> *parent, int whitespace, const char * string);
</pre>
<h3>Arguments</h3>
<p class="table"><table align="center" border="1" width="80%">
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>parent</tt></td><td>Parent node or MXML_NO_PARENT</td></tr>
<tr><td><tt>whitespace</tt></td><td>1 = leading whitespace, 0 = no whitespace</td></tr>
<tr><td><tt>string</tt></td><td>String</td></tr>
</tbody></table></p>
<h3>Returns</h3>
@ -399,15 +357,13 @@ allocated.</p>
<pre>
char *
mxmlSaveAllocString(
<a href="#mxml_node_t">mxml_node_t</a> * node,
int (*cb)(mxml_node_t *int));
<a href="#mxml_node_t">mxml_node_t</a> *node, int (*cb)(mxml_node_t *node, int ws));
</pre>
<h3>Arguments</h3>
<p class="table"><table align="center" border="1" width="80%">
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>node</tt></td><td>Node to write</td></tr>
<tr><td><tt>(*cb)(mxml_node_t *int)</tt></td><td>Whitespace callback or MXML_NO_CALLBACK</td></tr>
<tr><td><tt>(*cb)(mxml_node_t *node, int ws)</tt></td><td>Whitespace callback or MXML_NO_CALLBACK</td></tr>
</tbody></table></p>
<h3>Returns</h3>
<p>Allocated string or NULL</p>
@ -424,17 +380,13 @@ element tags.</p>
<pre>
int
mxmlSaveFile(
<a href="#mxml_node_t">mxml_node_t</a> * node,
FILE * fp,
int (*cb)(mxml_node_t *int));
<a href="#mxml_node_t">mxml_node_t</a> *node, FILE *fp, int (*cb)(mxml_node_t *node, int ws));
</pre>
<h3>Arguments</h3>
<p class="table"><table align="center" border="1" width="80%">
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>node</tt></td><td>Node to write</td></tr>
<tr><td><tt>fp</tt></td><td>File to write to</td></tr>
<tr><td><tt>(*cb)(mxml_node_t *int)</tt></td><td>Whitespace callback or MXML_NO_CALLBACK</td></tr>
<tr><td><tt>(*cb)(mxml_node_t *node, int ws)</tt></td><td>Whitespace callback or MXML_NO_CALLBACK</td></tr>
</tbody></table></p>
<h3>Returns</h3>
<p>0 on success, -1 on error.</p>
@ -449,19 +401,13 @@ into the specified buffer.</p>
<pre>
int
mxmlSaveString(
<a href="#mxml_node_t">mxml_node_t</a> * node,
char * buffer,
int bufsize,
int (*cb)(mxml_node_t *int));
<a href="#mxml_node_t">mxml_node_t</a> *node, char *buffer, int bufsize, int (*cb)(mxml_node_t *node, int ws));
</pre>
<h3>Arguments</h3>
<p class="table"><table align="center" border="1" width="80%">
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>node</tt></td><td>Node to write</td></tr>
<tr><td><tt>buffer</tt></td><td>String buffer</td></tr>
<tr><td><tt>bufsize</tt></td><td>Size of string buffer</td></tr>
<tr><td><tt>(*cb)(mxml_node_t *int)</tt></td><td>Whitespace callback or MXML_NO_CALLBACK</td></tr>
<tr><td><tt>(*cb)(mxml_node_t *node, int ws)</tt></td><td>Whitespace callback or MXML_NO_CALLBACK</td></tr>
</tbody></table></p>
<h3>Returns</h3>
<p>Size of string</p>
@ -476,16 +422,12 @@ the node's children.</p>
<pre>
<a href="#mxml_node_t">mxml_node_t</a> *
mxmlWalkNext(
<a href="#mxml_node_t">mxml_node_t</a> * node,
<a href="#mxml_node_t">mxml_node_t</a> * top,
int descend);
<a href="#mxml_node_t">mxml_node_t</a> *node, <a href="#mxml_node_t">mxml_node_t</a> *top, int descend);
</pre>
<h3>Arguments</h3>
<p class="table"><table align="center" border="1" width="80%">
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>node</tt></td><td>Current node</td></tr>
<tr><td><tt>top</tt></td><td>Top node</td></tr>
<tr><td><tt>descend</tt></td><td>Descend into tree - MXML_DESCEND, MXML_NO_DESCEND, or MXML_DESCEND_FIRST</td></tr>
</tbody></table></p>
<h3>Returns</h3>
@ -501,16 +443,12 @@ the walk to the node's children.</p>
<pre>
<a href="#mxml_node_t">mxml_node_t</a> *
mxmlWalkPrev(
<a href="#mxml_node_t">mxml_node_t</a> * node,
<a href="#mxml_node_t">mxml_node_t</a> * top,
int descend);
<a href="#mxml_node_t">mxml_node_t</a> *node, <a href="#mxml_node_t">mxml_node_t</a> *top, int descend);
</pre>
<h3>Arguments</h3>
<p class="table"><table align="center" border="1" width="80%">
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>node</tt></td><td>Current node</td></tr>
<tr><td><tt>top</tt></td><td>Top node</td></tr>
<tr><td><tt>descend</tt></td><td>Descend into tree - MXML_DESCEND, MXML_NO_DESCEND, or MXML_DESCEND_FIRST</td></tr>
</tbody></table></p>
<h3>Returns</h3>

@ -103,6 +103,8 @@ href="testmxml.c">testmxml.c</a></tt> and <tt><a
href="mxmldoc.c">mxmldoc.c</a></tt> source files for examples of
using Mini-XML.</p>
<h3>The Basics</h3>
<p>Mini-XML provides a single header file which you include:</p>
<pre>
@ -129,6 +131,54 @@ href="documentation.html#mxmlNewText"><tt>mxmlNewText()</tt></a>
functions. Only elements can have child nodes, and the top node
must be an element, usually "?xml".</p>
<p>Each node has pointers for the node above (<tt>parent</tt>), below (<tt>child</tt>),
to the left (<tt>prev</tt>), and to the right (<tt>next</tt>) of the current
node. If you have an XML file like the following:</p>
<pre>
&lt;?xml version="1.0"?>
&lt;node>val1&lt;/node>
&lt;node>val2&lt;/node>
&lt;node>val3&lt;/node>
&lt;group>
&lt;node>val4&lt;/node>
&lt;node>val5&lt;/node>
&lt;node>val6&lt;/node>
&lt;/group>
&lt;node>val7&lt;/node>
&lt;node>val8&lt;/node>
&lt;node>val9&lt;/node>
</pre>
<p>the node tree returned by <tt>mxmlLoadFile()</tt> would look
like the following in memory:</p>
<pre>
?xml
|
node - node - node - group - node - node - node
| | | | | | |
val1 val2 val3 | val7 val8 val9
|
node - node - node
| | |
val4 val5 val6
</pre>
<p>where "-" is a pointer to the next node and "|" is a pointer
to the first child node.</p>
<p>Once you are done with the XML data, use the <a
href="documentation.html#mxmlDelete"><tt>mxmlDelete()</tt></a>
function to recursively free the memory that is used for a
particular node or the entire tree:</p>
<pre>
mxmlDelete(tree);
</pre>
<h3>Loading and Saving XML Files</h3>
<p>You load an XML file using the <a
href="documentation.html#mxmlLoadFile"><tt>mxmlLoadFile()</tt></a>
function:</p>
@ -142,6 +192,15 @@ tree = mxmlLoadFile(NULL, fp, MXML_NO_CALLBACK);
fclose(fp);
</pre>
<p>The third argument specifies a callback function which
returns the value type of the immediate children for a new
element node: <tt>MXML_INTEGER</tt>, <tt>MXML_OPAQUE</tt>,
<tt>MXML_REAL</tt>, or <tt>MXML_TEXT</tt>. This function is
called <i>after</i> the element and its attributes have been
read, so you can look at the element name, attributes, and
attribute values to determine the proper value type to return.
The default value type is MXML_TEXT if no callback is used.</p>
<p>Similarly, you save an XML file using the <a
href="documentation.html#mxmlSaveFile"><tt>mxmlSaveFile()</tt></a>
function:</p>
@ -155,6 +214,16 @@ mxmlSaveFile(tree, fp, MXML_NO_CALLBACK);
fclose(fp);
</pre>
<p>Callback functions for saving are used to optionally insert
whitespace before and after elements in the node tree. Your
function will be called up to four times for each element node
with a pointer to the node and a "where" value of
<tt>MXML_WS_BEFORE_OPEN</tt>, <tt>MXML_WS_AFTER_OPEN</tt>,
<tt>MXML_WS_BEFORE_CLOSE</tt>, or <tt>MXML_WS_AFTER_CLOSE</tt>.
The callback function should return 0 if no whitespace should be
added and the character to insert (space, tab, newline)
otherwise.</p>
<p>The <a
href="documentation.html#mxmlLoadString"><tt>mxmlLoadString()</tt></a>,
<a
@ -179,7 +248,21 @@ mxmlSaveString(tree, buffer, sizeof(buffer), MXML_NO_CALLBACK);
ptr = mxmlSaveAllocString(tree, MXML_NO_CALLBACK);
</pre>
<p>You can find a named element/node using the <a
<h3>Finding and Iterating Nodes</h3>
<p>The <a
href="documentation.html#mxmlWalkPrev"><tt>mxmlWalkPrev()</tt></a>
and <a
href="documentation.html#mxmlWalkNext"><tt>mxmlWalkNext()</tt></a>functions
can be used to iterate through the XML node tree:</p>
<pre>
mxml_node_t *node = mxmlWalkPrev(current, tree, MXML_DESCEND);
mxml_node_t *node = mxmlWalkNext(current, tree, MXML_DESCEND);
</pre>
<p>In addition, you can find a named element/node using the <a
href="documentation.html#mxmlFindElement"><tt>mxmlFindElement()</tt></a>
function:</p>
@ -223,15 +306,64 @@ for (node = mxmlFindElement(tree, tree, "name", NULL, NULL, MXML_DESCEND);
}
</pre>
<p>Finally, once you are done with the XML data, use the <a
href="documentation.html#mxmlDelete"><tt>mxmlDelete()</tt></a>
function to recursively free the memory that is used for a
particular node or the entire tree:</p>
<p>The <tt>MXML_DESCEND</tt> argument can actually be one of three constants:</p>
<ul>
<li><tt>MXML_NO_DESCEND</tt> means to not to look at any
child nodes in the element hierarchy, just look at
siblings at the same level or parent nodes until the top
node or top-of-tree is reached. The previous node from
"group" would be the "node" element to the left, while
the next node from "group" would be the "node" element
to the right.</li>
<li><tt>MXML_DESCEND_FIRST</tt> means that it is OK to
descend to the first child of a node, but not to descend
further when searching. You'll normally use this when
iterating through direct children of a parent node, e.g.
all of the "node" elements under the "?xml" parent node
in the example above. This mode is only applicable to
the search function; the walk functions treat this as
<tt>MXML_DESCEND</tt> since every call is a first
time.</li>
<li><tt>MXML_DESCEND</tt> means to keep descending until
you hit the bottom of the tree. The previous node from
"group" would be the "val3" node and the next node would
be the first node element under "group". If you were to
walk from the root node "?xml" to the end of the
tree with <tt>mxmlWalkNext()</tt>, the order would be:
<pre>
mxmlDelete(tree);
?xml
node
val1
node
val2
node
val3
group
node
val4
node
val5
node
val6
node
val7
node
val8
node
val9
</pre>
<p>If you started at "val9" and walked using
<tt>mxmlWalkPrev()</tt>, the order would be reversed,
ending at "?xml".</p></li>
</ul>
<h2>Getting Help and Reporting Problems</h2>
<p>You can email me at "mxml <i>at</i> easysw <i>dot</i> com" to

@ -1,5 +1,5 @@
/*
* "$Id: mxml-file.c,v 1.18 2003/07/23 14:47:17 mike Exp $"
* "$Id: mxml-file.c,v 1.19 2003/07/26 17:24:14 mike Exp $"
*
* File loading code for mini-XML, a small XML-like file parsing library.
*
@ -80,7 +80,7 @@ static int mxml_write_ws(mxml_node_t *node, void *p,
mxml_node_t * /* O - First node or NULL if the file could not be read. */
mxmlLoadFile(mxml_node_t *top, /* I - Top node */
FILE *fp, /* I - File to read from */
mxml_type_t (*cb)(mxml_node_t *))
mxml_type_t (*cb)(mxml_node_t *node))
/* I - Callback function or MXML_NO_CALLBACK */
{
return (mxml_load_data(top, fp, cb, mxml_file_getc));
@ -101,7 +101,7 @@ mxmlLoadFile(mxml_node_t *top, /* I - Top node */
mxml_node_t * /* O - First node or NULL if the string has errors. */
mxmlLoadString(mxml_node_t *top, /* I - Top node */
const char *s, /* I - String to load */
mxml_type_t (*cb)(mxml_node_t *))
mxml_type_t (*cb)(mxml_node_t *node))
/* I - Callback function or MXML_NO_CALLBACK */
{
return (mxml_load_data(top, &s, cb, mxml_string_getc));
@ -120,7 +120,7 @@ mxmlLoadString(mxml_node_t *top, /* I - Top node */
char * /* O - Allocated string or NULL */
mxmlSaveAllocString(mxml_node_t *node, /* I - Node to write */
int (*cb)(mxml_node_t *, int))
int (*cb)(mxml_node_t *node, int ws))
/* I - Whitespace callback or MXML_NO_CALLBACK */
{
int bytes; /* Required bytes */
@ -178,7 +178,7 @@ mxmlSaveAllocString(mxml_node_t *node, /* I - Node to write */
int /* O - 0 on success, -1 on error. */
mxmlSaveFile(mxml_node_t *node, /* I - Node to write */
FILE *fp, /* I - File to write to */
int (*cb)(mxml_node_t *, int))
int (*cb)(mxml_node_t *node, int ws))
/* I - Whitespace callback or MXML_NO_CALLBACK */
{
int col; /* Final column */
@ -215,7 +215,7 @@ int /* O - Size of string */
mxmlSaveString(mxml_node_t *node, /* I - Node to write */
char *buffer, /* I - String buffer */
int bufsize, /* I - Size of string buffer */
int (*cb)(mxml_node_t *, int))
int (*cb)(mxml_node_t *node, int ws))
/* I - Whitespace callback or MXML_NO_CALLBACK */
{
int col; /* Final column */
@ -1432,5 +1432,5 @@ mxml_write_ws(mxml_node_t *node, /* I - Current node */
/*
* End of "$Id: mxml-file.c,v 1.18 2003/07/23 14:47:17 mike Exp $".
* End of "$Id: mxml-file.c,v 1.19 2003/07/26 17:24:14 mike Exp $".
*/

@ -7,10 +7,8 @@ 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.</description><argument
name="parent" direction="I"><type>mxml_node_t *</type><description>Parent node</description></argument>
<argument name="where" direction="I"><type>int</type><description>Where to add, MXML_ADD_BEFORE or MXML_ADD_AFTER</description></argument>
<argument name="child" direction="I"><type>mxml_node_t *</type><description>Child node for where or MXML_ADD_TO_PARENT</description></argument>
<argument name="node" direction="I"><type>mxml_node_t *</type><description>Node to add</description></argument>
name="node" direction="I"><type>mxml_node_t *parent, int where, mxml_node_t
*child, mxml_node_t *</type><description>Node to add</description></argument>
</function>
<function name="mxmlDelete"><description>Delete a node and all of its children.
@ -24,8 +22,7 @@ char *</type></returnvalue>
This function returns NULL if the node is not an element or the
named attribute does not exist.</description><argument
name="node" direction="I"><type>mxml_node_t *</type><description>Element node</description></argument>
<argument name="name" direction="I"><type>const char *</type><description>Name of attribute</description></argument>
name="name" direction="I"><type>mxml_node_t *node, const char *</type><description>Name of attribute</description></argument>
</function>
<function name="mxmlElementSetAttr"><description>Set an attribute.
@ -33,9 +30,8 @@ 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.</description><argument
name="node" direction="I"><type>mxml_node_t *</type><description>Element node</description></argument>
<argument name="name" direction="I"><type>const char *</type><description>Name of attribute</description></argument>
<argument name="value" direction="I"><type>const char *</type><description>Attribute value</description></argument>
name="value" direction="I"><type>mxml_node_t *node, const char *name, const
char *</type><description>Attribute value</description></argument>
</function>
<function name="mxmlFindElement"><returnvalue><description>Element node or NULL</description><type>mxml_node_t
*</type></returnvalue>
@ -49,12 +45,8 @@ 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.</description><argument
name="node" direction="I"><type>mxml_node_t *</type><description>Current node</description></argument>
<argument name="top" direction="I"><type>mxml_node_t *</type><description>Top node</description></argument>
<argument name="name" direction="I"><type>const char *</type><description>Element name or NULL for any</description></argument>
<argument name="attr" direction="I"><type>const char *</type><description>Attribute name, or NULL for none</description></argument>
<argument name="value" direction="I"><type>const char *</type><description>Attribute value, or NULL for any</description></argument>
<argument name="descend" direction="I"><type>int</type><description>Descend into tree - MXML_DESCEND, MXML_NO_DESCEND, or MXML_DESCEND_FIRST</description></argument>
name="descend" direction="I"><type>mxml_node_t *node, mxml_node_t *top, const
char *name, const char *attr, const char *value, int</type><description>Descend into tree - MXML_DESCEND, MXML_NO_DESCEND, or MXML_DESCEND_FIRST</description></argument>
</function>
<function name="mxmlLoadFile"><returnvalue><description>First node or NULL if the file could not be read.</description><type>mxml_node_t
*</type></returnvalue>
@ -66,9 +58,8 @@ 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.</description><argument
name="top" direction="I"><type>mxml_node_t *</type><description>Top node</description></argument>
<argument name="fp" direction="I"><type>FILE *</type><description>File to read from</description></argument>
<argument name="(*cb)(mxml_node_t *)" direction="I"><type>mxml_type_t</type><description>Callback function or MXML_NO_CALLBACK</description></argument>
name="(*cb)(mxml_node_t *node)" direction="I"><type>mxml_node_t *top, FILE
*fp, mxml_type_t</type><description>Callback function or MXML_NO_CALLBACK</description></argument>
</function>
<function name="mxmlLoadString"><returnvalue><description>First node or NULL if the string has errors.</description><type>mxml_node_t
*</type></returnvalue>
@ -80,9 +71,8 @@ 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.</description><argument
name="top" direction="I"><type>mxml_node_t *</type><description>Top node</description></argument>
<argument name="s" direction="I"><type>const char *</type><description>String to load</description></argument>
<argument name="(*cb)(mxml_node_t *)" direction="I"><type>mxml_type_t</type><description>Callback function or MXML_NO_CALLBACK</description></argument>
name="(*cb)(mxml_node_t *node)" direction="I"><type>mxml_node_t *top, const
char *s, mxml_type_t</type><description>Callback function or MXML_NO_CALLBACK</description></argument>
</function>
<function name="mxmlNewElement"><returnvalue><description>New node</description><type>mxml_node_t
*</type></returnvalue>
@ -91,8 +81,7 @@ name="top" direction="I"><type>mxml_node_t *</type><description>Top node</descri
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.</description><argument
name="parent" direction="I"><type>mxml_node_t *</type><description>Parent node or MXML_NO_PARENT</description></argument>
<argument name="name" direction="I"><type>const char *</type><description>Name of element</description></argument>
name="name" direction="I"><type>mxml_node_t *parent, const char *</type><description>Name of element</description></argument>
</function>
<function name="mxmlNewInteger"><returnvalue><description>New node</description><type>mxml_node_t
*</type></returnvalue>
@ -101,8 +90,7 @@ name="parent" direction="I"><type>mxml_node_t *</type><description>Parent node o
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.</description><argument
name="parent" direction="I"><type>mxml_node_t *</type><description>Parent node or MXML_NO_PARENT</description></argument>
<argument name="integer" direction="I"><type>int</type><description>Integer value</description></argument>
name="integer" direction="I"><type>mxml_node_t *parent, int</type><description>Integer value</description></argument>
</function>
<function name="mxmlNewOpaque"><returnvalue><description>New node</description><type>mxml_node_t
*</type></returnvalue>
@ -112,8 +100,7 @@ The new opaque 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
opaque node has no parent. The opaque string must be nul-terminated and
is copied into the new node.</description><argument
name="parent" direction="I"><type>mxml_node_t *</type><description>Parent node or MXML_NO_PARENT</description></argument>
<argument name="opaque" direction="I"><type>const char *</type><description>Opaque string</description></argument>
name="opaque" direction="I"><type>mxml_node_t *parent, const char *</type><description>Opaque string</description></argument>
</function>
<function name="mxmlNewReal"><returnvalue><description>New node</description><type>mxml_node_t
*</type></returnvalue>
@ -122,8 +109,7 @@ name="parent" direction="I"><type>mxml_node_t *</type><description>Parent node o
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.</description><argument
name="parent" direction="I"><type>mxml_node_t *</type><description>Parent node or MXML_NO_PARENT</description></argument>
<argument name="real" direction="I"><type>double</type><description>Real number value</description></argument>
name="real" direction="I"><type>mxml_node_t *parent, double</type><description>Real number value</description></argument>
</function>
<function name="mxmlNewText"><returnvalue><description>New node</description><type>mxml_node_t
*</type></returnvalue>
@ -134,9 +120,8 @@ 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.</description><argument
name="parent" direction="I"><type>mxml_node_t *</type><description>Parent node or MXML_NO_PARENT</description></argument>
<argument name="whitespace" direction="I"><type>int</type><description>1 = leading whitespace, 0 = no whitespace</description></argument>
<argument name="string" direction="I"><type>const char *</type><description>String</description></argument>
name="string" direction="I"><type>mxml_node_t *parent, int whitespace, const
char *</type><description>String</description></argument>
</function>
<function name="mxmlRemove"><description>Remove a node from its parent.
@ -153,8 +138,8 @@ 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.</description><argument
name="node" direction="I"><type>mxml_node_t *</type><description>Node to write</description></argument>
<argument name="(*cb)(mxml_node_t *int)" direction="I"><type>int</type><description>Whitespace callback or MXML_NO_CALLBACK</description></argument>
name="(*cb)(mxml_node_t *node, int ws)" direction="I"><type>mxml_node_t *node,
int</type><description>Whitespace callback or MXML_NO_CALLBACK</description></argument>
</function>
<function name="mxmlSaveFile"><returnvalue><description>0 on success, -1 on error.</description><type>int</type></returnvalue>
<description>Save an XML tree to a file.
@ -164,9 +149,8 @@ character or nul (0) 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.</description><argument
name="node" direction="I"><type>mxml_node_t *</type><description>Node to write</description></argument>
<argument name="fp" direction="I"><type>FILE *</type><description>File to write to</description></argument>
<argument name="(*cb)(mxml_node_t *int)" direction="I"><type>int</type><description>Whitespace callback or MXML_NO_CALLBACK</description></argument>
name="(*cb)(mxml_node_t *node, int ws)" direction="I"><type>mxml_node_t *node,
FILE *fp, int</type><description>Whitespace callback or MXML_NO_CALLBACK</description></argument>
</function>
<function name="mxmlSaveString"><returnvalue><description>Size of string</description><type>int</type></returnvalue>
<description>Save an XML node tree to a string.
@ -174,10 +158,8 @@ name="node" direction="I"><type>mxml_node_t *</type><description>Node to write</
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.</description><argument
name="node" direction="I"><type>mxml_node_t *</type><description>Node to write</description></argument>
<argument name="buffer" direction="I"><type>char *</type><description>String buffer</description></argument>
<argument name="bufsize" direction="I"><type>int</type><description>Size of string buffer</description></argument>
<argument name="(*cb)(mxml_node_t *int)" direction="I"><type>int</type><description>Whitespace callback or MXML_NO_CALLBACK</description></argument>
name="(*cb)(mxml_node_t *node, int ws)" direction="I"><type>mxml_node_t *node,
char *buffer, int bufsize, int</type><description>Whitespace callback or MXML_NO_CALLBACK</description></argument>
</function>
<function name="mxmlWalkNext"><returnvalue><description>Next node or NULL</description><type>mxml_node_t
*</type></returnvalue>
@ -186,9 +168,7 @@ name="node" direction="I"><type>mxml_node_t *</type><description>Node to write</
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.</description><argument
name="node" direction="I"><type>mxml_node_t *</type><description>Current node</description></argument>
<argument name="top" direction="I"><type>mxml_node_t *</type><description>Top node</description></argument>
<argument name="descend" direction="I"><type>int</type><description>Descend into tree - MXML_DESCEND, MXML_NO_DESCEND, or MXML_DESCEND_FIRST</description></argument>
name="descend" direction="I"><type>mxml_node_t *node, mxml_node_t *top, int</type><description>Descend into tree - MXML_DESCEND, MXML_NO_DESCEND, or MXML_DESCEND_FIRST</description></argument>
</function>
<function name="mxmlWalkPrev"><returnvalue><description>Previous node or NULL</description><type>mxml_node_t
*</type></returnvalue>
@ -197,9 +177,7 @@ name="node" direction="I"><type>mxml_node_t *</type><description>Current node</d
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.</description><argument
name="node" direction="I"><type>mxml_node_t *</type><description>Current node</description></argument>
<argument name="top" direction="I"><type>mxml_node_t *</type><description>Top node</description></argument>
<argument name="descend" direction="I"><type>int</type><description>Descend into tree - MXML_DESCEND, MXML_NO_DESCEND, or MXML_DESCEND_FIRST</description></argument>
name="descend" direction="I"><type>mxml_node_t *node, mxml_node_t *top, int</type><description>Descend into tree - MXML_DESCEND, MXML_NO_DESCEND, or MXML_DESCEND_FIRST</description></argument>
</function>
<struct name="mxml_attr_s"><description>An XML element attribute value.</description><variable
name="name"><type>char *</type><description>Attribute name</description></variable>

@ -1,5 +1,5 @@
/*
* "$Id: mxmldoc.c,v 1.14 2003/07/20 14:37:34 mike Exp $"
* "$Id: mxmldoc.c,v 1.15 2003/07/26 17:24:14 mike Exp $"
*
* Documentation generator using mini-XML, a small XML-like file parsing
* library.
@ -961,7 +961,8 @@ scan_file(const char *filename, /* I - Filename */
break;
case STATE_IDENTIFIER : /* Inside a keyword or identifier */
if (isalnum(ch) || ch == '_' || ch == '[' || ch == ']' || ch == ':')
if (isalnum(ch) || ch == '_' || ch == '[' || ch == ']' || ch == ':' ||
(parens && ch == ','))
{
if (bufptr < (buffer + sizeof(buffer) - 1))
*bufptr++ = ch;
@ -2080,5 +2081,5 @@ ws_cb(mxml_node_t *node, /* I - Element node */
/*
* End of "$Id: mxmldoc.c,v 1.14 2003/07/20 14:37:34 mike Exp $".
* End of "$Id: mxmldoc.c,v 1.15 2003/07/26 17:24:14 mike Exp $".
*/

Loading…
Cancel
Save