[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
branch master updated: * tp/Texinfo/ParserNonXS.pm (_setup_document_root
From: |
Patrice Dumas |
Subject: |
branch master updated: * tp/Texinfo/ParserNonXS.pm (_setup_document_root_and_text_root) (parse_texi_text, parse_texi_file, parse_texi_line, _parse_texi), tp/Texinfo/XS/parsetexi/api.c (parse_file, parse_text), tp/Texinfo/XS/parsetexi/parser.c (setup_document_root_and_text_root), (parse_texi_file, parse_texi): pass both root element and current element to parse_texi(). Rename setup_text_root() as setup_document_root_and_text_root(). |
Date: |
Thu, 30 Dec 2021 15:10:45 -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 17e59cfb76 * tp/Texinfo/ParserNonXS.pm
(_setup_document_root_and_text_root) (parse_texi_text, parse_texi_file,
parse_texi_line, _parse_texi), tp/Texinfo/XS/parsetexi/api.c (parse_file,
parse_text), tp/Texinfo/XS/parsetexi/parser.c
(setup_document_root_and_text_root), (parse_texi_file, parse_texi): pass both
root element and current element to parse_texi(). Rename setup_text_root() as
setup_document_root_and_text_root().
17e59cfb76 is described below
commit 17e59cfb76f692e3ba410a833c5a7269aabf0ec8
Author: Patrice Dumas <pertusus@free.fr>
AuthorDate: Thu Dec 30 21:10:22 2021 +0100
* tp/Texinfo/ParserNonXS.pm (_setup_document_root_and_text_root)
(parse_texi_text, parse_texi_file, parse_texi_line, _parse_texi),
tp/Texinfo/XS/parsetexi/api.c (parse_file, parse_text),
tp/Texinfo/XS/parsetexi/parser.c (setup_document_root_and_text_root),
(parse_texi_file, parse_texi): pass both root element and current
element to parse_texi().
Rename setup_text_root() as setup_document_root_and_text_root().
---
ChangeLog | 10 ++++++++++
tp/Texinfo/ParserNonXS.pm | 29 ++++++++++++-----------------
tp/Texinfo/XS/parsetexi/api.c | 9 +++++++--
tp/Texinfo/XS/parsetexi/parser.c | 16 +++++++---------
tp/Texinfo/XS/parsetexi/parser.h | 4 ++--
5 files changed, 38 insertions(+), 30 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index 30bb20e6b7..ca740390bd 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,13 @@
+2021-12-30 Patrice Dumas <pertusus@free.fr>
+
+ * tp/Texinfo/ParserNonXS.pm (_setup_document_root_and_text_root)
+ (parse_texi_text, parse_texi_file, parse_texi_line, _parse_texi),
+ tp/Texinfo/XS/parsetexi/api.c (parse_file, parse_text),
+ tp/Texinfo/XS/parsetexi/parser.c (setup_document_root_and_text_root),
+ (parse_texi_file, parse_texi): pass both root element and current
+ element to parse_texi().
+ Rename setup_text_root() as setup_document_root_and_text_root().
+
2021-12-30 Patrice Dumas <pertusus@free.fr>
* tp/Texinfo/Convert/DocBook.pm, tp/Texinfo/Convert/HTML.pm,
diff --git a/tp/Texinfo/ParserNonXS.pm b/tp/Texinfo/ParserNonXS.pm
index 0ec3e180cb..fec12f6b70 100644
--- a/tp/Texinfo/ParserNonXS.pm
+++ b/tp/Texinfo/ParserNonXS.pm
@@ -874,9 +874,9 @@ sub parse_texi_text($$;$$$$)
$self = parser() if (!defined($self));
$self->{'input'} = [{'pending' => $lines_array}];
- my ($root) = _setup_text_root();
+ my ($document_root, $text_root) = _setup_document_root_and_text_root();
- my $tree = $self->_parse_texi($root);
+ my $tree = $self->_parse_texi($document_root, $text_root);
$self->_set_global_informations();
@@ -931,8 +931,7 @@ sub parse_texi_file($$)
my @first_lines;
my $pending_first_texi_line;
- # the first line not empty and not with \input is kept in
- # $pending_first_texi_line and put in the pending lines just below
+ # gather the empty lines and the \input line in a container
while ($line = <$filehandle>) {
$line_nr++;
if ($line =~ /^ *\\input/ or $line =~ /^\s*$/) {
@@ -940,11 +939,13 @@ sub parse_texi_file($$)
$line =~ s/\x{7F}.*\s*//;
push @first_lines, $line;
} else {
+ # the first line not empty and not with \input is kept in
+ # $pending_first_texi_line and put in the pending lines just below
$pending_first_texi_line = $line;
last;
}
}
- my ($document_root, $text_root) = _setup_text_root();
+ my ($document_root, $text_root) = _setup_document_root_and_text_root();
if (@first_lines) {
push @{$text_root->{'contents'}}, {'type' => 'preamble_before_beginning',
'contents' => [], 'parent' =>
$text_root };
@@ -969,7 +970,7 @@ sub parse_texi_file($$)
$self->{'info'}->{'input_file_name'} = $file_name;
$self->{'info'}->{'input_directory'} = $directories;
- my $tree = $self->_parse_texi($document_root);
+ my $tree = $self->_parse_texi($document_root, $text_root);
# Put everything before @setfilename in a special type. This allows to
# ignore everything before @setfilename.
@@ -1011,7 +1012,8 @@ sub parse_texi_line($$;$$$$)
$self = parser() if (!defined($self));
$self->{'input'} = [{'pending' => $lines_array}];
- my $tree = $self->_parse_texi({'contents' => [], 'type' => 'root_line'});
+ my $root = {'contents' => [], 'type' => 'root_line'};
+ my $tree = $self->_parse_texi($root, $root);
return $tree;
}
@@ -3664,7 +3666,7 @@ sub _check_valid_nesting {
}
}
-sub _setup_text_root()
+sub _setup_document_root_and_text_root()
{
my $text_root = { 'contents' => [], 'type' => 'text_root' };
my $document_root = { 'contents' => [$text_root], 'type' => 'document_root'
};
@@ -3673,16 +3675,9 @@ sub _setup_text_root()
}
# the main subroutine
-sub _parse_texi($$)
+sub _parse_texi($$$)
{
- my ($self, $root) = @_;
-
- my $current;
- if ($root->{'type'} and $root->{'type'} eq 'document_root') {
- $current = $root->{'contents'}->[0];
- } else {
- $current = $root;
- }
+ my ($self, $root, $current) = @_;
my $line_nr;
diff --git a/tp/Texinfo/XS/parsetexi/api.c b/tp/Texinfo/XS/parsetexi/api.c
index 3c035000b1..b4ee6e0e08 100644
--- a/tp/Texinfo/XS/parsetexi/api.c
+++ b/tp/Texinfo/XS/parsetexi/api.c
@@ -174,18 +174,23 @@ parse_file (char *filename)
void
parse_string (char *string)
{
+ ELEMENT *root_elt = new_element (ET_root_line);
+
reset_parser_except_conf ();
input_push_text (strdup (string), 0);
- Root = parse_texi (new_element (ET_root_line));
+ Root = parse_texi (root_elt, root_elt);
}
/* Used for parse_texi_text. STRING should be a UTF-8 buffer. */
void
parse_text (char *string)
{
+ ELEMENT *text_root = setup_document_root_and_text_root ();
+ ELEMENT *document_root = text_root->parent;
+
reset_parser_except_conf ();
input_push_text_with_line_nos (strdup (string), 1);
- Root = parse_texi (setup_text_root());
+ Root = parse_texi (document_root, text_root);
}
diff --git a/tp/Texinfo/XS/parsetexi/parser.c b/tp/Texinfo/XS/parsetexi/parser.c
index 8bf2f9963e..81279282f1 100644
--- a/tp/Texinfo/XS/parsetexi/parser.c
+++ b/tp/Texinfo/XS/parsetexi/parser.c
@@ -337,7 +337,7 @@ wipe_global_info (void)
}
ELEMENT *
-setup_text_root()
+setup_document_root_and_text_root ()
{
ELEMENT *text_root = new_element (ET_text_root);
ELEMENT *document_root = new_element (ET_document_root);
@@ -351,7 +351,7 @@ parse_texi_file (char *filename)
{
char *p, *q;
char *linep, *line = 0;
- ELEMENT *text_root = setup_text_root ();
+ ELEMENT *text_root = setup_document_root_and_text_root ();
ELEMENT *preamble_before_beginning = 0;
ELEMENT *document_root = text_root->parent;
char c;
@@ -412,7 +412,7 @@ parse_texi_file (char *filename)
if (preamble_before_beginning)
add_to_element_contents (text_root, preamble_before_beginning);
- return parse_texi (document_root);
+ return parse_texi (document_root, text_root);
}
@@ -1935,17 +1935,15 @@ check_line_directive (char *line)
return 1;
}
-/* Pass in and return root of a "Texinfo tree". */
+/* Pass in and return root of a "Texinfo tree". Starting point for adding
+ to the tree is current_elt */
ELEMENT *
-parse_texi (ELEMENT *root_elt)
+parse_texi (ELEMENT *root_elt, ELEMENT *current_elt)
{
- ELEMENT *current = root_elt;
+ ELEMENT *current = current_elt;
static char *allocated_line;
char *line;
- if (root_elt->type == ET_document_root)
- current = root_elt->contents.list[0];
-
/* Read input file line-by-line. */
while (1)
{
diff --git a/tp/Texinfo/XS/parsetexi/parser.h b/tp/Texinfo/XS/parsetexi/parser.h
index 2f33d54f71..fb309f9747 100644
--- a/tp/Texinfo/XS/parsetexi/parser.h
+++ b/tp/Texinfo/XS/parsetexi/parser.h
@@ -135,7 +135,7 @@ ELEMENT *handle_separator (ELEMENT *current, char separator,
char **line_inout);
/* In parser.c */
-ELEMENT *parse_texi (ELEMENT *root_elt);
+ELEMENT *parse_texi (ELEMENT *root_elt, ELEMENT *current_elt);
void push_conditional_stack (enum command_id cond);
enum command_id pop_conditional_stack (void);
extern size_t conditional_number;
@@ -191,7 +191,7 @@ void wipe_global_info (void);
extern COUNTER count_remaining_args, count_items, count_cells;
-ELEMENT *setup_text_root(void);
+ELEMENT *setup_document_root_and_text_root (void);
/* In multitable.c */
ELEMENT *item_line_parent (ELEMENT *current);
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- branch master updated: * tp/Texinfo/ParserNonXS.pm (_setup_document_root_and_text_root) (parse_texi_text, parse_texi_file, parse_texi_line, _parse_texi), tp/Texinfo/XS/parsetexi/api.c (parse_file, parse_text), tp/Texinfo/XS/parsetexi/parser.c (setup_document_root_and_text_root), (parse_texi_file, parse_texi): pass both root element and current element to parse_texi(). Rename setup_text_root() as setup_document_root_and_text_root().,
Patrice Dumas <=
- Prev by Date:
branch master updated: * tp/Texinfo/Convert/DocBook.pm, tp/Texinfo/Convert/HTML.pm, tp/Texinfo/Convert/LaTeX.pm, tp/Texinfo/Convert/NodeNameNormalization.pm, tp/Texinfo/Convert/Plaintext.pm, tp/Texinfo/Convert/TexinfoXML.pm, tp/Texinfo/Convert/Text.pm, tp/Texinfo/Convert/TextContent.pm, tp/Texinfo/ParserNonXS.pm (parse_texi_file), tp/Texinfo/XS/parsetexi/element_types.txt, tp/Texinfo/XS/parsetexi/parser.c (parse_texi_file): rename preamble type as preamble_before_beginning and preamble_text as text_before_beginning.
- Next by Date:
branch master updated: * tp/Texinfo/Structuring.pm (sectioning_structure): do not use no_root_command_tree() to check if there is no section structure, use the tree directly to define $sec_root.
- Previous by thread:
branch master updated: * tp/Texinfo/Convert/DocBook.pm, tp/Texinfo/Convert/HTML.pm, tp/Texinfo/Convert/LaTeX.pm, tp/Texinfo/Convert/NodeNameNormalization.pm, tp/Texinfo/Convert/Plaintext.pm, tp/Texinfo/Convert/TexinfoXML.pm, tp/Texinfo/Convert/Text.pm, tp/Texinfo/Convert/TextContent.pm, tp/Texinfo/ParserNonXS.pm (parse_texi_file), tp/Texinfo/XS/parsetexi/element_types.txt, tp/Texinfo/XS/parsetexi/parser.c (parse_texi_file): rename preamble type as preamble_before_beginning and preamble_text as text_before_beginning.
- Next by thread:
branch master updated: * tp/Texinfo/Structuring.pm (sectioning_structure): do not use no_root_command_tree() to check if there is no section structure, use the tree directly to define $sec_root.
- Index(es):