diff --git a/Makefile.in b/Makefile.in index 312ce22..1762821 100644 --- a/Makefile.in +++ b/Makefile.in @@ -101,6 +101,7 @@ all: Makefile configure config.h $(TARGETS) clean: $(RM) $(OBJS) $(TARGETS) + $(RM) mxmldoc-static libmxml.a $(RM) *.bck *.bak $(RM) config.cache config.log config.status $(RM) -r autom4te*.cache @@ -330,8 +331,9 @@ mxml.xml: mxmldoc-static mxml.h $(PUBLIBOBJS:.o=.c) valgrind: mxmldoc-static $(RM) valgrind.xml - valgrind --leak-check=yes ./mxmldoc-static valgrind.xml mxml.h \ - $(PUBLIBOBJS:.o=.c) >valgrind.html 2>valgrind.out + valgrind --tool=memcheck --leak-check=yes ./mxmldoc-static \ + valgrind.xml mxml.h $(PUBLIBOBJS:.o=.c) \ + >valgrind.html 2>valgrind.out # diff --git a/doc/advanced.html b/doc/advanced.html index 259455e..79ae5d2 100644 --- a/doc/advanced.html +++ b/doc/advanced.html @@ -300,6 +300,7 @@ allocated custom data for the node and a pointer to a destructor function which will free the custom data when the node is deleted.
+The save callback receives the node pointer and returns an allocated string containing the custom data value. The following save callback could be used for our ISO date/time type:
@@ -457,6 +458,7 @@ to return all elements or attributes in the index. Passing NULL for both the element name and attribute value is equivalent to calling mxmlIndexEnum. +When you are done using the index, delete it using the mxmlIndexDelete() function:
diff --git a/doc/index.html b/doc/index.html deleted file mode 100644 index 4b3f169..0000000 --- a/doc/index.html +++ /dev/null @@ -1,408 +0,0 @@ - - - -Current Release: v1.3, December 21, 2003
-[ Download Source (.tar.gz 82k)
-| Download Linux RPM (.i386.rpm 76k)
-| Change Log | Documentation | Rate/Make Comments ]
Mini-XML is a small XML parsing library that you can use to -read XML and XML-like data files in your application without -requiring large non-standard libraries. Mini-XML only requires -an ANSI C compatible compiler (GCC works, as do most vendors' -ANSI C compilers) and a "make" program.
- -Mini-XML provides the following functionality:
- -Mini-XML doesn't do validation or other types of processing -on the data based upon schema files or other sources of -definition information, nor does it support character entities -other than those required by the XML specification. Also, since -Mini-XML does not support the UTF-16 encoding, it is technically -not a conforming XML consumer/client.
- -Mini-XML comes with an autoconf-based configure script; just -type the following command to get things going:
- --./configure -- -
The default install prefix is /usr/local, which can be -overridden using the --prefix option:
- --./configure --prefix=/foo -- -
Other configure options can be found using the --help -option:
- --./configure --help -- -
Once you have configured the software, type "make" to do the -build and run the test program to verify that things are -working, as follows:
- --make -- -
The "install" target will install Mini-XML in the lib and -include directories:
- --make install -- -
Once you have installed it, use the "-lmxml" option to link -your application against it.
- -The documentation is currently a work in progress. Aside from -the information that follows, the documentation page provides a -handy reference and is automatically generated using Mini-XML. -You can also look at the testmxml.c and mxmldoc.c source files for examples of -using Mini-XML.
- -Mini-XML provides a single header file which you include:
- --#include <mxml.h> -- -
Nodes are defined by the mxml_node_t -structure; the type member -defines the node type (element, integer, opaque, real, or text) -which determines which value you want to look at in the value -union. New nodes can be created using the mxmlNewElement(), -mxmlNewInteger(), -mxmlNewOpaque(), -mxmlNewReal(), -and mxmlNewText() -functions. Only elements can have child nodes, and the top node -must be an element, usually "?xml".
- -Each node has pointers for the node above (parent), below (child), -to the left (prev), and to the right (next) of the current -node. If you have an XML file like the following:
- -- <?xml version="1.0"?> - <data> - <node>val1</node> - <node>val2</node> - <node>val3</node> - <group> - <node>val4</node> - <node>val5</node> - <node>val6</node> - </group> - <node>val7</node> - <node>val8</node> - <node>val9</node> - </data> -- -
the node tree returned by mxmlLoadFile() would look -like the following in memory:
- -- ?xml - | - data - | - node - node - node - group - node - node - node - | | | | | | | - val1 val2 val3 | val7 val8 val9 - | - node - node - node - | | | - val4 val5 val6 -- -
where "-" is a pointer to the next node and "|" is a pointer -to the first child node.
- -Once you are done with the XML data, use the mxmlDelete() -function to recursively free the memory that is used for a -particular node or the entire tree:
- --mxmlDelete(tree); -- -
You load an XML file using the mxmlLoadFile() -function:
- --FILE *fp; -mxml_node_t *tree; - -fp = fopen("filename.xml", "r"); -tree = mxmlLoadFile(NULL, fp, MXML_NO_CALLBACK); -fclose(fp); -- -
The third argument specifies a callback function which -returns the value type of the immediate children for a new -element node: MXML_INTEGER, MXML_OPAQUE, -MXML_REAL, or MXML_TEXT. This function is -called after 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.
- -Similarly, you save an XML file using the mxmlSaveFile() -function:
- --FILE *fp; -mxml_node_t *tree; - -fp = fopen("filename.xml", "w"); -mxmlSaveFile(tree, fp, MXML_NO_CALLBACK); -fclose(fp); -- -
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 -MXML_WS_BEFORE_OPEN, MXML_WS_AFTER_OPEN, -MXML_WS_BEFORE_CLOSE, or MXML_WS_AFTER_CLOSE. -The callback function should return 0 if no whitespace should be -added and the character to insert (space, tab, newline) -otherwise.
- -The mxmlLoadString(), -mxmlSaveAllocString(), -and mxmlSaveString() -functions load XML node trees from and save XML node trees to -strings:
- --char buffer[8192]; -char *ptr; -mxml_node_t *tree; - -... -tree = mxmlLoadString(NULL, buffer, MXML_NO_CALLBACK); - -... -mxmlSaveString(tree, buffer, sizeof(buffer), MXML_NO_CALLBACK); - -... -ptr = mxmlSaveAllocString(tree, MXML_NO_CALLBACK); -- -
The mxmlWalkPrev() -and mxmlWalkNext()functions -can be used to iterate through the XML node tree:
- --mxml_node_t *node = mxmlWalkPrev(current, tree, MXML_DESCEND); - -mxml_node_t *node = mxmlWalkNext(current, tree, MXML_DESCEND); -- -
In addition, you can find a named element/node using the mxmlFindElement() -function:
- --mxml_node_t *node = mxmlFindElement(tree, tree, "name", "attr", - "value", MXML_DESCEND); -- -
The name, attr, and value -arguments can be passed as NULL to act as wildcards, -e.g.:
- --/* Find the first "a" element */ -node = mxmlFindElement(tree, tree, "a", NULL, NULL, MXML_DESCEND); - -/* Find the first "a" element with "href" attribute */ -node = mxmlFindElement(tree, tree, "a", "href", NULL, MXML_DESCEND); - -/* Find the first "a" element with "href" to a URL */ -node = mxmlFindElement(tree, tree, "a", "href", - "http://www.easysw.com/~mike/mxml/", MXML_DESCEND); - -/* Find the first element with a "src" attribute*/ -node = mxmlFindElement(tree, tree, NULL, "src", NULL, MXML_DESCEND); - -/* Find the first element with a "src" = "foo.jpg" */ -node = mxmlFindElement(tree, tree, NULL, "src", "foo.jpg", MXML_DESCEND); -- -
You can also iterate with the same function:
- --mxml_node_t *node; - -for (node = mxmlFindElement(tree, tree, "name", NULL, NULL, MXML_DESCEND); - node != NULL; - node = mxmlFindElement(node, tree, "name", NULL, NULL, MXML_DESCEND)) -{ - ... do something ... -} -- -
The MXML_DESCEND argument can actually be one of three constants:
- -- ?xml - data - node - val1 - node - val2 - node - val3 - group - node - val4 - node - val5 - node - val6 - node - val7 - node - val8 - node - val9 -- -
If you started at "val9" and walked using - mxmlWalkPrev(), the order would be reversed, - ending at "?xml".
You can email me at "mxml at easysw dot com" to -report problems and/or ask for help. Just don't expect an -instant response, as I get a lot of email...
- -The Mini-XML library is Copyright 2003-2004 by Michael Sweet.
- -This library is free software; you can redistribute it -and/or modify it under the terms of the GNU Library General -Public License as published by the Free Software Foundation; -either version 2 of the License, or (at your option) any -later version.
- -This library is distributed in the hope that it will be -useful, but WITHOUT ANY WARRANTY; without even the implied -warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR -PURPOSE. See the GNU Library General Public License for -more details.
- -You should have received a copy of the GNU Library General -Public License along with this library; if not, write to the -Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA -02139, USA.
- - - diff --git a/doc/intro.html b/doc/intro.html index 2e5b3cc..c3fc6d7 100644 --- a/doc/intro.html +++ b/doc/intro.html @@ -1,7 +1,7 @@ -This programmers manual describes Mini-XML version 2.1, a +
This programmers manual describes Mini-XML version 2.2, a small XML parsing library that you can use to read and write XML and XML-like data files in your application without requiring large non-standard libraries. Mini-XML only requires an ANSI C @@ -51,7 +51,7 @@ other than those required by the XML specification.
The Mini-XML library is copyright 2003-2004 by Michael +
The Mini-XML library is copyright 2003-2005 by Michael Sweet.
This library is free software; you can redistribute it and/or @@ -94,7 +94,7 @@ and removed libxml2.
Thanks to lots of feedback and support from various developers, Mini-XML has evolved since then to provide a more -complete XML implementation and now stands at a whopping 2,713 +complete XML implementation and now stands at a whopping 2,974 lines of code, compared to 103,893 lines of code for libxml2 version 2.6.9. Aside from Gimp-Print, Mini-XML is used for the following projects/software applications:
@@ -104,7 +104,7 @@ following projects/software applications:END OF TERMS AND CONDITIONS
+If you develop a new library, and you want it to be of the greatest +possible use to the public, we recommend making it free software that +everyone can redistribute and change. You can do so by permitting +redistribution under these terms (or, alternatively, under the terms of the +ordinary General Public License). + +
To apply these terms, attach the following notices to the library. It is +safest to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least the +"copyright" line and a pointer to where the full notice is found. + +
+one line to give the library's name and an idea of what it does. +Copyright (C) year name of author + +This library is free software; you can redistribute it and/or +modify it under the terms of the GNU Lesser General Public +License as published by the Free Software Foundation; either +version 2.1 of the License, or (at your option) any later version. + +This library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public +License along with this library; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ++ +
Also add information on how to contact you by electronic and paper mail. + +
You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the library, if +necessary. Here is a sample; alter the names: + +
+Yoyodyne, Inc., hereby disclaims all copyright interest in +the library `Frob' (a library for tweaking knobs) written +by James Random Hacker. + +signature of Ty Coon, 1 April 1990 +Ty Coon, President of Vice ++ +
That's all there is to it! +