<html>
<body>

<h1 align='right'><a name='RELNOTES'><img src="B.gif" align="right"
hspace="10" width="100" height="100" alt="B"></a>Release Notes</h1>


<h2 _hd_omit_toc>Changes in Mini-XML 2.8</h2>

<ul>

	<li>Now call docsetutil using xcrun on OS X (Bug #458)</li>

	<li>mxmldoc did not escape special HTML characters inside @code foo@
	comments.</li>

	<li>Fixed a memory leak in mxmlElementDeleteAttr (Bug #452)</li>

	<li>Added MXML_MAJOR/MINOR_VERSION definitions to mxml.h (Bug $461)</li>

	<li>Fixed a bug reading UTF-16 characters from a file (Bug #454)</li>

	<li>Fixed a memory leak when loading invalid XML (Bug #496)</li>

	<li>Fixed an XML fragment loading problem (Bug #494)</li>

</ul>


<h2 _hd_omit_toc>Changes in Mini-XML 2.7</h2>

<ul>

	<li>Added 64-bit configurations to the VC++ project files (STR #129)</li>

	<li>Fixed conformance of mxmldoc's HTML and CSS output.</li>

	<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 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>

	<li>The shared library did not include a destructor for the thread-
	specific data key on UNIX-based operating systems (STR #103)</li>

	<li>mxmlLoad* did not error out on XML with multiple root nodes (STR
	#101)</li>

	<li>Fixed an issue with the _mxml_vstrdupf function (STR #107)</li>

	<li>mxmlSave* no longer write all siblings of the passed node, just that
	node and its children (STR #109)</li>

</ul>


<h2 _hd_omit_toc>Changes in Mini-XML 2.6</h2>

<ul>

	<li>Documentation fixes (STR #91, STR #92)</li>

	<li>The mxmldoc program did not handle typedef comments properly (STR
	#72)</li>

	<li>Added support for &quot;long long&quot; printf formats.</li>

	<li>The XML parser now ignores BOMs in UTF-8 XML files (STR #89)</li>

	<li>The mxmldoc program now supports generating Xcode documentation
	sets.</li>

	<li>mxmlSave*() did not output UTF-8 correctly on some platforms.</li>

	<li>mxmlNewXML() now adds encoding=&quot;utf-8&quot; in the ?xml
	directive to avoid problems with non-conformant XML parsers that assume
	something other than UTF-8 as the default encoding.</li>

	<li>Wrapping was not disabled when mxmlSetWrapMargin(0) was called, and
	&quot;&lt;?xml ... ?&gt;&quot; was always followed by a newline
	(STR #76)</li>

	<li>The mxml.pc.in file was broken (STR #79)</li>

	<li>The mxmldoc program now handles &quot;typedef enum name {}
	name&quot; correctly (STR #72)</li>

</ul>


<h2 _hd_omit_toc>Changes in Mini-XML 2.5</h2>

<ul>

	<li>The mxmldoc program now makes greater use of CSS and
	supports a --css option to embed an alternate stylesheet.</li>

	<li>The mxmldoc program now supports --header and --footer
	options to insert documentation content before and
	after the generated content.</li>

	<li>The mxmldoc program now supports a --framed option to
	generate framed HTML output.</li>

	<li>The mxmldoc program now creates a table of contents
	including any headings in the --intro file when
	generating HTML output.</li>

	<li>The man pages and man page output from mxmldoc did
	not use "\-" for dashes (STR #68)</li>

	<li>The debug version of the Mini-XML DLL could not be
	built (STR #65)</li>

	<li>Processing instructions and directives did not work
	when not at the top level of a document (STR #67)</li>

	<li>Spaces around the "=" in attributes were not supported
	(STR #67)</li>

</ul>


<h2 _hd_omit_toc>Changes in Mini-XML 2.4</h2>

<ul>

	<li>Fixed shared library build problems on HP-UX and Mac OS X.</li>

	<li>The mxmldoc program did not output argument descriptions
	for functions properly.</li>

	<li>All global settings (custom, error, and entity callbacks
	and the wrap margin) are now managed separately for each
	thread.</li>

	<li>Added mxmlElementDeleteAttr() function (STR #59)</li>

	<li>mxmlElementSetAttrf() did not work (STR #57)</li>

	<li>mxmlLoad*() incorrectly treated declarations as parent
	elements (STR #56)</li>

	<li>mxmlLoad*() incorrectly allowed attributes without
	values (STR #47)</li>

	<li>Fixed Visual C++ build problems (STR #49)</li>

	<li>mxmlLoad*() did not return NULL when an element
	contained an error (STR #46)</li>

	<li>Added support for the apos character entity (STR
	#54)</li> <li>Fixed whitespace detection with Unicode
	characters (STR #48)</li>

	<li>mxmlWalkNext() and mxmlWalkPrev() did not work correctly
	when called with a node with no children as the top node
	(STR #53)</li>

</ul>


<h2 _hd_omit_toc>Changes in Mini-XML 2.3</h2>

<ul>

	<li>Added two exceptions to the LGPL to support static
	linking of applications against Mini-XML</li>

	<li>The mxmldoc utility can now generate man pages,
	too.</li>

	<li>Added a mxmlNewXML() function</li>

	<li>Added a mxmlElementSetAttrf() function (STR #43)</li>

	<li>Added a snprintf() emulation function for the test
	program (STR #32)</li>

	<li>Added the _CRT_SECURE_NO_DEPRECATE definition when
	building on VC++ 2005 (STR #36)</li>

	<li>mxmlLoad*() did not detect missing > characters in
	elements (STR #41)</li>

	<li>mxmlLoad*() did not detect missing close tags at the
	end of an XML document (STR #45)</li>

	<li>Added user_data and ref_count members to mxml_node_t
	structure</li>

	<li>Added mxmlReleaseNode() and mxmlRetainNode() APIs for
	reference-counted nodes</li>

	<li>Added mxmlSetWrapMargin() to control the wrapping of
	XML output</li>

	<li>Added conditional check for EINTR error code for
	certain Windows compilers that do not define it (STR
	#33)</li>

	<li>The mxmldoc program now generates correct HTML 4.0
	output - previously it generated invalid XHTML</li>

	<li>The mxmldoc program now supports "@deprecated@,
	"@private@", and "@since version@" comments</li>

	<li>Fixed function and enumeration type bugs in
	mxmldoc</li>

	<li>Fixed the XML schema for mxmldoc</li>

	<li>The mxmldoc program now supports --intro, --section,
	and --title options</li>

	<li>The mxmlLoad*() functions could leak a node on an
	error (STR #27)</li>

	<li>The mxml_vsnprintf() function could get in an
	infinite loop on a buffer overflow (STR #25)</li>

	<li>Added new mxmlNewCDATA() and mxmlSetCDATA() functions
	to create and set CDATA nodes, which are really just
	special element nodes</li>

	<li>Added new MXML_IGNORE type and MXML_IGNORE_CB
	callback to ignore non-element nodes, e.g.
	whitespace</li>

	<li>mxmlLoad*() did not treat custom data as opaque, so
	whitespace characters would be lost</li>

</ul>


<h2 _hd_omit_toc>Changes in Mini-XML 2.2.2</h2>

<ul>

	<li>mxmlLoad*() did not treat custom data as opaque, so
	whitespace characters would be lost.</li>

</ul>


<h2 _hd_omit_toc>Changes in Mini-XML 2.2.1</h2>

<ul>

	<li>mxmlLoadFd(), mxmlLoadFile(), and mxmlLoadString()
	now correctly return NULL on error (STR #21)</li>

	<li>mxmlNewInteger(), mxmlNewOpaque(), mxmlNewReal(),
	mxmlNewText(), and mxmlNewTextf() incorrectly required a
	parent node (STR #22)</li>

	<li>Fixed an XML output bug in mxmldoc.</li>

	<li>The "make install" target now uses the install
	command to set the proper permissions on
	UNIX/Linux/OSX.</li>

	<li>Fixed a MingW/Cygwin compilation problem (STR
	#18)</li>

</ul>


<h2 _hd_omit_toc>Changes in Mini-XML 2.2</h2>

<ul>

	<li>Added shared library support (STR #17)</li>

	<li>mxmlLoad*() now returns an error when an XML stream
	contains illegal control characters (STR #10)</li>

	<li>mxmlLoad*() now returns an error when an element
	contains two attributes with the same name in
	conformance with the XML spec (STR #16)</li>

	<li>Added support for CDATA (STR #14, STR #15)</li>

	<li>Updated comment and processing instruction handling -
	no entity support per XML specification.</li>

	<li>Added checking for invalid comment termination ("--->"
	is not allowed)</li>

</ul>

<h2 _hd_omit_toc>Changes in Mini-XML 2.1</h2>

<ul>

	<li>Added support for custom data nodes (STR #6)</li>

	<li>Now treat UTF-8 sequences which are longer than
	necessary as an error (STR #4)</li>

	<li>Fixed entity number support (STR #8)</li>

	<li>Fixed mxmlLoadString() bug with UTF-8 (STR #7)</li>

	<li>Fixed entity lookup bug (STR #5)</li>

	<li>Added mxmlLoadFd() and mxmlSaveFd() functions.</li>

	<li>Fixed multi-word UTF-16 handling.</li>

</ul>

<h2 _hd_omit_toc>Changes in Mini-XML 2.0</h2>

<ul>

	<li>New programmers manual.</li>

	<li>Added Visual C++ project files for Microsoft Windows
	users.</li>

	<li>Added optimizations to mxmldoc, mxmlSaveFile(), and
	mxmlIndexNew() (STR #2)</li>

	<li>mxmlEntityAddCallback() now returns an integer
	status (STR #2)</li>

	<li>Added UTF-16 support (input only; all output is
	UTF-8)</li>

	<li>Added index functions to build a searchable index of
	XML nodes.</li>

	<li>Added character entity callback interface to support
	additional character entities beyond those defined in
	the XHTML specification.</li>

	<li>Added support for XHTML character entities.</li>

	<li>The mxmldoc utility now produces XML output which
	conforms to an updated XML schema, described in the file
	"doc/mxmldoc.xsd".</li>

	<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 1.x CODE IF YOU USE WHITESPACE CALLBACKS.</li>

	<li>The mxmldoc utility now produces XML output which
	conforms to an updated XML schema, described in the file
	"doc/mxmldoc.xsd".</li>

	<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 1.x 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 _hd_omit_toc>Changes in Mini-XML 1.3</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 _hd_omit_toc>Changes in Mini-XML 1.2</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 _hd_omit_toc>Changes in Mini-XML 1.1.2</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 _hd_omit_toc>Changes in Mini-XML 1.1.1</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 _hd_omit_toc>Changes in Mini-XML 1.1</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 _hd_omit_toc>Changes in Mini-XML 1.0</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 _hd_omit_toc>Changes in Mini-XML 0.93</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>

	<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 _hd_omit_toc>Changes in Mini-XML 0.92</h2>

<ul>

	<li>mxmlSaveFile() didn't return a value on success.</li>

</ul>

<h2 _hd_omit_toc>Changes in Mini-XML 0.91</h2>

<ul>

	<li>mxmlWalkNext() would go into an infinite loop.</li>

</ul>

<h2 _hd_omit_toc>Changes in Mini-XML 0.9</h2>

<ul>

	<li>Initial public release.</li>

</ul>

</body>
</html>
