From e53bff5519b44f44f937af4bba0fcdf4bf6230ac Mon Sep 17 00:00:00 2001 From: Michael R Sweet Date: Sun, 15 Jun 2003 01:22:37 +0000 Subject: [PATCH] Add mxml library manpage. --- Makefile.in | 19 ++++-- configure | 8 +++ configure.in | 10 +++- mxml.list.in | 8 ++- mxml.man | 159 +++++++++++++++++++++++++++++++++++++++++++++++++++ mxml.spec | 8 ++- mxmldoc.man | 6 +- 7 files changed, 204 insertions(+), 14 deletions(-) create mode 100644 mxml.man diff --git a/Makefile.in b/Makefile.in index cffb144..238fd59 100644 --- a/Makefile.in +++ b/Makefile.in @@ -1,5 +1,5 @@ # -# "$Id: Makefile.in,v 1.6 2003/06/15 00:44:33 mike Exp $" +# "$Id: Makefile.in,v 1.7 2003/06/15 01:22:36 mike Exp $" # # Makefile for mini-XML, a small XML-like file parsing library. # @@ -53,17 +53,19 @@ BUILDROOT = $(DSTROOT) # CAT1EXT = @CAT1EXT@ +CAT3EXT = @CAT3EXT@ MAN1EXT = @MAN1EXT@ +MAN3EXT = @MAN3EXT@ # # Rules... # -.SUFFIXES: .0 .1 .c .man .o +.SUFFIXES: .0 .1 .3 .c .man .o .c.o: $(CC) $(CFLAGS) -c $< -.man.0 .man.1: +.man.0 .man.1 .man.3: $(RM) $@ $(NROFF) -man $< >$@ @@ -75,7 +77,8 @@ MAN1EXT = @MAN1EXT@ DOCFILES = index.html documentation.html README COPYING CHANGES LIBOBJS = mxml-attr.o mxml-file.o mxml-node.o mxml-search.o OBJS = mxmldoc.o testmxml.o $(LIBOBJS) -TARGETS = libmxml.a mxmldoc mxmldoc.$(CAT1EXT) testmxml mxml.xml +TARGETS = libmxml.a mxmldoc mxml.$(CAT3EXT) mxmldoc.$(CAT1EXT) \ + testmxml mxml.xml # @@ -111,8 +114,12 @@ install: $(TARGETS) $(CP) libmxml.a $(BUILDROOT)/$(libdir) -$(MKDIR) -p $(BUILDROOT)/$(mandir)/cat1 $(CP) mxmldoc.$(CAT1EXT) $(BUILDROOT)/$(mandir)/cat1/mxmldoc.$(CAT1EXT) + -$(MKDIR) -p $(BUILDROOT)/$(mandir)/cat3 + $(CP) mxml.$(CAT3EXT) $(BUILDROOT)/$(mandir)/cat3/mxml.$(CAT3EXT) -$(MKDIR) -p $(BUILDROOT)/$(mandir)/man1 $(CP) mxmldoc.man $(BUILDROOT)/$(mandir)/man1/mxmldoc.$(MAN1EXT) + -$(MKDIR) -p $(BUILDROOT)/$(mandir)/man3 + $(CP) mxml.man $(BUILDROOT)/$(mandir)/man3/mxml.$(MAN3EXT) # @@ -125,7 +132,9 @@ uninstall: $(RM) $(BUILDROOT)/$(includedir)/mxml.h $(RM) $(BUILDROOT)/$(libdir)/libmxml.a $(RM) $(BUILDROOT)/$(mandir)/cat1/mxmldoc.$(CAT1EXT) + $(RM) $(BUILDROOT)/$(mandir)/cat3/mxml.$(CAT3EXT) $(RM) $(BUILDROOT)/$(mandir)/man1/mxmldoc.$(MAN1EXT) + $(RM) $(BUILDROOT)/$(mandir)/man3/mxml.$(MAN3EXT) # @@ -208,5 +217,5 @@ $(OBJS): Makefile # -# End of "$Id: Makefile.in,v 1.6 2003/06/15 00:44:33 mike Exp $". +# End of "$Id: Makefile.in,v 1.7 2003/06/15 01:22:36 mike Exp $". # diff --git a/configure b/configure index 3bd119a..387d4a4 100755 --- a/configure +++ b/configure @@ -2637,17 +2637,23 @@ case "$uname" in # *BSD CAT1EXT="0" MAN1EXT="1" + CAT3EXT="0" + MAN3EXT="3" ;; *) # All others CAT1EXT="1" MAN1EXT="1" + CAT3EXT="3" + MAN3EXT="3" ;; esac + + ac_config_files="$ac_config_files Makefile mxml.list" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure @@ -3249,7 +3255,9 @@ s,@GROFF@,$GROFF,;t t s,@RM@,$RM,;t t s,@ARFLAGS@,$ARFLAGS,;t t s,@CAT1EXT@,$CAT1EXT,;t t +s,@CAT3EXT@,$CAT3EXT,;t t s,@MAN1EXT@,$MAN1EXT,;t t +s,@MAN3EXT@,$MAN3EXT,;t t CEOF _ACEOF diff --git a/configure.in b/configure.in index 25b2863..24eca2c 100644 --- a/configure.in +++ b/configure.in @@ -1,5 +1,5 @@ dnl -dnl "$Id: configure.in,v 1.3 2003/06/15 00:44:33 mike Exp $" +dnl "$Id: configure.in,v 1.4 2003/06/15 01:22:36 mike Exp $" dnl dnl Configuration script for mini-XML, a small XML-like file parsing library. dnl @@ -115,20 +115,26 @@ case "$uname" in # *BSD CAT1EXT="0" MAN1EXT="1" + CAT3EXT="0" + MAN3EXT="3" ;; *) # All others CAT1EXT="1" MAN1EXT="1" + CAT3EXT="3" + MAN3EXT="3" ;; esac AC_SUBST(CAT1EXT) +AC_SUBST(CAT3EXT) AC_SUBST(MAN1EXT) +AC_SUBST(MAN3EXT) dnl Output the makefile, etc... AC_OUTPUT(Makefile mxml.list) dnl -dnl End of "$Id: configure.in,v 1.3 2003/06/15 00:44:33 mike Exp $". +dnl End of "$Id: configure.in,v 1.4 2003/06/15 01:22:36 mike Exp $". dnl diff --git a/mxml.list.in b/mxml.list.in index 6368520..71999d6 100644 --- a/mxml.list.in +++ b/mxml.list.in @@ -1,5 +1,5 @@ # -# "$Id: mxml.list.in,v 1.1 2003/06/15 00:44:34 mike Exp $" +# "$Id: mxml.list.in,v 1.2 2003/06/15 01:22:37 mike Exp $" # # EPM software list file for mini-XML, a small XML-like file parsing library. # @@ -62,7 +62,9 @@ EOF # Manpage extensions... $CAT1EXT=@CAT1EXT@ +$CAT3EXT=@CAT3EXT@ $MAN1EXT=@MAN1EXT@ +$MAN3EXT=@MAN3EXT@ # Executables f 0555 root sys ${bindir}/mxmldoc mxmldoc @@ -83,7 +85,9 @@ f 0444 root sys ${docdir}/documentation.html $srcdir/documentation.html # Man pages f 0444 root sys ${mandir}/cat1/mxmldoc.$CAT1EXT $srcdir/mxmldoc.$CAT1EXT f 0444 root sys ${mandir}/man1/mxmldoc.$MAN1EXT $srcdir/mxmldoc.man +f 0444 root sys ${mandir}/cat3/mxml.$CAT3EXT $srcdir/mxml.$CAT3EXT +f 0444 root sys ${mandir}/man3/mxml.$MAN3EXT $srcdir/mxml.man # -# End of "$Id: mxml.list.in,v 1.1 2003/06/15 00:44:34 mike Exp $". +# End of "$Id: mxml.list.in,v 1.2 2003/06/15 01:22:37 mike Exp $". # diff --git a/mxml.man b/mxml.man new file mode 100644 index 0000000..e68499a --- /dev/null +++ b/mxml.man @@ -0,0 +1,159 @@ +.\" +.\" "$Id: mxml.man,v 1.1 2003/06/15 01:22:37 mike Exp $" +.\" +.\" mxml man page for mini-XML, a small XML-like file parsing library. +.\" +.\" Copyright 2003 by Michael Sweet. +.\" +.\" This program 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, or (at your option) any later version. +.\" +.\" This program 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 General Public License for more details. +.\" +.TH mxml 3 "mini-XML" "14 June 2003" "Michael Sweet" +.SH NAME +mxml \- mini-xml library +.SH INCLUDE FILE +#include +.SH LIBRARY +-lmxml +.SH DESCRIPTION +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. +.PP +Mini-XML provides the following functionality: +.IP \(bu 4 +Reading and writing of UTF-8 encoded XML files. +.IP \(bu 4 +Data is stored in a linked-list tree structure, +preserving the XML data hierarchy. +.IP \(bu 4 +Supports arbitrary element names, attributes, and attribute +values with no preset limits, just available memory. +.IP \(bu 4 +Supports integer, real, opaque ("cdata"), and text data types in +"leaf" nodes. +.IP \(bu 4 +Functions for creating and managing trees of data. +.IP \(bu 4 +"Find" and "walk" functions for easily locating and navigating +trees of data. +.PP +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. +.SH USING MINI-XML +Mini-XML provides a single header file which you include: +.nf + + #include +.fi +.PP +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". +.PP +You load an XML file using the "mxmlLoadFile()" function: +.nf + + FILE *fp; + mxml_node_t *tree; + + fp = fopen("filename.xml", "r"); + tree = mxmlLoadFile(NULL, fp, MXML_NO_CALLBACK); + fclose(fp); +.fi +.PP +Similarly, you save an XML file using the "mxmlSaveFile()" +function: +.nf + + FILE *fp; + mxml_node_t *tree; + + fp = fopen("filename.xml", "w"); + mxmlSaveFile(tree, fp, MXML_NO_CALLBACK); + fclose(fp); +.fi +.PP +You can find a named element/node using the +"mxmlFindElement()" function: +.nf + + mxml_node_t *node = mxmlFindElement(tree, tree, "name", + "attr", "value", + MXML_DESCEND); +.fi +.PP +The "name", "attr", and "value" arguments can be passed as +NULL to act as wildcards, e.g.: +.nf + + /* 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); +.fi +.PP +You can also iterate with the same function: +.nf + + 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 ... + } +.fi +.PP +Finally, 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: +.nf + + mxmlDelete(tree); +.fi +.SH SEE ALSO +mxmldoc(1), http://www.easysw.com/~mike/mxml/ +.SH COPYRIGHT +Copyright 2003 by Michael Sweet. +.\" +.\" End of "$Id: mxml.man,v 1.1 2003/06/15 01:22:37 mike Exp $". +.\" diff --git a/mxml.spec b/mxml.spec index accf54d..fe01d0e 100644 --- a/mxml.spec +++ b/mxml.spec @@ -1,5 +1,5 @@ # -# "$Id: mxml.spec,v 1.1 2003/06/15 00:44:34 mike Exp $" +# "$Id: mxml.spec,v 1.2 2003/06/15 01:22:37 mike Exp $" # # RPM "spec" file for mini-XML, a small XML-like file parsing library. # @@ -86,9 +86,13 @@ rm -rf $RPM_BUILD_ROOT /usr/share/doc/mxml/* %dir /usr/share/man/cat1 /usr/share/man/cat1/* +%dir /usr/share/man/cat3 +/usr/share/man/cat3/* %dir /usr/share/man/man1 /usr/share/man/man1/* +%dir /usr/share/man/man3 +/usr/share/man/man3/* # -# End of "$Id: mxml.spec,v 1.1 2003/06/15 00:44:34 mike Exp $". +# End of "$Id: mxml.spec,v 1.2 2003/06/15 01:22:37 mike Exp $". # diff --git a/mxmldoc.man b/mxmldoc.man index 77e0f98..01db66c 100644 --- a/mxmldoc.man +++ b/mxmldoc.man @@ -1,5 +1,5 @@ .\" -.\" "$Id: mxmldoc.man,v 1.1 2003/06/15 00:44:34 mike Exp $" +.\" "$Id: mxmldoc.man,v 1.2 2003/06/15 01:22:37 mike Exp $" .\" .\" mxmldoc man page for mini-XML, a small XML-like file parsing library. .\" @@ -40,9 +40,9 @@ code with documentation that is formatted according to the CUPS Configuration Management Plan which is available at "http://www.cups.org/documentation.html". .SH SEE ALSO -CUPS Configuration Management Plan. +mxml(3), http://www.easysw.com/~mike/mxml/ .SH COPYRIGHT Copyright 2003 by Michael Sweet. .\" -.\" End of "$Id: mxmldoc.man,v 1.1 2003/06/15 00:44:34 mike Exp $". +.\" End of "$Id: mxmldoc.man,v 1.2 2003/06/15 01:22:37 mike Exp $". .\"