DOMIT! ChangeLog

Version 0.11 (2003/12/22)
- updated to SAXY version 0.1

Version 0.2 (2004/01/15)
- added methods: saveXML, saveTextToFile, loadXML, loadTextFromFile, parsedBy, getElementsByPath
- fixed Expat misbehavior with whitespace handling, where in some versions of PHP and Expat, setting XML_OPTION_SKIP_WHITE has no effect

Version 0.3 (2004/01/21)
- added methods: getNodesByNodeName, getNodesByNodeValue, getText
- updated getTextFromFile and saveTextToFile, which now use file_get_contents and file_put_contents when available
- fixed error in documentation for replaceChild method

Version 0.4 (2004/01/26)
- added methods to class DOMIT_Element: getAttribute, setAttribute, removeAttribute, hasAttribute
- updated documentation and DOMIT! Tutorial
- fixed bug in SAXY where attributes demarcated by single quotes were ignored.

Version 0.41 (2004/01/27)
- fixed bug in parseAttributes method of SAXY. It is now permissible to have equal signs and tabs within attributes.

Version 0.5 (2004/01/28)
- DOMIT_Parser (and SAXY) now preserve CDATASection Nodes when parsing an xml string.
- getNamedElement method of DOMIT_Node was renamed to getNamedElements
- getElementsByTagName now a method of DOMIT_Element in addition to DOMIT_Document
- can pass "*" to getElementsByTagName to return all elements
- getElementsByPath has been completely rewritten to be recursive, and optimized significantly
- added a NodeList class and a NamedNodeMap class
- getElementsByTagName, getNodesByNodeName, and getNodesByNodeValue now return DOMIT_NodeLists instead of arrays

Version 0.51 (2004/01/30)
- updated SAXY parser to correct version, which handles new CDATA parsing functionality

Version 0.52 (2004/02/03)
- fixed a bug in the DOMIT_NodeList class, in which appendNode and removeNode were returning a shallow copy of DOMIT_Node
- added tutorial: "OOP Techniques for Modifying an XML Document: Part 1"
- minor revisions to the DOMIT! Tutorial

Version 0.6 (2004/02/06)
- DOMIT! is far better optimized for speed
- rewrote UIDGenerator class so that uniqid() was no longer being called. This function was causing performance degradation on all systems, and causing Celeron processors to choke badly.
- in class DOMIT_GetElementsByPath, replaced a number of substr calls which returned a single character with $text{integer} syntax, for reduced access time.
- in class DOMIT_GetElementsByPath, replaced several if-else conditionals with case statements to increase performance
- updated to SAXY 0.6, which replaced a number of substr calls with $text{integer} syntax, for reduced access time. 

Version 0.7 (2004/02/25)
- DOMIT! has undergone a number of substantial architectural changes and is almost fully DOM Level 1 compliant. One of its primary goals has been achieved: no XML input is ever discarded by the parser unless requested by the user.
- DOMT_Attr class added. Attributes are now nodes in a NamedNodeMap rather than array elements.
- DOMIT_Comment class added for handling XML comments
- DOMIT_ProcessingInstruction class added for handling ProcessingInstruction nodes
- DOMIT_DocumentFragment class added to allow unstructured collections of nodes to be added to a DOMIT_Document
- DOMIT_CharacterData interface implemented, which enables the convenient manipulation of data text nodes 
- DOMIT_DOMImplementation class added
- DOMIT_DOMException class added. Error-handling now more closely conforms to the DOM spec
- DOMIT_Cache class added. This is a simple yet effective caching mechanism for DOMIT! documents. 
- DOMIT_ChildNodes_Interface class added, which handles the inheritance of appendChild, insertBefore, removeChild, and replaceChild methods
- when Expat is specified as the active parser, and it is not found, DOMIT! will default to the SAXY parser so that no errors occur
- getVersion method added to DOMIT_Document, which returns the current version of DOMIT!
- setDocumentElement method added to DOMIT_Document class, to ensure safe setting of documentElement property
- doctype and xml declaration now preserved.
- Expat parsing now preserves CDATASections, as well as all other nodes preserved by SAXY.
- createAttribute, createDocumentFragment, createComment, createProcessingInstruction, and getDOMImplementation methods added to DOMIT_Document
- splitText function added to DOMIT_TextNode
- getTagName and normalize methods added to DOMIT_Element
- putDataToFile and getDatFromFile methods added to DOMIT_Utilities class
- toString and cloneNode methods added to DOMIT_NodeList and DOMIT_NamedNodeMap classes
- DOMIT! documentation and DOMIT! Tutorial updated

Version 0.8 (2004/03/08)
- type checking added to appendChild, replaceChild, removeChild, and insertBefore methods to ensure that only valid nodes are handled
- createClone method removed from all subclasses of DOMIT_Node and replaced with a properly functioning cloneNode method. (thanks to Brad Parks for bug report)
- the XML Prolog is now parsed properly. Processing Instructions, Comments, DocumentElement, and DocumentType nodes can all be appended as children of a DOMIT_Document. DOMIT_Document->firstChild no longer defaults to the documentElement (thanks to Erik Fleischer for bug report, smaple code, and testing)
- DocumentType node partially implemented
- xmlDeclaration property of DOMIT_Document now properly refers to a DOMIT_ProcessingInstruction node, rather than a string.
- childCount property added to keep track of the number of childNodes of a node.  (thanks to Andrew Eddie for benchmarking and code)
- toNormalizedString method now formats output in a more standard manner (thanks to Tilman Koschnick for code)
- loadXML_utf8, parseXML_utf8, and saveXML_utf8 methods added to simplify handling of non-ASCII characters
- printUTF8Header method added to DOMIT_Utilities, which informs the browser that content is to be interpreted as UTF-8 encoded text
- saveXML (and saveXML_utf8) now has a second parameter, $normalized, which when set to true will save the xml document with toNormalizedString formatting (thanks to Tilman Koschnick for code)
- forHTML method added to DOMIT_Utilities, which wraps text using "<pre>" tags and applies htmlentites() function.
- DOMIT! documentation and DOMIT! Tutorial updated

Version 0.9 (2004/03/20)
- htmlSafe parameter added to toString() and toNormalizedString() methods, which allows an html formatted string output (thanks to Andrew Eddie for suggestion)
- bugs fixed in CDataSection parsing and DocType parsing (thanks to Tilman Koschnick and to deezaster for bug reports)
- removed all use of PHP is_a() function, for better backwards compatibility (thanks to Tilman Koschnick for bug report)
- DOMIT_NamedNodeMaps class subclassed to DOMIT_NamedNodeMaps_Attr, and toArray() method added. Attributes are now a member of this class, and toArray() returns an associative array of attribute name / attribute value pairs for easy iteration over collection (thanks to Brad Parks and Andrew Eddie for suggestions).
- toArray() method added to all Node classes.
- DOMIT! Lite and SAXY Lite included in distribution. This fork is optimized for speed and does not handle parsing of the xml prolog, processing instructions, comments, document fragments, and some other items) 
- new DOMIT testing suite, domit_testing.php, included in distribution (also available online at http://www.engageinteractive.com/domit/testing_domit.php )
- DOMIT! documentation and tutorial updated

Version 0.91 (2004/03/27)
- xml_domit_include.php file added to resolve include path issues (thanks to Robert Castley for suggestion)
- all files saved with Unix end-of-line characters (/n) (thanks to Robert Castley for suggestion)
- SAXY updated to version 0.8 - an inconsistency was resolved in the handling of predefined XML entities, as compared to Expat  
- DOMIT! documentation and tutorial updated

Version 0.92 (2004/04/04)
- fixed a bug in handling of mixed content (thanks to Marijn for bug report)
- modified include path handling in xml_domit_getelementsbypath.php
- SAXY updated to version 0.81 - fixed bug with handling of "]" characters in CDATA Sections 

Version 0.93 (2004/04/07)
- fixed bug in xml_domit_parser.php - mispelled variable in insertBefore method (thanks to Paul Cook for bug report)
- DOMException class now has option for HTML formatted output (thanks to Andrew Eddie for suggestion)
- SAXY updated to version 0.82 - fixed a bug in handling of ampersand entities (thanks to Andrew Eddie for bug report)

Version 0.94 (2004/04/27)
- entity equivalents are now substituted for illegal xml characters when saving a document
- SAXY updated to version 0.83 - fixed a bug in handling carriage return characters (thanks to Jonas Gamalielsson for bug report)

Version 0.95 (2004/05/30)
- changed license to LGPL to allow integration with closed source applications
- common code for DOMIT! and DOMIT! Lite moved to xml_domit_shared.php
- phpDocumentor comments added to all source files (suggested by Andrew Eddie)
- DOMIT_Doctor class added to repair some errors in invalid xml files
- resolveErrors method added to DOMIT_Document; when set to true, DOMIT_Doctor inspects xml for non-conformance and attempts to repair any problems
- appendEntityTranslationTable method of DOMIT_Document allows for user defined entity substitutions
- setText method added to DOMIT_Element, DOMIT_TextNode, and DOMIT_Comment. For DOMIT_Element, setText will create a new child text node if one is not already present 
- clearReferences method added to DOMIT_Node; removes parentNode, nextSibling, and previousSibling references from a node that has been removed from a document
- expandEmptyElementTags method added to DOMIT_Document. Allows user to specify whether empty element tags are rendered to string using the expanded or compact syntax (suggested by Johan)
- appendChild, insertBefore, and replaceChild now ensure that DOMIT_Attr nodes cannot be added to a document improperly
- fixed a bug in insertBefore where previousSibling references were not always properly dereferenced (thanks to Sylvain)
- loadXML_utf8, parseXML_utf8, and saveXML_utf8 methods have been deprecated
- SAXY updated to version 0.84 - fixed a bug with ampersands in the entity translation table
- DOMIT! class docs and tutorial updated

Version 0.96 (2004/08/27)
- implemented namespace awareness
- expandEmptyElementTags method modified so that exceptions to the expansion rule can be specified
- SAX error codes and messages now available to Document
- added normalize method to DOMIT_Node
- added isSupported method to DOMIT_Node
- added setNamespaceAwareness method to DOMIT_Document
- added getErrorCode method to DOMIT_Document
- added getErrorString method to DOMIT_Document
- added expandEmptyElementTags method to DOMIT_Document
- added createAttributeNS method to DOMIT_Document
- added createElementNS method to DOMIT_Document
- added getElementsByTagNameNS method to DOMIT_Document
- added getElementByID method to DOMIT_Document
- added getNamedElementsNS method to DOMIT_Element
- added getElementsByTagNameNS method to DOMIT_Element
- added _getElementByID method to DOMIT_Element
- added getElementByID method to DOMIT_Element
- added getAttributeNS method to DOMIT_Element
- added setAttributeNS method to DOMIT_Element
- added removeAttributeNS method to DOMIT_Element
- added hasAttributeNS method to DOMIT_Element
- added getAttributeNodeNS method to DOMIT_Element
- added setAttributeNodeNS method to DOMIT_Element
- added startElementNS method to DOMIT_Parser
- added startNamespaceDeclaration method to DOMIT_Parser
- added endNamespaceDeclaration method to DOMIT_Parser
- added reindexNodeMap method to DOMIT_NamedNodeMap
- added getNamedItemNS method to DOMIT_NamedNodeMap
- added setNamedItemNS method to DOMIT_NamedNodeMap
- added removeNamedItemNS method to DOMIT_NamedNodeMap
- added getKeyNS method to DOMIT_NamedNodeMap
- SAXY updated to version 0.85 - fixed a bug in the generation of attribute keys
- DOMIT! class docs and tutorial updated

Version 0.97 (2004/09/08)
- SAXY updated to version 0.86

Version 0.98 (2004/09/28)
- DOMIT! now works with PHP5
- added ability to manually set http connection (and proxy) configuration
- added getElementsByAttribute method to DOMIT_ChildNodes_Interface
- added _getElementsByAttribute method to DOMIT_ChildNodes_Interface
- added setConnection method to DOMIT_Document
- added setAuthorization method to DOMIT_Document
- added setProxyConnection method to DOMIT_Document
- added setProxyAuthorization method to DOMIT_Document
- modified getElementByID - now throws an error if namespace awareness is not turned on
- removed getDataFromFile and putDataToFile methods and consolidated into php_file_utilities.php
- SAXY updated to version 0.87
- DOMIT! class docs and tutorial updated

Version 0.99 (2004/10/08)
- fixed critical bug in loadXML method of DOMIT!_Document and DOMIT_Lite_Document
- fixed file i/o bug in DOMIT_Cache

