[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);
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- 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.,
Patrice Dumas <=