Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package perl-Tree-DAG_Node for openSUSE:Factory checked in at 2025-05-26 18:36:01 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/perl-Tree-DAG_Node (Old) and /work/SRC/openSUSE:Factory/.perl-Tree-DAG_Node.new.2732 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "perl-Tree-DAG_Node" Mon May 26 18:36:01 2025 rev:29 rq:1279821 version:1.350.0 Changes: -------- --- /work/SRC/openSUSE:Factory/perl-Tree-DAG_Node/perl-Tree-DAG_Node.changes 2025-04-27 22:54:29.980649080 +0200 +++ /work/SRC/openSUSE:Factory/.perl-Tree-DAG_Node.new.2732/perl-Tree-DAG_Node.changes 2025-05-26 18:37:46.085048115 +0200 @@ -1,0 +2,43 @@ +Tue May 13 05:37:11 UTC 2025 - Tina Müller <timueller+p...@suse.de> + +- updated to 1.350.0 (1.35) + see /usr/share/doc/packages/perl-Tree-DAG_Node/Changelog.ini + + [V 1.35] + Date=2025-05-12T17:00:00 + Comments= <<EOT + - Change sub hashref2string() line 726 so it does not generate an error or warning when + the node or node name is '' (empty string), undef or 0 (zero). + - Change test data so that when stringifying a tree, node names without attributes are + output as (e.g.) 'lexeme: Attributes{}' rather than as just 'lexeme'. This was alleged + to have been done as per the last dot point under v 1.34 below, but was not done properly. + - This last point also affects the related module Data::RenderAsTree, which ships with a + range of test programs and sample scripts which futher exercise these features. + The point of these latter samples is so you can use them without having to fiddle about + removing the test code in the corresponding test scripts. + EOT + + [V 1.34] + Date=2025-04-23T17:01:00 + Comments= <<EOT + - Thanx to Shawn Laffan for reporting a problem with line-endings in files read and written, + by both Tree::DAG_Node and t/read.tree.t, when he tests under Strawberry Perl. + - The 2 test files t/tree.with*.txt ship as ISO-8859-1 while t/tree.utf8.attributes.txt ships + as UTF-8. So... + - Don't explicitly use UTF-8 encoding in DAG_Node.pm's sub read_tree(). Rather, use a regexp + to standardize line endings after reading. Likewise, in t/read.tree.t, do the same. + - I have un-commented the 2 extra tests at the end of t/read.tree.t. Specifically, + line 50 was 'for (qw/utf8/)# with without/)'. It now says 'for (qw/utf8 with without/)' + - Reformat test data files t/tree.*.attributes.txt + This was done with the new files share/read.write.tree.(pl, sh). + And it was done because some of the test data files had been written + by old code with slightly different indenting. + - Add a new test data file, t/metag.cooked.tree.txt + It's a copy of MarpaX::Grammar::Parser's share/metag.cooked.tree. + The test program t/read.tree.t was edited to include this new file. + - Patch tree::DAG_Node.format_node() to output 'Attributes: {}' and not just 'Attributes:' + when the user does not want attributes reported. This makes the code match the sample + trees shipped in t/. + EOT + +------------------------------------------------------------------- Old: ---- Tree-DAG_Node-1.33.tgz New: ---- Tree-DAG_Node-1.35.tgz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ perl-Tree-DAG_Node.spec ++++++ --- /var/tmp/diff_new_pack.tECZlT/_old 2025-05-26 18:37:46.705074144 +0200 +++ /var/tmp/diff_new_pack.tECZlT/_new 2025-05-26 18:37:46.709074312 +0200 @@ -18,10 +18,10 @@ %define cpan_name Tree-DAG_Node Name: perl-Tree-DAG_Node -Version: 1.330.0 +Version: 1.350.0 Release: 0 -# 1.33 -> normalize -> 1.330.0 -%define cpan_version 1.33 +# 1.35 -> normalize -> 1.350.0 +%define cpan_version 1.35 License: Artistic-1.0 OR GPL-1.0-or-later Summary: An N-ary tree URL: https://metacpan.org/release/%{cpan_name} @@ -53,6 +53,8 @@ %prep %autosetup -n %{cpan_name}-%{cpan_version} -p1 +find . -type f ! -path "*/t/*" ! -name "*.pl" ! -path "*/bin/*" ! -path "*/script/*" ! -path "*/scripts/*" ! -name "configure" -print0 | xargs -0 chmod 644 + %build perl Makefile.PL INSTALLDIRS=vendor %make_build ++++++ Tree-DAG_Node-1.33.tgz -> Tree-DAG_Node-1.35.tgz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Tree-DAG_Node-1.33/Changelog.ini new/Tree-DAG_Node-1.35/Changelog.ini --- old/Tree-DAG_Node-1.33/Changelog.ini 2025-03-30 03:06:30.000000000 +0200 +++ new/Tree-DAG_Node-1.35/Changelog.ini 2025-05-12 09:11:59.000000000 +0200 @@ -3,6 +3,43 @@ Changelog.Creator=Module::Metadata::Changes V 2.12 Changelog.Parser=Config::IniFiles V 3.000003 +[V 1.35] +Date=2025-05-12T17:00:00 +Comments= <<EOT +- Change sub hashref2string() line 726 so it does not generate an error or warning when +the node or node name is '' (empty string), undef or 0 (zero). +- Change test data so that when stringifying a tree, node names without attributes are +output as (e.g.) 'lexeme: Attributes{}' rather than as just 'lexeme'. This was alleged +to have been done as per the last dot point under v 1.34 below, but was not done properly. +- This last point also affects the related module Data::RenderAsTree, which ships with a +range of test programs and sample scripts which futher exercise these features. +The point of these latter samples is so you can use them without having to fiddle about +removing the test code in the corresponding test scripts. +EOT + +[V 1.34] +Date=2025-04-23T17:01:00 +Comments= <<EOT +- Thanx to Shawn Laffan for reporting a problem with line-endings in files read and written, +by both Tree::DAG_Node and t/read.tree.t, when he tests under Strawberry Perl. +- The 2 test files t/tree.with*.txt ship as ISO-8859-1 while t/tree.utf8.attributes.txt ships +as UTF-8. So... +- Don't explicitly use UTF-8 encoding in DAG_Node.pm's sub read_tree(). Rather, use a regexp +to standardize line endings after reading. Likewise, in t/read.tree.t, do the same. +- I have un-commented the 2 extra tests at the end of t/read.tree.t. Specifically, +line 50 was 'for (qw/utf8/)# with without/)'. It now says 'for (qw/utf8 with without/)' +- Reformat test data files t/tree.*.attributes.txt +This was done with the new files share/read.write.tree.(pl, sh). +And it was done because some of the test data files had been written +by old code with slightly different indenting. +- Add a new test data file, t/metag.cooked.tree.txt +It's a copy of MarpaX::Grammar::Parser's share/metag.cooked.tree. +The test program t/read.tree.t was edited to include this new file. +- Patch tree::DAG_Node.format_node() to output 'Attributes: {}' and not just 'Attributes:' +when the user does not want attributes reported. This makes the code match the sample +trees shipped in t/. +EOT + [V 1.33] Date=2025-03-20T11:16:00 Deploy.Action=Upgrade @@ -74,7 +111,7 @@ 'use Tree::DAG_Node'. That's no good when code is expecting a different encoding (raw, etc.)". See RT#105798. Karen Etheridge followed up with a comment about it appearing in another module of mine. Then I checked all my modules (including some not intended for -publication - Local::*) and found about 28 offenders, with some using it inn multiple files. +publication - Local::*) and found about 28 offenders, with some using it in multiple files. The original idea came from adopting what Tom Christiansen calls his 'Standard Preamble': http://www.perl.com/pub/2012/04/perlunicook-standard-preamble.html All tests still work after removing that line. @@ -210,7 +247,7 @@ - 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.utf8.attributes.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 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Tree-DAG_Node-1.33/Changes new/Tree-DAG_Node-1.35/Changes --- old/Tree-DAG_Node-1.33/Changes 2025-03-30 03:03:19.000000000 +0200 +++ new/Tree-DAG_Node-1.35/Changes 2025-05-12 09:09:08.000000000 +0200 @@ -1,5 +1,36 @@ Revision history for Perl module Tree::DAG_Node. +1.35 2025-05-12T17:00:00 + - Change sub hashref2string() line 726 so it does not generate an error or warning when + the node or node name is '' (empty string), undef or 0 (zero). + - Change test data so that when stringifying a tree, node names without attributes are + output as (e.g.) 'lexeme: Attributes{}' rather than as just 'lexeme'. This was alleged + to have been done as per the last dot point under v 1.34 below, but was not done properly. + - This last point also affects the related module Data::RenderAsTree, which ships with a + range of test programs and sample scripts which futher exercise these features. + The point of these latter samples is so you can use them without having to fiddle about + removing the test code in the corresponding test scripts. + +1.34 2025-04-23T17:01:00 + - Thanx to Shawn Laffan for reporting a problem with line-endings in files read and written, + by both Tree::DAG_Node and t/read.tree.t, when he tests under Strawberry Perl. + - The 2 test files t/tree.with*.txt ship as ISO-8859-1 while t/tree.utf8.attributes.txt ships + as UTF-8. So... + - Don't explicitly use UTF-8 encoding in DAG_Node.pm's sub read_tree(). Rather, use a regexp + to standardize line endings after reading. Likewise, in t/read.tree.t, do the same. + - I have un-commented the 2 extra tests at the end of t/read.tree.t. Specifically, + line 50 was 'for (qw/utf8/)# with without/)'. It now says 'for (qw/utf8 with without/)' + - Reformat test data files t/tree.*.attributes.txt + This was done with the new files share/read.write.tree.(pl, sh). + And it was done because some of the test data files had been written + by old code with slightly different indenting. + - Add a new test data file, t/metag.cooked.tree.txt + It's a copy of MarpaX::Grammar::Parser's share/metag.cooked.tree. + The test program t/read.tree.t was edited to include this new file. + - Patch tree::DAG_Node.format_node() to output 'Attributes: {}' and not just 'Attributes:' + when the user does not want attributes reported. This makes the code match the sample + trees shipped in t/. + 1.33 2025-03-20T11:16:00 - Replace the discouraged File::Slurp::Tiny with File::Slurper. Thanx to Marcel Telka for the report. @@ -52,7 +83,7 @@ 'use Tree::DAG_Node'. That's no good when code is expecting a different encoding (raw, etc.)". See RT#105798. Karen Etheridge followed up with a comment about it appearing in another module of mine. Then I checked all my modules (including some not intended for - publication - Local::*) and found about 28 offenders, with some using it inn multiple files. + publication - Local::*) and found about 28 offenders, with some using it in multiple files. The original idea came from adopting what Tom Christiansen calls his 'Standard Preamble': http://www.perl.com/pub/2012/04/perlunicook-standard-preamble.html All tests still work after removing that line. @@ -157,7 +188,7 @@ - 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.utf8.attributes.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. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Tree-DAG_Node-1.33/MANIFEST new/Tree-DAG_Node-1.35/MANIFEST --- old/Tree-DAG_Node-1.33/MANIFEST 2025-03-30 03:06:31.000000000 +0200 +++ new/Tree-DAG_Node-1.35/MANIFEST 2025-05-12 09:12:00.000000000 +0200 @@ -9,13 +9,19 @@ scripts/cut.and.paste.subtrees.pl scripts/read.tree.log scripts/read.tree.pl +scripts/read.write.tree.pl +scripts/read.write.tree.sh scripts/write.tree.pl SECURITY.md +share/metag.bnf +share/metag.cooked.tree +share/metag.cooked.tree.new t/00.versions.t t/00.versions.tx t/about.perl.t t/cut.and.paste.subtrees.t t/load.t +t/metag.cooked.tree.txt t/read.tree.t t/string2hash.t t/tree.utf8.attributes.txt diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Tree-DAG_Node-1.33/META.json new/Tree-DAG_Node-1.35/META.json --- old/Tree-DAG_Node-1.33/META.json 2025-03-30 03:06:31.000000000 +0200 +++ new/Tree-DAG_Node-1.35/META.json 2025-05-12 09:12:00.000000000 +0200 @@ -67,6 +67,6 @@ "web" : "https://github.com/ronsavage/Tree-DAG_Node" } }, - "version" : "1.33", + "version" : "1.35", "x_serialization_backend" : "JSON::PP version 4.16" } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Tree-DAG_Node-1.33/META.yml new/Tree-DAG_Node-1.35/META.yml --- old/Tree-DAG_Node-1.33/META.yml 2025-03-30 03:06:31.000000000 +0200 +++ new/Tree-DAG_Node-1.35/META.yml 2025-05-12 09:12:00.000000000 +0200 @@ -31,5 +31,5 @@ bugtracker: https://github.com/ronsavage/Tree-DAG_Node/issues license: http://opensource.org/licenses/Artistic-2.0 repository: https://github.com/ronsavage/Tree-DAG_Node.git -version: '1.33' +version: '1.35' x_serialization_backend: 'CPAN::Meta::YAML version 0.018' diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Tree-DAG_Node-1.33/lib/Tree/DAG_Node.pm new/Tree-DAG_Node-1.35/lib/Tree/DAG_Node.pm --- old/Tree-DAG_Node-1.33/lib/Tree/DAG_Node.pm 2025-03-30 01:58:57.000000000 +0100 +++ new/Tree-DAG_Node-1.35/lib/Tree/DAG_Node.pm 2025-05-12 08:52:39.000000000 +0200 @@ -5,7 +5,7 @@ use warnings qw(FATAL utf8); # Fatalize encoding glitches. our $Debug = 0; -our $VERSION = '1.33'; +our $VERSION = '1.35'; use File::Slurper 'read_lines'; @@ -688,7 +688,7 @@ { my($self, $options, $node) = @_; my($s) = $node -> name; - $s .= '. Attributes: ' . $self -> hashref2string($node -> attributes) if (! $$options{no_attributes}); + $s .= $$options{no_attributes} ? '. Attributes: {}' : '. Attributes: ' . $self -> hashref2string($node -> attributes); return $s; @@ -723,7 +723,7 @@ my($self, $hashref) = @_; $hashref ||= {}; - return '{' . join(', ', map{qq|$_ => "$$hashref{$_}"|} sort keys %$hashref) . '}'; + return '{' . join(', ', map{$_ = 'undef' if (! defined($_) ); $$hashref{$_} = 'undef' if (! defined($$hashref{$_}) ); qq|$_ => "$$hashref{$_}"|} sort keys %$hashref) . '}'; } # End of hashref2string. @@ -1113,8 +1113,12 @@ my(@stack); my($tos); - for my $line (read_lines($file_name, 'UTF-8', 0) ) + for my $line (read_lines($file_name) ) { + # Ensure inter-OS compatability. + + $line =~ s/\r$//g; + $count++; if ($count == 1) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Tree-DAG_Node-1.33/scripts/read.tree.pl new/Tree-DAG_Node-1.35/scripts/read.tree.pl --- old/Tree-DAG_Node-1.33/scripts/read.tree.pl 2025-03-30 01:58:57.000000000 +0100 +++ new/Tree-DAG_Node-1.35/scripts/read.tree.pl 2025-04-24 07:38:03.000000000 +0200 @@ -3,7 +3,6 @@ use strict; use warnings; use warnings qw(FATAL utf8); # Fatalize encoding glitches. -use open qw(:std :utf8); # Undeclared streams in UTF-8. use File::Spec; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Tree-DAG_Node-1.33/scripts/read.write.tree.pl new/Tree-DAG_Node-1.35/scripts/read.write.tree.pl --- old/Tree-DAG_Node-1.33/scripts/read.write.tree.pl 1970-01-01 01:00:00.000000000 +0100 +++ new/Tree-DAG_Node-1.35/scripts/read.write.tree.pl 2025-04-26 10:02:22.000000000 +0200 @@ -0,0 +1,62 @@ +#!/usr/bin/env perl +# +# Name: read.write.tree.pl. +# +# Called by read.write.tree.sh. +# +# Reads a tree created by Tree::DAG_Node.tree2string() +# and somehow written to a disk file. + +use 5.40.0; + +use strict; +use warnings; +use warnings qw(FATAL utf8); # Fatalize encoding glitches. + +use Data::Dumper; # For Dumper(). + +use File::Spec; + +use Getopt::Long; + +use Tree::DAG_Node; + +# ------------------------------------------------ + +my(%options); + +$options{dir_name} = ''; +$options{in_file_name} = ''; +$options{help} = 0; +$options{log_level} = 'info'; +my(%opts) = +( + 'dir_name=s' => \$options{dir_name}, + 'in_file_name=s' => \$options{in_file_name}, + 'help' => \$options{help}, + 'log_level=s' => \$options{log_level}, +); + +GetOptions(%opts) || die("Error in options. Options: " . Dumper(%opts) ); + +if ($options{help} == 1) +{ + pod2usage(1); +} + +my($input_file_name) = File::Spec -> catfile($options{dir_name}, $options{in_file_name}); +my($output_file_name) = File::Spec -> catfile($options{dir_name}, $options{in_file_name} . '.new'); + +say "Reading: $input_file_name"; + +my($node) = Tree::DAG_Node -> new; +my($root) = $node -> read_tree($input_file_name); +my($no_attr) = 0; + +say "Writing: $output_file_name"; + +open(my $fh, '> :encoding(utf-8)', $output_file_name); +print $fh "$_\n" for @{$root -> tree2string({no_attributes => $no_attr})}; +close $fh; + +say "Wrote: $output_file_name"; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Tree-DAG_Node-1.33/scripts/read.write.tree.sh new/Tree-DAG_Node-1.35/scripts/read.write.tree.sh --- old/Tree-DAG_Node-1.33/scripts/read.write.tree.sh 1970-01-01 01:00:00.000000000 +0100 +++ new/Tree-DAG_Node-1.35/scripts/read.write.tree.sh 2025-04-25 05:10:44.000000000 +0200 @@ -0,0 +1,10 @@ +#!/usr/bin/bash +# +# Name: read.write.tree.sh. +# +# Parameters: +# 1: The abbreviated name of sample input and output data files. +# E.g. xyz simultaneously means read some_dir/xyz.tree and write some_dir/xyz.tree.out. +# 2 .. 5: Use for anything. E.g.: -maxlevel debug. + +perl -Ilib scripts/read.write.tree.pl $1 $2 $3 $4 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Tree-DAG_Node-1.33/scripts/write.tree.pl new/Tree-DAG_Node-1.35/scripts/write.tree.pl --- old/Tree-DAG_Node-1.33/scripts/write.tree.pl 2025-03-30 01:58:57.000000000 +0100 +++ new/Tree-DAG_Node-1.35/scripts/write.tree.pl 2025-04-24 09:30:21.000000000 +0200 @@ -3,7 +3,6 @@ use strict; use warnings; use warnings qw(FATAL utf8); # Fatalize encoding glitches. -use open qw(:std :utf8); # Undeclared streams in UTF-8. use utf8; use File::Slurper 'write_text'; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Tree-DAG_Node-1.33/share/metag.bnf new/Tree-DAG_Node-1.35/share/metag.bnf --- old/Tree-DAG_Node-1.33/share/metag.bnf 1970-01-01 01:00:00.000000000 +0100 +++ new/Tree-DAG_Node-1.35/share/metag.bnf 2025-04-25 05:39:53.000000000 +0200 @@ -0,0 +1,210 @@ +# Copyright 2022 Jeffrey Kegler +# This file is part of Marpa::R2. Marpa::R2 is free software: you can +# redistribute it and/or modify it under the terms of the GNU Lesser +# General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# Marpa::R2 is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser +# General Public License along with Marpa::R2. If not, see +# http://www.gnu.org/licenses/. + +:default ::= action => [start,length,values] bless => ::lhs +lexeme default = + action => [start,length,value] + bless => ::name + forgiving => 1 + +:start ::= statements +statements ::= statement+ +statement ::= <start rule> | <empty rule> + | <null statement> | <statement group> + | <priority rule> | <quantified rule> + | <discard rule> | <default rule> + | <lexeme default statement> + | <discard default statement> + | <lexeme rule> + | <completion event declaration> + | <nulled event declaration> + | <prediction event declaration> + | <current lexer statement> + | <inaccessible statement> + +<null statement> ::= ';' +<statement group> ::= ('{') statements '}' +<start rule> ::= (':start' <op declare bnf>) symbol +<start rule> ::= ('start' 'symbol' 'is') symbol +<default rule> ::= ':default' <op declare bnf> <adverb list> +<lexeme default statement> ::= ('lexeme' 'default' '=') <adverb list> +<discard default statement> ::= ('discard' 'default' '=') <adverb list> +<priority rule> ::= lhs <op declare> priorities +<empty rule> ::= lhs <op declare> <adverb list> +<quantified rule> ::= lhs <op declare> <single symbol> quantifier <adverb list> +<discard rule> ::= (':discard' <op declare match>) <single symbol> <adverb list> +<lexeme rule> ::= (':lexeme' <op declare match>) symbol <adverb list> +<completion event declaration> ::= ('event') <event initialization> ('=' 'completed') <symbol name> +<nulled event declaration> ::= ('event') <event initialization> ('=' 'nulled') <symbol name> +<prediction event declaration> ::= ('event') <event initialization> ('=' 'predicted') <symbol name> +<current lexer statement> ::= ('current' 'lexer' 'is') <lexer name> + +<inaccessible statement> ::= ('inaccessible' 'is') <inaccessible treatment> ('by' 'default') +<inaccessible treatment> ::= 'warn' | 'ok' | 'fatal' + +<op declare> ::= <op declare bnf> | <op declare match> +priorities ::= alternatives+ + separator => <op loosen> proper => 1 +alternatives ::= alternative+ + separator => <op equal priority> proper => 1 +alternative ::= rhs <adverb list> + +<adverb list> ::= <adverb list items> +<adverb list items> ::= <adverb item>* +<adverb item> ::= + action + | <left association> | <right association> | <group association> + | <separator specification> | <proper specification> + | <rank specification> | <null ranking specification> + | <priority specification> | <pause specification> | <event specification> + | <latm specification> | blessing | naming | <null adverb> + +<null adverb> ::= ',' +action ::= ('action' '=>') <action name> +<left association> ::= ('assoc' '=>' 'left') +<right association> ::= ('assoc' '=>' 'right') +<group association> ::= ('assoc' '=>' 'group') +<separator specification> ::= ('separator' '=>') <single symbol> +<proper specification> ::= ('proper' '=>') boolean +<rank specification> ::= ('rank' '=>') <signed integer> +<null ranking specification> ::= ('null-ranking' '=>') <null ranking constant> +<null ranking specification> ::= ('null' 'rank' '=>') <null ranking constant> +<null ranking constant> ::= 'low' | 'high' +<priority specification> ::= ('priority' '=>') <signed integer> +<pause specification> ::= ('pause' '=>') <before or after> + +<event specification> ::= ('event' '=>') <event initialization> +<event initialization> ::= <event name> <event initializer> +<event initializer> ::= ('=') <on or off> +<on or off> ::= 'on' | 'off' +<event initializer> ::= # empty + +<latm specification> ::= ('forgiving' '=>') boolean +<latm specification> ::= ('latm' '=>') boolean +<blessing> ::= ('bless' '=>') <blessing name> +<naming> ::= ('name' '=>') <alternative name> + +<alternative name> ::= <standard name> | <single quoted name> +<lexer name> ::= <standard name> | <single quoted name> + +<event name> ::= <standard name> + | <single quoted name> + | <reserved event name> +<reserved event name> ~ ':symbol' + +<blessing name> ::= <standard name> +<blessing name> ::= <reserved blessing name> + +lhs ::= <symbol name> +rhs ::= <rhs primary>+ +<rhs primary> ::= <single symbol> +<rhs primary> ::= <single quoted string> +<rhs primary> ::= <parenthesized rhs primary list> +<parenthesized rhs primary list> ::= ('(') <rhs primary list> (')') +<rhs primary list> ::= <rhs primary>+ +<single symbol> ::= + symbol + | <character class> +symbol ::= <symbol name> +<symbol name> ::= <bare name> +<symbol name> ::= <bracketed name> +<action name> ::= <Perl name> +<action name> ::= <reserved action name> +<action name> ::= <array descriptor> + +:discard ~ whitespace +whitespace ~ [\s]+ + +# allow comments +:discard ~ <hash comment> +<hash comment> ~ <terminated hash comment> | <unterminated + final hash comment> +<terminated hash comment> ~ '#' <hash comment body> <vertical space char> +<unterminated final hash comment> ~ '#' <hash comment body> +<hash comment body> ~ <hash comment char>* +<vertical space char> ~ [\x{A}\x{B}\x{C}\x{D}\x{2028}\x{2029}] +<hash comment char> ~ [^\x{A}\x{B}\x{C}\x{D}\x{2028}\x{2029}] + +<op declare bnf> ~ '::=' +<op declare match> ~ '~' +<op loosen> ~ '||' +<op equal priority> ~ '|' +quantifier ::= '*' | '+' +<before or after> ~ 'before' | 'after' + +<signed integer> ~ <integer> | <sign> <integer> +<sign> ~ [+-] +<integer> ~ [\d]+ + +boolean ~ [01] + +<reserved action name> ~ '::' <one or more word characters> +<reserved blessing name> ~ '::' <one or more word characters> +<one or more word characters> ~ [\w]+ +<zero or more word characters> ~ [\w]* + +# Perl identifiers allow an initial digit, which makes them slightly more liberal than Perl bare names +# but equivalent to Perl names with sigils. +<Perl identifier> ~ [\w]+ +<double colon> ~ '::' +<Perl name> ~ <Perl identifier>+ separator => <double colon> proper => 1 + +<bare name> ~ [\w]+ +<standard name> ~ [a-zA-Z] <zero or more word characters> +<bracketed name> ~ '<' <bracketed name string> '>' +<bracketed name string> ~ [\s\w]+ + +<array descriptor> ~ <array descriptor left bracket> <result item descriptor list> <array descriptor right bracket> +<array descriptor left bracket> ~ '[' +<array descriptor left bracket> ~ '[' whitespace +<array descriptor right bracket> ~ ']' +<array descriptor right bracket> ~ whitespace ']' +<result item descriptor list> ~ <result item descriptor>* separator => <result item descriptor separator> +<result item descriptor separator> ~ [,] +<result item descriptor separator> ~ [,] whitespace +<result item descriptor> ~ 'start' | 'length' + | 'g1start' | 'g1length' + | 'name' | 'lhs' | 'symbol' | 'rule' + | 'value' | 'values' + +# In single quoted strings and character classes +# no escaping or internal newlines, and disallow empty string + +<single quoted string> ~ ['] <string without single quote or vertical space> ['] <character class modifiers> +<single quoted name> ~ ['] <string without single quote or vertical space> ['] +<string without single quote or vertical space> ~ [^'\x{0A}\x{0B}\x{0C}\x{0D}\x{0085}\x{2028}\x{2029}]+ + +<character class> ~ '[' <cc elements> ']' <character class modifiers> +<cc elements> ~ <cc element>+ +<cc element> ~ <safe cc character> +# hex 5d is right square bracket +<safe cc character> ~ [^\x{5d}\x{0A}\x{0B}\x{0C}\x{0D}\x{0085}\x{2028}\x{2029}] +<cc element> ~ <escaped cc character> +<escaped cc character> ~ '\' <horizontal character> +<cc element> ~ <posix char class> +<cc element> ~ <negated posix char class> +<character class modifiers> ~ <character class modifier>* +<character class modifier> ~ ':ic' +<character class modifier> ~ ':i' + +# [=xyz=] and [.xyz.] are parsed by Perl, but then currently cause an exception. +# Catching Perl exceptions is inconvenient for Marpa, +# so we reject them syntactically instead. +<posix char class> ~ '[:' <posix char class name> ':]' +<negated posix char class> ~ '[:^' <posix char class name> ':]' +<posix char class name> ~ [[:alnum:]]+ + +# a horizontal character is any character that is not vertical space +<horizontal character> ~ [^\x{A}\x{B}\x{C}\x{D}\x{2028}\x{2029}] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Tree-DAG_Node-1.33/share/metag.cooked.tree new/Tree-DAG_Node-1.35/share/metag.cooked.tree --- old/Tree-DAG_Node-1.33/share/metag.cooked.tree 1970-01-01 01:00:00.000000000 +0100 +++ new/Tree-DAG_Node-1.35/share/metag.cooked.tree 2025-04-25 05:15:33.000000000 +0200 @@ -0,0 +1,130 @@ +Cooked tree. Attributes: {rule => "", uid => "1"} + |--- statements. Attributes: {rule => "1", uid => "2"} + |--- default_rule. Attributes: {rule => "1", uid => "3"} + |--- lexeme_default_statement. Attributes: {rule => "1", uid => "4"} + |--- start_rule. Attributes: {rule => "1", uid => "5"} + |--- quantified_rule. Attributes: {rule => "1", uid => "6"} + |--- priority_rule. Attributes: {rule => "1", uid => "7"} + |--- priority_rule. Attributes: {rule => "1", uid => "8"} + |--- priority_rule. Attributes: {rule => "1", uid => "9"} + |--- priority_rule. Attributes: {rule => "1", uid => "10"} + |--- priority_rule. Attributes: {rule => "1", uid => "11"} + |--- priority_rule. Attributes: {rule => "1", uid => "12"} + |--- priority_rule. Attributes: {rule => "1", uid => "13"} + |--- priority_rule. Attributes: {rule => "1", uid => "14"} + |--- priority_rule. Attributes: {rule => "1", uid => "15"} + |--- priority_rule. Attributes: {rule => "1", uid => "16"} + |--- priority_rule. Attributes: {rule => "1", uid => "17"} + |--- priority_rule. Attributes: {rule => "1", uid => "18"} + |--- priority_rule. Attributes: {rule => "1", uid => "19"} + |--- priority_rule. Attributes: {rule => "1", uid => "20"} + |--- priority_rule. Attributes: {rule => "1", uid => "21"} + |--- priority_rule. Attributes: {rule => "1", uid => "22"} + |--- priority_rule. Attributes: {rule => "1", uid => "23"} + |--- priority_rule. Attributes: {rule => "1", uid => "24"} + |--- priority_rule. Attributes: {rule => "1", uid => "25"} + |--- priority_rule. Attributes: {rule => "1", uid => "26"} + |--- separator_specification. Attributes: {rule => "1", uid => "27"} + |--- separator_specification. Attributes: {rule => "1", uid => "28"} + |--- priority_rule. Attributes: {rule => "1", uid => "29"} + |--- priority_rule. Attributes: {rule => "1", uid => "30"} + |--- quantified_rule. Attributes: {rule => "1", uid => "31"} + |--- priority_rule. Attributes: {rule => "1", uid => "32"} + |--- priority_rule. Attributes: {rule => "1", uid => "33"} + |--- priority_rule. Attributes: {rule => "1", uid => "34"} + |--- priority_rule. Attributes: {rule => "1", uid => "35"} + |--- priority_rule. Attributes: {rule => "1", uid => "36"} + |--- priority_rule. Attributes: {rule => "1", uid => "37"} + |--- priority_rule. Attributes: {rule => "1", uid => "38"} + |--- priority_rule. Attributes: {rule => "1", uid => "39"} + |--- priority_rule. Attributes: {rule => "1", uid => "40"} + |--- priority_rule. Attributes: {rule => "1", uid => "41"} + |--- priority_rule. Attributes: {rule => "1", uid => "42"} + |--- priority_rule. Attributes: {rule => "1", uid => "43"} + |--- priority_rule. Attributes: {rule => "1", uid => "44"} + |--- priority_rule. Attributes: {rule => "1", uid => "45"} + |--- priority_rule. Attributes: {rule => "1", uid => "46"} + |--- priority_rule. Attributes: {rule => "1", uid => "47"} + |--- priority_rule. Attributes: {rule => "1", uid => "48"} + |--- priority_rule. Attributes: {rule => "1", uid => "49"} + |--- lhs. Attributes: {rule => "1", uid => "50"} + |--- priority_rule. Attributes: {rule => "1", uid => "51"} + |--- priority_rule. Attributes: {rule => "1", uid => "52"} + |--- priority_rule. Attributes: {rule => "1", uid => "53"} + |--- priority_rule. Attributes: {rule => "1", uid => "54"} + |--- priority_rule. Attributes: {rule => "1", uid => "55"} + |--- priority_rule. Attributes: {rule => "1", uid => "56"} + |--- priority_rule. Attributes: {rule => "1", uid => "57"} + |--- priority_rule. Attributes: {rule => "1", uid => "58"} + |--- priority_rule. Attributes: {rule => "1", uid => "59"} + |--- priority_rule. Attributes: {rule => "1", uid => "60"} + |--- priority_rule. Attributes: {rule => "1", uid => "61"} + |--- quantified_rule. Attributes: {rule => "1", uid => "62"} + |--- priority_rule. Attributes: {rule => "1", uid => "63"} + |--- priority_rule. Attributes: {rule => "1", uid => "64"} + |--- priority_rule. Attributes: {rule => "1", uid => "65"} + |--- priority_rule. Attributes: {rule => "1", uid => "66"} + |--- quantified_rule. Attributes: {rule => "1", uid => "67"} + |--- priority_rule. Attributes: {rule => "1", uid => "68"} + |--- priority_rule. Attributes: {rule => "1", uid => "69"} + |--- priority_rule. Attributes: {rule => "1", uid => "70"} + |--- priority_rule. Attributes: {rule => "1", uid => "71"} + |--- priority_rule. Attributes: {rule => "1", uid => "72"} + |--- priority_rule. Attributes: {rule => "1", uid => "73"} + |--- priority_rule. Attributes: {rule => "1", uid => "74"} + |--- discard_rule. Attributes: {rule => "1", uid => "75"} + |--- quantified_rule. Attributes: {rule => "1", uid => "76"} + |--- discard_rule. Attributes: {rule => "1", uid => "77"} + |--- priority_rule. Attributes: {rule => "1", uid => "78"} + |--- priority_rule. Attributes: {rule => "1", uid => "79"} + |--- priority_rule. Attributes: {rule => "1", uid => "80"} + |--- quantified_rule. Attributes: {rule => "1", uid => "81"} + |--- priority_rule. Attributes: {rule => "1", uid => "82"} + |--- priority_rule. Attributes: {rule => "1", uid => "83"} + |--- priority_rule. Attributes: {rule => "1", uid => "84"} + |--- priority_rule. Attributes: {rule => "1", uid => "85"} + |--- priority_rule. Attributes: {rule => "1", uid => "86"} + |--- priority_rule. Attributes: {rule => "1", uid => "87"} + |--- priority_rule. Attributes: {rule => "1", uid => "88"} + |--- priority_rule. Attributes: {rule => "1", uid => "89"} + |--- priority_rule. Attributes: {rule => "1", uid => "90"} + |--- priority_rule. Attributes: {rule => "1", uid => "91"} + |--- quantified_rule. Attributes: {rule => "1", uid => "92"} + |--- priority_rule. Attributes: {rule => "1", uid => "93"} + |--- priority_rule. Attributes: {rule => "1", uid => "94"} + |--- priority_rule. Attributes: {rule => "1", uid => "95"} + |--- quantified_rule. Attributes: {rule => "1", uid => "96"} + |--- quantified_rule. Attributes: {rule => "1", uid => "97"} + |--- quantified_rule. Attributes: {rule => "1", uid => "98"} + |--- priority_rule. Attributes: {rule => "1", uid => "99"} + |--- separator_specification. Attributes: {rule => "1", uid => "100"} + |--- quantified_rule. Attributes: {rule => "1", uid => "101"} + |--- priority_rule. Attributes: {rule => "1", uid => "102"} + |--- priority_rule. Attributes: {rule => "1", uid => "103"} + |--- quantified_rule. Attributes: {rule => "1", uid => "104"} + |--- priority_rule. Attributes: {rule => "1", uid => "105"} + |--- priority_rule. Attributes: {rule => "1", uid => "106"} + |--- priority_rule. Attributes: {rule => "1", uid => "107"} + |--- priority_rule. Attributes: {rule => "1", uid => "108"} + |--- priority_rule. Attributes: {rule => "1", uid => "109"} + |--- bracketed_name. Attributes: {rule => "1", uid => "110"} + |--- priority_rule. Attributes: {rule => "1", uid => "111"} + |--- priority_rule. Attributes: {rule => "1", uid => "112"} + |--- priority_rule. Attributes: {rule => "1", uid => "113"} + |--- priority_rule. Attributes: {rule => "1", uid => "114"} + |--- priority_rule. Attributes: {rule => "1", uid => "115"} + |--- quantified_rule. Attributes: {rule => "1", uid => "116"} + |--- priority_rule. Attributes: {rule => "1", uid => "117"} + |--- quantified_rule. Attributes: {rule => "1", uid => "118"} + |--- priority_rule. Attributes: {rule => "1", uid => "119"} + |--- priority_rule. Attributes: {rule => "1", uid => "120"} + |--- priority_rule. Attributes: {rule => "1", uid => "121"} + |--- priority_rule. Attributes: {rule => "1", uid => "122"} + |--- priority_rule. Attributes: {rule => "1", uid => "123"} + |--- priority_rule. Attributes: {rule => "1", uid => "124"} + |--- quantified_rule. Attributes: {rule => "1", uid => "125"} + |--- priority_rule. Attributes: {rule => "1", uid => "126"} + |--- priority_rule. Attributes: {rule => "1", uid => "127"} + |--- priority_rule. Attributes: {rule => "1", uid => "128"} + |--- priority_rule. Attributes: {rule => "1", uid => "129"} + |--- quantified_rule. Attributes: {rule => "1", uid => "130"} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Tree-DAG_Node-1.33/share/metag.cooked.tree.new new/Tree-DAG_Node-1.35/share/metag.cooked.tree.new --- old/Tree-DAG_Node-1.33/share/metag.cooked.tree.new 1970-01-01 01:00:00.000000000 +0100 +++ new/Tree-DAG_Node-1.35/share/metag.cooked.tree.new 2025-04-25 07:57:57.000000000 +0200 @@ -0,0 +1,130 @@ +Cooked tree. Attributes: {rule => "", uid => "1"} + |--- statements. Attributes: {rule => "1", uid => "2"} + |--- default_rule. Attributes: {rule => "1", uid => "3"} + |--- lexeme_default_statement. Attributes: {rule => "1", uid => "4"} + |--- start_rule. Attributes: {rule => "1", uid => "5"} + |--- quantified_rule. Attributes: {rule => "1", uid => "6"} + |--- priority_rule. Attributes: {rule => "1", uid => "7"} + |--- priority_rule. Attributes: {rule => "1", uid => "8"} + |--- priority_rule. Attributes: {rule => "1", uid => "9"} + |--- priority_rule. Attributes: {rule => "1", uid => "10"} + |--- priority_rule. Attributes: {rule => "1", uid => "11"} + |--- priority_rule. Attributes: {rule => "1", uid => "12"} + |--- priority_rule. Attributes: {rule => "1", uid => "13"} + |--- priority_rule. Attributes: {rule => "1", uid => "14"} + |--- priority_rule. Attributes: {rule => "1", uid => "15"} + |--- priority_rule. Attributes: {rule => "1", uid => "16"} + |--- priority_rule. Attributes: {rule => "1", uid => "17"} + |--- priority_rule. Attributes: {rule => "1", uid => "18"} + |--- priority_rule. Attributes: {rule => "1", uid => "19"} + |--- priority_rule. Attributes: {rule => "1", uid => "20"} + |--- priority_rule. Attributes: {rule => "1", uid => "21"} + |--- priority_rule. Attributes: {rule => "1", uid => "22"} + |--- priority_rule. Attributes: {rule => "1", uid => "23"} + |--- priority_rule. Attributes: {rule => "1", uid => "24"} + |--- priority_rule. Attributes: {rule => "1", uid => "25"} + |--- priority_rule. Attributes: {rule => "1", uid => "26"} + |--- separator_specification. Attributes: {rule => "1", uid => "27"} + |--- separator_specification. Attributes: {rule => "1", uid => "28"} + |--- priority_rule. Attributes: {rule => "1", uid => "29"} + |--- priority_rule. Attributes: {rule => "1", uid => "30"} + |--- quantified_rule. Attributes: {rule => "1", uid => "31"} + |--- priority_rule. Attributes: {rule => "1", uid => "32"} + |--- priority_rule. Attributes: {rule => "1", uid => "33"} + |--- priority_rule. Attributes: {rule => "1", uid => "34"} + |--- priority_rule. Attributes: {rule => "1", uid => "35"} + |--- priority_rule. Attributes: {rule => "1", uid => "36"} + |--- priority_rule. Attributes: {rule => "1", uid => "37"} + |--- priority_rule. Attributes: {rule => "1", uid => "38"} + |--- priority_rule. Attributes: {rule => "1", uid => "39"} + |--- priority_rule. Attributes: {rule => "1", uid => "40"} + |--- priority_rule. Attributes: {rule => "1", uid => "41"} + |--- priority_rule. Attributes: {rule => "1", uid => "42"} + |--- priority_rule. Attributes: {rule => "1", uid => "43"} + |--- priority_rule. Attributes: {rule => "1", uid => "44"} + |--- priority_rule. Attributes: {rule => "1", uid => "45"} + |--- priority_rule. Attributes: {rule => "1", uid => "46"} + |--- priority_rule. Attributes: {rule => "1", uid => "47"} + |--- priority_rule. Attributes: {rule => "1", uid => "48"} + |--- priority_rule. Attributes: {rule => "1", uid => "49"} + |--- lhs. Attributes: {rule => "1", uid => "50"} + |--- priority_rule. Attributes: {rule => "1", uid => "51"} + |--- priority_rule. Attributes: {rule => "1", uid => "52"} + |--- priority_rule. Attributes: {rule => "1", uid => "53"} + |--- priority_rule. Attributes: {rule => "1", uid => "54"} + |--- priority_rule. Attributes: {rule => "1", uid => "55"} + |--- priority_rule. Attributes: {rule => "1", uid => "56"} + |--- priority_rule. Attributes: {rule => "1", uid => "57"} + |--- priority_rule. Attributes: {rule => "1", uid => "58"} + |--- priority_rule. Attributes: {rule => "1", uid => "59"} + |--- priority_rule. Attributes: {rule => "1", uid => "60"} + |--- priority_rule. Attributes: {rule => "1", uid => "61"} + |--- quantified_rule. Attributes: {rule => "1", uid => "62"} + |--- priority_rule. Attributes: {rule => "1", uid => "63"} + |--- priority_rule. Attributes: {rule => "1", uid => "64"} + |--- priority_rule. Attributes: {rule => "1", uid => "65"} + |--- priority_rule. Attributes: {rule => "1", uid => "66"} + |--- quantified_rule. Attributes: {rule => "1", uid => "67"} + |--- priority_rule. Attributes: {rule => "1", uid => "68"} + |--- priority_rule. Attributes: {rule => "1", uid => "69"} + |--- priority_rule. Attributes: {rule => "1", uid => "70"} + |--- priority_rule. Attributes: {rule => "1", uid => "71"} + |--- priority_rule. Attributes: {rule => "1", uid => "72"} + |--- priority_rule. Attributes: {rule => "1", uid => "73"} + |--- priority_rule. Attributes: {rule => "1", uid => "74"} + |--- discard_rule. Attributes: {rule => "1", uid => "75"} + |--- quantified_rule. Attributes: {rule => "1", uid => "76"} + |--- discard_rule. Attributes: {rule => "1", uid => "77"} + |--- priority_rule. Attributes: {rule => "1", uid => "78"} + |--- priority_rule. Attributes: {rule => "1", uid => "79"} + |--- priority_rule. Attributes: {rule => "1", uid => "80"} + |--- quantified_rule. Attributes: {rule => "1", uid => "81"} + |--- priority_rule. Attributes: {rule => "1", uid => "82"} + |--- priority_rule. Attributes: {rule => "1", uid => "83"} + |--- priority_rule. Attributes: {rule => "1", uid => "84"} + |--- priority_rule. Attributes: {rule => "1", uid => "85"} + |--- priority_rule. Attributes: {rule => "1", uid => "86"} + |--- priority_rule. Attributes: {rule => "1", uid => "87"} + |--- priority_rule. Attributes: {rule => "1", uid => "88"} + |--- priority_rule. Attributes: {rule => "1", uid => "89"} + |--- priority_rule. Attributes: {rule => "1", uid => "90"} + |--- priority_rule. Attributes: {rule => "1", uid => "91"} + |--- quantified_rule. Attributes: {rule => "1", uid => "92"} + |--- priority_rule. Attributes: {rule => "1", uid => "93"} + |--- priority_rule. Attributes: {rule => "1", uid => "94"} + |--- priority_rule. Attributes: {rule => "1", uid => "95"} + |--- quantified_rule. Attributes: {rule => "1", uid => "96"} + |--- quantified_rule. Attributes: {rule => "1", uid => "97"} + |--- quantified_rule. Attributes: {rule => "1", uid => "98"} + |--- priority_rule. Attributes: {rule => "1", uid => "99"} + |--- separator_specification. Attributes: {rule => "1", uid => "100"} + |--- quantified_rule. Attributes: {rule => "1", uid => "101"} + |--- priority_rule. Attributes: {rule => "1", uid => "102"} + |--- priority_rule. Attributes: {rule => "1", uid => "103"} + |--- quantified_rule. Attributes: {rule => "1", uid => "104"} + |--- priority_rule. Attributes: {rule => "1", uid => "105"} + |--- priority_rule. Attributes: {rule => "1", uid => "106"} + |--- priority_rule. Attributes: {rule => "1", uid => "107"} + |--- priority_rule. Attributes: {rule => "1", uid => "108"} + |--- priority_rule. Attributes: {rule => "1", uid => "109"} + |--- bracketed_name. Attributes: {rule => "1", uid => "110"} + |--- priority_rule. Attributes: {rule => "1", uid => "111"} + |--- priority_rule. Attributes: {rule => "1", uid => "112"} + |--- priority_rule. Attributes: {rule => "1", uid => "113"} + |--- priority_rule. Attributes: {rule => "1", uid => "114"} + |--- priority_rule. Attributes: {rule => "1", uid => "115"} + |--- quantified_rule. Attributes: {rule => "1", uid => "116"} + |--- priority_rule. Attributes: {rule => "1", uid => "117"} + |--- quantified_rule. Attributes: {rule => "1", uid => "118"} + |--- priority_rule. Attributes: {rule => "1", uid => "119"} + |--- priority_rule. Attributes: {rule => "1", uid => "120"} + |--- priority_rule. Attributes: {rule => "1", uid => "121"} + |--- priority_rule. Attributes: {rule => "1", uid => "122"} + |--- priority_rule. Attributes: {rule => "1", uid => "123"} + |--- priority_rule. Attributes: {rule => "1", uid => "124"} + |--- quantified_rule. Attributes: {rule => "1", uid => "125"} + |--- priority_rule. Attributes: {rule => "1", uid => "126"} + |--- priority_rule. Attributes: {rule => "1", uid => "127"} + |--- priority_rule. Attributes: {rule => "1", uid => "128"} + |--- priority_rule. Attributes: {rule => "1", uid => "129"} + |--- quantified_rule. Attributes: {rule => "1", uid => "130"} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Tree-DAG_Node-1.33/t/metag.cooked.tree.txt new/Tree-DAG_Node-1.35/t/metag.cooked.tree.txt --- old/Tree-DAG_Node-1.33/t/metag.cooked.tree.txt 1970-01-01 01:00:00.000000000 +0100 +++ new/Tree-DAG_Node-1.35/t/metag.cooked.tree.txt 2025-04-25 08:18:51.000000000 +0200 @@ -0,0 +1,130 @@ +Cooked tree. Attributes: {rule => "", uid => "1"} + |--- statements. Attributes: {rule => "1", uid => "2"} + |--- default_rule. Attributes: {rule => "1", uid => "3"} + |--- lexeme_default_statement. Attributes: {rule => "1", uid => "4"} + |--- start_rule. Attributes: {rule => "1", uid => "5"} + |--- quantified_rule. Attributes: {rule => "1", uid => "6"} + |--- priority_rule. Attributes: {rule => "1", uid => "7"} + |--- priority_rule. Attributes: {rule => "1", uid => "8"} + |--- priority_rule. Attributes: {rule => "1", uid => "9"} + |--- priority_rule. Attributes: {rule => "1", uid => "10"} + |--- priority_rule. Attributes: {rule => "1", uid => "11"} + |--- priority_rule. Attributes: {rule => "1", uid => "12"} + |--- priority_rule. Attributes: {rule => "1", uid => "13"} + |--- priority_rule. Attributes: {rule => "1", uid => "14"} + |--- priority_rule. Attributes: {rule => "1", uid => "15"} + |--- priority_rule. Attributes: {rule => "1", uid => "16"} + |--- priority_rule. Attributes: {rule => "1", uid => "17"} + |--- priority_rule. Attributes: {rule => "1", uid => "18"} + |--- priority_rule. Attributes: {rule => "1", uid => "19"} + |--- priority_rule. Attributes: {rule => "1", uid => "20"} + |--- priority_rule. Attributes: {rule => "1", uid => "21"} + |--- priority_rule. Attributes: {rule => "1", uid => "22"} + |--- priority_rule. Attributes: {rule => "1", uid => "23"} + |--- priority_rule. Attributes: {rule => "1", uid => "24"} + |--- priority_rule. Attributes: {rule => "1", uid => "25"} + |--- priority_rule. Attributes: {rule => "1", uid => "26"} + |--- separator_specification. Attributes: {rule => "1", uid => "27"} + |--- separator_specification. Attributes: {rule => "1", uid => "28"} + |--- priority_rule. Attributes: {rule => "1", uid => "29"} + |--- priority_rule. Attributes: {rule => "1", uid => "30"} + |--- quantified_rule. Attributes: {rule => "1", uid => "31"} + |--- priority_rule. Attributes: {rule => "1", uid => "32"} + |--- priority_rule. Attributes: {rule => "1", uid => "33"} + |--- priority_rule. Attributes: {rule => "1", uid => "34"} + |--- priority_rule. Attributes: {rule => "1", uid => "35"} + |--- priority_rule. Attributes: {rule => "1", uid => "36"} + |--- priority_rule. Attributes: {rule => "1", uid => "37"} + |--- priority_rule. Attributes: {rule => "1", uid => "38"} + |--- priority_rule. Attributes: {rule => "1", uid => "39"} + |--- priority_rule. Attributes: {rule => "1", uid => "40"} + |--- priority_rule. Attributes: {rule => "1", uid => "41"} + |--- priority_rule. Attributes: {rule => "1", uid => "42"} + |--- priority_rule. Attributes: {rule => "1", uid => "43"} + |--- priority_rule. Attributes: {rule => "1", uid => "44"} + |--- priority_rule. Attributes: {rule => "1", uid => "45"} + |--- priority_rule. Attributes: {rule => "1", uid => "46"} + |--- priority_rule. Attributes: {rule => "1", uid => "47"} + |--- priority_rule. Attributes: {rule => "1", uid => "48"} + |--- priority_rule. Attributes: {rule => "1", uid => "49"} + |--- lhs. Attributes: {rule => "1", uid => "50"} + |--- priority_rule. Attributes: {rule => "1", uid => "51"} + |--- priority_rule. Attributes: {rule => "1", uid => "52"} + |--- priority_rule. Attributes: {rule => "1", uid => "53"} + |--- priority_rule. Attributes: {rule => "1", uid => "54"} + |--- priority_rule. Attributes: {rule => "1", uid => "55"} + |--- priority_rule. Attributes: {rule => "1", uid => "56"} + |--- priority_rule. Attributes: {rule => "1", uid => "57"} + |--- priority_rule. Attributes: {rule => "1", uid => "58"} + |--- priority_rule. Attributes: {rule => "1", uid => "59"} + |--- priority_rule. Attributes: {rule => "1", uid => "60"} + |--- priority_rule. Attributes: {rule => "1", uid => "61"} + |--- quantified_rule. Attributes: {rule => "1", uid => "62"} + |--- priority_rule. Attributes: {rule => "1", uid => "63"} + |--- priority_rule. Attributes: {rule => "1", uid => "64"} + |--- priority_rule. Attributes: {rule => "1", uid => "65"} + |--- priority_rule. Attributes: {rule => "1", uid => "66"} + |--- quantified_rule. Attributes: {rule => "1", uid => "67"} + |--- priority_rule. Attributes: {rule => "1", uid => "68"} + |--- priority_rule. Attributes: {rule => "1", uid => "69"} + |--- priority_rule. Attributes: {rule => "1", uid => "70"} + |--- priority_rule. Attributes: {rule => "1", uid => "71"} + |--- priority_rule. Attributes: {rule => "1", uid => "72"} + |--- priority_rule. Attributes: {rule => "1", uid => "73"} + |--- priority_rule. Attributes: {rule => "1", uid => "74"} + |--- discard_rule. Attributes: {rule => "1", uid => "75"} + |--- quantified_rule. Attributes: {rule => "1", uid => "76"} + |--- discard_rule. Attributes: {rule => "1", uid => "77"} + |--- priority_rule. Attributes: {rule => "1", uid => "78"} + |--- priority_rule. Attributes: {rule => "1", uid => "79"} + |--- priority_rule. Attributes: {rule => "1", uid => "80"} + |--- quantified_rule. Attributes: {rule => "1", uid => "81"} + |--- priority_rule. Attributes: {rule => "1", uid => "82"} + |--- priority_rule. Attributes: {rule => "1", uid => "83"} + |--- priority_rule. Attributes: {rule => "1", uid => "84"} + |--- priority_rule. Attributes: {rule => "1", uid => "85"} + |--- priority_rule. Attributes: {rule => "1", uid => "86"} + |--- priority_rule. Attributes: {rule => "1", uid => "87"} + |--- priority_rule. Attributes: {rule => "1", uid => "88"} + |--- priority_rule. Attributes: {rule => "1", uid => "89"} + |--- priority_rule. Attributes: {rule => "1", uid => "90"} + |--- priority_rule. Attributes: {rule => "1", uid => "91"} + |--- quantified_rule. Attributes: {rule => "1", uid => "92"} + |--- priority_rule. Attributes: {rule => "1", uid => "93"} + |--- priority_rule. Attributes: {rule => "1", uid => "94"} + |--- priority_rule. Attributes: {rule => "1", uid => "95"} + |--- quantified_rule. Attributes: {rule => "1", uid => "96"} + |--- quantified_rule. Attributes: {rule => "1", uid => "97"} + |--- quantified_rule. Attributes: {rule => "1", uid => "98"} + |--- priority_rule. Attributes: {rule => "1", uid => "99"} + |--- separator_specification. Attributes: {rule => "1", uid => "100"} + |--- quantified_rule. Attributes: {rule => "1", uid => "101"} + |--- priority_rule. Attributes: {rule => "1", uid => "102"} + |--- priority_rule. Attributes: {rule => "1", uid => "103"} + |--- quantified_rule. Attributes: {rule => "1", uid => "104"} + |--- priority_rule. Attributes: {rule => "1", uid => "105"} + |--- priority_rule. Attributes: {rule => "1", uid => "106"} + |--- priority_rule. Attributes: {rule => "1", uid => "107"} + |--- priority_rule. Attributes: {rule => "1", uid => "108"} + |--- priority_rule. Attributes: {rule => "1", uid => "109"} + |--- bracketed_name. Attributes: {rule => "1", uid => "110"} + |--- priority_rule. Attributes: {rule => "1", uid => "111"} + |--- priority_rule. Attributes: {rule => "1", uid => "112"} + |--- priority_rule. Attributes: {rule => "1", uid => "113"} + |--- priority_rule. Attributes: {rule => "1", uid => "114"} + |--- priority_rule. Attributes: {rule => "1", uid => "115"} + |--- quantified_rule. Attributes: {rule => "1", uid => "116"} + |--- priority_rule. Attributes: {rule => "1", uid => "117"} + |--- quantified_rule. Attributes: {rule => "1", uid => "118"} + |--- priority_rule. Attributes: {rule => "1", uid => "119"} + |--- priority_rule. Attributes: {rule => "1", uid => "120"} + |--- priority_rule. Attributes: {rule => "1", uid => "121"} + |--- priority_rule. Attributes: {rule => "1", uid => "122"} + |--- priority_rule. Attributes: {rule => "1", uid => "123"} + |--- priority_rule. Attributes: {rule => "1", uid => "124"} + |--- quantified_rule. Attributes: {rule => "1", uid => "125"} + |--- priority_rule. Attributes: {rule => "1", uid => "126"} + |--- priority_rule. Attributes: {rule => "1", uid => "127"} + |--- priority_rule. Attributes: {rule => "1", uid => "128"} + |--- priority_rule. Attributes: {rule => "1", uid => "129"} + |--- quantified_rule. Attributes: {rule => "1", uid => "130"} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Tree-DAG_Node-1.33/t/read.tree.t new/Tree-DAG_Node-1.35/t/read.tree.t --- old/Tree-DAG_Node-1.33/t/read.tree.t 2025-03-30 01:58:57.000000000 +0100 +++ new/Tree-DAG_Node-1.35/t/read.tree.t 2025-04-26 09:47:02.000000000 +0200 @@ -5,7 +5,7 @@ use File::Spec; use File::Temp; -use File::Slurper 'read_text'; +use File::Slurper 'read_lines'; use Test::More; @@ -20,7 +20,7 @@ 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($input_file_name) = File::Spec -> catfile('t', "$file_name.txt"); my($root) = $node -> read_tree($input_file_name); my($no_attr) = $file_name =~ /without/ ? 1 : 0; @@ -28,7 +28,12 @@ print $fh "$_\n" for @{$root -> tree2string({no_attributes => $no_attr})}; close $fh; - is(read_text($input_file_name), read_text($test_file_name), "\u$file_name attributes: Output tree matches shipped tree"); + # Ensure inter-OS compatability. + + my(@expected) = map{s/\r$//g; $_} read_lines($input_file_name); + my(@got) = map{s/\r$//g; $_} read_lines($test_file_name); + + is(join('', @expected), join('', @got), "\u$file_name attributes: Output tree matches shipped tree"); } # End of process. @@ -40,9 +45,15 @@ isa_ok($node, 'Tree::DAG_Node', 'new() returned correct object type'); -for (qw/utf8/)# with without/) +my($sample_file_name); + +for (qw/utf8 with without/) { - process($node, $_); + $sample_file_name = "tree.$_.attributes"; + + process($node, $sample_file_name); } +process($node, 'metag.cooked.tree'); + done_testing; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Tree-DAG_Node-1.33/t/tree.with.attributes.txt new/Tree-DAG_Node-1.35/t/tree.with.attributes.txt --- old/Tree-DAG_Node-1.33/t/tree.with.attributes.txt 2021-08-16 08:44:31.000000000 +0200 +++ new/Tree-DAG_Node-1.35/t/tree.with.attributes.txt 2025-04-25 08:05:11.000000000 +0200 @@ -1,134 +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]"} + |--- :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.33/t/tree.without.attributes.txt new/Tree-DAG_Node-1.35/t/tree.without.attributes.txt --- old/Tree-DAG_Node-1.33/t/tree.without.attributes.txt 2021-08-16 08:44:31.000000000 +0200 +++ new/Tree-DAG_Node-1.35/t/tree.without.attributes.txt 2025-04-25 08:06:22.000000000 +0200 @@ -1,134 +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] +statements. Attributes: {} + |--- :default. Attributes: {} + | |--- ::=. Attributes: {} + | |--- action. Attributes: {} + | |--- =>. Attributes: {} + | |--- [values]. Attributes: {} + |--- :start. Attributes: {} + | |--- ::=. Attributes: {} + | |--- graph_grammar. Attributes: {} + |--- graph_grammar. Attributes: {} + | |--- ::=. Attributes: {} + | |--- graph_definition. Attributes: {} + | |--- action. Attributes: {} + | |--- =>. Attributes: {} + | |--- graph. Attributes: {} + |--- graph_definition. Attributes: {} + | |--- ::=. Attributes: {} + | |--- node_definition. Attributes: {} + | |--- |. Attributes: {} + | |--- edge_definition. Attributes: {} + |--- node_definition. Attributes: {} + | |--- ::=. Attributes: {} + | |--- node_statement. Attributes: {} + | |--- |. Attributes: {} + | |--- node_statement. Attributes: {} + | |--- graph_definition. Attributes: {} + |--- node_statement. Attributes: {} + | |--- ::=. Attributes: {} + | |--- node_name. Attributes: {} + | |--- |. Attributes: {} + | |--- node_name. Attributes: {} + | |--- attribute_definition. Attributes: {} + | |--- |. Attributes: {} + | |--- node_statement. Attributes: {} + | |--- (','). Attributes: {} + | |--- node_statement. Attributes: {} + |--- node_name. Attributes: {} + | |--- ::=. Attributes: {} + | |--- start_node. Attributes: {} + | |--- end_node. Attributes: {} + |--- :lexeme. Attributes: {} + | |--- ~. Attributes: {} + | |--- start_node. Attributes: {} + | |--- pause. Attributes: {} + | |--- =>. Attributes: {} + | |--- before. Attributes: {} + | |--- event. Attributes: {} + | |--- =>. Attributes: {} + | |--- start_node. Attributes: {} + |--- start_node. Attributes: {} + | |--- ~. Attributes: {} + | |--- '['. Attributes: {} + |--- :lexeme. Attributes: {} + | |--- ~. Attributes: {} + | |--- end_node. Attributes: {} + |--- end_node. Attributes: {} + | |--- ~. Attributes: {} + | |--- ']'. Attributes: {} + |--- edge_definition. Attributes: {} + | |--- ::=. Attributes: {} + | |--- edge_statement. Attributes: {} + | |--- |. Attributes: {} + | |--- edge_statement. Attributes: {} + | |--- graph_definition. Attributes: {} + |--- edge_statement. Attributes: {} + | |--- ::=. Attributes: {} + | |--- edge_name. Attributes: {} + | |--- |. Attributes: {} + | |--- edge_name. Attributes: {} + | |--- attribute_definition. Attributes: {} + | |--- |. Attributes: {} + | |--- edge_statement. Attributes: {} + | |--- (','). Attributes: {} + | |--- edge_statement. Attributes: {} + |--- edge_name. Attributes: {} + | |--- ::=. Attributes: {} + | |--- directed_edge. Attributes: {} + | |--- |. Attributes: {} + | |--- undirected_edge. Attributes: {} + |--- :lexeme. Attributes: {} + | |--- ~. Attributes: {} + | |--- directed_edge. Attributes: {} + | |--- pause. Attributes: {} + | |--- =>. Attributes: {} + | |--- before. Attributes: {} + | |--- event. Attributes: {} + | |--- =>. Attributes: {} + | |--- directed_edge. Attributes: {} + |--- directed_edge. Attributes: {} + | |--- ~. Attributes: {} + | |--- '->'. Attributes: {} + |--- :lexeme. Attributes: {} + | |--- ~. Attributes: {} + | |--- undirected_edge. Attributes: {} + | |--- pause. Attributes: {} + | |--- =>. Attributes: {} + | |--- before. Attributes: {} + | |--- event. Attributes: {} + | |--- =>. Attributes: {} + | |--- undirected_edge. Attributes: {} + |--- undirected_edge. Attributes: {} + | |--- ~. Attributes: {} + | |--- '--'. Attributes: {} + |--- attribute_definition. Attributes: {} + | |--- ::=. Attributes: {} + | |--- attribute_statement. Attributes: {} + |--- attribute_statement. Attributes: {} + | |--- ::=. Attributes: {} + | |--- start_attributes. Attributes: {} + | |--- end_attributes. Attributes: {} + |--- :lexeme. Attributes: {} + | |--- ~. Attributes: {} + | |--- start_attributes. Attributes: {} + | |--- pause. Attributes: {} + | |--- =>. Attributes: {} + | |--- before. Attributes: {} + | |--- event. Attributes: {} + | |--- =>. Attributes: {} + | |--- start_attributes. Attributes: {} + |--- start_attributes. Attributes: {} + | |--- ~. Attributes: {} + | |--- '{'. Attributes: {} + |--- :lexeme. Attributes: {} + | |--- ~. Attributes: {} + | |--- end_attributes. Attributes: {} + |--- end_attributes. Attributes: {} + | |--- ~. Attributes: {} + | |--- '}'. Attributes: {} + |--- :discard. Attributes: {} + | |--- =>. Attributes: {} + | |--- whitespace. Attributes: {} + |--- whitespace. Attributes: {} + |--- ~. Attributes: {} + |--- [\s]. Attributes: {}