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: Wed, 06 Oct 2010 21:22:48 +0000

CVSROOT:        /sources/texinfo
Module name:    texinfo
Changes by:     Patrice Dumas <pertusus>        10/10/06 21:22:48

Modified files:
        tp/Texinfo     : Parser.pm 
        tp/t           : 60macro.t 
        tp/t/results/columnfractions: empty.pl empty_comment.pl good.pl 
                                      good_comment.pl 
                                      good_space_comment.pl 
                                      not_fraction.pl wrong_command.pl 
        tp/t/results/coverage: multitable.pl 
        tp/t/results/macro: arg_body_expansion_order.pl 
                            arg_not_closed.pl complex_argument.pl 
                            implicit_quoting_one_arg.pl 
                            macro_in_macro_arg.pl macro_zero.pl 
                            nested_macro_call.pl no_macrobody.pl 
                            protect_in_body_one_arg.pl 
                            two_macros_on_a_line.pl 
        tp/t/results/value_and_macro: comma_value_in_macro_arg.pl 
                                      value_in_macro_body.pl 
                                      value_in_macro_formal_arg.pl 
Added files:
        tp/t/results/macro: macro_in_line_commands.pl 

Log message:
        Treat @columnfractions as a regular misc command.
        When not at the end of a line, but there is no more text on the line,
        take the next text element.

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/texinfo/tp/Texinfo/Parser.pm?cvsroot=texinfo&r1=1.47&r2=1.48
http://cvs.savannah.gnu.org/viewcvs/texinfo/tp/t/60macro.t?cvsroot=texinfo&r1=1.10&r2=1.11
http://cvs.savannah.gnu.org/viewcvs/texinfo/tp/t/results/columnfractions/empty.pl?cvsroot=texinfo&r1=1.4&r2=1.5
http://cvs.savannah.gnu.org/viewcvs/texinfo/tp/t/results/columnfractions/empty_comment.pl?cvsroot=texinfo&r1=1.4&r2=1.5
http://cvs.savannah.gnu.org/viewcvs/texinfo/tp/t/results/columnfractions/good.pl?cvsroot=texinfo&r1=1.4&r2=1.5
http://cvs.savannah.gnu.org/viewcvs/texinfo/tp/t/results/columnfractions/good_comment.pl?cvsroot=texinfo&r1=1.4&r2=1.5
http://cvs.savannah.gnu.org/viewcvs/texinfo/tp/t/results/columnfractions/good_space_comment.pl?cvsroot=texinfo&r1=1.4&r2=1.5
http://cvs.savannah.gnu.org/viewcvs/texinfo/tp/t/results/columnfractions/not_fraction.pl?cvsroot=texinfo&r1=1.4&r2=1.5
http://cvs.savannah.gnu.org/viewcvs/texinfo/tp/t/results/columnfractions/wrong_command.pl?cvsroot=texinfo&r1=1.5&r2=1.6
http://cvs.savannah.gnu.org/viewcvs/texinfo/tp/t/results/coverage/multitable.pl?cvsroot=texinfo&r1=1.1&r2=1.2
http://cvs.savannah.gnu.org/viewcvs/texinfo/tp/t/results/macro/arg_body_expansion_order.pl?cvsroot=texinfo&r1=1.1&r2=1.2
http://cvs.savannah.gnu.org/viewcvs/texinfo/tp/t/results/macro/arg_not_closed.pl?cvsroot=texinfo&r1=1.1&r2=1.2
http://cvs.savannah.gnu.org/viewcvs/texinfo/tp/t/results/macro/complex_argument.pl?cvsroot=texinfo&r1=1.2&r2=1.3
http://cvs.savannah.gnu.org/viewcvs/texinfo/tp/t/results/macro/implicit_quoting_one_arg.pl?cvsroot=texinfo&r1=1.2&r2=1.3
http://cvs.savannah.gnu.org/viewcvs/texinfo/tp/t/results/macro/macro_in_macro_arg.pl?cvsroot=texinfo&r1=1.2&r2=1.3
http://cvs.savannah.gnu.org/viewcvs/texinfo/tp/t/results/macro/macro_zero.pl?cvsroot=texinfo&r1=1.1&r2=1.2
http://cvs.savannah.gnu.org/viewcvs/texinfo/tp/t/results/macro/nested_macro_call.pl?cvsroot=texinfo&r1=1.1&r2=1.2
http://cvs.savannah.gnu.org/viewcvs/texinfo/tp/t/results/macro/no_macrobody.pl?cvsroot=texinfo&r1=1.1&r2=1.2
http://cvs.savannah.gnu.org/viewcvs/texinfo/tp/t/results/macro/protect_in_body_one_arg.pl?cvsroot=texinfo&r1=1.2&r2=1.3
http://cvs.savannah.gnu.org/viewcvs/texinfo/tp/t/results/macro/two_macros_on_a_line.pl?cvsroot=texinfo&r1=1.1&r2=1.2
http://cvs.savannah.gnu.org/viewcvs/texinfo/tp/t/results/macro/macro_in_line_commands.pl?cvsroot=texinfo&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/texinfo/tp/t/results/value_and_macro/comma_value_in_macro_arg.pl?cvsroot=texinfo&r1=1.2&r2=1.3
http://cvs.savannah.gnu.org/viewcvs/texinfo/tp/t/results/value_and_macro/value_in_macro_body.pl?cvsroot=texinfo&r1=1.2&r2=1.3
http://cvs.savannah.gnu.org/viewcvs/texinfo/tp/t/results/value_and_macro/value_in_macro_formal_arg.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.47
retrieving revision 1.48
diff -u -b -r1.47 -r1.48
--- Texinfo/Parser.pm   5 Oct 2010 22:41:39 -0000       1.47
+++ Texinfo/Parser.pm   6 Oct 2010 21:22:47 -0000       1.48
@@ -98,6 +98,8 @@
   # special
   'definfoenclose' => {'arg' => 5},
   'alias' => {'arg' => '3'}, 
+  # number of arguments is not known in advance.
+  'columnfractions' => {'arg' => '1'}, 
   # file names
   'setfilename' => {'arg' => 'line'},
   'verbatiminclude'=> {'arg' => 'line'},
@@ -433,7 +435,7 @@
 }
 
 foreach my $misc_not_begin_line ('comment', 'c', 'sp', 'refill', 
-                                'noindent', 'indent') {
+                                'noindent', 'indent', 'columnfractions') {
   delete $begin_line_commands{$misc_not_begin_line};
 }
 
@@ -885,8 +887,10 @@
 
   while (@$text) {
     my $new_text = shift @$text;
-    # FIXME error? Or accept? Or nothing special?
-    #next if ($new_text = '');
+    # This may happen with user defined macro, although it is unclear in
+    # which case. Example in macro/expansion_order
+    #next if ($new_text eq '');
+    #die if ($new_text eq '');
 
     $new_line .= $new_text;
     $line_nr = shift @$lines_array;
@@ -1005,6 +1009,174 @@
   return $result;
 }
 
+sub _end_line($$$)
+{
+  my $self = shift;
+  my $current = shift;
+  my $line_nr = shift;
+  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_name') {
+      print STDERR "FINALLY NOT MENU ENTRY\n" if ($self->{'debug'});
+      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'})) {
+          $current = _merge_text ($self, $current, $arg->{'text'});
+        } else {
+          while (@{$arg->{'contents'}}) {
+            my $content = shift @{$arg->{'contents'}};
+            if (defined($content->{'text'})) {
+              $current = _merge_text ($self, $current, 
+                                    $content->{'text'});
+              $content = undef;
+            } else {
+              $content->{'parent'} = $current;
+              push @{$current->{'contents'}}, $content;
+            }
+          }
+        }
+        $arg = undef;
+      }
+      $menu_entry = undef;
+    } else {
+      print STDERR "MENU ENTRY END LINE\n" if ($self->{'debug'});
+      $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
+  } elsif ($current->{'parent'}
+            and $current->{'parent'}->{'type'}
+            and $current->{'parent'}->{'type'} eq 'def_line') {
+    my $def_context = pop @{$self->{'context_stack'}};
+    die "BUG: def_context $def_context "._print_current($current) 
+      if ($def_context ne 'def');
+    $current = $current->{'parent'}->{'parent'};
+    # other block command lines
+  } elsif ($current->{'type'}
+            and $current->{'type'} eq 'block_line_arg') {
+    # @multitable args
+    if ($current->{'parent'} and $current->{'parent'}->{'cmdname'}
+               and $current->{'parent'}->{'cmdname'} eq 'multitable') {
+      my $line_arg = $current;
+      my @prototype_rows;
+      my @other_contents;
+      # rearrange the row specifications as args, which mostly 
+      # implies splitting non-bracketed text and reparenting.
+      foreach my $content (@{$current->{'contents'}}) {
+        if ($content->{'type'} and $content->{'type'} eq 'bracketed') {
+          $content->{'parent'} = $current->{'parent'};
+          push @prototype_rows, $content;
+        } elsif ($content->{'text'}) {
+          if ($content->{'text'} =~ /\S/) {
+            foreach my $prototype(split /\s+/, $content->{'text'}) {
+              push @prototype_rows, { 'text' => $prototype, 
+                            'parent' => $current->{'parent'},
+                            'type' => 'row_prototype' };
+            }
+          }
+        } else {
+          if (!$content->{'cmdname'}) { 
+            _line_warn ($self, sprintf($self->
+                   __("Unexpected argument on address@hidden line: %s"), 
+                   $current->{'cmdname'}, 
+                   tree_to_texi( { $content->{'contents'} })), $line_nr);
+            push @other_contents, $content;
+          } elsif ($content->{'cmdname'} eq 'c' 
+                 and $content->{'cmdname'} eq 'comment') {
+            push @other_contents, $content;
+          } else {
+            push @prototype_rows, $content;
+          }
+          $content->{'parent'} = $current->{'parent'};
+        }
+      }
+      
+      $current = $current->{'parent'};
+      $current->{'special'}->{'max_columns'} = scalar(@prototype_rows);
+      if (!scalar(@prototype_rows)) {
+        $self->_line_warn ($self->__("empty multitable"), $line_nr);
+      }
+      $current->{'args'} = address@hidden;
+      $current->{'contents'} = address@hidden;
+      # this is in order to have $current->{'parent'} being the multitable
+      
+      $current = $line_arg;
+    }
+    $current = $current->{'parent'};
+    if ($current->{'cmdname'} 
+          and $block_item_commands{$current->{'cmdname'}}) {
+      push @{$current->{'contents'}}, { 'type' => 'before_item',
+         'contents' => [], 'parent', $current };
+      $current = $current->{'contents'}->[-1];
+    }
+  # misc command line arguments
+  } elsif ($current->{'type'} 
+     and $current->{'type'} eq 'misc_line_arg') {
+    # first parent is the @command, second is the parent
+    $current = $current->{'parent'};
+    my $misc_cmd = $current;
+    my $command = $current->{'cmdname'};
+    print STDERR "MISC END address@hidden>{'cmdname'}\n" if ($self->{'debug'});
+    if ($self->{'misc_commands'}->{$current->{'cmdname'}}->{'arg'}
+        and $self->{'misc_commands'}->{$current->{'cmdname'}}->{'arg'} =~ 
/^\d$/) {
+      my $args = _parse_line_command_args ($self, $current, $line_nr);
+      $current->{'special'}->{'misc_args'} = $args if (defined($args));
+    }
+    $current = $current->{'parent'};
+    if ($command eq 'columnfractions') {
+      # in a multitable, we are in a block_line_arg
+      if (!$current->{'parent'} or !$current->{'parent'}->{'cmdname'} 
+                   or $current->{'parent'}->{'cmdname'} ne 'multitable') {
+        # FIXME error message
+      } else {
+        $current = $current->{'parent'};
+        $current->{'special'}->{'max_columns'} = 0;
+        $current->{'special'}->{'max_columns'} = 
+            scalar(@{$misc_cmd->{'special'}->{'misc_args'}})
+              if (defined($misc_cmd->{'special'}->{'misc_args'}));
+        push @{$current->{'contents'}}, { 'type' => 'before_item',
+           'contents' => [], 'parent', $current };
+        $current = $current->{'contents'}->[-1];
+      }
+    }
+  }
+  return $current;
+}
 #c 'menu_entry'
 #c 'menu_entry'
 # t 'menu_entry_leading_text'
@@ -1237,10 +1409,14 @@
                                    $arguments, $line_nr);
         print STDERR "MACROBODY: $expanded".'||||||'."\n" 
            if ($self->{'debug'}); 
+        # empty result.  It is ignored here.
+        next if ($expanded eq '');
         my $expanded_lines = _text_to_lines($expanded);
         print STDERR "MACRO EXPANSION LINES: ".join('|', @$expanded_lines)
-                                     ."\nEND LINES\n" if ($self->{'debug'});
+                                     ."|\nEND LINES\n" if ($self->{'debug'});
         chomp ($expanded_lines->[-1]);
+        pop @$expanded_lines if ($expanded_lines->[-1] eq '');
+        next if (address@hidden);
         my $new_lines_nr = _complete_line_nr($expanded_lines, 
                             $line_nr->{'line_nr'}, $line_nr->{'file_name'},
                             $expanded_macro->{'args'}->[0]->{'text'}, 1);
@@ -1495,6 +1671,9 @@
             # be very wise...
             $current->{'remaining_args'} = 4 if ($command eq 'node');
             $current = $current->{'args'}->[-1];
+          } elsif ($line eq '') {
+            $current = _end_line($self, $current, $line_nr);
+            last;
           }
 
           last NEXT_LINE if ($command eq 'bye');
@@ -1573,11 +1752,6 @@
                  'parent' => $current } ];
               $current->{'remaining_args'} = $arg_number -1 if ($arg_number);
               $current = $current->{'args'}->[-1];
-              if ($command eq 'multitable' 
-                    and $line =~ s/address@hidden//) {
-                # both an argument and an @-command
-                $current->{'cmdname'} = 'columnfractions';
-              }
             } else {
               push @{$self->{'context_stack'}}, 'preformatted' 
                 if ($preformatted_commands{$command});
@@ -1607,6 +1781,10 @@
         } elsif ($no_brace_commands{$command}) {
           push @{$current->{'contents'}},
                  { 'cmdname' => $command, 'parent' => $current };
+          if ($command eq "\n") {
+            $current = _end_line($self, $current, $line_nr);
+            last;
+          }
         } else {
           _line_error ($self, sprintf($self->__("Unknown command `%s'"), 
                                                       $command), $line_nr);
@@ -1711,6 +1889,10 @@
                                           'contents' => [],
                                           'parent' => $current };
             $current = $current->{'args'}->[-1];
+            if ($line eq '') {
+              $current = _end_line($self, $current, $line_nr);
+              last;
+            }
           }
         # end of menu_entry_name
         } elsif ($separator eq ':' and $current->{'type'} 
@@ -1741,6 +1923,10 @@
                                           'parent' => $current };
           }
           $current = $current->{'args'}->[-1];
+          if ($line eq '') {
+            $current = _end_line($self, $current, $line_nr);
+            last;
+          }
         } else {
           $current = _merge_text ($self, $current, $separator);
         }
@@ -1752,223 +1938,18 @@
         if ($self->{'debug'}) {
           print STDERR "END LINE: ". _print_current($current)."\n";
         }
-        if ($line ne "\n" 
-            and !($line eq '')) {
-          #  and !($current->{'contents'} and @{$current->{'contents'}} 
-          #         and $current->{'contents'}->[-1] 
-          #         and $current->{'contents'}->[-1]->{'cmdname'}
-          #         and $current->{'contents'}->[-1]->{'cmdname'} eq "\n"
-          #         and $line eq ''
-          #       )
-          #  and !($line eq '' and !scalar(@$text))) {
-          _line_warn ($self, "BUG spurious suff on line. Remaining text: 
@$text", $line_nr);
-          die "Remaining line: |$line|\n";
+        if ($line ne "\n" and scalar(@$text)) {
+          die "Remaining line: |$line|\n" if ($line ne '');
+          print STDERR "END OF TEXT not at end of line/text\n" 
+            if ($self->{'debug'});
+          $line = shift @$text;
+          $line_nr = shift @$lines_array;
+          next;
         }
         if ($line =~ s/^(\n)//) {
           $current = _merge_text ($self, $current, $1);
         }
-        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_name') {
-            print STDERR "FINALLY NOT MENU ENTRY\n" if ($self->{'debug'});
-            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'})) {
-                $current = _merge_text ($self, $current, $arg->{'text'});
-              } else {
-                while (@{$arg->{'contents'}}) {
-                  my $content = shift @{$arg->{'contents'}};
-                  if (defined($content->{'text'})) {
-                    $current = _merge_text ($self, $current, 
-                                                $content->{'text'});
-                    $content = undef;
-                  } else {
-                    $content->{'parent'} = $current;
-                    push @{$current->{'contents'}}, $content;
-                  }
-                }
-              }
-              $arg = undef;
-            }
-            $menu_entry = undef;
-          } else {
-            print STDERR "MENU ENTRY END LINE\n" if ($self->{'debug'});
-            $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
-        } elsif ($current->{'parent'}
-             and $current->{'parent'}->{'type'}
-                    and $current->{'parent'}->{'type'} eq 'def_line') {
-            my $def_context = pop @{$self->{'context_stack'}};
-            die "BUG: def_context $def_context "._print_current($current) 
-               if ($def_context ne 'def');
-            $current = $current->{'parent'}->{'parent'};
-        # other block command lines
-        } elsif ($current->{'type'}
-            and $current->{'type'} eq 'block_line_arg') {
-          # @multitable @columnfractions
-          if ($current->{'cmdname'}
-              and $current->{'cmdname'} eq 'columnfractions') { 
-            # the columnfraction content should be text only, maybe
-            # followed by a comment.
-            #print STDERR "COLUMNFRACTIONS: ".Data::Dumper->Dump([$current], 
['$columnfractions']) if ($self->{'debug'});
-            my @fractions;
-            my $other_contents;
-            if (address@hidden>{'contents'}}) {
-              _line_error ($self, sprintf($self->__("Empty address@hidden"),
-                                $current->{'cmdname'}), $line_nr);
-
-            } elsif (!defined($current->{'contents'}->[0]->{'text'})) {
-              _line_error ($self, sprintf($self->
-                                 __("address@hidden accepts only fractions as 
argument"),
-                                 $current->{'cmdname'}), $line_nr);
-              $other_contents = $current->{'contents'};
-
-            } else {
-              my $fraction_argument = shift @{$current->{'contents'}};
-              # verify that the only remaining argument is a comment
-              if (@{$current->{'contents'}}
-                  and (!$current->{'contents'}->[0]->{'cmdname'} 
-                       or ($current->{'contents'}->[0]->{'cmdname'} ne 'c'
-                           and $current->{'contents'}->[0]->{'cmdname'}
-                               ne 'comment'))) {
-                _line_warn ($self, sprintf($self->
-                         __("Unexpected argument on address@hidden line: %s"), 
-                         $current->{'cmdname'}, 
-                         tree_to_texi( { $current->{'contents'} })), $line_nr);
-              }
-              $other_contents = $current->{'contents'};
-              # now parse the fractions
-              my @possible_fractions = split (/\s+/,
-                                              $fraction_argument->{'text'});
-              foreach my $fraction (@possible_fractions) {
-                if ($fraction =~ /^(\d*\.\d+)|(\d+)\.?$/) {
-                  push @fractions, $fraction;
-                } else {
-                  _line_error ($self, sprintf($self->
-                                        __("column fraction not a number: %s"),
-                                        $fraction), $line_nr);
-                }
-              }
-            }
-            $current = $current->{'parent'};
-            $current->{'special'}->{'max_columns'} = scalar(@fractions);
-            $current->{'args'} = [ { 'cmdname' => 'columnfractions',
-                                     'parent' => $current } ];
-            foreach my $content (@$other_contents) {
-              $content->{'parent'} = $current;
-              push @{$current->{'args'}}, $content;
-            }
-            $current = $current->{'args'}->[0];
-            foreach my $fraction (@fractions) {
-              push @{$current->{'args'}},
-                   { 'type' => 'fraction', 'text' => $fraction,
-                     'parent' => $current };
-            }
-          # @multitable args
-          } elsif ($current->{'parent'} and $current->{'parent'}->{'cmdname'}
-                     and $current->{'parent'}->{'cmdname'} eq 'multitable') {
-            my $line_arg = $current;
-            my @prototype_rows;
-            my @other_contents;
-            # rearrange the row specifications as args, which mostly 
-            # implies splitting non-bracketed text and reparenting.
-            foreach my $content (@{$current->{'contents'}}) {
-              if ($content->{'type'} and $content->{'type'} eq 'bracketed') {
-                $content->{'parent'} = $current->{'parent'};
-                push @prototype_rows, $content;
-              } elsif ($content->{'text'}) {
-                if ($content->{'text'} =~ /\S/) {
-                  foreach my $prototype(split /\s+/, $content->{'text'}) {
-                    push @prototype_rows, { 'text' => $prototype, 
-                                  'parent' => $current->{'parent'},
-                                  'type' => 'row_prototype' };
-                  }
-                }
-              } else {
-                if (!$content->{'cmdname'}) { 
-                  _line_warn ($self, sprintf($self->
-                         __("Unexpected argument on address@hidden line: %s"), 
-                         $current->{'cmdname'}, 
-                         tree_to_texi( { $content->{'contents'} })), $line_nr);
-                  push @other_contents, $content;
-                } elsif ($content->{'cmdname'} eq 'c' 
-                       and $content->{'cmdname'} eq 'comment') {
-                  push @other_contents, $content;
-                } else {
-                  push @prototype_rows, $content;
-                }
-                $content->{'parent'} = $current->{'parent'};
-              }
-            }
-            
-            $current = $current->{'parent'};
-            $current->{'special'}->{'max_columns'} = scalar(@prototype_rows);
-            if (!scalar(@prototype_rows)) {
-              $self->_line_warn ($self->__("empty multitable"), $line_nr);
-            }
-            $current->{'args'} = address@hidden;
-            $current->{'contents'} = address@hidden;
-            # this is in order to have $current->{'parent'} being the 
multitable
-            
-            $current = $line_arg;
-          }
-          $current = $current->{'parent'};
-          if ($current->{'cmdname'} 
-                and $block_item_commands{$current->{'cmdname'}}) {
-            push @{$current->{'contents'}}, { 'type' => 'before_item',
-               'contents' => [], 'parent', $current };
-            $current = $current->{'contents'}->[-1];
-          }
-        # misc command line arguments
-        } elsif ($current->{'type'} 
-           and $current->{'type'} eq 'misc_line_arg') {
-          # first parent is the @command, second is the parent
-          $current = $current->{'parent'};
-          print STDERR "MISC END address@hidden>{'cmdname'}\n" if 
($self->{'debug'});
-          if ($self->{'misc_commands'}->{$current->{'cmdname'}}->{'arg'}
-              and $self->{'misc_commands'}->{$current->{'cmdname'}}->{'arg'} 
=~ /^\d$/) {
-            my $args = _parse_line_command_args ($self, $current, $line_nr);
-            $current->{'special'}->{'misc_args'} = $args if (defined($args));
-          }
-          $current = $current->{'parent'};
-        }
+        $current = _end_line($self, $current, $line_nr);
         last;
       }
     }
@@ -2252,6 +2233,7 @@
   return undef if (!defined($arg->{'contents'}->[0]->{'text'}));
   
   my $line = $arg->{'contents'}->[0]->{'text'};  
+  $line =~ s/^[ \t]*//;
 
   if ($command eq 'alias') {
     # REMACRO
@@ -2273,6 +2255,22 @@
       _line_error ($self, sprintf($self->
                               __("Bad argument to address@hidden"), $command), 
$line_nr);
     }
+  } elsif ($command eq 'columnfractions') {
+    my @possible_fractions = split (/\s+/, $line);
+    if (address@hidden) {
+      _line_error ($self, sprintf($self->__("Empty address@hidden"), 
$command), 
+                             $line_nr);
+    } else {
+      foreach my $fraction (@possible_fractions) {
+        if ($fraction =~ /^(\d*\.\d+)|(\d+)\.?$/) {
+          push @$args, $fraction;
+        } else {
+          _line_error ($self, sprintf($self->
+                              __("column fraction not a number: %s"),
+                              $fraction), $line_nr);
+        }
+      }
+    }
   } elsif ($command eq 'defindex' || $command eq 'defcodeindex') {
     # REMACRO
     if ($line =~ /^(\w[\w\-]*)\s*/) {

Index: t/60macro.t
===================================================================
RCS file: /sources/texinfo/texinfo/tp/t/60macro.t,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -b -r1.10 -r1.11
--- t/60macro.t 4 Oct 2010 07:02:40 -0000       1.10
+++ t/60macro.t 6 Oct 2010 21:22:48 -0000       1.11
@@ -386,6 +386,8 @@
 
 @address@hidden
 '],
+# FIXME this tests much more than macro, but also index related stuff.
+# This part should certainly be elsewhere.
 ['macro_in_line_commands',
 '@macro cp
 cp

Index: t/results/columnfractions/empty.pl
===================================================================
RCS file: /sources/texinfo/texinfo/tp/t/results/columnfractions/empty.pl,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -b -r1.4 -r1.5
--- t/results/columnfractions/empty.pl  25 Sep 2010 16:01:07 -0000      1.4
+++ t/results/columnfractions/empty.pl  6 Oct 2010 21:22:48 -0000       1.5
@@ -5,8 +5,28 @@
     {
       'args' => [
         {
+          'contents' => [
+            {
+              'args' => [
+                {
+                  'contents' => [
+                    {
+                      'parent' => {},
+                      'text' => '
+'
+                    }
+                  ],
+                  'parent' => {},
+                  'type' => 'misc_line_arg'
+                }
+              ],
           'cmdname' => 'columnfractions',
-          'parent' => {}
+              'parent' => {},
+              'special' => {}
+            }
+          ],
+          'parent' => {},
+          'type' => 'block_line_arg'
         }
       ],
       'cmdname' => 'multitable',
@@ -24,6 +44,9 @@
     }
   ]
 };
+$result_trees{'empty'}{'contents'}[0]{'args'}[0]{'contents'}[0]{'args'}[0]{'contents'}[0]{'parent'}
 = $result_trees{'empty'}{'contents'}[0]{'args'}[0]{'contents'}[0]{'args'}[0];
+$result_trees{'empty'}{'contents'}[0]{'args'}[0]{'contents'}[0]{'args'}[0]{'parent'}
 = $result_trees{'empty'}{'contents'}[0]{'args'}[0]{'contents'}[0];
+$result_trees{'empty'}{'contents'}[0]{'args'}[0]{'contents'}[0]{'parent'} = 
$result_trees{'empty'}{'contents'}[0]{'args'}[0];
 $result_trees{'empty'}{'contents'}[0]{'args'}[0]{'parent'} = 
$result_trees{'empty'}{'contents'}[0];
 $result_trees{'empty'}{'contents'}[0]{'contents'}[0]{'parent'} = 
$result_trees{'empty'}{'contents'}[0];
 $result_trees{'empty'}{'contents'}[0]{'parent'} = $result_trees{'empty'};

Index: t/results/columnfractions/empty_comment.pl
===================================================================
RCS file: 
/sources/texinfo/texinfo/tp/t/results/columnfractions/empty_comment.pl,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -b -r1.4 -r1.5
--- t/results/columnfractions/empty_comment.pl  25 Sep 2010 16:01:07 -0000      
1.4
+++ t/results/columnfractions/empty_comment.pl  6 Oct 2010 21:22:48 -0000       
1.5
@@ -5,9 +5,11 @@
     {
       'args' => [
         {
-          'cmdname' => 'columnfractions',
-          'parent' => {}
-        },
+          'contents' => [
+            {
+              'args' => [
+                {
+                  'contents' => [
         {
           'args' => [
             {
@@ -21,6 +23,19 @@
           'parent' => {}
         }
       ],
+                  'parent' => {},
+                  'type' => 'misc_line_arg'
+                }
+              ],
+              'cmdname' => 'columnfractions',
+              'parent' => {},
+              'special' => {}
+            }
+          ],
+          'parent' => {},
+          'type' => 'block_line_arg'
+        }
+      ],
       'cmdname' => 'multitable',
       'contents' => [
         {
@@ -36,9 +51,11 @@
     }
   ]
 };
+$result_trees{'empty_comment'}{'contents'}[0]{'args'}[0]{'contents'}[0]{'args'}[0]{'contents'}[0]{'args'}[0]{'parent'}
 = 
$result_trees{'empty_comment'}{'contents'}[0]{'args'}[0]{'contents'}[0]{'args'}[0]{'contents'}[0];
+$result_trees{'empty_comment'}{'contents'}[0]{'args'}[0]{'contents'}[0]{'args'}[0]{'contents'}[0]{'parent'}
 = 
$result_trees{'empty_comment'}{'contents'}[0]{'args'}[0]{'contents'}[0]{'args'}[0];
+$result_trees{'empty_comment'}{'contents'}[0]{'args'}[0]{'contents'}[0]{'args'}[0]{'parent'}
 = $result_trees{'empty_comment'}{'contents'}[0]{'args'}[0]{'contents'}[0];
+$result_trees{'empty_comment'}{'contents'}[0]{'args'}[0]{'contents'}[0]{'parent'}
 = $result_trees{'empty_comment'}{'contents'}[0]{'args'}[0];
 $result_trees{'empty_comment'}{'contents'}[0]{'args'}[0]{'parent'} = 
$result_trees{'empty_comment'}{'contents'}[0];
-$result_trees{'empty_comment'}{'contents'}[0]{'args'}[1]{'args'}[0]{'parent'} 
= $result_trees{'empty_comment'}{'contents'}[0]{'args'}[1];
-$result_trees{'empty_comment'}{'contents'}[0]{'args'}[1]{'parent'} = 
$result_trees{'empty_comment'}{'contents'}[0];
 $result_trees{'empty_comment'}{'contents'}[0]{'contents'}[0]{'parent'} = 
$result_trees{'empty_comment'}{'contents'}[0];
 $result_trees{'empty_comment'}{'contents'}[0]{'parent'} = 
$result_trees{'empty_comment'};
 
@@ -48,12 +65,12 @@
 
 $result_errors{'empty_comment'} = [
   {
-    'error_line' => ':1: @columnfractions accepts only fractions as argument
+    'error_line' => ':1: @columnfractions missing argument
 ',
     'file_name' => '',
     'line_nr' => 1,
     'macro' => '',
-    'text' => '@columnfractions accepts only fractions as argument',
+    'text' => '@columnfractions missing argument',
     'type' => 'error'
   }
 ];

Index: t/results/columnfractions/good.pl
===================================================================
RCS file: /sources/texinfo/texinfo/tp/t/results/columnfractions/good.pl,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -b -r1.4 -r1.5
--- t/results/columnfractions/good.pl   25 Sep 2010 16:01:07 -0000      1.4
+++ t/results/columnfractions/good.pl   6 Oct 2010 21:22:48 -0000       1.5
@@ -5,25 +5,34 @@
     {
       'args' => [
         {
+          'contents' => [
+            {
           'args' => [
             {
-              'parent' => {},
-              'text' => '0.4',
-              'type' => 'fraction'
-            },
+                  'contents' => [
             {
               'parent' => {},
-              'text' => '.6',
-              'type' => 'fraction'
-            },
-            {
+                      'text' => '0.4 .6 5.
+'
+                    }
+                  ],
               'parent' => {},
-              'text' => '5.',
-              'type' => 'fraction'
+                  'type' => 'misc_line_arg'
             }
           ],
           'cmdname' => 'columnfractions',
-          'parent' => {}
+              'parent' => {},
+              'special' => {
+                'misc_args' => [
+                  '0.4',
+                  '.6',
+                  '5.'
+                ]
+              }
+            }
+          ],
+          'parent' => {},
+          'type' => 'block_line_arg'
         }
       ],
       'cmdname' => 'multitable',
@@ -41,9 +50,9 @@
     }
   ]
 };
-$result_trees{'good'}{'contents'}[0]{'args'}[0]{'args'}[0]{'parent'} = 
$result_trees{'good'}{'contents'}[0]{'args'}[0];
-$result_trees{'good'}{'contents'}[0]{'args'}[0]{'args'}[1]{'parent'} = 
$result_trees{'good'}{'contents'}[0]{'args'}[0];
-$result_trees{'good'}{'contents'}[0]{'args'}[0]{'args'}[2]{'parent'} = 
$result_trees{'good'}{'contents'}[0]{'args'}[0];
+$result_trees{'good'}{'contents'}[0]{'args'}[0]{'contents'}[0]{'args'}[0]{'contents'}[0]{'parent'}
 = $result_trees{'good'}{'contents'}[0]{'args'}[0]{'contents'}[0]{'args'}[0];
+$result_trees{'good'}{'contents'}[0]{'args'}[0]{'contents'}[0]{'args'}[0]{'parent'}
 = $result_trees{'good'}{'contents'}[0]{'args'}[0]{'contents'}[0];
+$result_trees{'good'}{'contents'}[0]{'args'}[0]{'contents'}[0]{'parent'} = 
$result_trees{'good'}{'contents'}[0]{'args'}[0];
 $result_trees{'good'}{'contents'}[0]{'args'}[0]{'parent'} = 
$result_trees{'good'}{'contents'}[0];
 $result_trees{'good'}{'contents'}[0]{'contents'}[0]{'parent'} = 
$result_trees{'good'}{'contents'}[0];
 $result_trees{'good'}{'contents'}[0]{'parent'} = $result_trees{'good'};

Index: t/results/columnfractions/good_comment.pl
===================================================================
RCS file: 
/sources/texinfo/texinfo/tp/t/results/columnfractions/good_comment.pl,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -b -r1.4 -r1.5
--- t/results/columnfractions/good_comment.pl   25 Sep 2010 16:01:07 -0000      
1.4
+++ t/results/columnfractions/good_comment.pl   6 Oct 2010 21:22:48 -0000       
1.5
@@ -5,25 +5,14 @@
     {
       'args' => [
         {
-          'args' => [
+          'contents' => [
             {
-              'parent' => {},
-              'text' => '0.4',
-              'type' => 'fraction'
-            },
+              'args' => [
             {
-              'parent' => {},
-              'text' => '.6',
-              'type' => 'fraction'
-            },
+                  'contents' => [
             {
               'parent' => {},
-              'text' => '5.',
-              'type' => 'fraction'
-            }
-          ],
-          'cmdname' => 'columnfractions',
-          'parent' => {}
+                      'text' => '0.4 .6 5.'
         },
         {
           'args' => [
@@ -38,6 +27,25 @@
           'parent' => {}
         }
       ],
+                  'parent' => {},
+                  'type' => 'misc_line_arg'
+                }
+              ],
+              'cmdname' => 'columnfractions',
+              'parent' => {},
+              'special' => {
+                'misc_args' => [
+                  '0.4',
+                  '.6',
+                  '5.'
+                ]
+              }
+            }
+          ],
+          'parent' => {},
+          'type' => 'block_line_arg'
+        }
+      ],
       'cmdname' => 'multitable',
       'contents' => [
         {
@@ -53,16 +61,16 @@
     }
   ]
 };
-$result_trees{'good_comment'}{'contents'}[0]{'args'}[0]{'args'}[0]{'parent'} = 
$result_trees{'good_comment'}{'contents'}[0]{'args'}[0];
-$result_trees{'good_comment'}{'contents'}[0]{'args'}[0]{'args'}[1]{'parent'} = 
$result_trees{'good_comment'}{'contents'}[0]{'args'}[0];
-$result_trees{'good_comment'}{'contents'}[0]{'args'}[0]{'args'}[2]{'parent'} = 
$result_trees{'good_comment'}{'contents'}[0]{'args'}[0];
+$result_trees{'good_comment'}{'contents'}[0]{'args'}[0]{'contents'}[0]{'args'}[0]{'contents'}[0]{'parent'}
 = 
$result_trees{'good_comment'}{'contents'}[0]{'args'}[0]{'contents'}[0]{'args'}[0];
+$result_trees{'good_comment'}{'contents'}[0]{'args'}[0]{'contents'}[0]{'args'}[0]{'contents'}[1]{'args'}[0]{'parent'}
 = 
$result_trees{'good_comment'}{'contents'}[0]{'args'}[0]{'contents'}[0]{'args'}[0]{'contents'}[1];
+$result_trees{'good_comment'}{'contents'}[0]{'args'}[0]{'contents'}[0]{'args'}[0]{'contents'}[1]{'parent'}
 = 
$result_trees{'good_comment'}{'contents'}[0]{'args'}[0]{'contents'}[0]{'args'}[0];
+$result_trees{'good_comment'}{'contents'}[0]{'args'}[0]{'contents'}[0]{'args'}[0]{'parent'}
 = $result_trees{'good_comment'}{'contents'}[0]{'args'}[0]{'contents'}[0];
+$result_trees{'good_comment'}{'contents'}[0]{'args'}[0]{'contents'}[0]{'parent'}
 = $result_trees{'good_comment'}{'contents'}[0]{'args'}[0];
 $result_trees{'good_comment'}{'contents'}[0]{'args'}[0]{'parent'} = 
$result_trees{'good_comment'}{'contents'}[0];
-$result_trees{'good_comment'}{'contents'}[0]{'args'}[1]{'args'}[0]{'parent'} = 
$result_trees{'good_comment'}{'contents'}[0]{'args'}[1];
-$result_trees{'good_comment'}{'contents'}[0]{'args'}[1]{'parent'} = 
$result_trees{'good_comment'}{'contents'}[0];
 $result_trees{'good_comment'}{'contents'}[0]{'contents'}[0]{'parent'} = 
$result_trees{'good_comment'}{'contents'}[0];
 $result_trees{'good_comment'}{'contents'}[0]{'parent'} = 
$result_trees{'good_comment'};
 
-$result_texts{'good_comment'} = '@multitable @columnfractions 0.4 .6 5. @c 
comment
+$result_texts{'good_comment'} = '@multitable @columnfractions 0.4 .6 
address@hidden comment
 @end multitable
 ';
 

Index: t/results/columnfractions/good_space_comment.pl
===================================================================
RCS file: 
/sources/texinfo/texinfo/tp/t/results/columnfractions/good_space_comment.pl,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -b -r1.4 -r1.5
--- t/results/columnfractions/good_space_comment.pl     25 Sep 2010 16:01:07 
-0000      1.4
+++ t/results/columnfractions/good_space_comment.pl     6 Oct 2010 21:22:48 
-0000       1.5
@@ -5,20 +5,14 @@
     {
       'args' => [
         {
+          'contents' => [
+            {
           'args' => [
             {
-              'parent' => {},
-              'text' => '0',
-              'type' => 'fraction'
-            },
+                  'contents' => [
             {
               'parent' => {},
-              'text' => '1',
-              'type' => 'fraction'
-            }
-          ],
-          'cmdname' => 'columnfractions',
-          'parent' => {}
+                      'text' => '0 1  '
         },
         {
           'args' => [
@@ -33,6 +27,24 @@
           'parent' => {}
         }
       ],
+                  'parent' => {},
+                  'type' => 'misc_line_arg'
+                }
+              ],
+              'cmdname' => 'columnfractions',
+              'parent' => {},
+              'special' => {
+                'misc_args' => [
+                  '0',
+                  '1'
+                ]
+              }
+            }
+          ],
+          'parent' => {},
+          'type' => 'block_line_arg'
+        }
+      ],
       'cmdname' => 'multitable',
       'contents' => [
         {
@@ -48,11 +60,12 @@
     }
   ]
 };
-$result_trees{'good_space_comment'}{'contents'}[0]{'args'}[0]{'args'}[0]{'parent'}
 = $result_trees{'good_space_comment'}{'contents'}[0]{'args'}[0];
-$result_trees{'good_space_comment'}{'contents'}[0]{'args'}[0]{'args'}[1]{'parent'}
 = $result_trees{'good_space_comment'}{'contents'}[0]{'args'}[0];
+$result_trees{'good_space_comment'}{'contents'}[0]{'args'}[0]{'contents'}[0]{'args'}[0]{'contents'}[0]{'parent'}
 = 
$result_trees{'good_space_comment'}{'contents'}[0]{'args'}[0]{'contents'}[0]{'args'}[0];
+$result_trees{'good_space_comment'}{'contents'}[0]{'args'}[0]{'contents'}[0]{'args'}[0]{'contents'}[1]{'args'}[0]{'parent'}
 = 
$result_trees{'good_space_comment'}{'contents'}[0]{'args'}[0]{'contents'}[0]{'args'}[0]{'contents'}[1];
+$result_trees{'good_space_comment'}{'contents'}[0]{'args'}[0]{'contents'}[0]{'args'}[0]{'contents'}[1]{'parent'}
 = 
$result_trees{'good_space_comment'}{'contents'}[0]{'args'}[0]{'contents'}[0]{'args'}[0];
+$result_trees{'good_space_comment'}{'contents'}[0]{'args'}[0]{'contents'}[0]{'args'}[0]{'parent'}
 = $result_trees{'good_space_comment'}{'contents'}[0]{'args'}[0]{'contents'}[0];
+$result_trees{'good_space_comment'}{'contents'}[0]{'args'}[0]{'contents'}[0]{'parent'}
 = $result_trees{'good_space_comment'}{'contents'}[0]{'args'}[0];
 $result_trees{'good_space_comment'}{'contents'}[0]{'args'}[0]{'parent'} = 
$result_trees{'good_space_comment'}{'contents'}[0];
-$result_trees{'good_space_comment'}{'contents'}[0]{'args'}[1]{'args'}[0]{'parent'}
 = $result_trees{'good_space_comment'}{'contents'}[0]{'args'}[1];
-$result_trees{'good_space_comment'}{'contents'}[0]{'args'}[1]{'parent'} = 
$result_trees{'good_space_comment'}{'contents'}[0];
 $result_trees{'good_space_comment'}{'contents'}[0]{'contents'}[0]{'parent'} = 
$result_trees{'good_space_comment'}{'contents'}[0];
 $result_trees{'good_space_comment'}{'contents'}[0]{'parent'} = 
$result_trees{'good_space_comment'};
 

Index: t/results/columnfractions/not_fraction.pl
===================================================================
RCS file: 
/sources/texinfo/texinfo/tp/t/results/columnfractions/not_fraction.pl,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -b -r1.4 -r1.5
--- t/results/columnfractions/not_fraction.pl   25 Sep 2010 16:01:07 -0000      
1.4
+++ t/results/columnfractions/not_fraction.pl   6 Oct 2010 21:22:48 -0000       
1.5
@@ -5,8 +5,28 @@
     {
       'args' => [
         {
+          'contents' => [
+            {
+              'args' => [
+                {
+                  'contents' => [
+                    {
+                      'parent' => {},
+                      'text' => 'aaa
+'
+                    }
+                  ],
+                  'parent' => {},
+                  'type' => 'misc_line_arg'
+                }
+              ],
           'cmdname' => 'columnfractions',
-          'parent' => {}
+              'parent' => {},
+              'special' => {}
+            }
+          ],
+          'parent' => {},
+          'type' => 'block_line_arg'
         }
       ],
       'cmdname' => 'multitable',
@@ -24,11 +44,14 @@
     }
   ]
 };
+$result_trees{'not_fraction'}{'contents'}[0]{'args'}[0]{'contents'}[0]{'args'}[0]{'contents'}[0]{'parent'}
 = 
$result_trees{'not_fraction'}{'contents'}[0]{'args'}[0]{'contents'}[0]{'args'}[0];
+$result_trees{'not_fraction'}{'contents'}[0]{'args'}[0]{'contents'}[0]{'args'}[0]{'parent'}
 = $result_trees{'not_fraction'}{'contents'}[0]{'args'}[0]{'contents'}[0];
+$result_trees{'not_fraction'}{'contents'}[0]{'args'}[0]{'contents'}[0]{'parent'}
 = $result_trees{'not_fraction'}{'contents'}[0]{'args'}[0];
 $result_trees{'not_fraction'}{'contents'}[0]{'args'}[0]{'parent'} = 
$result_trees{'not_fraction'}{'contents'}[0];
 $result_trees{'not_fraction'}{'contents'}[0]{'contents'}[0]{'parent'} = 
$result_trees{'not_fraction'}{'contents'}[0];
 $result_trees{'not_fraction'}{'contents'}[0]{'parent'} = 
$result_trees{'not_fraction'};
 
-$result_texts{'not_fraction'} = '@multitable @columnfractions
+$result_texts{'not_fraction'} = '@multitable @columnfractions aaa
 @end multitable
 ';
 

Index: t/results/columnfractions/wrong_command.pl
===================================================================
RCS file: 
/sources/texinfo/texinfo/tp/t/results/columnfractions/wrong_command.pl,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -b -r1.5 -r1.6
--- t/results/columnfractions/wrong_command.pl  4 Oct 2010 07:02:40 -0000       
1.5
+++ t/results/columnfractions/wrong_command.pl  6 Oct 2010 21:22:48 -0000       
1.6
@@ -5,9 +5,11 @@
     {
       'args' => [
         {
-          'cmdname' => 'columnfractions',
-          'parent' => {}
-        },
+          'contents' => [
+            {
+              'args' => [
+                {
+                  'contents' => [
         {
           'args' => [
             {
@@ -32,6 +34,19 @@
 '
         }
       ],
+                  'parent' => {},
+                  'type' => 'misc_line_arg'
+                }
+              ],
+              'cmdname' => 'columnfractions',
+              'parent' => {},
+              'special' => {}
+            }
+          ],
+          'parent' => {},
+          'type' => 'block_line_arg'
+        }
+      ],
       'cmdname' => 'multitable',
       'contents' => [
         {
@@ -47,11 +62,13 @@
     }
   ]
 };
+$result_trees{'wrong_command'}{'contents'}[0]{'args'}[0]{'contents'}[0]{'args'}[0]{'contents'}[0]{'args'}[0]{'contents'}[0]{'parent'}
 = 
$result_trees{'wrong_command'}{'contents'}[0]{'args'}[0]{'contents'}[0]{'args'}[0]{'contents'}[0]{'args'}[0];
+$result_trees{'wrong_command'}{'contents'}[0]{'args'}[0]{'contents'}[0]{'args'}[0]{'contents'}[0]{'args'}[0]{'parent'}
 = 
$result_trees{'wrong_command'}{'contents'}[0]{'args'}[0]{'contents'}[0]{'args'}[0]{'contents'}[0];
+$result_trees{'wrong_command'}{'contents'}[0]{'args'}[0]{'contents'}[0]{'args'}[0]{'contents'}[0]{'parent'}
 = 
$result_trees{'wrong_command'}{'contents'}[0]{'args'}[0]{'contents'}[0]{'args'}[0];
+$result_trees{'wrong_command'}{'contents'}[0]{'args'}[0]{'contents'}[0]{'args'}[0]{'contents'}[1]{'parent'}
 = 
$result_trees{'wrong_command'}{'contents'}[0]{'args'}[0]{'contents'}[0]{'args'}[0];
+$result_trees{'wrong_command'}{'contents'}[0]{'args'}[0]{'contents'}[0]{'args'}[0]{'parent'}
 = $result_trees{'wrong_command'}{'contents'}[0]{'args'}[0]{'contents'}[0];
+$result_trees{'wrong_command'}{'contents'}[0]{'args'}[0]{'contents'}[0]{'parent'}
 = $result_trees{'wrong_command'}{'contents'}[0]{'args'}[0];
 $result_trees{'wrong_command'}{'contents'}[0]{'args'}[0]{'parent'} = 
$result_trees{'wrong_command'}{'contents'}[0];
-$result_trees{'wrong_command'}{'contents'}[0]{'args'}[1]{'args'}[0]{'contents'}[0]{'parent'}
 = $result_trees{'wrong_command'}{'contents'}[0]{'args'}[1]{'args'}[0];
-$result_trees{'wrong_command'}{'contents'}[0]{'args'}[1]{'args'}[0]{'parent'} 
= $result_trees{'wrong_command'}{'contents'}[0]{'args'}[1];
-$result_trees{'wrong_command'}{'contents'}[0]{'args'}[1]{'parent'} = 
$result_trees{'wrong_command'}{'contents'}[0];
-$result_trees{'wrong_command'}{'contents'}[0]{'args'}[2]{'parent'} = 
$result_trees{'wrong_command'}{'contents'}[0];
 $result_trees{'wrong_command'}{'contents'}[0]{'contents'}[0]{'parent'} = 
$result_trees{'wrong_command'}{'contents'}[0];
 $result_trees{'wrong_command'}{'contents'}[0]{'parent'} = 
$result_trees{'wrong_command'};
 
@@ -61,12 +78,12 @@
 
 $result_errors{'wrong_command'} = [
   {
-    'error_line' => ':1: @columnfractions accepts only fractions as argument
+    'error_line' => ':1: Bad argument to @columnfractions
 ',
     'file_name' => '',
     'line_nr' => 1,
     'macro' => '',
-    'text' => '@columnfractions accepts only fractions as argument',
+    'text' => 'Bad argument to @columnfractions',
     'type' => 'error'
   }
 ];

Index: t/results/coverage/multitable.pl
===================================================================
RCS file: /sources/texinfo/texinfo/tp/t/results/coverage/multitable.pl,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -b -r1.1 -r1.2
--- t/results/coverage/multitable.pl    25 Sep 2010 21:12:13 -0000      1.1
+++ t/results/coverage/multitable.pl    6 Oct 2010 21:22:48 -0000       1.2
@@ -11,20 +11,33 @@
     {
       'args' => [
         {
+          'contents' => [
+            {
           'args' => [
             {
-              'parent' => {},
-              'text' => '6',
-              'type' => 'fraction'
-            },
+                  'contents' => [
             {
               'parent' => {},
-              'text' => '7',
-              'type' => 'fraction'
+                      'text' => '6 7
+'
+                    }
+                  ],
+                  'parent' => {},
+                  'type' => 'misc_line_arg'
             }
           ],
           'cmdname' => 'columnfractions',
-          'parent' => {}
+              'parent' => {},
+              'special' => {
+                'misc_args' => [
+                  '6',
+                  '7'
+                ]
+              }
+            }
+          ],
+          'parent' => {},
+          'type' => 'block_line_arg'
         }
       ],
       'cmdname' => 'multitable',
@@ -308,8 +321,9 @@
   ]
 };
 $result_trees{'multitable'}{'contents'}[0]{'parent'} = 
$result_trees{'multitable'};
-$result_trees{'multitable'}{'contents'}[1]{'args'}[0]{'args'}[0]{'parent'} = 
$result_trees{'multitable'}{'contents'}[1]{'args'}[0];
-$result_trees{'multitable'}{'contents'}[1]{'args'}[0]{'args'}[1]{'parent'} = 
$result_trees{'multitable'}{'contents'}[1]{'args'}[0];
+$result_trees{'multitable'}{'contents'}[1]{'args'}[0]{'contents'}[0]{'args'}[0]{'contents'}[0]{'parent'}
 = 
$result_trees{'multitable'}{'contents'}[1]{'args'}[0]{'contents'}[0]{'args'}[0];
+$result_trees{'multitable'}{'contents'}[1]{'args'}[0]{'contents'}[0]{'args'}[0]{'parent'}
 = $result_trees{'multitable'}{'contents'}[1]{'args'}[0]{'contents'}[0];
+$result_trees{'multitable'}{'contents'}[1]{'args'}[0]{'contents'}[0]{'parent'} 
= $result_trees{'multitable'}{'contents'}[1]{'args'}[0];
 $result_trees{'multitable'}{'contents'}[1]{'args'}[0]{'parent'} = 
$result_trees{'multitable'}{'contents'}[1];
 $result_trees{'multitable'}{'contents'}[1]{'contents'}[0]{'parent'} = 
$result_trees{'multitable'}{'contents'}[1];
 
$result_trees{'multitable'}{'contents'}[1]{'contents'}[1]{'contents'}[0]{'contents'}[0]{'contents'}[0]{'parent'}
 = 
$result_trees{'multitable'}{'contents'}[1]{'contents'}[1]{'contents'}[0]{'contents'}[0];

Index: t/results/macro/arg_body_expansion_order.pl
===================================================================
RCS file: 
/sources/texinfo/texinfo/tp/t/results/macro/arg_body_expansion_order.pl,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -b -r1.1 -r1.2
--- t/results/macro/arg_body_expansion_order.pl 3 Oct 2010 11:51:37 -0000       
1.1
+++ t/results/macro/arg_body_expansion_order.pl 6 Oct 2010 21:22:48 -0000       
1.2
@@ -144,17 +144,12 @@
       'contents' => [
         {
           'parent' => {},
-          'text' => 'different'
+          'text' => 'different
+'
         }
       ],
       'parent' => {},
       'type' => 'paragraph'
-    },
-    {
-      'parent' => {},
-      'text' => '
-',
-      'type' => 'normal_line'
     }
   ]
 };
@@ -178,7 +173,6 @@
 $result_trees{'arg_body_expansion_order'}{'contents'}[6]{'parent'} = 
$result_trees{'arg_body_expansion_order'};
 
$result_trees{'arg_body_expansion_order'}{'contents'}[7]{'contents'}[0]{'parent'}
 = $result_trees{'arg_body_expansion_order'}{'contents'}[7];
 $result_trees{'arg_body_expansion_order'}{'contents'}[7]{'parent'} = 
$result_trees{'arg_body_expansion_order'};
-$result_trees{'arg_body_expansion_order'}{'contents'}[8]{'parent'} = 
$result_trees{'arg_body_expansion_order'};
 
 $result_texts{'arg_body_expansion_order'} = '
 @macro othermacro

Index: t/results/macro/arg_not_closed.pl
===================================================================
RCS file: /sources/texinfo/texinfo/tp/t/results/macro/arg_not_closed.pl,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -b -r1.1 -r1.2
--- t/results/macro/arg_not_closed.pl   30 Sep 2010 06:49:47 -0000      1.1
+++ t/results/macro/arg_not_closed.pl   6 Oct 2010 21:22:48 -0000       1.2
@@ -45,17 +45,12 @@
       'contents' => [
         {
           'parent' => {},
-          'text' => 'call foo'
+          'text' => 'call foo
+'
         }
       ],
       'parent' => {},
       'type' => 'paragraph'
-    },
-    {
-      'parent' => {},
-      'text' => '
-',
-      'type' => 'normal_line'
     }
   ]
 };
@@ -66,7 +61,6 @@
 $result_trees{'arg_not_closed'}{'contents'}[1]{'parent'} = 
$result_trees{'arg_not_closed'};
 $result_trees{'arg_not_closed'}{'contents'}[2]{'contents'}[0]{'parent'} = 
$result_trees{'arg_not_closed'}{'contents'}[2];
 $result_trees{'arg_not_closed'}{'contents'}[2]{'parent'} = 
$result_trees{'arg_not_closed'};
-$result_trees{'arg_not_closed'}{'contents'}[3]{'parent'} = 
$result_trees{'arg_not_closed'};
 
 $result_texts{'arg_not_closed'} = '@macro foo {arg}
 foo

Index: t/results/macro/complex_argument.pl
===================================================================
RCS file: /sources/texinfo/texinfo/tp/t/results/macro/complex_argument.pl,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -b -r1.2 -r1.3
--- t/results/macro/complex_argument.pl 4 Oct 2010 07:02:41 -0000       1.2
+++ t/results/macro/complex_argument.pl 6 Oct 2010 21:22:48 -0000       1.3
@@ -392,16 +392,15 @@
           'contents' => [],
           'parent' => {},
           'remaining_args' => 0
-        }
-      ],
-      'parent' => {},
-      'type' => 'paragraph'
     },
     {
       'parent' => {},
       'text' => '
-',
-      'type' => 'normal_line'
+'
+        }
+      ],
+      'parent' => {},
+      'type' => 'paragraph'
     },
     {
       'parent' => {},
@@ -471,9 +470,9 @@
 
$result_trees{'complex_argument'}{'contents'}[14]{'contents'}[1]{'args'}[0]{'contents'}[0]{'parent'}
 = $result_trees{'complex_argument'}{'contents'}[14]{'contents'}[1]{'args'}[0];
 
$result_trees{'complex_argument'}{'contents'}[14]{'contents'}[1]{'args'}[0]{'parent'}
 = $result_trees{'complex_argument'}{'contents'}[14]{'contents'}[1];
 $result_trees{'complex_argument'}{'contents'}[14]{'contents'}[1]{'parent'} = 
$result_trees{'complex_argument'}{'contents'}[14];
+$result_trees{'complex_argument'}{'contents'}[14]{'contents'}[2]{'parent'} = 
$result_trees{'complex_argument'}{'contents'}[14];
 $result_trees{'complex_argument'}{'contents'}[14]{'parent'} = 
$result_trees{'complex_argument'};
 $result_trees{'complex_argument'}{'contents'}[15]{'parent'} = 
$result_trees{'complex_argument'};
-$result_trees{'complex_argument'}{'contents'}[16]{'parent'} = 
$result_trees{'complex_argument'};
 
 $result_texts{'complex_argument'} = '@macro macro2{arg}
 coucou \\arg\\ after arg

Index: t/results/macro/implicit_quoting_one_arg.pl
===================================================================
RCS file: 
/sources/texinfo/texinfo/tp/t/results/macro/implicit_quoting_one_arg.pl,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -b -r1.2 -r1.3
--- t/results/macro/implicit_quoting_one_arg.pl 4 Oct 2010 07:02:41 -0000       
1.2
+++ t/results/macro/implicit_quoting_one_arg.pl 6 Oct 2010 21:22:48 -0000       
1.3
@@ -66,16 +66,15 @@
           'contents' => [],
           'parent' => {},
           'remaining_args' => 0
-        }
-      ],
-      'parent' => {},
-      'type' => 'paragraph'
     },
     {
       'parent' => {},
       'text' => '
-',
-      'type' => 'normal_line'
+'
+        }
+      ],
+      'parent' => {},
+      'type' => 'paragraph'
     }
   ]
 };
@@ -88,8 +87,8 @@
 
$result_trees{'implicit_quoting_one_arg'}{'contents'}[3]{'contents'}[0]{'args'}[0]{'contents'}[0]{'parent'}
 = 
$result_trees{'implicit_quoting_one_arg'}{'contents'}[3]{'contents'}[0]{'args'}[0];
 
$result_trees{'implicit_quoting_one_arg'}{'contents'}[3]{'contents'}[0]{'args'}[0]{'parent'}
 = $result_trees{'implicit_quoting_one_arg'}{'contents'}[3]{'contents'}[0];
 
$result_trees{'implicit_quoting_one_arg'}{'contents'}[3]{'contents'}[0]{'parent'}
 = $result_trees{'implicit_quoting_one_arg'}{'contents'}[3];
+$result_trees{'implicit_quoting_one_arg'}{'contents'}[3]{'contents'}[1]{'parent'}
 = $result_trees{'implicit_quoting_one_arg'}{'contents'}[3];
 $result_trees{'implicit_quoting_one_arg'}{'contents'}[3]{'parent'} = 
$result_trees{'implicit_quoting_one_arg'};
-$result_trees{'implicit_quoting_one_arg'}{'contents'}[4]{'parent'} = 
$result_trees{'implicit_quoting_one_arg'};
 
 $result_texts{'implicit_quoting_one_arg'} = '
 @macro FIXME{a}

Index: t/results/macro/macro_in_macro_arg.pl
===================================================================
RCS file: /sources/texinfo/texinfo/tp/t/results/macro/macro_in_macro_arg.pl,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -b -r1.2 -r1.3
--- t/results/macro/macro_in_macro_arg.pl       5 Oct 2010 22:41:40 -0000       
1.2
+++ t/results/macro/macro_in_macro_arg.pl       6 Oct 2010 21:22:48 -0000       
1.3
@@ -134,21 +134,10 @@
       'contents' => [
         {
           'parent' => {},
-          'text' => 'a, hello text for macro2 after arg'
-        }
-      ],
-      'parent' => {},
-      'type' => 'paragraph'
-    },
-    {
-      'parent' => {},
-      'text' => '
-',
-      'type' => 'normal_line'
+          'text' => 'a, hello text for macro2 after arg
+'
     },
     {
-      'contents' => [
-        {
           'parent' => {},
           'text' => '&&&& 
 '
@@ -177,10 +166,8 @@
 $result_trees{'macro_in_macro_arg'}{'contents'}[5]{'parent'} = 
$result_trees{'macro_in_macro_arg'};
 $result_trees{'macro_in_macro_arg'}{'contents'}[6]{'parent'} = 
$result_trees{'macro_in_macro_arg'};
 $result_trees{'macro_in_macro_arg'}{'contents'}[7]{'contents'}[0]{'parent'} = 
$result_trees{'macro_in_macro_arg'}{'contents'}[7];
+$result_trees{'macro_in_macro_arg'}{'contents'}[7]{'contents'}[1]{'parent'} = 
$result_trees{'macro_in_macro_arg'}{'contents'}[7];
 $result_trees{'macro_in_macro_arg'}{'contents'}[7]{'parent'} = 
$result_trees{'macro_in_macro_arg'};
-$result_trees{'macro_in_macro_arg'}{'contents'}[8]{'parent'} = 
$result_trees{'macro_in_macro_arg'};
-$result_trees{'macro_in_macro_arg'}{'contents'}[9]{'contents'}[0]{'parent'} = 
$result_trees{'macro_in_macro_arg'}{'contents'}[9];
-$result_trees{'macro_in_macro_arg'}{'contents'}[9]{'parent'} = 
$result_trees{'macro_in_macro_arg'};
 
 $result_texts{'macro_in_macro_arg'} = '
 @macro macro1

Index: t/results/macro/macro_zero.pl
===================================================================
RCS file: /sources/texinfo/texinfo/tp/t/results/macro/macro_zero.pl,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -b -r1.1 -r1.2
--- t/results/macro/macro_zero.pl       2 Oct 2010 10:03:41 -0000       1.1
+++ t/results/macro/macro_zero.pl       6 Oct 2010 21:22:48 -0000       1.2
@@ -42,17 +42,12 @@
         },
         {
           'parent' => {},
-          'text' => '0'
+          'text' => '0
+'
         }
       ],
       'parent' => {},
       'type' => 'paragraph'
-    },
-    {
-      'parent' => {},
-      'text' => '
-',
-      'type' => 'normal_line'
     }
   ]
 };
@@ -63,7 +58,6 @@
 $result_trees{'macro_zero'}{'contents'}[2]{'contents'}[0]{'parent'} = 
$result_trees{'macro_zero'}{'contents'}[2];
 $result_trees{'macro_zero'}{'contents'}[2]{'contents'}[1]{'parent'} = 
$result_trees{'macro_zero'}{'contents'}[2];
 $result_trees{'macro_zero'}{'contents'}[2]{'parent'} = 
$result_trees{'macro_zero'};
-$result_trees{'macro_zero'}{'contents'}[3]{'parent'} = 
$result_trees{'macro_zero'};
 
 $result_texts{'macro_zero'} = '@macro zero
 0

Index: t/results/macro/nested_macro_call.pl
===================================================================
RCS file: /sources/texinfo/texinfo/tp/t/results/macro/nested_macro_call.pl,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -b -r1.1 -r1.2
--- t/results/macro/nested_macro_call.pl        2 Oct 2010 17:22:53 -0000       
1.1
+++ t/results/macro/nested_macro_call.pl        6 Oct 2010 21:22:48 -0000       
1.2
@@ -75,21 +75,10 @@
       'contents' => [
         {
           'parent' => {},
-          'text' => 'Before (machin)'
-        }
-      ],
-      'parent' => {},
-      'type' => 'paragraph'
-    },
-    {
-      'parent' => {},
-      'text' => '
-',
-      'type' => 'normal_line'
+          'text' => 'Before (machin)
+'
     },
     {
-      'contents' => [
-        {
           'parent' => {},
           'text' => ' after truc.
 '
@@ -110,10 +99,8 @@
 $result_trees{'nested_macro_call'}{'contents'}[2]{'parent'} = 
$result_trees{'nested_macro_call'};
 $result_trees{'nested_macro_call'}{'contents'}[3]{'parent'} = 
$result_trees{'nested_macro_call'};
 $result_trees{'nested_macro_call'}{'contents'}[4]{'contents'}[0]{'parent'} = 
$result_trees{'nested_macro_call'}{'contents'}[4];
+$result_trees{'nested_macro_call'}{'contents'}[4]{'contents'}[1]{'parent'} = 
$result_trees{'nested_macro_call'}{'contents'}[4];
 $result_trees{'nested_macro_call'}{'contents'}[4]{'parent'} = 
$result_trees{'nested_macro_call'};
-$result_trees{'nested_macro_call'}{'contents'}[5]{'parent'} = 
$result_trees{'nested_macro_call'};
-$result_trees{'nested_macro_call'}{'contents'}[6]{'contents'}[0]{'parent'} = 
$result_trees{'nested_macro_call'}{'contents'}[6];
-$result_trees{'nested_macro_call'}{'contents'}[6]{'parent'} = 
$result_trees{'nested_macro_call'};
 
 $result_texts{'nested_macro_call'} = '@macro machin{}
 (machin)

Index: t/results/macro/no_macrobody.pl
===================================================================
RCS file: /sources/texinfo/texinfo/tp/t/results/macro/no_macrobody.pl,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -b -r1.1 -r1.2
--- t/results/macro/no_macrobody.pl     2 Oct 2010 14:28:02 -0000       1.1
+++ t/results/macro/no_macrobody.pl     6 Oct 2010 21:22:48 -0000       1.2
@@ -36,8 +36,7 @@
     {
       'parent' => {},
       'text' => '
-',
-      'type' => 'normal_line'
+'
     },
     {
       'parent' => {},

Index: t/results/macro/protect_in_body_one_arg.pl
===================================================================
RCS file: 
/sources/texinfo/texinfo/tp/t/results/macro/protect_in_body_one_arg.pl,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -b -r1.2 -r1.3
--- t/results/macro/protect_in_body_one_arg.pl  4 Oct 2010 07:02:41 -0000       
1.2
+++ t/results/macro/protect_in_body_one_arg.pl  6 Oct 2010 21:22:48 -0000       
1.3
@@ -101,16 +101,15 @@
           'contents' => [],
           'parent' => {},
           'remaining_args' => 0
-        }
-      ],
-      'parent' => {},
-      'type' => 'paragraph'
     },
     {
       'parent' => {},
       'text' => '
-',
-      'type' => 'normal_line'
+'
+        }
+      ],
+      'parent' => {},
+      'type' => 'paragraph'
     }
   ]
 };
@@ -129,8 +128,8 @@
 
$result_trees{'protect_in_body_one_arg'}{'contents'}[2]{'contents'}[2]{'parent'}
 = $result_trees{'protect_in_body_one_arg'}{'contents'}[2];
 
$result_trees{'protect_in_body_one_arg'}{'contents'}[2]{'contents'}[3]{'args'}[0]{'parent'}
 = $result_trees{'protect_in_body_one_arg'}{'contents'}[2]{'contents'}[3];
 
$result_trees{'protect_in_body_one_arg'}{'contents'}[2]{'contents'}[3]{'parent'}
 = $result_trees{'protect_in_body_one_arg'}{'contents'}[2];
+$result_trees{'protect_in_body_one_arg'}{'contents'}[2]{'contents'}[4]{'parent'}
 = $result_trees{'protect_in_body_one_arg'}{'contents'}[2];
 $result_trees{'protect_in_body_one_arg'}{'contents'}[2]{'parent'} = 
$result_trees{'protect_in_body_one_arg'};
-$result_trees{'protect_in_body_one_arg'}{'contents'}[3]{'parent'} = 
$result_trees{'protect_in_body_one_arg'};
 
 $result_texts{'protect_in_body_one_arg'} = '@macro macro1 { arg1 , arg2 }
 result: @emph{\\arg1\\} protected \\\\ -> \\\\arg1\\\\ @emph{\\arg2\\}

Index: t/results/macro/two_macros_on_a_line.pl
===================================================================
RCS file: /sources/texinfo/texinfo/tp/t/results/macro/two_macros_on_a_line.pl,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -b -r1.1 -r1.2
--- t/results/macro/two_macros_on_a_line.pl     2 Oct 2010 17:22:53 -0000       
1.1
+++ t/results/macro/two_macros_on_a_line.pl     6 Oct 2010 21:22:48 -0000       
1.2
@@ -137,7 +137,8 @@
         },
         {
           'parent' => {},
-          'text' => 'in mymacro in mymacro'
+          'text' => 'in mymacro in mymacro
+'
         }
       ],
       'parent' => {},
@@ -150,12 +151,6 @@
       'type' => 'normal_line'
     },
     {
-      'parent' => {},
-      'text' => '
-',
-      'type' => 'normal_line'
-    },
-    {
       'contents' => [
         {
           'cmdname' => '@',
@@ -188,7 +183,8 @@
         },
         {
           'parent' => {},
-          'text' => 'in mymacro in mymacro'
+          'text' => 'in mymacro in mymacro
+'
         }
       ],
       'parent' => {},
@@ -201,12 +197,6 @@
       'type' => 'normal_line'
     },
     {
-      'parent' => {},
-      'text' => '
-',
-      'type' => 'normal_line'
-    },
-    {
       'contents' => [
         {
           'cmdname' => '@',
@@ -239,7 +229,8 @@
         },
         {
           'parent' => {},
-          'text' => 'in mymacro in mymacro'
+          'text' => 'in mymacro in mymacro
+'
         }
       ],
       'parent' => {},
@@ -252,12 +243,6 @@
       'type' => 'normal_line'
     },
     {
-      'parent' => {},
-      'text' => '
-',
-      'type' => 'normal_line'
-    },
-    {
       'contents' => [
         {
           'parent' => {},
@@ -298,17 +283,12 @@
         },
         {
           'parent' => {},
-          'text' => 'after in mymacro'
+          'text' => 'after in mymacro
+'
         }
       ],
       'parent' => {},
       'type' => 'paragraph'
-    },
-    {
-      'parent' => {},
-      'text' => '
-',
-      'type' => 'normal_line'
     }
   ]
 };
@@ -337,39 +317,35 @@
 $result_trees{'two_macros_on_a_line'}{'contents'}[5]{'contents'}[10]{'parent'} 
= $result_trees{'two_macros_on_a_line'}{'contents'}[5];
 $result_trees{'two_macros_on_a_line'}{'contents'}[5]{'parent'} = 
$result_trees{'two_macros_on_a_line'};
 $result_trees{'two_macros_on_a_line'}{'contents'}[6]{'parent'} = 
$result_trees{'two_macros_on_a_line'};
+$result_trees{'two_macros_on_a_line'}{'contents'}[7]{'contents'}[0]{'parent'} 
= $result_trees{'two_macros_on_a_line'}{'contents'}[7];
+$result_trees{'two_macros_on_a_line'}{'contents'}[7]{'contents'}[1]{'parent'} 
= $result_trees{'two_macros_on_a_line'}{'contents'}[7];
+$result_trees{'two_macros_on_a_line'}{'contents'}[7]{'contents'}[2]{'parent'} 
= $result_trees{'two_macros_on_a_line'}{'contents'}[7];
+$result_trees{'two_macros_on_a_line'}{'contents'}[7]{'contents'}[3]{'parent'} 
= $result_trees{'two_macros_on_a_line'}{'contents'}[7];
+$result_trees{'two_macros_on_a_line'}{'contents'}[7]{'contents'}[4]{'parent'} 
= $result_trees{'two_macros_on_a_line'}{'contents'}[7];
+$result_trees{'two_macros_on_a_line'}{'contents'}[7]{'contents'}[5]{'parent'} 
= $result_trees{'two_macros_on_a_line'}{'contents'}[7];
+$result_trees{'two_macros_on_a_line'}{'contents'}[7]{'contents'}[6]{'parent'} 
= $result_trees{'two_macros_on_a_line'}{'contents'}[7];
+$result_trees{'two_macros_on_a_line'}{'contents'}[7]{'contents'}[7]{'parent'} 
= $result_trees{'two_macros_on_a_line'}{'contents'}[7];
 $result_trees{'two_macros_on_a_line'}{'contents'}[7]{'parent'} = 
$result_trees{'two_macros_on_a_line'};
-$result_trees{'two_macros_on_a_line'}{'contents'}[8]{'contents'}[0]{'parent'} 
= $result_trees{'two_macros_on_a_line'}{'contents'}[8];
-$result_trees{'two_macros_on_a_line'}{'contents'}[8]{'contents'}[1]{'parent'} 
= $result_trees{'two_macros_on_a_line'}{'contents'}[8];
-$result_trees{'two_macros_on_a_line'}{'contents'}[8]{'contents'}[2]{'parent'} 
= $result_trees{'two_macros_on_a_line'}{'contents'}[8];
-$result_trees{'two_macros_on_a_line'}{'contents'}[8]{'contents'}[3]{'parent'} 
= $result_trees{'two_macros_on_a_line'}{'contents'}[8];
-$result_trees{'two_macros_on_a_line'}{'contents'}[8]{'contents'}[4]{'parent'} 
= $result_trees{'two_macros_on_a_line'}{'contents'}[8];
-$result_trees{'two_macros_on_a_line'}{'contents'}[8]{'contents'}[5]{'parent'} 
= $result_trees{'two_macros_on_a_line'}{'contents'}[8];
-$result_trees{'two_macros_on_a_line'}{'contents'}[8]{'contents'}[6]{'parent'} 
= $result_trees{'two_macros_on_a_line'}{'contents'}[8];
-$result_trees{'two_macros_on_a_line'}{'contents'}[8]{'contents'}[7]{'parent'} 
= $result_trees{'two_macros_on_a_line'}{'contents'}[8];
 $result_trees{'two_macros_on_a_line'}{'contents'}[8]{'parent'} = 
$result_trees{'two_macros_on_a_line'};
+$result_trees{'two_macros_on_a_line'}{'contents'}[9]{'contents'}[0]{'parent'} 
= $result_trees{'two_macros_on_a_line'}{'contents'}[9];
+$result_trees{'two_macros_on_a_line'}{'contents'}[9]{'contents'}[1]{'parent'} 
= $result_trees{'two_macros_on_a_line'}{'contents'}[9];
+$result_trees{'two_macros_on_a_line'}{'contents'}[9]{'contents'}[2]{'parent'} 
= $result_trees{'two_macros_on_a_line'}{'contents'}[9];
+$result_trees{'two_macros_on_a_line'}{'contents'}[9]{'contents'}[3]{'parent'} 
= $result_trees{'two_macros_on_a_line'}{'contents'}[9];
+$result_trees{'two_macros_on_a_line'}{'contents'}[9]{'contents'}[4]{'parent'} 
= $result_trees{'two_macros_on_a_line'}{'contents'}[9];
+$result_trees{'two_macros_on_a_line'}{'contents'}[9]{'contents'}[5]{'parent'} 
= $result_trees{'two_macros_on_a_line'}{'contents'}[9];
+$result_trees{'two_macros_on_a_line'}{'contents'}[9]{'contents'}[6]{'parent'} 
= $result_trees{'two_macros_on_a_line'}{'contents'}[9];
+$result_trees{'two_macros_on_a_line'}{'contents'}[9]{'contents'}[7]{'parent'} 
= $result_trees{'two_macros_on_a_line'}{'contents'}[9];
 $result_trees{'two_macros_on_a_line'}{'contents'}[9]{'parent'} = 
$result_trees{'two_macros_on_a_line'};
 $result_trees{'two_macros_on_a_line'}{'contents'}[10]{'parent'} = 
$result_trees{'two_macros_on_a_line'};
 $result_trees{'two_macros_on_a_line'}{'contents'}[11]{'contents'}[0]{'parent'} 
= $result_trees{'two_macros_on_a_line'}{'contents'}[11];
 $result_trees{'two_macros_on_a_line'}{'contents'}[11]{'contents'}[1]{'parent'} 
= $result_trees{'two_macros_on_a_line'}{'contents'}[11];
 $result_trees{'two_macros_on_a_line'}{'contents'}[11]{'contents'}[2]{'parent'} 
= $result_trees{'two_macros_on_a_line'}{'contents'}[11];
 $result_trees{'two_macros_on_a_line'}{'contents'}[11]{'contents'}[3]{'parent'} 
= $result_trees{'two_macros_on_a_line'}{'contents'}[11];
-$result_trees{'two_macros_on_a_line'}{'contents'}[11]{'contents'}[4]{'parent'} 
= $result_trees{'two_macros_on_a_line'}{'contents'}[11];
-$result_trees{'two_macros_on_a_line'}{'contents'}[11]{'contents'}[5]{'parent'} 
= $result_trees{'two_macros_on_a_line'}{'contents'}[11];
-$result_trees{'two_macros_on_a_line'}{'contents'}[11]{'contents'}[6]{'parent'} 
= $result_trees{'two_macros_on_a_line'}{'contents'}[11];
-$result_trees{'two_macros_on_a_line'}{'contents'}[11]{'contents'}[7]{'parent'} 
= $result_trees{'two_macros_on_a_line'}{'contents'}[11];
 $result_trees{'two_macros_on_a_line'}{'contents'}[11]{'parent'} = 
$result_trees{'two_macros_on_a_line'};
 $result_trees{'two_macros_on_a_line'}{'contents'}[12]{'parent'} = 
$result_trees{'two_macros_on_a_line'};
+$result_trees{'two_macros_on_a_line'}{'contents'}[13]{'contents'}[0]{'parent'} 
= $result_trees{'two_macros_on_a_line'}{'contents'}[13];
+$result_trees{'two_macros_on_a_line'}{'contents'}[13]{'contents'}[1]{'parent'} 
= $result_trees{'two_macros_on_a_line'}{'contents'}[13];
 $result_trees{'two_macros_on_a_line'}{'contents'}[13]{'parent'} = 
$result_trees{'two_macros_on_a_line'};
-$result_trees{'two_macros_on_a_line'}{'contents'}[14]{'contents'}[0]{'parent'} 
= $result_trees{'two_macros_on_a_line'}{'contents'}[14];
-$result_trees{'two_macros_on_a_line'}{'contents'}[14]{'contents'}[1]{'parent'} 
= $result_trees{'two_macros_on_a_line'}{'contents'}[14];
-$result_trees{'two_macros_on_a_line'}{'contents'}[14]{'contents'}[2]{'parent'} 
= $result_trees{'two_macros_on_a_line'}{'contents'}[14];
-$result_trees{'two_macros_on_a_line'}{'contents'}[14]{'contents'}[3]{'parent'} 
= $result_trees{'two_macros_on_a_line'}{'contents'}[14];
-$result_trees{'two_macros_on_a_line'}{'contents'}[14]{'parent'} = 
$result_trees{'two_macros_on_a_line'};
-$result_trees{'two_macros_on_a_line'}{'contents'}[15]{'parent'} = 
$result_trees{'two_macros_on_a_line'};
-$result_trees{'two_macros_on_a_line'}{'contents'}[16]{'contents'}[0]{'parent'} 
= $result_trees{'two_macros_on_a_line'}{'contents'}[16];
-$result_trees{'two_macros_on_a_line'}{'contents'}[16]{'contents'}[1]{'parent'} 
= $result_trees{'two_macros_on_a_line'}{'contents'}[16];
-$result_trees{'two_macros_on_a_line'}{'contents'}[16]{'parent'} = 
$result_trees{'two_macros_on_a_line'};
-$result_trees{'two_macros_on_a_line'}{'contents'}[17]{'parent'} = 
$result_trees{'two_macros_on_a_line'};
 
 $result_texts{'two_macros_on_a_line'} = '@macro mymacro
 in mymacro

Index: t/results/value_and_macro/comma_value_in_macro_arg.pl
===================================================================
RCS file: 
/sources/texinfo/texinfo/tp/t/results/value_and_macro/comma_value_in_macro_arg.pl,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -b -r1.2 -r1.3
--- t/results/value_and_macro/comma_value_in_macro_arg.pl       4 Oct 2010 
07:02:41 -0000       1.2
+++ t/results/value_and_macro/comma_value_in_macro_arg.pl       6 Oct 2010 
21:22:48 -0000       1.3
@@ -109,16 +109,15 @@
           'contents' => [],
           'parent' => {},
           'remaining_args' => 0
-        }
-      ],
-      'parent' => {},
-      'type' => 'paragraph'
     },
     {
       'parent' => {},
       'text' => '
-',
-      'type' => 'normal_line'
+'
+        }
+      ],
+      'parent' => {},
+      'type' => 'paragraph'
     }
   ]
 };
@@ -139,8 +138,8 @@
 
$result_trees{'comma_value_in_macro_arg'}{'contents'}[4]{'contents'}[2]{'parent'}
 = $result_trees{'comma_value_in_macro_arg'}{'contents'}[4];
 
$result_trees{'comma_value_in_macro_arg'}{'contents'}[4]{'contents'}[3]{'args'}[0]{'parent'}
 = $result_trees{'comma_value_in_macro_arg'}{'contents'}[4]{'contents'}[3];
 
$result_trees{'comma_value_in_macro_arg'}{'contents'}[4]{'contents'}[3]{'parent'}
 = $result_trees{'comma_value_in_macro_arg'}{'contents'}[4];
+$result_trees{'comma_value_in_macro_arg'}{'contents'}[4]{'contents'}[4]{'parent'}
 = $result_trees{'comma_value_in_macro_arg'}{'contents'}[4];
 $result_trees{'comma_value_in_macro_arg'}{'contents'}[4]{'parent'} = 
$result_trees{'comma_value_in_macro_arg'};
-$result_trees{'comma_value_in_macro_arg'}{'contents'}[5]{'parent'} = 
$result_trees{'comma_value_in_macro_arg'};
 
 $result_texts{'comma_value_in_macro_arg'} = '@set comma ,
 

Index: t/results/value_and_macro/value_in_macro_body.pl
===================================================================
RCS file: 
/sources/texinfo/texinfo/tp/t/results/value_and_macro/value_in_macro_body.pl,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -b -r1.2 -r1.3
--- t/results/value_and_macro/value_in_macro_body.pl    4 Oct 2010 07:02:41 
-0000       1.2
+++ t/results/value_and_macro/value_in_macro_body.pl    6 Oct 2010 21:22:48 
-0000       1.3
@@ -86,16 +86,15 @@
           'contents' => [],
           'parent' => {},
           'remaining_args' => 0
-        }
-      ],
-      'parent' => {},
-      'type' => 'paragraph'
     },
     {
       'parent' => {},
       'text' => '
-',
-      'type' => 'normal_line'
+'
+        }
+      ],
+      'parent' => {},
+      'type' => 'paragraph'
     }
   ]
 };
@@ -112,8 +111,8 @@
 
$result_trees{'value_in_macro_body'}{'contents'}[4]{'contents'}[1]{'args'}[0]{'contents'}[0]{'parent'}
 = 
$result_trees{'value_in_macro_body'}{'contents'}[4]{'contents'}[1]{'args'}[0];
 
$result_trees{'value_in_macro_body'}{'contents'}[4]{'contents'}[1]{'args'}[0]{'parent'}
 = $result_trees{'value_in_macro_body'}{'contents'}[4]{'contents'}[1];
 $result_trees{'value_in_macro_body'}{'contents'}[4]{'contents'}[1]{'parent'} = 
$result_trees{'value_in_macro_body'}{'contents'}[4];
+$result_trees{'value_in_macro_body'}{'contents'}[4]{'contents'}[2]{'parent'} = 
$result_trees{'value_in_macro_body'}{'contents'}[4];
 $result_trees{'value_in_macro_body'}{'contents'}[4]{'parent'} = 
$result_trees{'value_in_macro_body'};
-$result_trees{'value_in_macro_body'}{'contents'}[5]{'parent'} = 
$result_trees{'value_in_macro_body'};
 
 $result_texts{'value_in_macro_body'} = '@set bodyarg \\arg\\
 

Index: t/results/value_and_macro/value_in_macro_formal_arg.pl
===================================================================
RCS file: 
/sources/texinfo/texinfo/tp/t/results/value_and_macro/value_in_macro_formal_arg.pl,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -b -r1.2 -r1.3
--- t/results/value_and_macro/value_in_macro_formal_arg.pl      4 Oct 2010 
07:02:41 -0000       1.2
+++ t/results/value_and_macro/value_in_macro_formal_arg.pl      6 Oct 2010 
21:22:48 -0000       1.3
@@ -95,17 +95,12 @@
         },
         {
           'parent' => {},
-          'text' => ' the \\the thearg \\thearg with value \\thearg'
+          'text' => ' the \\the thearg \\thearg with value \\thearg
+'
         }
       ],
       'parent' => {},
       'type' => 'paragraph'
-    },
-    {
-      'parent' => {},
-      'text' => '
-',
-      'type' => 'normal_line'
     }
   ]
 };
@@ -125,7 +120,6 @@
 
$result_trees{'value_in_macro_formal_arg'}{'contents'}[4]{'contents'}[1]{'parent'}
 = $result_trees{'value_in_macro_formal_arg'}{'contents'}[4];
 
$result_trees{'value_in_macro_formal_arg'}{'contents'}[4]{'contents'}[2]{'parent'}
 = $result_trees{'value_in_macro_formal_arg'}{'contents'}[4];
 $result_trees{'value_in_macro_formal_arg'}{'contents'}[4]{'parent'} = 
$result_trees{'value_in_macro_formal_arg'};
-$result_trees{'value_in_macro_formal_arg'}{'contents'}[5]{'parent'} = 
$result_trees{'value_in_macro_formal_arg'};
 
 $result_texts{'value_in_macro_formal_arg'} = '@set argument arg
 

Index: t/results/macro/macro_in_line_commands.pl
===================================================================
RCS file: t/results/macro/macro_in_line_commands.pl
diff -N t/results/macro/macro_in_line_commands.pl
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ t/results/macro/macro_in_line_commands.pl   6 Oct 2010 21:22:48 -0000       
1.1
@@ -0,0 +1,1432 @@
+use vars qw(%result_texts %result_trees %result_errors);
+
+$result_trees{'macro_in_line_commands'} = {
+  'contents' => [
+    {
+      'args' => [
+        {
+          'parent' => {},
+          'text' => 'cp',
+          'type' => 'macro_name'
+        }
+      ],
+      'cmdname' => 'macro',
+      'contents' => [
+        {
+          'parent' => {},
+          'text' => 'cp
+',
+          'type' => 'raw'
+        }
+      ],
+      'parent' => {},
+      'special' => {
+        'macro_line' => ' cp
+',
+        'macrobody' => 'cp
+'
+      }
+    },
+    {
+      'args' => [
+        {
+          'parent' => {},
+          'text' => 'fn',
+          'type' => 'macro_name'
+        }
+      ],
+      'cmdname' => 'macro',
+      'contents' => [
+        {
+          'parent' => {},
+          'text' => 'fn
+',
+          'type' => 'raw'
+        }
+      ],
+      'parent' => {},
+      'special' => {
+        'macro_line' => ' fn 
+',
+        'macrobody' => 'fn
+'
+      }
+    },
+    {
+      'args' => [
+        {
+          'parent' => {},
+          'text' => 'syncodeindex_command',
+          'type' => 'macro_name'
+        }
+      ],
+      'cmdname' => 'macro',
+      'contents' => [
+        {
+          'parent' => {},
+          'text' => '@syncodeindex
+',
+          'type' => 'raw'
+        }
+      ],
+      'parent' => {},
+      'special' => {
+        'macro_line' => ' syncodeindex_command 
+',
+        'macrobody' => '@syncodeindex
+'
+      }
+    },
+    {
+      'parent' => {},
+      'text' => '
+',
+      'type' => 'normal_line'
+    },
+    {
+      'args' => [
+        {
+          'contents' => [
+            {
+              'parent' => {},
+              'text' => 'cp fn
+'
+            }
+          ],
+          'parent' => {},
+          'type' => 'misc_line_arg'
+        }
+      ],
+      'cmdname' => 'syncodeindex',
+      'parent' => {},
+      'special' => {
+        'misc_args' => [
+          'cp',
+          'fn'
+        ]
+      }
+    },
+    {
+      'args' => [
+        {
+          'contents' => [
+            {
+              'parent' => {},
+              'text' => ' cp fn
+'
+            }
+          ],
+          'parent' => {},
+          'type' => 'misc_line_arg'
+        }
+      ],
+      'cmdname' => 'syncodeindex',
+      'parent' => {},
+      'special' => {
+        'misc_args' => [
+          'cp',
+          'fn'
+        ]
+      }
+    },
+    {
+      'parent' => {},
+      'text' => '
+',
+      'type' => 'normal_line'
+    },
+    {
+      'args' => [
+        {
+          'parent' => {},
+          'text' => 'en',
+          'type' => 'macro_name'
+        }
+      ],
+      'cmdname' => 'macro',
+      'contents' => [
+        {
+          'parent' => {},
+          'text' => 'en
+',
+          'type' => 'raw'
+        }
+      ],
+      'parent' => {},
+      'special' => {
+        'macro_line' => ' en 
+',
+        'macrobody' => 'en
+'
+      }
+    },
+    {
+      'args' => [
+        {
+          'parent' => {},
+          'text' => 'documentlanguage_command',
+          'type' => 'macro_name'
+        }
+      ],
+      'cmdname' => 'macro',
+      'contents' => [
+        {
+          'parent' => {},
+          'text' => '@documentlanguage
+',
+          'type' => 'raw'
+        }
+      ],
+      'parent' => {},
+      'special' => {
+        'macro_line' => ' documentlanguage_command 
+',
+        'macrobody' => '@documentlanguage
+'
+      }
+    },
+    {
+      'parent' => {},
+      'text' => '
+',
+      'type' => 'normal_line'
+    },
+    {
+      'contents' => [
+        {
+          'parent' => {},
+          'text' => 'documentlanguage '
+        },
+        {
+          'args' => [
+            {
+              'contents' => [
+                {
+                  'parent' => {},
+                  'text' => 'en
+'
+                }
+              ],
+              'parent' => {},
+              'type' => 'misc_line_arg'
+            }
+          ],
+          'cmdname' => 'documentlanguage',
+          'parent' => {}
+        }
+      ],
+      'parent' => {},
+      'type' => 'paragraph'
+    },
+    {
+      'parent' => {},
+      'text' => '
+',
+      'type' => 'normal_line'
+    },
+    {
+      'contents' => [
+        {
+          'parent' => {},
+          'text' => 'documentlanguage on its line
+'
+        },
+        {
+          'args' => [
+            {
+              'contents' => [
+                {
+                  'parent' => {},
+                  'text' => '  en
+'
+                }
+              ],
+              'parent' => {},
+              'type' => 'misc_line_arg'
+            }
+          ],
+          'cmdname' => 'documentlanguage',
+          'parent' => {}
+        },
+        {
+          'parent' => {},
+          'text' => 'line following documentlanguage
+'
+        }
+      ],
+      'parent' => {},
+      'type' => 'paragraph'
+    },
+    {
+      'parent' => {},
+      'text' => '
+',
+      'type' => 'normal_line'
+    },
+    {
+      'args' => [
+        {
+          'parent' => {},
+          'text' => 'truc',
+          'type' => 'macro_name'
+        }
+      ],
+      'cmdname' => 'macro',
+      'contents' => [
+        {
+          'parent' => {},
+          'text' => 'truc
+',
+          'type' => 'raw'
+        }
+      ],
+      'parent' => {},
+      'special' => {
+        'macro_line' => ' truc 
+',
+        'macrobody' => 'truc
+'
+      }
+    },
+    {
+      'parent' => {},
+      'text' => '
+',
+      'type' => 'normal_line'
+    },
+    {
+      'contents' => [
+        {
+          'parent' => {},
+          'text' => 'definedx truc
+'
+        },
+        {
+          'args' => [
+            {
+              'contents' => [
+                {
+                  'parent' => {},
+                  'text' => 'truc
+'
+                }
+              ],
+              'parent' => {},
+              'type' => 'misc_line_arg'
+            }
+          ],
+          'cmdname' => 'defindex',
+          'parent' => {},
+          'special' => {
+            'misc_args' => [
+              'truc'
+            ]
+          }
+        },
+        {
+          'parent' => {},
+          'text' => 'after
+'
+        }
+      ],
+      'parent' => {},
+      'type' => 'paragraph'
+    },
+    {
+      'parent' => {},
+      'text' => '
+',
+      'type' => 'normal_line'
+    },
+    {
+      'args' => [
+        {
+          'parent' => {},
+          'text' => 'trucindex_command',
+          'type' => 'macro_name'
+        }
+      ],
+      'cmdname' => 'macro',
+      'contents' => [
+        {
+          'parent' => {},
+          'text' => '@trucindex
+',
+          'type' => 'raw'
+        }
+      ],
+      'parent' => {},
+      'special' => {
+        'macro_line' => ' trucindex_command 
+',
+        'macrobody' => '@trucindex
+'
+      }
+    },
+    {
+      'parent' => {},
+      'text' => '
+',
+      'type' => 'normal_line'
+    },
+    {
+      'args' => [
+        {
+          'contents' => [
+            {
+              'parent' => {},
+              'text' => ' index truc
+'
+            }
+          ],
+          'parent' => {},
+          'type' => 'misc_line_arg'
+        }
+      ],
+      'cmdname' => 'trucindex',
+      'parent' => {}
+    },
+    {
+      'parent' => {},
+      'text' => '
+',
+      'type' => 'normal_line'
+    },
+    {
+      'args' => [
+        {
+          'parent' => {},
+          'text' => 'codeidx',
+          'type' => 'macro_name'
+        }
+      ],
+      'cmdname' => 'macro',
+      'contents' => [
+        {
+          'parent' => {},
+          'text' => 'codeidx
+',
+          'type' => 'raw'
+        }
+      ],
+      'parent' => {},
+      'special' => {
+        'macro_line' => ' codeidx 
+',
+        'macrobody' => 'codeidx
+'
+      }
+    },
+    {
+      'parent' => {},
+      'text' => '
+',
+      'type' => 'normal_line'
+    },
+    {
+      'args' => [
+        {
+          'contents' => [
+            {
+              'parent' => {},
+              'text' => 'codeidx
+'
+            }
+          ],
+          'parent' => {},
+          'type' => 'misc_line_arg'
+        }
+      ],
+      'cmdname' => 'defcodeindex',
+      'parent' => {},
+      'special' => {
+        'misc_args' => [
+          'codeidx'
+        ]
+      }
+    },
+    {
+      'parent' => {},
+      'text' => '
+',
+      'type' => 'normal_line'
+    },
+    {
+      'args' => [
+        {
+          'parent' => {},
+          'text' => 'defcodeindex_entry',
+          'type' => 'macro_name'
+        }
+      ],
+      'cmdname' => 'macro',
+      'contents' => [
+        {
+          'parent' => {},
+          'text' => 'a @var{index entry} address@hidden'e @address@hidden
+',
+          'type' => 'raw'
+        }
+      ],
+      'parent' => {},
+      'special' => {
+        'macro_line' => ' defcodeindex_entry 
+',
+        'macrobody' => 'a @var{index entry} address@hidden'e @address@hidden
+'
+      }
+    },
+    {
+      'parent' => {},
+      'text' => '
+',
+      'type' => 'normal_line'
+    },
+    {
+      'args' => [
+        {
+          'contents' => [
+            {
+              'parent' => {},
+              'text' => 'a '
+            },
+            {
+              'args' => [
+                {
+                  'contents' => [
+                    {
+                      'parent' => {},
+                      'text' => 'index entry'
+                    }
+                  ],
+                  'parent' => {},
+                  'type' => 'brace_command_arg'
+                }
+              ],
+              'cmdname' => 'var',
+              'contents' => [],
+              'parent' => {},
+              'remaining_args' => 0
+            },
+            {
+              'parent' => {},
+              'text' => ' t'
+            },
+            {
+              'args' => [
+                {
+                  'parent' => {},
+                  'text' => 'e'
+                }
+              ],
+              'cmdname' => '\'',
+              'parent' => {}
+            },
+            {
+              'parent' => {},
+              'text' => ' '
+            },
+            {
+              'args' => [
+                {
+                  'contents' => [
+                    {
+                      'args' => [
+                        {
+                          'contents' => [
+                            {
+                              'parent' => {},
+                              'text' => 'i'
+                            }
+                          ],
+                          'parent' => {},
+                          'type' => 'brace_command_arg'
+                        }
+                      ],
+                      'cmdname' => 'dotless',
+                      'contents' => [],
+                      'parent' => {},
+                      'remaining_args' => 0
+                    }
+                  ],
+                  'parent' => {},
+                  'type' => 'brace_command_arg'
+                }
+              ],
+              'cmdname' => '^',
+              'contents' => [],
+              'parent' => {},
+              'remaining_args' => 0
+            },
+            {
+              'parent' => {},
+              'text' => '
+'
+            }
+          ],
+          'parent' => {},
+          'type' => 'misc_line_arg'
+        }
+      ],
+      'cmdname' => 'codeidxindex',
+      'parent' => {}
+    },
+    {
+      'parent' => {},
+      'text' => '
+',
+      'type' => 'normal_line'
+    },
+    {
+      'args' => [
+        {
+          'contents' => [
+            {
+              'parent' => {},
+              'text' => 'cindex entry
+'
+            }
+          ],
+          'parent' => {},
+          'type' => 'misc_line_arg'
+        }
+      ],
+      'cmdname' => 'cindex',
+      'parent' => {}
+    },
+    {
+      'parent' => {},
+      'text' => '
+',
+      'type' => 'normal_line'
+    },
+    {
+      'args' => [
+        {
+          'contents' => [
+            {
+              'parent' => {},
+              'text' => 'ky pg
+'
+            }
+          ],
+          'parent' => {},
+          'type' => 'misc_line_arg'
+        }
+      ],
+      'cmdname' => 'syncodeindex',
+      'parent' => {},
+      'special' => {
+        'misc_args' => [
+          'ky',
+          'pg'
+        ]
+      }
+    },
+    {
+      'parent' => {},
+      'text' => '
+',
+      'type' => 'normal_line'
+    },
+    {
+      'args' => [
+        {
+          'contents' => [
+            {
+              'parent' => {},
+              'text' => 'truc kindex
+'
+            }
+          ],
+          'parent' => {},
+          'type' => 'misc_line_arg'
+        }
+      ],
+      'cmdname' => 'kindex',
+      'parent' => {}
+    },
+    {
+      'args' => [
+        {
+          'contents' => [
+            {
+              'parent' => {},
+              'text' => 'pindex codeidx
+'
+            }
+          ],
+          'parent' => {},
+          'type' => 'misc_line_arg'
+        }
+      ],
+      'cmdname' => 'pindex',
+      'parent' => {}
+    },
+    {
+      'parent' => {},
+      'text' => '
+',
+      'type' => 'normal_line'
+    },
+    {
+      'args' => [
+        {
+          'contents' => [
+            {
+              'parent' => {},
+              'text' => 'truc cp
+'
+            }
+          ],
+          'parent' => {},
+          'type' => 'misc_line_arg'
+        }
+      ],
+      'cmdname' => 'synindex',
+      'parent' => {},
+      'special' => {
+        'misc_args' => [
+          'truc',
+          'cp'
+        ]
+      }
+    },
+    {
+      'parent' => {},
+      'text' => '
+',
+      'type' => 'normal_line'
+    },
+    {
+      'args' => [
+        {
+          'contents' => [
+            {
+              'parent' => {},
+              'text' => 'abc
+'
+            }
+          ],
+          'parent' => {},
+          'type' => 'misc_line_arg'
+        }
+      ],
+      'cmdname' => 'defindex',
+      'parent' => {},
+      'special' => {
+        'misc_args' => [
+          'abc'
+        ]
+      }
+    },
+    {
+      'args' => [
+        {
+          'contents' => [
+            {
+              'parent' => {},
+              'text' => 'defg
+'
+            }
+          ],
+          'parent' => {},
+          'type' => 'misc_line_arg'
+        }
+      ],
+      'cmdname' => 'defindex',
+      'parent' => {},
+      'special' => {
+        'misc_args' => [
+          'defg'
+        ]
+      }
+    },
+    {
+      'parent' => {},
+      'text' => '
+',
+      'type' => 'normal_line'
+    },
+    {
+      'args' => [
+        {
+          'contents' => [
+            {
+              'parent' => {},
+              'text' => 'abc defg
+'
+            }
+          ],
+          'parent' => {},
+          'type' => 'misc_line_arg'
+        }
+      ],
+      'cmdname' => 'synindex',
+      'parent' => {},
+      'special' => {
+        'misc_args' => [
+          'abc',
+          'defg'
+        ]
+      }
+    },
+    {
+      'args' => [
+        {
+          'contents' => [
+            {
+              'parent' => {},
+              'text' => 'defg ky
+'
+            }
+          ],
+          'parent' => {},
+          'type' => 'misc_line_arg'
+        }
+      ],
+      'cmdname' => 'synindex',
+      'parent' => {},
+      'special' => {
+        'misc_args' => [
+          'defg',
+          'ky'
+        ]
+      }
+    },
+    {
+      'parent' => {},
+      'text' => '
+',
+      'type' => 'normal_line'
+    },
+    {
+      'args' => [
+        {
+          'contents' => [
+            {
+              'parent' => {},
+              'text' => 'defg index entry
+'
+            }
+          ],
+          'parent' => {},
+          'type' => 'misc_line_arg'
+        }
+      ],
+      'cmdname' => 'defgindex',
+      'parent' => {}
+    },
+    {
+      'parent' => {},
+      'text' => '
+',
+      'type' => 'normal_line'
+    },
+    {
+      'args' => [
+        {
+          'contents' => [
+            {
+              'parent' => {},
+              'text' => 'abc index entry
+'
+            }
+          ],
+          'parent' => {},
+          'type' => 'misc_line_arg'
+        }
+      ],
+      'cmdname' => 'abcindex',
+      'parent' => {}
+    },
+    {
+      'parent' => {},
+      'text' => '
+',
+      'type' => 'normal_line'
+    },
+    {
+      'contents' => [
+        {
+          'parent' => {},
+          'text' => 'pg
+'
+        }
+      ],
+      'parent' => {},
+      'type' => 'paragraph'
+    },
+    {
+      'args' => [
+        {
+          'contents' => [
+            {
+              'parent' => {},
+              'text' => 'pg
+'
+            }
+          ],
+          'parent' => {},
+          'type' => 'misc_line_arg'
+        }
+      ],
+      'cmdname' => 'printindex',
+      'parent' => {}
+    },
+    {
+      'parent' => {},
+      'text' => '
+',
+      'type' => 'normal_line'
+    },
+    {
+      'contents' => [
+        {
+          'parent' => {},
+          'text' => 'ky
+'
+        }
+      ],
+      'parent' => {},
+      'type' => 'paragraph'
+    },
+    {
+      'args' => [
+        {
+          'contents' => [
+            {
+              'parent' => {},
+              'text' => 'ky
+'
+            }
+          ],
+          'parent' => {},
+          'type' => 'misc_line_arg'
+        }
+      ],
+      'cmdname' => 'printindex',
+      'parent' => {}
+    },
+    {
+      'parent' => {},
+      'text' => '
+',
+      'type' => 'normal_line'
+    },
+    {
+      'contents' => [
+        {
+          'parent' => {},
+          'text' => 'truc
+'
+        }
+      ],
+      'parent' => {},
+      'type' => 'paragraph'
+    },
+    {
+      'args' => [
+        {
+          'contents' => [
+            {
+              'parent' => {},
+              'text' => 'truc
+'
+            }
+          ],
+          'parent' => {},
+          'type' => 'misc_line_arg'
+        }
+      ],
+      'cmdname' => 'printindex',
+      'parent' => {}
+    },
+    {
+      'parent' => {},
+      'text' => '
+',
+      'type' => 'normal_line'
+    },
+    {
+      'contents' => [
+        {
+          'parent' => {},
+          'text' => 'value truc
+'
+        }
+      ],
+      'parent' => {},
+      'type' => 'paragraph'
+    },
+    {
+      'args' => [
+        {
+          'contents' => [
+            {
+              'parent' => {},
+              'text' => 'truc
+'
+            }
+          ],
+          'parent' => {},
+          'type' => 'misc_line_arg'
+        }
+      ],
+      'cmdname' => 'printindex',
+      'parent' => {}
+    },
+    {
+      'parent' => {},
+      'text' => '
+',
+      'type' => 'normal_line'
+    },
+    {
+      'contents' => [
+        {
+          'parent' => {},
+          'text' => 'cp
+'
+        }
+      ],
+      'parent' => {},
+      'type' => 'paragraph'
+    },
+    {
+      'args' => [
+        {
+          'contents' => [
+            {
+              'parent' => {},
+              'text' => 'cp
+'
+            }
+          ],
+          'parent' => {},
+          'type' => 'misc_line_arg'
+        }
+      ],
+      'cmdname' => 'printindex',
+      'parent' => {}
+    },
+    {
+      'parent' => {},
+      'text' => '
+',
+      'type' => 'normal_line'
+    },
+    {
+      'contents' => [
+        {
+          'parent' => {},
+          'text' => 'value cp
+'
+        }
+      ],
+      'parent' => {},
+      'type' => 'paragraph'
+    },
+    {
+      'args' => [
+        {
+          'contents' => [
+            {
+              'parent' => {},
+              'text' => 'cp
+'
+            }
+          ],
+          'parent' => {},
+          'type' => 'misc_line_arg'
+        }
+      ],
+      'cmdname' => 'printindex',
+      'parent' => {}
+    },
+    {
+      'parent' => {},
+      'text' => '
+',
+      'type' => 'normal_line'
+    },
+    {
+      'contents' => [
+        {
+          'parent' => {},
+          'text' => 'defg
+'
+        }
+      ],
+      'parent' => {},
+      'type' => 'paragraph'
+    },
+    {
+      'args' => [
+        {
+          'contents' => [
+            {
+              'parent' => {},
+              'text' => 'defg
+'
+            }
+          ],
+          'parent' => {},
+          'type' => 'misc_line_arg'
+        }
+      ],
+      'cmdname' => 'printindex',
+      'parent' => {}
+    },
+    {
+      'parent' => {},
+      'text' => '
+',
+      'type' => 'normal_line'
+    },
+    {
+      'contents' => [
+        {
+          'parent' => {},
+          'text' => 'abc
+'
+        }
+      ],
+      'parent' => {},
+      'type' => 'paragraph'
+    },
+    {
+      'args' => [
+        {
+          'contents' => [
+            {
+              'parent' => {},
+              'text' => 'abc
+'
+            }
+          ],
+          'parent' => {},
+          'type' => 'misc_line_arg'
+        }
+      ],
+      'cmdname' => 'printindex',
+      'parent' => {}
+    },
+    {
+      'parent' => {},
+      'text' => '
+',
+      'type' => 'normal_line'
+    },
+    {
+      'contents' => [
+        {
+          'parent' => {},
+          'text' => 'fn
+'
+        }
+      ],
+      'parent' => {},
+      'type' => 'paragraph'
+    },
+    {
+      'args' => [
+        {
+          'contents' => [
+            {
+              'parent' => {},
+              'text' => 'fn
+'
+            }
+          ],
+          'parent' => {},
+          'type' => 'misc_line_arg'
+        }
+      ],
+      'cmdname' => 'printindex',
+      'parent' => {}
+    }
+  ]
+};
+$result_trees{'macro_in_line_commands'}{'contents'}[0]{'args'}[0]{'parent'} = 
$result_trees{'macro_in_line_commands'}{'contents'}[0];
+$result_trees{'macro_in_line_commands'}{'contents'}[0]{'contents'}[0]{'parent'}
 = $result_trees{'macro_in_line_commands'}{'contents'}[0];
+$result_trees{'macro_in_line_commands'}{'contents'}[0]{'parent'} = 
$result_trees{'macro_in_line_commands'};
+$result_trees{'macro_in_line_commands'}{'contents'}[1]{'args'}[0]{'parent'} = 
$result_trees{'macro_in_line_commands'}{'contents'}[1];
+$result_trees{'macro_in_line_commands'}{'contents'}[1]{'contents'}[0]{'parent'}
 = $result_trees{'macro_in_line_commands'}{'contents'}[1];
+$result_trees{'macro_in_line_commands'}{'contents'}[1]{'parent'} = 
$result_trees{'macro_in_line_commands'};
+$result_trees{'macro_in_line_commands'}{'contents'}[2]{'args'}[0]{'parent'} = 
$result_trees{'macro_in_line_commands'}{'contents'}[2];
+$result_trees{'macro_in_line_commands'}{'contents'}[2]{'contents'}[0]{'parent'}
 = $result_trees{'macro_in_line_commands'}{'contents'}[2];
+$result_trees{'macro_in_line_commands'}{'contents'}[2]{'parent'} = 
$result_trees{'macro_in_line_commands'};
+$result_trees{'macro_in_line_commands'}{'contents'}[3]{'parent'} = 
$result_trees{'macro_in_line_commands'};
+$result_trees{'macro_in_line_commands'}{'contents'}[4]{'args'}[0]{'contents'}[0]{'parent'}
 = $result_trees{'macro_in_line_commands'}{'contents'}[4]{'args'}[0];
+$result_trees{'macro_in_line_commands'}{'contents'}[4]{'args'}[0]{'parent'} = 
$result_trees{'macro_in_line_commands'}{'contents'}[4];
+$result_trees{'macro_in_line_commands'}{'contents'}[4]{'parent'} = 
$result_trees{'macro_in_line_commands'};
+$result_trees{'macro_in_line_commands'}{'contents'}[5]{'args'}[0]{'contents'}[0]{'parent'}
 = $result_trees{'macro_in_line_commands'}{'contents'}[5]{'args'}[0];
+$result_trees{'macro_in_line_commands'}{'contents'}[5]{'args'}[0]{'parent'} = 
$result_trees{'macro_in_line_commands'}{'contents'}[5];
+$result_trees{'macro_in_line_commands'}{'contents'}[5]{'parent'} = 
$result_trees{'macro_in_line_commands'};
+$result_trees{'macro_in_line_commands'}{'contents'}[6]{'parent'} = 
$result_trees{'macro_in_line_commands'};
+$result_trees{'macro_in_line_commands'}{'contents'}[7]{'args'}[0]{'parent'} = 
$result_trees{'macro_in_line_commands'}{'contents'}[7];
+$result_trees{'macro_in_line_commands'}{'contents'}[7]{'contents'}[0]{'parent'}
 = $result_trees{'macro_in_line_commands'}{'contents'}[7];
+$result_trees{'macro_in_line_commands'}{'contents'}[7]{'parent'} = 
$result_trees{'macro_in_line_commands'};
+$result_trees{'macro_in_line_commands'}{'contents'}[8]{'args'}[0]{'parent'} = 
$result_trees{'macro_in_line_commands'}{'contents'}[8];
+$result_trees{'macro_in_line_commands'}{'contents'}[8]{'contents'}[0]{'parent'}
 = $result_trees{'macro_in_line_commands'}{'contents'}[8];
+$result_trees{'macro_in_line_commands'}{'contents'}[8]{'parent'} = 
$result_trees{'macro_in_line_commands'};
+$result_trees{'macro_in_line_commands'}{'contents'}[9]{'parent'} = 
$result_trees{'macro_in_line_commands'};
+$result_trees{'macro_in_line_commands'}{'contents'}[10]{'contents'}[0]{'parent'}
 = $result_trees{'macro_in_line_commands'}{'contents'}[10];
+$result_trees{'macro_in_line_commands'}{'contents'}[10]{'contents'}[1]{'args'}[0]{'contents'}[0]{'parent'}
 = 
$result_trees{'macro_in_line_commands'}{'contents'}[10]{'contents'}[1]{'args'}[0];
+$result_trees{'macro_in_line_commands'}{'contents'}[10]{'contents'}[1]{'args'}[0]{'parent'}
 = $result_trees{'macro_in_line_commands'}{'contents'}[10]{'contents'}[1];
+$result_trees{'macro_in_line_commands'}{'contents'}[10]{'contents'}[1]{'parent'}
 = $result_trees{'macro_in_line_commands'}{'contents'}[10];
+$result_trees{'macro_in_line_commands'}{'contents'}[10]{'parent'} = 
$result_trees{'macro_in_line_commands'};
+$result_trees{'macro_in_line_commands'}{'contents'}[11]{'parent'} = 
$result_trees{'macro_in_line_commands'};
+$result_trees{'macro_in_line_commands'}{'contents'}[12]{'contents'}[0]{'parent'}
 = $result_trees{'macro_in_line_commands'}{'contents'}[12];
+$result_trees{'macro_in_line_commands'}{'contents'}[12]{'contents'}[1]{'args'}[0]{'contents'}[0]{'parent'}
 = 
$result_trees{'macro_in_line_commands'}{'contents'}[12]{'contents'}[1]{'args'}[0];
+$result_trees{'macro_in_line_commands'}{'contents'}[12]{'contents'}[1]{'args'}[0]{'parent'}
 = $result_trees{'macro_in_line_commands'}{'contents'}[12]{'contents'}[1];
+$result_trees{'macro_in_line_commands'}{'contents'}[12]{'contents'}[1]{'parent'}
 = $result_trees{'macro_in_line_commands'}{'contents'}[12];
+$result_trees{'macro_in_line_commands'}{'contents'}[12]{'contents'}[2]{'parent'}
 = $result_trees{'macro_in_line_commands'}{'contents'}[12];
+$result_trees{'macro_in_line_commands'}{'contents'}[12]{'parent'} = 
$result_trees{'macro_in_line_commands'};
+$result_trees{'macro_in_line_commands'}{'contents'}[13]{'parent'} = 
$result_trees{'macro_in_line_commands'};
+$result_trees{'macro_in_line_commands'}{'contents'}[14]{'args'}[0]{'parent'} = 
$result_trees{'macro_in_line_commands'}{'contents'}[14];
+$result_trees{'macro_in_line_commands'}{'contents'}[14]{'contents'}[0]{'parent'}
 = $result_trees{'macro_in_line_commands'}{'contents'}[14];
+$result_trees{'macro_in_line_commands'}{'contents'}[14]{'parent'} = 
$result_trees{'macro_in_line_commands'};
+$result_trees{'macro_in_line_commands'}{'contents'}[15]{'parent'} = 
$result_trees{'macro_in_line_commands'};
+$result_trees{'macro_in_line_commands'}{'contents'}[16]{'contents'}[0]{'parent'}
 = $result_trees{'macro_in_line_commands'}{'contents'}[16];
+$result_trees{'macro_in_line_commands'}{'contents'}[16]{'contents'}[1]{'args'}[0]{'contents'}[0]{'parent'}
 = 
$result_trees{'macro_in_line_commands'}{'contents'}[16]{'contents'}[1]{'args'}[0];
+$result_trees{'macro_in_line_commands'}{'contents'}[16]{'contents'}[1]{'args'}[0]{'parent'}
 = $result_trees{'macro_in_line_commands'}{'contents'}[16]{'contents'}[1];
+$result_trees{'macro_in_line_commands'}{'contents'}[16]{'contents'}[1]{'parent'}
 = $result_trees{'macro_in_line_commands'}{'contents'}[16];
+$result_trees{'macro_in_line_commands'}{'contents'}[16]{'contents'}[2]{'parent'}
 = $result_trees{'macro_in_line_commands'}{'contents'}[16];
+$result_trees{'macro_in_line_commands'}{'contents'}[16]{'parent'} = 
$result_trees{'macro_in_line_commands'};
+$result_trees{'macro_in_line_commands'}{'contents'}[17]{'parent'} = 
$result_trees{'macro_in_line_commands'};
+$result_trees{'macro_in_line_commands'}{'contents'}[18]{'args'}[0]{'parent'} = 
$result_trees{'macro_in_line_commands'}{'contents'}[18];
+$result_trees{'macro_in_line_commands'}{'contents'}[18]{'contents'}[0]{'parent'}
 = $result_trees{'macro_in_line_commands'}{'contents'}[18];
+$result_trees{'macro_in_line_commands'}{'contents'}[18]{'parent'} = 
$result_trees{'macro_in_line_commands'};
+$result_trees{'macro_in_line_commands'}{'contents'}[19]{'parent'} = 
$result_trees{'macro_in_line_commands'};
+$result_trees{'macro_in_line_commands'}{'contents'}[20]{'args'}[0]{'contents'}[0]{'parent'}
 = $result_trees{'macro_in_line_commands'}{'contents'}[20]{'args'}[0];
+$result_trees{'macro_in_line_commands'}{'contents'}[20]{'args'}[0]{'parent'} = 
$result_trees{'macro_in_line_commands'}{'contents'}[20];
+$result_trees{'macro_in_line_commands'}{'contents'}[20]{'parent'} = 
$result_trees{'macro_in_line_commands'};
+$result_trees{'macro_in_line_commands'}{'contents'}[21]{'parent'} = 
$result_trees{'macro_in_line_commands'};
+$result_trees{'macro_in_line_commands'}{'contents'}[22]{'args'}[0]{'parent'} = 
$result_trees{'macro_in_line_commands'}{'contents'}[22];
+$result_trees{'macro_in_line_commands'}{'contents'}[22]{'contents'}[0]{'parent'}
 = $result_trees{'macro_in_line_commands'}{'contents'}[22];
+$result_trees{'macro_in_line_commands'}{'contents'}[22]{'parent'} = 
$result_trees{'macro_in_line_commands'};
+$result_trees{'macro_in_line_commands'}{'contents'}[23]{'parent'} = 
$result_trees{'macro_in_line_commands'};
+$result_trees{'macro_in_line_commands'}{'contents'}[24]{'args'}[0]{'contents'}[0]{'parent'}
 = $result_trees{'macro_in_line_commands'}{'contents'}[24]{'args'}[0];
+$result_trees{'macro_in_line_commands'}{'contents'}[24]{'args'}[0]{'parent'} = 
$result_trees{'macro_in_line_commands'}{'contents'}[24];
+$result_trees{'macro_in_line_commands'}{'contents'}[24]{'parent'} = 
$result_trees{'macro_in_line_commands'};
+$result_trees{'macro_in_line_commands'}{'contents'}[25]{'parent'} = 
$result_trees{'macro_in_line_commands'};
+$result_trees{'macro_in_line_commands'}{'contents'}[26]{'args'}[0]{'parent'} = 
$result_trees{'macro_in_line_commands'}{'contents'}[26];
+$result_trees{'macro_in_line_commands'}{'contents'}[26]{'contents'}[0]{'parent'}
 = $result_trees{'macro_in_line_commands'}{'contents'}[26];
+$result_trees{'macro_in_line_commands'}{'contents'}[26]{'parent'} = 
$result_trees{'macro_in_line_commands'};
+$result_trees{'macro_in_line_commands'}{'contents'}[27]{'parent'} = 
$result_trees{'macro_in_line_commands'};
+$result_trees{'macro_in_line_commands'}{'contents'}[28]{'args'}[0]{'contents'}[0]{'parent'}
 = $result_trees{'macro_in_line_commands'}{'contents'}[28]{'args'}[0];
+$result_trees{'macro_in_line_commands'}{'contents'}[28]{'args'}[0]{'contents'}[1]{'args'}[0]{'contents'}[0]{'parent'}
 = 
$result_trees{'macro_in_line_commands'}{'contents'}[28]{'args'}[0]{'contents'}[1]{'args'}[0];
+$result_trees{'macro_in_line_commands'}{'contents'}[28]{'args'}[0]{'contents'}[1]{'args'}[0]{'parent'}
 = 
$result_trees{'macro_in_line_commands'}{'contents'}[28]{'args'}[0]{'contents'}[1];
+$result_trees{'macro_in_line_commands'}{'contents'}[28]{'args'}[0]{'contents'}[1]{'parent'}
 = $result_trees{'macro_in_line_commands'}{'contents'}[28]{'args'}[0];
+$result_trees{'macro_in_line_commands'}{'contents'}[28]{'args'}[0]{'contents'}[2]{'parent'}
 = $result_trees{'macro_in_line_commands'}{'contents'}[28]{'args'}[0];
+$result_trees{'macro_in_line_commands'}{'contents'}[28]{'args'}[0]{'contents'}[3]{'args'}[0]{'parent'}
 = 
$result_trees{'macro_in_line_commands'}{'contents'}[28]{'args'}[0]{'contents'}[3];
+$result_trees{'macro_in_line_commands'}{'contents'}[28]{'args'}[0]{'contents'}[3]{'parent'}
 = $result_trees{'macro_in_line_commands'}{'contents'}[28]{'args'}[0];
+$result_trees{'macro_in_line_commands'}{'contents'}[28]{'args'}[0]{'contents'}[4]{'parent'}
 = $result_trees{'macro_in_line_commands'}{'contents'}[28]{'args'}[0];
+$result_trees{'macro_in_line_commands'}{'contents'}[28]{'args'}[0]{'contents'}[5]{'args'}[0]{'contents'}[0]{'args'}[0]{'contents'}[0]{'parent'}
 = 
$result_trees{'macro_in_line_commands'}{'contents'}[28]{'args'}[0]{'contents'}[5]{'args'}[0]{'contents'}[0]{'args'}[0];
+$result_trees{'macro_in_line_commands'}{'contents'}[28]{'args'}[0]{'contents'}[5]{'args'}[0]{'contents'}[0]{'args'}[0]{'parent'}
 = 
$result_trees{'macro_in_line_commands'}{'contents'}[28]{'args'}[0]{'contents'}[5]{'args'}[0]{'contents'}[0];
+$result_trees{'macro_in_line_commands'}{'contents'}[28]{'args'}[0]{'contents'}[5]{'args'}[0]{'contents'}[0]{'parent'}
 = 
$result_trees{'macro_in_line_commands'}{'contents'}[28]{'args'}[0]{'contents'}[5]{'args'}[0];
+$result_trees{'macro_in_line_commands'}{'contents'}[28]{'args'}[0]{'contents'}[5]{'args'}[0]{'parent'}
 = 
$result_trees{'macro_in_line_commands'}{'contents'}[28]{'args'}[0]{'contents'}[5];
+$result_trees{'macro_in_line_commands'}{'contents'}[28]{'args'}[0]{'contents'}[5]{'parent'}
 = $result_trees{'macro_in_line_commands'}{'contents'}[28]{'args'}[0];
+$result_trees{'macro_in_line_commands'}{'contents'}[28]{'args'}[0]{'contents'}[6]{'parent'}
 = $result_trees{'macro_in_line_commands'}{'contents'}[28]{'args'}[0];
+$result_trees{'macro_in_line_commands'}{'contents'}[28]{'args'}[0]{'parent'} = 
$result_trees{'macro_in_line_commands'}{'contents'}[28];
+$result_trees{'macro_in_line_commands'}{'contents'}[28]{'parent'} = 
$result_trees{'macro_in_line_commands'};
+$result_trees{'macro_in_line_commands'}{'contents'}[29]{'parent'} = 
$result_trees{'macro_in_line_commands'};
+$result_trees{'macro_in_line_commands'}{'contents'}[30]{'args'}[0]{'contents'}[0]{'parent'}
 = $result_trees{'macro_in_line_commands'}{'contents'}[30]{'args'}[0];
+$result_trees{'macro_in_line_commands'}{'contents'}[30]{'args'}[0]{'parent'} = 
$result_trees{'macro_in_line_commands'}{'contents'}[30];
+$result_trees{'macro_in_line_commands'}{'contents'}[30]{'parent'} = 
$result_trees{'macro_in_line_commands'};
+$result_trees{'macro_in_line_commands'}{'contents'}[31]{'parent'} = 
$result_trees{'macro_in_line_commands'};
+$result_trees{'macro_in_line_commands'}{'contents'}[32]{'args'}[0]{'contents'}[0]{'parent'}
 = $result_trees{'macro_in_line_commands'}{'contents'}[32]{'args'}[0];
+$result_trees{'macro_in_line_commands'}{'contents'}[32]{'args'}[0]{'parent'} = 
$result_trees{'macro_in_line_commands'}{'contents'}[32];
+$result_trees{'macro_in_line_commands'}{'contents'}[32]{'parent'} = 
$result_trees{'macro_in_line_commands'};
+$result_trees{'macro_in_line_commands'}{'contents'}[33]{'parent'} = 
$result_trees{'macro_in_line_commands'};
+$result_trees{'macro_in_line_commands'}{'contents'}[34]{'args'}[0]{'contents'}[0]{'parent'}
 = $result_trees{'macro_in_line_commands'}{'contents'}[34]{'args'}[0];
+$result_trees{'macro_in_line_commands'}{'contents'}[34]{'args'}[0]{'parent'} = 
$result_trees{'macro_in_line_commands'}{'contents'}[34];
+$result_trees{'macro_in_line_commands'}{'contents'}[34]{'parent'} = 
$result_trees{'macro_in_line_commands'};
+$result_trees{'macro_in_line_commands'}{'contents'}[35]{'args'}[0]{'contents'}[0]{'parent'}
 = $result_trees{'macro_in_line_commands'}{'contents'}[35]{'args'}[0];
+$result_trees{'macro_in_line_commands'}{'contents'}[35]{'args'}[0]{'parent'} = 
$result_trees{'macro_in_line_commands'}{'contents'}[35];
+$result_trees{'macro_in_line_commands'}{'contents'}[35]{'parent'} = 
$result_trees{'macro_in_line_commands'};
+$result_trees{'macro_in_line_commands'}{'contents'}[36]{'parent'} = 
$result_trees{'macro_in_line_commands'};
+$result_trees{'macro_in_line_commands'}{'contents'}[37]{'args'}[0]{'contents'}[0]{'parent'}
 = $result_trees{'macro_in_line_commands'}{'contents'}[37]{'args'}[0];
+$result_trees{'macro_in_line_commands'}{'contents'}[37]{'args'}[0]{'parent'} = 
$result_trees{'macro_in_line_commands'}{'contents'}[37];
+$result_trees{'macro_in_line_commands'}{'contents'}[37]{'parent'} = 
$result_trees{'macro_in_line_commands'};
+$result_trees{'macro_in_line_commands'}{'contents'}[38]{'parent'} = 
$result_trees{'macro_in_line_commands'};
+$result_trees{'macro_in_line_commands'}{'contents'}[39]{'args'}[0]{'contents'}[0]{'parent'}
 = $result_trees{'macro_in_line_commands'}{'contents'}[39]{'args'}[0];
+$result_trees{'macro_in_line_commands'}{'contents'}[39]{'args'}[0]{'parent'} = 
$result_trees{'macro_in_line_commands'}{'contents'}[39];
+$result_trees{'macro_in_line_commands'}{'contents'}[39]{'parent'} = 
$result_trees{'macro_in_line_commands'};
+$result_trees{'macro_in_line_commands'}{'contents'}[40]{'args'}[0]{'contents'}[0]{'parent'}
 = $result_trees{'macro_in_line_commands'}{'contents'}[40]{'args'}[0];
+$result_trees{'macro_in_line_commands'}{'contents'}[40]{'args'}[0]{'parent'} = 
$result_trees{'macro_in_line_commands'}{'contents'}[40];
+$result_trees{'macro_in_line_commands'}{'contents'}[40]{'parent'} = 
$result_trees{'macro_in_line_commands'};
+$result_trees{'macro_in_line_commands'}{'contents'}[41]{'parent'} = 
$result_trees{'macro_in_line_commands'};
+$result_trees{'macro_in_line_commands'}{'contents'}[42]{'args'}[0]{'contents'}[0]{'parent'}
 = $result_trees{'macro_in_line_commands'}{'contents'}[42]{'args'}[0];
+$result_trees{'macro_in_line_commands'}{'contents'}[42]{'args'}[0]{'parent'} = 
$result_trees{'macro_in_line_commands'}{'contents'}[42];
+$result_trees{'macro_in_line_commands'}{'contents'}[42]{'parent'} = 
$result_trees{'macro_in_line_commands'};
+$result_trees{'macro_in_line_commands'}{'contents'}[43]{'args'}[0]{'contents'}[0]{'parent'}
 = $result_trees{'macro_in_line_commands'}{'contents'}[43]{'args'}[0];
+$result_trees{'macro_in_line_commands'}{'contents'}[43]{'args'}[0]{'parent'} = 
$result_trees{'macro_in_line_commands'}{'contents'}[43];
+$result_trees{'macro_in_line_commands'}{'contents'}[43]{'parent'} = 
$result_trees{'macro_in_line_commands'};
+$result_trees{'macro_in_line_commands'}{'contents'}[44]{'parent'} = 
$result_trees{'macro_in_line_commands'};
+$result_trees{'macro_in_line_commands'}{'contents'}[45]{'args'}[0]{'contents'}[0]{'parent'}
 = $result_trees{'macro_in_line_commands'}{'contents'}[45]{'args'}[0];
+$result_trees{'macro_in_line_commands'}{'contents'}[45]{'args'}[0]{'parent'} = 
$result_trees{'macro_in_line_commands'}{'contents'}[45];
+$result_trees{'macro_in_line_commands'}{'contents'}[45]{'parent'} = 
$result_trees{'macro_in_line_commands'};
+$result_trees{'macro_in_line_commands'}{'contents'}[46]{'parent'} = 
$result_trees{'macro_in_line_commands'};
+$result_trees{'macro_in_line_commands'}{'contents'}[47]{'args'}[0]{'contents'}[0]{'parent'}
 = $result_trees{'macro_in_line_commands'}{'contents'}[47]{'args'}[0];
+$result_trees{'macro_in_line_commands'}{'contents'}[47]{'args'}[0]{'parent'} = 
$result_trees{'macro_in_line_commands'}{'contents'}[47];
+$result_trees{'macro_in_line_commands'}{'contents'}[47]{'parent'} = 
$result_trees{'macro_in_line_commands'};
+$result_trees{'macro_in_line_commands'}{'contents'}[48]{'parent'} = 
$result_trees{'macro_in_line_commands'};
+$result_trees{'macro_in_line_commands'}{'contents'}[49]{'contents'}[0]{'parent'}
 = $result_trees{'macro_in_line_commands'}{'contents'}[49];
+$result_trees{'macro_in_line_commands'}{'contents'}[49]{'parent'} = 
$result_trees{'macro_in_line_commands'};
+$result_trees{'macro_in_line_commands'}{'contents'}[50]{'args'}[0]{'contents'}[0]{'parent'}
 = $result_trees{'macro_in_line_commands'}{'contents'}[50]{'args'}[0];
+$result_trees{'macro_in_line_commands'}{'contents'}[50]{'args'}[0]{'parent'} = 
$result_trees{'macro_in_line_commands'}{'contents'}[50];
+$result_trees{'macro_in_line_commands'}{'contents'}[50]{'parent'} = 
$result_trees{'macro_in_line_commands'};
+$result_trees{'macro_in_line_commands'}{'contents'}[51]{'parent'} = 
$result_trees{'macro_in_line_commands'};
+$result_trees{'macro_in_line_commands'}{'contents'}[52]{'contents'}[0]{'parent'}
 = $result_trees{'macro_in_line_commands'}{'contents'}[52];
+$result_trees{'macro_in_line_commands'}{'contents'}[52]{'parent'} = 
$result_trees{'macro_in_line_commands'};
+$result_trees{'macro_in_line_commands'}{'contents'}[53]{'args'}[0]{'contents'}[0]{'parent'}
 = $result_trees{'macro_in_line_commands'}{'contents'}[53]{'args'}[0];
+$result_trees{'macro_in_line_commands'}{'contents'}[53]{'args'}[0]{'parent'} = 
$result_trees{'macro_in_line_commands'}{'contents'}[53];
+$result_trees{'macro_in_line_commands'}{'contents'}[53]{'parent'} = 
$result_trees{'macro_in_line_commands'};
+$result_trees{'macro_in_line_commands'}{'contents'}[54]{'parent'} = 
$result_trees{'macro_in_line_commands'};
+$result_trees{'macro_in_line_commands'}{'contents'}[55]{'contents'}[0]{'parent'}
 = $result_trees{'macro_in_line_commands'}{'contents'}[55];
+$result_trees{'macro_in_line_commands'}{'contents'}[55]{'parent'} = 
$result_trees{'macro_in_line_commands'};
+$result_trees{'macro_in_line_commands'}{'contents'}[56]{'args'}[0]{'contents'}[0]{'parent'}
 = $result_trees{'macro_in_line_commands'}{'contents'}[56]{'args'}[0];
+$result_trees{'macro_in_line_commands'}{'contents'}[56]{'args'}[0]{'parent'} = 
$result_trees{'macro_in_line_commands'}{'contents'}[56];
+$result_trees{'macro_in_line_commands'}{'contents'}[56]{'parent'} = 
$result_trees{'macro_in_line_commands'};
+$result_trees{'macro_in_line_commands'}{'contents'}[57]{'parent'} = 
$result_trees{'macro_in_line_commands'};
+$result_trees{'macro_in_line_commands'}{'contents'}[58]{'contents'}[0]{'parent'}
 = $result_trees{'macro_in_line_commands'}{'contents'}[58];
+$result_trees{'macro_in_line_commands'}{'contents'}[58]{'parent'} = 
$result_trees{'macro_in_line_commands'};
+$result_trees{'macro_in_line_commands'}{'contents'}[59]{'args'}[0]{'contents'}[0]{'parent'}
 = $result_trees{'macro_in_line_commands'}{'contents'}[59]{'args'}[0];
+$result_trees{'macro_in_line_commands'}{'contents'}[59]{'args'}[0]{'parent'} = 
$result_trees{'macro_in_line_commands'}{'contents'}[59];
+$result_trees{'macro_in_line_commands'}{'contents'}[59]{'parent'} = 
$result_trees{'macro_in_line_commands'};
+$result_trees{'macro_in_line_commands'}{'contents'}[60]{'parent'} = 
$result_trees{'macro_in_line_commands'};
+$result_trees{'macro_in_line_commands'}{'contents'}[61]{'contents'}[0]{'parent'}
 = $result_trees{'macro_in_line_commands'}{'contents'}[61];
+$result_trees{'macro_in_line_commands'}{'contents'}[61]{'parent'} = 
$result_trees{'macro_in_line_commands'};
+$result_trees{'macro_in_line_commands'}{'contents'}[62]{'args'}[0]{'contents'}[0]{'parent'}
 = $result_trees{'macro_in_line_commands'}{'contents'}[62]{'args'}[0];
+$result_trees{'macro_in_line_commands'}{'contents'}[62]{'args'}[0]{'parent'} = 
$result_trees{'macro_in_line_commands'}{'contents'}[62];
+$result_trees{'macro_in_line_commands'}{'contents'}[62]{'parent'} = 
$result_trees{'macro_in_line_commands'};
+$result_trees{'macro_in_line_commands'}{'contents'}[63]{'parent'} = 
$result_trees{'macro_in_line_commands'};
+$result_trees{'macro_in_line_commands'}{'contents'}[64]{'contents'}[0]{'parent'}
 = $result_trees{'macro_in_line_commands'}{'contents'}[64];
+$result_trees{'macro_in_line_commands'}{'contents'}[64]{'parent'} = 
$result_trees{'macro_in_line_commands'};
+$result_trees{'macro_in_line_commands'}{'contents'}[65]{'args'}[0]{'contents'}[0]{'parent'}
 = $result_trees{'macro_in_line_commands'}{'contents'}[65]{'args'}[0];
+$result_trees{'macro_in_line_commands'}{'contents'}[65]{'args'}[0]{'parent'} = 
$result_trees{'macro_in_line_commands'}{'contents'}[65];
+$result_trees{'macro_in_line_commands'}{'contents'}[65]{'parent'} = 
$result_trees{'macro_in_line_commands'};
+$result_trees{'macro_in_line_commands'}{'contents'}[66]{'parent'} = 
$result_trees{'macro_in_line_commands'};
+$result_trees{'macro_in_line_commands'}{'contents'}[67]{'contents'}[0]{'parent'}
 = $result_trees{'macro_in_line_commands'}{'contents'}[67];
+$result_trees{'macro_in_line_commands'}{'contents'}[67]{'parent'} = 
$result_trees{'macro_in_line_commands'};
+$result_trees{'macro_in_line_commands'}{'contents'}[68]{'args'}[0]{'contents'}[0]{'parent'}
 = $result_trees{'macro_in_line_commands'}{'contents'}[68]{'args'}[0];
+$result_trees{'macro_in_line_commands'}{'contents'}[68]{'args'}[0]{'parent'} = 
$result_trees{'macro_in_line_commands'}{'contents'}[68];
+$result_trees{'macro_in_line_commands'}{'contents'}[68]{'parent'} = 
$result_trees{'macro_in_line_commands'};
+$result_trees{'macro_in_line_commands'}{'contents'}[69]{'parent'} = 
$result_trees{'macro_in_line_commands'};
+$result_trees{'macro_in_line_commands'}{'contents'}[70]{'contents'}[0]{'parent'}
 = $result_trees{'macro_in_line_commands'}{'contents'}[70];
+$result_trees{'macro_in_line_commands'}{'contents'}[70]{'parent'} = 
$result_trees{'macro_in_line_commands'};
+$result_trees{'macro_in_line_commands'}{'contents'}[71]{'args'}[0]{'contents'}[0]{'parent'}
 = $result_trees{'macro_in_line_commands'}{'contents'}[71]{'args'}[0];
+$result_trees{'macro_in_line_commands'}{'contents'}[71]{'args'}[0]{'parent'} = 
$result_trees{'macro_in_line_commands'}{'contents'}[71];
+$result_trees{'macro_in_line_commands'}{'contents'}[71]{'parent'} = 
$result_trees{'macro_in_line_commands'};
+$result_trees{'macro_in_line_commands'}{'contents'}[72]{'parent'} = 
$result_trees{'macro_in_line_commands'};
+$result_trees{'macro_in_line_commands'}{'contents'}[73]{'contents'}[0]{'parent'}
 = $result_trees{'macro_in_line_commands'}{'contents'}[73];
+$result_trees{'macro_in_line_commands'}{'contents'}[73]{'parent'} = 
$result_trees{'macro_in_line_commands'};
+$result_trees{'macro_in_line_commands'}{'contents'}[74]{'args'}[0]{'contents'}[0]{'parent'}
 = $result_trees{'macro_in_line_commands'}{'contents'}[74]{'args'}[0];
+$result_trees{'macro_in_line_commands'}{'contents'}[74]{'args'}[0]{'parent'} = 
$result_trees{'macro_in_line_commands'}{'contents'}[74];
+$result_trees{'macro_in_line_commands'}{'contents'}[74]{'parent'} = 
$result_trees{'macro_in_line_commands'};
+
+$result_texts{'macro_in_line_commands'} = '@macro cp
+cp
address@hidden macro
address@hidden fn 
+fn
address@hidden macro
address@hidden syncodeindex_command 
address@hidden
address@hidden macro
+
address@hidden cp fn
address@hidden  cp fn
+
address@hidden en 
+en
address@hidden macro
address@hidden documentlanguage_command 
address@hidden
address@hidden macro
+
+documentlanguage @documentlanguage en
+
+documentlanguage on its line
address@hidden   en
+line following documentlanguage
+
address@hidden truc 
+truc
address@hidden macro
+
+definedx truc
address@hidden truc
+after
+
address@hidden trucindex_command 
address@hidden
address@hidden macro
+
address@hidden  index truc
+
address@hidden codeidx 
+codeidx
address@hidden macro
+
address@hidden codeidx
+
address@hidden defcodeindex_entry 
+a @var{index entry} address@hidden'e @address@hidden
address@hidden macro
+
address@hidden a @var{index entry} address@hidden'e @address@hidden
+
address@hidden cindex entry
+
address@hidden ky pg
+
address@hidden truc kindex
address@hidden pindex codeidx
+
address@hidden truc cp
+
address@hidden abc
address@hidden defg
+
address@hidden abc defg
address@hidden defg ky
+
address@hidden defg index entry
+
address@hidden abc index entry
+
+pg
address@hidden pg
+
+ky
address@hidden ky
+
+truc
address@hidden truc
+
+value truc
address@hidden truc
+
+cp
address@hidden cp
+
+value cp
address@hidden cp
+
+defg
address@hidden defg
+
+abc
address@hidden abc
+
+fn
address@hidden fn
+';
+
+$result_errors{'macro_in_line_commands'} = [];
+
+



reply via email to

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