texinfo-commits
[Top][All Lists]
Advanced

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

branch master updated: * tp/Texinfo/ParserNonXS.pm (_transfer_source_mar


From: Patrice Dumas
Subject: branch master updated: * tp/Texinfo/ParserNonXS.pm (_transfer_source_marks), tp/Texinfo/XS/parsetexi/source_marks.c (transfer_source_marks): modify add_source_marks to transfer source marks between two elements. For the perl parser, test for source marks in transfer_source_marks. Empty the source element source marks in transfer_source_marks.
Date: Sun, 05 Feb 2023 11:20:00 -0500

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 0b4fa1446c * tp/Texinfo/ParserNonXS.pm (_transfer_source_marks), 
tp/Texinfo/XS/parsetexi/source_marks.c (transfer_source_marks): modify 
add_source_marks to transfer source marks between two elements.  For the perl 
parser, test for source marks in transfer_source_marks. Empty the source 
element source marks in transfer_source_marks.
0b4fa1446c is described below

commit 0b4fa1446c6805be7de20108276d35bfb42075cf
Author: Patrice Dumas <pertusus@free.fr>
AuthorDate: Sun Feb 5 17:19:50 2023 +0100

    * tp/Texinfo/ParserNonXS.pm (_transfer_source_marks),
    tp/Texinfo/XS/parsetexi/source_marks.c (transfer_source_marks): modify
    add_source_marks to transfer source marks between two elements.  For
    the perl parser, test for source marks in transfer_source_marks.
    Empty the source element source marks in transfer_source_marks.
---
 ChangeLog                              |  8 ++++++
 tp/Texinfo/ParserNonXS.pm              | 46 +++++++++++-----------------------
 tp/Texinfo/XS/parsetexi/close.c        |  3 +--
 tp/Texinfo/XS/parsetexi/end_line.c     |  3 +--
 tp/Texinfo/XS/parsetexi/menus.c        |  3 +--
 tp/Texinfo/XS/parsetexi/parser.c       | 16 +++---------
 tp/Texinfo/XS/parsetexi/source_marks.c |  4 ++-
 tp/Texinfo/XS/parsetexi/source_marks.h |  2 +-
 8 files changed, 34 insertions(+), 51 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 7a20f74182..692a6b02af 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2023-02-05  Patrice Dumas  <pertusus@free.fr>
+
+       * tp/Texinfo/ParserNonXS.pm (_transfer_source_marks),
+       tp/Texinfo/XS/parsetexi/source_marks.c (transfer_source_marks): modify
+       add_source_marks to transfer source marks between two elements.  For
+       the perl parser, test for source marks in transfer_source_marks.
+       Empty the source element source marks in transfer_source_marks.
+
 2023-02-05  Patrice Dumas  <pertusus@free.fr>
 
        * tp/Texinfo/ParserNonXS.pm (_pop_element_from_contents)
diff --git a/tp/Texinfo/ParserNonXS.pm b/tp/Texinfo/ParserNonXS.pm
index 00b10d65f4..2200d1d637 100644
--- a/tp/Texinfo/ParserNonXS.pm
+++ b/tp/Texinfo/ParserNonXS.pm
@@ -1335,14 +1335,17 @@ sub _place_source_mark
   push @{$mark_element->{'source_marks'}}, $source_mark;
 }
 
-sub _add_source_marks($$)
+sub _transfer_source_marks($$)
 {
-  my $source_marks = shift;
+  my $from_e = shift;
   my $element = shift;
-  if (!$element->{'source_marks'}) {
-    $element->{'source_marks'} = [];
+  if ($from_e->{'source_marks'} and scalar(@{$from_e->{'source_marks'}})) {
+    if (!$element->{'source_marks'}) {
+      $element->{'source_marks'} = [];
+    }
+    push @{$element->{'source_marks'}}, @{$from_e->{'source_marks'}};
+    delete $from_e->{'source_marks'};
   }
-  push @{$element->{'source_marks'}}, @{$source_marks};
 }
 
 # parse a @macro line
@@ -1656,10 +1659,7 @@ sub _close_container($$)
     my $child_element = $current->{'contents'}->[0];
     if (not defined($child_element->{'cmdname'})
         and _is_container_empty($child_element)) {
-      if ($child_element->{'source_marks'}
-          and scalar(@{$child_element->{'source_marks'}})) {
-        _add_source_marks($child_element->{'source_marks'}, $current);
-      }
+      _transfer_source_marks($child_element, $current);
       print STDERR "REMOVE empty child "
          .Texinfo::Common::debug_print_element_short($child_element)
           .' '.Texinfo::Common::debug_print_element_short($current)."\n"
@@ -2280,10 +2280,7 @@ sub _merge_text {
          if ($self->{'DEBUG'});
   } else {
     my $new_element = { 'text' => $text, 'parent' => $current };
-    if ($transfer_marks_element and $transfer_marks_element->{'source_marks'}
-        and scalar(@{$transfer_marks_element->{'source_marks'}})) {
-      _add_source_marks($transfer_marks_element->{'source_marks'}, 
$new_element);
-    }
+    _transfer_source_marks($transfer_marks_element, $new_element);
     push @{$current->{'contents'}}, $new_element;
     print STDERR "NEW TEXT: $text|||\n" if ($self->{'DEBUG'});
   }
@@ -2738,8 +2735,7 @@ sub _abort_empty_line {
         = $spaces_element->{'extra'}->{'spaces_associated_command'};
       #$owning_element->{'info'} = {} if (! $owning_element->{'info'});
       my $new_space_element = {'text' => $spaces_element->{'text'},};
-      _add_source_marks($spaces_element->{'source_marks'}, $new_space_element)
-        if ($spaces_element->{'source_marks'});
+      _transfer_source_marks($spaces_element, $new_space_element);
       $owning_element->{'info'} = {} if (!exists($owning_element->{'info'}));
       $owning_element->{'info'}->{'spaces_before_argument'}
         = $new_space_element;
@@ -2829,9 +2825,7 @@ sub _isolate_last_space
     if ($current->{'contents'}->[-1]->{'text'} !~ /\S/) {
       my $spaces_after_argument = _pop_element_from_contents($self, $current);
       my $new_space_element = {'text' => $spaces_after_argument->{'text'},};
-      _add_source_marks($spaces_after_argument->{'source_marks'},
-                        $new_space_element)
-        if ($spaces_after_argument->{'source_marks'});
+      _transfer_source_marks($spaces_after_argument, $new_space_element);
       $current->{'info'} = {} if (!exists($current->{'info'}));
       $current->{'info'}->{'spaces_after_argument'}
                  = $new_space_element;
@@ -3991,11 +3985,7 @@ sub _end_line($$$)
                                         'type' => 
'after_menu_description_line',
                                         'text' => $empty_line->{'text'},
                                         'parent' => $current };
-      if ($empty_line->{'source_marks'}
-          and scalar(@{$empty_line->{'source_marks'}})) {
-        _add_source_marks($empty_line->{'source_marks'},
-                          $after_menu_description_line);
-      }
+      _transfer_source_marks($empty_line, $after_menu_description_line);
       push @{$current->{'contents'}}, $after_menu_description_line;
       print STDERR "MENU: END DESCRIPTION, OPEN COMMENT\n" if 
($self->{'DEBUG'});
     } elsif (!$no_paragraph_contexts{$self->_top_context()}) {
@@ -4993,10 +4983,7 @@ sub _process_remaining_on_line($$$$)
       while ($current->{'contents'} and scalar(@{$current->{'contents'}})) {
         # TODO not clear that it leads to a correct location of source marks
         my $removed_element = _pop_element_from_contents($self, $current);
-        if ($removed_element->{'source_marks'}
-            and scalar(@{$removed_element->{'source_marks'}})) {
-          _add_source_marks($removed_element->{'source_marks'}, 
$following_arg);
-        }
+        _transfer_source_marks($removed_element, $following_arg);
       }
       $current = $current->{'parent'};
     } else {
@@ -5064,10 +5051,7 @@ sub _process_remaining_on_line($$$$)
                                  { 'type' => 'menu_entry_name',
                                    'parent' => $current } ];
       # transfer source marks from removed menu star to leading text
-      if ($menu_star_element->{'source_marks'}) {
-        _add_source_marks($menu_star_element->{'source_marks'},
-                          $current->{'contents'}->[0]);
-      }
+      _transfer_source_marks($menu_star_element, $current->{'contents'}->[0]);
       $current = $current->{'contents'}->[-1];
     }
   # after a separator in menu
diff --git a/tp/Texinfo/XS/parsetexi/close.c b/tp/Texinfo/XS/parsetexi/close.c
index f99897c97c..a946586046 100644
--- a/tp/Texinfo/XS/parsetexi/close.c
+++ b/tp/Texinfo/XS/parsetexi/close.c
@@ -124,8 +124,7 @@ close_container (ELEMENT *current)
       ELEMENT *child_element = last_contents_child (current);
       if ((!child_element->cmd) && is_container_empty (child_element))
         {
-          add_source_marks (&child_element->source_mark_list, current);
-          child_element->source_mark_list.number = 0;
+          transfer_source_marks (child_element, current);
 
           debug_nonl ("REMOVE empty child ");
           debug_print_element_short (child_element, 1); debug ("");
diff --git a/tp/Texinfo/XS/parsetexi/end_line.c 
b/tp/Texinfo/XS/parsetexi/end_line.c
index 9997cfe77a..3dc28537de 100644
--- a/tp/Texinfo/XS/parsetexi/end_line.c
+++ b/tp/Texinfo/XS/parsetexi/end_line.c
@@ -2145,8 +2145,7 @@ end_line (ELEMENT *current)
           current = e;
           e = new_element (ET_after_menu_description_line);
           text_append (&e->text, empty_line->text.text);
-          add_source_marks (&empty_line->source_mark_list, e);
-          empty_line->source_mark_list.number = 0;
+          transfer_source_marks (empty_line, e);
           destroy_element (empty_line);
           add_to_element_contents (current, e);
 
diff --git a/tp/Texinfo/XS/parsetexi/menus.c b/tp/Texinfo/XS/parsetexi/menus.c
index 2bdd32907a..54b32f444b 100644
--- a/tp/Texinfo/XS/parsetexi/menus.c
+++ b/tp/Texinfo/XS/parsetexi/menus.c
@@ -149,8 +149,7 @@ handle_menu (ELEMENT **current_inout, char **line_inout)
       menu_entry = new_element (ET_menu_entry);
       leading_text = new_element (ET_menu_entry_leading_text);
       /* transfer source marks from removed menu star to leading text */
-      add_source_marks (&menu_star_element->source_mark_list, leading_text);
-      menu_star_element->source_mark_list.number = 0;
+      transfer_source_marks (menu_star_element, leading_text);
       destroy_element (menu_star_element);
       entry_name = new_element (ET_menu_entry_name);
       add_to_element_contents (current, menu_entry);
diff --git a/tp/Texinfo/XS/parsetexi/parser.c b/tp/Texinfo/XS/parsetexi/parser.c
index 5c2f1fb918..6dd8eb8ce1 100644
--- a/tp/Texinfo/XS/parsetexi/parser.c
+++ b/tp/Texinfo/XS/parsetexi/parser.c
@@ -687,10 +687,7 @@ merge_text (ELEMENT *current, char *text, ELEMENT 
*transfer_marks_element)
     {
       ELEMENT *e = new_element (ET_NONE);
       if (transfer_marks_element)
-        {
-          add_source_marks (&(transfer_marks_element->source_mark_list), e);
-          transfer_marks_element->source_mark_list.number = 0;
-        }
+        transfer_source_marks (transfer_marks_element, e);
       text_append (&e->text, text);
       add_to_element_contents (current, e);
       debug ("NEW TEXT: %s|||", text);
@@ -762,9 +759,7 @@ abort_empty_line (ELEMENT **current_inout, char 
*additional_spaces)
           k = lookup_extra (last_child, "spaces_associated_command");
           owning_element = (ELEMENT *) k->value;
           text_append (&spaces_element->text, e->text.text);
-          add_source_marks (&e->source_mark_list,
-                            spaces_element);
-          e->source_mark_list.number = 0;
+          transfer_source_marks (e, spaces_element);
           add_info_element_oot (owning_element, "spaces_before_argument",
                                 spaces_element);
           destroy_element (e);
@@ -794,9 +789,7 @@ isolate_last_space_internal (ELEMENT *current)
   if (text[strspn (text, whitespace_chars)] == '\0')
     {
       text_append (&spaces_element->text, last_elt->text.text);
-      add_source_marks (&last_elt->source_mark_list,
-                        spaces_element);
-      last_elt->source_mark_list.number = 0;
+      transfer_source_marks (last_elt, spaces_element);
       add_info_element_oot (current, "spaces_after_argument",
                             spaces_element);
       destroy_element (pop_element_from_contents (current));
@@ -1862,8 +1855,7 @@ process_remaining_on_line (ELEMENT **current_inout, char 
**line_inout)
           while (current->contents.number > 0)
             {
               ELEMENT *popped_element = pop_element_from_contents (current);
-              add_source_marks (&popped_element->source_mark_list, e);
-              popped_element->source_mark_list.number = 0;
+              transfer_source_marks (popped_element, e);
               /* current is the accent command.  So far only saw empty elements
                  for the removed elements */
               /*
diff --git a/tp/Texinfo/XS/parsetexi/source_marks.c 
b/tp/Texinfo/XS/parsetexi/source_marks.c
index 2e796437bd..628f96e43a 100644
--- a/tp/Texinfo/XS/parsetexi/source_marks.c
+++ b/tp/Texinfo/XS/parsetexi/source_marks.c
@@ -57,8 +57,9 @@ add_source_mark (SOURCE_MARK *source_mark, ELEMENT *e)
 }
 
 void
-add_source_marks (SOURCE_MARK_LIST *source_mark_list, ELEMENT *e)
+transfer_source_marks (ELEMENT *from_e, ELEMENT *e)
 {
+  SOURCE_MARK_LIST *source_mark_list = &(from_e->source_mark_list);
   if (source_mark_list->number)
     {
       int i;
@@ -66,6 +67,7 @@ add_source_marks (SOURCE_MARK_LIST *source_mark_list, ELEMENT 
*e)
         {
           add_source_mark (source_mark_list->list[i], e);
         }
+      source_mark_list->number = 0;
     }
 }
 
diff --git a/tp/Texinfo/XS/parsetexi/source_marks.h 
b/tp/Texinfo/XS/parsetexi/source_marks.h
index f68f65b2c8..c995608b66 100644
--- a/tp/Texinfo/XS/parsetexi/source_marks.h
+++ b/tp/Texinfo/XS/parsetexi/source_marks.h
@@ -21,7 +21,7 @@
 SOURCE_MARK *new_source_mark (enum source_mark_type type);
 void register_source_mark (ELEMENT *e, SOURCE_MARK *source_mark);
 void source_marks_reset_counters (void);
-void add_source_marks (SOURCE_MARK_LIST *source_mark_list, ELEMENT *e);
+void transfer_source_marks (ELEMENT *from_e, ELEMENT *e);
 void add_source_mark (SOURCE_MARK *source_mark, ELEMENT *e);
 void place_source_mark (ELEMENT *e, SOURCE_MARK *source_mark);
 



reply via email to

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