texinfo-commits
[Top][All Lists]
Advanced

[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'} = [];
+
+



reply via email to

[Prev in Thread] Current Thread [Next in Thread]