mirror of
https://github.com/michaelrsweet/mxml.git
synced 2024-11-08 13:39:58 +00:00
1708 lines
69 KiB
HTML
1708 lines
69 KiB
HTML
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
|
|
<HTML>
|
|
<HEAD>
|
|
<TITLE>Documentation</TITLE>
|
|
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; CHARSET=iso-iso-8859-1">
|
|
<STYLE TYPE="text/css"><!--
|
|
BODY { font-family: serif }
|
|
H1 { font-family: sans-serif }
|
|
H2 { font-family: sans-serif }
|
|
H3 { font-family: sans-serif }
|
|
H4 { font-family: sans-serif }
|
|
H5 { font-family: sans-serif }
|
|
H6 { font-family: sans-serif }
|
|
SUB { font-size: smaller }
|
|
SUP { font-size: smaller }
|
|
PRE { font-family: monospace }
|
|
--></STYLE>
|
|
</HEAD>
|
|
<BODY>
|
|
<CENTER><A HREF="#CONTENTS"><H1>Documentation</H1></A><BR>
|
|
</CENTER>
|
|
<HR>
|
|
<H1 ALIGN="CENTER"><A NAME="CONTENTS">Table of Contents</A></H1>
|
|
<BR>
|
|
<BR><B><A HREF="#INTRO">Introduction</A></B>
|
|
<BR>
|
|
<BR><B><A HREF="#INSTALL">1 - Building and Installing Mini-XML</A></B>
|
|
<BR>
|
|
<BR><B><A HREF="#BASICS">2 - Getting Started with Mini-XML</A></B>
|
|
<BR>
|
|
<BR><B><A HREF="#ADVANCED">3 - More Mini-XML Programming Techniques</A></B>
|
|
<BR>
|
|
<BR><B><A HREF="#MXMLDOC">3 - Using the mxmldoc Utility</A></B>
|
|
<BR>
|
|
<BR><B><A HREF="#LICENSE">A - GNU Library General Public License</A></B>
|
|
<BR>
|
|
<BR><B><A HREF="#RELNOTES">B - Release Notes</A></B>
|
|
<UL>
|
|
<LI><A HREF="#7_1">Changes in Mini-XML 2.0</A></LI>
|
|
<LI><A HREF="#7_2">Changes in Mini-XML 1.3</A></LI>
|
|
<LI><A HREF="#7_3">Changes in Mini-XML 1.2</A></LI>
|
|
<LI><A HREF="#7_4">Changes in Mini-XML 1.1.2</A></LI>
|
|
<LI><A HREF="#7_5">Changes in Mini-XML 1.1.1</A></LI>
|
|
<LI><A HREF="#7_6">Changes in Mini-XML 1.1</A></LI>
|
|
<LI><A HREF="#7_7">Changes in Mini-XML 1.0</A></LI>
|
|
<LI><A HREF="#7_8">Changes in Mini-XML 0.93</A></LI>
|
|
<LI><A HREF="#7_9">Changes in Mini-XML 0.92</A></LI>
|
|
<LI><A HREF="#7_10">Changes in Mini-XML 0.91</A></LI>
|
|
<LI><A HREF="#7_11">Changes in Mini-XML 0.9</A></LI>
|
|
</UL>
|
|
<B><A HREF="#REFERENCE">C - Library Reference</A></B>
|
|
<UL>
|
|
<LI><A HREF="#8_1">Contents</A></LI>
|
|
<LI><A HREF="#_enumerations">Enumerations</A></LI>
|
|
<UL>
|
|
<LI><A HREF="#mxml_type_e">mxml_type_e</A></LI>
|
|
</UL>
|
|
<LI><A HREF="#_functions">Functions</A></LI>
|
|
<UL>
|
|
<LI><A HREF="#mxmlAdd">mxmlAdd()</A></LI>
|
|
<LI><A HREF="#mxmlDelete">mxmlDelete()</A></LI>
|
|
<LI><A HREF="#mxmlElementGetAttr">mxmlElementGetAttr()</A></LI>
|
|
<LI><A HREF="#mxmlElementSetAttr">mxmlElementSetAttr()</A></LI>
|
|
<LI><A HREF="#mxmlEntityGetName">mxmlEntityGetName()</A></LI>
|
|
<LI><A HREF="#mxmlEntityGetValue">mxmlEntityGetValue()</A></LI>
|
|
<LI><A HREF="#mxmlFindElement">mxmlFindElement()</A></LI>
|
|
<LI><A HREF="#mxmlLoadFile">mxmlLoadFile()</A></LI>
|
|
<LI><A HREF="#mxmlLoadString">mxmlLoadString()</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="#mxmlRemove">mxmlRemove()</A></LI>
|
|
<LI><A HREF="#mxmlSaveAllocString">mxmlSaveAllocString()</A></LI>
|
|
<LI><A HREF="#mxmlSaveFile">mxmlSaveFile()</A></LI>
|
|
<LI><A HREF="#mxmlSaveString">mxmlSaveString()</A></LI>
|
|
<LI><A HREF="#mxmlSetElement">mxmlSetElement()</A></LI>
|
|
<LI><A HREF="#mxmlSetErrorCallback">mxmlSetErrorCallback()</A></LI>
|
|
<LI><A HREF="#mxmlSetInteger">mxmlSetInteger()</A></LI>
|
|
<LI><A HREF="#mxmlSetOpaque">mxmlSetOpaque()</A></LI>
|
|
<LI><A HREF="#mxmlSetReal">mxmlSetReal()</A></LI>
|
|
<LI><A HREF="#mxmlSetText">mxmlSetText()</A></LI>
|
|
<LI><A HREF="#mxmlSetTextf">mxmlSetTextf()</A></LI>
|
|
<LI><A HREF="#mxmlWalkNext">mxmlWalkNext()</A></LI>
|
|
<LI><A HREF="#mxmlWalkPrev">mxmlWalkPrev()</A></LI>
|
|
</UL>
|
|
<LI><A HREF="#_structures">Structures</A></LI>
|
|
<UL>
|
|
<LI><A HREF="#mxml_attr_s">mxml_attr_s</A></LI>
|
|
<LI><A HREF="#mxml_node_s">mxml_node_s</A></LI>
|
|
<LI><A HREF="#mxml_text_s">mxml_text_s</A></LI>
|
|
<LI><A HREF="#mxml_value_s">mxml_value_s</A></LI>
|
|
</UL>
|
|
<LI><A HREF="#_types">Types</A></LI>
|
|
<UL>
|
|
<LI><A HREF="#mxml_attr_t">mxml_attr_t</A></LI>
|
|
<LI><A HREF="#mxml_element_t">mxml_element_t</A></LI>
|
|
<LI><A HREF="#mxml_node_t">mxml_node_t</A></LI>
|
|
<LI><A HREF="#mxml_text_t">mxml_text_t</A></LI>
|
|
<LI><A HREF="#mxml_type_t">mxml_type_t</A></LI>
|
|
<LI><A HREF="#mxml_value_t">mxml_value_t</A></LI>
|
|
</UL>
|
|
<LI><A HREF="#_unions">Unions</A></LI>
|
|
<UL>
|
|
<LI><A HREF="#mxml_value_u">mxml_value_u</A></LI>
|
|
</UL>
|
|
</UL>
|
|
<HR>
|
|
<H1 align="right"><A name="INTRO">Introduction</A></H1>
|
|
<HR>
|
|
<H1 align="right"><A name="INSTALL">1 - Building and Installing Mini-XML</A>
|
|
</H1>
|
|
<HR>
|
|
<H1 align="right"><A name="BASICS">2 - Getting Started with Mini-XML</A></H1>
|
|
<HR>
|
|
<H1 align="right"><A name="ADVANCED">3 - More Mini-XML Programming
|
|
Techniques</A></H1>
|
|
<HR>
|
|
<H1 align="right"><A name="MXMLDOC">3 - Using the mxmldoc Utility</A></H1>
|
|
<P>This chapter describes how to use the <TT>mxmldoc(1)</TT> utility
|
|
that comes with Mini-XML to automatically generate documentation for
|
|
your programs.</P>
|
|
<HR>
|
|
<H1 align="right"><A name="LICENSE">A - GNU Library General Public
|
|
License</A></H1>
|
|
<P align="center">Version 2, June 1991
|
|
<BR /> Copyright (C) 1991 Free Software Foundation, Inc.
|
|
<BR /> 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
|
|
<BR /> Everyone is permitted to copy and distribute verbatim copies of
|
|
this license document, but changing it is not allowed.
|
|
<BR /> [This is the first released version of the library GPL. It is
|
|
numbered 2 because it goes with version 2 of the ordinary GPL.]</P>
|
|
<P><BIG>Preamble</BIG></P>
|
|
<P>The licenses for most software are designed to take away your freedom
|
|
to share and change it. By contrast, the GNU General Public Licenses
|
|
are intended to guarantee your freedom to share and change free
|
|
software--to make sure the software is free for all its users.</P>
|
|
<P>This license, the Library General Public License, applies to some
|
|
specially designated Free Software Foundation software, and to any
|
|
other libraries whose authors decide to use it. You can use it for your
|
|
libraries, too.</P>
|
|
<P>When we speak of free software, we are referring to freedom, not
|
|
price. Our General Public Licenses are designed to make sure that you
|
|
have the freedom to distribute copies of free software (and charge for
|
|
this service if you wish), that you receive source code or can get it
|
|
if you want it, that you can change the software or use pieces of it in
|
|
new free programs; and that you know you can do these things.</P>
|
|
<P>To protect your rights, we need to make restrictions that forbid
|
|
anyone to deny you these rights or to ask you to surrender the rights.
|
|
These restrictions translate to certain responsibilities for you if you
|
|
distribute copies of the library, or if you modify it.</P>
|
|
<P>For example, if you distribute copies of the library, whether gratis
|
|
or for a fee, you must give the recipients all the rights that we gave
|
|
you. You must make sure that they, too, receive or can get the source
|
|
code. If you link a program with the library, you must provide complete
|
|
object files to the recipients so that they can relink them with the
|
|
library, after making changes to the library and recompiling it. And
|
|
you must show them these terms so they know their rights.</P>
|
|
<P>Our method of protecting your rights has two steps: (1) copyright the
|
|
library, and (2) offer you this license which gives you legal
|
|
permission to copy, distribute and/or modify the library.</P>
|
|
<P>Also, for each distributor's protection, we want to make certain that
|
|
everyone understands that there is no warranty for this free library.
|
|
If the library is modified by someone else and passed on, we want its
|
|
recipients to know that what they have is not the original version, so
|
|
that any problems introduced by others will not reflect on the original
|
|
authors' reputations.</P>
|
|
<P>Finally, any free program is threatened constantly by software
|
|
patents. We wish to avoid the danger that companies distributing free
|
|
software will individually obtain patent licenses, thus in effect
|
|
transforming the program into proprietary software. To prevent this, we
|
|
have made it clear that any patent must be licensed for everyone's free
|
|
use or not licensed at all.</P>
|
|
<P>Most GNU software, including some libraries, is covered by the
|
|
ordinary GNU General Public License, which was designed for utility
|
|
programs. This license, the GNU Library General Public License, applies
|
|
to certain designated libraries. This license is quite different from
|
|
the ordinary one; be sure to read it in full, and don't assume that
|
|
anything in it is the same as in the ordinary license.</P>
|
|
<P>The reason we have a separate public license for some libraries is
|
|
that they blur the distinction we usually make between modifying or
|
|
adding to a program and simply using it. Linking a program with a
|
|
library, without changing the library, is in some sense simply using
|
|
the library, and is analogous to running a utility program or
|
|
application program. However, in a textual and legal sense, the linked
|
|
executable is a combined work, a derivative of the original library,
|
|
and the ordinary General Public License treats it as such.</P>
|
|
<P>Because of this blurred distinction, using the ordinary General
|
|
Public License for libraries did not effectively promote software
|
|
sharing, because most developers did not use the libraries. We
|
|
concluded that weaker conditions might promote sharing better.</P>
|
|
<P>However, unrestricted linking of non-free programs would deprive the
|
|
users of those programs of all benefit from the free status of the
|
|
libraries themselves. This Library General Public License is intended
|
|
to permit developers of non-free programs to use free libraries, while
|
|
preserving your freedom as a user of such programs to change the free
|
|
libraries that are incorporated in them. (We have not seen how to
|
|
achieve this as regards changes in header files, but we have achieved
|
|
it as regards changes in the actual functions of the Library.) The hope
|
|
is that this will lead to faster development of free libraries.</P>
|
|
<P>The precise terms and conditions for copying, distribution and
|
|
modification follow. Pay close attention to the difference between a
|
|
"work based on the libary" and a "work that uses the library". The
|
|
former contains code derived from the library, while the latter only
|
|
works together with the library.</P>
|
|
<P>Note that it is possible for a library to be covered by the ordinary
|
|
General Public License rather than by this special one.</P>
|
|
<P align="center"><BIG>TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION
|
|
AND MODIFICATION</BIG></P>
|
|
<P><STRONG>0.</STRONG> This License Agreement applies to any software
|
|
library which contains a notice placed by the copyright holder or other
|
|
authorized party saying it may be distributed under the terms of this
|
|
Library General Public License (also called "this License"). Each
|
|
licensee is addressed as "you".</P>
|
|
<P>A "library" means a collection of software functions and/or data
|
|
prepared so as to be conveniently linked with application programs
|
|
(which use some of those functions and data) to form executables.</P>
|
|
<P>The "Library", below, refers to any such software library or work
|
|
which has been distributed under these terms. A "work based on the
|
|
Library" means either the Library or any derivative work under
|
|
copyright law: that is to say, a work containing the Library or a
|
|
portion of it, either verbatim or with modifications and/or translated
|
|
straightforwardly into another language. (Hereinafter, translation is
|
|
included without limitation in the term "modification".)</P>
|
|
<P>"Source code" for a work means the preferred form of the work for
|
|
making modifications to it. For a library, complete source code means
|
|
all the source code for all modules it contains, plus any associated
|
|
interface definition files, plus the scripts used to control
|
|
compilation and installation of the library.</P>
|
|
<P>Activities other than copying, distribution and modification are not
|
|
covered by this License; they are outside its scope. The act of running
|
|
a program using the Library is not restricted, and output from such a
|
|
program is covered only if its contents constitute a work based on the
|
|
Library (independent of the use of the Library in a tool for writing
|
|
it). Whether that is true depends on what the Library does and what the
|
|
program that uses the Library does.</P>
|
|
<P><STRONG>1.</STRONG> You may copy and distribute verbatim copies of
|
|
the Library's complete source code as you receive it, in any medium,
|
|
provided that you conspicuously and appropriately publish on each copy
|
|
an appropriate copyright notice and disclaimer of warranty; keep intact
|
|
all the notices that refer to this License and to the absence of any
|
|
warranty; and distribute a copy of this License along with the Library.</P>
|
|
<P>You may charge a fee for the physical act of transferring a copy, and
|
|
you may at your option offer warranty protection in exchange for a fee.</P>
|
|
<P><STRONG>2.</STRONG> You may modify your copy or copies of the Library
|
|
or any portion of it, thus forming a work based on the Library, and
|
|
copy and distribute such modifications or work under the terms of
|
|
Section 1 above, provided that you also meet all of these conditions:</P>
|
|
<BLOCKQUOTE>
|
|
<P><STRONG>a)</STRONG> The modified work must itself be a software
|
|
library.</P>
|
|
<P><STRONG>b)</STRONG> You must cause the files modified to carry
|
|
prominent notices stating that you changed the files and the date of
|
|
any change.</P>
|
|
<P><STRONG>c)</STRONG> You must cause the whole of the work to be
|
|
licensed at no charge to all third parties under the terms of this
|
|
License.</P>
|
|
<P><STRONG>d)</STRONG> If a facility in the modified Library refers to a
|
|
function or a table of data to be supplied by an application program
|
|
that uses the facility, other than as an argument passed when the
|
|
facility is invoked, then you must make a good faith effort to ensure
|
|
that, in the event an application does not supply such function or
|
|
table, the facility still operates, and performs whatever part of its
|
|
purpose remains meaningful.</P>
|
|
<P>(For example, a function in a library to compute square roots has a
|
|
purpose that is entirely well-defined independent of the application.
|
|
Therefore, Subsection 2d requires that any application-supplied
|
|
function or table used by this function must be optional: if the
|
|
application does not supply it, the square root function must still
|
|
compute square roots.)</P>
|
|
</BLOCKQUOTE>
|
|
<P>These requirements apply to the modified work as a whole. If
|
|
identifiable sections of that work are not derived from the Library,
|
|
and can be reasonably considered independent and separate works in
|
|
themselves, then this License, and its terms, do not apply to those
|
|
sections when you distribute them as separate works. But when you
|
|
distribute the same sections as part of a whole which is a work based
|
|
on the Library, the distribution of the whole must be on the terms of
|
|
this License, whose permissions for other licensees extend to the
|
|
entire whole, and thus to each and every part regardless of who wrote
|
|
it.</P>
|
|
<P>Thus, it is not the intent of this section to claim rights or contest
|
|
your rights to work written entirely by you; rather, the intent is to
|
|
exercise the right to control the distribution of derivative or
|
|
collective works based on the Library.</P>
|
|
<P>In addition, mere aggregation of another work not based on the
|
|
Library with the Library (or with a work based on the Library) on a
|
|
volume of a storage or distribution medium does not bring the other
|
|
work under the scope of this License.</P>
|
|
<P><STRONG>3.</STRONG> You may opt to apply the terms of the ordinary
|
|
GNU General Public License instead of this License to a given copy of
|
|
the Library. To do this, you must alter all the notices that refer to
|
|
this License, so that they refer to the ordinary GNU General Public
|
|
License, version 2, instead of to this License. (If a newer version
|
|
than version 2 of the ordinary GNU General Public License has appeared,
|
|
then you can specify that version instead if you wish.) Do not make any
|
|
other change in these notices.</P>
|
|
<P>Once this change is made in a given copy, it is irreversible for that
|
|
copy, so the ordinary GNU General Public License applies to all
|
|
subsequent copies and derivative works made from that copy.</P>
|
|
<P>This option is useful when you wish to copy part of the code of the
|
|
Library into a program that is not a library.</P>
|
|
<P><STRONG>4.</STRONG> You may copy and distribute the Library (or a
|
|
portion or derivative of it, under Section 2) in object code or
|
|
executable form under the terms of Sections 1 and 2 above provided that
|
|
you accompany it with the complete corresponding machine-readable
|
|
source code, which must be distributed under the terms of Sections 1
|
|
and 2 above on a medium customarily used for software interchange.</P>
|
|
<P>If distribution of object code is made by offering access to copy
|
|
from a designated place, then offering equivalent access to copy the
|
|
source code from the same place satisfies the requirement to distribute
|
|
the source code, even though third parties are not compelled to copy
|
|
the source along with the object code.</P>
|
|
<P><STRONG>5.</STRONG> A program that contains no derivative of any
|
|
portion of the Library, but is designed to work with the Library by
|
|
being compiled or linked with it, is called a "work that uses the
|
|
Library". Such a work, in isolation, is not a derivative work of the
|
|
Library, and therefore falls outside the scope of this License.</P>
|
|
<P>However, linking a "work that uses the Library" with the Library
|
|
creates an executable that is a derivative of the Library (because it
|
|
contains portions of the Library), rather than a "work that uses the
|
|
library". The executable is therefore covered by this License. Section
|
|
6 states terms for distribution of such executables.</P>
|
|
<P>When a "work that uses the Library" uses material from a header file
|
|
that is part of the Library, the object code for the work may be a
|
|
derivative work of the Library even though the source code is not.
|
|
Whether this is true is especially significant if the work can be
|
|
linked without the Library, or if the work is itself a library. The
|
|
threshold for this to be true is not precisely defined by law.</P>
|
|
<P>If such an object file uses only numerical parameters, data structure
|
|
layouts and accessors, and small macros and small inline functions (ten
|
|
lines or less in length), then the use of the object file is
|
|
unrestricted, regardless of whether it is legally a derivative work.
|
|
(Executables containing this object code plus portions of the Library
|
|
will still fall under Section 6.)</P>
|
|
<P>Otherwise, if the work is a derivative of the Library, you may
|
|
distribute the object code for the work under the terms of Section 6.
|
|
Any executables containing that work also fall under Section 6, whether
|
|
or not they are linked directly with the Library itself.</P>
|
|
<P><STRONG>6.</STRONG> As an exception to the Sections above, you may
|
|
also compile or link a "work that uses the Library" with the Library to
|
|
produce a work containing portions of the Library, and distribute that
|
|
work under terms of your choice, provided that the terms permit
|
|
modification of the work for the customer's own use and reverse
|
|
engineering for debugging such modifications.</P>
|
|
<P>You must give prominent notice with each copy of the work that the
|
|
Library is used in it and that the Library and its use are covered by
|
|
this License. You must supply a copy of this License. If the work
|
|
during execution displays copyright notices, you must include the
|
|
copyright notice for the Library among them, as well as a reference
|
|
directing the user to the copy of this License. Also, you must do one
|
|
of these things:</P>
|
|
<BLOCKQUOTE><STRONG> a)</STRONG> Accompany the work with the complete
|
|
corresponding machine-readable source code for the Library including
|
|
whatever changes were used in the work (which must be distributed under
|
|
Sections 1 and 2 above); and, if the work is an executable linked with
|
|
the Library, with the complete machine-readable "work that uses the
|
|
Library", as object code and/or source code, so that the user can
|
|
modify the Library and then relink to produce a modified executable
|
|
containing the modified Library. (It is understood that the user who
|
|
changes the contents of definitions files in the Library will not
|
|
necessarily be able to recompile the application to use the modified
|
|
definitions.)
|
|
<P><STRONG>b)</STRONG> Accompany the work with a written offer, valid
|
|
for at least three years, to give the same user the materials specified
|
|
in Subsection 6a, above, for a charge no more than the cost of
|
|
performing this distribution.</P>
|
|
<P><STRONG>c)</STRONG> If distribution of the work is made by offering
|
|
access to copy from a designated place, offer equivalent access to copy
|
|
the above specified materials from the same place.</P>
|
|
<P><STRONG>d)</STRONG> Verify that the user has already received a copy
|
|
of these materials or that you have already sent this user a copy.</P>
|
|
</BLOCKQUOTE>
|
|
<P>For an executable, the required form of the "work that uses the
|
|
Library" must include any data and utility programs needed for
|
|
reproducing the executable from it. However, as a special exception,
|
|
the source code distributed need not include anything that is normally
|
|
distributed (in either source or binary form) with the major components
|
|
(compiler, kernel, and so on) of the operating system on which the
|
|
executable runs, unless that component itself accompanies the
|
|
executable.</P>
|
|
<P>It may happen that this requirement contradicts the license
|
|
restrictions of other proprietary libraries that do not normally
|
|
accompany the operating system. Such a contradiction means you cannot
|
|
use both them and the Library together in an executable that you
|
|
distribute.</P>
|
|
<P><STRONG>7.</STRONG> You may place library facilities that are a work
|
|
based on the Library side-by-side in a single library together with
|
|
other library facilities not covered by this License, and distribute
|
|
such a combined library, provided that the separate distribution of the
|
|
work based on the Library and of the other library facilities is
|
|
otherwise permitted, and provided that you do these two things:</P>
|
|
<BLOCKQUOTE><STRONG> a)</STRONG> Accompany the combined library with a
|
|
copy of the same work based on the Library, uncombined with any other
|
|
library facilities. This must be distributed under the terms of the
|
|
Sections above.
|
|
<P><STRONG>b)</STRONG> Give prominent notice with the combined library
|
|
of the fact that part of it is a work based on the Library, and
|
|
explaining where to find the accompanying uncombined form of the same
|
|
work.</P>
|
|
</BLOCKQUOTE>
|
|
<P><STRONG>8.</STRONG> You may not copy, modify, sublicense, link with,
|
|
or distribute the Library except as expressly provided under this
|
|
License. Any attempt otherwise to copy, modify, sublicense, link with,
|
|
or distribute the Library is void, and will automatically terminate
|
|
your rights under this License. However, parties who have received
|
|
copies, or rights, from you under this License will not have their
|
|
licenses terminated so long as such parties remain in full compliance.</P>
|
|
<P><STRONG>9.</STRONG> You are not required to accept this License,
|
|
since you have not signed it. However, nothing else grants you
|
|
permission to modify or distribute the Library or its derivative works.
|
|
These actions are prohibited by law if you do not accept this License.
|
|
Therefore, by modifying or distributing the Library (or any work based
|
|
on the Library), you indicate your acceptance of this License to do so,
|
|
and all its terms and conditions for copying, distributing or modifying
|
|
the Library or works based on it.</P>
|
|
<P><STRONG>10.</STRONG> Each time you redistribute the Library (or any
|
|
work based on the Library), the recipient automatically receives a
|
|
license from the original licensor to copy, distribute, link with or
|
|
modify the Library subject to these terms and conditions. You may not
|
|
impose any further restrictions on the recipients' exercise of the
|
|
rights granted herein. You are not responsible for enforcing compliance
|
|
by third parties to this License.</P>
|
|
<P><STRONG>11.</STRONG> If, as a consequence of a court judgment or
|
|
allegation of patent infringement or for any other reason (not limited
|
|
to patent issues), conditions are imposed on you (whether by court
|
|
order, agreement or otherwise) that contradict the conditions of this
|
|
License, they do not excuse you from the conditions of this License. If
|
|
you cannot distribute so as to satisfy simultaneously your obligations
|
|
under this License and any other pertinent obligations, then as a
|
|
consequence you may not distribute the Library at all. For example, if
|
|
a patent license would not permit royalty-free redistribution of the
|
|
Library by all those who receive copies directly or indirectly through
|
|
you, then the only way you could satisfy both it and this License would
|
|
be to refrain entirely from distribution of the Library.</P>
|
|
<P>If any portion of this section is held invalid or unenforceable under
|
|
any particular circumstance, the balance of the section is intended to
|
|
apply, and the section as a whole is intended to apply in other
|
|
circumstances.</P>
|
|
<P>It is not the purpose of this section to induce you to infringe any
|
|
patents or other property right claims or to contest validity of any
|
|
such claims; this section has the sole purpose of protecting the
|
|
integrity of the free software distribution system which is implemented
|
|
by public license practices. Many people have made generous
|
|
contributions to the wide range of software distributed through that
|
|
system in reliance on consistent application of that system; it is up
|
|
to the author/donor to decide if he or she is willing to distribute
|
|
software through any other system and a licensee cannot impose that
|
|
choice.</P>
|
|
<P>This section is intended to make thoroughly clear what is believed to
|
|
be a consequence of the rest of this License.</P>
|
|
<P><STRONG>12.</STRONG> If the distribution and/or use of the Library is
|
|
restricted in certain countries either by patents or by copyrighted
|
|
interfaces, the original copyright holder who places the Library under
|
|
this License may add an explicit geographical distribution limitation
|
|
excluding those countries, so that distribution is permitted only in or
|
|
among countries not thus excluded. In such case, this License
|
|
incorporates the limitation as if written in the body of this License.</P>
|
|
<P><STRONG>13.</STRONG> The Free Software Foundation may publish revised
|
|
and/or new versions of the Library General Public License from time to
|
|
time. Such new versions will be similar in spirit to the present
|
|
version, but may differ in detail to address new problems or concerns.</P>
|
|
<P>Each version is given a distinguishing version number. If the Library
|
|
specifies a version number of this License which applies to it and "any
|
|
later version", you have the option of following the terms and
|
|
conditions either of that version or of any later version published by
|
|
the Free Software Foundation. If the Library does not specify a license
|
|
version number, you may choose any version ever published by the Free
|
|
Software Foundation.</P>
|
|
<P><STRONG>14.</STRONG> If you wish to incorporate parts of the Library
|
|
into other free programs whose distribution conditions are incompatible
|
|
with these, write to the author to ask for permission. For software
|
|
which is copyrighted by the Free Software Foundation, write to the Free
|
|
Software Foundation; we sometimes make exceptions for this. Our
|
|
decision will be guided by the two goals of preserving the free status
|
|
of all derivatives of our free software and of promoting the sharing
|
|
and reuse of software generally.</P>
|
|
<P align="center"><BIG>NO WARRANTY</BIG></P>
|
|
<P><STRONG>15.</STRONG> BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE,
|
|
THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY
|
|
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
|
|
HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT
|
|
WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT
|
|
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
|
|
PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE
|
|
OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU
|
|
ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.</P>
|
|
<P><STRONG>16.</STRONG> IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR
|
|
AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO
|
|
MAY MODIFY AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE
|
|
LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL
|
|
OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
|
|
LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
|
|
RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
|
|
FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
|
|
SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
|
|
DAMAGES.</P>
|
|
<P align="center"><BIG>END OF TERMS AND CONDITIONS</BIG></P>
|
|
<HR>
|
|
<H1 align="right"><A name="RELNOTES">B - Release Notes</A></H1>
|
|
<H2><A NAME="7_1">Changes in Mini-XML 2.0</A></H2>
|
|
<UL>
|
|
<LI>Changed the whitespace callback interface to return strings instead
|
|
of a single character, allowing for greater control over the formatting
|
|
of XML files written using Mini-XML. THIS CHANGE WILL REQUIRE CHANGES
|
|
TO YOUR CODE IF YOU USE WHITESPACE CALLBACKS.</LI>
|
|
<LI>The mxmldoc utility is now capable of documenting C++ classes,
|
|
functions, and structures, and correctly handles C++ comments.</LI>
|
|
<LI>Added new modular tests for mxmldoc.</LI>
|
|
<LI>Updated the mxmldoc output to be more compatible with embedding in
|
|
manuals produced with HTMLDOC.</LI>
|
|
<LI>The makefile incorrectly included a "/" separator between the
|
|
destination path and install path. This caused problems when building
|
|
and installing with MingW.</LI>
|
|
</UL>
|
|
<H2><A NAME="7_2">Changes in Mini-XML 1.3</A></H2>
|
|
<UL>
|
|
<LI>Fixes for mxmldoc.</LI>
|
|
<LI>Added support for reading standard HTML entity names.</LI>
|
|
<LI>mxmlLoadString/File() did not decode character entities in element
|
|
names, attribute names, or attribute values.</LI>
|
|
<LI>mxmlLoadString/File() would crash when loading non- conformant XML
|
|
data under an existing parent (top) node.</LI>
|
|
<LI>Fixed several bugs in the mxmldoc utility.</LI>
|
|
<LI>Added new error callback function to catch a variety of errors and
|
|
log them to someplace other than stderr.</LI>
|
|
<LI>The mxmlElementSetAttr() function now allows for NULL attribute
|
|
values.</LI>
|
|
<LI>The load and save functions now properly handle quoted element and
|
|
attribute name strings properly, e.g. for !DOCTYPE declarations.</LI>
|
|
</UL>
|
|
<H2><A NAME="7_3">Changes in Mini-XML 1.2</A></H2>
|
|
<UL>
|
|
<LI>Added new "set" methods to set the value of a node.</LI>
|
|
<LI>Added new formatted text methods mxmlNewTextf() and mxmlSetTextf()
|
|
to create/set a text node value using printf-style formats.</LI>
|
|
<LI>Added new standard callbacks for use with the mxmlLoad functions.</LI>
|
|
<LI>Updated the HTML documentation to include examples of the walk and
|
|
load function output.</LI>
|
|
<LI>Added --with/without-ansi configure option to control the strdup()
|
|
function check.</LI>
|
|
<LI>Added --with/without-snprintf configure option to control the
|
|
snprintf() and vsnprintf() function checks.</LI>
|
|
</UL>
|
|
<H2><A NAME="7_4">Changes in Mini-XML 1.1.2</A></H2>
|
|
<UL>
|
|
<LI>The mxml(3) man page wasn't updated for the string functions.</LI>
|
|
<LI>mxmlSaveString() returned the wrong number of characters.</LI>
|
|
<LI>mxml_add_char() updated the buffer pointer in the wrong place.</LI>
|
|
</UL>
|
|
<H2><A NAME="7_5">Changes in Mini-XML 1.1.1</A></H2>
|
|
<UL>
|
|
<LI>The private mxml_add_ch() function did not update the
|
|
start-of-buffer pointer which could cause a crash when using
|
|
mxmlSaveString().</LI>
|
|
<LI>The private mxml_write_ws() function called putc() instead of using
|
|
the proper callback which could cause a crash when using
|
|
mxmlSaveString().</LI>
|
|
<LI>Added a mxmlSaveAllocString() convenience function for saving an XML
|
|
node tree to an allocated string.</LI>
|
|
</UL>
|
|
<H2><A NAME="7_6">Changes in Mini-XML 1.1</A></H2>
|
|
<UL>
|
|
<LI>The mxmlLoadFile() function now uses dynamically allocated string
|
|
buffers for element names, attribute names, and attribute values.
|
|
Previously they were capped at 16383, 255, and 255 bytes, respectively.</LI>
|
|
<LI>Added a new mxmlLoadString() function for loading an XML node tree
|
|
from a string.</LI>
|
|
<LI>Added a new mxmlSaveString() function for saving an XML node tree to
|
|
a string.</LI>
|
|
<LI>Add emulation of strdup() if the local platform does not provide the
|
|
function.</LI>
|
|
</UL>
|
|
<H2><A NAME="7_7">Changes in Mini-XML 1.0</A></H2>
|
|
<UL>
|
|
<LI>The mxmldoc program now handles function arguments, structures,
|
|
unions, enumerations, classes, and typedefs properly.</LI>
|
|
<LI>Documentation provided via mxmldoc and more in-line comments in the
|
|
code.</LI>
|
|
<LI>Added man pages and packaging files.</LI>
|
|
</UL>
|
|
<H2><A NAME="7_8">Changes in Mini-XML 0.93</A></H2>
|
|
<UL>
|
|
<LI>New mxmldoc example program that is also used to create and update
|
|
code documentation using XML and produce HTML reference pages.</LI>
|
|
<LI>Added mxmlAdd() and mxmlRemove() functions to add and remove nodes
|
|
from a tree. This provides more flexibility over where the nodes are
|
|
inserted and allows nodes to be moved within the tree as needed.</LI>
|
|
<LI>mxmlLoadFile() now correctly handles comments.</LI>
|
|
<LI>mxmlLoadFile() now supports the required "gt", "quot", and "nbsp"
|
|
character entities.</LI>
|
|
<LI>mxmlSaveFile() now uses newlines as whitespace when valid to do so.</LI>
|
|
<LI>mxmlFindElement() now also takes attribute name and attribute value
|
|
string arguments to limit the search to specific elements with
|
|
attributes and/or values.</LI>
|
|
NULL pointers can be used as "wildcards".
|
|
<LI>Added uninstall target to makefile, and auto-reconfig if Makefile.in
|
|
or configure.in are changed.</LI>
|
|
<LI>mxmlFindElement(), mxmlWalkNext(), and mxmlWalkPrev() now all
|
|
provide "descend" arguments to control whether they descend into child
|
|
nodes in the tree.</LI>
|
|
<LI>Fixed some whitespace issues in mxmlLoadFile().</LI>
|
|
<LI>Fixed Unicode output and whitespace issues in mxmlSaveFile().</LI>
|
|
<LI>mxmlSaveFile() now supports a whitespace callback to provide more
|
|
human-readable XML output under program control.</LI>
|
|
</UL>
|
|
<H2><A NAME="7_9">Changes in Mini-XML 0.92</A></H2>
|
|
<UL>
|
|
<LI>mxmlSaveFile() didn't return a value on success.</LI>
|
|
</UL>
|
|
<H2><A NAME="7_10">Changes in Mini-XML 0.91</A></H2>
|
|
<UL>
|
|
<LI>mxmlWalkNext() would go into an infinite loop.</LI>
|
|
</UL>
|
|
<H2><A NAME="7_11">Changes in Mini-XML 0.9</A></H2>
|
|
<UL>
|
|
<LI>Initial public release.</LI>
|
|
</UL>
|
|
<HR>
|
|
<H1 align="right"><A name="REFERENCE">C - Library Reference</A></H1>
|
|
<H2><A NAME="8_1">Contents</A></H2>
|
|
<UL>
|
|
<LI><A href="#_enumerations">Enumerations</A></LI>
|
|
<LI><A href="#_functions">Functions</A></LI>
|
|
<LI><A href="#_structures">Structures</A></LI>
|
|
<LI><A href="#_types">Types</A></LI>
|
|
<LI><A href="#_unions">Unions</A></LI>
|
|
</UL>
|
|
|
|
<!-- NEW PAGE -->
|
|
<H2><A name="_enumerations">Enumerations</A></H2>
|
|
<UL>
|
|
<LI><A href="#mxml_type_e"><TT>mxml_type_e</TT></A></LI>
|
|
</UL>
|
|
|
|
<!-- NEW PAGE -->
|
|
<H3><A name="mxml_type_e">mxml_type_e</A></H3>
|
|
<HR noshade/>
|
|
<H4>Description</H4>
|
|
<P>The XML node type.</P>
|
|
<H4>Values</H4>
|
|
<P class="table"></P>
|
|
<TABLE align="center" border="1" cellpadding="5" cellspacing="0" width="80%">
|
|
<THEAD></THEAD>
|
|
<TR bgcolor="#cccccc"><TH>Name</TH><TH>Description</TH></TR>
|
|
<TBODY></TBODY>
|
|
<TR><TD><TT>MXML_ELEMENT</TT></TD><TD>XML element with attributes</TD></TR>
|
|
<TR><TD><TT>MXML_INTEGER</TT></TD><TD>Integer value</TD></TR>
|
|
<TR><TD><TT>MXML_OPAQUE</TT></TD><TD>Opaque string</TD></TR>
|
|
<TR><TD><TT>MXML_REAL</TT></TD><TD>Real value</TD></TR>
|
|
<TR><TD><TT>MXML_TEXT</TT></TD><TD>Text fragment</TD></TR>
|
|
</TABLE>
|
|
|
|
<!-- NEW PAGE -->
|
|
<H2><A name="_functions">Functions</A></H2>
|
|
<UL>
|
|
<LI><A href="#mxmlAdd"><TT>mxmlAdd()</TT></A></LI>
|
|
<LI><A href="#mxmlDelete"><TT>mxmlDelete()</TT></A></LI>
|
|
<LI><A href="#mxmlElementGetAttr"><TT>mxmlElementGetAttr()</TT></A></LI>
|
|
<LI><A href="#mxmlElementSetAttr"><TT>mxmlElementSetAttr()</TT></A></LI>
|
|
<LI><A href="#mxmlEntityGetName"><TT>mxmlEntityGetName()</TT></A></LI>
|
|
<LI><A href="#mxmlEntityGetValue"><TT>mxmlEntityGetValue()</TT></A></LI>
|
|
<LI><A href="#mxmlFindElement"><TT>mxmlFindElement()</TT></A></LI>
|
|
<LI><A href="#mxmlLoadFile"><TT>mxmlLoadFile()</TT></A></LI>
|
|
<LI><A href="#mxmlLoadString"><TT>mxmlLoadString()</TT></A></LI>
|
|
<LI><A href="#mxmlNewElement"><TT>mxmlNewElement()</TT></A></LI>
|
|
<LI><A href="#mxmlNewInteger"><TT>mxmlNewInteger()</TT></A></LI>
|
|
<LI><A href="#mxmlNewOpaque"><TT>mxmlNewOpaque()</TT></A></LI>
|
|
<LI><A href="#mxmlNewReal"><TT>mxmlNewReal()</TT></A></LI>
|
|
<LI><A href="#mxmlNewText"><TT>mxmlNewText()</TT></A></LI>
|
|
<LI><A href="#mxmlNewTextf"><TT>mxmlNewTextf()</TT></A></LI>
|
|
<LI><A href="#mxmlRemove"><TT>mxmlRemove()</TT></A></LI>
|
|
<LI><A href="#mxmlSaveAllocString"><TT>mxmlSaveAllocString()</TT></A></LI>
|
|
<LI><A href="#mxmlSaveFile"><TT>mxmlSaveFile()</TT></A></LI>
|
|
<LI><A href="#mxmlSaveString"><TT>mxmlSaveString()</TT></A></LI>
|
|
<LI><A href="#mxmlSetElement"><TT>mxmlSetElement()</TT></A></LI>
|
|
<LI><A href="#mxmlSetErrorCallback"><TT>mxmlSetErrorCallback()</TT></A></LI>
|
|
<LI><A href="#mxmlSetInteger"><TT>mxmlSetInteger()</TT></A></LI>
|
|
<LI><A href="#mxmlSetOpaque"><TT>mxmlSetOpaque()</TT></A></LI>
|
|
<LI><A href="#mxmlSetReal"><TT>mxmlSetReal()</TT></A></LI>
|
|
<LI><A href="#mxmlSetText"><TT>mxmlSetText()</TT></A></LI>
|
|
<LI><A href="#mxmlSetTextf"><TT>mxmlSetTextf()</TT></A></LI>
|
|
<LI><A href="#mxmlWalkNext"><TT>mxmlWalkNext()</TT></A></LI>
|
|
<LI><A href="#mxmlWalkPrev"><TT>mxmlWalkPrev()</TT></A></LI>
|
|
</UL>
|
|
|
|
<!-- NEW PAGE -->
|
|
<H3><A name="mxmlAdd">mxmlAdd()</A></H3>
|
|
<HR noshade/>
|
|
<H4>Description</H4>
|
|
<P>Add a node to a tree. Adds the specified node to the parent. If the
|
|
child argument is not NULL, puts the new node before or after the
|
|
specified child depending on the value of the where argument. If the
|
|
child argument is NULL, puts the new node at the beginning of the child
|
|
list (MXML_ADD_BEFORE) or at the end of the child list
|
|
(MXML_ADD_AFTER). The constant MXML_ADD_TO_PARENT can be used to
|
|
specify a NULL child pointer.</P>
|
|
<H4>Syntax</H4>
|
|
<PRE>
|
|
void
|
|
mxmlAdd(
|
|
<A href="#mxml_node_t">mxml_node_t</A> * parent,
|
|
int where,
|
|
<A href="#mxml_node_t">mxml_node_t</A> * child,
|
|
<A href="#mxml_node_t">mxml_node_t</A> * node);
|
|
</PRE>
|
|
<H4>Arguments</H4>
|
|
<P class="table"></P>
|
|
<TABLE align="center" border="1" cellpadding="5" cellspacing="0" width="80%">
|
|
<THEAD></THEAD>
|
|
<TR bgcolor="#cccccc"><TH>Name</TH><TH>Description</TH></TR>
|
|
<TBODY></TBODY>
|
|
<TR><TD><TT>parent</TT></TD><TD>Parent node</TD></TR>
|
|
<TR><TD><TT>where</TT></TD><TD>Where to add, MXML_ADD_BEFORE or
|
|
MXML_ADD_AFTER</TD></TR>
|
|
<TR><TD><TT>child</TT></TD><TD>Child node for where or
|
|
MXML_ADD_TO_PARENT</TD></TR>
|
|
<TR><TD><TT>node</TT></TD><TD>Node to add</TD></TR>
|
|
</TABLE>
|
|
<H4>Returns</H4>
|
|
<P>Nothing.</P>
|
|
|
|
<!-- NEW PAGE -->
|
|
<H3><A name="mxmlDelete">mxmlDelete()</A></H3>
|
|
<HR noshade/>
|
|
<H4>Description</H4>
|
|
<P>Delete a node and all of its children. If the specified node has a
|
|
parent, this function first removes the node from its parent using the
|
|
mxmlRemove() function.</P>
|
|
<H4>Syntax</H4>
|
|
<PRE>
|
|
void
|
|
mxmlDelete(
|
|
<A href="#mxml_node_t">mxml_node_t</A> * node);
|
|
</PRE>
|
|
<H4>Arguments</H4>
|
|
<P class="table"></P>
|
|
<TABLE align="center" border="1" cellpadding="5" cellspacing="0" width="80%">
|
|
<THEAD></THEAD>
|
|
<TR bgcolor="#cccccc"><TH>Name</TH><TH>Description</TH></TR>
|
|
<TBODY></TBODY>
|
|
<TR><TD><TT>node</TT></TD><TD>Node to delete</TD></TR>
|
|
</TABLE>
|
|
<H4>Returns</H4>
|
|
<P>Nothing.</P>
|
|
|
|
<!-- NEW PAGE -->
|
|
<H3><A name="mxmlElementGetAttr">mxmlElementGetAttr()</A></H3>
|
|
<HR noshade/>
|
|
<H4>Description</H4>
|
|
<P>Get an attribute. This function returns NULL if the node is not an
|
|
element or the named attribute does not exist.</P>
|
|
<H4>Syntax</H4>
|
|
<PRE>
|
|
const char *
|
|
mxmlElementGetAttr(
|
|
<A href="#mxml_node_t">mxml_node_t</A> * node,
|
|
const char * name);
|
|
</PRE>
|
|
<H4>Arguments</H4>
|
|
<P class="table"></P>
|
|
<TABLE align="center" border="1" cellpadding="5" cellspacing="0" width="80%">
|
|
<THEAD></THEAD>
|
|
<TR bgcolor="#cccccc"><TH>Name</TH><TH>Description</TH></TR>
|
|
<TBODY></TBODY>
|
|
<TR><TD><TT>node</TT></TD><TD>Element node</TD></TR>
|
|
<TR><TD><TT>name</TT></TD><TD>Name of attribute</TD></TR>
|
|
</TABLE>
|
|
<H4>Returns</H4>
|
|
<P>Attribute value or NULL</P>
|
|
|
|
<!-- NEW PAGE -->
|
|
<H3><A name="mxmlElementSetAttr">mxmlElementSetAttr()</A></H3>
|
|
<HR noshade/>
|
|
<H4>Description</H4>
|
|
<P>Set an attribute. If the named attribute already exists, the value of
|
|
the attribute is replaced by the new string value. The string value is
|
|
copied into the element node. This function does nothing if the node is
|
|
not an element.</P>
|
|
<H4>Syntax</H4>
|
|
<PRE>
|
|
void
|
|
mxmlElementSetAttr(
|
|
<A href="#mxml_node_t">mxml_node_t</A> * node,
|
|
const char * name,
|
|
const char * value);
|
|
</PRE>
|
|
<H4>Arguments</H4>
|
|
<P class="table"></P>
|
|
<TABLE align="center" border="1" cellpadding="5" cellspacing="0" width="80%">
|
|
<THEAD></THEAD>
|
|
<TR bgcolor="#cccccc"><TH>Name</TH><TH>Description</TH></TR>
|
|
<TBODY></TBODY>
|
|
<TR><TD><TT>node</TT></TD><TD>Element node</TD></TR>
|
|
<TR><TD><TT>name</TT></TD><TD>Name of attribute</TD></TR>
|
|
<TR><TD><TT>value</TT></TD><TD>Attribute value</TD></TR>
|
|
</TABLE>
|
|
<H4>Returns</H4>
|
|
<P>Nothing.</P>
|
|
|
|
<!-- NEW PAGE -->
|
|
<H3><A name="mxmlEntityGetName">mxmlEntityGetName()</A></H3>
|
|
<HR noshade/>
|
|
<H4>Description</H4>
|
|
<P>Get the name that corresponds to the character value. If val does not
|
|
need to be represented by a named entity, NULL is returned.</P>
|
|
<H4>Syntax</H4>
|
|
<PRE>
|
|
const char *
|
|
mxmlEntityGetName(
|
|
int val);
|
|
</PRE>
|
|
<H4>Arguments</H4>
|
|
<P class="table"></P>
|
|
<TABLE align="center" border="1" cellpadding="5" cellspacing="0" width="80%">
|
|
<THEAD></THEAD>
|
|
<TR bgcolor="#cccccc"><TH>Name</TH><TH>Description</TH></TR>
|
|
<TBODY></TBODY>
|
|
<TR><TD><TT>val</TT></TD><TD>Character value</TD></TR>
|
|
</TABLE>
|
|
<H4>Returns</H4>
|
|
<P>Entity name or NULL</P>
|
|
|
|
<!-- NEW PAGE -->
|
|
<H3><A name="mxmlEntityGetValue">mxmlEntityGetValue()</A></H3>
|
|
<HR noshade/>
|
|
<H4>Description</H4>
|
|
<P>Get the character corresponding to a named entity. The entity name
|
|
can also be a numeric constant. -1 is returned if the name is not
|
|
known.</P>
|
|
<H4>Syntax</H4>
|
|
<PRE>
|
|
int
|
|
mxmlEntityGetValue(
|
|
const char * name);
|
|
</PRE>
|
|
<H4>Arguments</H4>
|
|
<P class="table"></P>
|
|
<TABLE align="center" border="1" cellpadding="5" cellspacing="0" width="80%">
|
|
<THEAD></THEAD>
|
|
<TR bgcolor="#cccccc"><TH>Name</TH><TH>Description</TH></TR>
|
|
<TBODY></TBODY>
|
|
<TR><TD><TT>name</TT></TD><TD>Entity name</TD></TR>
|
|
</TABLE>
|
|
<H4>Returns</H4>
|
|
<P>Character value or -1 on error</P>
|
|
|
|
<!-- NEW PAGE -->
|
|
<H3><A name="mxmlFindElement">mxmlFindElement()</A></H3>
|
|
<HR noshade/>
|
|
<H4>Description</H4>
|
|
<P>Find the named element. The search is constrained by the name,
|
|
attribute name, and value; any NULL names or values are treated as
|
|
wildcards, so different kinds of searches can be implemented by looking
|
|
for all elements of a given name or all elements with a specific
|
|
attribute. The descend argument determines whether the search descends
|
|
into child nodes; normally you will use MXML_DESCEND_FIRST for the
|
|
initial search and MXML_NO_DESCEND to find additional direct
|
|
descendents of the node. The top node argument constrains the search to
|
|
a particular node's children.</P>
|
|
<H4>Syntax</H4>
|
|
<PRE>
|
|
<A href="#mxml_node_t">mxml_node_t</A> *
|
|
mxmlFindElement(
|
|
<A href="#mxml_node_t">mxml_node_t</A> * node,
|
|
<A href="#mxml_node_t">mxml_node_t</A> * top,
|
|
const char * name,
|
|
const char * attr,
|
|
const char * value,
|
|
int descend);
|
|
</PRE>
|
|
<H4>Arguments</H4>
|
|
<P class="table"></P>
|
|
<TABLE align="center" border="1" cellpadding="5" cellspacing="0" width="80%">
|
|
<THEAD></THEAD>
|
|
<TR bgcolor="#cccccc"><TH>Name</TH><TH>Description</TH></TR>
|
|
<TBODY></TBODY>
|
|
<TR><TD><TT>node</TT></TD><TD>Current node</TD></TR>
|
|
<TR><TD><TT>top</TT></TD><TD>Top node</TD></TR>
|
|
<TR><TD><TT>name</TT></TD><TD>Element name or NULL for any</TD></TR>
|
|
<TR><TD><TT>attr</TT></TD><TD>Attribute name, or NULL for none</TD></TR>
|
|
<TR><TD><TT>value</TT></TD><TD>Attribute value, or NULL for any</TD></TR>
|
|
<TR><TD><TT>descend</TT></TD><TD>Descend into tree - MXML_DESCEND,
|
|
MXML_NO_DESCEND, or MXML_DESCEND_FIRST</TD></TR>
|
|
</TABLE>
|
|
<H4>Returns</H4>
|
|
<P>Element node or NULL</P>
|
|
|
|
<!-- NEW PAGE -->
|
|
<H3><A name="mxmlLoadFile">mxmlLoadFile()</A></H3>
|
|
<HR noshade/>
|
|
<H4>Description</H4>
|
|
<P>Load a file into an XML node tree. The nodes in the specified file
|
|
are added to the specified top node. If no top node is provided, the
|
|
XML file MUST be well-formed with a single parent node like <?xml> for
|
|
the entire file. The callback function returns the value type that
|
|
should be used for child nodes. If MXML_NO_CALLBACK is specified then
|
|
all child nodes will be either MXML_ELEMENT or MXML_TEXT nodes. 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>
|
|
<H4>Syntax</H4>
|
|
<PRE>
|
|
<A href="#mxml_node_t">mxml_node_t</A> *
|
|
mxmlLoadFile(
|
|
<A href="#mxml_node_t">mxml_node_t</A> * top,
|
|
FILE * fp,
|
|
<A href="#mxml_type_t">mxml_type_t</A> (*cb)(mxml_node_t *node));
|
|
</PRE>
|
|
<H4>Arguments</H4>
|
|
<P class="table"></P>
|
|
<TABLE align="center" border="1" cellpadding="5" cellspacing="0" width="80%">
|
|
<THEAD></THEAD>
|
|
<TR bgcolor="#cccccc"><TH>Name</TH><TH>Description</TH></TR>
|
|
<TBODY></TBODY>
|
|
<TR><TD><TT>top</TT></TD><TD>Top node</TD></TR>
|
|
<TR><TD><TT>fp</TT></TD><TD>File to read from</TD></TR>
|
|
<TR><TD><TT>(*cb)(mxml_node_t *node)</TT></TD><TD>Callback function or
|
|
MXML_NO_CALLBACK</TD></TR>
|
|
</TABLE>
|
|
<H4>Returns</H4>
|
|
<P>First node or NULL if the file could not be read.</P>
|
|
|
|
<!-- NEW PAGE -->
|
|
<H3><A name="mxmlLoadString">mxmlLoadString()</A></H3>
|
|
<HR noshade/>
|
|
<H4>Description</H4>
|
|
<P>Load a string into an XML node tree. The nodes in the specified
|
|
string are added to the specified top node. If no top node is provided,
|
|
the XML string MUST be well-formed with a single parent node like
|
|
<?xml> for the entire string. The callback function returns the value
|
|
type that should be used for child nodes. If MXML_NO_CALLBACK is
|
|
specified then all child nodes will be either MXML_ELEMENT or MXML_TEXT
|
|
nodes. 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>
|
|
<H4>Syntax</H4>
|
|
<PRE>
|
|
<A href="#mxml_node_t">mxml_node_t</A> *
|
|
mxmlLoadString(
|
|
<A href="#mxml_node_t">mxml_node_t</A> * top,
|
|
const char * s,
|
|
<A href="#mxml_type_t">mxml_type_t</A> (*cb)(mxml_node_t *node));
|
|
</PRE>
|
|
<H4>Arguments</H4>
|
|
<P class="table"></P>
|
|
<TABLE align="center" border="1" cellpadding="5" cellspacing="0" width="80%">
|
|
<THEAD></THEAD>
|
|
<TR bgcolor="#cccccc"><TH>Name</TH><TH>Description</TH></TR>
|
|
<TBODY></TBODY>
|
|
<TR><TD><TT>top</TT></TD><TD>Top node</TD></TR>
|
|
<TR><TD><TT>s</TT></TD><TD>String to load</TD></TR>
|
|
<TR><TD><TT>(*cb)(mxml_node_t *node)</TT></TD><TD>Callback function or
|
|
MXML_NO_CALLBACK</TD></TR>
|
|
</TABLE>
|
|
<H4>Returns</H4>
|
|
<P>First node or NULL if the string has errors.</P>
|
|
|
|
<!-- NEW PAGE -->
|
|
<H3><A name="mxmlNewElement">mxmlNewElement()</A></H3>
|
|
<HR noshade/>
|
|
<H4>Description</H4>
|
|
<P>Create a new element node. The new element node is added to the end
|
|
of the specified parent's child list. The constant MXML_NO_PARENT can
|
|
be used to specify that the new element node has no parent.</P>
|
|
<H4>Syntax</H4>
|
|
<PRE>
|
|
<A href="#mxml_node_t">mxml_node_t</A> *
|
|
mxmlNewElement(
|
|
<A href="#mxml_node_t">mxml_node_t</A> * parent,
|
|
const char * name);
|
|
</PRE>
|
|
<H4>Arguments</H4>
|
|
<P class="table"></P>
|
|
<TABLE align="center" border="1" cellpadding="5" cellspacing="0" width="80%">
|
|
<THEAD></THEAD>
|
|
<TR bgcolor="#cccccc"><TH>Name</TH><TH>Description</TH></TR>
|
|
<TBODY></TBODY>
|
|
<TR><TD><TT>parent</TT></TD><TD>Parent node or MXML_NO_PARENT</TD></TR>
|
|
<TR><TD><TT>name</TT></TD><TD>Name of element</TD></TR>
|
|
</TABLE>
|
|
<H4>Returns</H4>
|
|
<P>New node</P>
|
|
|
|
<!-- NEW PAGE -->
|
|
<H3><A name="mxmlNewInteger">mxmlNewInteger()</A></H3>
|
|
<HR noshade/>
|
|
<H4>Description</H4>
|
|
<P>Create a new integer node. The new integer node is added to the end
|
|
of the specified parent's child list. The constant MXML_NO_PARENT can
|
|
be used to specify that the new integer node has no parent.</P>
|
|
<H4>Syntax</H4>
|
|
<PRE>
|
|
<A href="#mxml_node_t">mxml_node_t</A> *
|
|
mxmlNewInteger(
|
|
<A href="#mxml_node_t">mxml_node_t</A> * parent,
|
|
int integer);
|
|
</PRE>
|
|
<H4>Arguments</H4>
|
|
<P class="table"></P>
|
|
<TABLE align="center" border="1" cellpadding="5" cellspacing="0" width="80%">
|
|
<THEAD></THEAD>
|
|
<TR bgcolor="#cccccc"><TH>Name</TH><TH>Description</TH></TR>
|
|
<TBODY></TBODY>
|
|
<TR><TD><TT>parent</TT></TD><TD>Parent node or MXML_NO_PARENT</TD></TR>
|
|
<TR><TD><TT>integer</TT></TD><TD>Integer value</TD></TR>
|
|
</TABLE>
|
|
<H4>Returns</H4>
|
|
<P>New node</P>
|
|
|
|
<!-- NEW PAGE -->
|
|
<H3><A name="mxmlNewOpaque">mxmlNewOpaque()</A></H3>
|
|
<HR noshade/>
|
|
<H4>Description</H4>
|
|
<P>Create a new opaque string. The new opaque node is added to the end
|
|
of the specified parent's child list. The constant MXML_NO_PARENT can
|
|
be used to specify that the new opaque node has no parent. The opaque
|
|
string must be nul-terminated and is copied into the new node.</P>
|
|
<H4>Syntax</H4>
|
|
<PRE>
|
|
<A href="#mxml_node_t">mxml_node_t</A> *
|
|
mxmlNewOpaque(
|
|
<A href="#mxml_node_t">mxml_node_t</A> * parent,
|
|
const char * opaque);
|
|
</PRE>
|
|
<H4>Arguments</H4>
|
|
<P class="table"></P>
|
|
<TABLE align="center" border="1" cellpadding="5" cellspacing="0" width="80%">
|
|
<THEAD></THEAD>
|
|
<TR bgcolor="#cccccc"><TH>Name</TH><TH>Description</TH></TR>
|
|
<TBODY></TBODY>
|
|
<TR><TD><TT>parent</TT></TD><TD>Parent node or MXML_NO_PARENT</TD></TR>
|
|
<TR><TD><TT>opaque</TT></TD><TD>Opaque string</TD></TR>
|
|
</TABLE>
|
|
<H4>Returns</H4>
|
|
<P>New node</P>
|
|
|
|
<!-- NEW PAGE -->
|
|
<H3><A name="mxmlNewReal">mxmlNewReal()</A></H3>
|
|
<HR noshade/>
|
|
<H4>Description</H4>
|
|
<P>Create a new real number node. The new real number node is added to
|
|
the end of the specified parent's child list. The constant
|
|
MXML_NO_PARENT can be used to specify that the new real number node has
|
|
no parent.</P>
|
|
<H4>Syntax</H4>
|
|
<PRE>
|
|
<A href="#mxml_node_t">mxml_node_t</A> *
|
|
mxmlNewReal(
|
|
<A href="#mxml_node_t">mxml_node_t</A> * parent,
|
|
double real);
|
|
</PRE>
|
|
<H4>Arguments</H4>
|
|
<P class="table"></P>
|
|
<TABLE align="center" border="1" cellpadding="5" cellspacing="0" width="80%">
|
|
<THEAD></THEAD>
|
|
<TR bgcolor="#cccccc"><TH>Name</TH><TH>Description</TH></TR>
|
|
<TBODY></TBODY>
|
|
<TR><TD><TT>parent</TT></TD><TD>Parent node or MXML_NO_PARENT</TD></TR>
|
|
<TR><TD><TT>real</TT></TD><TD>Real number value</TD></TR>
|
|
</TABLE>
|
|
<H4>Returns</H4>
|
|
<P>New node</P>
|
|
|
|
<!-- NEW PAGE -->
|
|
<H3><A name="mxmlNewText">mxmlNewText()</A></H3>
|
|
<HR noshade/>
|
|
<H4>Description</H4>
|
|
<P>Create a new text fragment node. The new text node is added to the
|
|
end of the specified parent's child list. The constant MXML_NO_PARENT
|
|
can be used to specify that the new text node has no parent. The
|
|
whitespace parameter is used to specify whether leading whitespace is
|
|
present before the node. The text string must be nul-terminated and is
|
|
copied into the new node.</P>
|
|
<H4>Syntax</H4>
|
|
<PRE>
|
|
<A href="#mxml_node_t">mxml_node_t</A> *
|
|
mxmlNewText(
|
|
<A href="#mxml_node_t">mxml_node_t</A> * parent,
|
|
int whitespace,
|
|
const char * string);
|
|
</PRE>
|
|
<H4>Arguments</H4>
|
|
<P class="table"></P>
|
|
<TABLE align="center" border="1" cellpadding="5" cellspacing="0" width="80%">
|
|
<THEAD></THEAD>
|
|
<TR bgcolor="#cccccc"><TH>Name</TH><TH>Description</TH></TR>
|
|
<TBODY></TBODY>
|
|
<TR><TD><TT>parent</TT></TD><TD>Parent node or MXML_NO_PARENT</TD></TR>
|
|
<TR><TD><TT>whitespace</TT></TD><TD>1 = leading whitespace, 0 = no
|
|
whitespace</TD></TR>
|
|
<TR><TD><TT>string</TT></TD><TD>String</TD></TR>
|
|
</TABLE>
|
|
<H4>Returns</H4>
|
|
<P>New node</P>
|
|
|
|
<!-- NEW PAGE -->
|
|
<H3><A name="mxmlNewTextf">mxmlNewTextf()</A></H3>
|
|
<HR noshade/>
|
|
<H4>Description</H4>
|
|
<P>Create a new formatted text fragment node. The new text node is added
|
|
to the end of the specified parent's child list. The constant
|
|
MXML_NO_PARENT can be used to specify that the new text node has no
|
|
parent. The whitespace parameter is used to specify whether leading
|
|
whitespace is present before the node. The format string must be
|
|
nul-terminated and is formatted into the new node.</P>
|
|
<H4>Syntax</H4>
|
|
<PRE>
|
|
<A href="#mxml_node_t">mxml_node_t</A> *
|
|
mxmlNewTextf(
|
|
<A href="#mxml_node_t">mxml_node_t</A> * parent,
|
|
int whitespace,
|
|
const char * format,
|
|
...);
|
|
</PRE>
|
|
<H4>Arguments</H4>
|
|
<P class="table"></P>
|
|
<TABLE align="center" border="1" cellpadding="5" cellspacing="0" width="80%">
|
|
<THEAD></THEAD>
|
|
<TR bgcolor="#cccccc"><TH>Name</TH><TH>Description</TH></TR>
|
|
<TBODY></TBODY>
|
|
<TR><TD><TT>parent</TT></TD><TD>Parent node or MXML_NO_PARENT</TD></TR>
|
|
<TR><TD><TT>whitespace</TT></TD><TD>1 = leading whitespace, 0 = no
|
|
whitespace</TD></TR>
|
|
<TR><TD><TT>format</TT></TD><TD>Printf-style frmat string</TD></TR>
|
|
<TR><TD><TT>...</TT></TD><TD>Additional args as needed</TD></TR>
|
|
</TABLE>
|
|
<H4>Returns</H4>
|
|
<P>New node</P>
|
|
|
|
<!-- NEW PAGE -->
|
|
<H3><A name="mxmlRemove">mxmlRemove()</A></H3>
|
|
<HR noshade/>
|
|
<H4>Description</H4>
|
|
<P>Remove a node from its parent. Does not free memory used by the node
|
|
- use mxmlDelete() for that. This function does nothing if the node has
|
|
no parent.</P>
|
|
<H4>Syntax</H4>
|
|
<PRE>
|
|
void
|
|
mxmlRemove(
|
|
<A href="#mxml_node_t">mxml_node_t</A> * node);
|
|
</PRE>
|
|
<H4>Arguments</H4>
|
|
<P class="table"></P>
|
|
<TABLE align="center" border="1" cellpadding="5" cellspacing="0" width="80%">
|
|
<THEAD></THEAD>
|
|
<TR bgcolor="#cccccc"><TH>Name</TH><TH>Description</TH></TR>
|
|
<TBODY></TBODY>
|
|
<TR><TD><TT>node</TT></TD><TD>Node to remove</TD></TR>
|
|
</TABLE>
|
|
<H4>Returns</H4>
|
|
<P>Nothing.</P>
|
|
|
|
<!-- NEW PAGE -->
|
|
<H3><A name="mxmlSaveAllocString">mxmlSaveAllocString()</A></H3>
|
|
<HR noshade/>
|
|
<H4>Description</H4>
|
|
<P>Save an XML node tree to an allocated string. This function returns a
|
|
pointer to a string containing the textual representation of the XML
|
|
node tree. The string should be freed using the free() function when
|
|
you are done with it. NULL is returned if the node would produce an
|
|
empty string or if the string cannot be allocated.</P>
|
|
<H4>Syntax</H4>
|
|
<PRE>
|
|
char *
|
|
mxmlSaveAllocString(
|
|
<A href="#mxml_node_t">mxml_node_t</A> * node,
|
|
const char * (*cb)(mxml_node_t *node, int ws));
|
|
</PRE>
|
|
<H4>Arguments</H4>
|
|
<P class="table"></P>
|
|
<TABLE align="center" border="1" cellpadding="5" cellspacing="0" width="80%">
|
|
<THEAD></THEAD>
|
|
<TR bgcolor="#cccccc"><TH>Name</TH><TH>Description</TH></TR>
|
|
<TBODY></TBODY>
|
|
<TR><TD><TT>node</TT></TD><TD>Node to write</TD></TR>
|
|
<TR><TD><TT>(*cb)(mxml_node_t *node, int ws)</TT></TD><TD>Whitespace
|
|
callback or MXML_NO_CALLBACK</TD></TR>
|
|
</TABLE>
|
|
<H4>Returns</H4>
|
|
<P>Allocated string or NULL</P>
|
|
|
|
<!-- NEW PAGE -->
|
|
<H3><A name="mxmlSaveFile">mxmlSaveFile()</A></H3>
|
|
<HR noshade/>
|
|
<H4>Description</H4>
|
|
<P>Save an XML tree to a file. The callback argument specifies a
|
|
function that returns a whitespace character or nul (0) before and
|
|
after each element. If MXML_NO_CALLBACK is specified, whitespace will
|
|
only be added before MXML_TEXT nodes with leading whitespace and before
|
|
attribute names inside opening element tags.</P>
|
|
<H4>Syntax</H4>
|
|
<PRE>
|
|
int
|
|
mxmlSaveFile(
|
|
<A href="#mxml_node_t">mxml_node_t</A> * node,
|
|
FILE * fp,
|
|
const char * (*cb)(mxml_node_t *node, int ws));
|
|
</PRE>
|
|
<H4>Arguments</H4>
|
|
<P class="table"></P>
|
|
<TABLE align="center" border="1" cellpadding="5" cellspacing="0" width="80%">
|
|
<THEAD></THEAD>
|
|
<TR bgcolor="#cccccc"><TH>Name</TH><TH>Description</TH></TR>
|
|
<TBODY></TBODY>
|
|
<TR><TD><TT>node</TT></TD><TD>Node to write</TD></TR>
|
|
<TR><TD><TT>fp</TT></TD><TD>File to write to</TD></TR>
|
|
<TR><TD><TT>(*cb)(mxml_node_t *node, int ws)</TT></TD><TD>Whitespace
|
|
callback or MXML_NO_CALLBACK</TD></TR>
|
|
</TABLE>
|
|
<H4>Returns</H4>
|
|
<P>0 on success, -1 on error.</P>
|
|
|
|
<!-- NEW PAGE -->
|
|
<H3><A name="mxmlSaveString">mxmlSaveString()</A></H3>
|
|
<HR noshade/>
|
|
<H4>Description</H4>
|
|
<P>Save an XML node tree to a string. This function returns the total
|
|
number of bytes that would be required for the string but only copies
|
|
(bufsize - 1) characters into the specified buffer.</P>
|
|
<H4>Syntax</H4>
|
|
<PRE>
|
|
int
|
|
mxmlSaveString(
|
|
<A href="#mxml_node_t">mxml_node_t</A> * node,
|
|
char * buffer,
|
|
int bufsize,
|
|
const char * (*cb)(mxml_node_t *node, int ws));
|
|
</PRE>
|
|
<H4>Arguments</H4>
|
|
<P class="table"></P>
|
|
<TABLE align="center" border="1" cellpadding="5" cellspacing="0" width="80%">
|
|
<THEAD></THEAD>
|
|
<TR bgcolor="#cccccc"><TH>Name</TH><TH>Description</TH></TR>
|
|
<TBODY></TBODY>
|
|
<TR><TD><TT>node</TT></TD><TD>Node to write</TD></TR>
|
|
<TR><TD><TT>buffer</TT></TD><TD>String buffer</TD></TR>
|
|
<TR><TD><TT>bufsize</TT></TD><TD>Size of string buffer</TD></TR>
|
|
<TR><TD><TT>(*cb)(mxml_node_t *node, int ws)</TT></TD><TD>Whitespace
|
|
callback or MXML_NO_CALLBACK</TD></TR>
|
|
</TABLE>
|
|
<H4>Returns</H4>
|
|
<P>Size of string</P>
|
|
|
|
<!-- NEW PAGE -->
|
|
<H3><A name="mxmlSetElement">mxmlSetElement()</A></H3>
|
|
<HR noshade/>
|
|
<H4>Description</H4>
|
|
<P>Set the name of an element node. The node is not changed if it is not
|
|
an element node.</P>
|
|
<H4>Syntax</H4>
|
|
<PRE>
|
|
int
|
|
mxmlSetElement(
|
|
<A href="#mxml_node_t">mxml_node_t</A> * node,
|
|
const char * name);
|
|
</PRE>
|
|
<H4>Arguments</H4>
|
|
<P class="table"></P>
|
|
<TABLE align="center" border="1" cellpadding="5" cellspacing="0" width="80%">
|
|
<THEAD></THEAD>
|
|
<TR bgcolor="#cccccc"><TH>Name</TH><TH>Description</TH></TR>
|
|
<TBODY></TBODY>
|
|
<TR><TD><TT>node</TT></TD><TD>Node to set</TD></TR>
|
|
<TR><TD><TT>name</TT></TD><TD>New name string</TD></TR>
|
|
</TABLE>
|
|
<H4>Returns</H4>
|
|
<P>0 on success, -1 on failure</P>
|
|
|
|
<!-- NEW PAGE -->
|
|
<H3><A name="mxmlSetErrorCallback">mxmlSetErrorCallback()</A></H3>
|
|
<HR noshade/>
|
|
<H4>Description</H4>
|
|
<P>Set the error message callback.</P>
|
|
<H4>Syntax</H4>
|
|
<PRE>
|
|
void
|
|
mxmlSetErrorCallback(
|
|
void (*cb)(const char *));
|
|
</PRE>
|
|
<H4>Arguments</H4>
|
|
<P class="table"></P>
|
|
<TABLE align="center" border="1" cellpadding="5" cellspacing="0" width="80%">
|
|
<THEAD></THEAD>
|
|
<TR bgcolor="#cccccc"><TH>Name</TH><TH>Description</TH></TR>
|
|
<TBODY></TBODY>
|
|
<TR><TD><TT>(*cb)(const char *)</TT></TD><TD>Error callback function</TD>
|
|
</TR>
|
|
</TABLE>
|
|
<H4>Returns</H4>
|
|
<P>Nothing.</P>
|
|
|
|
<!-- NEW PAGE -->
|
|
<H3><A name="mxmlSetInteger">mxmlSetInteger()</A></H3>
|
|
<HR noshade/>
|
|
<H4>Description</H4>
|
|
<P>Set the value of an integer node. The node is not changed if it is
|
|
not an integer node.</P>
|
|
<H4>Syntax</H4>
|
|
<PRE>
|
|
int
|
|
mxmlSetInteger(
|
|
<A href="#mxml_node_t">mxml_node_t</A> * node,
|
|
int integer);
|
|
</PRE>
|
|
<H4>Arguments</H4>
|
|
<P class="table"></P>
|
|
<TABLE align="center" border="1" cellpadding="5" cellspacing="0" width="80%">
|
|
<THEAD></THEAD>
|
|
<TR bgcolor="#cccccc"><TH>Name</TH><TH>Description</TH></TR>
|
|
<TBODY></TBODY>
|
|
<TR><TD><TT>node</TT></TD><TD>Node to set</TD></TR>
|
|
<TR><TD><TT>integer</TT></TD><TD>Integer value</TD></TR>
|
|
</TABLE>
|
|
<H4>Returns</H4>
|
|
<P>0 on success, -1 on failure</P>
|
|
|
|
<!-- NEW PAGE -->
|
|
<H3><A name="mxmlSetOpaque">mxmlSetOpaque()</A></H3>
|
|
<HR noshade/>
|
|
<H4>Description</H4>
|
|
<P>Set the value of an opaque node. The node is not changed if it is not
|
|
an opaque node.</P>
|
|
<H4>Syntax</H4>
|
|
<PRE>
|
|
int
|
|
mxmlSetOpaque(
|
|
<A href="#mxml_node_t">mxml_node_t</A> * node,
|
|
const char * opaque);
|
|
</PRE>
|
|
<H4>Arguments</H4>
|
|
<P class="table"></P>
|
|
<TABLE align="center" border="1" cellpadding="5" cellspacing="0" width="80%">
|
|
<THEAD></THEAD>
|
|
<TR bgcolor="#cccccc"><TH>Name</TH><TH>Description</TH></TR>
|
|
<TBODY></TBODY>
|
|
<TR><TD><TT>node</TT></TD><TD>Node to set</TD></TR>
|
|
<TR><TD><TT>opaque</TT></TD><TD>Opaque string</TD></TR>
|
|
</TABLE>
|
|
<H4>Returns</H4>
|
|
<P>0 on success, -1 on failure</P>
|
|
|
|
<!-- NEW PAGE -->
|
|
<H3><A name="mxmlSetReal">mxmlSetReal()</A></H3>
|
|
<HR noshade/>
|
|
<H4>Description</H4>
|
|
<P>Set the value of a real number node. The node is not changed if it is
|
|
not a real number node.</P>
|
|
<H4>Syntax</H4>
|
|
<PRE>
|
|
int
|
|
mxmlSetReal(
|
|
<A href="#mxml_node_t">mxml_node_t</A> * node,
|
|
double real);
|
|
</PRE>
|
|
<H4>Arguments</H4>
|
|
<P class="table"></P>
|
|
<TABLE align="center" border="1" cellpadding="5" cellspacing="0" width="80%">
|
|
<THEAD></THEAD>
|
|
<TR bgcolor="#cccccc"><TH>Name</TH><TH>Description</TH></TR>
|
|
<TBODY></TBODY>
|
|
<TR><TD><TT>node</TT></TD><TD>Node to set</TD></TR>
|
|
<TR><TD><TT>real</TT></TD><TD>Real number value</TD></TR>
|
|
</TABLE>
|
|
<H4>Returns</H4>
|
|
<P>0 on success, -1 on failure</P>
|
|
|
|
<!-- NEW PAGE -->
|
|
<H3><A name="mxmlSetText">mxmlSetText()</A></H3>
|
|
<HR noshade/>
|
|
<H4>Description</H4>
|
|
<P>Set the value of a text node. The node is not changed if it is not a
|
|
text node.</P>
|
|
<H4>Syntax</H4>
|
|
<PRE>
|
|
int
|
|
mxmlSetText(
|
|
<A href="#mxml_node_t">mxml_node_t</A> * node,
|
|
int whitespace,
|
|
const char * string);
|
|
</PRE>
|
|
<H4>Arguments</H4>
|
|
<P class="table"></P>
|
|
<TABLE align="center" border="1" cellpadding="5" cellspacing="0" width="80%">
|
|
<THEAD></THEAD>
|
|
<TR bgcolor="#cccccc"><TH>Name</TH><TH>Description</TH></TR>
|
|
<TBODY></TBODY>
|
|
<TR><TD><TT>node</TT></TD><TD>Node to set</TD></TR>
|
|
<TR><TD><TT>whitespace</TT></TD><TD>1 = leading whitespace, 0 = no
|
|
whitespace</TD></TR>
|
|
<TR><TD><TT>string</TT></TD><TD>String</TD></TR>
|
|
</TABLE>
|
|
<H4>Returns</H4>
|
|
<P>0 on success, -1 on failure</P>
|
|
|
|
<!-- NEW PAGE -->
|
|
<H3><A name="mxmlSetTextf">mxmlSetTextf()</A></H3>
|
|
<HR noshade/>
|
|
<H4>Description</H4>
|
|
<P>Set the value of a text node to a formatted string. The node is not
|
|
changed if it is not a text node.</P>
|
|
<H4>Syntax</H4>
|
|
<PRE>
|
|
int
|
|
mxmlSetTextf(
|
|
<A href="#mxml_node_t">mxml_node_t</A> * node,
|
|
int whitespace,
|
|
const char * format,
|
|
...);
|
|
</PRE>
|
|
<H4>Arguments</H4>
|
|
<P class="table"></P>
|
|
<TABLE align="center" border="1" cellpadding="5" cellspacing="0" width="80%">
|
|
<THEAD></THEAD>
|
|
<TR bgcolor="#cccccc"><TH>Name</TH><TH>Description</TH></TR>
|
|
<TBODY></TBODY>
|
|
<TR><TD><TT>node</TT></TD><TD>Node to set</TD></TR>
|
|
<TR><TD><TT>whitespace</TT></TD><TD>1 = leading whitespace, 0 = no
|
|
whitespace</TD></TR>
|
|
<TR><TD><TT>format</TT></TD><TD>Printf-style format string</TD></TR>
|
|
<TR><TD><TT>...</TT></TD><TD>Additional arguments as needed</TD></TR>
|
|
</TABLE>
|
|
<H4>Returns</H4>
|
|
<P>0 on success, -1 on failure</P>
|
|
|
|
<!-- NEW PAGE -->
|
|
<H3><A name="mxmlWalkNext">mxmlWalkNext()</A></H3>
|
|
<HR noshade/>
|
|
<H4>Description</H4>
|
|
<P>Walk to the next logical node in the tree. The descend argument
|
|
controls whether the first child is considered to be the next node. The
|
|
top node argument constrains the walk to the node's children.</P>
|
|
<H4>Syntax</H4>
|
|
<PRE>
|
|
<A href="#mxml_node_t">mxml_node_t</A> *
|
|
mxmlWalkNext(
|
|
<A href="#mxml_node_t">mxml_node_t</A> * node,
|
|
<A href="#mxml_node_t">mxml_node_t</A> * top,
|
|
int descend);
|
|
</PRE>
|
|
<H4>Arguments</H4>
|
|
<P class="table"></P>
|
|
<TABLE align="center" border="1" cellpadding="5" cellspacing="0" width="80%">
|
|
<THEAD></THEAD>
|
|
<TR bgcolor="#cccccc"><TH>Name</TH><TH>Description</TH></TR>
|
|
<TBODY></TBODY>
|
|
<TR><TD><TT>node</TT></TD><TD>Current node</TD></TR>
|
|
<TR><TD><TT>top</TT></TD><TD>Top node</TD></TR>
|
|
<TR><TD><TT>descend</TT></TD><TD>Descend into tree - MXML_DESCEND,
|
|
MXML_NO_DESCEND, or MXML_DESCEND_FIRST</TD></TR>
|
|
</TABLE>
|
|
<H4>Returns</H4>
|
|
<P>Next node or NULL</P>
|
|
|
|
<!-- NEW PAGE -->
|
|
<H3><A name="mxmlWalkPrev">mxmlWalkPrev()</A></H3>
|
|
<HR noshade/>
|
|
<H4>Description</H4>
|
|
<P>Walk to the previous logical node in the tree. The descend argument
|
|
controls whether the previous node's last child is considered to be the
|
|
previous node. The top node argument constrains the walk to the node's
|
|
children.</P>
|
|
<H4>Syntax</H4>
|
|
<PRE>
|
|
<A href="#mxml_node_t">mxml_node_t</A> *
|
|
mxmlWalkPrev(
|
|
<A href="#mxml_node_t">mxml_node_t</A> * node,
|
|
<A href="#mxml_node_t">mxml_node_t</A> * top,
|
|
int descend);
|
|
</PRE>
|
|
<H4>Arguments</H4>
|
|
<P class="table"></P>
|
|
<TABLE align="center" border="1" cellpadding="5" cellspacing="0" width="80%">
|
|
<THEAD></THEAD>
|
|
<TR bgcolor="#cccccc"><TH>Name</TH><TH>Description</TH></TR>
|
|
<TBODY></TBODY>
|
|
<TR><TD><TT>node</TT></TD><TD>Current node</TD></TR>
|
|
<TR><TD><TT>top</TT></TD><TD>Top node</TD></TR>
|
|
<TR><TD><TT>descend</TT></TD><TD>Descend into tree - MXML_DESCEND,
|
|
MXML_NO_DESCEND, or MXML_DESCEND_FIRST</TD></TR>
|
|
</TABLE>
|
|
<H4>Returns</H4>
|
|
<P>Previous node or NULL</P>
|
|
|
|
<!-- NEW PAGE -->
|
|
<H2><A name="_structures">Structures</A></H2>
|
|
<UL>
|
|
<LI><A href="#mxml_attr_s"><TT>mxml_attr_s</TT></A></LI>
|
|
<LI><A href="#mxml_node_s"><TT>mxml_node_s</TT></A></LI>
|
|
<LI><A href="#mxml_text_s"><TT>mxml_text_s</TT></A></LI>
|
|
<LI><A href="#mxml_value_s"><TT>mxml_value_s</TT></A></LI>
|
|
</UL>
|
|
|
|
<!-- NEW PAGE -->
|
|
<H3><A name="mxml_attr_s">mxml_attr_s</A></H3>
|
|
<HR noshade/>
|
|
<H4>Description</H4>
|
|
<P>An XML element attribute value.</P>
|
|
<H4>Definition</H4>
|
|
<PRE>
|
|
struct mxml_attr_s
|
|
{
|
|
char * name;
|
|
char * value;
|
|
};
|
|
</PRE>
|
|
<H4>Members</H4>
|
|
<P class="table"></P>
|
|
<TABLE align="center" border="1" cellpadding="5" cellspacing="0" width="80%">
|
|
<THEAD></THEAD>
|
|
<TR bgcolor="#cccccc"><TH>Name</TH><TH>Description</TH></TR>
|
|
<TBODY></TBODY>
|
|
<TR><TD><TT>name</TT></TD><TD>Attribute name</TD></TR>
|
|
<TR><TD><TT>value</TT></TD><TD>Attribute value</TD></TR>
|
|
</TABLE>
|
|
|
|
<!-- NEW PAGE -->
|
|
<H3><A name="mxml_node_s">mxml_node_s</A></H3>
|
|
<HR noshade/>
|
|
<H4>Description</H4>
|
|
<P>An XML node.</P>
|
|
<H4>Definition</H4>
|
|
<PRE>
|
|
struct mxml_node_s
|
|
{
|
|
struct <A href="#mxml_node_s">mxml_node_s</A> * child;
|
|
struct <A href="#mxml_node_s">mxml_node_s</A> * last_child;
|
|
struct <A href="#mxml_node_s">mxml_node_s</A> * next;
|
|
struct <A href="#mxml_node_s">mxml_node_s</A> * parent;
|
|
struct <A href="#mxml_node_s">mxml_node_s</A> * prev;
|
|
<A href="#mxml_type_t">mxml_type_t</A> type;
|
|
<A href="#mxml_value_t">mxml_value_t</A> value;
|
|
};
|
|
</PRE>
|
|
<H4>Members</H4>
|
|
<P class="table"></P>
|
|
<TABLE align="center" border="1" cellpadding="5" cellspacing="0" width="80%">
|
|
<THEAD></THEAD>
|
|
<TR bgcolor="#cccccc"><TH>Name</TH><TH>Description</TH></TR>
|
|
<TBODY></TBODY>
|
|
<TR><TD><TT>child</TT></TD><TD>First child node</TD></TR>
|
|
<TR><TD><TT>last_child</TT></TD><TD>Last child node</TD></TR>
|
|
<TR><TD><TT>next</TT></TD><TD>Next node under same parent</TD></TR>
|
|
<TR><TD><TT>parent</TT></TD><TD>Parent node</TD></TR>
|
|
<TR><TD><TT>prev</TT></TD><TD>Previous node under same parent</TD></TR>
|
|
<TR><TD><TT>type</TT></TD><TD>Node type</TD></TR>
|
|
<TR><TD><TT>value</TT></TD><TD>Node value</TD></TR>
|
|
</TABLE>
|
|
|
|
<!-- NEW PAGE -->
|
|
<H3><A name="mxml_text_s">mxml_text_s</A></H3>
|
|
<HR noshade/>
|
|
<H4>Description</H4>
|
|
<P>An XML text value.</P>
|
|
<H4>Definition</H4>
|
|
<PRE>
|
|
struct mxml_text_s
|
|
{
|
|
char * string;
|
|
int whitespace;
|
|
};
|
|
</PRE>
|
|
<H4>Members</H4>
|
|
<P class="table"></P>
|
|
<TABLE align="center" border="1" cellpadding="5" cellspacing="0" width="80%">
|
|
<THEAD></THEAD>
|
|
<TR bgcolor="#cccccc"><TH>Name</TH><TH>Description</TH></TR>
|
|
<TBODY></TBODY>
|
|
<TR><TD><TT>string</TT></TD><TD>Fragment string</TD></TR>
|
|
<TR><TD><TT>whitespace</TT></TD><TD>Leading whitespace?</TD></TR>
|
|
</TABLE>
|
|
|
|
<!-- NEW PAGE -->
|
|
<H3><A name="mxml_value_s">mxml_value_s</A></H3>
|
|
<HR noshade/>
|
|
<H4>Description</H4>
|
|
<P>An XML element value.</P>
|
|
<H4>Definition</H4>
|
|
<PRE>
|
|
struct mxml_value_s
|
|
{
|
|
<A href="#mxml_attr_t">mxml_attr_t</A> * attrs;
|
|
char * name;
|
|
int num_attrs;
|
|
};
|
|
</PRE>
|
|
<H4>Members</H4>
|
|
<P class="table"></P>
|
|
<TABLE align="center" border="1" cellpadding="5" cellspacing="0" width="80%">
|
|
<THEAD></THEAD>
|
|
<TR bgcolor="#cccccc"><TH>Name</TH><TH>Description</TH></TR>
|
|
<TBODY></TBODY>
|
|
<TR><TD><TT>attrs</TT></TD><TD>Attributes</TD></TR>
|
|
<TR><TD><TT>name</TT></TD><TD>Name of element</TD></TR>
|
|
<TR><TD><TT>num_attrs</TT></TD><TD>Number of attributes</TD></TR>
|
|
</TABLE>
|
|
|
|
<!-- NEW PAGE -->
|
|
<H2><A name="_types">Types</A></H2>
|
|
<UL>
|
|
<LI><A href="#mxml_attr_t"><TT>mxml_attr_t</TT></A></LI>
|
|
<LI><A href="#mxml_element_t"><TT>mxml_element_t</TT></A></LI>
|
|
<LI><A href="#mxml_node_t"><TT>mxml_node_t</TT></A></LI>
|
|
<LI><A href="#mxml_text_t"><TT>mxml_text_t</TT></A></LI>
|
|
<LI><A href="#mxml_type_t"><TT>mxml_type_t</TT></A></LI>
|
|
<LI><A href="#mxml_value_t"><TT>mxml_value_t</TT></A></LI>
|
|
</UL>
|
|
|
|
<!-- NEW PAGE -->
|
|
<H3><A name="mxml_attr_t">mxml_attr_t</A></H3>
|
|
<HR noshade/>
|
|
<H4>Description</H4>
|
|
<P>An XML element attribute value.</P>
|
|
<H4>Definition</H4>
|
|
<PRE>
|
|
typedef struct <A href="#mxml_attr_s">mxml_attr_s</A> mxml_attr_t;
|
|
</PRE>
|
|
|
|
<!-- NEW PAGE -->
|
|
<H3><A name="mxml_element_t">mxml_element_t</A></H3>
|
|
<HR noshade/>
|
|
<H4>Description</H4>
|
|
<P>An XML element value.</P>
|
|
<H4>Definition</H4>
|
|
<PRE>
|
|
typedef struct <A href="#mxml_value_s">mxml_value_s</A> mxml_element_t;
|
|
</PRE>
|
|
|
|
<!-- NEW PAGE -->
|
|
<H3><A name="mxml_node_t">mxml_node_t</A></H3>
|
|
<HR noshade/>
|
|
<H4>Description</H4>
|
|
<P>An XML node.</P>
|
|
<H4>Definition</H4>
|
|
<PRE>
|
|
typedef struct <A href="#mxml_node_s">mxml_node_s</A> mxml_node_t;
|
|
</PRE>
|
|
|
|
<!-- NEW PAGE -->
|
|
<H3><A name="mxml_text_t">mxml_text_t</A></H3>
|
|
<HR noshade/>
|
|
<H4>Description</H4>
|
|
<P>An XML text value.</P>
|
|
<H4>Definition</H4>
|
|
<PRE>
|
|
typedef struct <A href="#mxml_text_s">mxml_text_s</A> mxml_text_t;
|
|
</PRE>
|
|
|
|
<!-- NEW PAGE -->
|
|
<H3><A name="mxml_type_t">mxml_type_t</A></H3>
|
|
<HR noshade/>
|
|
<H4>Description</H4>
|
|
<P>The XML node type.</P>
|
|
<H4>Definition</H4>
|
|
<PRE>
|
|
typedef enum <A href="#mxml_type_e">mxml_type_e</A> mxml_type_t;
|
|
</PRE>
|
|
|
|
<!-- NEW PAGE -->
|
|
<H3><A name="mxml_value_t">mxml_value_t</A></H3>
|
|
<HR noshade/>
|
|
<H4>Description</H4>
|
|
<P>An XML node value.</P>
|
|
<H4>Definition</H4>
|
|
<PRE>
|
|
typedef union <A href="#mxml_value_u">mxml_value_u</A> mxml_value_t;
|
|
</PRE>
|
|
|
|
<!-- NEW PAGE -->
|
|
<H2><A name="_unions">Unions</A></H2>
|
|
<UL>
|
|
<LI><A href="#mxml_value_u"><TT>mxml_value_u</TT></A></LI>
|
|
</UL>
|
|
|
|
<!-- NEW PAGE -->
|
|
<H3><A name="mxml_value_u">mxml_value_u</A></H3>
|
|
<HR noshade/>
|
|
<H4>Description</H4>
|
|
<P>An XML node value.</P>
|
|
<H4>Definition</H4>
|
|
<PRE>
|
|
union mxml_value_u
|
|
{
|
|
<A href="#mxml_element_t">mxml_element_t</A> element;
|
|
int integer;
|
|
char * opaque;
|
|
double real;
|
|
<A href="#mxml_text_t">mxml_text_t</A> text;
|
|
};
|
|
</PRE>
|
|
<H4>Members</H4>
|
|
<P class="table"></P>
|
|
<TABLE align="center" border="1" cellpadding="5" cellspacing="0" width="80%">
|
|
<THEAD></THEAD>
|
|
<TR bgcolor="#cccccc"><TH>Name</TH><TH>Description</TH></TR>
|
|
<TBODY></TBODY>
|
|
<TR><TD><TT>element</TT></TD><TD>Element</TD></TR>
|
|
<TR><TD><TT>integer</TT></TD><TD>Integer number</TD></TR>
|
|
<TR><TD><TT>opaque</TT></TD><TD>Opaque string</TD></TR>
|
|
<TR><TD><TT>real</TT></TD><TD>Real number</TD></TR>
|
|
<TR><TD><TT>text</TT></TD><TD>Text fragment</TD></TR>
|
|
</TABLE>
|
|
</BODY>
|
|
</HTML>
|