texinfo-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

branch master updated: Do not add empty isolated trailing spaces


From: Patrice Dumas
Subject: branch master updated: Do not add empty isolated trailing spaces
Date: Sat, 01 Oct 2022 15:32:00 -0400

This is an automated email from the git hooks/post-receive script.

pertusus pushed a commit to branch master
in repository texinfo.

The following commit(s) were added to refs/heads/master by this push:
     new b344cf8da0 Do not add empty isolated trailing spaces
b344cf8da0 is described below

commit b344cf8da0cbfe00a0b292559620f07d0fea1a70
Author: Patrice Dumas <pertusus@free.fr>
AuthorDate: Sat Oct 1 21:30:54 2022 +0200

    Do not add empty isolated trailing spaces
    
    * tp/Texinfo/ParserNonXS.pm (_isolate_trailing_space)
    (_isolate_last_space, _process_remaining_on_line),
    tp/Texinfo/XS/parsetexi/parser.c (isolate_trailing_space):
    only add element when isolating trailing spaces if there
    are indeed spaces to isolate.  Modify perl parser code to
    be more like XS parser code.
---
 ChangeLog                                          | 11 +++++
 tp/Texinfo/ParserNonXS.pm                          | 50 +++++++++++-----------
 tp/Texinfo/XS/parsetexi/parser.c                   | 19 ++++----
 tp/t/results/indices/subentry_and_sortas_spaces.pl | 22 +---------
 4 files changed, 49 insertions(+), 53 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 8d4dcb290a..b7d982ae15 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,14 @@
+2022-10-01  Patrice Dumas  <pertusus@free.fr>
+
+       Do not add empty isolated trailing spaces
+
+       * tp/Texinfo/ParserNonXS.pm (_isolate_trailing_space)
+       (_isolate_last_space, _process_remaining_on_line),
+       tp/Texinfo/XS/parsetexi/parser.c (isolate_trailing_space):
+       only add element when isolating trailing spaces if there
+       are indeed spaces to isolate.  Modify perl parser code to
+       be more like XS parser code.
+
 2022-10-01  Gavin Smith  <gavinsmith0123@gmail.com>
 
        Warn for @shortcontents in LaTeX
diff --git a/tp/Texinfo/ParserNonXS.pm b/tp/Texinfo/ParserNonXS.pm
index 3c8a0ae1d1..843c10ad76 100644
--- a/tp/Texinfo/ParserNonXS.pm
+++ b/tp/Texinfo/ParserNonXS.pm
@@ -2365,6 +2365,22 @@ sub _abort_empty_line {
   return 0;
 }
 
+sub _isolate_trailing_space($$)
+{
+  my $current = shift;
+  my $spaces_type = shift;
+
+  if ($current->{'contents'}->[-1]->{'text'} !~ /\S/) {
+    $current->{'contents'}->[-1]->{'type'} = $spaces_type;
+  } else {
+    if ($current->{'contents'}->[-1]->{'text'} =~ s/(\s+)$//) {
+      my $new_spaces = { 'text' => $1, 'parent' => $current,
+        'type' => $spaces_type };
+      push @{$current->{'contents'}}, $new_spaces;
+    }
+  }
+}
+
 # isolate last space in a command to help expansion disregard unuseful spaces.
 sub _isolate_last_space
 {
@@ -2393,14 +2409,7 @@ sub _isolate_last_space
             or $current->{'contents'}->[-1]->{'text'} !~ /\s+$/;
 
   if ($current->{'type'} and $current->{'type'} eq 'menu_entry_node') {
-    if ($current->{'contents'}->[-1]->{'text'} !~ /\S/) {
-      $current->{'contents'}->[-1]->{'type'} = 'space_at_end_menu_node';
-    } else {
-      $current->{'contents'}->[-1]->{'text'} =~ s/(\s+)$//;
-      my $new_spaces = { 'text' => $1, 'parent' => $current,
-        'type' => 'space_at_end_menu_node' };
-      push @{$current->{'contents'}}, $new_spaces;
-    }
+    _isolate_trailing_space($current, 'space_at_end_menu_node');
   } else {
     # Store final spaces in 'spaces_after_argument'.
     #$current->{'extra'} = {} if (!$current->{'extra'});
@@ -4551,24 +4560,15 @@ sub _process_remaining_on_line($$$$)
         # the internal space type is not processed and remains as is in
         # the final tree.
         and _is_index_element($self, $current->{'parent'})) {
-      $current->{'contents'}->[-1]->{'text'} =~ s/(\s+)$//;
-      # an internal and temporary space type that is converted to
-      # a normal space without type if followed by text or a
-      # "spaces_at_end" if followed by spaces only when the
-      # index or subentry command is done.
-      my $space_type = 'internal_spaces_before_brace_in_index';
       if ($command eq 'subentry') {
-        $space_type = 'spaces_at_end';
-      }
-      if ($1 ne '') {
-        if ($current->{'contents'}->[-1]->{'text'} eq '') {
-          $current->{'contents'}->[-1]->{'text'} = $1;
-          $current->{'contents'}->[-1]->{'type'} = $space_type;
-        } else {
-          my $new_spaces = { 'text' => $1, 'parent' => $current,
-            'type' => $space_type };
-          push @{$current->{'contents'}}, $new_spaces;
-        }
+        _isolate_trailing_space($current, 'spaces_at_end');
+      } else {
+        # an internal and temporary space type that is converted to
+        # a normal space without type if followed by text or a
+        # "spaces_at_end" if followed by spaces only when the
+        # index or subentry command is done.
+        _isolate_trailing_space($current,
+                                'internal_spaces_before_brace_in_index');
       }
     }
 
diff --git a/tp/Texinfo/XS/parsetexi/parser.c b/tp/Texinfo/XS/parsetexi/parser.c
index aeeed68a0e..877567dd81 100644
--- a/tp/Texinfo/XS/parsetexi/parser.c
+++ b/tp/Texinfo/XS/parsetexi/parser.c
@@ -726,14 +726,17 @@ isolate_trailing_space (ELEMENT *current, enum 
element_type spaces_type)
            i--)
         trailing_spaces++;
 
-      new_spaces = new_element (spaces_type);
-      text_append_n (&new_spaces->text,
-                     text + text_len - trailing_spaces,
-                     trailing_spaces);
-      text[text_len - trailing_spaces] = '\0';
-      last_elt->text.end -= trailing_spaces;
-
-      add_to_element_contents (current, new_spaces);
+      if (trailing_spaces)
+        {
+          new_spaces = new_element (spaces_type);
+          text_append_n (&new_spaces->text,
+                         text + text_len - trailing_spaces,
+                         trailing_spaces);
+          text[text_len - trailing_spaces] = '\0';
+          last_elt->text.end -= trailing_spaces;
+
+          add_to_element_contents (current, new_spaces);
+        }
     }
 }
 
diff --git a/tp/t/results/indices/subentry_and_sortas_spaces.pl 
b/tp/t/results/indices/subentry_and_sortas_spaces.pl
index 9ad30da56a..8fa14a6849 100644
--- a/tp/t/results/indices/subentry_and_sortas_spaces.pl
+++ b/tp/t/results/indices/subentry_and_sortas_spaces.pl
@@ -363,11 +363,6 @@ $result_trees{'subentry_and_sortas_spaces'} = {
                 {
                   'parent' => {},
                   'text' => 'aaa'
-                },
-                {
-                  'parent' => {},
-                  'text' => '',
-                  'type' => 'spaces_at_end'
                 }
               ],
               'parent' => {},
@@ -417,11 +412,6 @@ $result_trees{'subentry_and_sortas_spaces'} = {
                           'parent' => {},
                           'text' => 'ccc'
                         },
-                        {
-                          'parent' => {},
-                          'text' => '',
-                          'type' => 'spaces_at_end'
-                        },
                         {
                           'args' => [
                             {
@@ -522,11 +512,6 @@ $result_trees{'subentry_and_sortas_spaces'} = {
                     {
                       'parent' => {},
                       'text' => 'bbb'
-                    },
-                    {
-                      'parent' => {},
-                      'text' => '',
-                      'type' => 'spaces_at_end'
                     }
                   ],
                   'parent' => {},
@@ -686,7 +671,6 @@ 
$result_trees{'subentry_and_sortas_spaces'}{'contents'}[4]{'contents'}[3]{'extra
 
$result_trees{'subentry_and_sortas_spaces'}{'contents'}[4]{'contents'}[3]{'parent'}
 = $result_trees{'subentry_and_sortas_spaces'}{'contents'}[4];
 $result_trees{'subentry_and_sortas_spaces'}{'contents'}[4]{'contents'}[4] = 
$result_trees{'subentry_and_sortas_spaces'}{'contents'}[4]{'contents'}[3]{'extra'}{'subentry'};
 
$result_trees{'subentry_and_sortas_spaces'}{'contents'}[4]{'contents'}[5]{'args'}[0]{'contents'}[0]{'parent'}
 = 
$result_trees{'subentry_and_sortas_spaces'}{'contents'}[4]{'contents'}[5]{'args'}[0];
-$result_trees{'subentry_and_sortas_spaces'}{'contents'}[4]{'contents'}[5]{'args'}[0]{'contents'}[1]{'parent'}
 = 
$result_trees{'subentry_and_sortas_spaces'}{'contents'}[4]{'contents'}[5]{'args'}[0];
 
$result_trees{'subentry_and_sortas_spaces'}{'contents'}[4]{'contents'}[5]{'args'}[0]{'parent'}
 = $result_trees{'subentry_and_sortas_spaces'}{'contents'}[4]{'contents'}[5];
 
$result_trees{'subentry_and_sortas_spaces'}{'contents'}[4]{'contents'}[5]{'extra'}{'index_entry'}{'content_normalized'}
 = 
$result_trees{'subentry_and_sortas_spaces'}{'contents'}[4]{'contents'}[5]{'args'}[0]{'contents'};
 
$result_trees{'subentry_and_sortas_spaces'}{'contents'}[4]{'contents'}[5]{'extra'}{'index_entry'}{'entry_content'}
 = 
$result_trees{'subentry_and_sortas_spaces'}{'contents'}[4]{'contents'}[5]{'args'}[0]{'contents'};
@@ -695,10 +679,9 @@ 
$result_trees{'subentry_and_sortas_spaces'}{'contents'}[4]{'contents'}[5]{'extra
 
$result_trees{'subentry_and_sortas_spaces'}{'contents'}[4]{'contents'}[5]{'extra'}{'subentry'}{'args'}[0]{'contents'}[0]{'parent'}
 = 
$result_trees{'subentry_and_sortas_spaces'}{'contents'}[4]{'contents'}[5]{'extra'}{'subentry'}{'args'}[0];
 
$result_trees{'subentry_and_sortas_spaces'}{'contents'}[4]{'contents'}[5]{'extra'}{'subentry'}{'args'}[0]{'parent'}
 = 
$result_trees{'subentry_and_sortas_spaces'}{'contents'}[4]{'contents'}[5]{'extra'}{'subentry'};
 
$result_trees{'subentry_and_sortas_spaces'}{'contents'}[4]{'contents'}[5]{'extra'}{'subentry'}{'extra'}{'subentry'}{'args'}[0]{'contents'}[0]{'parent'}
 = 
$result_trees{'subentry_and_sortas_spaces'}{'contents'}[4]{'contents'}[5]{'extra'}{'subentry'}{'extra'}{'subentry'}{'args'}[0];
+$result_trees{'subentry_and_sortas_spaces'}{'contents'}[4]{'contents'}[5]{'extra'}{'subentry'}{'extra'}{'subentry'}{'args'}[0]{'contents'}[1]{'args'}[0]{'contents'}[0]{'parent'}
 = 
$result_trees{'subentry_and_sortas_spaces'}{'contents'}[4]{'contents'}[5]{'extra'}{'subentry'}{'extra'}{'subentry'}{'args'}[0]{'contents'}[1]{'args'}[0];
+$result_trees{'subentry_and_sortas_spaces'}{'contents'}[4]{'contents'}[5]{'extra'}{'subentry'}{'extra'}{'subentry'}{'args'}[0]{'contents'}[1]{'args'}[0]{'parent'}
 = 
$result_trees{'subentry_and_sortas_spaces'}{'contents'}[4]{'contents'}[5]{'extra'}{'subentry'}{'extra'}{'subentry'}{'args'}[0]{'contents'}[1];
 
$result_trees{'subentry_and_sortas_spaces'}{'contents'}[4]{'contents'}[5]{'extra'}{'subentry'}{'extra'}{'subentry'}{'args'}[0]{'contents'}[1]{'parent'}
 = 
$result_trees{'subentry_and_sortas_spaces'}{'contents'}[4]{'contents'}[5]{'extra'}{'subentry'}{'extra'}{'subentry'}{'args'}[0];
-$result_trees{'subentry_and_sortas_spaces'}{'contents'}[4]{'contents'}[5]{'extra'}{'subentry'}{'extra'}{'subentry'}{'args'}[0]{'contents'}[2]{'args'}[0]{'contents'}[0]{'parent'}
 = 
$result_trees{'subentry_and_sortas_spaces'}{'contents'}[4]{'contents'}[5]{'extra'}{'subentry'}{'extra'}{'subentry'}{'args'}[0]{'contents'}[2]{'args'}[0];
-$result_trees{'subentry_and_sortas_spaces'}{'contents'}[4]{'contents'}[5]{'extra'}{'subentry'}{'extra'}{'subentry'}{'args'}[0]{'contents'}[2]{'args'}[0]{'parent'}
 = 
$result_trees{'subentry_and_sortas_spaces'}{'contents'}[4]{'contents'}[5]{'extra'}{'subentry'}{'extra'}{'subentry'}{'args'}[0]{'contents'}[2];
-$result_trees{'subentry_and_sortas_spaces'}{'contents'}[4]{'contents'}[5]{'extra'}{'subentry'}{'extra'}{'subentry'}{'args'}[0]{'contents'}[2]{'parent'}
 = 
$result_trees{'subentry_and_sortas_spaces'}{'contents'}[4]{'contents'}[5]{'extra'}{'subentry'}{'extra'}{'subentry'}{'args'}[0];
 
$result_trees{'subentry_and_sortas_spaces'}{'contents'}[4]{'contents'}[5]{'extra'}{'subentry'}{'extra'}{'subentry'}{'args'}[0]{'parent'}
 = 
$result_trees{'subentry_and_sortas_spaces'}{'contents'}[4]{'contents'}[5]{'extra'}{'subentry'}{'extra'}{'subentry'};
 
$result_trees{'subentry_and_sortas_spaces'}{'contents'}[4]{'contents'}[5]{'extra'}{'subentry'}{'extra'}{'subentry'}{'parent'}
 = $result_trees{'subentry_and_sortas_spaces'}{'contents'}[4];
 
$result_trees{'subentry_and_sortas_spaces'}{'contents'}[4]{'contents'}[5]{'extra'}{'subentry'}{'parent'}
 = $result_trees{'subentry_and_sortas_spaces'}{'contents'}[4];
@@ -712,7 +695,6 @@ 
$result_trees{'subentry_and_sortas_spaces'}{'contents'}[4]{'contents'}[8]{'extra
 
$result_trees{'subentry_and_sortas_spaces'}{'contents'}[4]{'contents'}[8]{'extra'}{'index_entry'}{'entry_element'}
 = $result_trees{'subentry_and_sortas_spaces'}{'contents'}[4]{'contents'}[8];
 
$result_trees{'subentry_and_sortas_spaces'}{'contents'}[4]{'contents'}[8]{'extra'}{'index_entry'}{'entry_node'}
 = $result_trees{'subentry_and_sortas_spaces'}{'contents'}[3];
 
$result_trees{'subentry_and_sortas_spaces'}{'contents'}[4]{'contents'}[8]{'extra'}{'subentry'}{'args'}[0]{'contents'}[0]{'parent'}
 = 
$result_trees{'subentry_and_sortas_spaces'}{'contents'}[4]{'contents'}[8]{'extra'}{'subentry'}{'args'}[0];
-$result_trees{'subentry_and_sortas_spaces'}{'contents'}[4]{'contents'}[8]{'extra'}{'subentry'}{'args'}[0]{'contents'}[1]{'parent'}
 = 
$result_trees{'subentry_and_sortas_spaces'}{'contents'}[4]{'contents'}[8]{'extra'}{'subentry'}{'args'}[0];
 
$result_trees{'subentry_and_sortas_spaces'}{'contents'}[4]{'contents'}[8]{'extra'}{'subentry'}{'args'}[0]{'parent'}
 = 
$result_trees{'subentry_and_sortas_spaces'}{'contents'}[4]{'contents'}[8]{'extra'}{'subentry'};
 
$result_trees{'subentry_and_sortas_spaces'}{'contents'}[4]{'contents'}[8]{'extra'}{'subentry'}{'extra'}{'subentry'}{'args'}[0]{'contents'}[0]{'parent'}
 = 
$result_trees{'subentry_and_sortas_spaces'}{'contents'}[4]{'contents'}[8]{'extra'}{'subentry'}{'extra'}{'subentry'}{'args'}[0];
 
$result_trees{'subentry_and_sortas_spaces'}{'contents'}[4]{'contents'}[8]{'extra'}{'subentry'}{'extra'}{'subentry'}{'args'}[0]{'parent'}
 = 
$result_trees{'subentry_and_sortas_spaces'}{'contents'}[4]{'contents'}[8]{'extra'}{'subentry'}{'extra'}{'subentry'};



reply via email to

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