Hello community,

here is the log from the commit of package perl-Tree-DAG_Node for 
openSUSE:Factory checked in at 2013-10-21 15:14:59
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/perl-Tree-DAG_Node (Old)
 and      /work/SRC/openSUSE:Factory/.perl-Tree-DAG_Node.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "perl-Tree-DAG_Node"

Changes:
--------
--- /work/SRC/openSUSE:Factory/perl-Tree-DAG_Node/perl-Tree-DAG_Node.changes    
2013-07-30 18:46:33.000000000 +0200
+++ 
/work/SRC/openSUSE:Factory/.perl-Tree-DAG_Node.new/perl-Tree-DAG_Node.changes   
    2013-10-21 15:15:00.000000000 +0200
@@ -1,0 +2,42 @@
+Fri Oct  4 09:12:08 UTC 2013 - [email protected]
+
+- updated to 1.18
+        - No changes, code or otherwise, except for the version # in the *.pm, 
this file, and Changelog.ini.
+        - Somehow a corrupted version got uploaded to search.cpan.org, so I've 
just changed the version #.
+                The file on MetaCPAN was fine.
+        - Thanx to Rob (Sisyphus) for reporting this.
+ 
+ 1.17  Mon Sep 16 15:24:00 2013
+        - Write test temp files in :raw mode as well as utf-8, for MS Windows 
users.
+        - Take the opportunity to change all utf8 to utf-8, as per the docs 
for Encode,
+                except for 'use warnings  qw(FATAL utf8);', which doesn't 
accept utf-8 :-(.
+ 
+ 1.16  Mon Sep  9 09;26:00 2013
+        - Accept a patch (slightly modified by me) from Tom Molesworth (see 
RT#88501):
+                Remove 'use open qw(:std :utf8);' because of its global effect.
+                Replace Perl6::Slurp with File::Slurp, using the latter's 
binmode option for the encoding.
+                Fix docs where I'd erroneously said File::Slurp didn't support 
utf8.
+ 
+ 1.15  Fri Sep  6 11:10:00 2013
+        - Replace Path::Tiny with File::Spec, because the former's list of 
dependencies is soooo long :-(.
+                Changed files: t/read.tree.t, Build.PL and Makefile.PL.
+                See: RT#88435 for an explanation.
+        - Move t/pod.t to xt/author/pod.t.
+ 
+ 1.14  Wed Sep  4 13:44:00 2013
+        - Document the copy() method.
+        - Patch the copy() method so it respects the {no_attribute_copy => 1} 
option.
+        - Add method read_tree(), for text files. It uses Perl6::Slurp (which 
supports utf8).
+        - Add methods read_attributes() and string2hashref($s) for use by 
read_tree().
+        - Add t/read.tree.t to test read_tree().
+        - Add t/tree.utf8.attrbiutes.txt, in utf8, for use by t/read.tree.t.
+        - Add t/tree.with.attributes.txt and t/tree.without.attributes.txt for 
use by t/read.tree.t.
+        - Make Perl V 5.8.1 a pre-req so we have access to the utf8 pragma.
+ 
+ 1.13  Mon Aug 12 17:16:00 2013
+        - Change the values accepted for the no_attributes option from undef 
and 1 to 0 and 1.
+                If undef is used, it becomes 0, so pre-existing code will not 
change behaviour.
+                This makes it easier to pass 0 or 1 from the command line, 
since there is no default value available.
+
+
+-------------------------------------------------------------------

Old:
----
  Tree-DAG_Node-1.12.tgz

New:
----
  Tree-DAG_Node-1.18.tgz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ perl-Tree-DAG_Node.spec ++++++
--- /var/tmp/diff_new_pack.K69Z4i/_old  2013-10-21 15:15:01.000000000 +0200
+++ /var/tmp/diff_new_pack.K69Z4i/_new  2013-10-21 15:15:01.000000000 +0200
@@ -17,7 +17,7 @@
 
 
 Name:           perl-Tree-DAG_Node
-Version:        1.12
+Version:        1.18
 Release:        0
 %define cpan_name Tree-DAG_Node
 Summary:        An N-ary tree
@@ -29,9 +29,15 @@
 BuildRoot:      %{_tmppath}/%{name}-%{version}-build
 BuildRequires:  perl
 BuildRequires:  perl-macros
+BuildRequires:  perl(File::Slurp) >= 9999.19
+BuildRequires:  perl(File::Spec) >= 3.4
+BuildRequires:  perl(File::Temp) >= 0.2301
 BuildRequires:  perl(Module::Build) >= 0.38
 BuildRequires:  perl(Test::More) >= 0.98
 #BuildRequires: perl(Tree::DAG_Node)
+Requires:       perl(File::Slurp) >= 9999.19
+Requires:       perl(File::Spec) >= 3.4
+Requires:       perl(File::Temp) >= 0.2301
 %{perl_requires}
 
 %description
@@ -122,6 +128,6 @@
 
 %files -f %{name}.files
 %defattr(-,root,root,755)
-%doc Changelog.ini Changes README scripts
+%doc Changelog.ini Changes README scripts xt
 
 %changelog

++++++ Tree-DAG_Node-1.12.tgz -> Tree-DAG_Node-1.18.tgz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Tree-DAG_Node-1.12/Build.PL 
new/Tree-DAG_Node-1.18/Build.PL
--- old/Tree-DAG_Node-1.12/Build.PL     2013-07-03 08:43:17.000000000 +0200
+++ new/Tree-DAG_Node-1.18/Build.PL     2013-09-19 06:36:07.000000000 +0200
@@ -1,3 +1,6 @@
+use strict;
+use warnings;
+
 use Module::Build;
 
 Module::Build -> new
@@ -8,16 +11,20 @@
        dist_author    => 'Sean M. Burke <[email protected]>',
        build_requires =>
        {
-               Test::More => 0.98,
-#              Test::Pod  => 1.45, # Make it optional. See t/pod.t.
+               'Test::More' => 0.98,
+#              'Test::Pod'  => 1.45, # Make it optional. See t/pod.t.
        },
        configure_requires =>
        {
-               Module::Build => 0.3800,
+               'Module::Build' => 0.3800,
        },
        requires =>
        {
-               strict   => 0,
-               warnings => 0,
+               'File::Spec'  => 3.40,
+               'File::Temp'  => 0.2301,
+               'perl'        => '5.008001', # For the utf-8 stuff.
+               'File::Slurp' => 9999.19,
+               'strict'      => 0,
+               'warnings'    => 0,
        },
 ) -> create_build_script();
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Tree-DAG_Node-1.12/Changelog.ini 
new/Tree-DAG_Node-1.18/Changelog.ini
--- old/Tree-DAG_Node-1.12/Changelog.ini        2013-07-03 08:43:17.000000000 
+0200
+++ new/Tree-DAG_Node-1.18/Changelog.ini        2013-09-19 06:36:07.000000000 
+0200
@@ -3,6 +3,58 @@
 Changelog.Creator=Module::Metadata::Changes V 2.05
 Changelog.Parser=Config::IniFiles V 2.78
 
+[V 1.18]
+Date=2013-09-19T14:24:00
+Comments= <<EOT
+- No changes, code or otherwise, except for the version # in the *.pm, this 
file, and Changelog.ini.
+- Somehow a corrupted version got uploaded to search.cpan.org, so I've just 
changed the version #.
+The file on MetaCPAN was fine.
+- Thanx to Rob (Sisyphus) for reporting this.
+EOT
+
+[V 1.17]
+Date=2013-09-16T15:24:00
+Comments= <<EOT
+- Write test temp files in :raw mode as well as utf-8, for MS Windows users.
+- Take the opportunity to change all utf8 to utf-8, as per the docs for Encode,
+except for 'use warnings qw(FATAL utf8);', which doesn't accept utf-8 :-(.
+1.16 Mon Sep 9 09;26:00 2013
+- Accept a patch (slightly modified by me) from Tom Molesworth (see RT#88501):
+Remove 'use open qw(:std :utf8);' because of its global effect.
+Replace Perl6::Slurp with File::Slurp, using the latter's binmode option for 
the encoding.
+Fix docs where I'd erroneously said File::Slurp didn't support utf8.
+EOT
+
+[V 1.15]
+Date=2013-09-06T11:10:00
+Comments= <<EOT
+- Replace Path::Tiny with File::Spec, because the former's list of 
dependencies is soooo long :-(.
+Changed files: t/read.tree.t, Build.PL and Makefile.PL.
+See: RT#88435 for an explanation.
+- Move t/pod.t to xt/author/pod.t.
+EOT
+
+[V 1.14]
+Date=2013-09-04T13:44:00
+Comments= <<EOT
+- Document the copy() method.
+- Patch the copy() method so it respects the {no_attribute_copy => 1} option.
+- Add method read_tree(), for text files. It uses Perl6::Slurp (which supports 
utf8).
+- Add methods read_attributes() and string2hashref($s) for use by read_tree().
+- Add t/read.tree.t to test read_tree().
+- Add t/tree.utf8.attrbiutes.txt, in utf8, for use by t/read.tree.t.
+- Add t/tree.with.attributes.txt and t/tree.without.attributes.txt for use by 
t/read.tree.t.
+- Make Perl V 5.8.1 a pre-req so we have access to the utf8 pragma.
+EOT
+
+[V 1.13]
+Date=2013-08-12T17:16:00
+Comments= <<EOT
+- Change the values accepted for the no_attributes option from undef and 1 to 
0 and 1.
+If undef is used, it becomes 0, so pre-existing code will not change behaviour.
+This makes it easier to pass 0 or 1 from the command line, since there is no 
default value available.
+EOT
+
 [V 1.12]
 Date=2013-07-03T16:38:00
 Comments= <<EOT
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Tree-DAG_Node-1.12/Changes 
new/Tree-DAG_Node-1.18/Changes
--- old/Tree-DAG_Node-1.12/Changes      2013-07-03 08:43:17.000000000 +0200
+++ new/Tree-DAG_Node-1.18/Changes      2013-09-19 06:36:07.000000000 +0200
@@ -1,5 +1,43 @@
 Revision history for Perl module Tree::DAG_Node.
 
+1.18  Thu Sep 19 14:24:00 2013
+       - No changes, code or otherwise, except for the version # in the *.pm, 
this file, and Changelog.ini.
+       - Somehow a corrupted version got uploaded to search.cpan.org, so I've 
just changed the version #.
+               The file on MetaCPAN was fine.
+       - Thanx to Rob (Sisyphus) for reporting this.
+
+1.17  Mon Sep 16 15:24:00 2013
+       - Write test temp files in :raw mode as well as utf-8, for MS Windows 
users.
+       - Take the opportunity to change all utf8 to utf-8, as per the docs for 
Encode,
+               except for 'use warnings  qw(FATAL utf8);', which doesn't 
accept utf-8 :-(.
+
+1.16  Mon Sep  9 09;26:00 2013
+       - Accept a patch (slightly modified by me) from Tom Molesworth (see 
RT#88501):
+               Remove 'use open qw(:std :utf8);' because of its global effect.
+               Replace Perl6::Slurp with File::Slurp, using the latter's 
binmode option for the encoding.
+               Fix docs where I'd erroneously said File::Slurp didn't support 
utf8.
+
+1.15  Fri Sep  6 11:10:00 2013
+       - Replace Path::Tiny with File::Spec, because the former's list of 
dependencies is soooo long :-(.
+               Changed files: t/read.tree.t, Build.PL and Makefile.PL.
+               See: RT#88435 for an explanation.
+       - Move t/pod.t to xt/author/pod.t.
+
+1.14  Wed Sep  4 13:44:00 2013
+       - Document the copy() method.
+       - Patch the copy() method so it respects the {no_attribute_copy => 1} 
option.
+       - Add method read_tree(), for text files. It uses Perl6::Slurp (which 
supports utf8).
+       - Add methods read_attributes() and string2hashref($s) for use by 
read_tree().
+       - Add t/read.tree.t to test read_tree().
+       - Add t/tree.utf8.attrbiutes.txt, in utf8, for use by t/read.tree.t.
+       - Add t/tree.with.attributes.txt and t/tree.without.attributes.txt for 
use by t/read.tree.t.
+       - Make Perl V 5.8.1 a pre-req so we have access to the utf8 pragma.
+
+1.13  Mon Aug 12 17:16:00 2013
+       - Change the values accepted for the no_attributes option from undef 
and 1 to 0 and 1.
+               If undef is used, it becomes 0, so pre-existing code will not 
change behaviour.
+               This makes it easier to pass 0 or 1 from the command line, 
since there is no default value available.
+
 1.12  Wed Jul  3 16:38:00 2013
        - Change text in README referring to licence to match text in body of 
source, since it was in conflict
                with the Artistic Licence V 2.0.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Tree-DAG_Node-1.12/MANIFEST 
new/Tree-DAG_Node-1.18/MANIFEST
--- old/Tree-DAG_Node-1.12/MANIFEST     2013-07-03 08:43:17.000000000 +0200
+++ new/Tree-DAG_Node-1.18/MANIFEST     2013-09-19 06:36:07.000000000 +0200
@@ -11,4 +11,8 @@
 t/about.perl.t
 t/cut.and.paste.subtrees.t
 t/load.t
-t/pod.t
+t/read.tree.t
+t/tree.utf8.attributes.txt
+t/tree.with.attributes.txt
+t/tree.without.attributes.txt
+xt/author/pod.t
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Tree-DAG_Node-1.12/META.json 
new/Tree-DAG_Node-1.18/META.json
--- old/Tree-DAG_Node-1.12/META.json    2013-07-03 08:43:17.000000000 +0200
+++ new/Tree-DAG_Node-1.18/META.json    2013-09-19 06:36:07.000000000 +0200
@@ -26,6 +26,10 @@
       },
       "runtime" : {
          "requires" : {
+            "File::Slurp" : "9999.19",
+            "File::Spec" : "3.4",
+            "File::Temp" : "0.2301",
+            "perl" : "5.008001",
             "strict" : "0",
             "warnings" : "0"
          }
@@ -34,7 +38,7 @@
    "provides" : {
       "Tree::DAG_Node" : {
          "file" : "lib/Tree/DAG_Node.pm",
-         "version" : "1.12"
+         "version" : "1.18"
       }
    },
    "release_status" : "stable",
@@ -43,5 +47,5 @@
          "http://www.perlfoundation.org/artistic_license_2_0";
       ]
    },
-   "version" : "1.12"
+   "version" : "1.18"
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Tree-DAG_Node-1.12/META.yml 
new/Tree-DAG_Node-1.18/META.yml
--- old/Tree-DAG_Node-1.12/META.yml     2013-07-03 08:43:17.000000000 +0200
+++ new/Tree-DAG_Node-1.18/META.yml     2013-09-19 06:36:07.000000000 +0200
@@ -16,10 +16,14 @@
 provides:
   Tree::DAG_Node:
     file: lib/Tree/DAG_Node.pm
-    version: 1.12
+    version: 1.18
 requires:
+  File::Slurp: 9999.19
+  File::Spec: 3.4
+  File::Temp: 0.2301
+  perl: 5.008001
   strict: 0
   warnings: 0
 resources:
   license: http://www.perlfoundation.org/artistic_license_2_0
-version: 1.12
+version: 1.18
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Tree-DAG_Node-1.12/Makefile.PL 
new/Tree-DAG_Node-1.18/Makefile.PL
--- old/Tree-DAG_Node-1.12/Makefile.PL  2013-07-03 08:43:17.000000000 +0200
+++ new/Tree-DAG_Node-1.18/Makefile.PL  2013-09-19 06:36:07.000000000 +0200
@@ -1,3 +1,6 @@
+use strict;
+use warnings;
+
 use ExtUtils::MakeMaker;
 
 # See lib/ExtUtils/MakeMaker.pm for details of how to influence
@@ -5,11 +8,8 @@
 
 WriteMakefile
 (
-       ($] ge '5.005') ?
-       (
-               ABSTRACT => 'An N-ary tree',
-               AUTHOR   => 'Sean M. Burke <[email protected]>',
-       ) : (),
+       ABSTRACT => 'An N-ary tree',
+       AUTHOR   => 'Sean M. Burke <[email protected]>',
        clean =>
        {
                FILES => 'blib/* Makefile MANIFEST Tree-DAG_Node-*'
@@ -19,16 +19,20 @@
                COMPRESS => 'gzip',
                SUFFIX   => 'gz'
        },
-       DISTNAME  => 'Tree-DAG_Node',
-       NAME      => 'Tree::DAG_Node',
-       LICENSE   => 'artistic_2',
-       PL_FILES  => {},
-       PREREQ_PM =>
+       DISTNAME         => 'Tree-DAG_Node',
+       LICENSE          => 'artistic_2',
+       MIN_PERL_VERSION => '5.008001', # For the utf-8 stuff.
+       NAME             => 'Tree::DAG_Node',
+       PL_FILES         => {},
+       PREREQ_PM        =>
        {
-               strict     => 0,
-               Test::More => 0.98,
-##             Test::Pod  => 1.45, # Make it optional. See t/pod.t. # Make it 
optional. See t/pod.t
-               warnings   => 0,
+               'File::Spec'  => 3.40,
+               'File::Temp'  => 0.2301,
+               'File::Slurp' => 9999.19,
+               'strict'      => 0,
+               'Test::More'  => 0.98,
+##             'Test::Pod'   => 1.45, # Make it optional. See t/pod.t. # Make 
it optional. See t/pod.t
+               'warnings'    => 0,
        },
        VERSION_FROM => 'lib/Tree/DAG_Node.pm',
 );
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Tree-DAG_Node-1.12/lib/Tree/DAG_Node.pm 
new/Tree-DAG_Node-1.18/lib/Tree/DAG_Node.pm
--- old/Tree-DAG_Node-1.12/lib/Tree/DAG_Node.pm 2013-07-03 08:43:17.000000000 
+0200
+++ new/Tree-DAG_Node-1.18/lib/Tree/DAG_Node.pm 2013-09-19 06:36:07.000000000 
+0200
@@ -2,9 +2,12 @@
 
 use strict;
 use warnings;
+use warnings  qw(FATAL utf8); # Fatalize encoding glitches.
 
 our $Debug   = 0;
-our $VERSION = '1.12';
+our $VERSION = '1.18';
+
+use File::Slurp; # For read_file().
 
 # -----------------------------------------------
 
@@ -280,35 +283,55 @@
 
 # -----------------------------------------------
 
-sub copy {
-  my($from,$o) = @_[0,1];
-  $o = {} unless ref $o;
+sub copy
+{
+       my($from, $o) = @_[0,1];
+       $o = {} unless ref $o;
 
-  # Straight dupe, and bless into same class:
-  my $to = bless { %$from }, ref($from);
+       # Straight dup, and bless into same class.
 
-  # Null out linkages.
-  $to->_init_mother;
-  $to->_init_daughters;
-
-  # dupe the 'attributes' attribute:
-  unless($o->{'no_attribute_copy'}) {
-    my $attrib_copy = ref($to->{'attributes'});
-    if($attrib_copy) {
-      if($attrib_copy eq 'HASH') {
-        $to->{'attributes'} = { %{$to->{'attributes'}} };
-        # dupe the hashref
-      } elsif ($attrib_copy = UNIVERSAL::can($to->{'attributes'}, 'copy') ) {
-        # $attrib_copy now points to the copier method
-        $to->{'attributes'} = &{$attrib_copy}($from);
-      } # otherwise I don't know how to copy it; leave as is
-    }
-  }
-  $o->{'from_to'}->{$from} = $to; # SECRET VOODOO
-    # ...autovivifies an anon hashref for 'from_to' if need be
-    # This is here in case I later want/need a table corresponding
-    # old nodes to new.
-  return $to;
+       my $to = bless { %$from }, ref($from);
+
+       # Null out linkages.
+
+       $to -> _init_mother;
+       $to -> _init_daughters;
+
+       # Dup the 'attributes' attribute.
+
+       if ($$o{'no_attribute_copy'})
+       {
+               $$to{attributes} = {};
+       }
+       else
+       {
+               my $attrib_copy = ref($to->{'attributes'});
+
+               if ($attrib_copy)
+               {
+                       if ($attrib_copy eq 'HASH')
+                       {
+                               # Dup the hashref.
+
+                               $$to{'attributes'} = { %{$$to{'attributes'}} };
+                       }
+                       elsif ($attrib_copy = 
UNIVERSAL::can($to->{'attributes'}, 'copy') )
+                       {
+                               # $attrib_copy now points to the copier method.
+
+                               $$to{'attributes'} = &{$attrib_copy}($from);
+
+                       } # Otherwise I don't know how to copy it; leave as is.
+               }
+       }
+
+       $$o{'from_to'}{$from} = $to; # SECRET VOODOO
+
+       # ...autovivifies an anon hashref for 'from_to' if need be
+       # This is here in case I later want/need a table corresponding
+       # old nodes to new.
+
+       return $to;
 }
 
 # -----------------------------------------------
@@ -652,7 +675,7 @@
 {
        my($self, $options, $node) = @_;
        my($s) = $node -> name;
-       $s     .= '. Attributes: ' . $self -> hashref2string($node -> 
attributes) if (! defined $$options{no_attributes});
+       $s     .= '. Attributes: ' . $self -> hashref2string($node -> 
attributes) if (! $$options{no_attributes});
 
        return $s;
 
@@ -1030,6 +1053,88 @@
 
 # -----------------------------------------------
 
+sub read_attributes
+{
+       my($self, $s) = @_;
+
+       my($attributes);
+       my($name);
+
+       if ($s =~ /^(.+). Attributes: ({.*})$/)
+       {
+               ($name, $attributes) = ($1, $self -> string2hashref($2) );
+       }
+       else
+       {
+               ($name, $attributes) = ($s, {});
+       }
+
+       return Tree::DAG_Node -> new({name => $name, attributes => 
$attributes});
+
+} # End of read_attributes.
+
+# -----------------------------------------------
+
+sub read_tree
+{
+       my($self, $file_name) = @_;
+       my($count)       = 0;
+       my($last_indent) = 0;
+
+       my($indent);
+       my($node);
+       my($offset);
+       my($root);
+       my(@stack);
+       my($tos);
+
+       for my $line (read_file($file_name, {chomp => 1, binmode => 
':encoding(utf-8)'}) )
+       {
+               $count++;
+
+               if ($count == 1)
+               {
+                       $root = $node = $self -> read_attributes($line);
+               }
+               else
+               {
+                       $indent = index($line, '---');
+
+                       if ($indent > $last_indent)
+                       {
+                               $tos = $node;
+
+                               push @stack, $node, $indent;
+                       }
+                       elsif ($indent < $last_indent)
+                       {
+                               $offset = $last_indent;
+
+                               while ($offset > $indent)
+                               {
+                                       $offset = pop @stack;
+                                       $tos    = pop @stack;
+                               }
+
+                               push @stack, $tos, $offset;
+                       }
+
+                       # Warning: The next line must set $node.
+                       # Don't put the RHS into the call to add_daughter()!
+
+                       $node        = $self -> read_attributes(substr($line, 
$indent + 3) );
+                       $last_indent = $indent;
+
+                       $tos -> add_daughter($node);
+               }
+       }
+
+       return $root;
+
+} # End of read_tree.
+
+# -----------------------------------------------
+
 sub remove_daughters { # write-only method
   my($mother, @daughters) = @_;
   die "mother must be an object!" unless ref $mother;
@@ -1229,6 +1334,58 @@
 
 # -----------------------------------------------
 
+sub string2hashref
+{
+       my($self, $s) = @_;
+       $s            ||= '';
+       my($result)   = {};
+
+       my($k);
+       my($v);
+
+       if ($s)
+       {
+               # Expect:
+               # 1: The presence of the comma in "(',')" complicates things, 
so we can't use split(/\s*,\s*/, $s).
+               #       {bracketed_name => "0", quantifier => "", real_name => 
"(',')"}
+               # 2: The presence of "=>" complicates things, so we can't use 
split(/\s*=>\s*/).
+               #       {bracketed_name => "0", quantifier => "", real_name => 
"=>"}
+               # 3: So, assume ', ' is the outer separator, and then ' => ' is 
the inner separator.
+
+               # Firstly, clean up the input, just to be safe.
+               # None of these will match output from hashref2string($h).
+
+               $s =~ s/^\s+\{/\{/;
+               $s =~ s/^\{\s+/\{/;
+               $s =~ s/\}\s+$/\}/;
+               $s =~ s/\s+\}$/\}/;
+
+               if ($s =~ m/^\{\s*(.*)\}$/)
+               {
+                       my(@attr) = map
+                                               {
+                                                       ($k, $v) = 
split(/\s=>\s/);
+                                                       $v       =~ 
s/^([\"\'])(.*)\1$/$2/;
+                                                       ($k => $v);
+                                               } split(/\s*,\s+/, $1);
+
+                       if (@attr)
+                       {
+                               $result = {@attr};
+                       }
+               }
+               else
+               {
+                       die "Invalid syntax for hashref: $s";
+               }
+       }
+
+       return $result;
+
+} # End of string2hashref.
+
+# -----------------------------------------------
+
 sub tree_to_simple_lol {
   # I haven't /rigorously/ tested this.
   my $root = $_[0];
@@ -1387,8 +1544,9 @@
 sub tree2string
 {
        my($self, $options, $tree) = @_;
-       $options ||= {};
-       $tree    ||= $self;
+       $options                   ||= {};
+       $$options{no_attributes}   ||= 0;
+       $tree                      ||= $self;
 
        my(@out);
        my(@vert_dashes);
@@ -1531,6 +1689,13 @@
        $new_daughter->name("More");
        ...
 
+Using with utf-8 data:
+
+       read_tree($file_name) works with utf-8 data. See t/read.tree.t and 
t/tree.utf8.attributes.txt.
+       Such a file can be created by redirecting the output of tree2string() 
to a file of type utf-8.
+
+See the docs for Encode for the difference between utf8 and utf-8. In brief, 
use utf-8.
+
 =head1 DESCRIPTION
 
 This class encapsulates/makes/manipulates objects that represent nodes
@@ -1724,7 +1889,7 @@
 \@some_others vs @some_others).  It just complicates things for the
 programmer and the user, without making either appreciably happier.
 
-See however the comments under L</new($hashref)> for options supported in the 
call to new().
+See however the comments under L</new($hashref)> for options newly supported 
in the call to new().
 
 (This is not to say that options in general for a constructor are bad
 -- L</random_network($options)>, discussed far below, necessarily takes 
options.
@@ -1996,6 +2161,22 @@
 As a degenerate case, if LIST is empty, returns $node's mother;
 that'll be undef if $node is root.
 
+=head2 copy($option)
+
+Returns a copy the calling node (the invocant). E.g.: my($copy) = $node -> 
copy;
+
+$option is a hashref of options, with these (key => value) pairs:
+
+=over 4
+
+=item o no_attribute_copy => $Boolean
+
+If set to 1, do not copy the node's attributes.
+
+If not specified, defaults to 0, which copies attributes.
+
+=back
+
 =head2 copy_at_and_under()
 
 =head2 copy_at_and_under($options)
@@ -2222,9 +2403,9 @@
 
 =over 4
 
-=item o no_attributes
+=item o no_attributes => $Boolean
 
-If given a true value, the node's attributes are not included in the string 
returned.
+If 1, the node's attributes are not included in the string returned.
 
 Default: 0 (include attributes).
 
@@ -2465,9 +2646,9 @@
 
 =over 4
 
-=item o no_attributes
+=item o no_attributes => $Boolean
 
-If given a true value, the node's attributes are not included in the string 
returned.
+If 1, the node's attributes are not included in the string returned.
 
 Default: 0 (include attributes).
 
@@ -2521,6 +2702,36 @@
 
 =back
 
+=head2 read_attributes($s)
+
+Parses the string $s and extracts the name and attributes, assuming the format 
is as generated by
+L</tree2string([$options], [$some_tree])>.
+
+This bascially means the string was generated by L</hashref2string($hashref)>.
+
+Attributes may be absent, in which case they default to {}.
+
+Returns a new node with this name and these attributes.
+
+This method is for use by L</read_tree($file_name)>.
+
+See t/tree.without.attributes.txt and t/tree.with.attributes.txt for sample 
data.
+
+=head2 read_tree($file_name)
+
+Returns the root of the tree read from $file_name.
+
+The file must have been written by re-directing the output of 
L</tree2string([$options], [$some_tree])> to a file,
+since it makes assumptions about the format of the stringified attributes.
+
+read_tree() works with utf-8 data. See t/read.tree.t and 
t/tree.utf8.attributes.txt.
+
+Note: To call this method you need a caller. It'll be a tree of 1 node. The 
reason is that inside this method it
+calls various other methods, and for these calls it needs $self. That way, 
those methods can be called from
+anywhere, and not just from within read_tree().
+
+For reading and writing trees to databases, see L<Tree::DAG_Node::Persist>.
+
 =head2 remove_daughter(LIST)
 
 An exact synonym for L</remove_daughters(LIST)>.
@@ -2680,6 +2891,14 @@
 mother as $node -- B<not including> $node itself.  If $node is root,
 this returns empty-list.
 
+=head2 string2hashref($s)
+
+Returns a hashref built from the string.
+
+The string is expected to be something like '{AutoCommit => '1', PrintError => 
"0", ReportError => 1}'.
+
+The empty string is returned as {}.
+
 =head2 tree_to_lol()
 
 Returns that tree (starting at $node) represented as a LoL, like what
@@ -2817,9 +3036,9 @@
 
 =over 4
 
-=item o no_attributes
+=item o no_attributes => $Boolean
 
-If given a true value, the node's attributes are not included in the string 
returned.
+If 1, the node's attributes are not included in the string returned.
 
 Default: 0 (include attributes).
 
@@ -3017,8 +3236,8 @@
 
 =head2 How to process every node in tree?
 
-See L</walk_down($options)>. $options normally looks like, assuming we wish to 
pass in
-an arrayref to a stack, for example:
+See L</walk_down($options)>. $options normally looks like this, assuming we 
wish to pass in
+an arrayref as a stack:
 
        my(@stack);
 
@@ -3083,16 +3302,6 @@
 
 Because the apostrophes in the text confused the syntax hightlighter in my 
editor UltraEdit.
 
-=head1 TODO
-
-=over 4
-
-=item o Copy node does not respect the no_attribute_copy option
-
-This is a bug.
-
-=back
-
 =head1 SEE ALSO
 
 =over 4
@@ -3150,7 +3359,7 @@
 
 =head1 MACHINE-READABLE CHANGE LOG
 
-The file CHANGES was converted into Changelog.ini by 
L<Module::Metadata::Changes>.
+The file Changes was converted into Changelog.ini by 
L<Module::Metadata::Changes>.
 
 =head1 SUPPORT
 
@@ -3160,7 +3369,8 @@
 
 =head1 ACKNOWLEDGEMENTS
 
-The code to print the tree, in tree2string(), was adapted from 
L<Forest::Tree::Writer::ASCIIWithBranches>.
+The code to print the tree, in tree2string(), was adapted from 
L<Forest::Tree::Writer::ASCIIWithBranches>
+by the dread Stevan Little.
 
 =head1 MAINTAINER
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Tree-DAG_Node-1.12/t/about.perl.t 
new/Tree-DAG_Node-1.18/t/about.perl.t
--- old/Tree-DAG_Node-1.12/t/about.perl.t       2013-07-03 08:43:17.000000000 
+0200
+++ new/Tree-DAG_Node-1.18/t/about.perl.t       2013-09-19 06:36:07.000000000 
+0200
@@ -2,7 +2,7 @@
 require 5;
 # Summary of, well, things.
 
-use Test;
+use Test::More;
 BEGIN {plan tests => 2};
 ok 1;
 
@@ -36,7 +36,7 @@
     next if $this eq 'main'; # %main:: is %::
 
     #print "Peeking at $this => ${$this . '::VERSION'}\n";
-    
+
     if(defined ${$this . '::VERSION'} ) {
       $v{$this} = ${$this . '::VERSION'}
     } elsif(
@@ -50,7 +50,7 @@
       # It's probably an unpopulated package.
       ## $v{$this} = '...';
     }
-    
+
     $pref = length($this) ? "$this\::" : '';
     push @stack, map m/^(.+)::$/ ? "$pref$1" : (), keys %{$this . '::'};
     #print "Stack: @stack\n";
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Tree-DAG_Node-1.12/t/cut.and.paste.subtrees.t 
new/Tree-DAG_Node-1.18/t/cut.and.paste.subtrees.t
--- old/Tree-DAG_Node-1.12/t/cut.and.paste.subtrees.t   2013-07-03 
08:43:17.000000000 +0200
+++ new/Tree-DAG_Node-1.18/t/cut.and.paste.subtrees.t   2013-09-19 
06:36:07.000000000 +0200
@@ -151,7 +151,7 @@
 my($count) = 0;
 my($tree)  = grow_tree;
 
-ok(1 == 1, 'Grow tree'); $count++;
+ok(1 == 1, '1: Grow tree'); $count++;
 
 my($drawing_1)  = join('', map{s/\s+$//; "$_\n"} @{$tree -> draw_ascii_tree});
 my($expected_1) = <<'EOS';
@@ -168,7 +168,7 @@
                 <O>
 EOS
 
-ok($drawing_1 eq $expected_1, 'draw_ascii_tree() before cut-and-paste returned 
expected string'); $count++;
+ok($drawing_1 eq $expected_1, '2: draw_ascii_tree() before cut-and-paste 
returned expected string'); $count++;
 
 my($drawing_2)  = join('', map{s/\s+$//; "$_\n"} @{$tree -> tree2string});
 my($expected_2) = <<'EOS';
@@ -195,11 +195,11 @@
        |---C. Attributes: {# => "9"}
 EOS
 
-ok($drawing_2 eq $expected_2, 'tree2string() before cut-and-paste returned 
expected string'); $count++;
+ok($drawing_2 eq $expected_2, '3: tree2string() before cut-and-paste returned 
expected string'); $count++;
 
 process_tree($tree);
 
-ok(1 == 1, 'Process tree'); $count++;
+ok(1 == 1, '4: Process tree'); $count++;
 
 my($drawing_3)  = join('', map{s/\s+$//; "$_\n"} @{$tree -> draw_ascii_tree});
 my($expected_3) = <<'EOS';
@@ -221,38 +221,38 @@
     <O>     <O>
 EOS
 
-ok($drawing_3 eq $expected_3, 'draw_ascii_tree() after cut-and-paste returned 
expected string'); $count++;
+ok($drawing_3 eq $expected_3, '5: draw_ascii_tree() after cut-and-paste 
returned expected string'); $count++;
 
 my($drawing_4)  = join('', map{s/\s+$//; "$_\n"} @{$tree -> tree2string});
 my($expected_4) = <<'EOS';
 Root. Attributes: {# => "0"}
    |---I. Attributes: {# => "1"}
-   |   |---J. Attributes: {# => "3", replaced => "1"}
-   |   |   |---K. Attributes: {# => "3"}
-   |   |---J. Attributes: {# => "4", replaced => "1"}
-   |       |---L. Attributes: {# => "5", replaced => "1"}
-   |           |---M. Attributes: {# => "5"}
-   |               |---N. Attributes: {# => "5"}
-   |                   |---O. Attributes: {# => "5"}
+   |   |---J. Attributes: {replaced => "1"}
+   |   |   |---K. Attributes: {}
+   |   |---J. Attributes: {replaced => "1"}
+   |       |---L. Attributes: {replaced => "1"}
+   |           |---M. Attributes: {}
+   |               |---N. Attributes: {}
+   |                   |---O. Attributes: {}
    |---H. Attributes: {# => "2"}
-   |   |---J. Attributes: {# => "3", replaced => "1"}
-   |   |   |---K. Attributes: {# => "3"}
-   |   |---J. Attributes: {# => "4", replaced => "1"}
-   |       |---L. Attributes: {# => "5", replaced => "1"}
-   |           |---M. Attributes: {# => "5"}
-   |               |---N. Attributes: {# => "5"}
-   |                   |---O. Attributes: {# => "5"}
+   |   |---J. Attributes: {replaced => "1"}
+   |   |   |---K. Attributes: {}
+   |   |---J. Attributes: {replaced => "1"}
+   |       |---L. Attributes: {replaced => "1"}
+   |           |---M. Attributes: {}
+   |               |---N. Attributes: {}
+   |                   |---O. Attributes: {}
    |---D. Attributes: {# => "6"}
-   |   |---F. Attributes: {# => "8", replaced => "1"}
-   |       |---G. Attributes: {# => "8"}
+   |   |---F. Attributes: {replaced => "1"}
+   |       |---G. Attributes: {}
    |---E. Attributes: {# => "7"}
-   |   |---F. Attributes: {# => "8", replaced => "1"}
-   |       |---G. Attributes: {# => "8"}
+   |   |---F. Attributes: {replaced => "1"}
+   |       |---G. Attributes: {}
    |---B. Attributes: {# => "9"}
        |---C. Attributes: {# => "9"}
 EOS
 
-ok($drawing_4 eq $expected_4, 'tree2string() after cut-and-paste returned 
expected string'); $count++;
+ok($drawing_4 eq $expected_4, '6: tree2string() after cut-and-paste returned 
expected string'); $count++;
 
 done_testing($count);
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Tree-DAG_Node-1.12/t/pod.t 
new/Tree-DAG_Node-1.18/t/pod.t
--- old/Tree-DAG_Node-1.12/t/pod.t      2013-07-03 08:43:17.000000000 +0200
+++ new/Tree-DAG_Node-1.18/t/pod.t      1970-01-01 01:00:00.000000000 +0100
@@ -1,7 +0,0 @@
-use Test::More;
-
-eval "use Test::Pod 1.45";
-
-plan skip_all => "Test::Pod 1.45 required for testing POD" if $@;
-
-all_pod_files_ok();
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Tree-DAG_Node-1.12/t/read.tree.t 
new/Tree-DAG_Node-1.18/t/read.tree.t
--- old/Tree-DAG_Node-1.12/t/read.tree.t        1970-01-01 01:00:00.000000000 
+0100
+++ new/Tree-DAG_Node-1.18/t/read.tree.t        2013-09-19 06:36:07.000000000 
+0200
@@ -0,0 +1,48 @@
+use strict;
+use warnings;
+use warnings  qw(FATAL utf8); # Fatalize encoding glitches.
+
+use File::Spec;
+use File::Temp;
+
+use File::Slurp; # For read_file().
+
+use Test::More;
+
+# ------------------------------------------------
+
+sub process
+{
+       my($node, $file_name) = @_;
+
+       # The EXLOCK option is for BSD-based systems.
+
+       my($temp_dir)        = File::Temp -> newdir('temp.XXXX', CLEANUP => 1, 
EXLOCK => 0, TMPDIR => 1);
+       my($temp_dir_name)   = $temp_dir -> dirname;
+       my($test_file_name)  = File::Spec -> catfile($temp_dir_name, 
"$file_name.txt");
+       my($input_file_name) = File::Spec -> catfile('t', 
"tree.$file_name.attributes.txt");
+       my($root)            = $node -> read_tree($input_file_name);
+       my($no_attr)         = $file_name =~ /without/ ? 1 : 0;
+
+       open(OUT, '> :raw:encoding(utf-8)', $test_file_name);
+       print OUT "$_\n" for @{$root -> tree2string({no_attributes => 
$no_attr})};
+       close OUT;
+
+       is(read_file("$input_file_name", {binmode => ':encoding(utf-8)'}), 
read_file("$test_file_name", {binmode => ':encoding(utf-8)'}), "\u$file_name 
attributes: Output tree matches shipped tree");
+
+} # End of process.
+
+# ------------------------------------------------
+
+BEGIN {use_ok('Tree::DAG_Node'); }
+
+my($node) = Tree::DAG_Node -> new;
+
+isa_ok($node, 'Tree::DAG_Node', 'new() returned correct object type');
+
+for (qw/utf8 with without/)
+{
+       process($node, $_);
+}
+
+done_testing;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Tree-DAG_Node-1.12/t/tree.utf8.attributes.txt 
new/Tree-DAG_Node-1.18/t/tree.utf8.attributes.txt
--- old/Tree-DAG_Node-1.12/t/tree.utf8.attributes.txt   1970-01-01 
01:00:00.000000000 +0100
+++ new/Tree-DAG_Node-1.18/t/tree.utf8.attributes.txt   2013-09-19 
06:36:07.000000000 +0200
@@ -0,0 +1,9 @@
+Root. Attributes: {}
+   |---Â. Attributes: {# => "ÂÂ"}
+       |---â. Attributes: {# => "ââ"}
+       |   |---É. Attributes: {# => "ÉÉ"}
+       |---é. Attributes: {# => "éé"}
+           |---Ñ. Attributes: {# => "ÑÑ"}
+               |---ñ. Attributes: {# => "ññ"}
+                   |---Ô. Attributes: {# => "ÔÔ"}
+                       |---ô. Attributes: {# => "ôô"}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Tree-DAG_Node-1.12/t/tree.with.attributes.txt 
new/Tree-DAG_Node-1.18/t/tree.with.attributes.txt
--- old/Tree-DAG_Node-1.12/t/tree.with.attributes.txt   1970-01-01 
01:00:00.000000000 +0100
+++ new/Tree-DAG_Node-1.18/t/tree.with.attributes.txt   2013-09-19 
06:36:07.000000000 +0200
@@ -0,0 +1,134 @@
+statements. Attributes: {}
+   |---:default. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => ":default"}
+   |   |---::=. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "::="}
+   |   |---action. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "action"}
+   |   |---=>. Attributes: {bracketed_name => "0", quantifier => "", real_name 
=> "=>"}
+   |   |---[values]. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "[values]"}
+   |---:start. Attributes: {bracketed_name => "0", quantifier => "", real_name 
=> ":start"}
+   |   |---::=. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "::="}
+   |   |---graph_grammar. Attributes: {bracketed_name => "0", quantifier => 
"", real_name => "graph_grammar"}
+   |---graph_grammar. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "graph_grammar"}
+   |   |---::=. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "::="}
+   |   |---graph_definition. Attributes: {bracketed_name => "0", quantifier => 
"", real_name => "graph_definition"}
+   |   |---action. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "action"}
+   |   |---=>. Attributes: {bracketed_name => "0", quantifier => "", real_name 
=> "=>"}
+   |   |---graph. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "graph"}
+   |---graph_definition. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "graph_definition"}
+   |   |---::=. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "::="}
+   |   |---node_definition. Attributes: {bracketed_name => "0", quantifier => 
"", real_name => "node_definition"}
+   |   |---|. Attributes: {bracketed_name => "0", quantifier => "", real_name 
=> "|"}
+   |   |---edge_definition. Attributes: {bracketed_name => "0", quantifier => 
"", real_name => "edge_definition"}
+   |---node_definition. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "node_definition"}
+   |   |---::=. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "::="}
+   |   |---node_statement. Attributes: {bracketed_name => "0", quantifier => 
"", real_name => "node_statement"}
+   |   |---|. Attributes: {bracketed_name => "0", quantifier => "", real_name 
=> "|"}
+   |   |---node_statement. Attributes: {bracketed_name => "0", quantifier => 
"", real_name => "node_statement"}
+   |   |---graph_definition. Attributes: {bracketed_name => "0", quantifier => 
"", real_name => "graph_definition"}
+   |---node_statement. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "node_statement"}
+   |   |---::=. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "::="}
+   |   |---node_name. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "node_name"}
+   |   |---|. Attributes: {bracketed_name => "0", quantifier => "", real_name 
=> "|"}
+   |   |---node_name. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "node_name"}
+   |   |---attribute_definition. Attributes: {bracketed_name => "0", 
quantifier => "", real_name => "attribute_definition"}
+   |   |---|. Attributes: {bracketed_name => "0", quantifier => "", real_name 
=> "|"}
+   |   |---node_statement. Attributes: {bracketed_name => "0", quantifier => 
"", real_name => "node_statement"}
+   |   |---(','). Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "(',')"}
+   |   |---node_statement. Attributes: {bracketed_name => "0", quantifier => 
"", real_name => "node_statement"}
+   |---node_name. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "node_name"}
+   |   |---::=. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "::="}
+   |   |---start_node. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "start_node"}
+   |   |---end_node. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "end_node"}
+   |---:lexeme. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => ":lexeme"}
+   |   |---~. Attributes: {bracketed_name => "0", quantifier => "", real_name 
=> "~"}
+   |   |---start_node. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "start_node"}
+   |   |---pause. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "pause"}
+   |   |---=>. Attributes: {bracketed_name => "0", quantifier => "", real_name 
=> "=>"}
+   |   |---before. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "before"}
+   |   |---event. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "event"}
+   |   |---=>. Attributes: {bracketed_name => "0", quantifier => "", real_name 
=> "=>"}
+   |   |---start_node. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "start_node"}
+   |---start_node. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "start_node"}
+   |   |---~. Attributes: {bracketed_name => "0", quantifier => "", real_name 
=> "~"}
+   |   |---'['. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "'['"}
+   |---:lexeme. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => ":lexeme"}
+   |   |---~. Attributes: {bracketed_name => "0", quantifier => "", real_name 
=> "~"}
+   |   |---end_node. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "end_node"}
+   |---end_node. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "end_node"}
+   |   |---~. Attributes: {bracketed_name => "0", quantifier => "", real_name 
=> "~"}
+   |   |---']'. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "']'"}
+   |---edge_definition. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "edge_definition"}
+   |   |---::=. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "::="}
+   |   |---edge_statement. Attributes: {bracketed_name => "0", quantifier => 
"", real_name => "edge_statement"}
+   |   |---|. Attributes: {bracketed_name => "0", quantifier => "", real_name 
=> "|"}
+   |   |---edge_statement. Attributes: {bracketed_name => "0", quantifier => 
"", real_name => "edge_statement"}
+   |   |---graph_definition. Attributes: {bracketed_name => "0", quantifier => 
"", real_name => "graph_definition"}
+   |---edge_statement. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "edge_statement"}
+   |   |---::=. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "::="}
+   |   |---edge_name. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "edge_name"}
+   |   |---|. Attributes: {bracketed_name => "0", quantifier => "", real_name 
=> "|"}
+   |   |---edge_name. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "edge_name"}
+   |   |---attribute_definition. Attributes: {bracketed_name => "0", 
quantifier => "", real_name => "attribute_definition"}
+   |   |---|. Attributes: {bracketed_name => "0", quantifier => "", real_name 
=> "|"}
+   |   |---edge_statement. Attributes: {bracketed_name => "0", quantifier => 
"", real_name => "edge_statement"}
+   |   |---(','). Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "(',')"}
+   |   |---edge_statement. Attributes: {bracketed_name => "0", quantifier => 
"", real_name => "edge_statement"}
+   |---edge_name. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "edge_name"}
+   |   |---::=. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "::="}
+   |   |---directed_edge. Attributes: {bracketed_name => "0", quantifier => 
"", real_name => "directed_edge"}
+   |   |---|. Attributes: {bracketed_name => "0", quantifier => "", real_name 
=> "|"}
+   |   |---undirected_edge. Attributes: {bracketed_name => "0", quantifier => 
"", real_name => "undirected_edge"}
+   |---:lexeme. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => ":lexeme"}
+   |   |---~. Attributes: {bracketed_name => "0", quantifier => "", real_name 
=> "~"}
+   |   |---directed_edge. Attributes: {bracketed_name => "0", quantifier => 
"", real_name => "directed_edge"}
+   |   |---pause. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "pause"}
+   |   |---=>. Attributes: {bracketed_name => "0", quantifier => "", real_name 
=> "=>"}
+   |   |---before. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "before"}
+   |   |---event. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "event"}
+   |   |---=>. Attributes: {bracketed_name => "0", quantifier => "", real_name 
=> "=>"}
+   |   |---directed_edge. Attributes: {bracketed_name => "0", quantifier => 
"", real_name => "directed_edge"}
+   |---directed_edge. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "directed_edge"}
+   |   |---~. Attributes: {bracketed_name => "0", quantifier => "", real_name 
=> "~"}
+   |   |---'->'. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "'->'"}
+   |---:lexeme. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => ":lexeme"}
+   |   |---~. Attributes: {bracketed_name => "0", quantifier => "", real_name 
=> "~"}
+   |   |---undirected_edge. Attributes: {bracketed_name => "0", quantifier => 
"", real_name => "undirected_edge"}
+   |   |---pause. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "pause"}
+   |   |---=>. Attributes: {bracketed_name => "0", quantifier => "", real_name 
=> "=>"}
+   |   |---before. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "before"}
+   |   |---event. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "event"}
+   |   |---=>. Attributes: {bracketed_name => "0", quantifier => "", real_name 
=> "=>"}
+   |   |---undirected_edge. Attributes: {bracketed_name => "0", quantifier => 
"", real_name => "undirected_edge"}
+   |---undirected_edge. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "undirected_edge"}
+   |   |---~. Attributes: {bracketed_name => "0", quantifier => "", real_name 
=> "~"}
+   |   |---'--'. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "'--'"}
+   |---attribute_definition. Attributes: {bracketed_name => "0", quantifier => 
"", real_name => "attribute_definition"}
+   |   |---::=. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "::="}
+   |   |---attribute_statement. Attributes: {bracketed_name => "0", quantifier 
=> "*", real_name => "attribute_statement"}
+   |---attribute_statement. Attributes: {bracketed_name => "0", quantifier => 
"", real_name => "attribute_statement"}
+   |   |---::=. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "::="}
+   |   |---start_attributes. Attributes: {bracketed_name => "0", quantifier => 
"", real_name => "start_attributes"}
+   |   |---end_attributes. Attributes: {bracketed_name => "0", quantifier => 
"", real_name => "end_attributes"}
+   |---:lexeme. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => ":lexeme"}
+   |   |---~. Attributes: {bracketed_name => "0", quantifier => "", real_name 
=> "~"}
+   |   |---start_attributes. Attributes: {bracketed_name => "0", quantifier => 
"", real_name => "start_attributes"}
+   |   |---pause. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "pause"}
+   |   |---=>. Attributes: {bracketed_name => "0", quantifier => "", real_name 
=> "=>"}
+   |   |---before. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "before"}
+   |   |---event. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "event"}
+   |   |---=>. Attributes: {bracketed_name => "0", quantifier => "", real_name 
=> "=>"}
+   |   |---start_attributes. Attributes: {bracketed_name => "0", quantifier => 
"", real_name => "start_attributes"}
+   |---start_attributes. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "start_attributes"}
+   |   |---~. Attributes: {bracketed_name => "0", quantifier => "", real_name 
=> "~"}
+   |   |---'{'. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "'{'"}
+   |---:lexeme. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => ":lexeme"}
+   |   |---~. Attributes: {bracketed_name => "0", quantifier => "", real_name 
=> "~"}
+   |   |---end_attributes. Attributes: {bracketed_name => "0", quantifier => 
"", real_name => "end_attributes"}
+   |---end_attributes. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "end_attributes"}
+   |   |---~. Attributes: {bracketed_name => "0", quantifier => "", real_name 
=> "~"}
+   |   |---'}'. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "'}'"}
+   |---:discard. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => ":discard"}
+   |   |---=>. Attributes: {bracketed_name => "0", quantifier => "", real_name 
=> "=>"}
+   |   |---whitespace. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "whitespace"}
+   |---whitespace. Attributes: {bracketed_name => "0", quantifier => "", 
real_name => "whitespace"}
+       |---~. Attributes: {bracketed_name => "0", quantifier => "", real_name 
=> "~"}
+       |---[\s]. Attributes: {bracketed_name => "0", quantifier => "+", 
real_name => "[\s]"}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Tree-DAG_Node-1.12/t/tree.without.attributes.txt 
new/Tree-DAG_Node-1.18/t/tree.without.attributes.txt
--- old/Tree-DAG_Node-1.12/t/tree.without.attributes.txt        1970-01-01 
01:00:00.000000000 +0100
+++ new/Tree-DAG_Node-1.18/t/tree.without.attributes.txt        2013-09-19 
06:36:07.000000000 +0200
@@ -0,0 +1,134 @@
+statements
+   |---:default
+   |   |---::=
+   |   |---action
+   |   |---=>
+   |   |---[values]
+   |---:start
+   |   |---::=
+   |   |---graph_grammar
+   |---graph_grammar
+   |   |---::=
+   |   |---graph_definition
+   |   |---action
+   |   |---=>
+   |   |---graph
+   |---graph_definition
+   |   |---::=
+   |   |---node_definition
+   |   |---|
+   |   |---edge_definition
+   |---node_definition
+   |   |---::=
+   |   |---node_statement
+   |   |---|
+   |   |---node_statement
+   |   |---graph_definition
+   |---node_statement
+   |   |---::=
+   |   |---node_name
+   |   |---|
+   |   |---node_name
+   |   |---attribute_definition
+   |   |---|
+   |   |---node_statement
+   |   |---(',')
+   |   |---node_statement
+   |---node_name
+   |   |---::=
+   |   |---start_node
+   |   |---end_node
+   |---:lexeme
+   |   |---~
+   |   |---start_node
+   |   |---pause
+   |   |---=>
+   |   |---before
+   |   |---event
+   |   |---=>
+   |   |---start_node
+   |---start_node
+   |   |---~
+   |   |---'['
+   |---:lexeme
+   |   |---~
+   |   |---end_node
+   |---end_node
+   |   |---~
+   |   |---']'
+   |---edge_definition
+   |   |---::=
+   |   |---edge_statement
+   |   |---|
+   |   |---edge_statement
+   |   |---graph_definition
+   |---edge_statement
+   |   |---::=
+   |   |---edge_name
+   |   |---|
+   |   |---edge_name
+   |   |---attribute_definition
+   |   |---|
+   |   |---edge_statement
+   |   |---(',')
+   |   |---edge_statement
+   |---edge_name
+   |   |---::=
+   |   |---directed_edge
+   |   |---|
+   |   |---undirected_edge
+   |---:lexeme
+   |   |---~
+   |   |---directed_edge
+   |   |---pause
+   |   |---=>
+   |   |---before
+   |   |---event
+   |   |---=>
+   |   |---directed_edge
+   |---directed_edge
+   |   |---~
+   |   |---'->'
+   |---:lexeme
+   |   |---~
+   |   |---undirected_edge
+   |   |---pause
+   |   |---=>
+   |   |---before
+   |   |---event
+   |   |---=>
+   |   |---undirected_edge
+   |---undirected_edge
+   |   |---~
+   |   |---'--'
+   |---attribute_definition
+   |   |---::=
+   |   |---attribute_statement
+   |---attribute_statement
+   |   |---::=
+   |   |---start_attributes
+   |   |---end_attributes
+   |---:lexeme
+   |   |---~
+   |   |---start_attributes
+   |   |---pause
+   |   |---=>
+   |   |---before
+   |   |---event
+   |   |---=>
+   |   |---start_attributes
+   |---start_attributes
+   |   |---~
+   |   |---'{'
+   |---:lexeme
+   |   |---~
+   |   |---end_attributes
+   |---end_attributes
+   |   |---~
+   |   |---'}'
+   |---:discard
+   |   |---=>
+   |   |---whitespace
+   |---whitespace
+       |---~
+       |---[\s]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Tree-DAG_Node-1.12/xt/author/pod.t 
new/Tree-DAG_Node-1.18/xt/author/pod.t
--- old/Tree-DAG_Node-1.12/xt/author/pod.t      1970-01-01 01:00:00.000000000 
+0100
+++ new/Tree-DAG_Node-1.18/xt/author/pod.t      2013-09-19 06:36:07.000000000 
+0200
@@ -0,0 +1,7 @@
+use Test::More;
+
+eval "use Test::Pod 1.45";
+
+plan skip_all => "Test::Pod 1.45 required for testing POD" if $@;
+
+all_pod_files_ok();

-- 
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to