mirror of
https://github.com/michaelrsweet/mxml.git
synced 2024-11-24 11:25:30 +00:00
Rename mxmlFindValue to mxmlFindPath.
Rename mxmlGetPrevious to mxmlGetPrevSibling. Rename mxmlGetNext to mxmlGetNextSibling. Update documentation.
This commit is contained in:
parent
a9012172c1
commit
aaefc5c07c
4
CHANGES
4
CHANGES
@ -1,4 +1,4 @@
|
||||
CHANGES - 2011-01-01
|
||||
CHANGES - 2011-01-02
|
||||
--------------------
|
||||
|
||||
CHANGES IN Mini-XML 2.7
|
||||
@ -8,7 +8,7 @@ CHANGES IN Mini-XML 2.7
|
||||
header to preserve source compatibility (STR #118)
|
||||
- Updated the source headers to reference the Mini-XML license and its
|
||||
exceptions to the LGPL2 (STR #108)
|
||||
- Added a new mxmlFindValue() function to find the value node of a
|
||||
- Added a new mxmlFindPath() function to find the value node of a
|
||||
named element (STR #110)
|
||||
- Building a static version of the library did not work on Windows
|
||||
(STR #112)
|
||||
|
26
COPYING
26
COPYING
@ -6,21 +6,21 @@ The Mini-XML library and included programs are provided under the
|
||||
terms of the GNU Library General Public License version 2 (LGPL2)
|
||||
with the following exceptions:
|
||||
|
||||
1. Static linking of applications to the Mini-XML library
|
||||
does not constitute a derivative work and does not require
|
||||
the author to provide source code for the application, use
|
||||
the shared Mini-XML libraries, or link their applications
|
||||
against a user-supplied version of Mini-XML.
|
||||
1. Static linking of applications to the Mini-XML library
|
||||
does not constitute a derivative work and does not require
|
||||
the author to provide source code for the application, use
|
||||
the shared Mini-XML libraries, or link their applications
|
||||
against a user-supplied version of Mini-XML.
|
||||
|
||||
If you link the application to a modified version of
|
||||
Mini-XML, then the changes to Mini-XML must be provided
|
||||
under the terms of the LGPL2 in sections 1, 2, and 4.
|
||||
If you link the application to a modified version of
|
||||
Mini-XML, then the changes to Mini-XML must be provided
|
||||
under the terms of the LGPL2 in sections 1, 2, and 4.
|
||||
|
||||
2. You do not have to provide a copy of the Mini-XML license
|
||||
with programs that are linked to the Mini-XML library, nor
|
||||
do you have to identify the Mini-XML license in your
|
||||
program or documentation as required by section 6 of the
|
||||
LGPL2.
|
||||
2. You do not have to provide a copy of the Mini-XML license
|
||||
with programs that are linked to the Mini-XML library, nor
|
||||
do you have to identify the Mini-XML license in your
|
||||
program or documentation as required by section 6 of the
|
||||
LGPL2.
|
||||
|
||||
|
||||
GNU LIBRARY GENERAL PUBLIC LICENSE
|
||||
|
79
Makefile.in
79
Makefile.in
@ -3,7 +3,7 @@
|
||||
#
|
||||
# Makefile for Mini-XML, a small XML-like file parsing library.
|
||||
#
|
||||
# Copyright 2003-2010 by Michael R Sweet.
|
||||
# Copyright 2003-2011 by Michael R Sweet.
|
||||
#
|
||||
# These coded instructions, statements, and computer programs are the
|
||||
# property of Michael R Sweet and are protected by Federal copyright
|
||||
@ -69,9 +69,11 @@ INSTALL_SCRIPT = $(INSTALL) -m 755
|
||||
# Rules...
|
||||
#
|
||||
|
||||
.SILENT:
|
||||
.SUFFIXES: .c .man .o
|
||||
.c.o:
|
||||
$(CC) $(CFLAGS) -c $<
|
||||
echo Compiling $<
|
||||
$(CC) $(CFLAGS) -c -o $@ $<
|
||||
|
||||
|
||||
#
|
||||
@ -101,6 +103,7 @@ all: Makefile config.h $(TARGETS)
|
||||
#
|
||||
|
||||
clean:
|
||||
echo Cleaning build files...
|
||||
$(RM) $(OBJS) $(TARGETS)
|
||||
$(RM) mxmldoc-static libmxml.a
|
||||
|
||||
@ -110,6 +113,7 @@ clean:
|
||||
#
|
||||
|
||||
distclean: clean
|
||||
echo Cleaning distribution files...
|
||||
$(RM) config.cache config.log config.status
|
||||
$(RM) Makefile config.h
|
||||
$(RM) -r autom4te*.cache
|
||||
@ -123,9 +127,11 @@ distclean: clean
|
||||
|
||||
.PHONY: clang clang-changes
|
||||
clang:
|
||||
echo Doing static code analysis of all code using CLANG...
|
||||
$(RM) -r clang
|
||||
scan-build -V -k -o `pwd`/clang $(MAKE) $(MFLAGS) clean all
|
||||
clang-changes:
|
||||
echo Doing static code analysis of changed code using CLANG...
|
||||
scan-build -V -k -o `pwd`/clang $(MAKE) $(MFLAGS) all
|
||||
|
||||
|
||||
@ -134,41 +140,50 @@ clang-changes:
|
||||
#
|
||||
|
||||
install: $(TARGETS) install-$(LIBMXML) install-libmxml.a
|
||||
echo Installing mxmldoc in $(BUILDROOT)$(bindir)...
|
||||
$(INSTALL_DIR) $(BUILDROOT)$(bindir)
|
||||
$(INSTALL_BIN) mxmldoc $(BUILDROOT)$(bindir)
|
||||
$(INSTALL_BIN) mxmldoc $(BUILDROOT)$(bindir)
|
||||
echo Installing documentation in $(BUILDROOT)$(docdir)...
|
||||
$(INSTALL_DIR) $(BUILDROOT)$(docdir)
|
||||
for file in $(DOCFILES); do \
|
||||
$(INSTALL_MAN) $$file $(BUILDROOT)$(docdir); \
|
||||
done
|
||||
echo Installing header files in $(BUILDROOT)$(includedir)...
|
||||
$(INSTALL_DIR) $(BUILDROOT)$(includedir)
|
||||
$(INSTALL_DATA) mxml.h $(BUILDROOT)$(includedir)
|
||||
echo Installing pkgconfig files in $(BUILDROOT)$(libdir)/pkgconfig...
|
||||
$(INSTALL_DIR) $(BUILDROOT)$(libdir)/pkgconfig
|
||||
$(INSTALL_DATA) mxml.pc $(BUILDROOT)$(libdir)/pkgconfig
|
||||
echo Installing man pages in $(BUILDROOT)$(mandir)...
|
||||
$(INSTALL_DIR) $(BUILDROOT)$(mandir)/man1
|
||||
$(INSTALL_MAN) doc/mxmldoc.man $(BUILDROOT)$(mandir)/man1/mxmldoc.1
|
||||
$(INSTALL_DIR) $(BUILDROOT)$(mandir)/man3
|
||||
$(INSTALL_MAN) doc/mxml.man $(BUILDROOT)$(mandir)/man3/mxml.3
|
||||
|
||||
install-libmxml.a:
|
||||
echo Installing libmxml.a to $(BUILDROOT)$(libdir)...
|
||||
$(INSTALL_DIR) $(BUILDROOT)$(libdir)
|
||||
$(INSTALL_LIB) libmxml.a $(BUILDROOT)$(libdir)
|
||||
$(RANLIB) $(BUILDROOT)$(libdir)/libmxml.a
|
||||
|
||||
install-libmxml.so.1.4:
|
||||
install-libmxml.so.1.5:
|
||||
echo Installing libmxml.so to $(BUILDROOT)$(libdir)...
|
||||
$(INSTALL_DIR) $(BUILDROOT)$(libdir)
|
||||
$(INSTALL_LIB) libmxml.so.1.4 $(BUILDROOT)$(libdir)
|
||||
$(INSTALL_LIB) libmxml.so.1.5 $(BUILDROOT)$(libdir)
|
||||
$(RM) $(BUILDROOT)$(libdir)/libmxml.so
|
||||
$(LN) libmxml.so.1.4 $(BUILDROOT)$(libdir)/libmxml.so
|
||||
$(LN) libmxml.so.1.5 $(BUILDROOT)$(libdir)/libmxml.so
|
||||
$(RM) $(BUILDROOT)$(libdir)/libmxml.so.1
|
||||
$(LN) libmxml.so.1.4 $(BUILDROOT)$(libdir)/libmxml.so.1
|
||||
$(LN) libmxml.so.1.5 $(BUILDROOT)$(libdir)/libmxml.so.1
|
||||
|
||||
install-libmxml.sl.1:
|
||||
echo Installing libmxml.sl to $(BUILDROOT)$(libdir)...
|
||||
$(INSTALL_DIR) $(BUILDROOT)$(libdir)
|
||||
$(INSTALL_LIB) libmxml.sl.1 $(BUILDROOT)$(libdir)
|
||||
$(RM) $(BUILDROOT)$(libdir)/libmxml.so
|
||||
$(LN) libmxml.sl.1 $(BUILDROOT)$(libdir)/libmxml.sl
|
||||
|
||||
install-libmxml.1.dylib:
|
||||
echo Installing libmxml.dylib to $(BUILDROOT)$(libdir)...
|
||||
$(INSTALL_DIR) $(BUILDROOT)$(libdir)
|
||||
$(INSTALL_LIB) libmxml.1.dylib $(BUILDROOT)$(libdir)
|
||||
$(RM) $(BUILDROOT)$(libdir)/libmxml.dylib
|
||||
@ -180,35 +195,45 @@ install-libmxml.1.dylib:
|
||||
#
|
||||
|
||||
uninstall: uninstall-$(LIBMXML) uninstall-libmxml.a
|
||||
echo Uninstalling mxmldoc from $(BUILDROOT)$(bindir)...
|
||||
$(RM) $(BUILDROOT)$(bindir)/mxmldoc
|
||||
echo Uninstalling documentation from $(BUILDROOT)$(docdir)...
|
||||
$(RM) -r $(BUILDROOT)$(docdir)
|
||||
echo Uninstalling headers from $(BUILDROOT)$(includedir)...
|
||||
$(RM) $(BUILDROOT)$(includedir)/mxml.h
|
||||
echo Uninstalling pkgconfig files from $(BUILDROOT)$(libdir)/pkgconfig...
|
||||
$(RM) $(BUILDROOT)$(libdir)/pkgconfig/mxml.pc
|
||||
echo Uninstalling man pages from $(BUILDROOT)$(mandir)...
|
||||
$(RM) $(BUILDROOT)$(mandir)/man1/mxmldoc.1
|
||||
$(RM) $(BUILDROOT)$(mandir)/man3/mxml.3
|
||||
|
||||
uninstall-libmxml.a:
|
||||
echo Uninstalling libmxml.a from $(BUILDROOT)$(libdir)...
|
||||
$(RM) $(BUILDROOT)$(libdir)/libmxml.a
|
||||
|
||||
uninstall-libmxml.so.1.4:
|
||||
uninstall-libmxml.so.1.5:
|
||||
echo Uninstalling libmxml.so from $(BUILDROOT)$(libdir)...
|
||||
$(RM) $(BUILDROOT)$(libdir)/libmxml.so
|
||||
$(RM) $(BUILDROOT)$(libdir)/libmxml.so.1
|
||||
$(RM) $(BUILDROOT)$(libdir)/libmxml.so.1.4
|
||||
|
||||
uninstall-libmxml.sl.1:
|
||||
echo Uninstalling libmxml.sl from $(BUILDROOT)$(libdir)...
|
||||
$(RM) $(BUILDROOT)$(libdir)/libmxml.sl
|
||||
$(RM) $(BUILDROOT)$(libdir)/libmxml.sl.1
|
||||
|
||||
uninstall-libmxml.1.dylib:
|
||||
echo Uninstalling libmxml.dylib from $(BUILDROOT)$(libdir)...
|
||||
$(RM) $(BUILDROOT)$(libdir)/libmxml.dylib
|
||||
$(RM) $(BUILDROOT)$(libdir)/libmxml.1.dylib
|
||||
|
||||
|
||||
#
|
||||
# Make packages using EPM (http://www.easysw.com/epm/)
|
||||
# Make packages using EPM (http://www.epmhome.org/)
|
||||
#
|
||||
|
||||
epm: all
|
||||
echo Creating distribution packages...
|
||||
epm --output-dir dist -v -f native mxml
|
||||
epm --output-dir dist -v -f portable mxml
|
||||
|
||||
@ -218,6 +243,7 @@ epm: all
|
||||
#
|
||||
|
||||
Makefile: configure Makefile.in
|
||||
echo Updating makefile...
|
||||
if test -f config.status; then \
|
||||
./config.status --recheck; \
|
||||
./config.status; \
|
||||
@ -228,6 +254,7 @@ Makefile: configure Makefile.in
|
||||
|
||||
|
||||
config.h: configure config.h.in
|
||||
echo Updating config.h...
|
||||
autoconf
|
||||
if test -f config.status; then \
|
||||
./config.status --recheck; \
|
||||
@ -238,11 +265,24 @@ config.h: configure config.h.in
|
||||
touch config.h
|
||||
|
||||
|
||||
#
|
||||
# Figure out lines-of-code...
|
||||
#
|
||||
|
||||
.PHONY: sloc
|
||||
|
||||
sloc:
|
||||
echo "libmxml: \c"
|
||||
sloccount $(LIBOBJS:.o=.c) mxml-private.c mxml.h 2>/dev/null | \
|
||||
grep "Total Physical" | awk '{print $$9}'
|
||||
|
||||
|
||||
#
|
||||
# libmxml.a
|
||||
#
|
||||
|
||||
libmxml.a: $(LIBOBJS)
|
||||
echo Creating $@...
|
||||
$(RM) $@
|
||||
$(AR) $(ARFLAGS) $@ $(LIBOBJS)
|
||||
$(RANLIB) $@
|
||||
@ -252,14 +292,15 @@ mxml-entity.o mxml-file.o mxml-private.o: mxml-private.h
|
||||
|
||||
|
||||
#
|
||||
# libmxml.so.1.4
|
||||
# libmxml.so.1.5
|
||||
#
|
||||
|
||||
libmxml.so.1.4: $(LIBOBJS)
|
||||
$(DSO) $(DSOFLAGS) -o libmxml.so.1.4 $(LIBOBJS)
|
||||
libmxml.so.1.5: $(LIBOBJS)
|
||||
echo Creating $@...
|
||||
$(DSO) $(DSOFLAGS) -o libmxml.so.1.5 $(LIBOBJS)
|
||||
$(RM) libmxml.so libmxml.so.1
|
||||
$(LN) libmxml.so.1.4 libmxml.so
|
||||
$(LN) libmxml.so.1.4 libmxml.so.1
|
||||
$(LN) libmxml.so.1.5 libmxml.so
|
||||
$(LN) libmxml.so.1.5 libmxml.so.1
|
||||
|
||||
|
||||
#
|
||||
@ -267,6 +308,7 @@ libmxml.so.1.4: $(LIBOBJS)
|
||||
#
|
||||
|
||||
libmxml.sl.1: $(LIBOBJS)
|
||||
echo Creating $@...
|
||||
$(DSO) $(DSOFLAGS) -o libmxml.sl.1 $(LIBOBJS)
|
||||
$(RM) libmxml.sl
|
||||
$(LN) libmxml.sl.1 libmxml.sl
|
||||
@ -277,9 +319,10 @@ libmxml.sl.1: $(LIBOBJS)
|
||||
#
|
||||
|
||||
libmxml.1.dylib: $(LIBOBJS)
|
||||
echo Creating $@...
|
||||
$(DSO) $(DSOFLAGS) -o libmxml.1.dylib \
|
||||
-install_name $(libdir)/libmxml.dylib \
|
||||
-current_version 1.4.0 \
|
||||
-current_version 1.5.0 \
|
||||
-compatibility_version 1.0.0 \
|
||||
$(LIBOBJS)
|
||||
$(RM) libmxml.dylib
|
||||
@ -291,9 +334,11 @@ libmxml.1.dylib: $(LIBOBJS)
|
||||
#
|
||||
|
||||
mxmldoc: $(LIBMXML) mxmldoc.o
|
||||
echo Linking $@...
|
||||
$(CC) -L. $(LDFLAGS) -o $@ mxmldoc.o -lmxml $(LIBS)
|
||||
|
||||
mxmldoc-static: libmxml.a mxmldoc.o
|
||||
echo Linking $@...
|
||||
$(CC) $(LDFLAGS) -o $@ mxmldoc.o libmxml.a $(LIBS)
|
||||
|
||||
mxmldoc.o: mxml.h
|
||||
@ -304,6 +349,7 @@ mxmldoc.o: mxml.h
|
||||
#
|
||||
|
||||
testmxml: libmxml.a testmxml.o
|
||||
echo Linking $@...
|
||||
$(CC) $(LDFLAGS) -o $@ testmxml.o libmxml.a $(LIBS)
|
||||
@echo Testing library...
|
||||
./testmxml test.xml >temp1.xml 2>temp1s.xml
|
||||
@ -335,6 +381,7 @@ testmxml.o: mxml.h
|
||||
#
|
||||
|
||||
mxml.xml: mxmldoc-static mxml.h $(PUBLIBOBJS:.o=.c)
|
||||
echo Generating API documentation...
|
||||
$(RM) mxml.xml
|
||||
./mxmldoc-static --header doc/reference.heading mxml.xml mxml.h $(PUBLIBOBJS:.o=.c) >doc/reference.html
|
||||
if test "x`uname`" = xDarwin; then \
|
||||
@ -351,6 +398,7 @@ mxml.xml: mxmldoc-static mxml.h $(PUBLIBOBJS:.o=.c)
|
||||
fi
|
||||
|
||||
valgrind: mxmldoc-static
|
||||
echo Doing dynamic code analysis using Valgrind...
|
||||
$(RM) valgrind.xml
|
||||
valgrind --tool=memcheck --leak-check=yes ./mxmldoc-static \
|
||||
valgrind.xml mxml.h $(PUBLIBOBJS:.o=.c) \
|
||||
@ -362,6 +410,7 @@ valgrind: mxmldoc-static
|
||||
#
|
||||
|
||||
doc/mxml.man: mxmldoc-static mxml.xml
|
||||
echo "Generating mxml(3) man page..."
|
||||
$(RM) doc/mxml.man
|
||||
./mxmldoc-static --man mxml --title "Mini-XML API" \
|
||||
--intro doc/intro.man --footer doc/footer.man \
|
||||
|
26
README
26
README
@ -1,4 +1,4 @@
|
||||
README - 2010-11-08
|
||||
README - 2011-01-02
|
||||
-------------------
|
||||
|
||||
|
||||
@ -133,7 +133,7 @@ DOCUMENTATION
|
||||
|
||||
/* Find the first "a" element with "href" to a URL */
|
||||
node = mxmlFindElement(tree, tree, "a", "href",
|
||||
"http://www.easysw.com/~mike/mxml/",
|
||||
"http://www.minixml.org/",
|
||||
MXML_DESCEND);
|
||||
|
||||
/* Find the first element with a "src" attribute*/
|
||||
@ -156,11 +156,25 @@ DOCUMENTATION
|
||||
... do something ...
|
||||
}
|
||||
|
||||
The "mxmlFindValue()" function finds the (first) value node under a specific
|
||||
The "mxmlFindPath()" function finds the (first) value node under a specific
|
||||
element using a "path":
|
||||
|
||||
mxml_node_t *value = mxmlFindValue(tree, "path/to/*/foo/bar");
|
||||
|
||||
mxml_node_t *value = mxmlFindPath(tree, "path/to/*/foo/bar");
|
||||
|
||||
The "mxmlGetInteger()", "mxmlGetOpaque()", "mxmlGetReal()", and
|
||||
"mxmlGetText()" functions retrieve the value from a node:
|
||||
|
||||
mxml_node_t *node;
|
||||
|
||||
int intvalue = mxmlGetInteger(node);
|
||||
|
||||
const char *opaquevalue = mxmlGetOpaque(node);
|
||||
|
||||
double realvalue = mxmlGetReal(node);
|
||||
|
||||
int whitespacevalue;
|
||||
const char *textvalue = mxmlGetText(node, &whitespacevalue);
|
||||
|
||||
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:
|
||||
@ -178,5 +192,5 @@ GETTING HELP AND REPORTING PROBLEMS
|
||||
|
||||
LEGAL STUFF
|
||||
|
||||
The Mini-XML library is Copyright 2003-2010 by Michael Sweet. License terms
|
||||
The Mini-XML library is Copyright 2003-2011 by Michael Sweet. License terms
|
||||
are described in the file "COPYING".
|
||||
|
10
configure.in
10
configure.in
@ -3,7 +3,7 @@ dnl "$Id$"
|
||||
dnl
|
||||
dnl Configuration script for Mini-XML, a small XML-like file parsing library.
|
||||
dnl
|
||||
dnl Copyright 2003-2010 by Michael R Sweet.
|
||||
dnl Copyright 2003-2011 by Michael R Sweet.
|
||||
dnl
|
||||
dnl These coded instructions, statements, and computer programs are the
|
||||
dnl property of Michael R Sweet and are protected by Federal copyright
|
||||
@ -171,7 +171,7 @@ if test x$enable_shared != xno; then
|
||||
case "$uname" in
|
||||
SunOS* | UNIX_S*)
|
||||
AC_MSG_RESULT(yes)
|
||||
LIBMXML="libmxml.so.1.4"
|
||||
LIBMXML="libmxml.so.1.5"
|
||||
DSO="\$(CC)"
|
||||
DSOFLAGS="$DSOFLAGS -Wl,-h,libmxml.so.1 -G -R\$(libdir) \$(OPTIM)"
|
||||
LDFLAGS="$LDFLAGS -R\$(libdir)"
|
||||
@ -187,14 +187,14 @@ if test x$enable_shared != xno; then
|
||||
|
||||
IRIX)
|
||||
AC_MSG_RESULT(yes)
|
||||
LIBMXML="libmxml.so.1.4"
|
||||
LIBMXML="libmxml.so.1.5"
|
||||
DSO="\$(CC)"
|
||||
DSOFLAGS="$DSOFLAGS -Wl,-rpath,\$(libdir),-set_version,sgi1.0,-soname,libmxml.so.1 -shared \$(OPTIM)"
|
||||
;;
|
||||
|
||||
OSF1* | Linux | GNU)
|
||||
AC_MSG_RESULT(yes)
|
||||
LIBMXML="libmxml.so.1.4"
|
||||
LIBMXML="libmxml.so.1.5"
|
||||
DSO="\$(CC)"
|
||||
DSOFLAGS="$DSOFLAGS -Wl,-soname,libmxml.so.1,-rpath,\$(libdir) -shared \$(OPTIM)"
|
||||
LDFLAGS="$LDFLAGS -Wl,-rpath,\$(libdir)"
|
||||
@ -202,7 +202,7 @@ if test x$enable_shared != xno; then
|
||||
|
||||
*BSD*)
|
||||
AC_MSG_RESULT(yes)
|
||||
LIBMXML="libmxml.so.1.4"
|
||||
LIBMXML="libmxml.so.1.5"
|
||||
DSO="\$(CC)"
|
||||
DSOFLAGS="$DSOFLAGS -Wl,-soname,libmxml.so.1,-R\$(libdir) -shared \$(OPTIM)"
|
||||
LDFLAGS="$LDFLAGS -Wl,-R\$(libdir)"
|
||||
|
@ -64,7 +64,7 @@ child nodes:</p>
|
||||
|
||||
type = mxmlElementGetAttr(node, "type");
|
||||
if (type == NULL)
|
||||
type = node->value.element.name;
|
||||
type = mxmlGetElement(node);
|
||||
|
||||
if (!strcmp(type, "integer"))
|
||||
return (MXML_INTEGER);
|
||||
@ -125,7 +125,7 @@ text editor:</p>
|
||||
* just common HTML elements...
|
||||
*/
|
||||
|
||||
name = node->value.element.name;
|
||||
name = mxmlGetElement(node);
|
||||
|
||||
if (!strcmp(name, "html") ||
|
||||
!strcmp(name, "head") ||
|
||||
@ -243,10 +243,10 @@ following:</p>
|
||||
*/
|
||||
|
||||
if (sscanf(data, "%u-%u-%uT%u:%u:%uZ",
|
||||
&(dt->year), &(dt->month),
|
||||
&(dt->day), &(dt->hour),
|
||||
&(dt->minute),
|
||||
&(dt->second)) != 6)
|
||||
&(dt->year), &(dt->month),
|
||||
&(dt->day), &(dt->hour),
|
||||
&(dt->minute),
|
||||
&(dt->second)) != 6)
|
||||
{
|
||||
/*
|
||||
* Unable to read numbers, free the data
|
||||
@ -296,8 +296,7 @@ following:</p>
|
||||
* function pointers...
|
||||
*/
|
||||
|
||||
node->value.custom.data = dt;
|
||||
node->value.custom.destroy = free;
|
||||
mxmlSetCustom(node, data, destroy);
|
||||
|
||||
/*
|
||||
* Return with no errors...
|
||||
@ -314,6 +313,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.</p>
|
||||
|
||||
<!-- NEED 15 -->
|
||||
<p>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:</p>
|
||||
@ -326,7 +326,7 @@ save callback could be used for our ISO date/time type:</p>
|
||||
iso_date_time_t *dt;
|
||||
|
||||
|
||||
dt = (iso_date_time_t *)node->custom.data;
|
||||
dt = (iso_date_time_t *)mxmlGetCustom(node);
|
||||
|
||||
snprintf(data, sizeof(data),
|
||||
"%04u-%02u-%02uT%02u:%02u:%02uZ",
|
||||
@ -404,9 +404,8 @@ an index is approximately equal to walking the XML document
|
||||
tree. Nodes in the index are sorted by element name and
|
||||
attribute value.</p>
|
||||
|
||||
<p>Indices are stored in <a
|
||||
href='#mxml_index_t'><tt>mxml_index_t</tt></a> structures. The
|
||||
<a href='#mxmlIndexNew'><tt>mxmlIndexNew()</tt></a> function
|
||||
<p>Indices are stored in <a href='#mxml_index_t'><tt>mxml_index_t</tt></a>
|
||||
structures. The <a href='#mxmlIndexNew'><tt>mxmlIndexNew()</tt></a> function
|
||||
creates a new index:</p>
|
||||
|
||||
<pre>
|
||||
@ -568,7 +567,7 @@ directives like <tt><?xml ... ?></tt> and <tt><!DOCTYPE ... ></tt>
|
||||
* Retain headings and titles...
|
||||
*/
|
||||
|
||||
char *name = node->value.element.name;
|
||||
char *name = mxmlGetElement(node);
|
||||
|
||||
if (!strcmp(name, "html") ||
|
||||
!strcmp(name, "head") ||
|
||||
@ -584,15 +583,17 @@ directives like <tt><?xml ... ?></tt> and <tt><!DOCTYPE ... ></tt>
|
||||
}
|
||||
else if (event == MXML_SAX_DIRECTIVE)
|
||||
mxmlRetain(node);
|
||||
else if (event == MXML_SAX_DATA &&
|
||||
node->parent->ref_count > 1)
|
||||
else if (event == MXML_SAX_DATA)
|
||||
{
|
||||
/*
|
||||
* If the parent was retained, then retain
|
||||
* this data node as well.
|
||||
*/
|
||||
if (mxmlGetRefCount(mxmlGetParent(node)) > 1)
|
||||
{
|
||||
/*
|
||||
* If the parent was retained, then retain
|
||||
* this data node as well.
|
||||
*/
|
||||
|
||||
mxmlRetain(node);
|
||||
mxmlRetain(node);
|
||||
}
|
||||
}
|
||||
}
|
||||
</pre>
|
||||
@ -622,9 +623,9 @@ title and headings in the document would look like:</p>
|
||||
|
||||
if (body)
|
||||
{
|
||||
for (heading = body->child;
|
||||
for (heading = mxmlGetFirstChild(body);
|
||||
heading;
|
||||
heading = heading->next)
|
||||
heading = mxmlGetNextSibling(heading))
|
||||
print_children(heading);
|
||||
}
|
||||
</pre>
|
||||
|
271
doc/basics.html
271
doc/basics.html
@ -23,7 +23,7 @@ functionality:</p>
|
||||
attribute values with no preset limits, just available
|
||||
memory.</li>
|
||||
|
||||
<li>Support for integer, real, opaque ("cdata"), and text
|
||||
<li>Support for integer, real, opaque ("CDATA"), and text
|
||||
data types in "leaf" nodes.</li>
|
||||
|
||||
<li>"Find", "index", and "walk" functions for easily
|
||||
@ -63,74 +63,12 @@ for your installation:</p>
|
||||
|
||||
<h2>Nodes</h2>
|
||||
|
||||
<p>Every piece of information in an XML file (elements, text,
|
||||
numbers) is stored in memory in "nodes". Nodes are defined by
|
||||
the <a
|
||||
href='#mxml_node_t'><tt>mxml_node_t</tt></a>
|
||||
structure. The <a
|
||||
href='#mxml_type_t'><tt>type</tt></a> member
|
||||
defines the node type (element, integer, opaque, real, or text)
|
||||
which determines which value you want to look at in the <a
|
||||
href='#mxml_value_t'><tt>value</tt></a> union.</p>
|
||||
<p>Every piece of information in an XML file is stored in memory in "nodes".
|
||||
Nodes are defined by the <a href='#mxml_node_t'><tt>mxml_node_t</tt></a>
|
||||
structure. Each node has a typed value, optional user data, a parent node,
|
||||
sibling nodes (previous and next), and potentially child nodes.</p>
|
||||
|
||||
<!-- NEED 10 -->
|
||||
<center><table width="80%" border="1" cellpadding="5" cellspacing="0" summary="Mini-XML Node Value Members">
|
||||
<caption align="bottom"><i>Table 2-1: Mini-XML Node Value Members</i></caption>
|
||||
<tr bgcolor="#cccccc">
|
||||
<th>Value</th>
|
||||
<th>Type</th>
|
||||
<th>Node member</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Custom</td>
|
||||
<td><tt>void *</tt></td>
|
||||
<td><tt>node->value.custom.data</tt></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Element</td>
|
||||
<td><tt>char *</tt></td>
|
||||
<td><tt>node->value.element.name</tt></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Integer</td>
|
||||
<td><tt>int</tt></td>
|
||||
<td><tt>node->value.integer</tt></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Opaque (string)</td>
|
||||
<td><tt>char *</tt></td>
|
||||
<td><tt>node->value.opaque</tt></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Real</td>
|
||||
<td><tt>double</tt></td>
|
||||
<td><tt>node->value.real</tt></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Text</td>
|
||||
<td><tt>char *</tt></td>
|
||||
<td><tt>node->value.text.string</tt></td>
|
||||
</tr>
|
||||
</table></center>
|
||||
|
||||
<p>Each node also has a <tt>user_data</tt> member which allows you
|
||||
to associate application-specific data with each node as needed.</p>
|
||||
|
||||
<p>New nodes are created using the <a
|
||||
href='#mxmlNewElement'><tt>mxmlNewElement</tt></a>, <a
|
||||
href='#mxmlNewInteger'><tt>mxmlNewInteger</tt></a>, <a
|
||||
href='#mxmlNewOpaque'><tt>mxmlNewOpaque</tt></a>, <a
|
||||
href='#mxmlNewReal'><tt>mxmlNewReal</tt></a>, <a
|
||||
href='#mxmlNewText'><tt>mxmlNewText</tt></a>, <a
|
||||
href='#mxmlNewTextf'><tt>mxmlNewTextf</tt></a>, and <a
|
||||
href='#mxmlNewXML'><tt>mxmlNewXML</tt></a> functions. Only
|
||||
elements can have child nodes, and the top node must be an element, usually the
|
||||
<tt><?xml version="1.0" encoding="utf-8"?></tt> node created by
|
||||
<tt>mxmlNewXML()</tt>.</p>
|
||||
|
||||
<p>Nodes have pointers to the node above (<tt>parent</tt>), below
|
||||
(<tt>child</tt>), left (<tt>prev</tt>), and right (<tt>next</tt>)
|
||||
of the current node. If you have an XML file like the following:</p>
|
||||
<p>For example, if you have an XML file like the following:</p>
|
||||
|
||||
<pre>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
@ -148,8 +86,7 @@ of the current node. If you have an XML file like the following:</p>
|
||||
</data>
|
||||
</pre>
|
||||
|
||||
<p>the node tree for the file would look like the following in
|
||||
memory:</p>
|
||||
<p>the node tree for the file would look like the following in memory:</p>
|
||||
|
||||
<pre>
|
||||
?xml version="1.0" encoding="utf-8"?
|
||||
@ -165,17 +102,127 @@ memory:</p>
|
||||
val4 val5 val6
|
||||
</pre>
|
||||
|
||||
<p>where "-" is a pointer to the next node and "|" is a pointer
|
||||
to the first child node.</p>
|
||||
<p>where "-" is a pointer to the sibling node and "|" is a pointer
|
||||
to the first child or parent node.</p>
|
||||
|
||||
<p>Once you are done with the XML data, use the <a
|
||||
href='#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 <a href="#mxmlGetType"><tt>mxmlGetType</tt></a> function gets the type of
|
||||
a node, one of <tt>MXML_CUSTOM</tt>, <tt>MXML_ELEMENT</tt>,
|
||||
<tt>MXML_INTEGER</tt>, <tt>MXML_OPAQUE</tt>, <tt>MXML_REAL</tt>, or
|
||||
<tt>MXML_TEXT</tt>. The parent and sibling nodes are accessed using the
|
||||
<a href="#mxmlGetParent"><tt>mxmlGetParent</tt></a>,
|
||||
<a href="#mxmlGetNext"><tt>mxmlGetNext</tt></a>, and
|
||||
<a href="#mxmlGetPrevious"><tt>mxmlGetPrevious</tt></a> functions. The
|
||||
<a href="#mxmlGetUserData"><tt>mxmlGetUserData</tt></a> function gets any user
|
||||
data associated with the node.</p>
|
||||
|
||||
<h3>CDATA Nodes</h3>
|
||||
|
||||
<p>CDATA (<tt>MXML_ELEMENT</tt>) nodes are created using the
|
||||
<a href="#mxmlNewCDATA"><tt>mxmlNewCDATA</tt></a> function. The
|
||||
<a href="#mxmlGetCDATA"><tt>mxmlGetCDATA</tt></a> function retrieves the
|
||||
CDATA string pointer for a node.</p>
|
||||
|
||||
<blockquote><b>Note:</b>
|
||||
|
||||
<p>CDATA nodes are currently stored in memory as special elements. This will
|
||||
be changed in a future major release of Mini-XML.</p>
|
||||
</blockquote>
|
||||
|
||||
<h3>Custom Nodes</h3>
|
||||
|
||||
<p>Custom (<tt>MXML_CUSTOM</tt>) nodes are created using the
|
||||
<a href="#mxmlNewCustom"><tt>mxmlNewCustom</tt></a> function or using a custom
|
||||
load callback specified using the
|
||||
<a href="#mxmlSetCustomHandlers"><tt>mxmlSetCustomHandlers</tt></a> function.
|
||||
The <a href="#mxmlGetCustom"><tt>mxmlGetCustom</tt></a> function retrieves the
|
||||
custom value pointer for a node.</p>
|
||||
|
||||
<h3>Comment Nodes</h3>
|
||||
|
||||
<p>Comment (<tt>MXML_ELEMENT</tt>) nodes are created using the
|
||||
<a href="#mxmlNewElement"><tt>mxmlNewElement</tt></a> function. The
|
||||
<a href="#mxmlGetElement"><tt>mxmlGetElement</tt></a> function retrieves the
|
||||
comment string pointer for a node, including the surrounding "!--" and "--"
|
||||
characters.</p>
|
||||
|
||||
<blockquote><b>Note:</b>
|
||||
|
||||
<p>Comment nodes are currently stored in memory as special elements. This will
|
||||
be changed in a future major release of Mini-XML.</p>
|
||||
</blockquote>
|
||||
|
||||
<h3>Element Nodes</h3>
|
||||
|
||||
<p>Element (<tt>MXML_ELEMENT</tt>) nodes are created using the
|
||||
<a href="#mxmlNewElement"><tt>mxmlNewElement</tt></a> function. The
|
||||
<a href="#mxmlGetElement"><tt>mxmlGetElement</tt></a> function retrieves the
|
||||
element name, the
|
||||
<a href="#mxmlElementGetAttr"><tt>mxmlElementGetAttr</tt></a> function retrieves
|
||||
the value string for a named attribute associated with the element, and the
|
||||
<a href="#mxmlGetFirstChild"><tt>mxmlGetFirstChild</tt></a> and
|
||||
<a href="#mxmlGetLastChild"><tt>mxmlGetLastChild</tt></a> functions retrieve the
|
||||
first and last child nodes for the element, respectively.</p>
|
||||
|
||||
<h3>Integer Nodes</h3>
|
||||
|
||||
<p>Integer (<tt>MXML_INTEGER</tt>) nodes are created using the
|
||||
<a href="#mxmlNewInteger"><tt>mxmlNewInteger</tt></a> function. The
|
||||
<a href="#mxmlGetInteger"><tt>mxmlGetInteger</tt></a> function retrieves the
|
||||
integer value for a node.</p>
|
||||
|
||||
<h3>Opaque Nodes</h3>
|
||||
|
||||
<p>Opaque (<tt>MXML_OPAQUE</tt>) nodes are created using the
|
||||
<a href="#mxmlNewOpaque"><tt>mxmlNewOpaque</tt></a> function. The
|
||||
<a href="#mxmlGetOpaque"><tt>mxmlGetOpaque</tt></a> function retrieves the
|
||||
opaque string pointer for a node. Opaque nodes are like string nodes but
|
||||
preserve all whitespace between nodes.</p>
|
||||
|
||||
<h3>Text Nodes</h3>
|
||||
|
||||
<p>Text (<tt>MXML_TEXT</tt>) nodes are created using the
|
||||
<a href="#mxmlNewText"><tt>mxmlNewText</tt></a> and
|
||||
<a href="#mxmlNewTextf"><tt>mxmlNewTextf</tt></a> functions. Each text node
|
||||
consists of a text string and (leading) whitespace value - the
|
||||
<a href="#mxmlGetText"><tt>mxmlGetText</tt></a> function retrieves the
|
||||
text string pointer and whitespace value for a node.</p>
|
||||
|
||||
<!-- NEED 12 -->
|
||||
<h3>Processing Instruction Nodes</h3>
|
||||
|
||||
<p>Processing instruction (<tt>MXML_ELEMENT</tt>) nodes are created using the
|
||||
<a href="#mxmlNewElement"><tt>mxmlNewElement</tt></a> function. The
|
||||
<a href="#mxmlGetElement"><tt>mxmlGetElement</tt></a> function retrieves the
|
||||
processing instruction string for a node, including the surrounding "?"
|
||||
characters.</p>
|
||||
|
||||
<blockquote><b>Note:</b>
|
||||
|
||||
<p>Processing instruction nodes are currently stored in memory as special
|
||||
elements. This will be changed in a future major release of Mini-XML.</p>
|
||||
</blockquote>
|
||||
|
||||
<h3>Real Number Nodes</h3>
|
||||
|
||||
<p>Real number (<tt>MXML_REAL</tt>) nodes are created using the
|
||||
<a href="#mxmlNewReal"><tt>mxmlNewReal</tt></a> function. The
|
||||
<a href="#mxmlGetReal"><tt>mxmlGetReal</tt></a> function retrieves the
|
||||
CDATA string pointer for a node.</p>
|
||||
|
||||
<!-- NEED 15 -->
|
||||
<h3>XML Declaration Nodes</h3>
|
||||
|
||||
<p>XML declaration (<tt>MXML_ELEMENT</tt>) nodes are created using the
|
||||
<a href="#mxmlNewXML"><tt>mxmlNewXML</tt></a> function. The
|
||||
<a href="#mxmlGetElement"><tt>mxmlGetElement</tt></a> function retrieves the
|
||||
XML declaration string for a node, including the surrounding "?" characters.</p>
|
||||
|
||||
<blockquote><b>Note:</b>
|
||||
|
||||
<p>XML declaration nodes are currently stored in memory as special elements.
|
||||
This will be changed in a future major release of Mini-XML.</p>
|
||||
</blockquote>
|
||||
|
||||
<pre>
|
||||
mxmlDelete(tree);
|
||||
</pre>
|
||||
|
||||
<!-- NEW PAGE -->
|
||||
<h2>Creating XML Documents</h2>
|
||||
@ -216,41 +263,39 @@ create the XML document described in the previous section:</p>
|
||||
mxmlNewText(node, 0, "val8");
|
||||
</pre>
|
||||
|
||||
<p>We start by creating the <tt><?xml version="1.0" encoding="utf-8"?></tt>
|
||||
node common to all XML files using the <a
|
||||
href="#mxmlNewXML"><tt>mxmlNewXML</tt></a> function:</p>
|
||||
<!-- NEED 6 -->
|
||||
<p>We start by creating the declaration node common to all XML files using the
|
||||
<a href="#mxmlNewXML"><tt>mxmlNewXML</tt></a> function:</p>
|
||||
|
||||
<pre>
|
||||
xml = mxmlNewXML("1.0");
|
||||
</pre>
|
||||
|
||||
<p>We then create the <tt><data></tt> node used for this
|
||||
document using the <a
|
||||
href="#mxmlNewElement"><tt>mxmlNewElement</tt></a> function. The
|
||||
first argument specifies the parent node (<tt>xml</tt>) while the
|
||||
second specifies the element name (<tt>data</tt>):</p>
|
||||
<p>We then create the <tt><data></tt> node used for this document using
|
||||
the <a href="#mxmlNewElement"><tt>mxmlNewElement</tt></a> function. The first
|
||||
argument specifies the parent node (<tt>xml</tt>) while the second specifies the
|
||||
element name (<tt>data</tt>):</p>
|
||||
|
||||
<pre>
|
||||
data = mxmlNewElement(xml, "data");
|
||||
</pre>
|
||||
|
||||
<p>Each <tt><node>...</node></tt> in the file is
|
||||
created using the <tt>mxmlNewElement</tt> and <a
|
||||
href="#mxmlNewText"><tt>mxmlNewText</tt></a> functions. The first
|
||||
argument of <tt>mxmlNewText</tt> specifies the parent node
|
||||
(<tt>node</tt>). The second argument specifies whether whitespace
|
||||
appears before the text - 0 or false in this case. The last
|
||||
argument specifies the actual text to add:</p>
|
||||
<p>Each <tt><node>...</node></tt> in the file is created using the
|
||||
<tt>mxmlNewElement</tt> and <a href="#mxmlNewText"><tt>mxmlNewText</tt></a>
|
||||
functions. The first argument of <tt>mxmlNewText</tt> specifies the parent node
|
||||
(<tt>node</tt>). The second argument specifies whether whitespace appears before
|
||||
the text - 0 or false in this case. The last argument specifies the actual text
|
||||
to add:</p>
|
||||
|
||||
<pre>
|
||||
node = mxmlNewElement(data, "node");
|
||||
mxmlNewText(node, 0, "val1");
|
||||
</pre>
|
||||
|
||||
<p>The resulting in-memory XML document can then be saved or
|
||||
processed just like one loaded from disk or a string.</p>
|
||||
<p>The resulting in-memory XML document can then be saved or processed just like
|
||||
one loaded from disk or a string.</p>
|
||||
|
||||
<!-- NEW PAGE -->
|
||||
<!-- NEED 15 -->
|
||||
<h2>Loading XML</h2>
|
||||
|
||||
<p>You load an XML file using the <a
|
||||
@ -311,7 +356,7 @@ document including the <tt>?xml</tt> element if the parent node
|
||||
is <tt>NULL</tt>.</p>
|
||||
|
||||
|
||||
<!-- NEW PAGE -->
|
||||
<!-- NEED 15 -->
|
||||
<h2>Saving XML</h2>
|
||||
|
||||
<p>You save an XML file using the <a
|
||||
@ -366,6 +411,7 @@ a fixed-size buffer, while <tt>mxmlSaveAllocString()</tt>
|
||||
returns a string buffer that was allocated using
|
||||
<tt>malloc()</tt>.</p>
|
||||
|
||||
<!-- NEED 15 -->
|
||||
<h3>Controlling Line Wrapping</h3>
|
||||
|
||||
<p>When saving XML documents, Mini-XML normally wraps output
|
||||
@ -382,6 +428,25 @@ overrides the default wrap margin:</p>
|
||||
mxmlSetWrapMargin(0);
|
||||
</pre>
|
||||
|
||||
<h2>Memory Management</h2>
|
||||
|
||||
<p>Once you are done with the XML data, use the <a
|
||||
href="#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>
|
||||
|
||||
<p>You can also use reference counting to manage memory usage. The
|
||||
<a href="#mxmlRetain"><tt>mxmlRetain</tt></a> and
|
||||
<a href="#mxmlRelease"><tt>mxmlRelease</tt></a> functions increment and
|
||||
decrement a node's use count, respectively. When the use count goes to 0,
|
||||
<tt>mxmlRelease</tt> will automatically call <tt>mxmlDelete</tt> to actually
|
||||
free the memory used by the node tree. New nodes automatically start with a
|
||||
use count of 1.</p>
|
||||
|
||||
|
||||
<!-- NEW PAGE-->
|
||||
<h2>Finding and Iterating Nodes</h2>
|
||||
@ -522,13 +587,15 @@ three constants:</p>
|
||||
|
||||
</ul>
|
||||
|
||||
<h2>Finding Value Nodes</h2>
|
||||
<h2>Finding Specific Nodes</h2>
|
||||
|
||||
<p>You can find the value of a specific node in the tree using the <a
|
||||
href='#mxmlFindValue'><tt>mxmlFindValue</tt></a>, for example:
|
||||
<p>You can find specific nodes in the tree using the <a
|
||||
href='#mxmlFindValue'><tt>mxmlFindPath</tt></a>, for example:
|
||||
|
||||
<pre>
|
||||
mxml_node_t *value = mxmlFindValue(tree, "path/to/*/foo/bar");
|
||||
mxml_node_t *value;
|
||||
|
||||
value = mxmlFindPath(tree, "path/to/*/foo/bar");
|
||||
</pre>
|
||||
|
||||
<p>The second argument is a "path" to the parent node. Each component of the
|
||||
|
@ -18,7 +18,7 @@ as do most vendors' ANSI C compilers) and a "make" program.</p>
|
||||
<li>Supports arbitrary element names, attributes, and attribute values
|
||||
with no preset limits, just available memory.</li>
|
||||
|
||||
<li>Supports integer, real, opaque ("cdata"), and text data types in
|
||||
<li>Supports integer, real, opaque ("CDATA"), and text data types in
|
||||
"leaf" nodes.</li>
|
||||
|
||||
<li>Functions for creating, indexing, and managing trees of data.</li>
|
||||
@ -146,6 +146,29 @@ for (node = mxmlFindElement(tree, tree, "name", NULL,
|
||||
}
|
||||
</pre>
|
||||
|
||||
<p>The "mxmlFindPath()" function finds the (first) value node under a specific
|
||||
element using a "path":</p>
|
||||
|
||||
<pre class='example'>
|
||||
mxml_node_t *value = mxmlFindPath(tree, "path/to/*/foo/bar");
|
||||
</pre>
|
||||
|
||||
<p>The "mxmlGetInteger()", "mxmlGetOpaque()", "mxmlGetReal()", and
|
||||
"mxmlGetText()" functions retrieve the value from a node:</p>
|
||||
|
||||
<pre class='example'>
|
||||
mxml_node_t *node;
|
||||
|
||||
int intvalue = mxmlGetInteger(node);
|
||||
|
||||
const char *opaquevalue = mxmlGetOpaque(node);
|
||||
|
||||
double realvalue = mxmlGetReal(node);
|
||||
|
||||
int whitespacevalue;
|
||||
const char *textvalue = mxmlGetText(node, &whitespacevalue);
|
||||
</pre>
|
||||
|
||||
<p>Finally, once you are done with the XML data, use the
|
||||
"<a href='#mxmlDelete'>mxmlDelete()</a>" function to recursively free the
|
||||
memory that is used for a particular node or the entire tree:</p>
|
||||
|
@ -1,4 +1,4 @@
|
||||
.SH SEE ALSO
|
||||
mxmldoc(1), Mini-XML Programmers Manual, http://www.minixml.org/
|
||||
.SH COPYRIGHT
|
||||
Copyright 2003-2008 by Michael Sweet.
|
||||
Copyright 2003-2011 by Michael Sweet.
|
||||
|
Binary file not shown.
Before Width: | Height: | Size: 138 KiB |
@ -94,7 +94,7 @@ of formats. The <tt>epm</tt> program is available from the
|
||||
following URL:</p>
|
||||
|
||||
<pre>
|
||||
<a href='http://www.easysw.com/epm/'>http://www.easysw.com/epm/</a>
|
||||
<a href="http://www.epmhome.org/">http://www.epmhome.org/</a>
|
||||
</pre>
|
||||
|
||||
<p>Use the <tt>make</tt> command with the <kbd>epm</kbd> target
|
||||
|
@ -37,7 +37,7 @@ and removed libxml2.</p>
|
||||
|
||||
<p>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 3,747
|
||||
complete XML implementation and now stands at a whopping 3,965
|
||||
lines of code, compared to 103,893 lines of code for libxml2
|
||||
version 2.6.9.</p>
|
||||
|
||||
|
@ -19,7 +19,7 @@ preserving the XML data hierarchy.
|
||||
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
|
||||
Supports integer, real, opaque ("CDATA"), and text data types in
|
||||
"leaf" nodes.
|
||||
.IP \(bu 4
|
||||
Functions for creating, indexing, and managing trees of data.
|
||||
@ -141,11 +141,27 @@ You can also iterate with the same function:
|
||||
}
|
||||
.fi
|
||||
.PP
|
||||
To find the value of a specific node in the tree, use the "mxmlFindValue()"
|
||||
To find the value of a specific node in the tree, use the "mxmlFindPath()"
|
||||
function:
|
||||
.nf
|
||||
|
||||
mxml_node_t *value = mxmlFindValue(tree, "path/to/*/foo/bar");
|
||||
mxml_node_t *value = mxmlFindPath(tree, "path/to/*/foo/bar");
|
||||
.fi
|
||||
.PP
|
||||
The "mxmlGetInteger()", "mxmlGetOpaque()", "mxmlGetReal()", and "mxmlGetText()"
|
||||
functions retrieve the value from a node:
|
||||
.nf
|
||||
|
||||
mxml_node_t *node;
|
||||
|
||||
int intvalue = mxmlGetInteger(node);
|
||||
|
||||
const char *opaquevalue = mxmlGetOpaque(node);
|
||||
|
||||
double realvalue = mxmlGetReal(node);
|
||||
|
||||
int whitespacevalue;
|
||||
const char *textvalue = mxmlGetText(node, &whitespacevalue);
|
||||
.fi
|
||||
.PP
|
||||
Finally, once you are done with the XML data, use the
|
||||
|
@ -9,30 +9,26 @@ License</h1>
|
||||
the terms of the GNU Library General Public License version 2
|
||||
(LGPL2) with the following exceptions:</p>
|
||||
|
||||
<ol>
|
||||
<p><b>1.</b> Static linking of applications to the Mini-XML
|
||||
library does not constitute a derivative work and does
|
||||
not require the author to provide source code for the
|
||||
application, use the shared Mini-XML libraries, or link
|
||||
their applications against a user-supplied version of
|
||||
Mini-XML.</p>
|
||||
|
||||
<li>Static linking of applications to the Mini-XML
|
||||
library does not constitute a derivative work and does
|
||||
not require the author to provide source code for the
|
||||
application, use the shared Mini-XML libraries, or link
|
||||
their applications against a user-supplied version of
|
||||
Mini-XML.
|
||||
<p><i>If you link the application to a modified version
|
||||
of Mini-XML, then the changes to Mini-XML must be
|
||||
provided under the terms of the LGPL2 in sections 1, 2,
|
||||
and 4.</i></p>
|
||||
|
||||
<p><i>If you link the application to a modified version
|
||||
of Mini-XML, then the changes to Mini-XML must be
|
||||
provided under the terms of the LGPL2 in sections 1, 2,
|
||||
and 4.</i></p>
|
||||
</li>
|
||||
<p><b>2.</b> You do not have to provide a copy of the Mini-XML
|
||||
license with programs that are linked to the Mini-XML
|
||||
library, nor do you have to identify the Mini-XML license
|
||||
in your program or documentation as required by section 6
|
||||
of the LGPL2.</p>
|
||||
|
||||
<li>You do not have to provide a copy of the Mini-XML
|
||||
license with programs that are linked to the Mini-XML
|
||||
library, nor do you have to identify the Mini-XML license
|
||||
in your program or documentation as required by section 6
|
||||
of the LGPL2.</li>
|
||||
<p> </p>
|
||||
|
||||
</ol>
|
||||
|
||||
<!-- NEW PAGE -->
|
||||
<p align=center><b>GNU LIBRARY GENERAL PUBLIC LICENSE</b></p>
|
||||
<p align='center'>Version 2, June 1991
|
||||
<br>Copyright (C) 1991 Free Software Foundation, Inc.
|
||||
|
BIN
doc/logo.opacity
BIN
doc/logo.opacity
Binary file not shown.
BIN
doc/logo.png
BIN
doc/logo.png
Binary file not shown.
Before Width: | Height: | Size: 25 KiB |
417
doc/mxml.html
417
doc/mxml.html
@ -44,7 +44,20 @@ A { text-decoration: none }
|
||||
<B><A HREF="#BASICS">Getting Started with Mini-XML</A></B>
|
||||
<UL>
|
||||
<LI><A HREF="#3_1">The Basics</A></LI>
|
||||
<LI><A HREF="#3_2">Nodes</A></LI>
|
||||
<LI><A HREF="#3_2">Nodes</A>
|
||||
<UL>
|
||||
<LI><A HREF="#3_2_1">CDATA Nodes</A></LI>
|
||||
<LI><A HREF="#3_2_2">Custom Nodes</A></LI>
|
||||
<LI><A HREF="#3_2_3">Comment Nodes</A></LI>
|
||||
<LI><A HREF="#3_2_4">Element Nodes</A></LI>
|
||||
<LI><A HREF="#3_2_5">Integer Nodes</A></LI>
|
||||
<LI><A HREF="#3_2_6">Opaque Nodes</A></LI>
|
||||
<LI><A HREF="#3_2_7">Text Nodes</A></LI>
|
||||
<LI><A HREF="#3_2_8">Processing Instruction Nodes</A></LI>
|
||||
<LI><A HREF="#3_2_9">Real Number Nodes</A></LI>
|
||||
<LI><A HREF="#3_2_10">XML Declaration Nodes</A></LI>
|
||||
</UL>
|
||||
</LI>
|
||||
<LI><A HREF="#3_3">Creating XML Documents</A></LI>
|
||||
<LI><A HREF="#3_4">Loading XML</A></LI>
|
||||
<LI><A HREF="#3_5">Saving XML</A>
|
||||
@ -52,8 +65,9 @@ A { text-decoration: none }
|
||||
<LI><A HREF="#3_5_1">Controlling Line Wrapping</A></LI>
|
||||
</UL>
|
||||
</LI>
|
||||
<LI><A HREF="#3_6">Finding and Iterating Nodes</A></LI>
|
||||
<LI><A HREF="#3_7">Finding Value Nodes</A></LI>
|
||||
<LI><A HREF="#3_6">Memory Management</A></LI>
|
||||
<LI><A HREF="#3_7">Finding and Iterating Nodes</A></LI>
|
||||
<LI><A HREF="#3_8">Finding Specific Nodes</A></LI>
|
||||
</UL>
|
||||
<B><A HREF="#ADVANCED">More Mini-XML Programming Techniques</A></B>
|
||||
<UL>
|
||||
@ -96,51 +110,52 @@ A { text-decoration: none }
|
||||
<LI><A HREF="#mxmlEntityGetValue">mxmlEntityGetValue</A></LI>
|
||||
<LI><A HREF="#mxmlEntityRemoveCallback">mxmlEntityRemoveCallback</A></LI>
|
||||
<LI><A HREF="#mxmlFindElement">mxmlFindElement</A></LI>
|
||||
<LI><A HREF="#8_2_12">mxmlFindValue</A></LI>
|
||||
<LI><A HREF="#8_2_12">mxmlFindPath</A></LI>
|
||||
<LI><A HREF="#8_2_13">mxmlGetCDATA</A></LI>
|
||||
<LI><A HREF="#8_2_14">mxmlGetCustom</A></LI>
|
||||
<LI><A HREF="#8_2_15">mxmlGetElement</A></LI>
|
||||
<LI><A HREF="#8_2_16">mxmlGetFirstChild</A></LI>
|
||||
<LI><A HREF="#8_2_17">mxmlGetInteger</A></LI>
|
||||
<LI><A HREF="#8_2_18">mxmlGetLastChild</A></LI>
|
||||
<LI><A HREF="#mxmlGetNext">mxmlGetNext</A></LI>
|
||||
<LI><A HREF="#mxmlGetNextSibling">mxmlGetNextSibling</A></LI>
|
||||
<LI><A HREF="#8_2_20">mxmlGetOpaque</A></LI>
|
||||
<LI><A HREF="#8_2_21">mxmlGetParent</A></LI>
|
||||
<LI><A HREF="#8_2_22">mxmlGetPrevious</A></LI>
|
||||
<LI><A HREF="#8_2_22">mxmlGetPrevSibling</A></LI>
|
||||
<LI><A HREF="#8_2_23">mxmlGetReal</A></LI>
|
||||
<LI><A HREF="#8_2_24">mxmlGetText</A></LI>
|
||||
<LI><A HREF="#8_2_25">mxmlGetType</A></LI>
|
||||
<LI><A HREF="#8_2_26">mxmlGetUserData</A></LI>
|
||||
<LI><A HREF="#8_2_24">mxmlGetRefCount</A></LI>
|
||||
<LI><A HREF="#8_2_25">mxmlGetText</A></LI>
|
||||
<LI><A HREF="#8_2_26">mxmlGetType</A></LI>
|
||||
<LI><A HREF="#8_2_27">mxmlGetUserData</A></LI>
|
||||
<LI><A HREF="#mxmlIndexDelete">mxmlIndexDelete</A></LI>
|
||||
<LI><A HREF="#mxmlIndexEnum">mxmlIndexEnum</A></LI>
|
||||
<LI><A HREF="#mxmlIndexFind">mxmlIndexFind</A></LI>
|
||||
<LI><A HREF="#8_2_30">mxmlIndexGetCount</A></LI>
|
||||
<LI><A HREF="#8_2_31">mxmlIndexGetCount</A></LI>
|
||||
<LI><A HREF="#mxmlIndexNew">mxmlIndexNew</A></LI>
|
||||
<LI><A HREF="#mxmlIndexReset">mxmlIndexReset</A></LI>
|
||||
<LI><A HREF="#mxmlLoadFd">mxmlLoadFd</A></LI>
|
||||
<LI><A HREF="#mxmlLoadFile">mxmlLoadFile</A></LI>
|
||||
<LI><A HREF="#mxmlLoadString">mxmlLoadString</A></LI>
|
||||
<LI><A HREF="#8_2_36">mxmlNewCDATA</A></LI>
|
||||
<LI><A HREF="#8_2_37">mxmlNewCustom</A></LI>
|
||||
<LI><A HREF="#8_2_37">mxmlNewCDATA</A></LI>
|
||||
<LI><A HREF="#8_2_38">mxmlNewCustom</A></LI>
|
||||
<LI><A HREF="#mxmlNewElement">mxmlNewElement</A></LI>
|
||||
<LI><A HREF="#mxmlNewInteger">mxmlNewInteger</A></LI>
|
||||
<LI><A HREF="#mxmlNewOpaque">mxmlNewOpaque</A></LI>
|
||||
<LI><A HREF="#mxmlNewReal">mxmlNewReal</A></LI>
|
||||
<LI><A HREF="#mxmlNewText">mxmlNewText</A></LI>
|
||||
<LI><A HREF="#mxmlNewTextf">mxmlNewTextf</A></LI>
|
||||
<LI><A HREF="#8_2_44">mxmlNewXML</A></LI>
|
||||
<LI><A HREF="#8_2_45">mxmlRelease</A></LI>
|
||||
<LI><A HREF="#8_2_45">mxmlNewXML</A></LI>
|
||||
<LI><A HREF="#8_2_46">mxmlRelease</A></LI>
|
||||
<LI><A HREF="#mxmlRemove">mxmlRemove</A></LI>
|
||||
<LI><A HREF="#8_2_47">mxmlRetain</A></LI>
|
||||
<LI><A HREF="#8_2_48">mxmlSAXLoadFd</A></LI>
|
||||
<LI><A HREF="#8_2_49">mxmlSAXLoadFile</A></LI>
|
||||
<LI><A HREF="#8_2_50">mxmlSAXLoadString</A></LI>
|
||||
<LI><A HREF="#8_2_48">mxmlRetain</A></LI>
|
||||
<LI><A HREF="#8_2_49">mxmlSAXLoadFd</A></LI>
|
||||
<LI><A HREF="#8_2_50">mxmlSAXLoadFile</A></LI>
|
||||
<LI><A HREF="#8_2_51">mxmlSAXLoadString</A></LI>
|
||||
<LI><A HREF="#mxmlSaveAllocString">mxmlSaveAllocString</A></LI>
|
||||
<LI><A HREF="#mxmlSaveFd">mxmlSaveFd</A></LI>
|
||||
<LI><A HREF="#mxmlSaveFile">mxmlSaveFile</A></LI>
|
||||
<LI><A HREF="#mxmlSaveString">mxmlSaveString</A></LI>
|
||||
<LI><A HREF="#8_2_55">mxmlSetCDATA</A></LI>
|
||||
<LI><A HREF="#8_2_56">mxmlSetCustom</A></LI>
|
||||
<LI><A HREF="#8_2_56">mxmlSetCDATA</A></LI>
|
||||
<LI><A HREF="#8_2_57">mxmlSetCustom</A></LI>
|
||||
<LI><A HREF="#mxmlSetCustomHandlers">mxmlSetCustomHandlers</A></LI>
|
||||
<LI><A HREF="#mxmlSetElement">mxmlSetElement</A></LI>
|
||||
<LI><A HREF="#mxmlSetErrorCallback">mxmlSetErrorCallback</A></LI>
|
||||
@ -149,8 +164,8 @@ A { text-decoration: none }
|
||||
<LI><A HREF="#mxmlSetReal">mxmlSetReal</A></LI>
|
||||
<LI><A HREF="#mxmlSetText">mxmlSetText</A></LI>
|
||||
<LI><A HREF="#mxmlSetTextf">mxmlSetTextf</A></LI>
|
||||
<LI><A HREF="#8_2_65">mxmlSetUserData</A></LI>
|
||||
<LI><A HREF="#8_2_66">mxmlSetWrapMargin</A></LI>
|
||||
<LI><A HREF="#8_2_66">mxmlSetUserData</A></LI>
|
||||
<LI><A HREF="#8_2_67">mxmlSetWrapMargin</A></LI>
|
||||
<LI><A HREF="#mxmlWalkNext">mxmlWalkNext</A></LI>
|
||||
<LI><A HREF="#mxmlWalkPrev">mxmlWalkPrev</A></LI>
|
||||
</UL>
|
||||
@ -203,7 +218,7 @@ libxml2</TT> library with something substantially smaller and
|
||||
libxml2.</P>
|
||||
<P>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 3,747 lines of code,
|
||||
implementation and now stands at a whopping 3,965 lines of code,
|
||||
compared to 103,893 lines of code for libxml2 version 2.6.9.</P>
|
||||
<P>Aside from Gutenprint, Mini-XML is used for the following
|
||||
projects/software applications:</P>
|
||||
@ -386,7 +401,7 @@ rpmbuild(8)</TT> software to create Red Hat Package Manager ("RPM")
|
||||
epm(1)</TT> program to create software packages in a variety of formats.
|
||||
The <TT>epm</TT> program is available from the following URL:</P>
|
||||
<PRE>
|
||||
<A href="http://www.easysw.com/epm/">http://www.easysw.com/epm/</A>
|
||||
<A href="http://www.epmhome.org/">http://www.epmhome.org/</A>
|
||||
</PRE>
|
||||
<P>Use the <TT>make</TT> command with the <KBD>epm</KBD> target to
|
||||
create portable and native packages for your system:</P>
|
||||
@ -413,7 +428,7 @@ hspace="10" src="2.gif" width="100"></A>Getting Started with Mini-XML</H1>
|
||||
<LI>Writing of UTF-8 encoded XML files and strings.</LI>
|
||||
<LI>Support for arbitrary element names, attributes, and attribute
|
||||
values with no preset limits, just available memory.</LI>
|
||||
<LI>Support for integer, real, opaque ("cdata"), and text data types in
|
||||
<LI>Support for integer, real, opaque ("CDATA"), and text data types in
|
||||
"leaf" nodes.</LI>
|
||||
<LI>"Find", "index", and "walk" functions for easily accessing data in
|
||||
an XML document.</LI>
|
||||
@ -440,47 +455,12 @@ hspace="10" src="2.gif" width="100"></A>Getting Started with Mini-XML</H1>
|
||||
<KBD>pkg-config --libs mxml ENTER</KBD>
|
||||
</PRE>
|
||||
<H2><A NAME="3_2">Nodes</A></H2>
|
||||
<P>Every piece of information in an XML file (elements, text, numbers)
|
||||
is stored in memory in "nodes". Nodes are defined by the <A href="#mxml_node_t">
|
||||
<TT>mxml_node_t</TT></A> structure. The <A href="#mxml_type_t"><TT>type</TT>
|
||||
</A> member defines the node type (element, integer, opaque, real, or
|
||||
text) which determines which value you want to look at in the <A href="#mxml_value_t">
|
||||
<TT>value</TT></A> union.</P>
|
||||
|
||||
<!-- NEED 10 -->
|
||||
<CENTER>
|
||||
<TABLE border="1" cellpadding="5" cellspacing="0" summary="Mini-XML Node Value Members"
|
||||
width="80%"><CAPTION align="bottom"><I> Table 2-1: Mini-XML Node Value
|
||||
Members</I></CAPTION>
|
||||
<TR bgcolor="#cccccc"><TH>Value</TH><TH>Type</TH><TH>Node member</TH></TR>
|
||||
<TR><TD>Custom</TD><TD><TT>void *</TT></TD><TD><TT>
|
||||
node->value.custom.data</TT></TD></TR>
|
||||
<TR><TD>Element</TD><TD><TT>char *</TT></TD><TD><TT>
|
||||
node->value.element.name</TT></TD></TR>
|
||||
<TR><TD>Integer</TD><TD><TT>int</TT></TD><TD><TT>node->value.integer</TT>
|
||||
</TD></TR>
|
||||
<TR><TD>Opaque (string)</TD><TD><TT>char *</TT></TD><TD><TT>
|
||||
node->value.opaque</TT></TD></TR>
|
||||
<TR><TD>Real</TD><TD><TT>double</TT></TD><TD><TT>node->value.real</TT></TD>
|
||||
</TR>
|
||||
<TR><TD>Text</TD><TD><TT>char *</TT></TD><TD><TT>node->value.text.string</TT>
|
||||
</TD></TR>
|
||||
</TABLE>
|
||||
</CENTER>
|
||||
<P>Each node also has a <TT>user_data</TT> member which allows you to
|
||||
associate application-specific data with each node as needed.</P>
|
||||
<P>New nodes are created using the <A href="#mxmlNewElement"><TT>
|
||||
mxmlNewElement</TT></A>, <A href="#mxmlNewInteger"><TT>mxmlNewInteger</TT>
|
||||
</A>, <A href="#mxmlNewOpaque"><TT>mxmlNewOpaque</TT></A>, <A href="#mxmlNewReal">
|
||||
<TT>mxmlNewReal</TT></A>, <A href="#mxmlNewText"><TT>mxmlNewText</TT></A>
|
||||
, <A href="#mxmlNewTextf"><TT>mxmlNewTextf</TT></A>, and <A href="#mxmlNewXML">
|
||||
<TT>mxmlNewXML</TT></A> functions. Only elements can have child nodes,
|
||||
and the top node must be an element, usually the <TT><?xml
|
||||
version="1.0" encoding="utf-8"?></TT> node created by <TT>mxmlNewXML()</TT>
|
||||
.</P>
|
||||
<P>Nodes have pointers to the node above (<TT>parent</TT>), below (<TT>
|
||||
child</TT>), left (<TT>prev</TT>), and right (<TT>next</TT>) of the
|
||||
current node. If you have an XML file like the following:</P>
|
||||
<P>Every piece of information in an XML file is stored in memory in
|
||||
"nodes". Nodes are defined by the <A href="#mxml_node_t"><TT>
|
||||
mxml_node_t</TT></A> structure. Each node has a typed value, optional
|
||||
user data, a parent node, sibling nodes (previous and next), and
|
||||
potentially child nodes.</P>
|
||||
<P>For example, if you have an XML file like the following:</P>
|
||||
<PRE>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<data>
|
||||
@ -510,15 +490,96 @@ child</TT>), left (<TT>prev</TT>), and right (<TT>next</TT>) of the
|
||||
| | |
|
||||
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="#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>
|
||||
<P>where "-" is a pointer to the sibling node and "|" is a pointer to
|
||||
the first child or parent node.</P>
|
||||
<P>The <A href="#mxmlGetType"><TT>mxmlGetType</TT></A> function gets the
|
||||
type of a node, one of <TT>MXML_CUSTOM</TT>, <TT>MXML_ELEMENT</TT>, <TT>
|
||||
MXML_INTEGER</TT>, <TT>MXML_OPAQUE</TT>, <TT>MXML_REAL</TT>, or <TT>
|
||||
MXML_TEXT</TT>. The parent and sibling nodes are accessed using the <A href="#mxmlGetParent">
|
||||
<TT>mxmlGetParent</TT></A>, <A href="#mxmlGetNext"><TT>mxmlGetNext</TT></A>
|
||||
, and <A href="#mxmlGetPrevious"><TT>mxmlGetPrevious</TT></A> functions.
|
||||
The <A href="#mxmlGetUserData"><TT>mxmlGetUserData</TT></A> function
|
||||
gets any user data associated with the node.</P>
|
||||
<H3><A NAME="3_2_1">CDATA Nodes</A></H3>
|
||||
<P>CDATA (<TT>MXML_ELEMENT</TT>) nodes are created using the <A href="#mxmlNewCDATA">
|
||||
<TT>mxmlNewCDATA</TT></A> function. The <A href="#mxmlGetCDATA"><TT>
|
||||
mxmlGetCDATA</TT></A> function retrieves the CDATA string pointer for a
|
||||
node.</P>
|
||||
<BLOCKQUOTE><B>Note:</B>
|
||||
<P>CDATA nodes are currently stored in memory as special elements. This
|
||||
will be changed in a future major release of Mini-XML.</P>
|
||||
</BLOCKQUOTE>
|
||||
<H3><A NAME="3_2_2">Custom Nodes</A></H3>
|
||||
<P>Custom (<TT>MXML_CUSTOM</TT>) nodes are created using the <A href="#mxmlNewCustom">
|
||||
<TT>mxmlNewCustom</TT></A> function or using a custom load callback
|
||||
specified using the <A href="#mxmlSetCustomHandlers"><TT>
|
||||
mxmlSetCustomHandlers</TT></A> function. The <A href="#mxmlGetCustom"><TT>
|
||||
mxmlGetCustom</TT></A> function retrieves the custom value pointer for a
|
||||
node.</P>
|
||||
<H3><A NAME="3_2_3">Comment Nodes</A></H3>
|
||||
<P>Comment (<TT>MXML_ELEMENT</TT>) nodes are created using the <A href="#mxmlNewElement">
|
||||
<TT>mxmlNewElement</TT></A> function. The <A href="#mxmlGetElement"><TT>
|
||||
mxmlGetElement</TT></A> function retrieves the comment string pointer
|
||||
for a node, including the surrounding "!--" and "--" characters.</P>
|
||||
<BLOCKQUOTE><B>Note:</B>
|
||||
<P>Comment nodes are currently stored in memory as special elements.
|
||||
This will be changed in a future major release of Mini-XML.</P>
|
||||
</BLOCKQUOTE>
|
||||
<H3><A NAME="3_2_4">Element Nodes</A></H3>
|
||||
<P>Element (<TT>MXML_ELEMENT</TT>) nodes are created using the <A href="#mxmlNewElement">
|
||||
<TT>mxmlNewElement</TT></A> function. The <A href="#mxmlGetElement"><TT>
|
||||
mxmlGetElement</TT></A> function retrieves the element name, the <A href="#mxmlElementGetAttr">
|
||||
<TT>mxmlElementGetAttr</TT></A> function retrieves the value string for
|
||||
a named attribute associated with the element, and the <A href="#mxmlGetFirstChild">
|
||||
<TT>mxmlGetFirstChild</TT></A> and <A href="#mxmlGetLastChild"><TT>
|
||||
mxmlGetLastChild</TT></A> functions retrieve the first and last child
|
||||
nodes for the element, respectively.</P>
|
||||
<H3><A NAME="3_2_5">Integer Nodes</A></H3>
|
||||
<P>Integer (<TT>MXML_INTEGER</TT>) nodes are created using the <A href="#mxmlNewInteger">
|
||||
<TT>mxmlNewInteger</TT></A> function. The <A href="#mxmlGetInteger"><TT>
|
||||
mxmlGetInteger</TT></A> function retrieves the integer value for a node.</P>
|
||||
<H3><A NAME="3_2_6">Opaque Nodes</A></H3>
|
||||
<P>Opaque (<TT>MXML_OPAQUE</TT>) nodes are created using the <A href="#mxmlNewOpaque">
|
||||
<TT>mxmlNewOpaque</TT></A> function. The <A href="#mxmlGetOpaque"><TT>
|
||||
mxmlGetOpaque</TT></A> function retrieves the opaque string pointer for
|
||||
a node. Opaque nodes are like string nodes but preserve all whitespace
|
||||
between nodes.</P>
|
||||
<H3><A NAME="3_2_7">Text Nodes</A></H3>
|
||||
<P>Text (<TT>MXML_TEXT</TT>) nodes are created using the <A href="#mxmlNewText">
|
||||
<TT>mxmlNewText</TT></A> and <A href="#mxmlNewTextf"><TT>mxmlNewTextf</TT>
|
||||
</A> functions. Each text node consists of a text string and (leading)
|
||||
whitespace value - the <A href="#mxmlGetText"><TT>mxmlGetText</TT></A>
|
||||
function retrieves the text string pointer and whitespace value for a
|
||||
node.</P>
|
||||
|
||||
<!-- NEED 12 -->
|
||||
<H3><A NAME="3_2_8">Processing Instruction Nodes</A></H3>
|
||||
<P>Processing instruction (<TT>MXML_ELEMENT</TT>) nodes are created
|
||||
using the <A href="#mxmlNewElement"><TT>mxmlNewElement</TT></A>
|
||||
function. The <A href="#mxmlGetElement"><TT>mxmlGetElement</TT></A>
|
||||
function retrieves the processing instruction string for a node,
|
||||
including the surrounding "?" characters.</P>
|
||||
<BLOCKQUOTE><B>Note:</B>
|
||||
<P>Processing instruction nodes are currently stored in memory as
|
||||
special elements. This will be changed in a future major release of
|
||||
Mini-XML.</P>
|
||||
</BLOCKQUOTE>
|
||||
<H3><A NAME="3_2_9">Real Number Nodes</A></H3>
|
||||
<P>Real number (<TT>MXML_REAL</TT>) nodes are created using the <A href="#mxmlNewReal">
|
||||
<TT>mxmlNewReal</TT></A> function. The <A href="#mxmlGetReal"><TT>
|
||||
mxmlGetReal</TT></A> function retrieves the CDATA string pointer for a
|
||||
node.</P>
|
||||
|
||||
<!-- NEED 15 -->
|
||||
<H3><A NAME="3_2_10">XML Declaration Nodes</A></H3>
|
||||
<P>XML declaration (<TT>MXML_ELEMENT</TT>) nodes are created using the <A
|
||||
href="#mxmlNewXML"><TT>mxmlNewXML</TT></A> function. The <A href="#mxmlGetElement">
|
||||
<TT>mxmlGetElement</TT></A> function retrieves the XML declaration
|
||||
string for a node, including the surrounding "?" characters.</P>
|
||||
<BLOCKQUOTE><B>Note:</B>
|
||||
<P>XML declaration nodes are currently stored in memory as special
|
||||
elements. This will be changed in a future major release of Mini-XML.</P>
|
||||
</BLOCKQUOTE>
|
||||
<!-- NEW PAGE -->
|
||||
<H2><A NAME="3_3">Creating XML Documents</A></H2>
|
||||
<P>You can create and update XML documents in memory using the various <TT>
|
||||
@ -555,9 +616,10 @@ mxmlNew</TT> functions. The following code will create the XML document
|
||||
node = mxmlNewElement(data, "node");
|
||||
mxmlNewText(node, 0, "val8");
|
||||
</PRE>
|
||||
<P>We start by creating the <TT><?xml version="1.0" encoding="utf-8"?></TT>
|
||||
node common to all XML files using the <A href="#mxmlNewXML"><TT>
|
||||
mxmlNewXML</TT></A> function:</P>
|
||||
|
||||
<!-- NEED 6 -->
|
||||
<P>We start by creating the declaration node common to all XML files
|
||||
using the <A href="#mxmlNewXML"><TT>mxmlNewXML</TT></A> function:</P>
|
||||
<PRE>
|
||||
xml = mxmlNewXML("1.0");
|
||||
</PRE>
|
||||
@ -581,7 +643,7 @@ mxmlNewElement</TT> and <A href="#mxmlNewText"><TT>mxmlNewText</TT></A>
|
||||
<P>The resulting in-memory XML document can then be saved or processed
|
||||
just like one loaded from disk or a string.</P>
|
||||
|
||||
<!-- NEW PAGE -->
|
||||
<!-- NEED 15 -->
|
||||
<H2><A NAME="3_4">Loading XML</A></H2>
|
||||
<P>You load an XML file using the <A href="#mxmlLoadFile"><TT>
|
||||
mxmlLoadFile</TT></A> function:</P>
|
||||
@ -629,7 +691,7 @@ mxmlLoadFile()</TT>. The second argument specifies the string or
|
||||
character buffer to load and must be a complete XML document including
|
||||
the <TT>?xml</TT> element if the parent node is <TT>NULL</TT>.</P>
|
||||
|
||||
<!-- NEW PAGE -->
|
||||
<!-- NEED 15 -->
|
||||
<H2><A NAME="3_5">Saving XML</A></H2>
|
||||
<P>You save an XML file using the <A href="#mxmlSaveFile"><TT>
|
||||
mxmlSaveFile</TT></A> function:</P>
|
||||
@ -670,6 +732,8 @@ mxmlSaveFile()</TT>. The <TT>mxmlSaveString</TT> function takes pointer
|
||||
and size arguments for saving the XML document to a fixed-size buffer,
|
||||
while <TT>mxmlSaveAllocString()</TT> returns a string buffer that was
|
||||
allocated using <TT>malloc()</TT>.</P>
|
||||
|
||||
<!-- NEED 15 -->
|
||||
<H3><A NAME="3_5_1">Controlling Line Wrapping</A></H3>
|
||||
<P>When saving XML documents, Mini-XML normally wraps output lines at
|
||||
column 75 so that the text is readable in terminal windows. The <A href="#mxmlSetWrapMargin">
|
||||
@ -682,9 +746,22 @@ mxmlSaveFile()</TT>. The <TT>mxmlSaveString</TT> function takes pointer
|
||||
/* Disable wrapping */
|
||||
mxmlSetWrapMargin(0);
|
||||
</PRE>
|
||||
<H2><A NAME="3_6">Memory Management</A></H2>
|
||||
<P>Once you are done with the XML data, use the <A href="#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>
|
||||
<P>You can also use reference counting to manage memory usage. The <A href="#mxmlRetain">
|
||||
<TT>mxmlRetain</TT></A> and <A href="#mxmlRelease"><TT>mxmlRelease</TT></A>
|
||||
functions increment and decrement a node's use count, respectively.
|
||||
When the use count goes to 0, <TT>mxmlRelease</TT> will automatically
|
||||
call <TT>mxmlDelete</TT> to actually free the memory used by the node
|
||||
tree. New nodes automatically start with a use count of 1.</P>
|
||||
|
||||
<!-- NEW PAGE-->
|
||||
<H2><A NAME="3_6">Finding and Iterating Nodes</A></H2>
|
||||
<H2><A NAME="3_7">Finding and Iterating Nodes</A></H2>
|
||||
<P>The <A href="#mxmlWalkPrev"><TT>mxmlWalkPrev</TT></A> and <A href="#mxmlWalkNext">
|
||||
<TT>mxmlWalkNext</TT></A>functions can be used to iterate through the
|
||||
XML node tree:</P>
|
||||
@ -806,11 +883,13 @@ mxmlSaveFile()</TT>. The <TT>mxmlSaveString</TT> function takes pointer
|
||||
the order would be reversed, ending at "?xml".</P>
|
||||
</LI>
|
||||
</UL>
|
||||
<H2><A NAME="3_7">Finding Value Nodes</A></H2>
|
||||
<P>You can find the value of a specific node in the tree using the <A href="#mxmlFindValue">
|
||||
<TT>mxmlFindValue</TT></A>, for example:</P>
|
||||
<H2><A NAME="3_8">Finding Specific Nodes</A></H2>
|
||||
<P>You can find specific nodes in the tree using the <A href="#mxmlFindValue">
|
||||
<TT>mxmlFindPath</TT></A>, for example:</P>
|
||||
<PRE>
|
||||
mxml_node_t *value = mxmlFindValue(tree, "path/to/*/foo/bar");
|
||||
mxml_node_t *value;
|
||||
|
||||
value = mxmlFindPath(tree, "path/to/*/foo/bar");
|
||||
</PRE>
|
||||
<P>The second argument is a "path" to the parent node. Each component of
|
||||
the path is separated by a slash (/) and represents a named element in
|
||||
@ -865,7 +944,7 @@ MXML_REAL</TT>, or <TT>MXML_TEXT</TT>. The function is called<I> after</I>
|
||||
|
||||
type = mxmlElementGetAttr(node, "type");
|
||||
if (type == NULL)
|
||||
type = node->value.element.name;
|
||||
type = mxmlGetElement(node);
|
||||
|
||||
if (!strcmp(type, "integer"))
|
||||
return (MXML_INTEGER);
|
||||
@ -916,7 +995,7 @@ MXML_WS_BEFORE_CLOSE</TT>, or <TT>MXML_WS_AFTER_CLOSE</TT>. The callback
|
||||
* just common HTML elements...
|
||||
*/
|
||||
|
||||
name = node->value.element.name;
|
||||
name = mxmlGetElement(node);
|
||||
|
||||
if (!strcmp(name, "html") ||
|
||||
!strcmp(name, "head") ||
|
||||
@ -1080,8 +1159,7 @@ MXML_WS_BEFORE_CLOSE</TT>, or <TT>MXML_WS_AFTER_CLOSE</TT>. The callback
|
||||
* function pointers...
|
||||
*/
|
||||
|
||||
node->value.custom.data = dt;
|
||||
node->value.custom.destroy = free;
|
||||
mxmlSetCustom(node, data, destroy);
|
||||
|
||||
/*
|
||||
* Return with no errors...
|
||||
@ -1095,6 +1173,8 @@ MXML_WS_BEFORE_CLOSE</TT>, or <TT>MXML_WS_AFTER_CLOSE</TT>. The callback
|
||||
contain a <TT>void</TT> pointer to the allocated custom data for the
|
||||
node and a pointer to a destructor function which will free the custom
|
||||
data when the node is deleted.</P>
|
||||
|
||||
<!-- NEED 15 -->
|
||||
<P>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:</P>
|
||||
@ -1106,7 +1186,7 @@ MXML_WS_BEFORE_CLOSE</TT>, or <TT>MXML_WS_AFTER_CLOSE</TT>. The callback
|
||||
iso_date_time_t *dt;
|
||||
|
||||
|
||||
dt = (iso_date_time_t *)node->custom.data;
|
||||
dt = (iso_date_time_t *)mxmlGetCustom(node);
|
||||
|
||||
snprintf(data, sizeof(data),
|
||||
"%04u-%02u-%02uT%02u:%02u:%02uZ",
|
||||
@ -1297,7 +1377,7 @@ mxmlRetain</TT></A> function. For example, the following SAX callback
|
||||
* Retain headings and titles...
|
||||
*/
|
||||
|
||||
char *name = node->value.element.name;
|
||||
char *name = mxmlGetElement(node);
|
||||
|
||||
if (!strcmp(name, "html") ||
|
||||
!strcmp(name, "head") ||
|
||||
@ -1313,15 +1393,17 @@ mxmlRetain</TT></A> function. For example, the following SAX callback
|
||||
}
|
||||
else if (event == MXML_SAX_DIRECTIVE)
|
||||
mxmlRetain(node);
|
||||
else if (event == MXML_SAX_DATA &&
|
||||
node->parent->ref_count > 1)
|
||||
else if (event == MXML_SAX_DATA)
|
||||
{
|
||||
/*
|
||||
* If the parent was retained, then retain
|
||||
* this data node as well.
|
||||
*/
|
||||
if (mxmlGetRefCount(mxmlGetParent(node)) > 1)
|
||||
{
|
||||
/*
|
||||
* If the parent was retained, then retain
|
||||
* this data node as well.
|
||||
*/
|
||||
|
||||
mxmlRetain(node);
|
||||
mxmlRetain(node);
|
||||
}
|
||||
}
|
||||
}
|
||||
</PRE>
|
||||
@ -1349,9 +1431,9 @@ mxmlRetain</TT></A> function. For example, the following SAX callback
|
||||
|
||||
if (body)
|
||||
{
|
||||
for (heading = body->child;
|
||||
for (heading = mxmlGetFirstChild(body);
|
||||
heading;
|
||||
heading = heading->next)
|
||||
heading = mxmlGetNextSibling(heading))
|
||||
print_children(heading);
|
||||
}
|
||||
</PRE>
|
||||
@ -1417,7 +1499,7 @@ hspace="10" src="4.gif" width="100"></A>Using the mxmldoc Utility</H1>
|
||||
will document all public names it finds in your source files - any
|
||||
names starting with the underscore character (_) or names that are
|
||||
documented with the <A HREF="#ATDIRECTIVES">@private@</A> directive are
|
||||
treated as private and are undocumented.</P>
|
||||
treated as private and are not documented.</P>
|
||||
<P>Comments appearing directly before a function or type definition are
|
||||
used to document that function or type. Comments appearing after
|
||||
argument, definition, return type, or variable declarations are used to
|
||||
@ -1472,8 +1554,8 @@ hspace="10" src="4.gif" width="100"></A>Using the mxmldoc Utility</H1>
|
||||
included in the documentation</LI>
|
||||
<LI><TT>@since ...@</TT> - flags the item as new since a particular
|
||||
release. The text following the <TT>@since</TT> up to the closing <TT>@</TT>
|
||||
is highlighted in the generated documentation, e.g. <TT>@since CUPS
|
||||
1.3@</TT>.</LI>
|
||||
is highlighted in the generated documentation, e.g. <TT>@since Mini-XML
|
||||
2.7@</TT>.</LI>
|
||||
</UL>
|
||||
|
||||
<!-- NEED 10 -->
|
||||
@ -1513,22 +1595,19 @@ hspace="10" src="A.gif" width="100"></A>Mini-XML License</H1>
|
||||
<P>The Mini-XML library and included programs are provided under the
|
||||
terms of the GNU Library General Public License version 2 (LGPL2) with
|
||||
the following exceptions:</P>
|
||||
<OL>
|
||||
<LI>Static linking of applications to the Mini-XML library does not
|
||||
constitute a derivative work and does not require the author to provide
|
||||
source code for the application, use the shared Mini-XML libraries, or
|
||||
link their applications against a user-supplied version of Mini-XML.
|
||||
<P><B>1.</B> Static linking of applications to the Mini-XML library does
|
||||
not constitute a derivative work and does not require the author to
|
||||
provide source code for the application, use the shared Mini-XML
|
||||
libraries, or link their applications against a user-supplied version
|
||||
of Mini-XML.</P>
|
||||
<P><I>If you link the application to a modified version of Mini-XML,
|
||||
then the changes to Mini-XML must be provided under the terms of the
|
||||
LGPL2 in sections 1, 2, and 4.</I></P>
|
||||
</LI>
|
||||
<LI>You do not have to provide a copy of the Mini-XML license with
|
||||
programs that are linked to the Mini-XML library, nor do you have to
|
||||
identify the Mini-XML license in your program or documentation as
|
||||
required by section 6 of the LGPL2.</LI>
|
||||
</OL>
|
||||
|
||||
<!-- NEW PAGE -->
|
||||
<P><B>2.</B> You do not have to provide a copy of the Mini-XML license
|
||||
with programs that are linked to the Mini-XML library, nor do you have
|
||||
to identify the Mini-XML license in your program or documentation as
|
||||
required by section 6 of the LGPL2.</P>
|
||||
<P> </P>
|
||||
<P align="center"><B>GNU LIBRARY GENERAL PUBLIC LICENSE</B></P>
|
||||
<P align="center">Version 2, June 1991
|
||||
<BR> Copyright (C) 1991 Free Software Foundation, Inc.
|
||||
@ -1947,9 +2026,12 @@ hspace="10" src="A.gif" width="100"></A>Mini-XML License</H1>
|
||||
hspace="10" src="B.gif" width="100"></A>Release Notes</H1>
|
||||
<H2><A NAME="7_1">Changes in Mini-XML 2.7</A></H2>
|
||||
<UL>
|
||||
<LI>Added data accessor ("get") functions and made the mxml_node_t and
|
||||
mxml_index_t structures private but still available in the Mini-XML
|
||||
header to preserve source compatibility (STR #118)</LI>
|
||||
<LI>Updated the source headers to reference the Mini-XML license and its
|
||||
exceptions to the LGPL2 (STR #108)</LI>
|
||||
<LI>Added a new mxmlFindValue() function to find the value node of a
|
||||
<LI>Added a new mxmlFindPath() function to find the value node of a
|
||||
named element (STR #110)</LI>
|
||||
<LI>Building a static version of the library did not work on Windows
|
||||
(STR #112)</LI>
|
||||
@ -2261,8 +2343,8 @@ mxmlEntityGetValue</A></LI>
|
||||
mxmlEntityRemoveCallback</A></LI>
|
||||
<LI><A href="#mxmlFindElement" title="Find the named element.">
|
||||
mxmlFindElement</A></LI>
|
||||
<LI><A href="#mxmlFindValue" title="Find a value with the given path.">
|
||||
mxmlFindValue</A></LI>
|
||||
<LI><A href="#mxmlFindPath" title="Find a node with the given path.">
|
||||
mxmlFindPath</A></LI>
|
||||
<LI><A href="#mxmlGetCDATA" title="Get the value for a CDATA node.">
|
||||
mxmlGetCDATA</A></LI>
|
||||
<LI><A href="#mxmlGetCustom" title="Get the value for a custom node.">
|
||||
@ -2275,16 +2357,18 @@ mxmlGetFirstChild</A></LI>
|
||||
mxmlGetInteger</A></LI>
|
||||
<LI><A href="#mxmlGetLastChild" title="Get the last child of an element node.">
|
||||
mxmlGetLastChild</A></LI>
|
||||
<LI><A href="#mxmlGetNext" title="Return the node type...">mxmlGetNext</A>
|
||||
</LI>
|
||||
<LI><A href="#mxmlGetNextSibling" title="Return the node type...">
|
||||
mxmlGetNextSibling</A></LI>
|
||||
<LI><A href="#mxmlGetOpaque" title="Get an opaque string value for a node or its first child.">
|
||||
mxmlGetOpaque</A></LI>
|
||||
<LI><A href="#mxmlGetParent" title="Get the parent node.">mxmlGetParent</A>
|
||||
</LI>
|
||||
<LI><A href="#mxmlGetPrevious" title="Get the previous node for the current parent.">
|
||||
mxmlGetPrevious</A></LI>
|
||||
<LI><A href="#mxmlGetPrevSibling" title="Get the previous node for the current parent.">
|
||||
mxmlGetPrevSibling</A></LI>
|
||||
<LI><A href="#mxmlGetReal" title="Get the real value for a node or its first child.">
|
||||
mxmlGetReal</A></LI>
|
||||
<LI><A href="#mxmlGetRefCount" title="Get the current reference (use) count for a node.">
|
||||
mxmlGetRefCount</A></LI>
|
||||
<LI><A href="#mxmlGetText" title="Get the text value for a node or its first child.">
|
||||
mxmlGetText</A></LI>
|
||||
<LI><A href="#mxmlGetType" title="Get the node type.">mxmlGetType</A></LI>
|
||||
@ -2624,9 +2708,9 @@ mxmlEntityRemoveCallback</A></H3>
|
||||
children.</P>
|
||||
<H3 class="function"><A NAME="8_2_12">
|
||||
<!--span class="info"-->
|
||||
Mini-XML 2.7 <A name="mxmlFindValue">mxmlFindValue</A></A></H3>
|
||||
<P class="description">Find a value with the given path.</P>
|
||||
<P class="code"> <A href="#mxml_node_t">mxml_node_t</A> *mxmlFindValue (
|
||||
Mini-XML 2.7 <A name="mxmlFindPath">mxmlFindPath</A></A></H3>
|
||||
<P class="description">Find a node with the given path.</P>
|
||||
<P class="code"> <A href="#mxml_node_t">mxml_node_t</A> *mxmlFindPath (
|
||||
<BR> <A href="#mxml_node_t">mxml_node_t</A> *top,
|
||||
<BR> const char *path
|
||||
<BR> );</P>
|
||||
@ -2638,17 +2722,20 @@ mxmlEntityRemoveCallback</A></H3>
|
||||
<DD class="description">Path to element</DD>
|
||||
</DL>
|
||||
<H4 class="returnvalue">Return Value</H4>
|
||||
<P class="description">First value node or NULL</P>
|
||||
<P class="description">Found node or NULL</P>
|
||||
<H4 class="discussion">Discussion</H4>
|
||||
<P class="discussion">The "path" is a slash-separated list of element
|
||||
names. The name "*" is considered a wildcard for one or more levels of
|
||||
elements. For example, "foo/one/two", "bar/two/one", "*/one", and so
|
||||
forth.</P>
|
||||
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"><A NAME="8_2_13">
|
||||
<!--span class="info"-->
|
||||
Mini-XML 2.7 <A name="mxmlGetCDATA">mxmlGetCDATA</A></A></H3>
|
||||
<P class="description">Get the value for a CDATA node.</P>
|
||||
<P class="code"> char *mxmlGetCDATA (
|
||||
<P class="code"> const char *mxmlGetCDATA (
|
||||
<BR> <A href="#mxml_node_t">mxml_node_t</A> *node
|
||||
<BR> );</P>
|
||||
<H4 class="parameters">Parameters</H4>
|
||||
@ -2665,7 +2752,7 @@ mxmlEntityRemoveCallback</A></H3>
|
||||
<!--span class="info"-->
|
||||
Mini-XML 2.7 <A name="mxmlGetCustom">mxmlGetCustom</A></A></H3>
|
||||
<P class="description">Get the value for a custom node.</P>
|
||||
<P class="code"> void *mxmlGetCustom (
|
||||
<P class="code"> const void *mxmlGetCustom (
|
||||
<BR> <A href="#mxml_node_t">mxml_node_t</A> *node
|
||||
<BR> );</P>
|
||||
<H4 class="parameters">Parameters</H4>
|
||||
@ -2682,7 +2769,7 @@ mxmlEntityRemoveCallback</A></H3>
|
||||
<!--span class="info"-->
|
||||
Mini-XML 2.7 <A name="mxmlGetElement">mxmlGetElement</A></A></H3>
|
||||
<P class="description">Get the name for an element node.</P>
|
||||
<P class="code"> char *mxmlGetElement (
|
||||
<P class="code"> const char *mxmlGetElement (
|
||||
<BR> <A href="#mxml_node_t">mxml_node_t</A> *node
|
||||
<BR> );</P>
|
||||
<H4 class="parameters">Parameters</H4>
|
||||
@ -2749,9 +2836,10 @@ mxmlEntityRemoveCallback</A></H3>
|
||||
<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 name="mxmlGetNext">mxmlGetNext</A></H3>
|
||||
<H3 class="function"><A name="mxmlGetNextSibling">mxmlGetNextSibling</A></H3>
|
||||
<P class="description">Return the node type...</P>
|
||||
<P class="code"> <A href="#mxml_node_t">mxml_node_t</A> *mxmlGetNext (
|
||||
<P class="code"> <A href="#mxml_node_t">mxml_node_t</A>
|
||||
*mxmlGetNextSibling (
|
||||
<BR> <A href="#mxml_node_t">mxml_node_t</A> *node
|
||||
<BR> );</P>
|
||||
<H4 class="parameters">Parameters</H4>
|
||||
@ -2768,7 +2856,7 @@ mxmlEntityRemoveCallback</A></H3>
|
||||
Mini-XML 2.7 <A name="mxmlGetOpaque">mxmlGetOpaque</A></A></H3>
|
||||
<P class="description">Get an opaque string value for a node or its
|
||||
first child.</P>
|
||||
<P class="code"> char *mxmlGetOpaque (
|
||||
<P class="code"> const char *mxmlGetOpaque (
|
||||
<BR> <A href="#mxml_node_t">mxml_node_t</A> *node
|
||||
<BR> );</P>
|
||||
<H4 class="parameters">Parameters</H4>
|
||||
@ -2799,10 +2887,10 @@ mxmlEntityRemoveCallback</A></H3>
|
||||
<P class="discussion"><CODE>NULL</CODE> is returned for a root node.</P>
|
||||
<H3 class="function"><A NAME="8_2_22">
|
||||
<!--span class="info"-->
|
||||
Mini-XML 2.7 <A name="mxmlGetPrevious">mxmlGetPrevious</A></A></H3>
|
||||
Mini-XML 2.7 <A name="mxmlGetPrevSibling">mxmlGetPrevSibling</A></A></H3>
|
||||
<P class="description">Get the previous node for the current parent.</P>
|
||||
<P class="code"> <A href="#mxml_node_t">mxml_node_t</A> *mxmlGetPrevious
|
||||
(
|
||||
<P class="code"> <A href="#mxml_node_t">mxml_node_t</A>
|
||||
*mxmlGetPrevSibling (
|
||||
<BR> <A href="#mxml_node_t">mxml_node_t</A> *node
|
||||
<BR> );</P>
|
||||
<H4 class="parameters">Parameters</H4>
|
||||
@ -2834,9 +2922,28 @@ mxmlEntityRemoveCallback</A></H3>
|
||||
is not a real value node.</P>
|
||||
<H3 class="function"><A NAME="8_2_24">
|
||||
<!--span class="info"-->
|
||||
Mini-XML 2.7 <A name="mxmlGetRefCount">mxmlGetRefCount</A></A></H3>
|
||||
<P class="description">Get the current reference (use) count for a node.</P>
|
||||
<P class="code"> int mxmlGetRefCount (
|
||||
<BR> <A href="#mxml_node_t">mxml_node_t</A> *node
|
||||
<BR> );</P>
|
||||
<H4 class="parameters">Parameters</H4>
|
||||
<DL>
|
||||
<DT>node</DT>
|
||||
<DD class="description">Node</DD>
|
||||
</DL>
|
||||
<H4 class="returnvalue">Return Value</H4>
|
||||
<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"><A NAME="8_2_25">
|
||||
<!--span class="info"-->
|
||||
Mini-XML 2.7 <A name="mxmlGetText">mxmlGetText</A></A></H3>
|
||||
<P class="description">Get the text value for a node or its first child.</P>
|
||||
<P class="code"> char *mxmlGetText (
|
||||
<P class="code"> const char *mxmlGetText (
|
||||
<BR> <A href="#mxml_node_t">mxml_node_t</A> *node,
|
||||
<BR> int *whitespace
|
||||
<BR> );</P>
|
||||
@ -2853,7 +2960,7 @@ mxmlEntityRemoveCallback</A></H3>
|
||||
<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 "whitespace" argument can be NULL.</P>
|
||||
<H3 class="function"><A NAME="8_2_25">
|
||||
<H3 class="function"><A NAME="8_2_26">
|
||||
<!--span class="info"-->
|
||||
Mini-XML 2.7 <A name="mxmlGetType">mxmlGetType</A></A></H3>
|
||||
<P class="description">Get the node type.</P>
|
||||
@ -2870,7 +2977,7 @@ mxmlEntityRemoveCallback</A></H3>
|
||||
<H4 class="discussion">Discussion</H4>
|
||||
<P class="discussion"><CODE>MXML_IGNORE</CODE> is returned if "node" is <CODE>
|
||||
NULL</CODE>.</P>
|
||||
<H3 class="function"><A NAME="8_2_26">
|
||||
<H3 class="function"><A NAME="8_2_27">
|
||||
<!--span class="info"-->
|
||||
Mini-XML 2.7 <A name="mxmlGetUserData">mxmlGetUserData</A></A></H3>
|
||||
<P class="description">Get the user data pointer for a node.</P>
|
||||
@ -2932,7 +3039,7 @@ NULL</CODE>.</P>
|
||||
this function for the first time with a particular set of "element" and
|
||||
"value" strings. Passing NULL for both "element" and "value" is
|
||||
equivalent to calling mxmlIndexEnum().</P>
|
||||
<H3 class="function"><A NAME="8_2_30">
|
||||
<H3 class="function"><A NAME="8_2_31">
|
||||
<!--span class="info"-->
|
||||
Mini-XML 2.7 <A name="mxmlIndexGetCount">mxmlIndexGetCount</A></A></H3>
|
||||
<P class="description">Get the number of nodes in an index.</P>
|
||||
@ -3076,7 +3183,7 @@ NULL</CODE>.</P>
|
||||
<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 NAME="8_2_36">
|
||||
<H3 class="function"><A NAME="8_2_37">
|
||||
<!--span class="info"-->
|
||||
Mini-XML 2.3 <A name="mxmlNewCDATA">mxmlNewCDATA</A></A></H3>
|
||||
<P class="description">Create a new CDATA node.</P>
|
||||
@ -3099,7 +3206,7 @@ NULL</CODE>.</P>
|
||||
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"><A NAME="8_2_37">
|
||||
<H3 class="function"><A NAME="8_2_38">
|
||||
<!--span class="info"-->
|
||||
Mini-XML 2.1 <A name="mxmlNewCustom">mxmlNewCustom</A></A></H3>
|
||||
<P class="description">Create a new custom data node.</P>
|
||||
@ -3258,7 +3365,7 @@ NULL</CODE>.</P>
|
||||
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"><A NAME="8_2_44">
|
||||
<H3 class="function"><A NAME="8_2_45">
|
||||
<!--span class="info"-->
|
||||
Mini-XML 2.3 <A name="mxmlNewXML">mxmlNewXML</A></A></H3>
|
||||
<P class="description">Create a new XML document tree.</P>
|
||||
@ -3276,7 +3383,7 @@ NULL</CODE>.</P>
|
||||
<P class="discussion">The "version" argument specifies the version
|
||||
number to put in the ?xml element node. If NULL, version 1.0 is
|
||||
assumed.</P>
|
||||
<H3 class="function"><A NAME="8_2_45">
|
||||
<H3 class="function"><A NAME="8_2_46">
|
||||
<!--span class="info"-->
|
||||
Mini-XML 2.3 <A name="mxmlRelease">mxmlRelease</A></A></H3>
|
||||
<P class="description">Release a node.</P>
|
||||
@ -3307,7 +3414,7 @@ NULL</CODE>.</P>
|
||||
<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"><A NAME="8_2_47">
|
||||
<H3 class="function"><A NAME="8_2_48">
|
||||
<!--span class="info"-->
|
||||
Mini-XML 2.3 <A name="mxmlRetain">mxmlRetain</A></A></H3>
|
||||
<P class="description">Retain a node.</P>
|
||||
@ -3321,7 +3428,7 @@ NULL</CODE>.</P>
|
||||
</DL>
|
||||
<H4 class="returnvalue">Return Value</H4>
|
||||
<P class="description">New reference count</P>
|
||||
<H3 class="function"><A NAME="8_2_48">
|
||||
<H3 class="function"><A NAME="8_2_49">
|
||||
<!--span class="info"-->
|
||||
Mini-XML 2.3 <A name="mxmlSAXLoadFd">mxmlSAXLoadFd</A></A></H3>
|
||||
<P class="description">Load a file descriptor into an XML node tree
|
||||
@ -3363,7 +3470,7 @@ NULL</CODE>.</P>
|
||||
<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 NAME="8_2_49">
|
||||
<H3 class="function"><A NAME="8_2_50">
|
||||
<!--span class="info"-->
|
||||
Mini-XML 2.3 <A name="mxmlSAXLoadFile">mxmlSAXLoadFile</A></A></H3>
|
||||
<P class="description">Load a file into an XML node tree using a SAX
|
||||
@ -3406,7 +3513,7 @@ NULL</CODE>.</P>
|
||||
<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 NAME="8_2_50">
|
||||
<H3 class="function"><A NAME="8_2_51">
|
||||
<!--span class="info"-->
|
||||
Mini-XML 2.3 <A name="mxmlSAXLoadString">mxmlSAXLoadString</A></A></H3>
|
||||
<P class="description">Load a string into an XML node tree using a SAX
|
||||
@ -3556,7 +3663,7 @@ NULL</CODE>.</P>
|
||||
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 NAME="8_2_55">
|
||||
<H3 class="function"><A NAME="8_2_56">
|
||||
<!--span class="info"-->
|
||||
Mini-XML 2.3 <A name="mxmlSetCDATA">mxmlSetCDATA</A></A></H3>
|
||||
<P class="description">Set the element name of a CDATA node.</P>
|
||||
@ -3576,7 +3683,7 @@ NULL</CODE>.</P>
|
||||
<H4 class="discussion">Discussion</H4>
|
||||
<P class="discussion">The node is not changed if it is not a CDATA
|
||||
element node.</P>
|
||||
<H3 class="function"><A NAME="8_2_56">
|
||||
<H3 class="function"><A NAME="8_2_57">
|
||||
<!--span class="info"-->
|
||||
Mini-XML 2.1 <A name="mxmlSetCustom">mxmlSetCustom</A></A></H3>
|
||||
<P class="description">Set the data and destructor of a custom data
|
||||
@ -3749,7 +3856,7 @@ mxmlSetCustomHandlers</A></H3>
|
||||
<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 a text node.</P>
|
||||
<H3 class="function"><A NAME="8_2_65">
|
||||
<H3 class="function"><A NAME="8_2_66">
|
||||
<!--span class="info"-->
|
||||
Mini-XML 2.7 <A name="mxmlSetUserData">mxmlSetUserData</A></A></H3>
|
||||
<P class="description">Set the user data pointer for a node.</P>
|
||||
@ -3766,7 +3873,7 @@ mxmlSetCustomHandlers</A></H3>
|
||||
</DL>
|
||||
<H4 class="returnvalue">Return Value</H4>
|
||||
<P class="description">0 on success, -1 on failure</P>
|
||||
<H3 class="function"><A NAME="8_2_66">
|
||||
<H3 class="function"><A NAME="8_2_67">
|
||||
<!--span class="info"-->
|
||||
Mini-XML 2.3 <A name="mxmlSetWrapMargin">mxmlSetWrapMargin</A></A></H3>
|
||||
<P class="description">Set the wrap margin when saving XML data.</P>
|
||||
@ -3923,7 +4030,7 @@ hspace="10" src="D.gif" width="100"></A>XML Schema</H1>
|
||||
<P>This appendix provides the XML schema that is used for the XML files
|
||||
produced by <TT>mxmldoc</TT>. This schema is available on-line at:</P>
|
||||
<PRE>
|
||||
http://www.easysw.com/~mike/mxmldoc.xsd
|
||||
http://www.minixml.org/mxmldoc.xsd
|
||||
</PRE>
|
||||
<H2><A NAME="9_1">mxmldoc.xsd</A></H2>
|
||||
<PRE><SMALL>
|
||||
@ -3931,8 +4038,8 @@ hspace="10" src="D.gif" width="100"></A>XML Schema</H1>
|
||||
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
|
||||
<xsd:annotation>
|
||||
<xsd:documentation xml:lang="en">
|
||||
Mini-XML 2.3 documentation schema for mxmldoc output.
|
||||
Copyright 2003-2007 by Michael Sweet.
|
||||
Mini-XML 2.7 documentation schema for mxmldoc output.
|
||||
Copyright 2003-2011 by Michael Sweet.
|
||||
</xsd:documentation>
|
||||
</xsd:annotation>
|
||||
|
||||
|
@ -88,7 +88,7 @@ to describe the functions, types, and constants in your code.
|
||||
source files - any names starting with the underscore character (_)
|
||||
or names that are documented with the <A
|
||||
HREF="#ATDIRECTIVES">@private@</A> directive are treated as private
|
||||
and are undocumented.</p>
|
||||
and are not documented.</p>
|
||||
|
||||
<p>Comments appearing directly before a function or type definition
|
||||
are used to document that function or type. Comments appearing after
|
||||
@ -155,7 +155,7 @@ following special <tt>@name ...@</tt> directive strings:</p>
|
||||
<li><tt>@since ...@</tt> - flags the item as new since a
|
||||
particular release. The text following the <tt>@since</tt>
|
||||
up to the closing <tt>@</tt> is highlighted in the generated
|
||||
documentation, e.g. <tt>@since CUPS 1.3@</tt>.</li>
|
||||
documentation, e.g. <tt>@since Mini-XML 2.7@</tt>.</li>
|
||||
|
||||
</ul>
|
||||
|
||||
|
@ -2,8 +2,8 @@
|
||||
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
|
||||
<xsd:annotation>
|
||||
<xsd:documentation xml:lang="en">
|
||||
Mini-XML 2.3 documentation schema for mxmldoc output.
|
||||
Copyright 2003-2007 by Michael Sweet.
|
||||
Mini-XML 2.7 documentation schema for mxmldoc output.
|
||||
Copyright 2003-2011 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
|
||||
|
@ -155,7 +155,7 @@ Reference</h1>
|
||||
<li><a href="#mxmlEntityGetValue" title="Get the character corresponding to a named entity.">mxmlEntityGetValue</a></li>
|
||||
<li><a href="#mxmlEntityRemoveCallback" title="Remove a callback.">mxmlEntityRemoveCallback</a></li>
|
||||
<li><a href="#mxmlFindElement" title="Find the named element.">mxmlFindElement</a></li>
|
||||
<li><a href="#mxmlFindValue" title="Find a value with the given path.">mxmlFindValue</a></li>
|
||||
<li><a href="#mxmlFindPath" title="Find a node with the given path.">mxmlFindPath</a></li>
|
||||
<li><a href="#mxmlGetCDATA" title="Get the value for a CDATA node.">mxmlGetCDATA</a></li>
|
||||
<li><a href="#mxmlGetCustom" title="Get the value for a custom node.">mxmlGetCustom</a></li>
|
||||
<li><a href="#mxmlGetElement" title="Get the name for an element node.">mxmlGetElement</a></li>
|
||||
@ -163,11 +163,12 @@ Reference</h1>
|
||||
<li><a href="#mxmlGetInteger" title="Get the integer value from the specified node or its
|
||||
first child.">mxmlGetInteger</a></li>
|
||||
<li><a href="#mxmlGetLastChild" title="Get the last child of an element node.">mxmlGetLastChild</a></li>
|
||||
<li><a href="#mxmlGetNext" title="Return the node type...">mxmlGetNext</a></li>
|
||||
<li><a href="#mxmlGetNextSibling" title="Return the node type...">mxmlGetNextSibling</a></li>
|
||||
<li><a href="#mxmlGetOpaque" title="Get an opaque string value for a node or its first child.">mxmlGetOpaque</a></li>
|
||||
<li><a href="#mxmlGetParent" title="Get the parent node.">mxmlGetParent</a></li>
|
||||
<li><a href="#mxmlGetPrevious" title="Get the previous node for the current parent.">mxmlGetPrevious</a></li>
|
||||
<li><a href="#mxmlGetPrevSibling" title="Get the previous node for the current parent.">mxmlGetPrevSibling</a></li>
|
||||
<li><a href="#mxmlGetReal" title="Get the real value for a node or its first child.">mxmlGetReal</a></li>
|
||||
<li><a href="#mxmlGetRefCount" title="Get the current reference (use) count for a node.">mxmlGetRefCount</a></li>
|
||||
<li><a href="#mxmlGetText" title="Get the text value for a node or its first child.">mxmlGetText</a></li>
|
||||
<li><a href="#mxmlGetType" title="Get the node type.">mxmlGetType</a></li>
|
||||
<li><a href="#mxmlGetUserData" title="Get the user data pointer for a node.">mxmlGetUserData</a></li>
|
||||
@ -452,10 +453,10 @@ 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"> Mini-XML 2.7 </span><a name="mxmlFindValue">mxmlFindValue</a></h3>
|
||||
<p class="description">Find a value with the given path.</p>
|
||||
<h3 class="function"><span class="info"> Mini-XML 2.7 </span><a name="mxmlFindPath">mxmlFindPath</a></h3>
|
||||
<p class="description">Find a node with the given path.</p>
|
||||
<p class="code">
|
||||
<a href="#mxml_node_t">mxml_node_t</a> *mxmlFindValue (<br>
|
||||
<a href="#mxml_node_t">mxml_node_t</a> *mxmlFindPath (<br>
|
||||
<a href="#mxml_node_t">mxml_node_t</a> *top,<br>
|
||||
const char *path<br>
|
||||
);</p>
|
||||
@ -467,17 +468,20 @@ constrains the search to a particular node's children.</p>
|
||||
<dd class="description">Path to element</dd>
|
||||
</dl>
|
||||
<h4 class="returnvalue">Return Value</h4>
|
||||
<p class="description">First value node or NULL</p>
|
||||
<p class="description">Found node or NULL</p>
|
||||
<h4 class="discussion">Discussion</h4>
|
||||
<p class="discussion">The "path" is a slash-separated list of element names. The name "*" is
|
||||
considered a wildcard for one or more levels of elements. For example,
|
||||
"foo/one/two", "bar/two/one", "*/one", and so forth.
|
||||
"foo/one/two", "bar/two/one", "*/one", 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"> Mini-XML 2.7 </span><a name="mxmlGetCDATA">mxmlGetCDATA</a></h3>
|
||||
<p class="description">Get the value for a CDATA node.</p>
|
||||
<p class="code">
|
||||
char *mxmlGetCDATA (<br>
|
||||
const char *mxmlGetCDATA (<br>
|
||||
<a href="#mxml_node_t">mxml_node_t</a> *node<br>
|
||||
);</p>
|
||||
<h4 class="parameters">Parameters</h4>
|
||||
@ -494,7 +498,7 @@ char *mxmlGetCDATA (<br>
|
||||
<h3 class="function"><span class="info"> Mini-XML 2.7 </span><a name="mxmlGetCustom">mxmlGetCustom</a></h3>
|
||||
<p class="description">Get the value for a custom node.</p>
|
||||
<p class="code">
|
||||
void *mxmlGetCustom (<br>
|
||||
const void *mxmlGetCustom (<br>
|
||||
<a href="#mxml_node_t">mxml_node_t</a> *node<br>
|
||||
);</p>
|
||||
<h4 class="parameters">Parameters</h4>
|
||||
@ -512,7 +516,7 @@ value node.
|
||||
<h3 class="function"><span class="info"> Mini-XML 2.7 </span><a name="mxmlGetElement">mxmlGetElement</a></h3>
|
||||
<p class="description">Get the name for an element node.</p>
|
||||
<p class="code">
|
||||
char *mxmlGetElement (<br>
|
||||
const char *mxmlGetElement (<br>
|
||||
<a href="#mxml_node_t">mxml_node_t</a> *node<br>
|
||||
);</p>
|
||||
<h4 class="parameters">Parameters</h4>
|
||||
@ -580,10 +584,10 @@ int mxmlGetInteger (<br>
|
||||
has no children.
|
||||
|
||||
</p>
|
||||
<h3 class="function"><a name="mxmlGetNext">mxmlGetNext</a></h3>
|
||||
<h3 class="function"><a name="mxmlGetNextSibling">mxmlGetNextSibling</a></h3>
|
||||
<p class="description">Return the node type...</p>
|
||||
<p class="code">
|
||||
<a href="#mxml_node_t">mxml_node_t</a> *mxmlGetNext (<br>
|
||||
<a href="#mxml_node_t">mxml_node_t</a> *mxmlGetNextSibling (<br>
|
||||
<a href="#mxml_node_t">mxml_node_t</a> *node<br>
|
||||
);</p>
|
||||
<h4 class="parameters">Parameters</h4>
|
||||
@ -599,7 +603,7 @@ has no children.
|
||||
<h3 class="function"><span class="info"> Mini-XML 2.7 </span><a name="mxmlGetOpaque">mxmlGetOpaque</a></h3>
|
||||
<p class="description">Get an opaque string value for a node or its first child.</p>
|
||||
<p class="code">
|
||||
char *mxmlGetOpaque (<br>
|
||||
const char *mxmlGetOpaque (<br>
|
||||
<a href="#mxml_node_t">mxml_node_t</a> *node<br>
|
||||
);</p>
|
||||
<h4 class="parameters">Parameters</h4>
|
||||
@ -631,10 +635,10 @@ value node.
|
||||
<p class="discussion"><code>NULL</code> is returned for a root node.
|
||||
|
||||
</p>
|
||||
<h3 class="function"><span class="info"> Mini-XML 2.7 </span><a name="mxmlGetPrevious">mxmlGetPrevious</a></h3>
|
||||
<h3 class="function"><span class="info"> Mini-XML 2.7 </span><a name="mxmlGetPrevSibling">mxmlGetPrevSibling</a></h3>
|
||||
<p class="description">Get the previous node for the current parent.</p>
|
||||
<p class="code">
|
||||
<a href="#mxml_node_t">mxml_node_t</a> *mxmlGetPrevious (<br>
|
||||
<a href="#mxml_node_t">mxml_node_t</a> *mxmlGetPrevSibling (<br>
|
||||
<a href="#mxml_node_t">mxml_node_t</a> *node<br>
|
||||
);</p>
|
||||
<h4 class="parameters">Parameters</h4>
|
||||
@ -665,10 +669,29 @@ double mxmlGetReal (<br>
|
||||
<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"> Mini-XML 2.7 </span><a name="mxmlGetRefCount">mxmlGetRefCount</a></h3>
|
||||
<p class="description">Get the current reference (use) count for a node.</p>
|
||||
<p class="code">
|
||||
int mxmlGetRefCount (<br>
|
||||
<a href="#mxml_node_t">mxml_node_t</a> *node<br>
|
||||
);</p>
|
||||
<h4 class="parameters">Parameters</h4>
|
||||
<dl>
|
||||
<dt>node</dt>
|
||||
<dd class="description">Node</dd>
|
||||
</dl>
|
||||
<h4 class="returnvalue">Return Value</h4>
|
||||
<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"> Mini-XML 2.7 </span><a name="mxmlGetText">mxmlGetText</a></h3>
|
||||
<p class="description">Get the text value for a node or its first child.</p>
|
||||
<p class="code">
|
||||
char *mxmlGetText (<br>
|
||||
const char *mxmlGetText (<br>
|
||||
<a href="#mxml_node_t">mxml_node_t</a> *node,<br>
|
||||
int *whitespace<br>
|
||||
);</p>
|
||||
|
@ -9,10 +9,14 @@ hspace="10" width="100" height="100" alt="B"></a>Release Notes</h1>
|
||||
|
||||
<ul>
|
||||
|
||||
<li>Added data accessor ("get") functions and made the mxml_node_t and
|
||||
mxml_index_t structures private but still available in the Mini-XML
|
||||
header to preserve source compatibility (STR #118)</li>
|
||||
|
||||
<li>Updated the source headers to reference the Mini-XML license and its
|
||||
exceptions to the LGPL2 (STR #108)</li>
|
||||
|
||||
<li>Added a new mxmlFindValue() function to find the value node of a
|
||||
<li>Added a new mxmlFindPath() function to find the value node of a
|
||||
named element (STR #110)</li>
|
||||
|
||||
<li>Building a static version of the library did not work on Windows
|
||||
|
@ -9,7 +9,7 @@ files produced by <tt>mxmldoc</tt>. This schema is available on-line
|
||||
at:</p>
|
||||
|
||||
<pre>
|
||||
http://www.easysw.com/~mike/mxmldoc.xsd
|
||||
http://www.minixml.org/mxmldoc.xsd
|
||||
</pre>
|
||||
|
||||
<h2 _hd_omit_toc>mxmldoc.xsd</h2>
|
||||
@ -19,8 +19,8 @@ at:</p>
|
||||
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
|
||||
<xsd:annotation>
|
||||
<xsd:documentation xml:lang="en">
|
||||
Mini-XML 2.3 documentation schema for mxmldoc output.
|
||||
Copyright 2003-2007 by Michael Sweet.
|
||||
Mini-XML 2.7 documentation schema for mxmldoc output.
|
||||
Copyright 2003-2011 by Michael Sweet.
|
||||
</xsd:documentation>
|
||||
</xsd:annotation>
|
||||
|
||||
|
50
mxml-get.c
50
mxml-get.c
@ -15,22 +15,22 @@
|
||||
*
|
||||
* Contents:
|
||||
*
|
||||
* mxmlGetCDATA() - Get the value for a CDATA node.
|
||||
* mxmlGetCustom() - Get the value for a custom node.
|
||||
* mxmlGetElement() - Get the name for an element node.
|
||||
* mxmlGetFirstChild() - Get the first child of an element node.
|
||||
* mxmlGetInteger() - Get the integer value from the specified node or its
|
||||
* first child.
|
||||
* mxmlGetLastChild() - Get the last child of an element node.
|
||||
* mxmlGetNext() - Get the next node for the current parent.
|
||||
* mxmlGetOpaque() - Get an opaque string value for a node or its first
|
||||
* child.
|
||||
* mxmlGetParent() - Get the parent node.
|
||||
* mxmlGetPrevious() - Get the previous node for the current parent.
|
||||
* mxmlGetReal() - Get the real value for a node or its first child.
|
||||
* mxmlGetText() - Get the text value for a node or its first child.
|
||||
* mxmlGetType() - Get the node type.
|
||||
* mxmlGetUserData() - Get the user data pointer for a node.
|
||||
* mxmlGetCDATA() - Get the value for a CDATA node.
|
||||
* mxmlGetCustom() - Get the value for a custom node.
|
||||
* mxmlGetElement() - Get the name for an element node.
|
||||
* mxmlGetFirstChild() - Get the first child of an element node.
|
||||
* mxmlGetInteger() - Get the integer value from the specified node or its
|
||||
* first child.
|
||||
* mxmlGetLastChild() - Get the last child of an element node.
|
||||
* mxmlGetNextSibling() - Get the next node for the current parent.
|
||||
* mxmlGetOpaque() - Get an opaque string value for a node or its first
|
||||
* child.
|
||||
* mxmlGetParent() - Get the parent node.
|
||||
* mxmlGetPrevSibling() - Get the previous node for the current parent.
|
||||
* mxmlGetReal() - Get the real value for a node or its first child.
|
||||
* mxmlGetText() - Get the text value for a node or its first child.
|
||||
* mxmlGetType() - Get the node type.
|
||||
* mxmlGetUserData() - Get the user data pointer for a node.
|
||||
*/
|
||||
|
||||
/*
|
||||
@ -49,7 +49,7 @@
|
||||
* @since Mini-XML 2.7@
|
||||
*/
|
||||
|
||||
char * /* O - CDATA value or NULL */
|
||||
const char * /* O - CDATA value or NULL */
|
||||
mxmlGetCDATA(mxml_node_t *node) /* I - Node to get */
|
||||
{
|
||||
/*
|
||||
@ -77,7 +77,7 @@ mxmlGetCDATA(mxml_node_t *node) /* I - Node to get */
|
||||
* @since Mini-XML 2.7@
|
||||
*/
|
||||
|
||||
void * /* O - Custom value or NULL */
|
||||
const void * /* O - Custom value or NULL */
|
||||
mxmlGetCustom(mxml_node_t *node) /* I - Node to get */
|
||||
{
|
||||
/*
|
||||
@ -110,7 +110,7 @@ mxmlGetCustom(mxml_node_t *node) /* I - Node to get */
|
||||
* @since Mini-XML 2.7@
|
||||
*/
|
||||
|
||||
char * /* O - Element name or NULL */
|
||||
const char * /* O - Element name or NULL */
|
||||
mxmlGetElement(mxml_node_t *node) /* I - Node to get */
|
||||
{
|
||||
/*
|
||||
@ -217,7 +217,7 @@ mxmlGetLastChild(mxml_node_t *node) /* I - Node to get */
|
||||
|
||||
|
||||
/*
|
||||
* 'mxmlGetNext()' - Get the next node for the current parent.
|
||||
* 'mxmlGetNextSibling()' - Get the next node for the current parent.
|
||||
*
|
||||
* @code NULL@ is returned if this is the last child for the current parent.
|
||||
*
|
||||
@ -225,7 +225,7 @@ mxmlGetLastChild(mxml_node_t *node) /* I - Node to get */
|
||||
*/
|
||||
|
||||
mxml_node_t *
|
||||
mxmlGetNext(mxml_node_t *node) /* I - Node to get */
|
||||
mxmlGetNextSibling(mxml_node_t *node) /* I - Node to get */
|
||||
{
|
||||
/*
|
||||
* Range check input...
|
||||
@ -251,7 +251,7 @@ mxmlGetNext(mxml_node_t *node) /* I - Node to get */
|
||||
* @since Mini-XML 2.7@
|
||||
*/
|
||||
|
||||
char * /* O - Opaque string or NULL */
|
||||
const char * /* O - Opaque string or NULL */
|
||||
mxmlGetOpaque(mxml_node_t *node) /* I - Node to get */
|
||||
{
|
||||
/*
|
||||
@ -303,7 +303,7 @@ mxmlGetParent(mxml_node_t *node) /* I - Node to get */
|
||||
|
||||
|
||||
/*
|
||||
* 'mxmlGetPrevious()' - Get the previous node for the current parent.
|
||||
* 'mxmlGetPrevSibling()' - Get the previous node for the current parent.
|
||||
*
|
||||
* @code NULL@ is returned if this is the first child for the current parent.
|
||||
*
|
||||
@ -311,7 +311,7 @@ mxmlGetParent(mxml_node_t *node) /* I - Node to get */
|
||||
*/
|
||||
|
||||
mxml_node_t * /* O - Previous node or NULL */
|
||||
mxmlGetPrevious(mxml_node_t *node) /* I - Node to get */
|
||||
mxmlGetPrevSibling(mxml_node_t *node) /* I - Node to get */
|
||||
{
|
||||
/*
|
||||
* Range check input...
|
||||
@ -370,7 +370,7 @@ mxmlGetReal(mxml_node_t *node) /* I - Node to get */
|
||||
* @since Mini-XML 2.7@
|
||||
*/
|
||||
|
||||
char * /* O - Text string or NULL */
|
||||
const char * /* O - Text string or NULL */
|
||||
mxmlGetText(mxml_node_t *node, /* I - Node to get */
|
||||
int *whitespace) /* O - 1 if string is preceded by whitespace, 0 otherwise */
|
||||
{
|
||||
|
45
mxml-node.c
45
mxml-node.c
@ -3,7 +3,7 @@
|
||||
*
|
||||
* Node support code for Mini-XML, a small XML-like file parsing library.
|
||||
*
|
||||
* Copyright 2003-2010 by Michael R Sweet.
|
||||
* Copyright 2003-2011 by Michael R Sweet.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
* property of Michael R Sweet and are protected by Federal copyright
|
||||
@ -15,21 +15,6 @@
|
||||
*
|
||||
* Contents:
|
||||
*
|
||||
* mxmlAdd() - Add a node to a tree.
|
||||
* mxmlDelete() - Delete a node and all of its children.
|
||||
* mxmlNewCDATA() - Create a new CDATA node.
|
||||
* mxmlNewCustom() - Create a new custom data node.
|
||||
* mxmlNewElement() - Create a new element node.
|
||||
* mxmlNewInteger() - Create a new integer node.
|
||||
* mxmlNewOpaque() - Create a new opaque string.
|
||||
* mxmlNewReal() - Create a new real number node.
|
||||
* mxmlNewText() - Create a new text fragment node.
|
||||
* mxmlNewTextf() - Create a new formatted text fragment node.
|
||||
* mxmlNewXML() - Create a new XML document tree.
|
||||
* mxmlRelease() - Release a node.
|
||||
* mxmlRemove() - Remove a node from its parent.
|
||||
* mxmlRetain() - Retain a node.
|
||||
* mxml_new() - Create a new node.
|
||||
*/
|
||||
|
||||
/*
|
||||
@ -276,6 +261,34 @@ mxmlDelete(mxml_node_t *node) /* I - Node to delete */
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'mxmlGetRefCount()' - Get the current reference (use) count for a node.
|
||||
*
|
||||
* The initial reference count of new nodes is 1. Use the @link mxmlRetain@
|
||||
* and @link mxmlRelease@ functions to increment and decrement a node's
|
||||
* reference count.
|
||||
*
|
||||
* @since Mini-XML 2.7@.
|
||||
*/
|
||||
|
||||
int /* O - Reference count */
|
||||
mxmlGetRefCount(mxml_node_t *node) /* I - Node */
|
||||
{
|
||||
/*
|
||||
* Range check input...
|
||||
*/
|
||||
|
||||
if (!node)
|
||||
return (0);
|
||||
|
||||
/*
|
||||
* Return the reference count...
|
||||
*/
|
||||
|
||||
return (node->ref_count);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'mxmlNewCDATA()' - Create a new CDATA node.
|
||||
*
|
||||
|
@ -118,22 +118,25 @@ mxmlFindElement(mxml_node_t *node, /* I - Current node */
|
||||
|
||||
|
||||
/*
|
||||
* 'mxmlFindValue()' - Find a value with the given path.
|
||||
* 'mxmlFindPath()' - Find a node with the given path.
|
||||
*
|
||||
* The "path" is a slash-separated list of element names. The name "*" is
|
||||
* considered a wildcard for one or more levels of elements. For example,
|
||||
* "foo/one/two", "bar/two/one", "*\/one", and so forth.
|
||||
*
|
||||
* The first child node of the found node is returned if the given node has
|
||||
* children and the first child is a value node.
|
||||
*
|
||||
* @since Mini-XML 2.7@
|
||||
*/
|
||||
|
||||
mxml_node_t * /* O - First value node or NULL */
|
||||
mxmlFindValue(mxml_node_t *top, /* I - Top node */
|
||||
const char *path) /* I - Path to element */
|
||||
mxml_node_t * /* O - Found node or NULL */
|
||||
mxmlFindPath(mxml_node_t *top, /* I - Top node */
|
||||
const char *path) /* I - Path to element */
|
||||
{
|
||||
mxml_node_t *node; /* Current node */
|
||||
char element[256], /* Current element name */
|
||||
*pathsep; /* Separator in path */
|
||||
char element[256]; /* Current element name */
|
||||
const char *pathsep; /* Separator in path */
|
||||
int descend; /* mxmlFindElement option */
|
||||
|
||||
|
||||
@ -191,10 +194,13 @@ mxmlFindValue(mxml_node_t *top, /* I - Top node */
|
||||
}
|
||||
|
||||
/*
|
||||
* If we get this far, return the first child of the current node...
|
||||
* If we get this far, return the node or its first child...
|
||||
*/
|
||||
|
||||
return (node->child);
|
||||
if (node->child && node->child->type != MXML_ELEMENT)
|
||||
return (node->child);
|
||||
else
|
||||
return (node);
|
||||
}
|
||||
|
||||
|
||||
|
17
mxml.h
17
mxml.h
@ -210,19 +210,20 @@ extern void mxmlEntityRemoveCallback(mxml_entity_cb_t cb);
|
||||
extern mxml_node_t *mxmlFindElement(mxml_node_t *node, mxml_node_t *top,
|
||||
const char *name, const char *attr,
|
||||
const char *value, int descend);
|
||||
extern mxml_node_t *mxmlFindValue(mxml_node_t *node, const char *path);
|
||||
extern char *mxmlGetCDATA(mxml_node_t *node);
|
||||
extern void *mxmlGetCustom(mxml_node_t *node);
|
||||
extern char *mxmlGetElement(mxml_node_t *node);
|
||||
extern mxml_node_t *mxmlFindPath(mxml_node_t *node, const char *path);
|
||||
extern const char *mxmlGetCDATA(mxml_node_t *node);
|
||||
extern const void *mxmlGetCustom(mxml_node_t *node);
|
||||
extern const char *mxmlGetElement(mxml_node_t *node);
|
||||
extern mxml_node_t *mxmlGetFirstChild(mxml_node_t *node);
|
||||
extern int mxmlGetInteger(mxml_node_t *node);
|
||||
extern mxml_node_t *mxmlGetLastChild(mxml_node_t *node);
|
||||
extern mxml_node_t *mxmlGetNext(mxml_node_t *node);
|
||||
extern char *mxmlGetOpaque(mxml_node_t *node);
|
||||
extern mxml_node_t *mxmlGetNextSibling(mxml_node_t *node);
|
||||
extern const char *mxmlGetOpaque(mxml_node_t *node);
|
||||
extern mxml_node_t *mxmlGetParent(mxml_node_t *node);
|
||||
extern mxml_node_t *mxmlGetPrevious(mxml_node_t *node);
|
||||
extern mxml_node_t *mxmlGetPrevSibling(mxml_node_t *node);
|
||||
extern double mxmlGetReal(mxml_node_t *node);
|
||||
extern char *mxmlGetText(mxml_node_t *node, int *whitespace);
|
||||
extern int mxmlGetRefCount(mxml_node_t *node);
|
||||
extern const char *mxmlGetText(mxml_node_t *node, int *whitespace);
|
||||
extern mxml_type_t mxmlGetType(mxml_node_t *node);
|
||||
extern void *mxmlGetUserData(mxml_node_t *node);
|
||||
extern void mxmlIndexDelete(mxml_index_t *ind);
|
||||
|
40
mxml.xml
40
mxml.xml
@ -197,17 +197,20 @@ constrains the search to a particular node's children.</description>
|
||||
<description>Descend into tree - MXML_DESCEND, MXML_NO_DESCEND, or MXML_DESCEND_FIRST</description>
|
||||
</argument>
|
||||
</function>
|
||||
<function name="mxmlFindValue">
|
||||
<function name="mxmlFindPath">
|
||||
<returnvalue>
|
||||
<type>mxml_node_t *</type>
|
||||
<description>First value node or NULL</description>
|
||||
<description>Found node or NULL</description>
|
||||
</returnvalue>
|
||||
<description>Find a value with the given path.
|
||||
<description>Find a node with the given path.
|
||||
|
||||
The "path" is a slash-separated list of element names. The name "*" is
|
||||
considered a wildcard for one or more levels of elements. For example,
|
||||
"foo/one/two", "bar/two/one", "*/one", and so forth.
|
||||
|
||||
The first child node of the found node is returned if the given node has
|
||||
children and the first child is a value node.
|
||||
|
||||
@since Mini-XML 2.7@</description>
|
||||
<argument name="top" direction="I">
|
||||
<type>mxml_node_t *</type>
|
||||
@ -220,7 +223,7 @@ considered a wildcard for one or more levels of elements. For example,
|
||||
</function>
|
||||
<function name="mxmlGetCDATA">
|
||||
<returnvalue>
|
||||
<type>char *</type>
|
||||
<type>const char *</type>
|
||||
<description>CDATA value or NULL</description>
|
||||
</returnvalue>
|
||||
<description>Get the value for a CDATA node.
|
||||
@ -235,7 +238,7 @@ considered a wildcard for one or more levels of elements. For example,
|
||||
</function>
|
||||
<function name="mxmlGetCustom">
|
||||
<returnvalue>
|
||||
<type>void *</type>
|
||||
<type>const void *</type>
|
||||
<description>Custom value or NULL</description>
|
||||
</returnvalue>
|
||||
<description>Get the value for a custom node.
|
||||
@ -251,7 +254,7 @@ value node.
|
||||
</function>
|
||||
<function name="mxmlGetElement">
|
||||
<returnvalue>
|
||||
<type>char *</type>
|
||||
<type>const char *</type>
|
||||
<description>Element name or NULL</description>
|
||||
</returnvalue>
|
||||
<description>Get the name for an element node.
|
||||
@ -312,7 +315,7 @@ has no children.
|
||||
<description>Node to get</description>
|
||||
</argument>
|
||||
</function>
|
||||
<function name="mxmlGetNext">
|
||||
<function name="mxmlGetNextSibling">
|
||||
<returnvalue>
|
||||
<type>mxml_node_t *</type>
|
||||
<description>Get the next node for the current parent.
|
||||
@ -329,7 +332,7 @@ has no children.
|
||||
</function>
|
||||
<function name="mxmlGetOpaque">
|
||||
<returnvalue>
|
||||
<type>char *</type>
|
||||
<type>const char *</type>
|
||||
<description>Opaque string or NULL</description>
|
||||
</returnvalue>
|
||||
<description>Get an opaque string value for a node or its first child.
|
||||
@ -358,7 +361,7 @@ value node.
|
||||
<description>Node to get</description>
|
||||
</argument>
|
||||
</function>
|
||||
<function name="mxmlGetPrevious">
|
||||
<function name="mxmlGetPrevSibling">
|
||||
<returnvalue>
|
||||
<type>mxml_node_t *</type>
|
||||
<description>Previous node or NULL</description>
|
||||
@ -388,9 +391,26 @@ value node.
|
||||
<description>Node to get</description>
|
||||
</argument>
|
||||
</function>
|
||||
<function name="mxmlGetRefCount">
|
||||
<returnvalue>
|
||||
<type>int</type>
|
||||
<description>Reference count</description>
|
||||
</returnvalue>
|
||||
<description>Get the current reference (use) count for a node.
|
||||
|
||||
The initial reference count of new nodes is 1. Use the @link mxmlRetain@
|
||||
and @link mxmlRelease@ functions to increment and decrement a node's
|
||||
reference count.
|
||||
|
||||
@since Mini-XML 2.7@.</description>
|
||||
<argument name="node" direction="I">
|
||||
<type>mxml_node_t *</type>
|
||||
<description>Node</description>
|
||||
</argument>
|
||||
</function>
|
||||
<function name="mxmlGetText">
|
||||
<returnvalue>
|
||||
<type>char *</type>
|
||||
<type>const char *</type>
|
||||
<description>Text string or NULL</description>
|
||||
</returnvalue>
|
||||
<description>Get the text value for a node or its first child.
|
||||
|
@ -261,10 +261,10 @@ main(int argc, /* I - Number of command-line args */
|
||||
}
|
||||
|
||||
/*
|
||||
* Test mxmlFindValue...
|
||||
* Test mxmlFindPath...
|
||||
*/
|
||||
|
||||
node = mxmlFindValue(tree, "*/two");
|
||||
node = mxmlFindPath(tree, "*/two");
|
||||
if (!node)
|
||||
{
|
||||
fputs("ERROR: Unable to find value for \"*/two\".\n", stderr);
|
||||
@ -278,7 +278,7 @@ main(int argc, /* I - Number of command-line args */
|
||||
return (1);
|
||||
}
|
||||
|
||||
node = mxmlFindValue(tree, "foo/*/two");
|
||||
node = mxmlFindPath(tree, "foo/*/two");
|
||||
if (!node)
|
||||
{
|
||||
fputs("ERROR: Unable to find value for \"foo/*/two\".\n", stderr);
|
||||
@ -292,7 +292,7 @@ main(int argc, /* I - Number of command-line args */
|
||||
return (1);
|
||||
}
|
||||
|
||||
node = mxmlFindValue(tree, "foo/bar/one/two");
|
||||
node = mxmlFindPath(tree, "foo/bar/one/two");
|
||||
if (!node)
|
||||
{
|
||||
fputs("ERROR: Unable to find value for \"foo/bar/one/two\".\n", stderr);
|
||||
|
@ -17,10 +17,26 @@ EXPORTS
|
||||
mxmlEntityGetValue
|
||||
mxmlEntityRemoveCallback
|
||||
mxmlFindElement
|
||||
mxmlFindValue
|
||||
mxmlFindPath
|
||||
mxmlGetCDATA
|
||||
mxmlGetCustom
|
||||
mxmlGetElement
|
||||
mxmlGetFirstChild
|
||||
mxmlGetInteger
|
||||
mxmlGetLastChild
|
||||
mxmlGetNextSibling
|
||||
mxmlGetOpaque
|
||||
mxmlGetParent
|
||||
mxmlGetPrevSibling
|
||||
mxmlGetReal
|
||||
mxmlGetRefCount
|
||||
mxmlGetText
|
||||
mxmlGetType
|
||||
mxmlGetUserData
|
||||
mxmlIndexDelete
|
||||
mxmlIndexEnum
|
||||
mxmlIndexFind
|
||||
mxmlIndexGetCount
|
||||
mxmlIndexNew
|
||||
mxmlIndexReset
|
||||
mxmlLoadFd
|
||||
@ -55,6 +71,7 @@ EXPORTS
|
||||
mxmlSetReal
|
||||
mxmlSetText
|
||||
mxmlSetTextf
|
||||
mxmlSetUserData
|
||||
mxmlSetWrapMargin
|
||||
mxmlWalkNext
|
||||
mxmlWalkPrev
|
||||
|
@ -196,6 +196,10 @@
|
||||
RelativePath="..\mxml-file.c"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\mxml-get.c"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\mxml-index.c"
|
||||
>
|
||||
|
Loading…
Reference in New Issue
Block a user