(name 'XML-Parser-monty.449' message 'changed XMLNode>>#asString to no longer potentially truncate its output like #printString' id 'c5e09917-3729-0d00-9feb-eb7409e7eae2' date '05/22/2018' time '09:21:33' author 'monty' ancestors ((name 'XML-Parser-monty.448' message 'added explicit deprecations for certain soft-deprecated (categorized as "deprecated") methods' id '1839a6b4-a225-0d00-adde-da2c0be21a5f' date '04/07/2018' time '08:04:02' author 'monty' ancestors ((name 'XML-Parser-monty.447' message 'updated comments for new XMLWriter self-closing tag formatting' id '1246f19c-9525-0d00-a7f9-bf4406ee03cd' date '04/06/2018' time '04:26:50' author 'monty' ancestors ((name 'XML-Parser-monty.446' message 'improved integer reader comments and version number parsing' id 'dc3bfd95-3224-0d00-b543-24f701b5dea6' date '03/20/2018' time '12:53:00' author 'monty' ancestors ((name 'XML-Parser-monty.445' message 'added stream converter convenience methods and changed preferred classes to ignore implicit converters' id '34110316-1224-0d00-a71f-f95f0dc29a35' date '03/18/2018' time '10:06:34' author 'monty' ancestors ((name 'XML-Parser-monty.444' message 'refactored stream adapter printing' id '5d5ad186-f623-0d00-8c7c-636a07b734b3' date '03/17/2018' time '01:13:48' author 'monty' ancestors ((name 'XML-Parser-monty.443' message 'refactored encoding detector clases' id '0fe2087c-f223-0d00-af36-49900f15dc1a' date '03/16/2018' time '08:24:27' author 'monty' ancestors ((name 'XML-Parser-monty.442' message 'added #enableCompression to XMLHTTPRequest' id 'fb648eb5-be23-0d00-85ac-5f780538ffb3' date '03/14/2018' time '06:38:14' author 'monty' ancestors ((name 'XML-Parser-monty.441' message 'refactored NFA/DFA code' id '44faef5a-a823-0d00-a927-355b069b0260' date '03/13/2018' time '03:58:04' author 'monty' ancestors ((name 'XML-Parser-monty.440' message 'refactored' id '5a510893-5623-0d00-82f7-4f3f087b8e07' date '03/09/2018' time '01:23:58' author 'monty' ancestors ((name 'XML-Parser-monty.439' message 'refactored' id '602a7def-4023-0d00-9252-73b1068a67ba' date '03/07/2018' time '11:35:00' author 'monty' ancestors ((name 'XML-Parser-monty.438' message 'refactored and improved error messages' id '651671c9-0623-0d00-814d-c6d70bd48c86' date '03/05/2018' time '02:12:33' author 'monty' ancestors ((name 'XML-Parser-monty.437' message 'fixed timestamp' id 'fd4d9659-0e22-0d00-8b05-e53407f0f018' date '02/20/2018' time '05:48:45' author 'monty' ancestors ((name 'XML-Parser-monty.436' message 'made #isInLanguage: support wildcards' id '15c7dc01-0e22-0d00-8b02-ff1e07f0f018' date '02/20/2018' time '05:24:13' author 'monty' ancestors ((name 'XML-Parser-monty.435' message 'refactored' id '2cb994c5-c021-0d00-9b34-63260dac31c8' date '02/16/2018' time '09:15:29' author 'monty' ancestors ((name 'XML-Parser-monty.434' message 'fixed namespace re-mapping attribute validation bug' id '127e0216-bf21-0d00-a543-d9d80f8996d0' date '02/16/2018' time '07:14:48' author 'monty' ancestors ((name 'XML-Parser-monty.433' message 'optimized DOM tree namespace validation' id 'a4d0303f-b921-0d00-b73b-522d00a61c65' date '02/16/2018' time '12:16:50' author 'monty' ancestors ((name 'XML-Parser-monty.432' message 'fixed a namespace bug in attributeAt:put: and optimized other attribute list methods' id '4ef2a8ce-6721-0d00-b63a-ffe408fa77f6' date '02/12/2018' time '11:07:09' author 'monty' ancestors ((name 'XML-Parser-monty.431' message 'improved comments' id '536b2269-4c21-0d00-af12-97640669f51e' date '02/11/2018' time '02:26:02' author 'monty' ancestors ((name 'XML-Parser-monty.430' message 'fixed a bug in the use of the legacy ZnByteEncoder.' id 'e96b1cf6-3921-0d00-90dc-e89701e682d2' date '02/10/2018' time '04:25:23' author 'monty' ancestors ((name 'XML-Parser-monty.429' message 'simplified binary/external stream detection and handling for GS' id 'f70243e5-0f21-0d00-91f8-de400f592ff0' date '02/08/2018' time '02:14:11' author 'monty' ancestors ((name 'XML-Parser-monty.428' message 'HTTP request initialization fix' id '2d3e8dfd-0021-0d00-8701-b8760f28e740' date '02/07/2018' time '08:27:14' author 'monty' ancestors ((name 'XML-Parser-monty.427' message 'made stream converters to default to decoding from/encoding to binary (and optimized them), reintroduced HTTP gzip compression support, deprecated #requiresDocumentConstraints in favor of #requiresSchema' id '7c14af57-0021-0d00-9501-9b2f044f1e13' date '02/07/2018' time '07:40:52' author 'monty' ancestors ((name 'XML-Parser-monty.426' message 'refactored abstract factory and stream converter classes' id 'a97f6da0-4720-0d00-9448-b791014bb924' date '01/29/2018' time '03:18:23' author 'monty' ancestors ((name 'XML-Parser-monty.425' message 'remove HTTP compression support because it cannot be done portably' id 'e05d255f-f41f-0d00-8306-3a6807c74f01' date '01/24/2018' time '11:58:46' author 'monty' ancestors ((name 'XML-Parser-monty.424' message 'GS fix' id '2b847beb-f21f-0d00-a754-fd6101443aac' date '01/24/2018' time '10:14:50' author 'monty' ancestors ((name 'XML-Parser-monty.423' message 'GS fix' id 'de7a31d7-f21f-0d00-a753-064e01443aac' date '01/24/2018' time '10:09:10' author 'monty' ancestors ((name 'XML-Parser-monty.422' message 'added #removeAllFormattingNodes to remove formatting string nodes from a DOM tree, added error-raising #new implementations to SAXHandler and other classes that must be created with #on:, made HTTP behavior more consistent across Zinc and WebClient, changed the handling of encoding attributes so BOMs and HTTP Content-Types take precedence, refactored stream classes' id 'e64ea4a2-f21f-0d00-a74f-417401443aac' date '01/24/2018' time '09:54:28' author 'monty' ancestors ((name 'XML-Parser-monty.421' message 'changed the default encoding for HTTP entities to Latin-1 like the spec requires' id '405876df-ad18-0d00-9328-ff7b023a0d3d' date '10/24/2017' time '10:55:54' author 'monty' ancestors ((name 'XML-Parser-monty.420' message 'refactoring' id '50f107df-9518-0d00-8779-6e760abb8ae5' date '10/23/2017' time '06:17:48' author 'monty' ancestors ((name 'XML-Parser-monty.419' message 'added instance side versions of the #formatSignal* messages to XMLException and added separate messages to format the message without signaling' id '3092676e-9018-0d00-8568-75640b32aeaf' date '10/22/2017' time '11:48:23' author 'monty' ancestors ((name 'XML-Parser-monty.418' message 'fixed a WebClient decoding bug' id '0dcd9e88-5b18-0d00-b16c-24fb053f5eb9' date '10/20/2017' time '08:41:50' author 'monty' ancestors ((name 'XML-Parser-monty.417' message 'made the entity resolver decorator interface consistent with the entity resolver base class and added a #printOn: method' id '9fa790b7-4118-0d00-9a8b-52280c667d14' date '10/19/2017' time '01:53:48' author 'monty' ancestors ((name 'XML-Parser-monty.416' message 'XMLFileReferenceFileHandle fix for renaming #path: to #setPath: (thanks Doru)' id 'eef3cd77-2c18-0d00-b6a5-01eb0677ca3f' date '10/18/2017' time '12:32:44' author 'monty' ancestors ((name 'XML-Parser-TudorGirba.415' message 'use setPath: instead of path:' id '6169e94a-2418-0d00-80d7-cfdd0ffacf1b' date '10/17/2017' time '08:47:31' author 'TudorGirba' ancestors ((name 'XML-Parser-monty.414' message 'fixed http external entity decoding to assume the Content-Type charset encoding when there''s no BOM and it''s not obviously UTF-32/16 (thanks Peter B. Kenny)' id '9da45eb9-1918-0d00-a31c-0d100d18aa98' date '10/17/2017' time '02:11:00' author 'monty' ancestors ((name 'XML-Parser-monty.413' message 'refactored' id 'aa435aba-7717-0d00-825a-d3900a0833ef' date '10/09/2017' time '12:54:52' author 'monty' ancestors ((name 'XML-Parser-monty.412' message 'refactored' id '613debd5-3017-0d00-986d-e3dd0fc793c7' date '10/05/2017' time '12:20:12' author 'monty' ancestors ((name 'XML-Parser-monty.411' message 'SAXHandler now uses custom XMLAttributeDictionary subclasses of OrderPreservingStringDictionary with messages that are XML namespace and name aware, messages that modify the namespaces of an XMLElement now force-enable namespace support if it''s disabled, XMLDocument #root: only replaces the root element, the error message location info is now clearer, and fixed a bug in XMLPercentDecodingReadStreamAdapter' id '330ca433-0817-0d00-92cf-2c6e07c8de2e' date '10/03/2017' time '11:51:30' author 'monty' ancestors ((name 'XML-Parser-monty.410' message 'undeprecated some constructors for consistency' id '0580dc35-9e0d-0d00-aa3b-179a06c37527' date '06/05/2017' time '04:37:36' author 'monty' ancestors ((name 'XML-Parser-monty.409' message 'more correct entity reference checking' id 'da3ab862-510c-0d00-83dd-44940c66709f' date '05/20/2017' time '03:33:05' author 'monty' ancestors ((name 'XML-Parser-monty.408' message 'fixed comments and soft-deprecated XMLString #isString:' id 'f528e23e-110c-0d00-90e8-c0e70d6ba928' date '05/16/2017' time '11:01:46' author 'monty' ancestors ((name 'XML-Parser-monty.407' message 'added class initialization methods to reinitialize key-value caches' id 'f9dc1b9c-fb0b-0d00-abc8-e0ee02a5efd4' date '05/15/2017' time '09:13:01' author 'monty' ancestors ((name 'XML-Parser-monty.406' message 'optimized nested stream reader' id '7869c285-e90b-0d00-86d2-536d082b0860' date '05/14/2017' time '11:38:16' author 'monty' ancestors ((name 'XML-Parser-monty.405' message 'optimized character extension methods' id '611fa7fe-370b-0d00-ae63-82d30d9a8a82' date '05/06/2017' time '03:50:20' author 'monty' ancestors ((name 'XML-Parser-monty.404' message 'refactored tokenizer entity handling' id 'bc8b7309-fc0a-0d00-98a4-9e7e0caad2ff' date '05/03/2017' time '04:18:23' author 'monty' ancestors ((name 'XML-Parser-monty.403' message 'refactored and optimized encoding detection' id '181f8d40-e30a-0d00-aead-dfcb0c6da244' date '05/01/2017' time '10:44:14' author 'monty' ancestors ((name 'XML-Parser-monty.402' message 'refactored encoding detection' id '429071f7-db0a-0d00-b49b-750c0c51dcde' date '05/01/2017' time '02:02:42' author 'monty' ancestors ((name 'XML-Parser-monty.401' message 'changed the byte, null, and unicode stream converters to be immutable with single shared instances and to ignore BOMs after the input start' id 'eadea41e-d00a-0d00-8316-68e40f907e2e' date '04/30/2017' time '11:54:40' author 'monty' ancestors ((name 'XML-Parser-monty.400' message 'fixed an encoding detection bug, made decoding stricter, and optimized string and character methods' id '9e9fd721-a60a-0d00-95c8-58670d80ffe5' date '04/28/2017' time '09:49:05' author 'monty' ancestors ((name 'XML-Parser-monty.399' message 'changed the caching entity resolver to treat cached entities the same way as resolved entities in counting towards the limit so behavior is consistent regardless of the state of the entity cache or the resolver used' id 'a089992b-3b0a-0d00-8121-229a059041fc' date '04/23/2017' time '02:12:28' author 'monty' ancestors ((name 'XML-Parser-monty.398' message 'refactored' id '0656c612-d009-0d00-9539-b0680d6ab012' date '04/18/2017' time '06:26:10' author 'monty' ancestors ((name 'XML-Parser-monty.397' message 'improved comments' id '67b8232f-ba09-0d00-928b-7c150e463b84' date '04/17/2017' time '04:19:16' author 'monty' ancestors ((name 'XML-Parser-monty.396' message 'improved XMLURI>>#hash' id '39b2608e-9109-0d00-a6bf-c1460ca4ca48' date '04/15/2017' time '03:51:00' author 'monty' ancestors ((name 'XML-Parser-monty.395' message 'improved error messages' id 'c2c30609-8309-0d00-aa18-9308048b489b' date '04/14/2017' time '10:31:34' author 'monty' ancestors ((name 'XML-Parser-monty.394' message 'fixed a bug in the handling of external parameter entity refs in external declarations, better error messages, and small optimizations' id '3ffff245-6b09-0d00-933b-0c760ce041fc' date '04/13/2017' time '06:10:36' author 'monty' ancestors ((name 'XML-Parser-monty.393' message 'fixed a bug in #findElementWithID: and added #hasID:' id '8a894bf1-9607-0d00-8d46-13910df3dd26' date '03/20/2017' time '11:26:11' author 'monty' ancestors ((name 'XML-Parser-monty.392' message 'refactored inner xml parsing' id 'e70d2813-c706-0d00-93bb-d44b0e5f9c0f' date '03/10/2017' time '02:26:26' author 'monty' ancestors ((name 'XML-Parser-monty.391' message 'refactored inner xml parsing and added back outer xml methods' id '241c9017-9b06-0d00-b16a-13ea05835ad3' date '03/08/2017' time '09:58:02' author 'monty' ancestors ((name 'XML-Parser-monty.390' message 'removed broken write stream support from ordered lists' id '1f09bf47-2077-4284-82d0-12b1644a70b8' date '02/28/2017' time '01:37:51' author 'monty' ancestors ((name 'XML-Parser-monty.389' message 'added comments and made node list #reset behave more like #removeAll' id '591ccac5-29d5-4cae-8323-735363d8a494' date '02/26/2017' time '12:43:00' author 'monty' ancestors ((name 'XML-Parser-monty.388' message 'faster node list copying and enumeration and faster canonical printing' id 'cdc4c7a1-16b4-4cf2-9db2-9ea053f02116' date '02/26/2017' time '11:56:43' author 'monty' ancestors ((name 'XML-Parser-monty.387' message 'added custom faster #isEmpty for Squeak' id 'ce995c2d-9666-449b-a516-c276035d2e52' date '02/14/2017' time '01:29:49' author 'monty' ancestors ((name 'XML-Parser-monty.386' message 'added comments' id '93f91d68-3452-4c65-a5cc-b167bdebcc5f' date '02/13/2017' time '11:16:43' author 'monty' ancestors ((name 'XML-Parser-monty.385' message 'added comments and refactored' id '12275a00-5f55-4570-b3ee-f62566ee4246' date '02/12/2017' time '10:27:36' author 'monty' ancestors ((name 'XML-Parser-monty.384' message 'fixed the URI class to support multiple query values for the same key' id '8642a120-4e20-4f7a-9a26-caab3d922f26' date '02/12/2017' time '08:15:28' author 'monty' ancestors ((name 'XML-Parser-monty.383' message 'changed the node visitor accept methods to return the result of the visit message and the default visit methods to return their argument and fixed the key-value cache uses to cause less delay with multiple processes' id '429aec04-7da3-404c-ad72-8dc897f8c1fb' date '01/21/2017' time '02:40:22' author 'monty' ancestors ((name 'XML-Parser-monty.382' message 'optimizaiton and refactoring' id 'ef3521b6-7a76-4bb7-935c-b2e7ae26aac1' date '12/06/2016' time '09:36:59' author 'monty' ancestors ((name 'XML-Parser-monty.381' message 'moved #documentRoot from the XPath package and made the checking of internal subset conditional sections and markup declaration param entity refs stricter' id '28ed6b90-3275-4b69-8865-fa3ec734da8d' date '12/03/2016' time '01:24:23' author 'monty' ancestors ((name 'XML-Parser-monty.380' message 'fixed a bug in external entity handling, added full validation for standalone="yes" documents and dtd processing of attributes when validation is disabled and normalization of public IDs' id '5e5883e4-64cd-400f-b878-a953fa3fb37e' date '11/28/2016' time '02:11:50' author 'monty' ancestors ((name 'XML-Parser-monty.379' message 'improved documentation' id '7269f235-540a-4b5f-9a48-0e202f43fa74' date '10/31/2016' time '03:47:12' author 'monty' ancestors ((name 'XML-Parser-monty.378' message 'fixed a bug in the parsing of external subset attribute default value entity refs and in parser error message' id 'bcdf532e-3ee9-4375-8db5-d863e6cfeeab' date '10/31/2016' time '03:07:53' author 'monty' ancestors ((name 'XML-Parser-monty.377' message 'added well-formedness checking for element start and end tags not being in the same entity and for URI fragments in entity system IDs (the last well-formedness constraints) and optimized parsing' id 'cd961b34-0409-40e2-b890-b99cfd4a8183' date '10/30/2016' time '10:13:02' author 'monty' ancestors ((name 'XML-Parser-monty.376' message 'GS fixes' id 'aecf3e84-a542-4422-a241-445a542b94a3' date '10/20/2016' time '02:27:40' author 'monty' ancestors ((name 'XML-Parser-monty.375' message 'moved GS-specific stuff to the compatibility package' id '6a81335d-c4a2-4501-832c-1d69816116cf' date '10/19/2016' time '10:24:29' author 'monty' ancestors ((name 'XML-Parser-monty.374' message 'proper well-formedness checking of general entity and char refs after content and fixed a regression in #onFileNamed:' id '3460b8a1-938c-49ad-a49a-eb43df3e0ddc' date '10/15/2016' time '02:31:17' author 'monty' ancestors ((name 'XML-Parser-monty.373' message 'GS fixes to eliminate write conflicts' id '99e614f3-2302-4fc9-bc56-4ce86585cf83' date '10/09/2016' time '06:49:42' author 'monty' ancestors ((name 'XML-Parser-monty.372' message 'improved documentation' id '52f10367-4bcf-40ea-9a43-7dc376e8ffe3' date '10/03/2016' time '10:53:31' author 'monty' ancestors ((name 'XML-Parser-monty.371' message 'GS fix' id 'abe32a96-a4e9-443b-9def-c7654b3c1d43' date '09/28/2016' time '11:53:31' author 'monty' ancestors ((name 'XML-Parser-monty.370' message 'made the key-value cache thread safe and removed race conditions' id '7df9c143-c62b-4f03-b7b1-4e2bfd655533' date '09/28/2016' time '11:04:05' author 'monty' ancestors ((name 'XML-Parser-monty.369' message 'removed isKindOf: test' id 'baba5517-f8ea-45eb-b4a0-6604018d54d6' date '09/22/2016' time '06:32:25' author 'monty' ancestors ((name 'XML-Parser-monty.368' message 'optimized element enumeration, fixed findElementWithID: to use xml:id attributes when there''s no DTD, and improved documentation' id '59805ef1-b035-4c5b-bdb8-29d43ff280cb' date '09/22/2016' time '03:09:01' author 'monty' ancestors ((name 'XML-Parser-monty.367' message 'made XMLFileHandle behavior consistent across platforms' id 'db249369-465e-4823-af09-b6647adb4bb9' date '09/19/2016' time '01:07:46' author 'monty' ancestors ((name 'XML-Parser-monty.366' message 'small fix for Pharo 3' id '340b3f7e-923d-465b-bf4d-a11c5af0a822' date '09/12/2016' time '02:10:22' author 'monty' ancestors ((name 'XML-Parser-monty.365' message 'fixed support for custom attribute list classes' id '287929ff-b17a-4c6d-b0cf-3a0ee39cf9e8' date '09/08/2016' time '12:05:32' author 'monty' ancestors ((name 'XML-Parser-monty.364' message 'split XMLAttributeList into caching and non-caching versions, made optimizeForLargeDocuments use the non-caching one to save memory, added support for adding nodes with parents to other nodes' id '4cc6213f-3b55-4318-a5ee-3b05a3363883' date '09/06/2016' time '02:19:35' author 'monty' ancestors ((name 'XML-Parser-monty.363' message 'added namespace optimization, improved documentation and error messages' id '3932c304-6f8c-4dd2-a73d-0d51b1fb9437' date '08/26/2016' time '03:44:40' author 'monty' ancestors ((name 'XML-Parser-monty.362' message 'moved SAX2ElementHandler #elementHandlerFactory accessor to instance side, added ancestor enumeration and accessor messages and replaced #isHandlingRootElement with #hasParent, added support for block values in attribute specs, soft-deprecated #contentString:' id 'cba53274-febd-4a35-8ee9-8f3a2fc344ad' date '08/20/2016' time '02:47:26' author 'monty' ancestors ((name 'XML-Parser-monty.361' message 'added SAX2ElementParser to parse each element with separate SAX2ElementHandlers and factories to control element handler construction (one is pluggable like XMLPluggableElementFactory), changed automatic decoding to be less aggressive (see the decodesCharacters: comment), added XMLNodeVisitor to support the visitor pattern, added newElementNamed:attributes:, newElementNamed:namespaceURI:attributes:, newPITarget:data:, newStringNode:, addComment:, addPITarget:data:, addElement:attributes:, addElement:namespaceURI:attributes:, and soft-deprecated addContent:, asXMLString, newString, and stringClass for addString:, asXMLStringNode, newStringNode:, and stringNodeClass' id 'b84ac08f-68e3-4cb1-8603-816a679c8007' date '08/17/2016' time '02:16:10' author 'monty' ancestors ((name 'XML-Parser-monty.360' message 'improved error messages for external entity refs when resolution is disabled' id '0978caa4-5612-4ed7-a770-d6161c23ae1e' date '07/18/2016' time '08:29:50' author 'monty' ancestors ((name 'XML-Parser-monty.359' message 'improved error messages' id '8663d8a1-ebd8-4943-8f53-242c1b02d961' date '07/17/2016' time '04:44:00' author 'monty' ancestors ((name 'XML-Parser-monty.358' message 'small attribute parsing optimization, stricter validation of unparsed entities and notation attributes, improved comments' id 'baba3f59-4b46-4601-ac92-0fe0b1bcea20' date '07/13/2016' time '03:10:32' author 'monty' ancestors ((name 'XML-Parser-monty.357' message 'renamed SAX2 handlers' id '4ce86b43-ca56-4a29-8743-fc3866fdbce5' date '07/10/2016' time '02:45:12' author 'monty' ancestors ((name 'XML-Parser-monty.356' message 'optimized namespace and reserved attribute processing' id '03227083-f844-465b-aeeb-7f866ed21cb8' date '07/09/2016' time '11:24:57' author 'monty' ancestors ((name 'XML-Parser-monty.355' message 'added a SAX2 style parser, printToFileNamed:beforeWritingDo:, updated file writing methods to use the correct linebreak for the OS, fixed bugs in XMLFileHandle>>extension and the validation of char refs in "element content" elements and the checking for invalid chars in entity values' id '9fe7e0af-c085-4427-90fd-d8f39dffa272' date '07/08/2016' time '03:07:29' author 'monty' ancestors ((name 'XML-Parser-monty.354' message 'changed handling of ignorable whitespaces to require a DTD with element declarations to correctly identify it (this is how other parsers work and is safer), added validation support for xmlns attributes (including default values) and fixed empty element validation to reject any content at all (even comments and whitespace), optimized ordered list enumeration methods, and added many method comments' id 'feb5fd7d-7511-4f78-895e-473f9775e342' date '04/21/2016' time '08:20:28' author 'monty' ancestors ((name 'XML-Parser-monty.353' message 'added lazy resolution of external entities, validity checking of PE nesting and well-formedness checking of general entity nesting, validity checking of default attribute values, and improved notation validation' id '4ee4299c-ef6a-46a4-b752-b3618000f2f6' date '04/11/2016' time '05:35:44' author 'monty' ancestors ((name 'XML-Parser-monty.352' message 'URIs now properly delay percent encoding/decoding until aboslutely necessary, improved xml:base handling with automatic expansion of xml:base attributes using inherited base URIs, fixed XMLOrderedList hash/= to not depend on the internal collection type, refactored the content model parser, made error messages more descriptive' id 'bda8261a-b23f-450b-b9f8-15f74191d41b' date '04/02/2016' time '02:18:00' author 'monty' ancestors ((name 'XML-Parser-monty.351' message 'GS fixes' id '7c9865c2-17f7-46d8-8c37-ecd7c76fdc0c' date '03/26/2016' time '01:51:14' author 'monty' ancestors ((name 'XML-Parser-monty.350' message 'added checking for invalid chars, refactored, and optimized' id '975af2de-82dd-48cb-9611-43043eeda577' date '03/26/2016' time '01:13:04' author 'monty' ancestors ((name 'XML-Parser-monty.349' message 'added a pluggable entity resolver and fixed a bug in handling of include/ignore sections and parameter entity refs in declarations in internal subsets' id 'd094da71-5c97-4525-b2ff-3e727c2b3aa0' date '03/23/2016' time '01:10:13' author 'monty' ancestors ((name 'XML-Parser-monty.348' message 'improved well-formedness checking for redundant element declarations and bad entity values and changed the entity resolution messages to accept public id info also' id '0b9ada7d-5e8f-4cab-a1af-4066b85d4f07' date '03/21/2016' time '05:22:13' author 'monty' ancestors ((name 'XML-Parser-monty.347' message 'refactoring' id '2ade2ca0-0c33-42bd-afe5-7dee36676a5b' date '03/19/2016' time '07:12:04' author 'monty' ancestors ((name 'XML-Parser-monty.346' message 'refactoring and optimization' id '63844550-36b1-4b07-a6df-489b2a830d4c' date '03/19/2016' time '07:10:32' author 'monty' ancestors ((name 'XML-Parser-monty.345' message 'fixed stream nesting and upTo: bugs, refactored tokenizer character set initialization methods, added column numbers to error messages and small optimizations' id 'eeec565b-ab8e-420a-94c1-8ce075ee61f3' date '03/19/2016' time '12:24:49' author 'monty' ancestors ((name 'XML-Parser-monty.344' message 'refactoring' id 'd686435d-28b3-4237-add9-8e548cde02bc' date '03/15/2016' time '12:30:18' author 'monty' ancestors ((name 'XML-Parser-monty.343' message 'refactoring' id '02c396e6-eb7a-4a1a-84a4-84df9def22d1' date '03/14/2016' time '09:14:02' author 'monty' ancestors ((name 'XML-Parser-monty.342' message 'worked around a Squeak bug to support relative paths, better well-formedness checking for XML declarations, refactored the XMLFileHandle and XMLHTTPRequest hierarchies, added rawReadStream, rawWriteStream, exists, and isXMLDocumentFile to XMLFileHandle, added many method comments' id 'ed12cfa1-acd7-40b7-915f-c915fa367d2e' date '03/14/2016' time '01:30:20' author 'monty' ancestors ((name 'XML-Parser-monty.341' message 'improved  well-formedness checking by disallowing duplicate attributes and namespace declarations in elements, incomplete documents, and cdata terminators in pcdata' id 'c64fa879-46a0-406a-bd66-30eefc63ef2f' date '03/10/2016' time '03:28:26' author 'monty' ancestors ((name 'XML-Parser-monty.340' message 'empty log message' id '63207dd0-35ae-4133-a30b-9a57faa3b83d' date '03/06/2016' time '10:29:55' author 'monty' ancestors ((name 'XML-Parser-monty.339' message 'refactored the stream converters and the abstract factory hierarchy, added asXMLStreamConverter, hasEncoding, and hasRoot, changed root: to raise an error if it''s given a non-element' id 'efe29f91-fafa-471a-95bd-c289bdec3e75' date '03/06/2016' time '09:59:07' author 'monty' ancestors ((name 'XML-Parser-monty.338' message 'spelling fixes' id 'f3726698-4fc7-4776-a6c4-57b3ba6efa6b' date '03/02/2016' time '07:19:28' author 'monty' ancestors ((name 'XML-Parser-monty.337' message 'added element declaredPrefixes, undeclarePrefixes, resolvePrefix:ifUnresolvable:, resolvePrefixesOfNamespaceURI:, and the more common "descendant" spellings of the descendent* methods' id '2182ffdc-9890-4e31-8c1e-e26e9c768ab9' date '03/02/2016' time '07:17:03' author 'monty' ancestors ((name 'XML-Parser-monty.336' message 'refactored attribute defualt validators, fixed bug in empty attr validation, added comments' id '34add894-c0af-420b-88f2-2c62fed3e430' date '02/20/2016' time '02:26:22' author 'monty' ancestors ((name 'XML-Parser-monty.335' message 'removed unneeded xmlParserAtBeginning' id '0c4a8380-57ef-4f81-bde1-22478790941b' date '02/18/2016' time '04:51:50' author 'monty' ancestors ((name 'XML-Parser-monty.334' message 'refactored printing and stream converters' id '74c51aa5-6ef7-4b38-8e80-e503643b6ff4' date '02/18/2016' time '04:14:36' author 'monty' ancestors ((name 'XML-Parser-monty.333' message 'gs fix' id 'eccb0c16-1145-4886-8083-3598aa03d6d7' date '02/17/2016' time '12:55:48' author 'monty' ancestors ((name 'XML-Parser-monty.332' message 'refactored namespace scope and key-value cache' id 'c5393d97-d6a2-4307-9ad0-012227fc58f9' date '02/17/2016' time '12:42:16' author 'monty' ancestors ((name 'XML-Parser-monty.331' message 'added encoding support and file writing to DOM nodes' id 'd310095d-c774-441b-9edc-64d2ed67a627' date '02/14/2016' time '04:36:24' author 'monty' ancestors ((name 'XML-Parser-monty.330' message 'refactored encoding detection and removed unneeded URI optimization' id 'a8288b0c-e7cd-47da-b903-be8fc3768ed3' date '01/20/2016' time '10:03:38' author 'monty' ancestors ((name 'XML-Parser-monty.329' message 'added URI isEmpty optimization' id '5294ebef-3b36-49aa-b813-d6f6f880237f' date '01/15/2016' time '01:47:40' author 'monty' ancestors ((name 'XML-Parser-monty.328' message 'added URI copyWithPath: and smarter printing' id 'b4a2f9f5-97dc-4433-af81-53874084e713' date '01/13/2016' time '10:49:44' author 'monty' ancestors ((name 'XML-Parser-monty.327' message 'faster URI parsing and URI printing fix for GemStone' id 'b8817a4a-0404-4575-9dbb-d6aa3c73d540' date '01/11/2016' time '03:56:13' author 'monty' ancestors ((name 'XML-Parser-monty.326' message 'XMLURI now has a dictionary protocol for queries, copy messages to change componenets, does percent encoding/decoding implicitly, and parses source strings lazily only when needed' id '10b81dd1-eac3-438b-b2d9-f02cf35d04f2' date '01/08/2016' time '12:52:26' author 'monty' ancestors ((name 'XML-Parser-monty.325' message 'added comments, findElementWithID:, and changed includesSubstring: to return true for empty strings' id 'c42bdf40-264e-42cf-b414-a5f9c6e7007f' date '12/09/2015' time '11:00:59' author 'monty' ancestors ((name 'XML-Parser-monty.324' message 'improved error messages and fixed so character refs are preserved exactly (not converted to decimal) when entity replacing is disabled' id 'be1fc300-d0da-416f-8f48-01be590df94a' date '12/04/2015' time '09:15:46' author 'monty' ancestors ((name 'XML-Parser-monty.323' message 'added basic checking for non-deterministic content models, removed obsolete methods' id '9538335c-c0d8-457c-96ab-1cce20281a20' date '11/14/2015' time '10:59:55' author 'monty' ancestors ((name 'XML-Parser-monty.322' message 'renaming' id '5000a4cb-83b1-491c-8af0-f5234addabf6' date '09/21/2015' time '05:05:38' author 'monty' ancestors ((name 'XML-Parser-monty.321' message 'fixed history' id 'caad1245-ab73-4b94-9895-dacdfe3363db' date '08/13/2015' time '12:05:40' author 'monty' ancestors ((name 'XML-Parser-monty.320' message 'fixes for spur' id '4545a3ec-ef4d-41a2-b7a2-c1c7f0950532' date '08/12/2015' time '09:20:23' author 'monty' ancestors ((name 'XML-Parser-monty.319' message 'changed addElementNamed: to try to infer the namespace and pass it to the factory' id '7b734fe9-2a6b-4b10-b24d-724eb0310b8b' date '07/21/2015' time '10:39:52' author 'monty' ancestors ((name 'XML-Parser-monty.318' message 'refactored and fixed bug in factory copying' id '21768d21-8b4a-4d41-9862-61239a7dba5a' date '07/15/2015' time '10:39:10' author 'monty' ancestors ((name 'XML-Parser-monty.317' message 'removed outer XML methods' id '64255ca8-5557-4fe1-a414-a49cc27737e1' date '06/22/2015' time '05:02:39' author 'monty' ancestors ((name 'XML-Parser-monty.316' message 'configs are now copyable and are copied when nodes are. small optimization' id 'f9cabe2c-6eb4-4559-8b57-cf17082cd907' date '06/21/2015' time '02:46:55' author 'monty' ancestors ((name 'XML-Parser-monty.315' message 'changed to delay validation of unparsed entity ndata until referenced' id '817b622c-cf6a-4a0e-9a17-1b1c3eda9cc9' date '06/18/2015' time '01:06:09' author 'monty' ancestors ((name 'XML-Parser-monty.314' message 'updated comments' id '1b63b3c2-570e-4f0e-b29d-122a1067477b' date '06/16/2015' time '02:47:16' author 'monty' ancestors ((name 'XML-Parser-monty.313' message 'parameter renaming' id 'ca8502c0-1eda-4379-b9a8-8d5ed614b7d6' date '06/07/2015' time '11:33:58' author 'monty' ancestors ((name 'XML-Parser-monty.312' message 'improved entity resolving to support streaming entities and delaying decoding of HTTP entities' id '53f1a794-3988-485a-ad36-f47ff20424c0' date '05/26/2015' time '02:17:15' author 'monty' ancestors ((name 'XML-Parser-monty.311' message 'faster element printing, added hasDoctypeDefinition, hasDoctypeDeclaration, and innerXMLPrettyPrinted, made innerXML: to handle entities' id '04bae03e-8aa4-4a6a-a656-edec4b6c6587' date '05/10/2015' time '06:30:19' author 'monty' ancestors ((name 'XML-Parser-monty.310' message 'added ability to disable character decoding' id '0e1a9575-7089-468b-90b7-814cf2d791c7' date '05/08/2015' time '10:41:00' author 'monty' ancestors ((name 'XML-Parser-monty.309' message 'added outerXML methods' id 'c8f0844f-417f-4a6a-b2f0-a32d5db52d6d' date '05/08/2015' time '05:37:19' author 'monty' ancestors ((name 'XML-Parser-monty.308' message 'made innerXML: reset on errors' id 'ae95f187-b70a-4a55-8083-dca07fa28871' date '05/07/2015' time '11:07:52' author 'monty' ancestors ((name 'XML-Parser-monty.307' message 'refactored writing' id 'c8b1d042-f367-4713-aabe-2f889e1048bf' date '05/07/2015' time '07:16:57' author 'monty' ancestors ((name 'XML-Parser-monty.306' message 'added encoding detection for external subsets. small optimization.' id 'f8ed7b4c-c314-4364-9103-30662bff6ce1' date '05/03/2015' time '07:42:12' author 'monty' ancestors ((name 'XML-Parser-monty.305' message 'added comments' id '476eaa7a-a199-46cb-a5e4-199dd2d77918' date '04/28/2015' time '07:03:20' author 'monty' ancestors ((name 'XML-Parser-monty.304' message 'added more diagnostic printOn: methods and refactored' id '029e8362-510c-4f28-97c4-9d6da9b1cdbc' date '04/27/2015' time '12:18:43' author 'monty' ancestors ((name 'XML-Parser-monty.303' message 'more efficient <![INCLUDE[]]> sections' id '9fa5d92b-43af-456f-b9f3-a0b3a2686fd8' date '04/23/2015' time '08:51:18' author 'monty' ancestors ((name 'XML-Parser-monty.302' message 'fixed WebClient support for Squeak, added more printOn: methods, refactored DFA/NFA classes' id '37225f1d-6dae-4d2c-b0a0-3545eab1deab' date '04/22/2015' time '03:43:19' author 'monty' ancestors ((name 'XML-Parser-monty.301' message 'added comments and removed obsolete method' id '8761441b-fcab-457e-806b-cefbd2b67b5b' date '04/21/2015' time '01:26:40' author 'monty' ancestors ((name 'XML-Parser-monty.300' message 'moved nodeListClass state to node factories but is still accessable from configurations, optimizations, and cleanup' id '9df64572-5de5-4914-8304-cc6eba8c1789' date '04/18/2015' time '10:00:51' author 'monty' ancestors ((name 'XML-Parser-monty.299' message 'refactoring' id '96d56728-c990-414e-86e8-5aee28ef01d7' date '04/16/2015' time '01:14:17' author 'monty' ancestors ((name 'XML-Parser-monty.298' message 'fixed history' id '73bb506e-9cf3-42ef-9c4c-6bd2757a9534' date '04/15/2015' time '03:05:35' author 'monty' ancestors ((name 'XML-Parser-monty.296' message 'refactoring' id '6a48ac08-b1d4-46ea-84be-05a12f90de2a' date '04/13/2015' time '03:30:55' author 'monty' ancestors ((name 'XML-Parser-monty.295' message 'ordered list equality no longer depends on internal collection type' id '1ae32d43-5917-4737-936a-2c00426924d0' date '04/11/2015' time '08:03:55' author 'monty' ancestors ((name 'XML-Parser-monty.294' message 'added WebClient HTTP request class, made doctypeDeclaration: set parent of argument, added comments, fixed typos' id '620adc3f-1b3a-4593-b1c0-cea16b871cc5' date '04/11/2015' time '03:18:28' author 'monty' ancestors ((name 'XML-Parser-monty.293' message 'added Character class-extension methods for separators and whitespace' id 'a9a312e0-8bbe-43a9-b5c6-493413f88dd1' date '04/07/2015' time '09:31:38' author 'monty' ancestors ((name 'XML-Parser-monty.292' message 'added constructor method comments and replaced initialization method from on:documentURI: to on: and separate documentURI: setter' id '012667ef-20a7-4d5a-9e30-59b888128186' date '04/07/2015' time '06:11:15' author 'monty' ancestors ((name 'XML-Parser-monty.291' message 'fixed bug in new DOM validate method' id '1d0f2d66-e423-456d-bfff-5164d3945fcf' date '04/07/2015' time '12:14:05' author 'monty' ancestors ((name 'XML-Parser-monty.290' message 'small compatibility fix' id 'f65e0b37-15f0-47ae-93d5-f55534471f15' date '04/06/2015' time '10:50:39' author 'monty' ancestors ((name 'XML-Parser-monty.289' message 'fix for Gemstone' id '36e59c29-3414-4f80-aff1-10ac54b61d1c' date '04/06/2015' time '10:27:51' author 'monty' ancestors ((name 'XML-Parser-monty.288' message 'stricter parsing, optional validation of DOM trees, and small optimization' id '42ea3e35-7977-478e-aa27-92e8c257055a' date '04/06/2015' time '09:31:17' author 'monty' ancestors ((name 'XML-Parser-monty.287' message 'stricter parsing' id '4d4fec85-e40d-4d85-8b2e-d52176a6d509' date '04/03/2015' time '04:45:41' author 'monty' ancestors ((name 'XML-Parser-monty.286' message 'fixed bug in DOM configuration method' id 'aded255e-4ed8-416e-a67a-18179858e8aa' date '04/01/2015' time '07:12:51' author 'monty' ancestors ((name 'XML-Parser-monty.285' message 'better error reporting' id '03abf8fb-5523-4f0a-a0fa-f13300d80d6b' date '03/25/2015' time '06:29:51' author 'monty' ancestors ((name 'XML-Parser-monty.284' message 'replaced isInInternalSubset with more useful isInContent' id '076923ad-6fd8-408d-9969-920f7ba78a24' date '03/24/2015' time '08:55:39' author 'monty' ancestors ((name 'XML-Parser-monty.283' message 'refactoring' id '6c9a169f-9810-449a-b907-1296b38757ed' date '03/24/2015' time '08:03:20' author 'monty' ancestors ((name 'XML-Parser-monty.282' message 'added root: document constructor and added comments' id '6dea450f-f3be-44bb-baf9-380f0544e196' date '03/24/2015' time '06:42:12' author 'monty' ancestors ((name 'XML-Parser-monty.281' message 'refactoring' id '31fe91de-1817-43ed-acc5-7778c9434dc8' date '03/22/2015' time '05:40:29' author 'monty' ancestors ((name 'XML-Parser-monty.280' message 'refactoring' id '3bb99748-2015-4fb7-9ef6-95487b3b51f9' date '03/22/2015' time '05:59:53' author 'monty' ancestors ((name 'XML-Parser-monty.279' message 'refactored configuration' id '3eee9380-fd96-48c7-9d25-d6681b82888e' date '03/17/2015' time '06:48:52' author 'monty' ancestors ((name 'XML-Parser-monty.278' message 'optimization' id '709709e5-f241-4330-afdd-dd001079e9e6' date '03/13/2015' time '08:45:59' author 'monty' ancestors ((name 'XML-Parser-monty.277' message 'better error reporting' id '05a5a33b-0117-4f3f-b9bc-07fd4de202d8' date '03/12/2015' time '06:34:51' author 'monty' ancestors ((name 'XML-Parser-monty.276' message 'added doctype definition access to document nodes' id '3d77a89f-d05c-41b1-ad3b-9d32d5b392b9' date '03/09/2015' time '07:15:29' author 'monty' ancestors ((name 'XML-Parser-monty.275' message 'refactoring' id '48b0fe54-4b06-4c71-abdb-eef81c7939ab' date '03/02/2015' time '01:14:15' author 'monty' ancestors ((name 'XML-Parser-monty.274' message 'added hasNamespaceURI and recategorized messages' id '7fb85c1a-6bde-4c02-9b8b-57c063473a0b' date '02/13/2015' time '10:22:02' author 'monty' ancestors ((name 'XML-Parser-monty.273' message 'added swap:with: and improved URI class' id 'ceb13bf4-f57c-466a-847c-6c13f06a8a4e' date '02/09/2015' time '07:29:23' author 'monty' ancestors ((name 'XML-Parser-monty.272' message 'added isAttribute and refactored limits and encoding detection' id '14fd5fd3-0d89-4ead-bc24-41efd807a6ea' date '01/30/2015' time '08:37:59' author 'monty' ancestors ((name 'XML-Parser-monty.271' message 'refactored lists and fixed bug in attribute list' id '3d73733c-6545-41fc-8be3-3886d8b7b744' date '01/21/2015' time '04:10:15' author 'monty' ancestors ((name 'XML-Parser-monty.270' message 'refactored list classes' id '171564eb-44d8-45dd-b2df-d45d9608eb11' date '01/18/2015' time '06:37:13' author 'monty' ancestors ((name 'XML-Parser-monty.269' message 'minor changes to class initialization methods' id '489ffc9e-5a66-48f8-8503-57d2d220391d' date '01/12/2015' time '12:57:16' author 'monty' ancestors ((name 'XML-Parser-monty.268' message 'added ability to disable content general entity and character reference replacement, ignorable whitespace preservation for DOM parsing, and 2x faster printing for elements' id '8d3fbdb9-9c61-412c-98e2-2f3ac1ce1b29' date '01/07/2015' time '03:52:58' author 'monty' ancestors ((name 'XML-Parser-monty.267' message 'empty log message' id 'f277f9a9-cdf0-4bfe-879e-659ebc22e38c' date '01/02/2015' time '12:01:38' author 'monty' ancestors ((name 'XML-Parser-monty.266' message 'fixed to not use argument directly when setting namespaces from dictionary' id '04fc0b31-14fa-47ff-ac6d-b4b6a9473601' date '12/29/2014' time '09:02:54' author 'monty' ancestors ((name 'XML-Parser-monty.265' message 'added copy-on-write semantics for namespace scopes for performance' id 'f5e49b0f-dde6-4f99-9517-a6999ca80802' date '12/29/2014' time '01:17:17' author 'monty' ancestors ((name 'XML-Parser-monty.264' message 'added xml:lang testing for nodes and better xml:id and xml:space validation' id 'cfaca18d-5013-4803-9449-c4e37648495d' date '12/23/2014' time '09:22:33' author 'monty' ancestors ((name 'XML-Parser-monty.263' message 'more gemstone file compatibility fixes' id '9c541b29-e95d-4cec-9eac-65596115846f' date '12/18/2014' time '07:27:00' author 'monty' ancestors ((name 'XML-Parser-monty.262' message 'refactored HTTP code and fixed for gemstone' id '2b8a60ca-b08f-4d99-9292-6186f3c5e061' date '12/16/2014' time '08:37:21' author 'monty' ancestors ((name 'XML-Parser-monty.261' message 'fixed file handling for gemstone' id '13c3affa-d5f9-4320-9be8-70ec3c4e890b' date '12/16/2014' time '03:59:19' author 'monty' ancestors ((name 'XML-Parser-monty.260' message 'allow XMLOrderedList at:put: to function like addLast:' id '7e40d6d7-0f5d-4fdd-af0e-4c67c5cee1ed' date '12/16/2014' time '11:52:50' author 'monty' ancestors ((name 'XML-Parser-monty.259' message 'improved portability' id 'b73e7a8f-53a4-458e-8e4f-98713fd5c279' date '12/14/2014' time '10:40:47' author 'monty' ancestors ((name 'XML-Parser-monty.258' message 'refactored tokenizer' id 'b1fb42b1-bd98-4a57-91ec-708c22dac124' date '12/12/2014' time '08:50:55' author 'monty' ancestors ((name 'XML-Parser-monty.257' message 'renaming' id '44d9b558-1454-434e-ab21-838379a2b420' date '12/11/2014' time '10:38:55' author 'monty' ancestors ((name 'XML-Parser-monty.256' message 'stricter parsing, can now handle binary streams, added defaultReadLimit: to persistently set or disable read limits' id 'bd099803-2880-45ea-9f43-6399681719c9' date '12/11/2014' time '10:26:37' author 'monty' ancestors ((name 'XML-Parser-monty.255' message 'added canonicallyEquals:, moved redundant xmlns write testing to XMLWriter, refactored sorting' id 'f9a0d117-4408-40f2-b630-81cf9fa1fb09' date '12/06/2014' time '05:16:14' author 'monty' ancestors ((name 'XML-Parser-monty.254' message 'made escaping more strict' id 'fe1c778f-55a4-4c93-9246-cb2535fca805' date '12/02/2014' time '06:09:31' author 'monty' ancestors ((name 'XML-Parser-monty.253' message 'refactored encoding detection and refactored entity replacement to fix bug' id '24a64691-4dfe-47ff-80fa-0c2d87a2f25e' date '11/28/2014' time '11:31:48' author 'monty' ancestors ((name 'XML-Parser-monty.252' message 'added parseDocumentUntil: and attributeNodesDo:' id '3388eeef-51d9-4004-8f64-9f852b860c65' date '11/26/2014' time '10:20:57' author 'monty' ancestors ((name 'XML-Parser-monty.251' message 'added interruptParsing and minor optimization' id 'b067421b-8f93-4bad-ad13-760063f2ee43' date '11/26/2014' time '07:47:04' author 'monty' ancestors ((name 'XML-Parser-monty.250' message 'fixed exception handling bug' id 'c2ba5259-303f-4b36-8834-ebf17f9327d5' date '11/24/2014' time '09:56:23' author 'monty' ancestors ((name 'XML-Parser-monty.249' message 'added attribute removal methods and refactored postcopy methods' id '030c59b0-bd98-459a-a315-7ff914ec3962' date '11/23/2014' time '05:12:02' author 'monty' ancestors ((name 'XML-Parser-monty.248' message 'updated for order preserving dictionary changes' id '3e82addc-7178-4e8c-8c64-0c9094e921c0' date '11/22/2014' time '01:13:22' author 'monty' ancestors ((name 'XML-Parser-monty.247' message 'added support for UTF-32 (big/little endian) and automatic encoding detection and decoding for streams, fixed a bug in exception raising, reduced memory requirements by removing XMLNodeName and moving its functionality to String extension methods, added nodeAt:, nodeAt:ifAbsent:, nodeAt:put:, removeNode:ifAbsent:
' id 'afe9e731-a11b-4555-a135-a5979c50f843' date '11/20/2014' time '04:26:32' author 'monty' ancestors ((name 'XML-Parser-monty.246' message 'added text converter factory' id '73afae5d-15e1-4194-b680-74cbd698acbd' date '11/07/2014' time '07:22:35' author 'monty' ancestors ((name 'XML-Parser-monty.245' message 'added descendentNode/Element enumeration methods' id '13f2b1d2-ac4d-48c6-8191-e178e41b4891' date '11/07/2014' time '02:20:18' author 'monty' ancestors ((name 'XML-Parser-monty.244' message 'improved string node API, fixed bug in innerXML: handling, improved factory api, refactored error handling, stricter validation, proper validation of reserved attributes' id '45f50609-e6d2-485e-ad75-41827d65250b' date '11/06/2014' time '06:38:36' author 'monty' ancestors ((name 'XML-Parser-monty.243' message 'added copying to DOM nodes, removed inst var from XMLElement, every node responds to #document, changed XMLOrderedList subclasses return from copy/select methods lists of same subclass and only lists of the species for collecting methods' id '35fe3ae6-f14c-466d-991e-78a18a154d27' date '10/29/2014' time '02:36:13' author 'monty' ancestors ((name 'XML-Parser-monty.242' message 'added ancestors/ancestorsDo:' id '439d9f43-828a-4a19-9a17-c75f81dfd5b9' date '10/27/2014' time '03:39:59' author 'monty' ancestors ((name 'XML-Parser-monty.241' message 'changed addElement to accepts strings, added elementNames, fixed incompatibities with squeak' id 'f1cf9b21-e827-4e75-ac57-d40c318fc63e' date '10/26/2014' time '03:09:29' author 'monty' ancestors ((name 'XML-Parser-monty.240' message 'changed XMLOrderedList to be Collection subclass instead of Sequenceable, fixed digit reading bug, improved validation performance, added FileDirectory file handle class' id '963c36a5-e4ea-4c2b-8d1a-73b3d9ddf192' date '10/24/2014' time '04:07:11' author 'monty' ancestors ((name 'XML-Parser-monty.239' message 'empty log message' id '744406c1-5ed2-4904-a783-bce794b60f3a' date '10/22/2014' time '11:56:54' author 'monty' ancestors ((name 'XML-Parser-monty.238' message 'added sortability to node lists' id 'ca94d544-677c-449c-bd09-af848a869c0b' date '10/19/2014' time '09:42:45' author 'monty' ancestors ((name 'XML-Parser-monty.237' message 'removed XMLNotifier for performance and added String>>parseXML' id 'd6a8863a-5dce-4b4e-8a8b-e203ab219c24' date '10/18/2014' time '06:55:44' author 'monty' ancestors ((name 'XML-Parser-monty.236' message 'removed observing from XMLNodeName for performance' id '9ecd4a22-f713-4027-946c-12b946c61ff0' date '10/14/2014' time '11:33:07' author 'monty' ancestors ((name 'XML-Parser-monty.235' message 'removed instance variable from XMLNamespaceScope, added print messages to XMLNode to print without self-closed tags and simplified other print messages' id '52878ebb-5975-46dd-94b1-ab7e4c09c003' date '10/13/2014' time '02:12:29' author 'monty' ancestors ((name 'XML-Parser-monty.234' message 'extracted HTML and improved namespace checking' id '4f5312f4-a22c-4eaf-a2c2-811a07e3f771' date '10/09/2014' time '09:26:25' author 'monty' ancestors ((name 'XML-Parser-monty.233' message 'better namespace checking' id 'e41bb20a-75b5-43a8-98d0-95e985e423fb' date '10/09/2014' time '01:24:39' author 'monty' ancestors ((name 'XML-Parser-monty.232' message 'commented every class, removed deprecated constructors, simplified some accessors' id 'f025744e-f13d-467d-ae9d-663385bca489' date '10/07/2014' time '05:52:55' author 'monty' ancestors ((name 'XML-Parser-monty.231' message 'added comments for configuring input limits, increased default read limits, and removed a variable from XMLNodeName' id '64c62720-b90a-4be2-85b2-fd428e42b2bc' date '10/04/2014' time '02:13:43' author 'monty' ancestors ((name 'XML-Parser-monty.230' message 'small refactoring' id 'c9ef1929-bea0-40cd-844b-08951750a734' date '10/01/2014' time '06:04:33' author 'monty' ancestors ((name 'XML-Parser-monty.229' message 'Fixed a bug in concatenation of XMLOrderedLists (thanks Ben Coman)' id '18e469d5-4526-4135-b12c-88b10095d577' date '09/29/2014' time '12:54:41' author 'monty' ancestors ((name 'XML-Parser-monty.228' message 'faster element printing' id 'c2fed897-c8f4-4e0a-9573-303d2c9d2e7a' date '02/20/2014' time '04:01:08' author 'monty' ancestors ((name 'XML-Parser-monty.227' message 'changed so input streams are closed after parsing ends, even on an error.(thanks paolo bernadi)' id '0ad96f2e-d1ee-46a2-90d1-04b05a3af174' date '02/18/2014' time '03:17:28' author 'monty' ancestors ((name 'XML-Parser-monty.226' message 'refactored HTML parsing to handle implicit start tags and made HTML parsing 15% faster, and also sped up some DOM methods.' id 'd2dd29a3-93b6-4b62-b8fa-d1f460a0b2d8' date '02/15/2014' time '04:02:36' author 'monty' ancestors ((name 'XML-Parser-monty.225' message 'refactored and made so CDATA do not have to merge with strings, and ";" is optional for HTML entities.' id 'eacd426d-0918-4473-b56b-336fb7784c0e' date '02/11/2014' time '02:40:39' author 'monty' ancestors ((name 'XML-Parser-monty.224' message 'refactored namespace code and removed an instance variable in XMLAttribute.' id '00d270a0-6712-479d-af02-f51e2dd8e0bb' date '02/08/2014' time '03:17:26' author 'monty' ancestors ((name 'XML-Parser-monty.223' message 'refactored HTML nesting and slight optimization.' id '882f6d7e-7c87-4081-9a58-5e240f0bb706' date '02/06/2014' time '08:11:47' author 'monty' ancestors ((name 'XML-Parser-monty.222' message 'made handling of invalid HTML entities and character refs more consistent (they are left intact) and more small optimizations.' id '0baf8a7f-c34d-4439-a8c8-e4a60b895c94' date '02/04/2014' time '02:59:29' author 'monty' ancestors ((name 'XML-Parser-monty.221' message '30-40% faster DOM parsing through removing the XMLNestedStreamWriter, adding separate methods to read pcdata, attribute values, and entity values, refactoring XMLNamespaceScope, and much inlining.' id '507bae25-838e-4a36-9aa7-0a7bf0b2451b' date '02/03/2014' time '01:23:17' author 'monty' ancestors ((name 'XML-Parser-monty.220' message 'Added limit for parseURL:/onURL:' id 'f020eb8c-fcea-44ab-972e-d5819491c152' date '01/26/2014' time '04:33:24' author 'monty' ancestors ((name 'XML-Parser-monty.219' message 'External entity resolving is disabled by default now, and configurable limits are placed on parser input for security, so you will get XMLLimit exceptions when parsing very large documents, external entities (if enabled), or too many levels of entity replacement. Use "documentReadLimit: nil" to disable (or change) the document input limit, or removeLimits to disable all limits.' id 'bb781799-fbcf-42d6-940a-13e80c5d959d' date '01/25/2014' time '05:06:44' author 'monty' ancestors ((name 'XML-Parser-monty.218' message 'Made local from non-local URI resolution limit removable' id '5e483d6f-6068-4683-a795-51da7a9c07e1' date '01/24/2014' time '11:39:55' author 'monty' ancestors ((name 'XML-Parser-monty.217' message 'Implemented the xml:id and xml:base specs, added proper xml:space handling, %xx unescaping in URI paths, replaced usages of CharacterSet with BitmapCharacterSet, changed handling of exceptions to make debugging easier' id '97dc0d19-9dc9-4810-921c-b726196dcb21' date '01/24/2014' time '01:31:58' author 'monty' ancestors ((name 'XML-Parser-monty.216' message 'Made caching of HTTP entities default behavior, added a custom URI class to handle URI parsing/combining correctly, and replaced the file/http IO APIs with file handle/http request APIs that integrate with the URI class.' id '046f070c-f39a-412d-bbdd-28bc637f6808' date '01/13/2014' time '10:10:34' author 'monty' ancestors ((name 'XML-Parser-monty.215' message 'Reverted change in nmtoken parsing' id '851612e4-0a01-46bf-82fe-49492552c672' date '01/05/2014' time '01:13:36' author 'monty' ancestors ((name 'XML-Parser-monty.214' message 'Refactoring.' id 'b75fd5a5-8908-4675-a3f0-6039c4a73ed4' date '01/05/2014' time '01:10:44' author 'monty' ancestors ((name 'XML-Parser-monty.213' message 'Stricter xml decl parsing.' id 'cf684c3e-ed28-4dff-b881-95194286cdef' date '01/04/2014' time '08:18:52' author 'monty' ancestors ((name 'XML-Parser-monty.212' message 'Removed XMLParsingException for XMLWellformednessException, added XMLLimitException, changed order of subset parsing, improved attribute type and xml/text decl handling.' id '45fefac3-e3ab-47e6-9702-86ee36554dad' date '01/04/2014' time '04:47:23' author 'monty' ancestors ((name 'XML-Parser-monty.211' message 'faster string node creation and concatenation' id '06b50733-22eb-4648-bf59-63cc4f3d3acf' date '01/01/2014' time '07:34:15' author 'monty' ancestors ((name 'XML-Parser-monty.210' message 'Recategorized Nodes to DOM, made DTD parsing faster by removing much copying and rewriting the content model and value list parsers. Also limited state caching. And made comment parsing faster.' id 'fa716f24-f123-469a-93e0-92029ca9e572' date '12/31/2013' time '03:16:13' author 'monty' ancestors ((name 'XML-Parser-monty.209' message 'Made DTD parsing faster by removing much copying and rewriting the content model and value list parsers. Also limited state caching. And made comment parsing faster.' id 'fbf1d292-5079-49bd-a2c9-3996023a243c' date '12/29/2013' time '06:37:12' author 'monty' ancestors ((name 'XML-Parser-monty.208' message 'Added comments and a toggle for validation and undeclared entity preserving.' id '326ab527-dbe7-4c00-b6a4-cf4999317691' date '12/29/2013' time '03:28:39' author 'monty' ancestors ((name 'XML-Parser-monty.207' message 'Fixed client selection for URLs and paths, completely rewrote the state machine implementation, fixed #IMPLIED declaration handling, and refactored many things.' id 'c3b51ec8-762b-4a29-b6cd-6954c7fe9bac' date '12/29/2013' time '01:03:30' author 'monty' ancestors ((name 'XML-Parser-monty.206' message 'empty log message' id 'b10e9b48-8774-4283-bfea-4f02e997af04' date '12/27/2013' time '06:51:56' author 'monty' ancestors ((name 'XML-Parser-monty.205' message 'empty log message' id 'f0769dbc-1174-4112-b0f8-b613a6e08e39' date '12/22/2013' time '07:23:20' author 'monty' ancestors ((name 'XML-Parser-monty.204' message 'renamed stuff' id 'ad4c883a-01e0-4b77-a040-067f5c202c40' date '12/22/2013' time '12:22:20' author 'monty' ancestors ((name 'XML-Parser-monty.203' message 'empty log message' id 'b1abbf2c-75ca-4ac0-9d2f-044834306ebd' date '12/19/2013' time '08:13:25' author 'monty' ancestors ((name 'XML-Parser-monty.202' message 'Added DTD requiring parameter' id 'e735c244-e6c9-4387-ba1d-14fdc7fdd7ed' date '12/19/2013' time '08:08:07' author 'monty' ancestors ((name 'XML-Parser-monty.201' message 'Added example to SAXHandler, removed broken locale code, and made validation mode smarter to only check if elements/attributes were declared if a DTD is present with element/attlist declarations.' id '3c54ac6a-d3e8-422b-a6b1-8f353c78c55b' date '12/19/2013' time '02:08:30' author 'monty' ancestors ((name 'XML-Parser-monty.200' message 'empty log message' id '67bcef38-397a-4311-aee4-2f11531610ca' date '12/14/2013' time '03:20:27' author 'monty' ancestors ((name 'XML-Parser-monty.199' message 'Fixed nested entity URI inheritance' id 'ed8ba7ab-cbf9-4bc3-8d3a-5846c542d47a' date '12/13/2013' time '10:55:23' author 'monty' ancestors ((name 'XML-Parser-monty.198' message 'empty log message' id 'e8d4b46c-4abf-4212-a45a-18ff49b5f316' date '12/13/2013' time '05:32:11' author 'monty' ancestors ((name 'XML-Parser-monty.197' message 'Refactorings' id '1e716a19-8e73-4395-8aac-fe444a3d2d21' date '12/12/2013' time '03:21:41' author 'monty' ancestors ((name 'XML-Parser-monty.196' message 'Refactorings' id '3cf4608a-ffc8-40cb-a0af-1eb88ab13fcd' date '12/11/2013' time '02:59:50' author 'monty' ancestors ((name 'XML-Parser-monty.195' message 'empty log message' id '5e0cab88-62c0-4f60-af7b-17386c73e717' date '12/10/2013' time '06:01:01' author 'monty' ancestors ((name 'XML-Parser-monty.194' message 'Better ID attribute validation' id '9ae05590-896c-436d-89ae-85933f400eff' date '12/10/2013' time '10:15:23' author 'monty' ancestors ((name 'XML-Parser-monty.193' message 'empty log message' id '1a0f9bc6-40b7-49f0-9348-abf8a9306b10' date '12/09/2013' time '06:34:57' author 'monty' ancestors ((name 'XML-Parser-monty.192' message 'empty log message' id 'f2cd61ef-bfe7-4003-98b2-096194a950f6' date '12/08/2013' time '04:44:46' author 'monty' ancestors ((name 'XML-Parser-monty.191' message 'Better checking for recursive and self-referential entities, ability to preserve undeclared entity references, fixed entity replacement bug, and better performance.' id '57fb5b3b-edfd-48e4-9880-cee0d2a97a15' date '12/08/2013' time '03:53:34' author 'monty' ancestors ((name 'XML-Parser-monty.190' message 'Moved default value validation into separate classes.' id '18e7c2b8-549d-46fd-bc18-a9e34c9a3e47' date '12/01/2013' time '10:28:24' author 'monty' ancestors ((name 'XML-Parser-monty.189' message 'empty log message' id '1d9eb6db-1ef1-4b10-b0af-fe563f97e1ca' date '12/01/2013' time '01:28:33' author 'monty' ancestors ((name 'XML-Parser-monty.188' message 'Improved HTML parsing, handling of bad HTML, recognizing HTML entities, and better XML error reporting.' id '164a8efe-63a7-408d-9528-bcd89453c43c' date '12/01/2013' time '02:05:33' author 'monty' ancestors ((name 'XML-Parser-monty.187' message 'Better error reporting for content models, and fixed param and external entity replacement.' id 'ea5db3dd-7395-456f-ae9d-ef6c6ef540d2' date '11/28/2013' time '10:28:40' author 'monty' ancestors ((name 'XML-Parser-monty.186' message 'Made the nodelist caching behavior non-default.' id '4a59fa29-ec57-4066-9d7a-7765dc9de777' date '11/27/2013' time '12:04:53' author 'monty' ancestors ((name 'XML-Parser-monty.185' message 'Made DOM parsing 20% faster.' id 'dd06e6e2-1aa0-4028-ac20-1d50695fcfac' date '11/26/2013' time '02:16:40' author 'monty' ancestors ((name 'XML-Parser-monty.184' message 'empty log message' id 'd356cff9-803e-46cc-9952-2f244ad1be31' date '11/24/2013' time '01:26:09' author 'monty' ancestors ((name 'XML-Parser-monty.183' message 'empty log message' id '2996f0e9-1562-4045-b363-e4e357f185e9' date '11/24/2013' time '12:40:19' author 'monty' ancestors ((name 'XML-Parser-monty.182' message 'empty log message' id '461a38e7-fe7d-4411-90ec-7235006b79eb' date '11/23/2013' time '08:27:27' author 'monty' ancestors ((name 'XML-Parser-monty.181' message 'empty log message' id '9aefad50-0d16-4284-90dc-b04166cc2dab' date '11/23/2013' time '08:17:16' author 'monty' ancestors ((name 'XML-Parser-monty.180' message 'empty log message' id 'a2b255c2-c770-4edd-91f2-575630976fad' date '11/23/2013' time '06:40:44' author 'monty' ancestors ((name 'XML-Parser-monty.179' message 'empty log message' id 'ebe3593c-15ce-4aac-910e-8250dcdb6c28' date '11/23/2013' time '05:50:47' author 'monty' ancestors ((name 'XML-Parser-monty.178' message 'empty log message' id 'ac0e75c0-10bc-42b9-bf0a-23a07b00dff4' date '11/23/2013' time '05:40:31' author 'monty' ancestors ((name 'XML-Parser-monty.177' message 'empty log message' id 'c6c3f576-1336-4333-ad54-1e77cec05a21' date '11/23/2013' time '05:17:02' author 'monty' ancestors ((name 'XML-Parser-monty.176' message 'empty log message' id '0b503fbe-b66e-4732-9aae-a46ba1947f7c' date '11/22/2013' time '09:37:38' author 'monty' ancestors ((name 'XML-Parser-monty.175' message 'empty log message' id '4dfc74a0-c7f8-4e12-a84e-9b88d516e991' date '11/22/2013' time '09:13:15' author 'monty' ancestors ((name 'XML-Parser-monty.174' message 'empty log message' id 'b2f4bd08-92c7-4e5b-be54-98ddcb08f0f7' date '11/22/2013' time '09:08:30' author 'monty' ancestors ((name 'XML-Parser-monty.173' message 'empty log message' id '8bdce878-cfe9-4cf8-8448-0aba16c1da8f' date '11/20/2013' time '11:20:15' author 'monty' ancestors ((name 'XML-Parser-monty.172' message 'empty log message' id 'd0809762-16d4-4362-a011-9f3218c43c29' date '11/20/2013' time '05:56:20' author 'monty' ancestors ((name 'XML-Parser-monty.169' message 'empty log message' id 'd9678ceb-9690-4950-b430-b7528d003e6d' date '11/19/2013' time '10:04:06' author 'monty' ancestors ((name 'XML-Parser-monty.168' message 'empty log message' id 'fb8c6fc4-b198-4b45-a50d-af822d0a62a1' date '11/19/2013' time '06:32:18' author 'monty' ancestors ((name 'XML-Parser-monty.167' message 'empty log message' id 'dcc8aceb-b8a6-4cf9-9eac-1b7a101cbe1a' date '11/19/2013' time '12:38:23' author 'monty' ancestors ((name 'XML-Parser-monty.166' message 'empty log message' id '6efaab2c-b47a-4743-87ec-6b7b4f3db2a0' date '11/18/2013' time '05:17:57' author 'monty' ancestors ((name 'XML-Parser-monty.165' message 'empty log message' id '9988ef2f-0add-473b-a149-e9a4bdea9139' date '11/18/2013' time '06:15:09' author 'monty' ancestors ((name 'XML-Parser-monty.164' message 'empty log message' id 'e8d726e3-c250-4b4d-9bb7-a934eba2fc8c' date '11/18/2013' time '05:04:35' author 'monty' ancestors ((name 'XML-Parser-monty.163' message 'empty log message' id 'a7c34f5a-043d-4392-8892-d8808b5a076a' date '11/18/2013' time '02:45:18' author 'monty' ancestors ((name 'XML-Parser-monty.162' message 'empty log message' id '2dfbfa1f-55bc-4c6a-a0dd-f853b4e31a4a' date '11/17/2013' time '11:34:48' author 'monty' ancestors ((name 'XML-Parser-monty.161' message 'empty log message' id '29b5bad4-b293-46eb-97fa-bb2ebcf65105' date '11/17/2013' time '05:23:11' author 'monty' ancestors ((name 'XML-Parser-monty.160' message 'empty log message' id '1ea333c5-8e86-4198-8806-725605d82a78' date '11/16/2013' time '11:12:45' author 'monty' ancestors ((name 'XML-Parser-monty.159' message 'empty log message' id 'ea4c9133-6190-482b-8539-73019a0ce34c' date '11/16/2013' time '10:46:52' author 'monty' ancestors ((name 'XML-Parser-monty.158' message 'empty log message' id '867065ed-d838-42c9-a25e-0acfb66f67c0' date '11/16/2013' time '12:27:47' author 'monty' ancestors ((name 'XML-Parser-monty.157' message 'empty log message' id 'a2ac8260-5745-4eb3-b946-e262d3452e63' date '11/16/2013' time '03:40:23' author 'monty' ancestors ((name 'XML-Parser-monty.156' message 'empty log message' id '204e3693-5ef6-4e70-adb7-bcd9812e7532' date '11/16/2013' time '02:15:36' author 'monty' ancestors ((name 'XML-Parser-monty.154' message 'empty log message' id 'a8701b8e-d31b-4682-811e-ae7ee5acdf71' date '11/15/2013' time '12:03:46' author 'monty' ancestors ((name 'XML-Parser-monty.153' message 'empty log message' id 'dc3c48d5-700c-48f9-b751-bf4e2547b927' date '11/14/2013' time '09:28:39' author 'monty' ancestors ((name 'XML-Parser-monty.152' message 'empty log message' id 'd300c220-2959-44cc-8408-c34e86848d01' date '11/14/2013' time '04:08:37' author 'monty' ancestors ((name 'XML-Parser-monty.151' message 'empty log message' id '07a45eb6-4d98-471e-b463-758cfee77246' date '11/14/2013' time '01:16:40' author 'monty' ancestors ((name 'XML-Parser-monty.149' message 'empty log message' id 'e8382e73-4924-408e-8a07-33998ac074c3' date '11/13/2013' time '08:39:10' author 'monty' ancestors ((name 'XML-Parser-monty.148' message 'empty log message' id '8c2a8633-3b53-44b9-8713-673bf0beafcc' date '11/12/2013' time '06:43:47' author 'monty' ancestors ((name 'XML-Parser-monty.147' message 'empty log message' id 'a8feeda4-2152-41c7-b309-59577ffb29b7' date '11/13/2013' time '02:36:19' author 'monty' ancestors ((name 'XML-Parser-monty.146' message 'empty log message' id '90d333af-0160-4f85-a13e-38d927f2bc51' date '11/12/2013' time '10:06:13' author 'monty' ancestors ((name 'XML-Parser-monty.145' message 'empty log message' id '6834177d-cde1-496a-b21f-e64dde8e2607' date '11/12/2013' time '06:50:59' author 'monty' ancestors ((name 'XML-Parser-monty.144' message 'empty log message' id '3646b176-3320-4781-be0a-2ffa79aa6a8d' date '11/12/2013' time '02:27:29' author 'monty' ancestors ((name 'XML-Parser-DamienCassou.143' message '- Remove dependency to XMLWriter

XMLWriter was mainly used for printing the results of parsing. As we don''t always want to print xml nodes as an xml document, I made XMLWriter optional. If XMLWriter is loaded, it will be used. Otherwise, some default behavior is executed.' id '4ca08f72-7b35-4c5d-83c6-b61b2759033a' date '04/30/2013' time '05:46:41' author 'DamienCassou' ancestors ((name 'XML-Parser-StephaneDucasse.142' message 'make all the tests green.
In particular for replace.... on XMLOrderedList made sure that the list have the same amount of elements than the one to be replaced. 
Also change the inspector since the OrderedCollectionInspector broke on XMLOrderedList.' id '436a41fc-086a-47f6-9275-8badd642328f' date '03/03/2013' time '10:42:01' author 'SD' ancestors ((name 'XML-Parser-NorbertHartl.141' message 'corrected confusing deprecation message. The deprecation should advize to use writeXMLOn: which is implemented and used instead of writeXMLWith: which seems to have existed only for a short time frame' id 'cf2f0dde-f17e-4fe4-96e7-c773d6c19b09' date '07/07/2011' time '13:50:23' author 'NorbertHartl' ancestors ((name 'XML-Parser-JAA.140' message 'Changed the error handing with observable lists to signal the error before invoking the handler.' id 'e4dcefc3-d5a3-46a7-8d08-0001273191f6' date '03/26/2011' time '19:58:36' author 'JAA' ancestors ((name 'XML-Parser-JAA.139' message 'Minor modifications to the node list class.' id 'db19f66f-f6f7-4479-8df6-a0c247b8d8bf' date '03/26/2011' time '18:55:48' author 'JAA' ancestors ((name 'XML-Parser-JAA.138' message 'Refactored the integer reading code in XMLNestedStreamReader.' id '35117749-ebd4-4234-91ac-e11aff874831' date '03/23/2011' time '11:15:03' author 'JAA' ancestors ((name 'XML-Parser-JAA.137' message 'Reverted some of Otto''s changes, but hopefully in a way that will not break compatibility.' id '3861e7c8-629a-4aa5-9ca6-8c99261ebef6' date '03/23/2011' time '09:40:08' author 'JAA' ancestors ((name 'XML-Parser-JAA.136' message 'empty log message' id 'bac0e04f-19c8-424a-9066-48c6f675311c' date '03/22/2011' time '12:28:16' author 'JAA' ancestors ((name 'XML-Parser-JAA.135' message 'empty log message' id 'ce7a5b4d-0393-4f61-b057-cd64fa6cf209' date '03/21/2011' time '19:39:40' author 'JAA' ancestors ((name 'XML-Parser-OttoBehrens.134' message 'Finally removed the Observable trait now?' id '7a58ba70-5939-4102-9831-0d3ab4a60034' date '02/22/2011' time '23:43:59' author 'OttoBehrens' ancestors ((name 'XML-Parser-OttoBehrens.133' message 'Temporarily renamings to remove Observable trait' id 'bf3d10a0-e32e-44d4-ba26-956b980c7b4f' date '02/22/2011' time '23:34:22' author 'OttoBehrens' ancestors ((name 'XML-Parser-OttoBehrens.132' message 'This package works in Pharo and GemStone' id '04928a05-89dc-48f7-8625-73a95c5bc8a1' date '02/22/2011' time '22:52:01' author 'OttoBehrens' ancestors ((name 'XML-Parser-OttoBehrens.131' message 'Got this package to work in GemStone without a .g version' id '48c41da5-a0d5-4bd1-b3a0-d0274b0330ab' date '02/22/2011' time '22:50:28' author 'OttoBehrens' ancestors ((name 'XML-Parser-OttoBehrens.125' message 'Some GS errors fixed' id '17e12b0d-a867-4fa6-bb7c-17a8045db3a6' date '02/16/2011' time '18:38:32' author 'OttoBehrens' ancestors ((name 'XML-Parser-OttoBehrens.124' message 'Changed XMLOrderedList to be an OrderedCollection because of XMLOrderedList test failures. The reason was the difference between (OrderedCollection new: 5) size = 0 and (Array new: 5) size = 5. XMLOrderedList assumed the behaviour of Array but used OrderedCollection in stead.' id 'f1d66618-1a71-481d-ba00-f4546920d457' date '02/16/2011' time '18:07:40' author 'OttoBehrens' ancestors ((name 'XML-Parser-OttoBehrens.123' message 'deprecated api removed. better to just keep it deprecated?' id '60fba67a-deda-4bdf-8e16-3dcadafe8e41' date '02/16/2011' time '15:07:02' author 'OttoBehrens' ancestors ((name 'XML-Parser-OttoBehrens.122' message 'merge back in' id '959106b8-813e-4a43-a66a-dd7a6d76ab1c' date '02/16/2011' time '09:29:04' author 'OttoBehrens' ancestors ((name 'XML-Parser-OttoBehrens.121' message 'Got some tests to pass' id '675f9eb8-a274-451f-8a7f-c63f8d03a7e7' date '02/14/2011' time '23:13:13' author 'OttoBehrens' ancestors ((name 'XML-Parser-OttoBehrens.120' message 'more traits removed' id '4ed7ff59-2cd8-4932-96f8-349ad8aac2aa' date '02/14/2011' time '08:39:40' author 'OttoBehrens' ancestors ((name 'XML-Parser-OttoBehrens.119' message 'removed more observable trait references' id '89db215d-4b95-4e99-919d-15fdec795040' date '02/14/2011' time '08:24:04' author 'OttoBehrens' ancestors ((name 'XML-Parser-OttoBehrens.118' message 'removed rubbish ' id 'b352eb9d-f6d4-4bc7-99df-e9a89d26d6ed' date '02/13/2011' time '17:45:17' author 'OttoBehrens' ancestors ((name 'XML-Parser-OttoBehrens.117' message 'Removed Observable Trait' id '3b3fbe7a-2ed5-46ee-b098-898d7b6c5434' date '02/13/2011' time '17:40:49' author 'OttoBehrens' ancestors ((name 'XML-Parser-JAAyer.116' message '* Up until now, XML names were matched heuristically; the tokenizer would read characters until it encountered one of a few that it knew could not rightfully be part of an XML name. Now it properly matches the entire range for the first character of a name and for subsequent characters, as specified by the XML spec., using a bitmap-based character set.

* Replaced references to CharacterMap with Dictionary.' id '93250642-4ce7-448d-b856-8632989b4b75' date '01/20/2011' time '03:29:17' author 'JAAyer' ancestors ((name 'XML-Parser-JAAyer.115' message 'empty log message' id '5665d1a2-24a4-49b9-ade7-3b5dcdc94bae' date '12/14/2010' time '02:50:47' author 'JAAyer' ancestors ((name 'XML-Parser-JAAyer.115' message 'Added XMLPeekableStreamAdapter.' id 'fdeee206-d45f-4742-aea5-15218c10dd9d' date '12/14/2010' time '02:45:20' author 'JAAyer' ancestors ((name 'XML-Parser-JAAyer.114' message 'Fixed a corner case in XMLNestedStreamReader>>atEnd and removed an unneeded message.' id '1ffe21c5-be32-472a-818d-bc6d7c899cf1' date '12/06/2010' time '23:47:21' author 'JAAyer' ancestors ((name 'XML-Parser-JAAyer.113' message 'Removed the requirement that stream support #peek, #position, and #position: to be parsable, greatly expanded the documentation and integrated the newest version of OrderPreservingDictionary.' id '5fa50abf-ceb4-4d44-bcf5-dd6efa4750fa' date '12/06/2010' time '23:19:15' author 'JAAyer' ancestors ((name 'XML-Parser-JAAyer.113' message 'Removed the requirement that streams support #peek, #position and #position: to be parsable and greatly expanded the documentation.' id '60c2e93e-e365-4759-a23e-ba3efd2b2d6f' date '12/06/2010' time '22:59:41' author 'JAAyer' ancestors ((name 'XML-Parser-JAAyer.112' message 'empty log message' id 'b1253457-dd6b-460f-8555-bad1903f4bff' date '12/06/2010' time '13:10:30' author 'JAAyer' ancestors ((name 'XML-Parser-JAAyer.111' message 'Fixed an entity handling bug and changed XMLOrderedList to work better with NewInspector.' id 'f7de4459-0251-4192-bc86-c63a94d2d769' date '11/29/2010' time '14:04:06' author 'JAAyer' ancestors ((name 'XML-Parser-JAAyer.110' message '* The #firstTagNamedAny:, #tagsNamedAny:, #elementAtAny: and #elementsAtAny: forms have all been removed. Their usecase was a narrow one, and their functionality can be duplicated with the new enumeration API described below and the #isNamedAny: testing message that elements still respond to.

* All remaining #tagsNamed: messages have been deprecated for a new enumeration API. You can enumerate the child nodes and elements using collect:, detect:, detect:ifNone:, do:, and select: forms, and enumerate all descendent elements and nodes recursively with "all" forms, like #allElementsDo:.

* The remaining #firstTagNamed: messages have been deprecated for a new searching API that is namespace aware. The new messages are #findElementNamed:, #findElementNamed:with:, #findElementNamed:namespaceURI: and #findElementNamed:namespaceURI:with:.

* SAXDriver no longer inherits from XMLTokenizer.

* SAXHandler no longer retains a reference to SAXDriver.

* A facade class aptly named XMLParser provides the basic parsing interface using an injected driver and tokenizer created from it.

* Renamed methods in XMLNodeList and XMLAttributeList to parallel the methods that delegate to them in XMLNodeWithElements and XMLElement.

* Deprecated #@ (it should be in Pastell)

* Deprecated #printXMLOn: for #writeXMLWith:

* Added XMLDocument>>root: to complement XMLDocument>>root

* Renamed the markup declaration classes.

* Removed the #isAttribute test.

* Fixed a bug in XMLOrderedList.' id 'fe77cec6-e200-4987-9afd-91d8033418d1' date '11/28/2010' time '13:46:33' author 'JAAyer' ancestors ((name 'XML-Parser-JAAyer.110' message '* The #firstTagNamedAny:, #tagsNamedAny:, #elementAtAny: and #elementsAtAny: forms have all been removed. Their usecase was a narrow one, and their functionality can be duplicated with the new enumeration API described below and the #isNamedAny: testing message that elements still respond to.

* All remaining #tagsNamed: messages have been deprecated for a new enumeration API. You can enumerate the child nodes and elements using collect:, detect:, detect:ifNone:, do:, and select: forms, and enumerate all descendent elements and nodes recursively with "all" forms, like #allElementsDo:.

* The remaining #firstTagNamed: messages have been deprecated for a new searching API that is namespace aware. The new messages are #findElementNamed:, #findElementNamed:with:, #findElementNamed:namespaceURI: and #findElementNamed:namespaceURI:with:.

* SAXDriver no longer inherits from XMLTokenizer.

* SAXHandler no longer retains a reference to SAXDriver.

* A facade class aptly named XMLParser provides the basic parsing interface using an injected driver and tokenizer created from it.

* Renamed methods in XMLNodeList and XMLAttributeList to parallel the methods that delegate to them in XMLNodeWithElements and XMLElement.

* Deprecated #@ (it should be in Pastell)

* Deprecated #printXMLOn: for #writeXMLWith:

* Added XMLDocument>>root: to complement XMLDocument>>root

* Renamed the markup declaration classes.

* Removed the #isAttribute test.

* Fixed a bug in XMLOrderedList.' id 'e366cfe4-04e4-40f3-bc45-425c69d62ffa' date '11/28/2010' time '13:32:51' author 'JAAyer' ancestors ((name 'XML-Parser-JAAyer.109' message '* Added configuration classes to unclutter the parser and tokenizer classes and to allow for settings specified in a parser to be carried over to nodes and other objects.

* As a result the above addition, #innerXML: now works completely and is fully namespace aware.

* The namespace handling now preserves empty xmlns="" declarations intended to override default namespace declarations in a parent or ancestor.

* Renamed #recurse: and #recurseUntilTrue: to #traverseWith: and #searchWith:.

* Added #isDeclaredPrefix:, #isDeclaredPrefix:uri: and #undeclarePrefix: to XMLElement.

* XMLComment nodes can now be preserved using #preservesCommentNodes:.

* Deprecated #preservesCDataSections: and #preservesCDataSections in favor of #preservesCDataNodes: and #preservesCDataNodes.

* Refactored XMLObservableList and XMLNodeList to make them more understandable.' id '712ceb26-539b-4ea6-b9f5-935da29a3633' date '11/24/2010' time '14:34:29' author 'JAAyer' ancestors ((name 'XML-Parser-JAAyer.108' message 'empty log message' id 'c86beea7-7099-4d20-8058-def0b6bb2150' date '11/23/2010' time '14:34:19' author 'JAAyer' ancestors ((name 'XML-Parser-JAAyer.107' message 'Extracted Opax and its tests and renamed the XML-Parser-Exception classes slightly.' id '286e4822-4019-4b86-a6ce-1a624386e8b3' date '11/22/2010' time '07:11:27' author 'JAAyer' ancestors ((name 'XML-Parser-JAAyer.106' message 'Updated to use the renamed and extracted OrderPreservingDictionary class.' id '2b8c7b40-d126-4bb2-9229-4c1eb2a61c6e' date '11/20/2010' time '08:17:03' author 'JAAyer' ancestors ((name 'XML-Parser-JAAyer.105' message 'Extractec XMLWriter and tests into separate packages.' id 'be22b4ce-7588-4297-8745-61261cd5fd53' date '11/17/2010' time '03:23:11' author 'JAAyer' ancestors ((name 'XML-Parser-JAAyer.104' message '* Fixed the element factory test to properly remove the dummy classes it creates when it runs.' id '94a7955e-6d44-4871-94ce-52c48f34dc3b' date '11/15/2010' time '07:26:11' author 'JAAyer' ancestors ((name 'XML-Parser-JAAyer.103' message '* Added element handling based on class names in the element factory.

* Some minor fixes for potential porblems on other platforms.' id '144c1d14-2e16-48b8-89dc-ed588ee416f3' date '11/15/2010' time '06:53:36' author 'JAAyer' ancestors ((name 'XML-Parser-JAAyer.102' message '* The DOM parser now supports the injection of node factories to control what concrete classes it uses for different node types. At the moment only certain node types are supported. See XMLNodeFactory.

* In addition to the default factory, there is a pluggable element factory that facilitates the mapping of elements to specific subclasses of XMLElement based on the name and namespace information of the elements. See XMLPluggableElementFactory for more information.

* Fixed the handling of "xml" and "xmlns" prefixes.

* Set about restructuring and improivng the test classes.

* Refactored the constructors in SAXHandler.

* Renamed #useNamespaces: to #usesNamespaces:.

* Fixed a bug in XMLNodeList.' id '5487bc05-66f4-42c0-bb95-e87fe68a0382' date '11/15/2010' time '01:04:10' author 'JAAyer' ancestors ((name 'XML-Parser-tg.101' message 'commented RootNode' id '3adcff01-412a-475f-99f2-fb4374db10bf' date '10/31/2010' time '20:05:05' author 'tg' ancestors ((name 'XML-Parser-tg.100' message 'commented Opax classes' id '1efae2a4-9dbe-4e93-ac23-b4632fe233c1' date '10/31/2010' time '20:03:06' author 'tg' ancestors ((name 'XML-Parser-JAAyer.99' message 'Unprefixed attributes no longer erroneously claim to belong to their element''s default namespace.' id '0a68f74a-b19c-4d80-922c-75e690b16cd4' date '10/24/2010' time '22:09:32' author 'JAAyer' ancestors ((name 'XML-Parser-JAAyer.98' message '* #isEmpty and #notEmpty have been deprecated for #hasChildren. This is clearer, as there is no longer ambiguity as to whether certain childless nodes (attributes, strings) should be considered "empty."' id 'ca6baff2-7691-4ddc-aa65-a5e683766dbd' date '10/24/2010' time '19:36:43' author 'JAAyer' ancestors ((name 'XML-Parser-JAAyer.97' message '* #qualifiedName is deprecated; #name suffices.

* Refactored XMLNodeTest and XMLNestedStreamReader

* CharacterMap is now bundled separately.' id '9b2bd823-569f-447a-a7bc-a8c9fd474f5f' date '10/23/2010' time '12:38:30' author 'JAAyer' ancestors ((name 'XML-Parser-JAAyer.96' message 'XML-Parser-Writers

* XMLWriter has been replaced by a block-based API similar to Seaside''s HTML generation API. Browse the classes and their comments in XML-Parser-Writers for more information.

XML-Parser-Nodes:

* #contentString now returns the combined content of the receiver and its descendent elements with spaces added where appropriate. That means sending #contentString to an element with the structure of "<element>this is <child>text</child>content</element>" will yield "this is text content."

* Added #strings and #stringsDo: to avoid having to deal with string nodes directly.

* Added #elementAt:namespaceURI:, #elementAt:namespaceURI:ifAbsent:, #elementsAt:namespaceURI:, #attributeAt:namespaceURI:, and #attributeAt:namespaceURI:ifAbsent: to better facilitate element and attribute retrieval via namespace URI rather than prefix.

* XMLOrderedList no longer inherits from OrderedCollection.

* The node classes now use a custom observer API (for performance reasons). It is grafted on with Traits.

* Added additional node classes for markup declarations and comments (not used yet).

* Deprecated #isTag, #isText, and #isTagOrText in favor of #isElement, #isStringNode, and #isContentNode.

* Deprecated #elementsAndContents, #elementsAndContentsDo:, #contents, #contentsDo:, and #hasContents in favor of #contentNodes, #contentNodesDo:, #stringNodes, #stringNodesDo:, and #hasStringNodes.

* Deprecated #characterData, #tag.

* Deprecated #topNode and #topElement in favor of #firstNode and #firstElement.

* Deprecated the #at:, #at:ifAbsent:, #at:put:, and #at:ifAbsentPut: attribute accessor shortcuts in XMLElement. Most attribute manipulation involes only retrieval, and #@ already serves well enough as a shortcut for that purpose.

* Deprecated #tagsNamed:childrenDoAndRecurse: and #tagsNamed:contentsDo:

* Removed the already deprecated #valueFor:, #valueFor:ifAbsent:, #elementUnqualifiedAt: and #elementUnqualifiedAt:ifAbsent: messages.

XML-Parser

* Renamed XMLStreamReader to XMLNestedStreamReader, XMLStreamWriter to XMLNestedStreamWriter and XMLOpenTags to XMLWellFormednessChecker. The classes were also refactored.

* XMLOrderPreservingDictionary no longer inherits from Dictionary.

XML-Parser-Exceptions

* Renamed SAXNotWellFormedException to XMLWellFormednessException and replaced SAX- prefixes on other exception and warning classes with an XML prefix.' id 'bed3a022-5b8f-4e75-ad43-c8facd6b04f1' date '10/16/2010' time '07:15:08' author 'JAAyer' ancestors ((name 'XML-Parser-JAAyer.95' message 'empty log message' id '80f686ac-cba6-4334-8151-c3d3f699ee9d' date '10/16/2010' time '05:34:41' author 'JAAyer' ancestors ((name 'XML-Parser-JAAyer.94' message 'empty log message' id '1c39d314-eb5d-4d43-8c7d-fb5517a660cb' date '10/16/2010' time '05:32:40' author 'JAAyer' ancestors ((name 'XML-Parser-AlexandreBergel.93' message 'Fixed the faulty test. Thanks Henrik!' id 'eea1131f-bf90-4727-becc-5d123b840669' date '09/14/2010' time '10:13:58' author 'AlexandreBergel' ancestors ((name 'XML-Parser-JAAyer.92' message 'Includes DOM CDATA section preservation patch from Jan van de Sandt.' id 'e83345b4-700b-4873-a914-6cb95de46cfa' date '08/09/2010' time '17:52:51' author 'JAAyer' ancestors ((name 'XML-Parser-jvds.91' message 'added the property preserveCDATASections to the XMLDOMParser' id '8a15ae9d-a332-6140-af5c-9d3b5d5a020c' date '08/09/2010' time '13:38:51' author 'jvds' ancestors ((name 'XML-Parser-jvds.90' message '- added support for CDATASection nodes in the DOM
- updated the XMLDOMParser so CDATASections are preserved' id '500703d6-076f-c246-a91e-debf5db54c69' date '08/09/2010' time '11:28:58' author 'jvds' ancestors ((name 'XML-Parser-JAAyer.89' message 'Removed #utf8Example and #testNonUTF8Characters (which sends the former). #utf8Example contained non-UTF-8 characters and caused character encoding issues at the package and image level.' id 'e885be9a-f9f9-4f5b-a93f-2b297753bb1b' date '08/06/2010' time '14:11:19' author 'JAAyer' ancestors ((name 'XML-Parser-JAAyer.88' message 'Removed #utf8Example and #testNonUTF8Characters (which sends the former). #utf8Example contained non-UTF-8 characters and caused character encoding issues at the package and image level.' id '1df0ff08-b87d-4c08-9870-8764c4f0d81b' date '08/06/2010' time '14:10:33' author 'JAAyer' ancestors ((name 'XML-Parser-NorbertHartl.87' message '- removed withInternetLineEndings selector and replaced it with the replacement code. The selector does not exist in gemstone
- changed Dictionary to XMLOrderPreservingDictionary in tests as gemstone is checking class on equality testing
- added stream atEnd. Gemstone throws an error if next is called if the stream is atEnd. One should always use atEnd' id 'bd6b4f4c-9ff1-41f3-ac2e-471c0da20d95' date '08/05/2010' time '16:47:14' author 'NorbertHartl' ancestors ((name 'XML-Parser-NorbertHartl.86' message 'removed another dot that is a syntax error in gemstone' id 'c4acceea-0b54-4551-bbd0-6d3f94ff566f' date '08/05/2010' time '12:29:37' author 'NorbertHartl' ancestors ((name 'XML-Parser-NorbertHartl.85' message 'removed dots. These are syntax errors in gemstone' id 'c5857cb6-51c1-4e24-8cd9-6b812132614f' date '08/05/2010' time '11:11:55' author 'NorbertHartl' ancestors ((name 'XML-Parser-JAAyer.84' message 'Included this patch from Christophe Jalady to speed up Unicode parsing:

WriteStream>>stringContents
    | newSize |

    newSize := position.
--    ^(String new: newSize)
++    ^((collection class) new: newSize)
        replaceFrom: 1
        to: newSize
        with: collection
        startingAt: 1
' id '76abe1c1-ee00-443e-a9ca-5330fdf752bd' date '06/24/2010' time '13:14:19' author 'JAAyer' ancestors ((name 'XML-Parser-JAAyer.83' message 'Included this patch from Christophe Jalady to speed up Unicode parsing:

WriteStream>>stringContents
    | newSize |

    newSize := position.
--    ^(String new: newSize)
++    ^((collection class) new: newSize)
        replaceFrom: 1
        to: newSize
        with: collection
        startingAt: 1' id 'ffa85307-1767-4f97-9e75-da760b5f944b' date '06/24/2010' time '13:13:21' author 'JAAyer' ancestors ((name 'XML-Parser-JAAyer.82' message 'empty log message' id 'f2ff9c08-8a63-4956-bf74-dcaaf28b8d6e' date '06/24/2010' time '13:11:00' author 'JAAyer' ancestors ((name 'XML-Parser-Alexandre_Bergel.81' message 'remove stupid method' id '3888021f-ffdb-4174-90db-0a8cb8584b21' date '06/11/2010' time '15:21:44' author 'Alexandre Bergel' ancestors ((name 'XML-Parser-Alexandre_Bergel.80' message 'minor addition' id 'aa51b7de-ac71-4bd1-9b18-44ef9bccfadb' date '06/09/2010' time '19:01:01' author 'Alexandre Bergel' ancestors ((name 'XML-Parser-Alexandre_Bergel.79' message 'minor addition' id 'b91b2222-8813-4d58-8221-c9491733a924' date '06/09/2010' time '19:00:33' author 'Alexandre Bergel' ancestors ((name 'XML-Parser-Alexandre_Bergel.78' message 'Restructuring of Opax' id '56801ae8-3458-4109-84ef-203a73fbba5e' date '05/21/2010' time '14:09:54' author 'Alexandre Bergel' ancestors ((name 'XML-Parser-Alexandre_Bergel.77' message 'Opax is now integreated in XML-Parser. Opax is a small addition to SAXParser that enables dealing with tags polymorphically. ' id 'd4dff730-14ce-4fe4-ae01-278b8fa34700' date '05/21/2010' time '11:45:35' author 'Alexandre Bergel' ancestors ((name 'XML-Parser-Alexandre_Bergel.76' message 'Added a clarification on character (testDecodingCharacters).
Thanks to Damien Pollet for raising this question and Pharoer for helping understand what''s going on.' id 'e7d614f7-49d9-4cdc-aaa8-c647a2019e18' date '05/21/2010' time '11:23:25' author 'Alexandre Bergel' ancestors ((name 'XML-Parser-DamienPollet.75' message 'Failing test for UTF-8 entities decoding.' id 'c42f2f2a-bdb1-4a07-a32b-b30f25c68ffa' date '05/16/2010' time '19:27:31' author 'DamienPollet' ancestors ((name 'XML-Parser-Alexandre_Bergel.74' message 'Added log in benchmark1' id 'd4a68b46-39ad-4585-b77a-706b62226c1f' date '03/29/2010' time '09:10:50' author 'Alexandre Bergel' ancestors ((name 'XML-Parser-AlexandreBergel.73' message 'Added new UTF8 test using the file provided by nernan Morales Durand' id '770249f4-7b8b-4bec-9250-097feaae02e0' date '03/29/2010' time '09:08:30' author 'FirstnameLastname' ancestors ((name 'XML-Parser-JAAyer.72' message '* Balanced #nextMatchAll: to use the old optimization of resetting the stream position to where the match was first attempted where possible, but in such a way that it won''t cause problems with MultiByteFileStreams.' id 'a1adc2a9-3395-4118-ade9-4f888ace5188' date '03/28/2010' time '13:31:04' author 'JAAyer' ancestors ((name 'XML-Parser-JAAyer.71' message '* Changed #nextMatchAll: to not use #position/#position:, as this causes problems with MultiByteFileStreams.' id '1a45aeae-30e3-45e2-a0b2-8e226650d380' date '03/28/2010' time '00:22:03' author 'JAAyer' ancestors ((name 'XML-Parser-FirstnameLastname.70' message 'small test non non utf8 characters' id '5114e7e6-77a5-449b-a2c5-43a17b4b8576' date '03/26/2010' time '18:22:40' author 'FirstnameLastname' ancestors ((name 'XML-Parser-FirstnameLastname.69' message 'small test non non utf8 characters' id 'f9cd9cd6-3bf4-4e63-8d46-3eaf57c6ed16' date '03/26/2010' time '18:21:42' author 'FirstnameLastname' ancestors ((name 'XML-Parser-JAAyer.68' message '* Adjusted the #startElement- and #endElement- handlers. They now all expect the full, qualified name as their first argument.' id '0f4ab344-2583-4a7b-8aaa-443b83785124' date '03/24/2010' time '19:35:08' author 'JAAyer' ancestors ((name 'XML-Parser-JAAyer.67' message '* Added #innerXML:.

* Added XMLStreamWriter to manage the multiple WriteStreams needed by XMLTokenizer.' id 'a64d3a67-86b1-4734-a19d-17aac2f42ee5' date '03/23/2010' time '18:13:29' author 'JAAyer' ancestors ((name 'XML-Parser-JAAyer.66' message '* The well-formedness checking has been moved out of XMLDOMParser and into SAXDriver. It throws SAXNotWellFormedExceptions when tags are closed out of order or if tags are still left open after parsing has finished.

* The tokenizer and stream reader have both been refactored and optimized.

* Removed XMLParser. SAXDriver/SAXHandler do everything it does, and more.

* Renamed XMLStringNode to XMLString.

* Added XMLOrderedList and a subclass, XMLElementList, and also made XMLNodeList inherit from it. XMLOrderedList and its subclasses will never throw exceptions when non-existent elements are accessed; instead they return nil. This means code like this: "(doc root elementsAt: ''foo'') third" will work, even if there is no third element named "foo," returning nil in such situations.' id '32618415-85b8-4e67-b440-f523ba6091fe' date '03/23/2010' time '13:52:21' author 'JAAyer' ancestors ((name 'XML-Parser-JAAyer.65' message 'empty log message' id 'e9ea7108-9250-4e58-a40a-b008c2756a80' date '03/22/2010' time '20:25:47' author 'JAAyer' ancestors ((name 'XML-Parser-JAAyer.64' message 'empty log message' id '6147738e-ddb4-400c-a2c1-5879895525a8' date '03/22/2010' time '11:33:56' author 'JAAyer' ancestors ((name 'XML-Parser-JAAyer.63' message 'empty log message' id 'aa238952-5ee5-497d-9c14-4d0411cec373' date '03/19/2010' time '14:30:19' author 'JAAyer' ancestors ((name 'XML-Parser-JAAyer.61' message 'empty log message' id '158add99-5c12-4112-844a-b1ae9d3f174f' date '03/17/2010' time '03:23:12' author 'JAAyer' ancestors ((name 'XML-Parser-JAAyer.60' message 'empty log message' id 'd287422a-f317-42e4-a741-c110989157eb' date '03/16/2010' time '15:55:17' author 'JAAyer' ancestors ((name 'XML-Parser-JAAyer.59' message 'empty log message' id 'd06f93cb-7fd0-4148-8c6b-48933406e23f' date '03/15/2010' time '04:44:16' author 'JAAyer' ancestors ((name 'XML-Parser-JAAyer.58' message 'empty log message' id '0bd27681-93c7-4e45-8b2e-96818509c471' date '03/12/2010' time '10:35:50' author 'JAAyer' ancestors () stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())(name 'XML-Parser-JAAyer.57' message '' id '99388deb-5dcd-4537-8d5c-aa95268a1709' date '03/12/2010' time '01:02:28' author 'JAAyer' ancestors ((name 'XML-Parser-JAAyer.56' message '* Removed the newly-added *content: constructors for XMLElement. Since #addContent: can take strings, they aren''t really needed anymore.

* Refactored the stream reading code out of XMLTokenizer and into a separate XMLStreamReader class.

* Added some new exception classes.

* Added constructor methods to XMLElement to support creating an element with multiple namespaces declared it it, and also added an instance-side declareNamespaces: message.

* Attributes can now be supplied as a Dictionary or Array to XMLElement constructors (so too with namespaces).' id '4e1fa747-d9c0-443d-956d-1b8c0768246f' date '03/11/2010' time '10:20:49' author 'JAAyer' ancestors ((name 'XML-Parser-JAAyer.55' message 'empty log message' id '4b81c2ce-a911-4c60-a1c7-10764b460b8f' date '03/11/2010' time '01:56:03' author 'JAAyer' ancestors ((name 'XML-Parser-JAAyer.53' message '* Adjusted the class hierarchy.

* Added two XMLNode-specific collection classes, XMLNodeList and XMLAttributeList.' id 'cb191763-8883-4f97-8322-17f5db923331' date '03/10/2010' time '23:47:53' author 'JAAyer' ancestors ((name 'XML-Parser-JAAyer.52' message 'empty log message' id 'c5228c52-7fd2-4f31-beac-853aee9af710' date '03/10/2010' time '23:01:57' author 'JAAyer' ancestors ((name 'XML-Parser-JAAyer.51' message 'Minor fixes and refactorings.' id 'a34b5fa4-cef9-4d8a-8785-8da34615bd7d' date '03/09/2010' time '12:07:34' author 'JAAyer' ancestors ((name 'XML-Parser-JAAyer.50' message '* The API is now completely string-based. The performance of the symbol-based predecessors was erratic and could potentially cause portability issues. Existing code in Squeak and Pharo shouldn''t be affected, as they both assume #name = ''name''.

* Added XMLNodeWithChildren and refactored all node-related methods out of XMLNodeWithElements and into XMLNodeWithChildren, of which XMLNodeWithElements is now a subclass.

* Element attributes are now represented as XMLAttribute nodes and stored in an XMLAttributeList. They now also support namespacing.

* Attribute order is preserved at all levels.

* The tokenizer (#basicNext in particular) has been sped up.' id 'cd8217d9-84c7-4b36-8ae1-c1b7db949b8c' date '03/09/2010' time '01:08:35' author 'JAAyer' ancestors ((name 'XML-Parser-JAAyer.49' message 'empty log message' id 'f294ee76-7258-4d99-ae07-c39b1e27786f' date '03/08/2010' time '23:53:46' author 'JAAyer' ancestors ((name 'XML-Parser-JAAyer.47' message 'empty log message' id 'f50149a3-9e82-49b0-913b-b0c492b31873' date '03/07/2010' time '21:05:36' author 'JAAyer' ancestors () stepChildren ())(name 'XML-Parser-Alexandre_Bergel.46' message 'Added an elementary benchmark' id 'ace3bc7f-9c6d-4bad-8a4b-aa748164ff41' date '03/04/2010' time '15:04:34' author 'Alexandre Bergel' ancestors ((name 'XML-Parser-Alexandre_Bergel.45' message 'Following Nobert''s suggestion, I replaced the reference of IdentityDictionary by ''anElement attributes species'' in ''#assertElement: anElement attributes: aDictionary''. All tests are green' id '12286457-2f48-41a5-a675-026eecc54432' date '03/04/2010' time '14:46:15' author 'Alexandre Bergel' ancestors ((name 'XML-Parser-Alexandre_Bergel.44' message 'Minor fix' id '6f0b9b1f-0135-46e3-bc43-5e7c041de697' date '03/04/2010' time '14:37:48' author 'Alexandre Bergel' ancestors ((name 'XML-Parser-JAAyer.43' message '* Added full namespace support for elements. Evaluate this: (XMLDOMParser parse: ''<foo:root xmlns:foo="http://foo" xmlns="http://default"><bar>test</bar></foo:root>'') in a Workspace with cmd-p, and you should get back out roughly what you put in. When you add an element to another, it and its descendants inherit the parent''s bindings. When you change the binding of a prefix, all descendants with the old bindings are rebound.

* Removed #parseWithNamespaces: and changed #parseDocumentFrom: (and #parse: by extension) to default to usesNamespaces=true. The reason for turning off namespace support by default was that the old, broken way of handling namespaces used expanded names (namespace URI + local name) as qualified names (prefix + local name) for elements that lacked a prefix and also assumed a global, default namespace (the URI of the namespace spec itself) for no apparent reason.

* Added #elementsAt:do: and deprecated #tagsNamed:childrenDo:. Now all undeprecated #tagsNamed: messages do some sort of depth-first traversal using #recurse: and all #element- messages operate on direct child elements; the naming convention is consistent.' id '7164e5b6-8364-49d6-afac-ef4c2451916f' date '03/04/2010' time '01:21:30' author 'JAAyer' ancestors ((name 'XML-Parser-JAAyer.40' message '* Added full namespace support for elements. Evaluate this: (XMLDOMParser parse: ''<foo:root xmlns:foo="http://foo" xmlns="http://default"><bar>test</bar></foo:root>'') in a Workspace with cmd-p, and you should get back out roughly what you put in. When you add an element to another, it and all its descendants inherit the parent''s bindings. When you change the binding of a prefix, all descendants with the old bindings are rebound.

* Removed #parseWithNamespaces: and changed #parseDocumentFrom: (and #parse: by extension) to default to usesNamespaces=true. The reason for turning off namespace support by default was that the old, broken way of handling namespaces used expanded names (namespace URI + local name) as qualified names (prefix + local name) for elements that lacked a prefix and also assumed a global, default namespace (the URI of the namespace spec itself) for no apparent reason.

* Added #elementsAt:do: and deprecated #tagsNamed:childrenDo:. Now all undeprecated #tagsNamed: messages do some sort of depth-first traversal using #recurse: and all #element- messages operate on direct child elements; the naming convention is consistent.' id '91396896-8444-4d6c-bd4d-c9c2269c97ce' date '03/04/2010' time '00:41:06' author 'JAAyer' ancestors () stepChildren ())(name 'XML-Parser-Alexandre_Bergel.41' message 'minor fix in a test method' id '6851179c-6087-47fe-b0f4-11d3bfb2da55' date '03/03/2010' time '16:48:24' author 'Alexandre Bergel' ancestors ((name 'XML-Parser-Alexandre_Bergel.40' message 'minor fix in a test method' id '767c6436-afcb-4471-8977-acb74074567a' date '03/03/2010' time '16:47:24' author 'Alexandre Bergel' ancestors ((name 'XML-Parser-Alexandre_Bergel.39' message 'modified allAttributes and added allAsttributeAssociations as follows:
XMLElement>>allAttributes
	^ self attributes keys
	
XMLElement>>allAttributeAssociations
	^ self attributes associations



Tested in testParsing as:
	self assert: (firstPerson allAttributes = #(#''first-name'' #''employee-number'' #''family-name'')).
	self assert: firstPerson allAttributeAssociations asArray = {(#''first-name''->''Bob''). (#''employee-number''->''A0000''). (#''family-name''->''Gates'')}.
' id '2ecce43a-f0b1-447e-a779-ebc908dc6f7d' date '03/02/2010' time '12:21:46' author 'Alexandre Bergel' ancestors ((name 'XML-Parser-Alexandre_Bergel.38' message 'improvement proposed by JAAyer. Thanks!


Here is the list of improvements.

This update includes features, refactoring, and at least one bug fix.

To begin with, I realized there was a problem with the #= messages from the last package. This code will demonstrate:

doc := (XMLDOMParser parseDocumentFrom: ''<r><a>foo</a><b>bar</b><a>foo</a></r>'').
doc root removeElement: doc root elements last.

That removes the *first* <a> element, not the last, as both <a>s are equal according to #=, and #remove: (used by #removeElement:) removes the first object equal (#=) to its argument. I identified three possible solutions. The first would be to just ignore it. The second would be to remove the #= (and #hash) messages. The third would be to rewrite methods whose behavior depends on #= to depend instead on #== if to do otherwise would result in unexpected behavior (like in the code above). I initially opted for #3, but quickly realized code like this: "self elements removeAt: (self elements identityIndexOf: anElement)" would probably confuse future maintainers. I have chosen instead to just delete all #=/#hash messages. You can still compare documents and elements by sending them #asString and testing the results with #=. I added an #equalTo: message to XMLNodeWithElements that does just that.

Other changes:

* Added a comprehensive TestCase for XMLNode and its subclasses, XMLNodeTest.

* Child elements now properly notify their parents of name/namespace changes, and the qualified and unqualified names of elements are both cached as symbols.

* Added #nextNode/#previousNode and #nextElement/#previousElement to facilitate accessing siblings nodes/elements.

* Added #addNode:after:, #addNode:before: and #addNodeFirst:, and renamed #addAll: to #addNodes: and #removeAll to #removeNodes. Also added #removeNodes:. These methods return the node(s) added or removed.

* Refactored code out of #addElement: and #removeElement:, so they are no longer needed. The former is still kept for backwards compatibility and returns self. #addNode: and #removeNode: should be used instead.

* Previously #topElement would, because it sends #first to #elements, raise an unintuitive error when #elements is empty. It now returns nil in such circumstances. Added #topNode to complement it.

* Added #firstTagNamedAny:, #firstTagNamedAny:with:, #elementAtAny:, and #elementAtAny:ifAbsent:.

* #tagsNamed:ifReceiverDoAndRecurse:, #elementUnqualifiedAt:, #elementUnqualifiedAt:ifAbsent:, #valueFor:, and #valueFor:ifAbsent: are all redundant and have been marked deprecated accordingly.

* Added #parse: and #parseWithNamespaces: to XMLDOMParser. Since #parseDocumentFrom: and #parseDocumentFrom:useNamespaces: are sent so often, there should be shortcuts.

* SAXDriver now properly sends #startCData before invoking #characters: with CDATA and #endCData after. I actually toyed briefly with adding an XMLCDataNode class as other XML APIs have, but I honestly can''t see any benefit to doing so.

* I inserted class comments into XMLParser, SAXDriver, SAXHandler and XMLDOMParser.

* There are now two execute-around methods, #with:add: and #with:remove:, that take blocks that either add a node to #nodes or remove one from it. They handle establishing and breaking parent-child relationships, keeping the element cache up-to-date, and also catching corner-case issues like adding the same node twice or adding a node that is already the child of another node. To write methods that modify #nodes, you need only wrap the modifying code in #with:add: or #with:remove, and they will take care of the rest.

* Refactored some of my code from the previous package. It should be easier to follow now. Renamed #elementsDictionary to #elementsByName, and the private methods that manipulate #elements and #elementsByName now have an #elementCache* prefix.

* XMLElement attributes are stored as an IdentityDictionary, but the methods that access it directly by key send asSymbol to the key first, so the change is unlikely to break anything.

' id 'e5da0293-64a9-456a-b318-05618f422fdf' date '02/27/2010' time '23:46:22' author 'Alexandre Bergel' ancestors ((name 'XML-Parser-JAAyer.37' message 'empty log message' id 'cfb0ac47-33d8-442c-8bf3-ca7037c12ffa' date '02/26/2010' time '23:27:36' author 'JAAyer' ancestors ((name 'XML-Parser-Alexandre_Bergel.30' message 'remove the dependency with ClassTestCase.
This will ease the porting to Gemstone' id 'cefc8e10-5cf9-4234-b8ac-c43df916b76d' date '02/26/2010' time '17:37:10' author 'Alexandre Bergel' ancestors ((name 'XML-Parser-Alexandre_Bergel.29' message 'A bit of cleaning
Added extra test for the tokenizer
Added asSymbol when looking up attributes' id '86bb21f3-db73-401f-b0bd-d23e03461259' date '02/24/2010' time '11:26:36' author 'Alexandre Bergel' ancestors ((name 'XML-Parser-Alexandre_Bergel.29' message 'A bit of cleaning
Added extra test for the tokenizer
Added asSymbol when looking up attributes' id 'c9109661-ede2-465e-97c0-89c6da3f0c15' date '02/24/2010' time '11:25:55' author 'Alexandre Bergel' ancestors () stepChildren ())) stepChildren ())) stepChildren ())(name 'XML-Parser-JAAyer.36' message 'empty log message' id '5b5789a3-2ea6-4caa-a401-2b952ce9c6a3' date '02/26/2010' time '23:24:16' author 'JAAyer' ancestors ((name 'XML-Parser-NoBlankLineAfterSignature.34' message 'empty log message' id 'db37873f-8ea5-4139-9bbe-b2d6f8d7c0b1' date '02/25/2010' time '14:40:31' author 'JAAyer' ancestors ((name 'XML-Parser-JAAyer.33' message 'empty log message' id 'edaca8c0-6fb4-474e-869b-d6022906820c' date '02/23/2010' time '18:03:46' author 'JAAyer' ancestors ((name 'XML-Parser-JAAyer.32' message 'empty log message' id '3035573d-5817-4c24-8ab3-a10aa9b58b31' date '02/21/2010' time '22:31:29' author 'JAAyer' ancestors ((name 'XML-Parser-JAAyer.31' message 'empty log message' id 'f3814ba1-1c5e-43df-9528-bfd546326b94' date '02/20/2010' time '21:29:38' author 'JAAyer' ancestors ((name 'XML-Parser-JAAyer.30' message 'empty log message' id 'd8e3427f-ebae-4192-a45a-29ee22e3d3ae' date '02/18/2010' time '22:09:37' author 'JAAyer' ancestors ((name 'XML-Parser-JAAyer.29' message 'empty log message' id '5dd97371-5d93-4ee3-82b6-5fd9a653e553' date '02/18/2010' time '21:55:46' author 'JAAyer' ancestors ((name 'XML-Parser-Alexandre_Bergel.28' message 'Recategorization' id '9ef076c5-f3c4-4809-a178-ba43e599be84' date '02/17/2010' time '16:46:08' author 'Alexandre Bergel' ancestors ((name 'XML-Parser-Alexandre_Bergel.27' message 'Improvement by george.herolyants@gmail.com
regarding line ending' id 'fcebd958-dc85-49f7-a764-790187e8e085' date '02/17/2010' time '16:31:36' author 'Alexandre Bergel' ancestors ((name 'XML-Parser-Alexandre_Bergel.26' message 'Improvements proposed by jaayer@zoho.com


* All searching and enumerating methods have been moved from XMLNode to XMLNodeWithElements. Unless you can think of a scenario where it would make sense to send any of them to a string or PI node, I think this is both a safe and sensible move.

* XMLNodeWithElements no longer contains an "elementsAndContents" collection. Instead it has a single "nodes" OrderedCollection that contains all child nodes in the order in which they appeared. The collection returned by #elementsAndContents (and enumerated via #elementsAndContentsDo:) is recreated using #nodes.

* #addElement: is now just for elements, and #addNode can be used for everything else (#addElement can still handle non-element nodes, though). #removeNode: and #removeElement: have also been added. Since, for backwards compatibility, the #add* methods don''t return the object added, neither will the #remove* method return that which was removed.

* Because the costly depth-first traversing #firstTag* and #tagsNamed* methods send #elementsDo: so many times, it makes sense to speed-up #elementsDo: by having it enumerate a separate collection just containing elements; thus, an "elements" collection has been added for that purpose. The repetitive identity checks in the XMLElement versions of those methods have been moved into a single #isNamed: method, which expects a symbol but can also handle strings by sending its argument #asSymbol before making #== comparisons. (#asSymbol is free for symbols, so you only pay if you use strings to specify tag names.)

* #tagsNamed:ifReceiverDo:, despite what its name implies (the plural "tags"), does no searching/enumeration. Outside of the implementations of other #tagsNamed:* messages, I doubt anyone uses this, so I have renamed it #ifNamed:do:.

* #tagsNamed:ifReceiverOrChildDo: does not work. The XMLElement version evaluates the block if it is so named and then invokes the superclass version of #tagsNamed:ifReceiverDo:, which is an empty method. Since it doesn''t work and is ridiculously named, I have removed it.

* #tagsNamed:ifReceiverDoAndRecurse: is, oddly enough, exactly equivalent to #tagsNamed:do:. I have removed the XMLElement version and reimplemented the XMLNode(WithElements) version to just send #tagsNamed:do: (although I''d prefer to remove it altogether).

* XMLNodeWithElements has a new instance variable: "elementsDictionary," an IndentityDictionay where keys are the qualified and unqualified names of child elements and values are OrderedCollections of so-named elements. This makes #elementAt: have O(1) complexity rather than O(n) and a->b->c traversal have O(n) complexity (where n is the number of nodes counting the root, the target, and all ancestors between) rather than the previous worst-case of O(n^2). This comes at the cost of additional memory and time to add/remove elements. You can rewrite Pastell accessors in terms of #elementsAt: and #elementAt:.

* The #contentsDo: and #elementsAndContentsDo: messages can now only be sent to XMLElements. It makes no sense to send them to documents or other kinds of nodes, as no other kind of node has text content. 

* I moved #parent and #parent: out of XMLNodeWithElements and put them in XMLNode instead, as every node in the DOM tree save the root has a parent. They actually work now, too, meaning that "((XMLDOMParser parseDocumentFrom: ''<p>foo<b>bar</b></p>'' readStream) firstTagNamed: #b) parent" will return the "p" element, not nil as it would before.

* How often have you sent #parseDocumentFrom: with an XML string as its argument (instead of a stream) and gotten a "message not understood" error? XMLDOMParser''s #parseDocumentFrom:useNamespaces: method now sends #readStream to "aStream" if it is not already a stream, so you will no longer receive such errors.

* #addEntity:value: has been removed. It has not been touched in ten years and sends a message (#entities) that is not understood.

* Confusing "entityName" parameter names in methods expecting element/tag names were replaced with "aSymbol."

* (This package also contains the #=/#hash methods submitted as a feature addition to bugs.squeak.)

Lastly, this codebase has had too many hands touching it and looks too inconsistent. I suggest configuring your formatter like so:

RBConfigurableFormatter
    maxLineLength: 80;
    newLinesAfterMethodPattern: 2;
    newLinesAfterMethodComment: 2;
    retainBlankLinesBetweenStatements: true;
    stringInsideBlocks: ''''.

And then reformatting XMLNode and its subclasses.<XML-Parser-JAAyer.25.mcz>
' id '30096ce3-84d4-442e-be07-04bdf5519131' date '02/17/2010' time '15:05:06' author 'Alexandre Bergel' ancestors ((name 'XML-Parser-JAAyer.25' message 'empty log message' id '1c7e0d7d-31d0-4c49-8694-4c823a63d744' date '02/15/2010' time '12:47:59' author 'JAAyer' ancestors ((name 'XML-Parser-JAAyer.24' message 'empty log message' id 'bad20136-a096-4b1a-ac22-b5c50a3b4027' date '02/15/2010' time '12:41:18' author 'JAAyer' ancestors ((name 'XML-Parser-JAAyer.23' message 'empty log message' id 'dc20f9d2-55ce-477b-b970-8fa29921e224' date '02/15/2010' time '11:30:50' author 'JAAyer' ancestors ((name 'XML-Parser-JAAyer.22' message 'empty log message' id '708b3609-6172-451a-adf7-ed12896cd6b3' date '02/15/2010' time '08:49:57' author 'JAAyer' ancestors ((name 'XML-Parser-JAAyer.21' message 'empty log message' id '5200e3fd-4d92-4e7b-97b6-bebb3346a9ff' date '02/14/2010' time '21:32:11' author 'JAAyer' ancestors ((name 'XML-Parser-Alexandre_Bergel.20' message 'improved:
XMLElement>>at: aSymbol
    ^ self attributeAt: aSymbol ifAbsent: ['''']

Thanks goes to J. A. Ayer' id 'd08d8266-6ec2-4ef8-9340-95c1a9e40b29' date '01/21/2010' time '22:31:56' author 'Alexandre Bergel' ancestors ((name 'XML-Parser-Alexandre_Bergel.20' message 'improved:
XMLElement>>at: aSymbol
    ^ self attributeAt: aSymbol ifAbsent: ['''']

Thanks goes to J. A. Ayer' id '6959f5c1-ad74-4698-bf08-95fcb9956867' date '01/21/2010' time '22:15:16' author 'Alexandre Bergel' ancestors () stepChildren ())) stepChildren ())(name 'XML-Parser-JAAyer.2' message 'empty log message' id '3d72c1fc-082d-49b8-ab01-0dd17aae834a' date '02/14/2010' time '20:24:39' author 'JAAyer' ancestors ((name 'XML-Parser-JAAyer.1' message 'empty log message' id '2c6605c5-4d63-43e9-b08e-c19b079fce7c' date '02/14/2010' time '20:15:03' author 'JAAyer' ancestors () stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())(name 'XML-Parser-GeorgeHerolyants.21' message 'Writer fixed in order to make output more readable (use message #prettyPrint to enable this).' id '6009a1d8-4fcd-8946-8d5b-7294b2ab2f4b' date '01/10/2010' time '20:37:54' author 'GeorgeHerolyants' ancestors ((name 'XML-Parser-GeorgeHerolyants.20' message 'Parser fixed to perform line endings normalization accordingly to the XML specification; test proposed by Avi Bryant added (see this thread http://aspn.activestate.com/ASPN/Mail/Message/squeak/1750442). ' id 'c2f734ef-ec77-f244-861d-41d2dd496053' date '01/09/2010' time '23:56:50' author 'GeorgeHerolyants' ancestors ((name 'XML-Parser-Alexandre_Bergel.19' message 'Minor change in XMLElement>>contentString.
' id 'a8fe6c4d-fa69-4921-8ef5-f939749ee78b' date '11/26/2009' time '17:46:02' author 'Alexandre Bergel' ancestors ((name 'XML-Parser-Alexandre_Bergel.18' message 'Minor change in XMLElement>>contentString.
' id '18b81684-ce78-400f-84ff-b8fecce203a8' date '11/26/2009' time '17:45:31' author 'Alexandre Bergel' ancestors ((name 'XML-Parser-Alexandre_Bergel.17' message 'added some accessing methods. These methods are used by Pastell' id 'fa3a8d81-25f6-4ec3-9c3e-db3fab6a94c5' date '06/01/2009' time '10:34:41' author 'Alexandre.Bergel' ancestors ((name 'XML-Parser-Alexandre_Bergel.16' message 'Added a comment in XMLParser' id '8e4d0555-50fc-4fb9-95f1-26ab6c40dfd8' date '06/01/2009' time '10:05:30' author 'Alexandre.Bergel' ancestors ((name 'XML-Parser-AlexandreBergel.15' message 'Added a class XMLParserTest' id '534ddcca-c33e-4e81-8b5d-78e29523b8bf' date '01/29/2009' time '14:39:56' author 'AlexandreBergel' ancestors ((name 'XML-Parser-mir.14' message 'fixed contentsDo:' id '6539d61e-ed4a-9244-8b85-c4e5417bbeb1' date '01/03/2008' time '14:29:51' author 'mir' ancestors ((name 'XML-Parser-mir.13' message 'added support for Pastell/XPath access (parent)' id '3da00a19-4cc5-cb49-9ef7-b40699f964a2' date '11/29/2007' time '14:46:38' author 'mir' ancestors ((name 'XML-Parser-mir.12' message 'fixed issues with entity expansion and parsing of nested streams' id 'a8ef7705-934c-e54f-9fea-17e07f008132' date '11/23/2007' time '20:06:23' author 'mir' ancestors ((name 'XML-Parser-mir.11' message 'fixed addElement:
changed elements inst var to elementsAndContents to avoid confusion.' id '130566fb-ad3a-de43-abb3-4a56c6e3e23d' date '11/14/2007' time '17:31:48' author 'mir' ancestors ((name 'XML-Parser-mir.10' message 'Fixed a number of issues (see below) and converted _ to :=.

There are two major changes in this version:
whitespace handling and the unification of elements and contents.
For backward compatibility elements and contents methods preserve their semantics.
elementsAndContents and elementsAndContentsDo: access the new unified collection

Some of the fixes rely on fixes in 3.8.2 or 3.10, most prominently 
String class>>findFirstInString:inSet:startingAt:

http://bugs.squeak.org/view.php?id=32
http://bugs.squeak.org/view.php?id=33
http://bugs.squeak.org/view.php?id=34
http://bugs.squeak.org/view.php?id=547
http://bugs.squeak.org/view.php?id=888
http://bugs.squeak.org/view.php?id=928
http://bugs.squeak.org/view.php?id=3082
http://bugs.squeak.org/view.php?id=3083
http://bugs.squeak.org/view.php?id=6746

' id '9bd978ae-8e19-4946-90f6-5f01ae28567c' date '10/31/2007' time '18:39:12' author 'mir' ancestors ((name 'XML-Parser-mir.9' message 'language environment fix based on a fix by [:masashi | ^umezawa]' id '83b817db-e1bf-5849-aba6-b7c5c0d28b74' date '07/14/2006' time '11:58:32' author 'mir' ancestors ((name 'XML-Parser-mir.8' message 'unicode fix from [:masashi | ^umezawa] 
example fix
added namespace aware parser invocations
indenting XMLWriter
lazy init for attributes' id 'afc3bcf2-bac2-bb4b-b17c-7f3a47d1564e' date '07/14/2006' time '11:32:37' author 'mir' ancestors ((name 'XML-Parser-bf.7' message '- fix reading whitespaces in closing tag' id 'b03ed7b2-d6ce-11da-9220-000d93ca8ba0' date '04/28/2006' time '17:50:16' author 'bf' ancestors ((name 'XML-Parser-thf.6' message 'should now work clean with encoding Settings' id '490456fd-4f78-ee4c-b4ab-5b1376ee5cf5' date '02/03/2006' time '14:38:29' author 'thf' ancestors ((name 'XML-Parser-thf.5' message '' id '817bbe38-4e92-4d6a-a8e1-daf812ed7567' date '09/07/2005' time '13:28:28' author 'thf' ancestors ((name 'XML-Parser-thf.4' message 'set Encoder for XMLWriter' id '959e9e51-7af2-4634-ad91-d1f32e811c5f' date '09/01/2005' time '15:45:41' author 'thf' ancestors ((name 'XML-Parser-thf.3' message 'sets encoding for Files in Squeak 3.8' id 'c3c3927d-8d5c-41c5-bb52-df8065d5d727' date '08/31/2005' time '12:17:02' author 'thf' ancestors () stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())(name 'XML-Parser-mir.3' message 'Yaxo 2.2 release

with fixes by 
umejava@mars.dti.ne.jp (unicode)
mas@wellthot.com (attribute init)
nika.nospam@kassube.de (dom parser example)' id 'ad602358-9389-be47-bcdf-a6343b00b955' date '12/19/2005' time '16:17:02' author 'mir' ancestors ((name 'XML-Parser-mir.2' message 'Yaxo 2.1 release' id 'fcd07bb1-1c15-2f48-92a3-b0aedaaf24a9' date '12/22/2004' time '11:14:33' author 'mir' ancestors ((name 'XML-Parser-mir.1' message 'Yaxo release 2.1' id '9be3532f-fdab-d54d-bc58-84e96735340c' date '12/22/2004' time '10:32:36' author 'mir' ancestors () stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())