CHANGES file for XML::ValidWriter and XML::AutoWriter

0.38 Tue Mar  9 01:55:33 EST 2004
   - phashes removed

0.36 Mon Dec 18 07:21:10 EST 2000
   - Fixed bug where ']' or ']]' at the end of CDATA would not be emitted
   before a start or empty tag (ie in mixed content).

0.33-v.035 Fri Dec 15 07:02:36 EST 2000
   - XML::ValidWriter and XML::AutoWriter now croak if any control codes
     other than TAB, CR, or newline (9, 10, 13) are passed.
   - Fixed a bug that kicked out of PCDATA escape mode in to CDATA too easily.

0.32 Fri Dec 15 07:02:36 EST 2000
   - Reduced number of times '>' is escaped in PCDATA.  It still gets
     turned into '>' gratuitously occasionally, but that's a really
     minor nit, IMHO.

0.3 Wed Aug  9 11:53:59 EDT 2000
   - Fixed a bug in escaping of CDATA end tags that are split across
     multiple parameters to or calls to characters().  This will use
     a lot of memory if passing big sets of parameters to characters(),
     which actually is what you're supposed to do to allow the CDATA
     escape guesser to guess more accurately.  If this is a problem,
     we'll fix it.
   - Added ability to pass OUTPUT => '' to XML::ValidWriter
     and subclasses, and have it opened and closed.
   - Fixed some typos in documentation
   - Allowed XML::Doctype's import() function to call constructors for
     subclasses of XML::Doctype
   - Fixed a bug that prevented PCDATA sections from finding an
     appropriate path.
   - Removed assumption that undeclared elements can contain ANY.
   - Added check to make sure the root node is at least referred-to.

0.2 Fri Aug  4 13:49:19 EDT 2000
   - fixes a few bugs
   - adds more validity checks
   - renames XML::DTD to be XML::Doctype,
   - provides setDataMode which will insert newlines around tags, but never
     in PCDATA content that is not mixed with elements.  An example is below.
   - optimizes '<foo></foo>' to be '<foo />' on output
   - autodetects whether or not to use <![CDATA[...]]> escaping for element
   - alters the exported element-name functions so that, if a tag 'foo' is
     referenced in the DTD, doing a C<use XML::ValidWriter qw( :dtd_tags )>,
     you get:

       start_foo( [attr => 'val', ...] ) ;
       end_foo() ;
       empty_foo( [attr => 'var', ...] ) ;
       foo( $content[, attr=> 'val', ...] ) ;

     You can C<use> subclasses of XML::ValidWriter in this way, too.

   - AUTOLOADs methods corresponding to the above exported functions.  This
     is done on a per-instance basis, so as to handle both intermediate
     subclasses, where the class namespace should not be corrupted, and
     final subclasses, where you this functionality is actually used).
     Here's a real piece of code as an example, given that the
     tags <date>, <repository_type>, <name>, <type>, <p4_info> etc. are all
     mentioned in the DTD:, and that $w ISA XML::AutoWriter (which ISA

      if ( $self->none_seen ) {
	 $w->setDataMode( 1 ) ;
	 $w->xmlDecl ;
	 $w->date( _ISO8601 ) ;
	 $w->repository_type(        $self->header->{rep_type} ) ;
	 $w->repository_description( $self->header->{rep_desc} ) ;

      my $saw = $self->seen( $r ) ;

      my $fn = $r->{filename} ;

      $w->start_rev ;
      $w->name(       $fn             ) ;
      $w->type(       $r->{type}      ) ;
      $w->p4_info() ;

     The AUTOLOAD idea stolen from XML::Generator.

   - provides setDataMode which will insert newlines around tags, except for
     elements that contain only PCDATA.  The XML generated by the
     above code in DATAMODE is:

   <?xml version="1.0"?>
   <revml version="1.22">
      <date>2000-08-04 17:35:57Z</date>
      <repository_description>User name: barries
   Client name: barries
   Client root: /home/barries/src/
   Current directory: /home/barries/src/foo
   Client address:
   Server address: localhost:1666
   Server root: .
   Server version: P4D/LINUX52X86/99.2/14042 (2000/01/28)
   Server license: none
	 <p4_info />