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 (_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);



reply via email to

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