[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
texinfo/tp Texinfo/Parser.pm t/10menu.t t/resul...
From: |
Patrice Dumas |
Subject: |
texinfo/tp Texinfo/Parser.pm t/10menu.t t/resul... |
Date: |
Sun, 26 Sep 2010 23:36:55 +0000 |
CVSROOT: /sources/texinfo
Module name: texinfo
Changes by: Patrice Dumas <pertusus> 10/09/26 23:36:55
Modified files:
tp/Texinfo : Parser.pm
Added files:
tp/t : 10menu.t
tp/t/results/menu: simple.pl
Log message:
Handle menus.
CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/texinfo/tp/Texinfo/Parser.pm?cvsroot=texinfo&r1=1.20&r2=1.21
http://cvs.savannah.gnu.org/viewcvs/texinfo/tp/t/10menu.t?cvsroot=texinfo&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/texinfo/tp/t/results/menu/simple.pl?cvsroot=texinfo&rev=1.1
Patches:
Index: Texinfo/Parser.pm
===================================================================
RCS file: /sources/texinfo/texinfo/tp/Texinfo/Parser.pm,v
retrieving revision 1.20
retrieving revision 1.21
diff -u -b -r1.20 -r1.21
--- Texinfo/Parser.pm 26 Sep 2010 18:10:33 -0000 1.20
+++ Texinfo/Parser.pm 26 Sep 2010 23:36:55 -0000 1.21
@@ -246,6 +246,11 @@
$no_paragraph_contexts{$no_paragraph_context} = 1;
};
+my %menu_commands;
+foreach my $menu_command ('menu', 'detailmenu', 'direntry') {
+ $menu_commands{$menu_command} = 1;
+};
+
# commands delimiting blocks, typically with an @end.
# Value is either the number of arguments on the line separated by
# commas or the type of command, 'raw', 'def' or 'multitable'.
@@ -743,7 +748,9 @@
my $error = $self->_line_error(
sprintf($self->__("No matching `%cend %s'"),
ord('@'), $current->{'cmdname'}), $line_nr);
- pop @{$self->{'context'}} if
($preformatted_commands{$current->{'cmdname'}});
+ pop @{$self->{'context'}} if
+ ($preformatted_commands{$current->{'cmdname'}}
+ or $menu_commands{$current->{'cmdname'}});
$current = $current->{'parent'};
} elsif ($current->{'parent'}->{'cmdname'}
and exists
$context_brace_commands{$current->{'parent'}->{'cmdname'}}) {
@@ -760,7 +767,9 @@
if ($command and $current->{'cmdname'}
and $current->{'cmdname'} eq $command) {
- pop @{$self->{'context'}} if
($preformatted_commands{$current->{'cmdname'}});
+ pop @{$self->{'context'}} if
+ ($preformatted_commands{$current->{'cmdname'}}
+ or $menu_commands{$current->{'cmdname'}});
$current = $current->{'parent'}
}
return ($current, 0);
@@ -851,11 +860,13 @@
#
#c 'brace_command_arg'
#
-#c 'before_item' FIXME what comes after @*table, @itemize, @enumerate before
+#c 'before_item' what comes after @*table, @itemize, @enumerate before
# an @item
#
#c 'paragraph'
#
+#a 'line_def*'
+#
#special for @verb, type is the character
# the main subroutine
@@ -898,11 +909,11 @@
$line_index++;
if ($self->{'debug'}) {
- $current->{'HERE !!!!'} = 1;
+ $current->{'HERE !!!!'} = 1; # marks where we are in the tree
local $Data::Dumper::Indent = 1;
local $Data::Dumper::Purity = 1;
print STDERR "".Data::Dumper->Dump([$root], ['$root']);
- print STDERR "NEW LINE: $line";
+ print STDERR "NEW LINE($self->{'context'}->[-1]): $line";
delete $current->{'HERE !!!!'};
}
@@ -925,19 +936,43 @@
'text' => $line,
'parent' => $current };
next;
- }
- # to determine if it is a menu entry, check ^*, and if set, add
- # : to the separators list.
-
- if ($in_menu) {
+ } elsif ($line !~ /\S/ and $current->{'type'}
+ and $current->{'type'} eq 'menu_entry_description') {
+ # first parent is menu_entry
+ $current = $current->{'parent'}->{'parent'};
+ push @{$current->{'contents'}}, { 'type' => 'after_description_line',
+ 'text' => $line,
+ 'parent' => $current };
+ push @{$current->{'contents'}}, { 'type' => 'menu_comment',
+ 'parent' => $current,
+ 'contents' => [] };
+ $current = $current->{'contents'}->[-1];
+ next;
+ } elsif ($current->{'type'}
+ and ($current->{'type'} eq 'menu_comment'
+ or $current->{'type'} eq 'menu_entry_description')) {
if ($line =~ s/^(\*\s+)//) {
+ print STDERR "MENU ENTRY\n" if ($self->{'debug'});
my $leading_text = $1;
- #push @separators, ':';
- push @{$current->{'contents'}},
- { 'type' => 'menu_entry',
- 'args' => [ { 'type' => 'menu_entry_leading_text',
- 'text' => $leading_text } ]
+ if ($current->{'type'} eq 'menu_comment') {
+ my $menu = $current->{'parent'};
+ pop @{$menu->{'contents'}} if (address@hidden>{'contents'}});
+ $current = $menu;
+ } else {
+ # first parent is menu_entry
+ $current = $current->{'parent'}->{'parent'};
+ }
+ push @{$current->{'contents'}}, { 'type' => 'menu_entry',
+ 'parent' => $current,
};
+ $current = $current->{'contents'}->[-1];
+ $current->{'args'} = [ { 'type' => 'menu_entry_leading_text',
+ 'text' => $leading_text,
+ 'parent' => $current },
+ { 'type' => 'menu_entry_name',
+ 'contents' => [],
+ 'parent' => $current } ];
+ $current = $current->{'args'}->[-1];
}
}
@@ -1189,6 +1224,13 @@
} else {
push @{$self->{'context'}}, 'preformatted'
if ($preformatted_commands{$command});
+ if ($menu_commands{$command}) {
+ push @{$current->{'contents'}}, {'type' => 'menu_comment',
+ 'parent' => $current,
+ 'contents' => [] };
+ push @{$self->{'context'}}, 'menu';
+ $current = $current->{'contents'}->[-1];
+ }
last unless ($line =~ /\S/);
}
}
@@ -1340,14 +1382,51 @@
{ 'type' => $type, 'parent' => $current, 'contents' => [] };
$current = $current->{'args'}->[-1];
}
- # menu node if there is a :
- # . must be followed by a space to stop the node name.
- # cf texi2html.pl l 13425
- elsif ($separator =~ /[,\t.]/ and $current->{'type'} eq 'FIXME') {
-
- # menu node
- } elsif ($separator eq ':' and $current->{'type'} eq 'FIXME') {
-
+ # end of menu node (. must be followed by a space to stop the node).
+ elsif ($separator =~ /[,\t.]/ and $current->{'type'}
+ and $current->{'type'} eq 'menu_entry_node') {
+ if ($separator eq '.' and $line =~ /^\S/) {
+ $current = _merge_text ($self, $current, $separator);
+ } else {
+ $line =~ s/^(\s*)//;
+ $separator .= $1;
+ $current = $current->{'parent'};
+ push @{$current->{'args'}}, { 'type' => 'menu_entry_separator',
+ 'text' => $separator,
+ 'parent' => $current };
+ push @{$current->{'args'}}, { 'type' => 'menu_entry_description',
+ 'contents' => [],
+ 'parent' => $current };
+ $current = $current->{'args'}->[-1];
+ }
+ # end of menu_entry_name
+ } elsif ($separator eq ':' and $current->{'type'}
+ and $current->{'type'} eq 'menu_entry_name') {
+ # menu node. Transform the menu_entry_name in to a node, add the
+ # separator and open a description
+ if ($line =~ s/^(:\s*)//) {
+ $separator .= $1;
+ $current->{'type'} = 'menu_entry_node';
+ $current = $current->{'parent'};
+ push @{$current->{'args'}}, { 'type' => 'menu_entry_separator',
+ 'text' => $separator,
+ 'parent' => $current };
+ push @{$current->{'args'}}, { 'type' => 'menu_entry_description',
+ 'contents' => [],
+ 'parent' => $current };
+ # end of the menu_entry_name, open the menu_entry_node.
+ } else {
+ $line =~ s/^(\s*)//;
+ $separator .= $1;
+ $current = $current->{'parent'};
+ push @{$current->{'args'}}, { 'type' => 'menu_entry_separator',
+ 'text' => $separator,
+ 'parent' => $current };
+ push @{$current->{'args'}}, { 'type' => 'menu_entry_node',
+ 'contents' => [],
+ 'parent' => $current };
+ }
+ $current = $current->{'args'}->[-1];
} else {
$current = _merge_text ($self, $current, $separator);
}
@@ -1358,8 +1437,66 @@
if ($line ne '') {
die "Remaining line: $line\n";
}
+ if ($current->{'type'}
+ and ($current->{'type'} eq 'menu_entry_name'
+ or $current->{'type'} eq 'menu_entry_node')) {
+ my $empty_menu_entry_node = 0;
+ my $end_comment;
+ if ($current->{'type'} eq 'menu_entry_node') {
+ if (@{$current->{'contents'}}
+ and $current->{'contents'}->[-1]->{'cmdname'}
+ and ($current->{'contents'}->[-1]->{'cmdname'} eq 'c'
+ or $current->{'contents'}->[-1]->{'cmdname'} eq
'comment')) {
+ $end_comment = pop @{$current->{'contents'}};
+ }
+ if (address@hidden>{'contents'}}) {
+ $empty_menu_entry_node = 1;
+ push @{$current->{'contents'}}, $end_comment if ($end_comment);
+ }
+ }
+ # we abort the menu entry if there is no node name
+ if ($empty_menu_entry_node
+ or $current->{'type'} eq 'menu_entry_node') {
+ my $menu = $current->{'parent'}->{'parent'};
+ my $menu_entry = pop @{$menu->{'contents'}};
+ if (@{$menu->{'contents'}} and $menu->{'contents'}->[-1]->{'type'}
+ and $menu->{'contents'}->[-1]->{'type'} eq 'menu_comment') {
+ $current = $menu->{'contents'}->[-1];
+ } else {
+ push @{$menu->{'contents'}}, {'type' => 'menu_comment',
+ 'parent' => $menu,
+ 'contents' => [] };
+ $current = $menu->{'contents'}->[-1];
+ }
+ while (@{$menu_entry->{'args'}}) {
+ my $arg = shift @{$menu_entry->{'args'}};
+ if (defined($arg->{'text'})) {
+ delete $arg->{'type'};
+ $arg->{'parent'} = $current;
+ push @{$current->{'contents'}}, $arg;
+ } else {
+ while (@{$arg->{'contents'}}) {
+ my $content = shift @{$arg->{'contents'}};
+ $content->{'parent'} = $current;
+ push @{$current->{'contents'}}, $content;
+ $arg = undef;
+ }
+ }
+ }
+ $menu_entry = undef;
+ } else {
+ my $current = $current->{'parent'};
+ push @{$current->{'args'}}, { 'type' => 'menu_entry_description',
+ 'contents' => [],
+ 'parent' => $current };
+ $current = $current->{'args'}->[-1];
+ if (defined($end_comment)) {
+ $end_comment->{'parent'} = $current;
+ push @{$current->{'contents'}}, $end_comment;
+ }
+ }
# def line
- if ($current->{'parent'}
+ } elsif ($current->{'parent'}
and $current->{'parent'}->{'type'}
and $def_commands{$current->{'parent'}->{'type'}}) {
my $def_context = pop @{$self->{'context'}};
@@ -1514,7 +1651,9 @@
$result .= $root->{'text'};
} else {
if ($root->{'cmdname'}
- or ($root->{'type'} and $def_commands{$root->{'type'}})) {
+ or ($root->{'type'} and ($def_commands{$root->{'type'}}
+ or $root->{'type'} eq 'menu_entry'
+ or $root->{'type'} eq 'menu_comment'))) {
#print STDERR "cmd: $root->{'cmdname'}\n";
$result .= _expand_cmd_args_to_texi($root);
}
@@ -1539,9 +1678,9 @@
sub _expand_cmd_args_to_texi ($) {
my $cmd = shift;
my $cmdname = $cmd->{'cmdname'};
- $cmdname = '' if (!$cmd->{'cmdname'}
- and $cmd->{'type'} and $def_commands{$cmd->{'type'}});
- my $result = '@'.$cmdname if ($cmdname);
+ $cmdname = '' if (!$cmd->{'cmdname'});
+ my $result = '';
+ $result = '@'.$cmdname if ($cmdname);
#print STDERR "Expand $result\n";
# must be before the next condition
if ($block_commands{$cmdname}
@@ -1584,7 +1723,9 @@
$arg_nr++;
} else {
$result .= ' '
- unless ($cmdname eq 'c' or $cmdname eq 'comment');
+ unless ($cmdname eq 'c' or $cmdname eq 'comment'
+ or $cmd->{'type'} and ($cmd->{'type'} eq 'menu_entry'
+ or $cmd->{'type'} eq 'menu_comment'));
}
$result .= tree_to_texi ($arg);
}
Index: t/10menu.t
===================================================================
RCS file: t/10menu.t
diff -N t/10menu.t
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ t/10menu.t 26 Sep 2010 23:36:55 -0000 1.1
@@ -0,0 +1,57 @@
+use strict;
+
+require 't/test_utils.pl';
+
+my @test_cases = (
+['simple','
address@hidden
+comment
+* menu entry name : node. description
+* node name:: description new
+* other entry: node,
+* last::
+ description next line
+ still description
+
+new comment
+* last node entry ::
address@hidden menu
+']
+);
+my @todo = (
+['menu_entry',
+'@menu
+* (f)a1::
+* (f)a2::
+* (f)a3:: d
+* (f)a1c::@c c
+* (f)a2c:: @c c
+* (f)a3c:: address@hidden c
+* (f) a4 :: @c c
+* (f)@@a@:::
+* a1:
+* a2:
+* a1c:@c c
+* a2c: @c c
+* a: (f)b
+* a: (f)address@hidden c
+* a: (f)b @c c
+* a: (f)b1.c,
+* a: (f)b2.c,
+* a: (f)b3.c, d
+* a: (f)b1c.c,@c c
+* a: (f)b2c.c, @c c
+* a: (f)b3c.c, address@hidden c
+* a: (f)b1..
+* a : (f) b2 ..
+* a.n: (f)b3.. d
+* a: (f)b1.c.
+* a: (f)b2.c.
+* a: (f)b3.c. d
address@hidden menu']
+);
+
+our ($arg_test_case, $arg_generate, $arg_debug);
+
+run_all ('menu', address@hidden, $arg_test_case,
+ $arg_generate, $arg_debug);
Index: t/results/menu/simple.pl
===================================================================
RCS file: t/results/menu/simple.pl
diff -N t/results/menu/simple.pl
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ t/results/menu/simple.pl 26 Sep 2010 23:36:55 -0000 1.1
@@ -0,0 +1,323 @@
+use vars qw(%result_texts %result_trees %result_errors);
+
+$result_trees{'simple'} = {
+ 'contents' => [
+ {
+ 'parent' => {},
+ 'text' => '
+',
+ 'type' => 'normal_line'
+ },
+ {
+ 'cmdname' => 'menu',
+ 'contents' => [
+ {
+ 'contents' => [
+ {
+ 'parent' => {},
+ 'text' => 'comment
+'
+ }
+ ],
+ 'parent' => {},
+ 'type' => 'menu_comment'
+ },
+ {
+ 'args' => [
+ {
+ 'parent' => {},
+ 'text' => '* ',
+ 'type' => 'menu_entry_leading_text'
+ },
+ {
+ 'contents' => [
+ {
+ 'parent' => {},
+ 'text' => 'menu entry name '
+ }
+ ],
+ 'parent' => {},
+ 'type' => 'menu_entry_name'
+ },
+ {
+ 'parent' => {},
+ 'text' => ': ',
+ 'type' => 'menu_entry_separator'
+ },
+ {
+ 'contents' => [
+ {
+ 'parent' => {},
+ 'text' => 'node'
+ }
+ ],
+ 'parent' => {},
+ 'type' => 'menu_entry_node'
+ },
+ {
+ 'parent' => {},
+ 'text' => '. ',
+ 'type' => 'menu_entry_separator'
+ },
+ {
+ 'contents' => [
+ {
+ 'parent' => {},
+ 'text' => 'description
+'
+ }
+ ],
+ 'parent' => {},
+ 'type' => 'menu_entry_description'
+ }
+ ],
+ 'parent' => {},
+ 'type' => 'menu_entry'
+ },
+ {
+ 'args' => [
+ {
+ 'parent' => {},
+ 'text' => '* ',
+ 'type' => 'menu_entry_leading_text'
+ },
+ {
+ 'contents' => [
+ {
+ 'parent' => {},
+ 'text' => 'node name'
+ }
+ ],
+ 'parent' => {},
+ 'type' => 'menu_entry_node'
+ },
+ {
+ 'parent' => {},
+ 'text' => ':: ',
+ 'type' => 'menu_entry_separator'
+ },
+ {
+ 'contents' => [
+ {
+ 'parent' => {},
+ 'text' => 'description new
+'
+ }
+ ],
+ 'parent' => {},
+ 'type' => 'menu_entry_description'
+ }
+ ],
+ 'parent' => {},
+ 'type' => 'menu_entry'
+ },
+ {
+ 'args' => [
+ {
+ 'parent' => {},
+ 'text' => '* ',
+ 'type' => 'menu_entry_leading_text'
+ },
+ {
+ 'contents' => [
+ {
+ 'parent' => {},
+ 'text' => 'other entry'
+ }
+ ],
+ 'parent' => {},
+ 'type' => 'menu_entry_name'
+ },
+ {
+ 'parent' => {},
+ 'text' => ': ',
+ 'type' => 'menu_entry_separator'
+ },
+ {
+ 'contents' => [
+ {
+ 'parent' => {},
+ 'text' => 'node'
+ }
+ ],
+ 'parent' => {},
+ 'type' => 'menu_entry_node'
+ },
+ {
+ 'parent' => {},
+ 'text' => ',
+',
+ 'type' => 'menu_entry_separator'
+ },
+ {
+ 'contents' => [],
+ 'parent' => {},
+ 'type' => 'menu_entry_description'
+ }
+ ],
+ 'parent' => {},
+ 'type' => 'menu_entry'
+ },
+ {
+ 'args' => [
+ {
+ 'parent' => {},
+ 'text' => '* ',
+ 'type' => 'menu_entry_leading_text'
+ },
+ {
+ 'contents' => [
+ {
+ 'parent' => {},
+ 'text' => 'last'
+ }
+ ],
+ 'parent' => {},
+ 'type' => 'menu_entry_node'
+ },
+ {
+ 'parent' => {},
+ 'text' => '::
+',
+ 'type' => 'menu_entry_separator'
+ },
+ {
+ 'contents' => [
+ {
+ 'parent' => {},
+ 'text' => ' description next line
+'
+ },
+ {
+ 'parent' => {},
+ 'text' => ' still description
+'
+ }
+ ],
+ 'parent' => {},
+ 'type' => 'menu_entry_description'
+ }
+ ],
+ 'parent' => {},
+ 'type' => 'menu_entry'
+ },
+ {
+ 'parent' => {},
+ 'text' => '
+',
+ 'type' => 'after_description_line'
+ },
+ {
+ 'contents' => [
+ {
+ 'parent' => {},
+ 'text' => 'new comment
+'
+ }
+ ],
+ 'parent' => {},
+ 'type' => 'menu_comment'
+ },
+ {
+ 'args' => [
+ {
+ 'parent' => {},
+ 'text' => '* ',
+ 'type' => 'menu_entry_leading_text'
+ },
+ {
+ 'contents' => [
+ {
+ 'parent' => {},
+ 'text' => 'last node entry '
+ }
+ ],
+ 'parent' => {},
+ 'type' => 'menu_entry_node'
+ },
+ {
+ 'parent' => {},
+ 'text' => '::
+',
+ 'type' => 'menu_entry_separator'
+ },
+ {
+ 'contents' => [],
+ 'parent' => {},
+ 'type' => 'menu_entry_description'
+ }
+ ],
+ 'parent' => {},
+ 'type' => 'menu_entry'
+ }
+ ],
+ 'parent' => {}
+ }
+ ]
+};
+$result_trees{'simple'}{'contents'}[0]{'parent'} = $result_trees{'simple'};
+$result_trees{'simple'}{'contents'}[1]{'contents'}[0]{'contents'}[0]{'parent'}
= $result_trees{'simple'}{'contents'}[1]{'contents'}[0];
+$result_trees{'simple'}{'contents'}[1]{'contents'}[0]{'parent'} =
$result_trees{'simple'}{'contents'}[1];
+$result_trees{'simple'}{'contents'}[1]{'contents'}[1]{'args'}[0]{'parent'} =
$result_trees{'simple'}{'contents'}[1]{'contents'}[1];
+$result_trees{'simple'}{'contents'}[1]{'contents'}[1]{'args'}[1]{'contents'}[0]{'parent'}
= $result_trees{'simple'}{'contents'}[1]{'contents'}[1]{'args'}[1];
+$result_trees{'simple'}{'contents'}[1]{'contents'}[1]{'args'}[1]{'parent'} =
$result_trees{'simple'}{'contents'}[1]{'contents'}[1];
+$result_trees{'simple'}{'contents'}[1]{'contents'}[1]{'args'}[2]{'parent'} =
$result_trees{'simple'}{'contents'}[1]{'contents'}[1];
+$result_trees{'simple'}{'contents'}[1]{'contents'}[1]{'args'}[3]{'contents'}[0]{'parent'}
= $result_trees{'simple'}{'contents'}[1]{'contents'}[1]{'args'}[3];
+$result_trees{'simple'}{'contents'}[1]{'contents'}[1]{'args'}[3]{'parent'} =
$result_trees{'simple'}{'contents'}[1]{'contents'}[1];
+$result_trees{'simple'}{'contents'}[1]{'contents'}[1]{'args'}[4]{'parent'} =
$result_trees{'simple'}{'contents'}[1]{'contents'}[1];
+$result_trees{'simple'}{'contents'}[1]{'contents'}[1]{'args'}[5]{'contents'}[0]{'parent'}
= $result_trees{'simple'}{'contents'}[1]{'contents'}[1]{'args'}[5];
+$result_trees{'simple'}{'contents'}[1]{'contents'}[1]{'args'}[5]{'parent'} =
$result_trees{'simple'}{'contents'}[1]{'contents'}[1];
+$result_trees{'simple'}{'contents'}[1]{'contents'}[1]{'parent'} =
$result_trees{'simple'}{'contents'}[1];
+$result_trees{'simple'}{'contents'}[1]{'contents'}[2]{'args'}[0]{'parent'} =
$result_trees{'simple'}{'contents'}[1]{'contents'}[2];
+$result_trees{'simple'}{'contents'}[1]{'contents'}[2]{'args'}[1]{'contents'}[0]{'parent'}
= $result_trees{'simple'}{'contents'}[1]{'contents'}[2]{'args'}[1];
+$result_trees{'simple'}{'contents'}[1]{'contents'}[2]{'args'}[1]{'parent'} =
$result_trees{'simple'}{'contents'}[1]{'contents'}[2];
+$result_trees{'simple'}{'contents'}[1]{'contents'}[2]{'args'}[2]{'parent'} =
$result_trees{'simple'}{'contents'}[1]{'contents'}[2];
+$result_trees{'simple'}{'contents'}[1]{'contents'}[2]{'args'}[3]{'contents'}[0]{'parent'}
= $result_trees{'simple'}{'contents'}[1]{'contents'}[2]{'args'}[3];
+$result_trees{'simple'}{'contents'}[1]{'contents'}[2]{'args'}[3]{'parent'} =
$result_trees{'simple'}{'contents'}[1]{'contents'}[2];
+$result_trees{'simple'}{'contents'}[1]{'contents'}[2]{'parent'} =
$result_trees{'simple'}{'contents'}[1];
+$result_trees{'simple'}{'contents'}[1]{'contents'}[3]{'args'}[0]{'parent'} =
$result_trees{'simple'}{'contents'}[1]{'contents'}[3];
+$result_trees{'simple'}{'contents'}[1]{'contents'}[3]{'args'}[1]{'contents'}[0]{'parent'}
= $result_trees{'simple'}{'contents'}[1]{'contents'}[3]{'args'}[1];
+$result_trees{'simple'}{'contents'}[1]{'contents'}[3]{'args'}[1]{'parent'} =
$result_trees{'simple'}{'contents'}[1]{'contents'}[3];
+$result_trees{'simple'}{'contents'}[1]{'contents'}[3]{'args'}[2]{'parent'} =
$result_trees{'simple'}{'contents'}[1]{'contents'}[3];
+$result_trees{'simple'}{'contents'}[1]{'contents'}[3]{'args'}[3]{'contents'}[0]{'parent'}
= $result_trees{'simple'}{'contents'}[1]{'contents'}[3]{'args'}[3];
+$result_trees{'simple'}{'contents'}[1]{'contents'}[3]{'args'}[3]{'parent'} =
$result_trees{'simple'}{'contents'}[1]{'contents'}[3];
+$result_trees{'simple'}{'contents'}[1]{'contents'}[3]{'args'}[4]{'parent'} =
$result_trees{'simple'}{'contents'}[1]{'contents'}[3];
+$result_trees{'simple'}{'contents'}[1]{'contents'}[3]{'args'}[5]{'parent'} =
$result_trees{'simple'}{'contents'}[1]{'contents'}[3];
+$result_trees{'simple'}{'contents'}[1]{'contents'}[3]{'parent'} =
$result_trees{'simple'}{'contents'}[1];
+$result_trees{'simple'}{'contents'}[1]{'contents'}[4]{'args'}[0]{'parent'} =
$result_trees{'simple'}{'contents'}[1]{'contents'}[4];
+$result_trees{'simple'}{'contents'}[1]{'contents'}[4]{'args'}[1]{'contents'}[0]{'parent'}
= $result_trees{'simple'}{'contents'}[1]{'contents'}[4]{'args'}[1];
+$result_trees{'simple'}{'contents'}[1]{'contents'}[4]{'args'}[1]{'parent'} =
$result_trees{'simple'}{'contents'}[1]{'contents'}[4];
+$result_trees{'simple'}{'contents'}[1]{'contents'}[4]{'args'}[2]{'parent'} =
$result_trees{'simple'}{'contents'}[1]{'contents'}[4];
+$result_trees{'simple'}{'contents'}[1]{'contents'}[4]{'args'}[3]{'contents'}[0]{'parent'}
= $result_trees{'simple'}{'contents'}[1]{'contents'}[4]{'args'}[3];
+$result_trees{'simple'}{'contents'}[1]{'contents'}[4]{'args'}[3]{'contents'}[1]{'parent'}
= $result_trees{'simple'}{'contents'}[1]{'contents'}[4]{'args'}[3];
+$result_trees{'simple'}{'contents'}[1]{'contents'}[4]{'args'}[3]{'parent'} =
$result_trees{'simple'}{'contents'}[1]{'contents'}[4];
+$result_trees{'simple'}{'contents'}[1]{'contents'}[4]{'parent'} =
$result_trees{'simple'}{'contents'}[1];
+$result_trees{'simple'}{'contents'}[1]{'contents'}[5]{'parent'} =
$result_trees{'simple'}{'contents'}[1];
+$result_trees{'simple'}{'contents'}[1]{'contents'}[6]{'contents'}[0]{'parent'}
= $result_trees{'simple'}{'contents'}[1]{'contents'}[6];
+$result_trees{'simple'}{'contents'}[1]{'contents'}[6]{'parent'} =
$result_trees{'simple'}{'contents'}[1];
+$result_trees{'simple'}{'contents'}[1]{'contents'}[7]{'args'}[0]{'parent'} =
$result_trees{'simple'}{'contents'}[1]{'contents'}[7];
+$result_trees{'simple'}{'contents'}[1]{'contents'}[7]{'args'}[1]{'contents'}[0]{'parent'}
= $result_trees{'simple'}{'contents'}[1]{'contents'}[7]{'args'}[1];
+$result_trees{'simple'}{'contents'}[1]{'contents'}[7]{'args'}[1]{'parent'} =
$result_trees{'simple'}{'contents'}[1]{'contents'}[7];
+$result_trees{'simple'}{'contents'}[1]{'contents'}[7]{'args'}[2]{'parent'} =
$result_trees{'simple'}{'contents'}[1]{'contents'}[7];
+$result_trees{'simple'}{'contents'}[1]{'contents'}[7]{'args'}[3]{'parent'} =
$result_trees{'simple'}{'contents'}[1]{'contents'}[7];
+$result_trees{'simple'}{'contents'}[1]{'contents'}[7]{'parent'} =
$result_trees{'simple'}{'contents'}[1];
+$result_trees{'simple'}{'contents'}[1]{'parent'} = $result_trees{'simple'};
+
+$result_texts{'simple'} = '
address@hidden
+comment
+* menu entry name : node. description
+* node name:: description new
+* other entry: node,
+* last::
+ description next line
+ still description
+
+new comment
+* last node entry ::
address@hidden menu
+';
+
+$result_errors{'simple'} = [];
+
+
- texinfo/tp Texinfo/Parser.pm t/10menu.t t/resul...,
Patrice Dumas <=