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]