[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
texinfo/tp Texinfo/Parser.pm t/60macro.t t/resu...
From: |
Patrice Dumas |
Subject: |
texinfo/tp Texinfo/Parser.pm t/60macro.t t/resu... |
Date: |
Thu, 30 Sep 2010 05:35:14 +0000 |
CVSROOT: /sources/texinfo
Module name: texinfo
Changes by: Patrice Dumas <pertusus> 10/09/30 05:35:14
Modified files:
tp/Texinfo : Parser.pm
tp/t : 60macro.t
tp/t/results/macro: bad_argument.pl bad_formal_arg.pl
empty_end.pl
tp/t/results/raw: nested_macros.pl
Added files:
tp/t : 18itemize.t
tp/t/results/itemize: w_argument.pl
Log message:
Parse user-defined macro arguments and prepare for macro body expansion.
Simplify handling of nested @macro.
CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/texinfo/tp/Texinfo/Parser.pm?cvsroot=texinfo&r1=1.28&r2=1.29
http://cvs.savannah.gnu.org/viewcvs/texinfo/tp/t/60macro.t?cvsroot=texinfo&r1=1.1&r2=1.2
http://cvs.savannah.gnu.org/viewcvs/texinfo/tp/t/18itemize.t?cvsroot=texinfo&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/texinfo/tp/t/results/itemize/w_argument.pl?cvsroot=texinfo&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/texinfo/tp/t/results/macro/bad_argument.pl?cvsroot=texinfo&r1=1.1&r2=1.2
http://cvs.savannah.gnu.org/viewcvs/texinfo/tp/t/results/macro/bad_formal_arg.pl?cvsroot=texinfo&r1=1.1&r2=1.2
http://cvs.savannah.gnu.org/viewcvs/texinfo/tp/t/results/macro/empty_end.pl?cvsroot=texinfo&r1=1.1&r2=1.2
http://cvs.savannah.gnu.org/viewcvs/texinfo/tp/t/results/raw/nested_macros.pl?cvsroot=texinfo&r1=1.3&r2=1.4
Patches:
Index: Texinfo/Parser.pm
===================================================================
RCS file: /sources/texinfo/texinfo/tp/Texinfo/Parser.pm,v
retrieving revision 1.28
retrieving revision 1.29
diff -u -b -r1.28 -r1.29
--- Texinfo/Parser.pm 28 Sep 2010 22:31:11 -0000 1.28
+++ Texinfo/Parser.pm 30 Sep 2010 05:35:14 -0000 1.29
@@ -620,7 +620,6 @@
my $line = shift;
my $parent = shift;
my $line_nr = shift;
- my $top_level = shift;
my $macro = { 'cmdname' => $command, 'parent' => $parent, 'contents' => [],
'special' => {'macro_line' => $line} };
#if ($line =~ /^\s+(\w[\w-]*)\s*(.*)/) {
@@ -633,7 +632,7 @@
@args = split(/\s*,\s*/ , $1);
}
- if ($args_def =~ /address@hidden/ and $top_level) {
+ if ($args_def =~ /address@hidden/) {
$self->_line_error(sprintf($self->__("Bad syntax for address@hidden"),
$command),
$line_nr);
}
@@ -642,15 +641,18 @@
$macro->{'args'} = [
{ 'type' => 'macro_name', 'text' => $macro_name,
'parent' => $macro } ];
+ my $index = 0;
foreach my $formal_arg (@args) {
push @{$macro->{'args'}},
{ 'type' => 'macro_arg', 'text' => $formal_arg,
- 'parent' => $macro} if ($formal_arg ne '');
- $self->_line_error(sprintf($self->__("Bad address@hidden formal
argument: %s"),
+ 'parent' => $macro};
+ $self->_line_error(sprintf($self->__("Bad or empty address@hidden formal
argument: %s"),
$formal_arg), $line_nr)
- if ($formal_arg !~ /^[\w\-]+$/ and $top_level);
+ if ($formal_arg !~ /^[\w\-]+$/);
+ $macro->{'special'}->{'args_index'}->{$formal_arg} = $index;
+ $index++;
}
- } elsif ($top_level) {
+ } else {
_line_error ($self, sprintf($self->
__("%c%s requires a name"), ord('@'), $command), $line_nr);
}
@@ -833,6 +835,103 @@
return undef;
}
+sub _new_line ($$)
+{
+ my $text = shift;
+ my $lines_array = shift;
+ my $new_line = '';
+ my $line_nr;
+
+ while (@$text) {
+ my $new_text = shift @$text;
+ # FIXME error? Or accept? Or nothing special?
+ #next if ($new_text = '');
+
+ $new_line .= $new_text;
+ $line_nr = shift @$lines_array;
+
+ my $chomped_text = $new_text;
+ if (@$text and !chomp($chomped_text)) {
+ next;
+ }
+ last;
+ }
+ return ($new_line, $line_nr);
+}
+
+sub _expand_macro_arguments($$$$$$)
+{
+ my $self = shift;
+ my $macro = shift;
+ my $line = shift;
+ my $line_nr = shift;
+ my $text = shift;
+ my $lines_array = shift;
+ my $braces_level = 1;
+ my $arguments = [ '' ];
+ my $arg_nr = 0;
+ my $args_total = scalar(@{$macro->{'args'}}) -1;
+
+ my $line_nr_orig = $line_nr;
+
+ while (1) {
+ if ($line =~ s/([^\\{},]*)([\\{},])//) {
+ my $separator = $2;
+ $arguments->[-1] .= $1;
+ if ($separator eq '\\') {
+ if ($line =~ s/^(.)//) {
+ $arguments->[-1] .= $1;
+ print STDERR "MACRO ARG: $separator: $1\n" if ($self->{'debug'});
+ } else {
+ $arguments->[-1] .= '\\';
+ print STDERR "MACRO ARG: $separator\n" if ($self->{'debug'});
+ }
+ } elsif ($separator eq ',') {
+ if (scalar(@$arguments) < $args_total and $braces_level == 1) {
+ push @$arguments, '';
+ $line =~ s/^\s*//;
+ print STDERR "MACRO NEW ARG\n" if ($self->{'debug'});
+ } else {
+ $arguments->[-1] .= ',';
+ }
+ } elsif ($separator eq '}') {
+ $braces_level--;
+ last if ($braces_level == 0);
+ $arguments->[-1] .= $separator;
+ } elsif ($separator eq '{') {
+ $braces_level++;
+ $arguments->[-1] .= $separator;
+ }
+ } else {
+ print STDERR "MACRO ARG end of line\n" if ($self->{'debug'});
+ $arguments->[-1] .= $line;
+
+ if (@$text) {
+ ($line, $line_nr) = _new_line($text, $lines_array);
+ } else {
+ _line_error ($self, sprintf($self->__("address@hidden missing close
brace"),
+ $macro->{'args'}->[0]->{'text'}), $line_nr_orig);
+ return ($arguments, "\n", $line_nr);
+ }
+ }
+ }
+ print STDERR "END MACRO ARGS EXPANSION(".scalar(@$arguments)."): ".
+ join("|\n", @$arguments) ."|\n" if ($self->{'debug'});
+ return ($arguments, $line, $line_nr);
+}
+
+sub _expand_macro_body($$$$$$$) {
+ my $self = shift;
+ my $macro = shift;
+ my $arguments = shift;
+ my $line = shift;
+ my $line_nr = shift;
+ my $text = shift;
+ my $lines_array = shift;
+
+ return ($line, $line_nr);
+}
+
#c 'menu_entry'
#c 'menu_entry'
# t 'menu_entry_leading_text'
@@ -866,36 +965,17 @@
my $lines_array = shift;
my $no_para = shift;
- # FIXME find on the tree
- my $in_menu;
- my $in_deff_line;
- my $new_line = '';
-
my $root = { 'contents' => [] };
$self->{'tree'} = $root;
$self->{'context'} = [ '_root' ];
my $current = $root;
- # This holds the line number. Similar with line_nr, but simpler.
- my $line_index = 1;
my $line_nr;
+ NEXT_LINE:
while (@$text) {
- my $new_text = shift @$text;
- # FIXME error? Or accept? Or nothing special?
- #next if ($new_text = '');
-
- $new_line .= $new_text;
- $line_nr = shift @$lines_array;
-
- my $chomped_text = $new_text;
- if (@$text and !chomp($chomped_text)) {
- next;
- }
-
- my $line = $new_line;
- $new_line = '';
- $line_index++;
+ my $line;
+ ($line, $line_nr) = _new_line($text, $lines_array);
if ($self->{'debug'}) {
$current->{'HERE !!!!'} = 1; # marks where we are in the tree
@@ -972,11 +1052,11 @@
if (($current->{'cmdname'} eq 'macro'
or $current->{'cmdname'} eq 'rmacro')
and $line =~ /address@hidden/) {
- my $mline = $line;
- $mline =~ s/\s*\@(r?macro)//;
- my $macro = _parse_macro_command ($self, $1, $mline,
- $current, $line_nr);
- push @{$current->{'contents'}}, $macro;
+ $line =~ s/\s*\@(r?macro)//;
+ push @{$current->{'contents'}}, { 'cmdname' => $1,
+ 'parent' => $current,
+ 'contents' => [],
+ 'special' => {'macro_line' => $line }};
$current = $current->{'contents'}->[-1];
last;
} elsif ($line =~ /^(.*?)address@hidden([a-zA-Z][\w-]*)/o and ($2 eq
$current->{'cmdname'})) {
@@ -1037,6 +1117,27 @@
if (exists($self->{'aliases'}->{$command}));
print STDERR "COMMAND $command\n" if ($self->{'debug'});
+ if ($self->{'macros'}->{$command}) {
+ my $expanded_macro = $self->{'macros'}->{$command};
+ my $args_number = scalar(@{$expanded_macro->{'args'}}) -1;
+ my $arguments = [];
+ if ($line =~ s/^\s*{\s*//) { # macro with args
+ ($arguments, $line, $line_nr) =
+ _expand_macro_arguments ($self, $expanded_macro, $line, $line_nr,
+ $text, $lines_array);
+ } elsif (($args_number >= 2) or ($args_number <1)) {
+ _line_warn($self, sprintf($self->__("address@hidden defined with
zero or more than one argument should be invoked with {}"), $command),
$line_nr);
+ } else {
+ $arguments = [$line];
+ $line = "\n";
+ }
+ ($line, $line_nr) = _expand_macro_body ($self,
+ $expanded_macro, $arguments,
+ $line, $line_nr,
+ $text, $lines_array);
+ next;
+ }
+
if ($command eq 'value') {
if ($line =~ s/^{([\w\-]+)}//) {
my $value = $1;
@@ -1183,10 +1284,13 @@
$current->{'remaining_args'} = 4 if ($command eq 'node');
$current = $current->{'args'}->[-1];
}
+
+ last NEXT_LINE if ($command eq 'bye');
+
} elsif (exists($block_commands{$command})) {
if ($command eq 'macro' or $command eq 'rmacro') {
my $macro = _parse_macro_command ($self, $command, $line,
- $current, $line_nr, 1);
+ $current, $line_nr);
push @{$current->{'contents'}}, $macro;
$current = $current->{'contents'}->[-1];
last;
@@ -1645,7 +1749,9 @@
sub tree_to_texi ($)
{
my $root = shift;
- die "bad root type (".ref($root).") $root\n" if (ref($root) ne 'HASH');
+ die "tree_to_texi: root undef\n" if (!defined($root));
+ die "tree_to_texi: bad root type (".ref($root).") $root\n"
+ if (ref($root) ne 'HASH');
my $result = '';
#print STDERR "$root ";
#print STDERR "$root->{'type'}" if (defined($root->{'type'}));
Index: t/60macro.t
===================================================================
RCS file: /sources/texinfo/texinfo/tp/t/60macro.t,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -b -r1.1 -r1.2
--- t/60macro.t 28 Sep 2010 22:31:11 -0000 1.1
+++ t/60macro.t 30 Sep 2010 05:35:14 -0000 1.2
@@ -44,6 +44,38 @@
in macro foo
@end macro
@end macro
+'],
+['macro_epansion','
address@hidden macro1 {arg1, arg2 }
+result of a macro with \arg1\ and
address@hidden
+\arg2\
address@hidden verbatim
address@hidden macro
+
+2 simple args. @macro1 {first arg, second arg}.
+
+3 simple args. @macro1{one , two, three}.
+
+comma in command. @macro1{aaa @samp{a macro , } bbb}.
+
+call on the line. @macro1 my arg.
+
+recursive call. @macro1{first arg, @macro1{nested second arg}}.
+
+protect stuff. @macro1{first \, arg, \{\} \\\\ }.
+
+multi-line arg. @macro1{arg 1
+
+now, arg3
+
+}.'],
+['arg_not_closed',
+'@macro foo {arg}
+foo
address@hidden macro
+
+call @foo{ something
']
);
Index: t/results/macro/bad_argument.pl
===================================================================
RCS file: /sources/texinfo/texinfo/tp/t/results/macro/bad_argument.pl,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -b -r1.1 -r1.2
--- t/results/macro/bad_argument.pl 28 Sep 2010 22:31:11 -0000 1.1
+++ t/results/macro/bad_argument.pl 30 Sep 2010 05:35:14 -0000 1.2
@@ -81,6 +81,9 @@
],
'parent' => {},
'special' => {
+ 'args_index' => {
+ 'ggg' => 0
+ },
'macro_line' => ' after-name {ggg} more
',
'macrobody' => 'in macro
Index: t/results/macro/bad_formal_arg.pl
===================================================================
RCS file: /sources/texinfo/texinfo/tp/t/results/macro/bad_formal_arg.pl,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -b -r1.1 -r1.2
--- t/results/macro/bad_formal_arg.pl 28 Sep 2010 22:31:11 -0000 1.1
+++ t/results/macro/bad_formal_arg.pl 30 Sep 2010 05:35:14 -0000 1.2
@@ -17,6 +17,11 @@
},
{
'parent' => {},
+ 'text' => '',
+ 'type' => 'macro_arg'
+ },
+ {
+ 'parent' => {},
'text' => 'not_empty',
'type' => 'macro_arg'
}
@@ -32,6 +37,10 @@
],
'parent' => {},
'special' => {
+ 'args_index' => {
+ '' => 0,
+ 'not_empty' => 1
+ },
'macro_line' => ' bad { , not_empty}
',
'macrobody' => 'in bad macro
@@ -73,6 +82,10 @@
],
'parent' => {},
'special' => {
+ 'args_index' => {
+ 'first' => 0,
+ 'in 2arg' => 1
+ },
'macro_line' => ' bad_space{first, in 2arg}
',
'macrobody' => 'bad space
@@ -107,18 +120,6 @@
'type' => 'raw'
},
{
- 'args' => [
- {
- 'parent' => {},
- 'text' => 'foo',
- 'type' => 'macro_name'
- },
- {
- 'parent' => {},
- 'text' => '? aaa',
- 'type' => 'macro_arg'
- }
- ],
'cmdname' => 'macro',
'contents' => [
{
@@ -137,6 +138,9 @@
],
'parent' => {},
'special' => {
+ 'args_index' => {
+ ':::' => 0
+ },
'macro_line' => ' bar {:::}
',
'macrobody' => 'in bar
@@ -151,6 +155,7 @@
$result_trees{'bad_formal_arg'}{'contents'}[0]{'parent'} =
$result_trees{'bad_formal_arg'};
$result_trees{'bad_formal_arg'}{'contents'}[1]{'args'}[0]{'parent'} =
$result_trees{'bad_formal_arg'}{'contents'}[1];
$result_trees{'bad_formal_arg'}{'contents'}[1]{'args'}[1]{'parent'} =
$result_trees{'bad_formal_arg'}{'contents'}[1];
+$result_trees{'bad_formal_arg'}{'contents'}[1]{'args'}[2]{'parent'} =
$result_trees{'bad_formal_arg'}{'contents'}[1];
$result_trees{'bad_formal_arg'}{'contents'}[1]{'contents'}[0]{'parent'} =
$result_trees{'bad_formal_arg'}{'contents'}[1];
$result_trees{'bad_formal_arg'}{'contents'}[1]{'parent'} =
$result_trees{'bad_formal_arg'};
$result_trees{'bad_formal_arg'}{'contents'}[2]{'parent'} =
$result_trees{'bad_formal_arg'};
@@ -163,8 +168,6 @@
$result_trees{'bad_formal_arg'}{'contents'}[5]{'args'}[0]{'parent'} =
$result_trees{'bad_formal_arg'}{'contents'}[5];
$result_trees{'bad_formal_arg'}{'contents'}[5]{'args'}[1]{'parent'} =
$result_trees{'bad_formal_arg'}{'contents'}[5];
$result_trees{'bad_formal_arg'}{'contents'}[5]{'contents'}[0]{'parent'} =
$result_trees{'bad_formal_arg'}{'contents'}[5];
-$result_trees{'bad_formal_arg'}{'contents'}[5]{'contents'}[1]{'args'}[0]{'parent'}
= $result_trees{'bad_formal_arg'}{'contents'}[5]{'contents'}[1];
-$result_trees{'bad_formal_arg'}{'contents'}[5]{'contents'}[1]{'args'}[1]{'parent'}
= $result_trees{'bad_formal_arg'}{'contents'}[5]{'contents'}[1];
$result_trees{'bad_formal_arg'}{'contents'}[5]{'contents'}[1]{'contents'}[0]{'parent'}
= $result_trees{'bad_formal_arg'}{'contents'}[5]{'contents'}[1];
$result_trees{'bad_formal_arg'}{'contents'}[5]{'contents'}[1]{'parent'} =
$result_trees{'bad_formal_arg'}{'contents'}[5];
$result_trees{'bad_formal_arg'}{'contents'}[5]{'parent'} =
$result_trees{'bad_formal_arg'};
@@ -188,30 +191,30 @@
$result_errors{'bad_formal_arg'} = [
{
- 'error_line' => ':2: Bad @macro formal argument:
+ 'error_line' => ':2: Bad or empty @macro formal argument:
',
'file_name' => '',
'line_nr' => 2,
'macro' => '',
- 'text' => 'Bad @macro formal argument: ',
+ 'text' => 'Bad or empty @macro formal argument: ',
'type' => 'error'
},
{
- 'error_line' => ':6: Bad @macro formal argument: in 2arg
+ 'error_line' => ':6: Bad or empty @macro formal argument: in 2arg
',
'file_name' => '',
'line_nr' => 6,
'macro' => '',
- 'text' => 'Bad @macro formal argument: in 2arg',
+ 'text' => 'Bad or empty @macro formal argument: in 2arg',
'type' => 'error'
},
{
- 'error_line' => ':10: Bad @macro formal argument: :::
+ 'error_line' => ':10: Bad or empty @macro formal argument: :::
',
'file_name' => '',
'line_nr' => 10,
'macro' => '',
- 'text' => 'Bad @macro formal argument: :::',
+ 'text' => 'Bad or empty @macro formal argument: :::',
'type' => 'error'
}
];
Index: t/results/macro/empty_end.pl
===================================================================
RCS file: /sources/texinfo/texinfo/tp/t/results/macro/empty_end.pl,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -b -r1.1 -r1.2
--- t/results/macro/empty_end.pl 28 Sep 2010 22:31:11 -0000 1.1
+++ t/results/macro/empty_end.pl 30 Sep 2010 05:35:14 -0000 1.2
@@ -26,6 +26,9 @@
],
'parent' => {},
'special' => {
+ 'args_index' => {
+ 'aaa' => 0
+ },
'macro_line' => ' foo {aaa, }
',
'macrobody' => 'in foo
Index: t/results/raw/nested_macros.pl
===================================================================
RCS file: /sources/texinfo/texinfo/tp/t/results/raw/nested_macros.pl,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -b -r1.3 -r1.4
--- t/results/raw/nested_macros.pl 28 Sep 2010 22:31:13 -0000 1.3
+++ t/results/raw/nested_macros.pl 30 Sep 2010 05:35:14 -0000 1.4
@@ -29,13 +29,6 @@
'type' => 'raw'
},
{
- 'args' => [
- {
- 'parent' => {},
- 'text' => 'othermacro',
- 'type' => 'macro_name'
- }
- ],
'cmdname' => 'macro',
'contents' => [
{
@@ -63,6 +56,10 @@
],
'parent' => {},
'special' => {
+ 'args_index' => {
+ 'arg' => 0,
+ 'ex' => 1
+ },
'macro_line' => ' truc { arg, ex}
',
'macrobody' => 'in macro \\arg\\
@@ -80,7 +77,6 @@
$result_trees{'nested_macros'}{'contents'}[0]{'args'}[1]{'parent'} =
$result_trees{'nested_macros'}{'contents'}[0];
$result_trees{'nested_macros'}{'contents'}[0]{'args'}[2]{'parent'} =
$result_trees{'nested_macros'}{'contents'}[0];
$result_trees{'nested_macros'}{'contents'}[0]{'contents'}[0]{'parent'} =
$result_trees{'nested_macros'}{'contents'}[0];
-$result_trees{'nested_macros'}{'contents'}[0]{'contents'}[1]{'args'}[0]{'parent'}
= $result_trees{'nested_macros'}{'contents'}[0]{'contents'}[1];
$result_trees{'nested_macros'}{'contents'}[0]{'contents'}[1]{'contents'}[0]{'parent'}
= $result_trees{'nested_macros'}{'contents'}[0]{'contents'}[1];
$result_trees{'nested_macros'}{'contents'}[0]{'contents'}[1]{'parent'} =
$result_trees{'nested_macros'}{'contents'}[0];
$result_trees{'nested_macros'}{'contents'}[0]{'contents'}[2]{'parent'} =
$result_trees{'nested_macros'}{'contents'}[0];
Index: t/18itemize.t
===================================================================
RCS file: t/18itemize.t
diff -N t/18itemize.t
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ t/18itemize.t 30 Sep 2010 05:35:14 -0000 1.1
@@ -0,0 +1,20 @@
+use strict;
+
+use Test::More;
+
+require 't/test_utils.pl';
+
+my @test_cases = (
+['w_argument',
+'@itemize @w{}
address@hidden @option{--build=} platform on which the program is compiled,
address@hidden @option{--target=} target platform on which the program is
processed.
address@hidden itemize
+']
+);
+
+our ($arg_test_case, $arg_generate, $arg_debug);
+
+run_all ('itemize', address@hidden, $arg_test_case,
+ $arg_generate, $arg_debug);
+
Index: t/results/itemize/w_argument.pl
===================================================================
RCS file: t/results/itemize/w_argument.pl
diff -N t/results/itemize/w_argument.pl
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ t/results/itemize/w_argument.pl 30 Sep 2010 05:35:14 -0000 1.1
@@ -0,0 +1,139 @@
+use vars qw(%result_texts %result_trees %result_errors);
+
+$result_trees{'w_argument'} = {
+ 'contents' => [
+ {
+ 'args' => [
+ {
+ 'contents' => [
+ {
+ 'args' => [
+ {
+ 'contents' => [],
+ 'parent' => {},
+ 'type' => 'brace_command_arg'
+ }
+ ],
+ 'cmdname' => 'w',
+ 'parent' => {},
+ 'remaining_args' => 0
+ },
+ {
+ 'parent' => {},
+ 'text' => '
+'
+ }
+ ],
+ 'parent' => {},
+ 'type' => 'block_line_arg'
+ }
+ ],
+ 'cmdname' => 'itemize',
+ 'contents' => [
+ {
+ 'contents' => [],
+ 'parent' => {},
+ 'type' => 'before_item'
+ },
+ {
+ 'cmdname' => 'item',
+ 'contents' => [
+ {
+ 'contents' => [
+ {
+ 'args' => [
+ {
+ 'contents' => [
+ {
+ 'parent' => {},
+ 'text' => '--build='
+ }
+ ],
+ 'parent' => {},
+ 'type' => 'brace_command_arg'
+ }
+ ],
+ 'cmdname' => 'option',
+ 'parent' => {},
+ 'remaining_args' => 0
+ },
+ {
+ 'parent' => {},
+ 'text' => ' platform on which the program is compiled,
+'
+ }
+ ],
+ 'parent' => {},
+ 'type' => 'paragraph'
+ }
+ ],
+ 'parent' => {}
+ },
+ {
+ 'cmdname' => 'item',
+ 'contents' => [
+ {
+ 'contents' => [
+ {
+ 'args' => [
+ {
+ 'contents' => [
+ {
+ 'parent' => {},
+ 'text' => '--target='
+ }
+ ],
+ 'parent' => {},
+ 'type' => 'brace_command_arg'
+ }
+ ],
+ 'cmdname' => 'option',
+ 'parent' => {},
+ 'remaining_args' => 0
+ },
+ {
+ 'parent' => {},
+ 'text' => ' target platform on which the program is
processed.
+'
+ }
+ ],
+ 'parent' => {},
+ 'type' => 'paragraph'
+ }
+ ],
+ 'parent' => {}
+ }
+ ],
+ 'parent' => {},
+ 'remaining_args' => 0
+ }
+ ]
+};
+$result_trees{'w_argument'}{'contents'}[0]{'args'}[0]{'contents'}[0]{'args'}[0]{'parent'}
= $result_trees{'w_argument'}{'contents'}[0]{'args'}[0]{'contents'}[0];
+$result_trees{'w_argument'}{'contents'}[0]{'args'}[0]{'contents'}[0]{'parent'}
= $result_trees{'w_argument'}{'contents'}[0]{'args'}[0];
+$result_trees{'w_argument'}{'contents'}[0]{'args'}[0]{'contents'}[1]{'parent'}
= $result_trees{'w_argument'}{'contents'}[0]{'args'}[0];
+$result_trees{'w_argument'}{'contents'}[0]{'args'}[0]{'parent'} =
$result_trees{'w_argument'}{'contents'}[0];
+$result_trees{'w_argument'}{'contents'}[0]{'contents'}[0]{'parent'} =
$result_trees{'w_argument'}{'contents'}[0];
+$result_trees{'w_argument'}{'contents'}[0]{'contents'}[1]{'contents'}[0]{'contents'}[0]{'args'}[0]{'contents'}[0]{'parent'}
=
$result_trees{'w_argument'}{'contents'}[0]{'contents'}[1]{'contents'}[0]{'contents'}[0]{'args'}[0];
+$result_trees{'w_argument'}{'contents'}[0]{'contents'}[1]{'contents'}[0]{'contents'}[0]{'args'}[0]{'parent'}
=
$result_trees{'w_argument'}{'contents'}[0]{'contents'}[1]{'contents'}[0]{'contents'}[0];
+$result_trees{'w_argument'}{'contents'}[0]{'contents'}[1]{'contents'}[0]{'contents'}[0]{'parent'}
= $result_trees{'w_argument'}{'contents'}[0]{'contents'}[1]{'contents'}[0];
+$result_trees{'w_argument'}{'contents'}[0]{'contents'}[1]{'contents'}[0]{'contents'}[1]{'parent'}
= $result_trees{'w_argument'}{'contents'}[0]{'contents'}[1]{'contents'}[0];
+$result_trees{'w_argument'}{'contents'}[0]{'contents'}[1]{'contents'}[0]{'parent'}
= $result_trees{'w_argument'}{'contents'}[0]{'contents'}[1];
+$result_trees{'w_argument'}{'contents'}[0]{'contents'}[1]{'parent'} =
$result_trees{'w_argument'}{'contents'}[0];
+$result_trees{'w_argument'}{'contents'}[0]{'contents'}[2]{'contents'}[0]{'contents'}[0]{'args'}[0]{'contents'}[0]{'parent'}
=
$result_trees{'w_argument'}{'contents'}[0]{'contents'}[2]{'contents'}[0]{'contents'}[0]{'args'}[0];
+$result_trees{'w_argument'}{'contents'}[0]{'contents'}[2]{'contents'}[0]{'contents'}[0]{'args'}[0]{'parent'}
=
$result_trees{'w_argument'}{'contents'}[0]{'contents'}[2]{'contents'}[0]{'contents'}[0];
+$result_trees{'w_argument'}{'contents'}[0]{'contents'}[2]{'contents'}[0]{'contents'}[0]{'parent'}
= $result_trees{'w_argument'}{'contents'}[0]{'contents'}[2]{'contents'}[0];
+$result_trees{'w_argument'}{'contents'}[0]{'contents'}[2]{'contents'}[0]{'contents'}[1]{'parent'}
= $result_trees{'w_argument'}{'contents'}[0]{'contents'}[2]{'contents'}[0];
+$result_trees{'w_argument'}{'contents'}[0]{'contents'}[2]{'contents'}[0]{'parent'}
= $result_trees{'w_argument'}{'contents'}[0]{'contents'}[2];
+$result_trees{'w_argument'}{'contents'}[0]{'contents'}[2]{'parent'} =
$result_trees{'w_argument'}{'contents'}[0];
+$result_trees{'w_argument'}{'contents'}[0]{'parent'} =
$result_trees{'w_argument'};
+
+$result_texts{'w_argument'} = '@itemize @w{}
address@hidden @option{--build=} platform on which the program is compiled,
address@hidden @option{--target=} target platform on which the program is
processed.
address@hidden itemize
+';
+
+$result_errors{'w_argument'} = [];
+
+
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- texinfo/tp Texinfo/Parser.pm t/60macro.t t/resu...,
Patrice Dumas <=