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: Sat, 09 Oct 2010 23:10:35 +0000

CVSROOT:        /sources/texinfo
Module name:    texinfo
Changes by:     Patrice Dumas <pertusus>        10/10/09 23:10:34

Modified files:
        tp/Texinfo     : Parser.pm 
        tp/t           : 60macro.t 
        tp/t/results/coverage: preformatted.pl 
        tp/t/results/macro: macro_in_menu.pl 

Log message:
        Handle macro for menu entry beginning.

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/texinfo/tp/Texinfo/Parser.pm?cvsroot=texinfo&r1=1.54&r2=1.55
http://cvs.savannah.gnu.org/viewcvs/texinfo/tp/t/60macro.t?cvsroot=texinfo&r1=1.14&r2=1.15
http://cvs.savannah.gnu.org/viewcvs/texinfo/tp/t/results/coverage/preformatted.pl?cvsroot=texinfo&r1=1.2&r2=1.3
http://cvs.savannah.gnu.org/viewcvs/texinfo/tp/t/results/macro/macro_in_menu.pl?cvsroot=texinfo&r1=1.1&r2=1.2

Patches:
Index: Texinfo/Parser.pm
===================================================================
RCS file: /sources/texinfo/texinfo/tp/Texinfo/Parser.pm,v
retrieving revision 1.54
retrieving revision 1.55
diff -u -b -r1.54 -r1.55
--- Texinfo/Parser.pm   9 Oct 2010 18:15:15 -0000       1.54
+++ Texinfo/Parser.pm   9 Oct 2010 23:10:34 -0000       1.55
@@ -1102,7 +1102,11 @@
             or $current->{'contents'}->[-1]->{'cmdname'} eq 'comment')) {
         $end_comment = pop @{$current->{'contents'}};
       }
-      if (address@hidden>{'contents'}}) {
+      if (address@hidden>{'contents'}} 
+           # empty if only the end of line or spaces
+           or (@{$current->{'contents'}} == 1 
+               and defined($current->{'contents'}->[-1]->{'text'})
+               and $current->{'contents'}->[-1]->{'text'} !~ /\S/)) {
         $empty_menu_entry_node = 1;
         push @{$current->{'contents'}}, $end_comment if ($end_comment);
       }
@@ -1322,41 +1326,13 @@
           )
         # not def line
         and $self->{'context_stack'}->[-1] ne 'def') {
-      print STDERR "EMPTY LINE or COMMAND\n" if ($self->{'debug'});
+      print STDERR "BEGIN LINE\n" if ($self->{'debug'});
       $line =~ s/([ \t]*)//;
       push @{$current->{'contents'}}, { 'type' => 'empty_line', 
                                         'text' => $1,
                                         'parent' => $current };
     }
 
-    if ($current->{'type'} 
-        and ($current->{'type'} eq 'menu_comment'
-             or $current->{'type'} eq 'menu_entry_description')) {
-      if ($line =~ s/^(\*\s+)//) {
-        _abort_empty_line ($self, $current);
-        print STDERR "MENU ENTRY (certainly)\n" if ($self->{'debug'});
-        my $leading_text = $1;
-        if ($current->{'type'} eq 'menu_comment') {
-          my $menu = $current->{'parent'};
-          pop @{$menu->{'contents'}} if (address@hidden>{'contents'}});
-          $current = $menu;
-        } else {
-          # first parent is menu_entry
-          $current = $current->{'parent'}->{'parent'};
-        }
-        push @{$current->{'contents'}}, { 'type' => 'menu_entry',
-                                          'parent' => $current,
-                                        };
-        $current = $current->{'contents'}->[-1];
-        $current->{'args'} = [ { 'type' => 'menu_entry_leading_text',
-                                 'text' => $leading_text,
-                                 'parent' => $current },
-                               { 'type' => 'menu_entry_name',
-                                 'contents' => [],
-                                 'parent' => $current } ];
-        $current = $current->{'args'}->[-1];
-      }
-    }
 
     while (1) {
       # in a raw or ignored conditional block command
@@ -1549,6 +1525,50 @@
                            $current->{'cmdname'}), $line_nr);
           $current = $current->{'parent'};
         }
+      # maybe a menu entry beginning
+      } elsif ($line =~ /^\*/ and $current->{'type'}
+                and ($current->{'type'} eq 'menu_comment'
+                    or $current->{'type'} eq 'menu_entry_description')
+                and @{$current->{'contents'}} 
+                and $current->{'contents'}->[-1]->{'type'}
+                and $current->{'contents'}->[-1]->{'type'} eq 'empty_line'
+                and $current->{'contents'}->[-1]->{'text'} eq '') {
+        print STDERR "MENU STAR\n" if ($self->{'debug'});
+        _abort_empty_line ($self, $current);
+        $line =~ s/^\*//;
+        push @{$current->{'contents'}}, { 'type' => 'menu_star',
+                                          'text' => '*' };
+      } elsif ($line =~ /^\s+/ and @{$current->{'contents'}} 
+               and $current->{'contents'}->[-1]->{'type'}
+               and $current->{'contents'}->[-1]->{'type'} eq 'menu_star') {
+        print STDERR "MENU ENTRY (certainly)\n" if ($self->{'debug'});
+        pop @{$current->{'contents'}};
+        $line =~ s/^(\s+)//;
+        my $leading_text = '*' . $1;
+        if ($current->{'type'} eq 'menu_comment') {
+          my $menu = $current->{'parent'};
+          pop @{$menu->{'contents'}} if (address@hidden>{'contents'}});
+          $current = $menu;
+        } else {
+          # first parent is menu_entry
+          $current = $current->{'parent'}->{'parent'};
+        }
+        push @{$current->{'contents'}}, { 'type' => 'menu_entry',
+                                          'parent' => $current,
+                                        };
+        $current = $current->{'contents'}->[-1];
+        $current->{'args'} = [ { 'type' => 'menu_entry_leading_text',
+                                 'text' => $leading_text,
+                                 'parent' => $current },
+                               { 'type' => 'menu_entry_name',
+                                 'contents' => [],
+                                 'parent' => $current } ];
+        $current = $current->{'args'}->[-1];
+      } elsif (@{$current->{'contents'}} 
+               and $current->{'contents'}->[-1]->{'type'}
+               and $current->{'contents'}->[-1]->{'type'} eq 'menu_star') {
+        print STDERR "ABORT MENU STAR\n" if ($self->{'debug'});
+        delete $current->{'contents'}->[-1]->{'type'};
         # REMACRO
       } elsif ($line =~ s/^\@(["'address@hidden,\.!\?\s\*\-\^`=:\|\/\\])//o 
                or $line =~ s/^\@([[:alnum:]][[:alnum:]-]*)//o) {
@@ -1984,7 +2004,7 @@
                                           'parent' => $current };
           # end of the menu_entry_name, open the menu_entry_node.
           } else {
-            $line =~ s/^(\s*)//;
+            $line =~ s/^([ \t]*)//;
             $separator .= $1;
             $current = $current->{'parent'};
             push @{$current->{'args'}}, { 'type' => 'menu_entry_separator',

Index: t/60macro.t
===================================================================
RCS file: /sources/texinfo/texinfo/tp/t/60macro.t,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -b -r1.14 -r1.15
--- t/60macro.t 9 Oct 2010 18:15:15 -0000       1.14
+++ t/60macro.t 9 Oct 2010 23:10:34 -0000       1.15
@@ -29,7 +29,7 @@
 ['empty_end','@macro foo {aaa, }
 in foo
 @end macro'],
-[ 'bad_argument', '@macro
+['bad_argument', '@macro
 in macro
 @end macro
 
@@ -201,7 +201,12 @@
 @space{} text after space.
 '],
 ['macro_in_menu',
-'@macro star
+'
address@hidden star
+*
address@hidden macro
+
address@hidden star-spaces
 * 
 @end macro
 
@@ -209,14 +214,21 @@
   
 @end macro
 
address@hidden space
+ 
address@hidden macro
+
 @macro two-colon
 ::
 @end macro
 
 @menu
address@hidden address@hidden description
address@hidden address@hidden description
 @spaces{}
 menu comment
address@hidden node::
address@hidden@space{}other node::
+* 3rd node: address@hidden
 @end menu
 '],
 ['nested_macro_call',

Index: t/results/coverage/preformatted.pl
===================================================================
RCS file: /sources/texinfo/texinfo/tp/t/results/coverage/preformatted.pl,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -b -r1.2 -r1.3
--- t/results/coverage/preformatted.pl  9 Oct 2010 17:51:37 -0000       1.2
+++ t/results/coverage/preformatted.pl  9 Oct 2010 23:10:34 -0000       1.3
@@ -19,7 +19,8 @@
         {
           'parent' => {},
           'text' => '
-'
+',
+          'type' => 'empty_line'
         },
         {
           'parent' => {},
@@ -84,7 +85,8 @@
             {
               'parent' => {},
               'text' => '
-'
+',
+              'type' => 'empty_line'
             },
             {
               'parent' => {},

Index: t/results/macro/macro_in_menu.pl
===================================================================
RCS file: /sources/texinfo/texinfo/tp/t/results/macro/macro_in_menu.pl,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -b -r1.1 -r1.2
--- t/results/macro/macro_in_menu.pl    9 Oct 2010 18:15:15 -0000       1.1
+++ t/results/macro/macro_in_menu.pl    9 Oct 2010 23:10:34 -0000       1.2
@@ -3,6 +3,12 @@
 $result_trees{'macro_in_menu'} = {
   'contents' => [
     {
+      'parent' => {},
+      'text' => '
+',
+      'type' => 'empty_line'
+    },
+    {
       'args' => [
         {
           'parent' => {},
@@ -37,6 +43,37 @@
       'args' => [
         {
           'parent' => {},
+          'text' => 'star-spaces',
+          'type' => 'macro_name'
+        }
+      ],
+      'cmdname' => 'macro',
+      'contents' => [
+        {
+          'parent' => {},
+          'text' => '* 
+',
+          'type' => 'raw'
+        }
+      ],
+      'parent' => {},
+      'special' => {
+        'macro_line' => ' star-spaces
+',
+        'macrobody' => '* 
+'
+      }
+    },
+    {
+      'parent' => {},
+      'text' => '
+',
+      'type' => 'empty_line'
+    },
+    {
+      'args' => [
+        {
+          'parent' => {},
           'text' => 'spaces',
           'type' => 'macro_name'
         }
@@ -68,6 +105,37 @@
       'args' => [
         {
           'parent' => {},
+          'text' => 'space',
+          'type' => 'macro_name'
+        }
+      ],
+      'cmdname' => 'macro',
+      'contents' => [
+        {
+          'parent' => {},
+          'text' => ' 
+',
+          'type' => 'raw'
+        }
+      ],
+      'parent' => {},
+      'special' => {
+        'macro_line' => ' space
+',
+        'macrobody' => ' 
+'
+      }
+    },
+    {
+      'parent' => {},
+      'text' => '
+',
+      'type' => 'empty_line'
+    },
+    {
+      'args' => [
+        {
+          'parent' => {},
           'text' => 'two-colon',
           'type' => 'macro_name'
         }
@@ -99,51 +167,161 @@
       'cmdname' => 'menu',
       'contents' => [
         {
+          'args' => [
+            {
+              'parent' => {},
+              'text' => '* ',
+              'type' => 'menu_entry_leading_text'
+            },
+            {
+              'contents' => [
+                {
+                  'parent' => {},
+                  'text' => 'menu entry'
+                }
+              ],
+              'parent' => {},
+              'type' => 'menu_entry_node'
+            },
+            {
+              'parent' => {},
+              'text' => '::',
+              'type' => 'menu_entry_separator'
+            },
+            {
           'contents' => [
             {
               'parent' => {},
-              'text' => '* menu entry:: description
+                  'text' => ' description
 '
+                }
+              ],
+              'parent' => {},
+              'type' => 'menu_entry_description'
+            }
+          ],
+          'parent' => {},
+          'type' => 'menu_entry'
             },
             {
               'parent' => {},
               'text' => '  
 ',
-              'type' => 'empty_line'
+          'type' => 'after_description_line'
             },
             {
+          'contents' => [
+            {
               'parent' => {},
               'text' => 'menu comment
 '
+            },
+            {
+              'text' => '* node::
+'
+            },
+            {
+              'text' => '* other node::
+'
             }
           ],
           'parent' => {},
           'type' => 'menu_comment'
+        },
+        {
+          'args' => [
+            {
+              'parent' => {},
+              'text' => '* ',
+              'type' => 'menu_entry_leading_text'
+            },
+            {
+              'contents' => [
+                {
+                  'parent' => {},
+                  'text' => '3rd node'
+                }
+              ],
+              'parent' => {},
+              'type' => 'menu_entry_name'
+            },
+            {
+              'parent' => {},
+              'text' => ': ',
+              'type' => 'menu_entry_separator'
+            },
+            {
+              'contents' => [
+                {
+                  'parent' => {},
+                  'text' => 'entry. description
+'
+                }
+              ],
+              'parent' => {},
+              'type' => 'menu_entry_node'
+            },
+            {
+              'contents' => [],
+              'parent' => {},
+              'type' => 'menu_entry_description'
+            }
+          ],
+          'parent' => {},
+          'type' => 'menu_entry'
         }
       ],
       'parent' => {}
     }
   ]
 };
-$result_trees{'macro_in_menu'}{'contents'}[0]{'args'}[0]{'parent'} = 
$result_trees{'macro_in_menu'}{'contents'}[0];
-$result_trees{'macro_in_menu'}{'contents'}[0]{'contents'}[0]{'parent'} = 
$result_trees{'macro_in_menu'}{'contents'}[0];
 $result_trees{'macro_in_menu'}{'contents'}[0]{'parent'} = 
$result_trees{'macro_in_menu'};
+$result_trees{'macro_in_menu'}{'contents'}[1]{'args'}[0]{'parent'} = 
$result_trees{'macro_in_menu'}{'contents'}[1];
+$result_trees{'macro_in_menu'}{'contents'}[1]{'contents'}[0]{'parent'} = 
$result_trees{'macro_in_menu'}{'contents'}[1];
 $result_trees{'macro_in_menu'}{'contents'}[1]{'parent'} = 
$result_trees{'macro_in_menu'};
-$result_trees{'macro_in_menu'}{'contents'}[2]{'args'}[0]{'parent'} = 
$result_trees{'macro_in_menu'}{'contents'}[2];
-$result_trees{'macro_in_menu'}{'contents'}[2]{'contents'}[0]{'parent'} = 
$result_trees{'macro_in_menu'}{'contents'}[2];
 $result_trees{'macro_in_menu'}{'contents'}[2]{'parent'} = 
$result_trees{'macro_in_menu'};
+$result_trees{'macro_in_menu'}{'contents'}[3]{'args'}[0]{'parent'} = 
$result_trees{'macro_in_menu'}{'contents'}[3];
+$result_trees{'macro_in_menu'}{'contents'}[3]{'contents'}[0]{'parent'} = 
$result_trees{'macro_in_menu'}{'contents'}[3];
 $result_trees{'macro_in_menu'}{'contents'}[3]{'parent'} = 
$result_trees{'macro_in_menu'};
-$result_trees{'macro_in_menu'}{'contents'}[4]{'args'}[0]{'parent'} = 
$result_trees{'macro_in_menu'}{'contents'}[4];
-$result_trees{'macro_in_menu'}{'contents'}[4]{'contents'}[0]{'parent'} = 
$result_trees{'macro_in_menu'}{'contents'}[4];
 $result_trees{'macro_in_menu'}{'contents'}[4]{'parent'} = 
$result_trees{'macro_in_menu'};
+$result_trees{'macro_in_menu'}{'contents'}[5]{'args'}[0]{'parent'} = 
$result_trees{'macro_in_menu'}{'contents'}[5];
+$result_trees{'macro_in_menu'}{'contents'}[5]{'contents'}[0]{'parent'} = 
$result_trees{'macro_in_menu'}{'contents'}[5];
 $result_trees{'macro_in_menu'}{'contents'}[5]{'parent'} = 
$result_trees{'macro_in_menu'};
-$result_trees{'macro_in_menu'}{'contents'}[6]{'contents'}[0]{'contents'}[0]{'parent'}
 = $result_trees{'macro_in_menu'}{'contents'}[6]{'contents'}[0];
-$result_trees{'macro_in_menu'}{'contents'}[6]{'contents'}[0]{'contents'}[1]{'parent'}
 = $result_trees{'macro_in_menu'}{'contents'}[6]{'contents'}[0];
-$result_trees{'macro_in_menu'}{'contents'}[6]{'contents'}[0]{'contents'}[2]{'parent'}
 = $result_trees{'macro_in_menu'}{'contents'}[6]{'contents'}[0];
-$result_trees{'macro_in_menu'}{'contents'}[6]{'contents'}[0]{'parent'} = 
$result_trees{'macro_in_menu'}{'contents'}[6];
 $result_trees{'macro_in_menu'}{'contents'}[6]{'parent'} = 
$result_trees{'macro_in_menu'};
+$result_trees{'macro_in_menu'}{'contents'}[7]{'args'}[0]{'parent'} = 
$result_trees{'macro_in_menu'}{'contents'}[7];
+$result_trees{'macro_in_menu'}{'contents'}[7]{'contents'}[0]{'parent'} = 
$result_trees{'macro_in_menu'}{'contents'}[7];
+$result_trees{'macro_in_menu'}{'contents'}[7]{'parent'} = 
$result_trees{'macro_in_menu'};
+$result_trees{'macro_in_menu'}{'contents'}[8]{'parent'} = 
$result_trees{'macro_in_menu'};
+$result_trees{'macro_in_menu'}{'contents'}[9]{'args'}[0]{'parent'} = 
$result_trees{'macro_in_menu'}{'contents'}[9];
+$result_trees{'macro_in_menu'}{'contents'}[9]{'contents'}[0]{'parent'} = 
$result_trees{'macro_in_menu'}{'contents'}[9];
+$result_trees{'macro_in_menu'}{'contents'}[9]{'parent'} = 
$result_trees{'macro_in_menu'};
+$result_trees{'macro_in_menu'}{'contents'}[10]{'parent'} = 
$result_trees{'macro_in_menu'};
+$result_trees{'macro_in_menu'}{'contents'}[11]{'contents'}[0]{'args'}[0]{'parent'}
 = $result_trees{'macro_in_menu'}{'contents'}[11]{'contents'}[0];
+$result_trees{'macro_in_menu'}{'contents'}[11]{'contents'}[0]{'args'}[1]{'contents'}[0]{'parent'}
 = $result_trees{'macro_in_menu'}{'contents'}[11]{'contents'}[0]{'args'}[1];
+$result_trees{'macro_in_menu'}{'contents'}[11]{'contents'}[0]{'args'}[1]{'parent'}
 = $result_trees{'macro_in_menu'}{'contents'}[11]{'contents'}[0];
+$result_trees{'macro_in_menu'}{'contents'}[11]{'contents'}[0]{'args'}[2]{'parent'}
 = $result_trees{'macro_in_menu'}{'contents'}[11]{'contents'}[0];
+$result_trees{'macro_in_menu'}{'contents'}[11]{'contents'}[0]{'args'}[3]{'contents'}[0]{'parent'}
 = $result_trees{'macro_in_menu'}{'contents'}[11]{'contents'}[0]{'args'}[3];
+$result_trees{'macro_in_menu'}{'contents'}[11]{'contents'}[0]{'args'}[3]{'parent'}
 = $result_trees{'macro_in_menu'}{'contents'}[11]{'contents'}[0];
+$result_trees{'macro_in_menu'}{'contents'}[11]{'contents'}[0]{'parent'} = 
$result_trees{'macro_in_menu'}{'contents'}[11];
+$result_trees{'macro_in_menu'}{'contents'}[11]{'contents'}[1]{'parent'} = 
$result_trees{'macro_in_menu'}{'contents'}[11];
+$result_trees{'macro_in_menu'}{'contents'}[11]{'contents'}[2]{'contents'}[0]{'parent'}
 = $result_trees{'macro_in_menu'}{'contents'}[11]{'contents'}[2];
+$result_trees{'macro_in_menu'}{'contents'}[11]{'contents'}[2]{'parent'} = 
$result_trees{'macro_in_menu'}{'contents'}[11];
+$result_trees{'macro_in_menu'}{'contents'}[11]{'contents'}[3]{'args'}[0]{'parent'}
 = $result_trees{'macro_in_menu'}{'contents'}[11]{'contents'}[3];
+$result_trees{'macro_in_menu'}{'contents'}[11]{'contents'}[3]{'args'}[1]{'contents'}[0]{'parent'}
 = $result_trees{'macro_in_menu'}{'contents'}[11]{'contents'}[3]{'args'}[1];
+$result_trees{'macro_in_menu'}{'contents'}[11]{'contents'}[3]{'args'}[1]{'parent'}
 = $result_trees{'macro_in_menu'}{'contents'}[11]{'contents'}[3];
+$result_trees{'macro_in_menu'}{'contents'}[11]{'contents'}[3]{'args'}[2]{'parent'}
 = $result_trees{'macro_in_menu'}{'contents'}[11]{'contents'}[3];
+$result_trees{'macro_in_menu'}{'contents'}[11]{'contents'}[3]{'args'}[3]{'contents'}[0]{'parent'}
 = $result_trees{'macro_in_menu'}{'contents'}[11]{'contents'}[3]{'args'}[3];
+$result_trees{'macro_in_menu'}{'contents'}[11]{'contents'}[3]{'args'}[3]{'parent'}
 = $result_trees{'macro_in_menu'}{'contents'}[11]{'contents'}[3];
+$result_trees{'macro_in_menu'}{'contents'}[11]{'contents'}[3]{'args'}[4]{'parent'}
 = $result_trees{'macro_in_menu'}{'contents'}[11]{'contents'}[3];
+$result_trees{'macro_in_menu'}{'contents'}[11]{'contents'}[3]{'parent'} = 
$result_trees{'macro_in_menu'}{'contents'}[11];
+$result_trees{'macro_in_menu'}{'contents'}[11]{'parent'} = 
$result_trees{'macro_in_menu'};
+
+$result_texts{'macro_in_menu'} = '
address@hidden star
+*
address@hidden macro
 
-$result_texts{'macro_in_menu'} = '@macro star
address@hidden star-spaces
 * 
 @end macro
 
@@ -151,6 +329,10 @@
   
 @end macro
 
address@hidden space
+ 
address@hidden macro
+
 @macro two-colon
 ::
 @end macro
@@ -159,6 +341,9 @@
 * menu entry:: description
   
 menu comment
+* node::
+* other node::
+* 3rd node: entry. description
 @end menu
 ';
 



reply via email to

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