[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
texinfo/tp Texinfo/Parser.pm t/16raw.t t/result...
From: |
Patrice Dumas |
Subject: |
texinfo/tp Texinfo/Parser.pm t/16raw.t t/result... |
Date: |
Tue, 28 Sep 2010 22:31:13 +0000 |
CVSROOT: /sources/texinfo
Module name: texinfo
Changes by: Patrice Dumas <pertusus> 10/09/28 22:31:13
Modified files:
tp/Texinfo : Parser.pm
tp/t : 16raw.t
tp/t/results/raw: nested_macros.pl
Added files:
tp/t : 60macro.t
tp/t/results/macro: bad_argument.pl bad_formal_arg.pl
empty_end.pl zero_argument.pl
Log message:
Consider a @macro without name to still be a macro for the purpose
of matching with @end macro.
CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/texinfo/tp/Texinfo/Parser.pm?cvsroot=texinfo&r1=1.27&r2=1.28
http://cvs.savannah.gnu.org/viewcvs/texinfo/tp/t/16raw.t?cvsroot=texinfo&r1=1.5&r2=1.6
http://cvs.savannah.gnu.org/viewcvs/texinfo/tp/t/60macro.t?cvsroot=texinfo&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/texinfo/tp/t/results/macro/bad_argument.pl?cvsroot=texinfo&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/texinfo/tp/t/results/macro/bad_formal_arg.pl?cvsroot=texinfo&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/texinfo/tp/t/results/macro/empty_end.pl?cvsroot=texinfo&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/texinfo/tp/t/results/macro/zero_argument.pl?cvsroot=texinfo&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/texinfo/tp/t/results/raw/nested_macros.pl?cvsroot=texinfo&r1=1.2&r2=1.3
Patches:
Index: Texinfo/Parser.pm
===================================================================
RCS file: /sources/texinfo/texinfo/tp/Texinfo/Parser.pm,v
retrieving revision 1.27
retrieving revision 1.28
diff -u -b -r1.27 -r1.28
--- Texinfo/Parser.pm 28 Sep 2010 21:26:39 -0000 1.27
+++ Texinfo/Parser.pm 28 Sep 2010 22:31:11 -0000 1.28
@@ -621,10 +621,11 @@
my $parent = shift;
my $line_nr = shift;
my $top_level = shift;
- my $macro;
+ my $macro = { 'cmdname' => $command, 'parent' => $parent, 'contents' => [],
+ 'special' => {'macro_line' => $line} };
#if ($line =~ /^\s+(\w[\w-]*)\s*(.*)/) {
if ($line =~ /^\s+([\w\-]+)\s*(.*)/) {
- my $macro_arg_name = $1;
+ my $macro_name = $1;
my $args_def = $2;
my @args;
@@ -633,18 +634,18 @@
}
if ($args_def =~ /address@hidden/ and $top_level) {
- $self->_line_error(sprintf($self->__("Bad syntax for address@hidden"),
$command));
+ $self->_line_error(sprintf($self->__("Bad syntax for address@hidden"),
$command),
+ $line_nr);
}
+ print STDERR "MACRO address@hidden $macro_name\n" if ($self->{'debug'});
- $macro = { 'cmdname' => $command, 'parent' => $parent, 'contents' => [],
- 'special' => {'macro_line' => $line} };
$macro->{'args'} = [
- { 'type' => 'macro_arg_name', 'text' => $macro_arg_name,
+ { 'type' => 'macro_name', 'text' => $macro_name,
'parent' => $macro } ];
foreach my $formal_arg (@args) {
push @{$macro->{'args'}},
- { 'type' => 'macro_arg_args', 'text' => $formal_arg,
- 'parent' => $macro};
+ { 'type' => 'macro_arg', 'text' => $formal_arg,
+ 'parent' => $macro} if ($formal_arg ne '');
$self->_line_error(sprintf($self->__("Bad address@hidden formal
argument: %s"),
$formal_arg), $line_nr)
if ($formal_arg !~ /^[\w\-]+$/ and $top_level);
@@ -968,15 +969,13 @@
$block_commands{$current->{'cmdname'}} and
($block_commands{$current->{'cmdname'}} eq 'raw')) {
# special case for macro that may be nested
- my $macro;
if (($current->{'cmdname'} eq 'macro'
or $current->{'cmdname'} eq 'rmacro')
and $line =~ /address@hidden/) {
my $mline = $line;
$mline =~ s/\s*\@(r?macro)//;
- $macro = _parse_macro_command ($self, $1, $mline, $current,
$line_nr);
- }
- if ($macro) {
+ my $macro = _parse_macro_command ($self, $1, $mline,
+ $current, $line_nr);
push @{$current->{'contents'}}, $macro;
$current = $current->{'contents'}->[-1];
last;
@@ -994,8 +993,10 @@
and $current->{'parent'}->{'cmdname'} ne 'rmacro'))) {
$current->{'special'}->{'macrobody'} =
tree_to_texi({ 'contents' => $current->{'contents'} });
+ if ($current->{'args'} and $current->{'args'}->[0]) {
$self->{'macros'}->{$current->{'args'}->[0]->{'text'}} = $current;
}
+ }
$current = $current->{'parent'};
last unless ($line =~ /\S/);
} else {
@@ -1183,12 +1184,9 @@
$current = $current->{'args'}->[-1];
}
} elsif (exists($block_commands{$command})) {
- my $macro;
if ($command eq 'macro' or $command eq 'rmacro') {
- $macro = _parse_macro_command ($self, $command, $line,
+ my $macro = _parse_macro_command ($self, $command, $line,
$current, $line_nr, 1);
- }
- if ($macro) {
push @{$current->{'contents'}}, $macro;
$current = $current->{'contents'}->[-1];
last;
Index: t/16raw.t
===================================================================
RCS file: /sources/texinfo/texinfo/tp/t/16raw.t,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -b -r1.5 -r1.6
--- t/16raw.t 27 Sep 2010 22:06:16 -0000 1.5
+++ t/16raw.t 28 Sep 2010 22:31:11 -0000 1.6
@@ -12,6 +12,7 @@
@end macro
@macro
@end macro
address@hidden macro
'],
['misc_raw','
@html
Index: t/results/raw/nested_macros.pl
===================================================================
RCS file: /sources/texinfo/texinfo/tp/t/results/raw/nested_macros.pl,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -b -r1.2 -r1.3
--- t/results/raw/nested_macros.pl 28 Sep 2010 21:26:39 -0000 1.2
+++ t/results/raw/nested_macros.pl 28 Sep 2010 22:31:13 -0000 1.3
@@ -7,17 +7,17 @@
{
'parent' => {},
'text' => 'truc',
- 'type' => 'macro_arg_name'
+ 'type' => 'macro_name'
},
{
'parent' => {},
'text' => 'arg',
- 'type' => 'macro_arg_args'
+ 'type' => 'macro_arg'
},
{
'parent' => {},
'text' => 'ex',
- 'type' => 'macro_arg_args'
+ 'type' => 'macro_arg'
}
],
'cmdname' => 'macro',
@@ -33,7 +33,7 @@
{
'parent' => {},
'text' => 'othermacro',
- 'type' => 'macro_arg_name'
+ 'type' => 'macro_name'
}
],
'cmdname' => 'macro',
@@ -52,10 +52,13 @@
}
},
{
+ 'cmdname' => 'macro',
+ 'contents' => [],
'parent' => {},
- 'text' => '@macro
-',
- 'type' => 'raw'
+ 'special' => {
+ 'macro_line' => '
+'
+ }
}
],
'parent' => {},
@@ -67,6 +70,7 @@
other macro
@end macro
@macro
address@hidden macro
'
}
}
@@ -89,6 +93,7 @@
@end macro
@macro
@end macro
address@hidden macro
';
$result_errors{'nested_macros'} = [];
Index: t/60macro.t
===================================================================
RCS file: t/60macro.t
diff -N t/60macro.t
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ t/60macro.t 28 Sep 2010 22:31:11 -0000 1.1
@@ -0,0 +1,54 @@
+use strict;
+
+use Test::More;
+
+require 't/test_utils.pl';
+
+my @test_cases = (
+['zero_argument',
+'@macro foo {}
+in foo
address@hidden macro
+
address@hidden bar
+in bar
address@hidden macro'],
+['empty_end','@macro foo {aaa, }
+in foo
address@hidden macro'],
+[ 'bad_argument', '@macro
+in macro
address@hidden macro
+
address@hidden bar aaa
+in
address@hidden rmacro
+
address@hidden after-name {ggg} more
+in macro
address@hidden macro
+'],
+['bad_formal_arg',
+'
address@hidden bad { , not_empty}
+in bad macro
address@hidden macro
+
address@hidden bad_space{first, in 2arg}
+bad space
address@hidden macro
+
address@hidden bar {:::}
+in bar
address@hidden foo {? aaa}
+in macro foo
address@hidden macro
address@hidden macro
+']
+);
+
+our ($arg_test_case, $arg_generate, $arg_debug);
+
+run_all ('macro', address@hidden, $arg_test_case,
+ $arg_generate, $arg_debug);
+
Index: t/results/macro/bad_argument.pl
===================================================================
RCS file: t/results/macro/bad_argument.pl
diff -N t/results/macro/bad_argument.pl
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ t/results/macro/bad_argument.pl 28 Sep 2010 22:31:11 -0000 1.1
@@ -0,0 +1,147 @@
+use vars qw(%result_texts %result_trees %result_errors);
+
+$result_trees{'bad_argument'} = {
+ 'contents' => [
+ {
+ 'cmdname' => 'macro',
+ 'contents' => [
+ {
+ 'parent' => {},
+ 'text' => 'in macro
+',
+ 'type' => 'raw'
+ }
+ ],
+ 'parent' => {},
+ 'special' => {
+ 'macro_line' => '
+',
+ 'macrobody' => 'in macro
+'
+ }
+ },
+ {
+ 'parent' => {},
+ 'text' => '
+',
+ 'type' => 'normal_line'
+ },
+ {
+ 'args' => [
+ {
+ 'parent' => {},
+ 'text' => 'bar',
+ 'type' => 'macro_name'
+ }
+ ],
+ 'cmdname' => 'rmacro',
+ 'contents' => [
+ {
+ 'parent' => {},
+ 'text' => 'in
+',
+ 'type' => 'raw'
+ }
+ ],
+ 'parent' => {},
+ 'special' => {
+ 'macro_line' => ' bar aaa
+',
+ 'macrobody' => 'in
+'
+ }
+ },
+ {
+ 'parent' => {},
+ 'text' => '
+',
+ 'type' => 'normal_line'
+ },
+ {
+ 'args' => [
+ {
+ 'parent' => {},
+ 'text' => 'after-name',
+ 'type' => 'macro_name'
+ },
+ {
+ 'parent' => {},
+ 'text' => 'ggg',
+ 'type' => 'macro_arg'
+ }
+ ],
+ 'cmdname' => 'macro',
+ 'contents' => [
+ {
+ 'parent' => {},
+ 'text' => 'in macro
+',
+ 'type' => 'raw'
+ }
+ ],
+ 'parent' => {},
+ 'special' => {
+ 'macro_line' => ' after-name {ggg} more
+',
+ 'macrobody' => 'in macro
+'
+ }
+ }
+ ]
+};
+$result_trees{'bad_argument'}{'contents'}[0]{'contents'}[0]{'parent'} =
$result_trees{'bad_argument'}{'contents'}[0];
+$result_trees{'bad_argument'}{'contents'}[0]{'parent'} =
$result_trees{'bad_argument'};
+$result_trees{'bad_argument'}{'contents'}[1]{'parent'} =
$result_trees{'bad_argument'};
+$result_trees{'bad_argument'}{'contents'}[2]{'args'}[0]{'parent'} =
$result_trees{'bad_argument'}{'contents'}[2];
+$result_trees{'bad_argument'}{'contents'}[2]{'contents'}[0]{'parent'} =
$result_trees{'bad_argument'}{'contents'}[2];
+$result_trees{'bad_argument'}{'contents'}[2]{'parent'} =
$result_trees{'bad_argument'};
+$result_trees{'bad_argument'}{'contents'}[3]{'parent'} =
$result_trees{'bad_argument'};
+$result_trees{'bad_argument'}{'contents'}[4]{'args'}[0]{'parent'} =
$result_trees{'bad_argument'}{'contents'}[4];
+$result_trees{'bad_argument'}{'contents'}[4]{'args'}[1]{'parent'} =
$result_trees{'bad_argument'}{'contents'}[4];
+$result_trees{'bad_argument'}{'contents'}[4]{'contents'}[0]{'parent'} =
$result_trees{'bad_argument'}{'contents'}[4];
+$result_trees{'bad_argument'}{'contents'}[4]{'parent'} =
$result_trees{'bad_argument'};
+
+$result_texts{'bad_argument'} = '@macro
+in macro
address@hidden macro
+
address@hidden bar aaa
+in
address@hidden rmacro
+
address@hidden after-name {ggg} more
+in macro
address@hidden macro
+';
+
+$result_errors{'bad_argument'} = [
+ {
+ 'error_line' => ':1: @macro requires a name
+',
+ 'file_name' => '',
+ 'line_nr' => 1,
+ 'macro' => '',
+ 'text' => '@macro requires a name',
+ 'type' => 'error'
+ },
+ {
+ 'error_line' => ':5: Bad syntax for @rmacro
+',
+ 'file_name' => '',
+ 'line_nr' => 5,
+ 'macro' => '',
+ 'text' => 'Bad syntax for @rmacro',
+ 'type' => 'error'
+ },
+ {
+ 'error_line' => ':9: Bad syntax for @macro
+',
+ 'file_name' => '',
+ 'line_nr' => 9,
+ 'macro' => '',
+ 'text' => 'Bad syntax for @macro',
+ 'type' => 'error'
+ }
+];
+
+
Index: t/results/macro/bad_formal_arg.pl
===================================================================
RCS file: t/results/macro/bad_formal_arg.pl
diff -N t/results/macro/bad_formal_arg.pl
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ t/results/macro/bad_formal_arg.pl 28 Sep 2010 22:31:11 -0000 1.1
@@ -0,0 +1,219 @@
+use vars qw(%result_texts %result_trees %result_errors);
+
+$result_trees{'bad_formal_arg'} = {
+ 'contents' => [
+ {
+ 'parent' => {},
+ 'text' => '
+',
+ 'type' => 'normal_line'
+ },
+ {
+ 'args' => [
+ {
+ 'parent' => {},
+ 'text' => 'bad',
+ 'type' => 'macro_name'
+ },
+ {
+ 'parent' => {},
+ 'text' => 'not_empty',
+ 'type' => 'macro_arg'
+ }
+ ],
+ 'cmdname' => 'macro',
+ 'contents' => [
+ {
+ 'parent' => {},
+ 'text' => 'in bad macro
+',
+ 'type' => 'raw'
+ }
+ ],
+ 'parent' => {},
+ 'special' => {
+ 'macro_line' => ' bad { , not_empty}
+',
+ 'macrobody' => 'in bad macro
+'
+ }
+ },
+ {
+ 'parent' => {},
+ 'text' => '
+',
+ 'type' => 'normal_line'
+ },
+ {
+ 'args' => [
+ {
+ 'parent' => {},
+ 'text' => 'bad_space',
+ 'type' => 'macro_name'
+ },
+ {
+ 'parent' => {},
+ 'text' => 'first',
+ 'type' => 'macro_arg'
+ },
+ {
+ 'parent' => {},
+ 'text' => 'in 2arg',
+ 'type' => 'macro_arg'
+ }
+ ],
+ 'cmdname' => 'macro',
+ 'contents' => [
+ {
+ 'parent' => {},
+ 'text' => 'bad space
+',
+ 'type' => 'raw'
+ }
+ ],
+ 'parent' => {},
+ 'special' => {
+ 'macro_line' => ' bad_space{first, in 2arg}
+',
+ 'macrobody' => 'bad space
+'
+ }
+ },
+ {
+ 'parent' => {},
+ 'text' => '
+',
+ 'type' => 'normal_line'
+ },
+ {
+ 'args' => [
+ {
+ 'parent' => {},
+ 'text' => 'bar',
+ 'type' => 'macro_name'
+ },
+ {
+ 'parent' => {},
+ 'text' => ':::',
+ 'type' => 'macro_arg'
+ }
+ ],
+ 'cmdname' => 'macro',
+ 'contents' => [
+ {
+ 'parent' => {},
+ 'text' => 'in bar
+',
+ 'type' => 'raw'
+ },
+ {
+ 'args' => [
+ {
+ 'parent' => {},
+ 'text' => 'foo',
+ 'type' => 'macro_name'
+ },
+ {
+ 'parent' => {},
+ 'text' => '? aaa',
+ 'type' => 'macro_arg'
+ }
+ ],
+ 'cmdname' => 'macro',
+ 'contents' => [
+ {
+ 'parent' => {},
+ 'text' => 'in macro foo
+',
+ 'type' => 'raw'
+ }
+ ],
+ 'parent' => {},
+ 'special' => {
+ 'macro_line' => ' foo {? aaa}
+'
+ }
+ }
+ ],
+ 'parent' => {},
+ 'special' => {
+ 'macro_line' => ' bar {:::}
+',
+ 'macrobody' => 'in bar
address@hidden foo {? aaa}
+in macro foo
address@hidden macro
+'
+ }
+ }
+ ]
+};
+$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]{'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'};
+$result_trees{'bad_formal_arg'}{'contents'}[3]{'args'}[0]{'parent'} =
$result_trees{'bad_formal_arg'}{'contents'}[3];
+$result_trees{'bad_formal_arg'}{'contents'}[3]{'args'}[1]{'parent'} =
$result_trees{'bad_formal_arg'}{'contents'}[3];
+$result_trees{'bad_formal_arg'}{'contents'}[3]{'args'}[2]{'parent'} =
$result_trees{'bad_formal_arg'}{'contents'}[3];
+$result_trees{'bad_formal_arg'}{'contents'}[3]{'contents'}[0]{'parent'} =
$result_trees{'bad_formal_arg'}{'contents'}[3];
+$result_trees{'bad_formal_arg'}{'contents'}[3]{'parent'} =
$result_trees{'bad_formal_arg'};
+$result_trees{'bad_formal_arg'}{'contents'}[4]{'parent'} =
$result_trees{'bad_formal_arg'};
+$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'};
+
+$result_texts{'bad_formal_arg'} = '
address@hidden bad { , not_empty}
+in bad macro
address@hidden macro
+
address@hidden bad_space{first, in 2arg}
+bad space
address@hidden macro
+
address@hidden bar {:::}
+in bar
address@hidden foo {? aaa}
+in macro foo
address@hidden macro
address@hidden macro
+';
+
+$result_errors{'bad_formal_arg'} = [
+ {
+ 'error_line' => ':2: Bad @macro formal argument:
+',
+ 'file_name' => '',
+ 'line_nr' => 2,
+ 'macro' => '',
+ 'text' => 'Bad @macro formal argument: ',
+ 'type' => 'error'
+ },
+ {
+ 'error_line' => ':6: Bad @macro formal argument: in 2arg
+',
+ 'file_name' => '',
+ 'line_nr' => 6,
+ 'macro' => '',
+ 'text' => 'Bad @macro formal argument: in 2arg',
+ 'type' => 'error'
+ },
+ {
+ 'error_line' => ':10: Bad @macro formal argument: :::
+',
+ 'file_name' => '',
+ 'line_nr' => 10,
+ 'macro' => '',
+ 'text' => 'Bad @macro formal argument: :::',
+ 'type' => 'error'
+ }
+];
+
+
Index: t/results/macro/empty_end.pl
===================================================================
RCS file: t/results/macro/empty_end.pl
diff -N t/results/macro/empty_end.pl
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ t/results/macro/empty_end.pl 28 Sep 2010 22:31:11 -0000 1.1
@@ -0,0 +1,49 @@
+use vars qw(%result_texts %result_trees %result_errors);
+
+$result_trees{'empty_end'} = {
+ 'contents' => [
+ {
+ 'args' => [
+ {
+ 'parent' => {},
+ 'text' => 'foo',
+ 'type' => 'macro_name'
+ },
+ {
+ 'parent' => {},
+ 'text' => 'aaa',
+ 'type' => 'macro_arg'
+ }
+ ],
+ 'cmdname' => 'macro',
+ 'contents' => [
+ {
+ 'parent' => {},
+ 'text' => 'in foo
+',
+ 'type' => 'raw'
+ }
+ ],
+ 'parent' => {},
+ 'special' => {
+ 'macro_line' => ' foo {aaa, }
+',
+ 'macrobody' => 'in foo
+'
+ }
+ }
+ ]
+};
+$result_trees{'empty_end'}{'contents'}[0]{'args'}[0]{'parent'} =
$result_trees{'empty_end'}{'contents'}[0];
+$result_trees{'empty_end'}{'contents'}[0]{'args'}[1]{'parent'} =
$result_trees{'empty_end'}{'contents'}[0];
+$result_trees{'empty_end'}{'contents'}[0]{'contents'}[0]{'parent'} =
$result_trees{'empty_end'}{'contents'}[0];
+$result_trees{'empty_end'}{'contents'}[0]{'parent'} =
$result_trees{'empty_end'};
+
+$result_texts{'empty_end'} = '@macro foo {aaa, }
+in foo
address@hidden macro
+';
+
+$result_errors{'empty_end'} = [];
+
+
Index: t/results/macro/zero_argument.pl
===================================================================
RCS file: t/results/macro/zero_argument.pl
diff -N t/results/macro/zero_argument.pl
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ t/results/macro/zero_argument.pl 28 Sep 2010 22:31:13 -0000 1.1
@@ -0,0 +1,82 @@
+use vars qw(%result_texts %result_trees %result_errors);
+
+$result_trees{'zero_argument'} = {
+ 'contents' => [
+ {
+ 'args' => [
+ {
+ 'parent' => {},
+ 'text' => 'foo',
+ 'type' => 'macro_name'
+ }
+ ],
+ 'cmdname' => 'macro',
+ 'contents' => [
+ {
+ 'parent' => {},
+ 'text' => 'in foo
+',
+ 'type' => 'raw'
+ }
+ ],
+ 'parent' => {},
+ 'special' => {
+ 'macro_line' => ' foo {}
+',
+ 'macrobody' => 'in foo
+'
+ }
+ },
+ {
+ 'parent' => {},
+ 'text' => '
+',
+ 'type' => 'normal_line'
+ },
+ {
+ 'args' => [
+ {
+ 'parent' => {},
+ 'text' => 'bar',
+ 'type' => 'macro_name'
+ }
+ ],
+ 'cmdname' => 'macro',
+ 'contents' => [
+ {
+ 'parent' => {},
+ 'text' => 'in bar
+',
+ 'type' => 'raw'
+ }
+ ],
+ 'parent' => {},
+ 'special' => {
+ 'macro_line' => ' bar
+',
+ 'macrobody' => 'in bar
+'
+ }
+ }
+ ]
+};
+$result_trees{'zero_argument'}{'contents'}[0]{'args'}[0]{'parent'} =
$result_trees{'zero_argument'}{'contents'}[0];
+$result_trees{'zero_argument'}{'contents'}[0]{'contents'}[0]{'parent'} =
$result_trees{'zero_argument'}{'contents'}[0];
+$result_trees{'zero_argument'}{'contents'}[0]{'parent'} =
$result_trees{'zero_argument'};
+$result_trees{'zero_argument'}{'contents'}[1]{'parent'} =
$result_trees{'zero_argument'};
+$result_trees{'zero_argument'}{'contents'}[2]{'args'}[0]{'parent'} =
$result_trees{'zero_argument'}{'contents'}[2];
+$result_trees{'zero_argument'}{'contents'}[2]{'contents'}[0]{'parent'} =
$result_trees{'zero_argument'}{'contents'}[2];
+$result_trees{'zero_argument'}{'contents'}[2]{'parent'} =
$result_trees{'zero_argument'};
+
+$result_texts{'zero_argument'} = '@macro foo {}
+in foo
address@hidden macro
+
address@hidden bar
+in bar
address@hidden macro
+';
+
+$result_errors{'zero_argument'} = [];
+
+