texinfo-commits
[Top][All Lists]
Advanced

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

[no subject]


From: Patrice Dumas
Date: Sun, 22 Jun 2025 05:09:47 -0400 (EDT)

branch: master
commit 5c1ced98838f0a6af93f5fc4de35c99bdd310931
Author: Patrice Dumas <pertusus@free.fr>
AuthorDate: Sun Jun 22 11:03:20 2025 +0200

    * tta/perl/Makefile.am (dist_convertmodules_DATA),
    tta/perl/Texinfo/Convert/TreeElementConverterXS.pm,
    tta/perl/Texinfo/Convert/TreeElementConverter.pm (%XS_overrides),
    tta/perl/XSTexinfo/Makefile.am (xs_LTLIBRARIES)
    (TreeElementConverterXS_*),
    tta/perl/XSTexinfo/parser_document/TreeElementXS.xs,
    tta/perl/XSTexinfo/parser_document/TreeElementConverterXS.xs:
    split TreeElementConverterXS.xs out of TreeElementXS.xs for
    Texinfo::Convert::TreeElementConverter overriden functions.
---
 .gitignore                                         |   1 +
 ChangeLog                                          |  12 +
 tta/perl/Makefile.am                               |   1 +
 tta/perl/Texinfo/Convert/TreeElementConverter.pm   |  47 +-
 tta/perl/Texinfo/Convert/TreeElementConverterXS.pm |  52 ++
 tta/perl/XSTexinfo/Makefile.am                     |  17 +
 ...{TreeElementXS.xs => TreeElementConverterXS.xs} | 483 ++----------------
 .../XSTexinfo/parser_document/TreeElementXS.xs     | 537 +--------------------
 8 files changed, 149 insertions(+), 1001 deletions(-)

diff --git a/.gitignore b/.gitignore
index ba7904ecd3..081c103049 100644
--- a/.gitignore
+++ b/.gitignore
@@ -362,6 +362,7 @@ tta/perl/XSTexinfo/parser_document/Parsetexi.c
 tta/perl/XSTexinfo/parser_document/ReaderXS.c
 tta/perl/XSTexinfo/parser_document/StructuringTransfoXS.c
 tta/perl/XSTexinfo/parser_document/TreeElementXS.c
+tta/perl/XSTexinfo/parser_document/TreeElementConverterXS.c
 tta/perl/XSTexinfo/parser_document/.libs
 tta/perl/XSTexinfo/parser_document/*.lo
 
diff --git a/ChangeLog b/ChangeLog
index 9cb9f4ea5b..e84566711e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,15 @@
+2025-06-22  Patrice Dumas  <pertusus@free.fr>
+
+       * tta/perl/Makefile.am (dist_convertmodules_DATA),
+       tta/perl/Texinfo/Convert/TreeElementConverterXS.pm,
+       tta/perl/Texinfo/Convert/TreeElementConverter.pm (%XS_overrides),
+       tta/perl/XSTexinfo/Makefile.am (xs_LTLIBRARIES)
+       (TreeElementConverterXS_*),
+       tta/perl/XSTexinfo/parser_document/TreeElementXS.xs,
+       tta/perl/XSTexinfo/parser_document/TreeElementConverterXS.xs:
+       split TreeElementConverterXS.xs out of TreeElementXS.xs for
+       Texinfo::Convert::TreeElementConverter overriden functions.
+
 2025-06-22  Patrice Dumas  <pertusus@free.fr>
 
        * tta/perl/Texinfo/Common.pm (item_itemize_prepended): rename
diff --git a/tta/perl/Makefile.am b/tta/perl/Makefile.am
index b7e2f1fb62..1391144818 100644
--- a/tta/perl/Makefile.am
+++ b/tta/perl/Makefile.am
@@ -136,6 +136,7 @@ dist_convertmodules_DATA = \
  Texinfo/Convert/Text.pm \
  Texinfo/Convert/TextContent.pm \
  Texinfo/Convert/TreeElementConverter.pm \
+ Texinfo/Convert/TreeElementConverterXS.pm \
  Texinfo/Convert/TreeElementReadDocBook.pm \
  Texinfo/Convert/Unicode.pm \
  Texinfo/Convert/Utils.pm
diff --git a/tta/perl/Texinfo/Convert/TreeElementConverter.pm 
b/tta/perl/Texinfo/Convert/TreeElementConverter.pm
index c5ee6bdc4c..6c3415ac5e 100644
--- a/tta/perl/Texinfo/Convert/TreeElementConverter.pm
+++ b/tta/perl/Texinfo/Convert/TreeElementConverter.pm
@@ -36,6 +36,8 @@ use Carp qw(cluck confess);
 
 use Texinfo::XSLoader;
 
+use Texinfo::Convert::TreeElementConverterXS;
+
 use Texinfo::Commands;
 use Texinfo::CommandsValues;
 use Texinfo::Common;
@@ -59,50 +61,49 @@ our $module_loaded = 0;
 
 my %XS_overrides = (
   "Texinfo::Convert::TreeElementConverter::new_tree_element"
-    => "Texinfo::TreeElement::new_tree_element",
+    => "Texinfo::Convert::TreeElementConverterXS::new_tree_element",
   "Texinfo::Convert::TreeElementConverter::get_tree_element_index_entry"
-    => "Texinfo::TreeElement::get_tree_element_index_entry",
+    => 
"Texinfo::Convert::TreeElementConverterXS::get_tree_element_index_entry",
   "Texinfo::Convert::TreeElementConverter::get_global_unique_tree_element"
-    => "Texinfo::TreeElement::get_global_unique_tree_element",
+    => 
"Texinfo::Convert::TreeElementConverterXS::get_global_unique_tree_element",
   
"Texinfo::Convert::TreeElementConverter::global_commands_information_command_list"
-    => "Texinfo::TreeElement::global_commands_information_command_list",
+    => 
"Texinfo::Convert::TreeElementConverterXS::global_commands_information_command_list",
   "Texinfo::Convert::TreeElementConverter::tree_element_item_itemize_prepended"
-    => "Texinfo::TreeElement::tree_element_item_itemize_prepended",
+    => 
"Texinfo::Convert::TreeElementConverterXS::tree_element_item_itemize_prepended",
   "Texinfo::Convert::TreeElementConverter::item_itemize_prepended"
-    => "Texinfo::TreeElement::tree_element_item_itemize_prepended",
+    => 
"Texinfo::Convert::TreeElementConverterXS::tree_element_item_itemize_prepended",
   "Texinfo::Convert::TreeElementConverter::find_element_authors"
-    => "Texinfo::TreeElement::element_find_element_authors",
+    => 
"Texinfo::Convert::TreeElementConverterXS::element_find_element_authors",
   "Texinfo::Convert::TreeElementConverter::element_find_element_authors"
-    => "Texinfo::TreeElement::element_find_element_authors",
+    => 
"Texinfo::Convert::TreeElementConverterXS::element_find_element_authors",
   "Texinfo::Convert::TreeElementConverter::element_table_item_content_tree"
-    => "Texinfo::TreeElement::element_table_item_content_tree",
+    => 
"Texinfo::Convert::TreeElementConverterXS::element_table_item_content_tree",
   "Texinfo::Convert::TreeElementConverter::table_item_content_tree"
-    => "Texinfo::TreeElement::element_table_item_content_tree",
+    => 
"Texinfo::Convert::TreeElementConverterXS::element_table_item_content_tree",
   "Texinfo::Convert::TreeElementConverter::comment_or_end_line"
-    => "Texinfo::TreeElement::comment_or_end_line",
+    => "Texinfo::Convert::TreeElementConverterXS::comment_or_end_line",
   "Texinfo::Convert::TreeElementConverter::tree_element_comment_or_end_line"
-    => "Texinfo::TreeElement::comment_or_end_line",
+    => "Texinfo::Convert::TreeElementConverterXS::comment_or_end_line",
   "Texinfo::Convert::TreeElementConverter::argument_comment_end_line"
-    => "Texinfo::TreeElement::argument_comment_end_line",
+    => "Texinfo::Convert::TreeElementConverterXS::argument_comment_end_line",
   
"Texinfo::Convert::TreeElementConverter::tree_element_argument_comment_end_line"
-    => "Texinfo::TreeElement::argument_comment_end_line",
+    => "Texinfo::Convert::TreeElementConverterXS::argument_comment_end_line",
   "Texinfo::Convert::TreeElementConverter::element_expand_verbatiminclude"
-    => "Texinfo::TreeElement::element_expand_verbatiminclude",
+    => 
"Texinfo::Convert::TreeElementConverterXS::element_expand_verbatiminclude",
   "Texinfo::Convert::TreeElementConverter::element_expand_today"
-    => "Texinfo::TreeElement::element_expand_today",
+    => "Texinfo::Convert::TreeElementConverterXS::element_expand_today",
   "Texinfo::Convert::TreeElementConverter::index_content_element"
-    => "Texinfo::TreeElement::tree_element_index_content_element",
+    => 
"Texinfo::Convert::TreeElementConverterXS::tree_element_index_content_element",
   "Texinfo::Convert::TreeElementConverter::tree_element_index_content_element"
-    => "Texinfo::TreeElement::tree_element_index_content_element",
+    => 
"Texinfo::Convert::TreeElementConverterXS::tree_element_index_content_element",
   "Texinfo::Convert::TreeElementConverter::element_gdt"
-    => "Texinfo::TreeElement::element_gdt",
+    => "Texinfo::Convert::TreeElementConverterXS::element_gdt",
   "Texinfo::Convert::TreeElementConverter::tree_elements_sections_list"
-    => "Texinfo::TreeElement::tree_elements_sections_list",
+    => "Texinfo::Convert::TreeElementConverterXS::tree_elements_sections_list",
   "Texinfo::Convert::TreeElementConverter::tree_elements_nodes_list"
-    => "Texinfo::TreeElement::tree_elements_nodes_list",
+    => "Texinfo::Convert::TreeElementConverterXS::tree_elements_nodes_list",
   "Texinfo::Convert::TreeElementConverter::tree_elements_headings_list"
-    => "Texinfo::TreeElement::tree_elements_headings_list",
-
+    => "Texinfo::Convert::TreeElementConverterXS::tree_elements_headings_list",
 );
 
 sub import {
diff --git a/tta/perl/Texinfo/Convert/TreeElementConverterXS.pm 
b/tta/perl/Texinfo/Convert/TreeElementConverterXS.pm
new file mode 100644
index 0000000000..3cb775f2c3
--- /dev/null
+++ b/tta/perl/Texinfo/Convert/TreeElementConverterXS.pm
@@ -0,0 +1,52 @@
+# Copyright 2023-2025 Free Software Foundation, Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License,
+# or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+package Texinfo::Convert::TreeElementConverterXS;
+
+# This package loads XS implementations of tree element converter functions.
+
+use 5.006;
+use strict;
+use warnings;
+
+our $VERSION = '7.2dev';
+
+use Texinfo::XSLoader;
+
+our $XS_package;
+
+BEGIN {
+  if (Texinfo::XSLoader::XS_structuring_enabled()) {
+    $XS_package = Texinfo::XSLoader::init (
+      "Texinfo::Convert::TreeElementConverterXS",
+      undef,
+      "TreeElementConverterXS",
+      undef,
+      ['texinfo', 'texinfoxs', 'texinfo-convert', 'texinfo-convertxs'],
+    );
+  }
+}
+
+# NB Don't add more functions down here, because this can cause an error
+# with some versions of Perl, connected with any typeglob assignments done
+# above.  ("Can't call mro_method_changed_in() on anonymous symbol table").
+#
+# See 
http://perl5.git.perl.org/perl.git/commitdiff/03d9f026ae253e9e69212a3cf6f1944437e9f070?hp=ac73ea1ec401df889d312b067f78b618f7ffecc3
+#
+# (change to Perl interpreter on 22 Oct 2011)
+
+
+1;
+__END__
diff --git a/tta/perl/XSTexinfo/Makefile.am b/tta/perl/XSTexinfo/Makefile.am
index 52935ab31e..f0abaac2af 100644
--- a/tta/perl/XSTexinfo/Makefile.am
+++ b/tta/perl/XSTexinfo/Makefile.am
@@ -180,6 +180,23 @@ TreeElementXS_la_CFLAGS = $(XSLIBS_CFLAGS)
 TreeElementXS_la_LIBADD = $(top_builddir)/C/libtexinfo-convertxs.la 
$(top_builddir)/C/libtexinfoxs.la $(top_builddir)/C/libtexinfo-convert.la 
$(top_builddir)/C/libtexinfo.la $(platform_PERL_LIBADD)
 TreeElementXS_la_LDFLAGS = $(XSLIBS_LDFLAGS)
 
+########################## TreeElementConverter XS
+
+if HAVE_ICONV
+xs_LTLIBRARIES += TreeElementConverterXS.la
+endif
+
+nodist_TreeElementConverterXS_la_SOURCES = 
parser_document/TreeElementConverterXS.c
+CLEANFILES += parser_document/TreeElementConverterXS.c
+
+EXTRA_DIST += parser_document/TreeElementConverterXS.xs
+
+# locate include files under out-of-source builds.
+TreeElementConverterXS_la_CPPFLAGS = -I$(txi_libs_srcdir)/main 
-I$(txi_libs_srcdir)/convert $(XSLIBS_CPPFLAGS)
+TreeElementConverterXS_la_CFLAGS = $(XSLIBS_CFLAGS)
+TreeElementConverterXS_la_LIBADD = $(top_builddir)/C/libtexinfo-convertxs.la 
$(top_builddir)/C/libtexinfoxs.la $(top_builddir)/C/libtexinfo-convert.la 
$(top_builddir)/C/libtexinfo.la $(platform_PERL_LIBADD)
+TreeElementConverterXS_la_LDFLAGS = $(XSLIBS_LDFLAGS)
+
 ########################## Reader XS
 
 if HAVE_ICONV
diff --git a/tta/perl/XSTexinfo/parser_document/TreeElementXS.xs 
b/tta/perl/XSTexinfo/parser_document/TreeElementConverterXS.xs
similarity index 60%
copy from tta/perl/XSTexinfo/parser_document/TreeElementXS.xs
copy to tta/perl/XSTexinfo/parser_document/TreeElementConverterXS.xs
index 66eb8728cf..1d4ff9704e 100644
--- a/tta/perl/XSTexinfo/parser_document/TreeElementXS.xs
+++ b/tta/perl/XSTexinfo/parser_document/TreeElementConverterXS.xs
@@ -49,13 +49,10 @@
  /* See the NOTE in build_perl_info.c on use of functions related to
     memory allocation */
 
-
-MODULE = Texinfo::TreeElement          PACKAGE = Texinfo::TreeElement
+MODULE = Texinfo::Convert::TreeElementConverterXS              PACKAGE = 
Texinfo::Convert::TreeElementConverterXS
 
 PROTOTYPES: ENABLE
 
-# not in Texinfo::TreeElement but in Texinfo::Convert::Converter in order
-# to be able to find the document.
 SV *
 new_tree_element (SV *converter_in, SV *element_hash, int use_sv=0)
     PREINIT:
@@ -499,445 +496,6 @@ element_expand_today (SV *build_tree_sv, SV *test_sv, SV 
*lang_translations_sv,
     OUTPUT:
         RETVAL
 
-SV *
-tree_elements_sections_list (SV *converter_in)
-      PREINIT:
-        DOCUMENT *document;
-     CODE:
-        document = get_converter_sv_document (converter_in, 0);
-        if (document)
-          RETVAL = build_tree_elements_sections_list (document);
-        else
-          RETVAL = newSV (0);
-    OUTPUT:
-        RETVAL
-
-SV *
-tree_elements_nodes_list (SV *converter_in)
-      PREINIT:
-        DOCUMENT *document;
-     CODE:
-        document = get_converter_sv_document (converter_in, 0);
-        if (document)
-          RETVAL = build_tree_elements_nodes_list (document);
-        else
-          RETVAL = newSV (0);
-    OUTPUT:
-        RETVAL
-
-SV *
-tree_elements_headings_list (SV *converter_in)
-      PREINIT:
-        DOCUMENT *document;
-     CODE:
-        document = get_converter_sv_document (converter_in, 0);
-        if (document)
-          RETVAL = build_tree_elements_headings_list (document);
-        else
-          RETVAL = newSV (0);
-    OUTPUT:
-        RETVAL
-
-# following is in TreeElements.  Many accessors are not actually used
-# because using an accessor is much slower than accessing hash values in Perl
-SV *
-new (SV *element_hash)
-    PREINIT:
-        HV *hv_stash;
-    CODE:
-        /*
-        fprintf (stderr, "Unexpected call of TreeElement new through XS\n");
-        debug_print_element_sv (element_hash);
-         */
-        hv_stash = gv_stashpv ("Texinfo::TreeElement", GV_ADD);
-        /* the refcount needs to be increased probably because the
-           argument is "mortal" and has its counters decreased upon
-           leaving the function */
-        RETVAL = sv_bless (SvREFHVCNT_inc (element_hash), hv_stash);
-    OUTPUT:
-         RETVAL
-
-SV *
-type (SV *element_sv)
-      PREINIT:
-        DOCUMENT *document;
-      CODE:
-        document = get_sv_element_document (element_sv, 0);
-        if (document)
-          {
-            const ELEMENT *element
-              = get_sv_element_element (element_sv, document);
-            if (element->type && element->type != ET_normal_text
-                && !(type_data[element->type].flags & TF_c_only))
-              RETVAL = newSVpv (type_data[element->type].name, 0);
-            else
-              RETVAL = newSV (0);
-          }
-        else
-          {
-            const char *key = "type";
-            HV *element_hv = (HV *) SvRV (element_sv);
-            SV **sv = hv_fetch (element_hv, key, strlen(key), 0);
-            if (sv && SvOK (*sv))
-              RETVAL = newSVsv (*sv);
-            else
-              RETVAL = newSV (0);
-          }
-    OUTPUT:
-        RETVAL
-
-SV *
-cmdname (SV *element_sv)
-      PREINIT:
-        DOCUMENT *document;
-      CODE:
-        document = get_sv_element_document (element_sv, 0);
-        if (document)
-          {
-            const ELEMENT *element
-              = get_sv_element_element (element_sv, document);
-
-            if (!(type_data[element->type].flags & TF_text)
-                && element->e.c->cmd)
-              RETVAL = newSVpv (element_command_name (element), 0);
-            else
-              RETVAL = newSV (0);
-          }
-        else
-          {
-            const char *key = "cmdname";
-            HV *element_hv = (HV *) SvRV (element_sv);
-            SV **sv = hv_fetch (element_hv, key, strlen(key), 0);
-            if (sv && SvOK (*sv))
-             RETVAL = newSVsv (*sv);
-            else
-              RETVAL = newSV (0);
-          }
-    OUTPUT:
-        RETVAL
-
-SV *
-text (SV *element_sv)
-      PREINIT:
-        DOCUMENT *document;
-      CODE:
-        document = get_sv_element_document (element_sv, 0);
-        if (document)
-          {
-            const ELEMENT *element
-              = get_sv_element_element (element_sv, document);
-
-            if (type_data[element->type].flags & TF_text)
-              RETVAL
-                = newSVpv_utf8 (element->e.text->text, element->e.text->end);
-            else
-              RETVAL = newSV (0);
-          }
-        else
-          {
-            const char *key = "text";
-            HV *element_hv = (HV *) SvRV (element_sv);
-            SV **sv = hv_fetch (element_hv, key, strlen(key), 0);
-            if (sv && SvOK (*sv))
-              RETVAL = newSVsv (*sv);
-            else
-              RETVAL = newSV (0);
-          }
-    OUTPUT:
-        RETVAL
-
-SV *
-children_number (SV *element_sv)
-      PREINIT:
-        DOCUMENT *document;
-        int contents_nr = 0;
-      CODE:
-        document = get_sv_element_document (element_sv, 0);
-        if (document)
-          {
-            const ELEMENT *element
-              = get_sv_element_element (element_sv, document);
-
-            if (!(type_data[element->type].flags & TF_text))
-              contents_nr = element->e.c->contents.number;
-          }
-        else
-          {
-            const char *key = "contents";
-            HV *element_hv = (HV *) SvRV (element_sv);
-            SV **sv = hv_fetch (element_hv, key, strlen(key), 0);
-            if (sv && SvOK (*sv))
-              {
-                AV *av = (AV *) SvRV (*sv);
-                contents_nr = AvFILL (av) +1;
-              }
-          }
-        RETVAL = newSViv (contents_nr);
-    OUTPUT:
-        RETVAL
-
-SV *
-get_child (SV *element_sv, int e_index)
-      PREINIT:
-        DOCUMENT *document;
-        SV *result_sv = 0;
-      CODE:
-        document = get_sv_element_document (element_sv, 0);
-        if (document)
-          {
-            const ELEMENT *element
-              = get_sv_element_element (element_sv, document);
-
-            if (!(type_data[element->type].flags & TF_text))
-              {
-                int contents_nr = element->e.c->contents.number;
-                int list_index;
-                if (contents_nr)
-                  {
-                    if (e_index < 0)
-                      list_index = contents_nr + e_index;
-                    else
-                      list_index = e_index;
-                    if (list_index < contents_nr && list_index >= 0)
-                      {
-                        ELEMENT *child
-                          = element->e.c->contents.list[list_index];
-                        register_element_handle_in_sv (child, document);
-                        result_sv = newSVsv ((SV *)child->sv);
-                      }
-                  }
-              }
-          }
-        else
-          {
-            const char *key = "contents";
-            HV *element_hv = (HV *) SvRV (element_sv);
-            SV **contents_sv = hv_fetch (element_hv, key, strlen(key), 0);
-            if (contents_sv && SvOK (*contents_sv))
-              {
-                SSize_t contents_nr;
-                SSize_t list_index;
-                AV *av = (AV *) SvRV (*contents_sv);
-                contents_nr = AvFILL (av) +1;
-                if (contents_nr)
-                  {
-                    if (e_index < 0)
-                      list_index = contents_nr + e_index;
-                    else
-                      list_index = e_index;
-                    if (list_index < contents_nr && list_index >= 0)
-                      {
-                        SV **sv = av_fetch (av, list_index, 0);
-                        if (sv && SvOK (*sv))
-                          result_sv = newSVsv (*sv);
-                        else
-                          fprintf (stderr, "BUG: child %d not found\n",
-                                   e_index);
-                      }
-                  }
-              }
-          }
-        if (result_sv)
-          RETVAL = result_sv;
-        else
-          RETVAL = newSV (0);
-    OUTPUT:
-        RETVAL
-
-SV *
-get_children (SV *element_sv)
-      PREINIT:
-        DOCUMENT *document;
-      CODE:
-        document = get_sv_element_document (element_sv, 0);
-        if (document)
-          {
-            const ELEMENT *element
-              = get_sv_element_element (element_sv, document);
-
-            if (!(type_data[element->type].flags & TF_text)
-                && element->e.c->contents.number)
-              {
-                AV *av = newAV ();
-                size_t i;
-                for (i = 0; i < element->e.c->contents.number; i++)
-                  {
-                    SV *child_sv;
-                    ELEMENT *child = element->e.c->contents.list[i];
-                    register_element_handle_in_sv (child, document);
-                    child_sv = SvREFHVCNT_inc ((SV *)child->sv);
-                    av_push (av, child_sv);
-                  }
-                RETVAL = newRV_noinc ((SV *)av);
-              }
-            else
-              RETVAL = newSV (0);
-          }
-        else
-          {
-            const char *key = "contents";
-            HV *element_hv = (HV *) SvRV (element_sv);
-            SV **sv = hv_fetch (element_hv, key, strlen(key), 0);
-            if (sv && SvOK (*sv))
-              RETVAL = newSVsv (*sv);
-            else
-              RETVAL = newSV (0);
-          }
-    OUTPUT:
-        RETVAL
-
-SV *
-parent (SV *element_sv)
-      PREINIT:
-        DOCUMENT *document;
-      CODE:
-        document = get_sv_element_document (element_sv, 0);
-        if (document)
-          {
-            const ELEMENT *element
-              = get_sv_element_element (element_sv, document);
-
-            if (element->parent)
-              {
-                register_element_handle_in_sv (element->parent, document);
-                RETVAL = newSVsv ((SV *)element->parent->sv);
-              }
-            else
-              RETVAL = newSV (0);
-          }
-        else
-          {
-            const char *key = "parent";
-            HV *element_hv = (HV *) SvRV (element_sv);
-            SV **sv = hv_fetch (element_hv, key, strlen(key), 0);
-            if (sv && SvOK (*sv))
-              RETVAL = newSVsv (*sv);
-            else
-              RETVAL = newSV (0);
-          }
-    OUTPUT:
-        RETVAL
-
-SV *
-source_info (SV *element_sv)
-      PREINIT:
-        DOCUMENT *document;
-      CODE:
-        document = get_sv_element_document (element_sv, 0);
-        if (document)
-          {
-            const ELEMENT *element
-              = get_sv_element_element (element_sv, document);
-
-            if (!(type_data[element->type].flags & TF_text))
-              {
-                const SOURCE_INFO *source_info = &element->e.c->source_info;
-                HV *hv = newHV ();
-                build_source_info_hash (source_info, hv);
-                RETVAL = newRV_noinc ((SV *)hv);
-              }
-            else
-              RETVAL = newSV (0);
-          }
-        else
-          {
-            const char *key = "source_info";
-            HV *element_hv = (HV *) SvRV (element_sv);
-            SV **sv = hv_fetch (element_hv, key, strlen(key), 0);
-            if (sv && SvOK (*sv))
-              RETVAL = newSVsv (*sv);
-            else
-              RETVAL = newSV (0);
-          }
-    OUTPUT:
-        RETVAL
-
-SV *
-get_attribute (SV *element_sv, attribute)
-        const char *attribute = (char *)SvPV_nolen($arg);
-      PREINIT:
-        DOCUMENT *document;
-        SV *result_sv = 0;
-      CODE:
-        document = get_sv_element_document (element_sv, 0);
-        if (document)
-          {
-            const ELEMENT *element
-              = get_sv_element_element (element_sv, document);
-
-            if (type_data[element->type].flags & TF_text)
-              {
-                if (!strcmp (attribute, "inserted")
-                    && (element->flags & EF_inserted))
-                  result_sv = newSViv (1);
-              }
-            else
-              result_sv = build_element_attribute (element, attribute,
-                                                   document);
-          }
-        else
-          {
-            static const char *info_type[2] = {"extra", "info"};
-            int i;
-            HV *element_hv = (HV *) SvRV (element_sv);
-            for (i = 0; i < 2; i++)
-              {
-                const char *key = info_type[i];
-                SV **sv_info = hv_fetch (element_hv, key, strlen(key), 0);
-                if (sv_info && SvOK (*sv_info))
-                  {
-                    HV *hv_info = (HV *) SvRV (*sv_info);
-                    SV **sv = hv_fetch (hv_info, attribute,
-                                        strlen(attribute), 0);
-                    if (sv)
-                      {
-                        if (SvOK (*sv))
-                          result_sv = newSVsv (*sv);
-                        break;
-                      }
-                  }
-              }
-          }
-        if (result_sv)
-          RETVAL = result_sv;
-        else
-          RETVAL = newSV (0);
-    OUTPUT:
-        RETVAL
-
-void
-add_to_element_contents (SV *parent_element_sv, SV *element_sv)
-      PREINIT:
-        DOCUMENT *document;
-      CODE:
-        document = get_sv_element_document (parent_element_sv, 0);
-        if (document)
-          {
-            ELEMENT *parent_element
-              = get_sv_element_element (parent_element_sv, document);
-            ELEMENT *element = get_sv_element_element (element_sv, document);
-            add_to_element_contents (parent_element, element);
-          }
-
-        const char *key = "contents";
-        HV *parent_element_hv = (HV *) SvRV (parent_element_sv);
-        HV *element_hv = (HV *) SvRV (element_sv);
-        SV **sv = hv_fetch (parent_element_hv, key, strlen(key), 0);
-        AV *contents_av;
-        if (sv && SvOK (*sv))
-          contents_av = (AV *) SvRV (*sv);
-        else
-          {
-            contents_av = newAV ();
-            hv_store (parent_element_hv, key, strlen(key),
-                      newRV_noinc ((SV *)contents_av), 0);
-          }
-
-        av_push (contents_av, SvREFHVCNT_inc (element_sv));
-
-        hv_store (element_hv, "parent", strlen ("parent"),
-                  newSVsv (element_sv), 0);
-
 SV *
 element_gdt (string, SV *lang_translations_sv, SV *document_sv, ...)
         const char *string = (char *)SvPVutf8_nolen($arg);
@@ -986,3 +544,42 @@ element_gdt (string, SV *lang_translations_sv, SV 
*document_sv, ...)
     OUTPUT:
         RETVAL
 
+SV *
+tree_elements_sections_list (SV *converter_in)
+      PREINIT:
+        DOCUMENT *document;
+     CODE:
+        document = get_converter_sv_document (converter_in, 0);
+        if (document)
+          RETVAL = build_tree_elements_sections_list (document);
+        else
+          RETVAL = newSV (0);
+    OUTPUT:
+        RETVAL
+
+SV *
+tree_elements_nodes_list (SV *converter_in)
+      PREINIT:
+        DOCUMENT *document;
+     CODE:
+        document = get_converter_sv_document (converter_in, 0);
+        if (document)
+          RETVAL = build_tree_elements_nodes_list (document);
+        else
+          RETVAL = newSV (0);
+    OUTPUT:
+        RETVAL
+
+SV *
+tree_elements_headings_list (SV *converter_in)
+      PREINIT:
+        DOCUMENT *document;
+     CODE:
+        document = get_converter_sv_document (converter_in, 0);
+        if (document)
+          RETVAL = build_tree_elements_headings_list (document);
+        else
+          RETVAL = newSV (0);
+    OUTPUT:
+        RETVAL
+
diff --git a/tta/perl/XSTexinfo/parser_document/TreeElementXS.xs 
b/tta/perl/XSTexinfo/parser_document/TreeElementXS.xs
index 66eb8728cf..d148e5e811 100644
--- a/tta/perl/XSTexinfo/parser_document/TreeElementXS.xs
+++ b/tta/perl/XSTexinfo/parser_document/TreeElementXS.xs
@@ -49,497 +49,12 @@
  /* See the NOTE in build_perl_info.c on use of functions related to
     memory allocation */
 
-
 MODULE = Texinfo::TreeElement          PACKAGE = Texinfo::TreeElement
 
 PROTOTYPES: ENABLE
 
-# not in Texinfo::TreeElement but in Texinfo::Convert::Converter in order
-# to be able to find the document.
-SV *
-new_tree_element (SV *converter_in, SV *element_hash, int use_sv=0)
-    PREINIT:
-        DOCUMENT *document;
-     CODE:
-        document = get_converter_sv_document (converter_in, 0);
-
-        if (document)
-          {
-            CONVERTER *converter = get_sv_converter (converter_in, 0);
-            ELEMENT *e = new_element_from_sv (document, element_hash,
-                                              converter);
-            if (use_sv)
-              {
-                HV *hv_stash = gv_stashpv ("Texinfo::TreeElement", GV_ADD);
-             /* this first refcount increase keeps the mortal argument alive */
-                e->sv = sv_bless (SvREFHVCNT_inc (element_hash), hv_stash);
-                register_sv_element_handle_in_sv (e, e->sv, document);
-                RETVAL = (SvREFHVCNT_inc (e->sv));
-              }
-            else
-              {
-                register_element_handle_in_sv (e, document);
-                RETVAL = newSVsv ((SV *)e->sv);
-              }
-          }
-        else
-          {
-            HV *hv_stash = gv_stashpv ("Texinfo::TreeElement", GV_ADD);
-            RETVAL = sv_bless (SvREFHVCNT_inc (element_hash), hv_stash);
-          }
-    OUTPUT:
-         RETVAL
-
-SV *
-get_global_unique_tree_element (SV *converter_in, cmdname)
-        const char *cmdname = (char *)SvPV_nolen($arg);
-      PREINIT:
-        DOCUMENT *document;
-        SV *result_sv = 0;
-     CODE:
-        document = get_converter_sv_document (converter_in, 0);
-        if (document)
-          {
-            enum command_id cmd = lookup_builtin_command (cmdname);
-            if (cmd)
-              {
-                ELEMENT *element = (ELEMENT *)get_cmd_global_uniq_command (
-                              &document->global_commands, cmd);
-                if (element)
-                  {
-                    register_element_handle_in_sv (element, document);
-                    result_sv = newSVsv ((SV *)element->sv);
-                  }
-              }
-          }
-        if (result_sv)
-          RETVAL = result_sv;
-        else
-          RETVAL = newSV (0);
-    OUTPUT:
-        RETVAL
-
-SV *
-global_commands_information_command_list (SV *document_sv, char *cmdname)
-      PREINIT:
-        SV *result_sv = 0;
-        DOCUMENT *document;
-        enum command_id cmd;
-      CODE:
-        document = get_sv_document_document (document_sv,
-                             "global_commands_information_command_list");
-        cmd = lookup_builtin_command (cmdname);
-        if (document && cmd)
-          {
-             const ELEMENT_LIST *command_list
-               = get_cmd_global_multi_command (&document->global_commands, 
cmd);
-             if (command_list && command_list->number)
-               {
-                 size_t i;
-                 AV *av = newAV ();
-                 result_sv = newRV_inc ((SV *) av);
-                 for (i = 0; i < command_list->number; i++)
-                   {
-                     ELEMENT *element = command_list->list[i];
-                     register_element_handle_in_sv (element, document);
-
-                     av_push (av, newSVsv ((SV *) element->sv));
-                   }
-               }
-          }
-        if (result_sv)
-          RETVAL = result_sv;
-        else
-          RETVAL = newSV (0);
-    OUTPUT:
-        RETVAL
-
-void
-get_tree_element_index_entry (SV *, SV *element_sv)
-      PREINIT:
-        DOCUMENT *document;
-        SV *index_entry_sv = 0;
-        SV *index_info_sv = 0;
-     PPCODE:
-        document = get_sv_element_document (element_sv, 0);
-        if (document)
-          {
-            const ELEMENT *element
-              = get_sv_element_element (element_sv, document);
-            const INDEX_ENTRY_LOCATION *index_entry_info
-                        = lookup_extra_index_entry (element,
-                                                    AI_key_index_entry);
-
-            if (index_entry_info)
-              {
-                INDEX_ENTRY_AND_INDEX *idx_info
-                       = lookup_index_entry (index_entry_info,
-                                             &document->indices_info);
-                if (idx_info->index_entry)
-                  {
-                    const INDEX_ENTRY *index_entry = idx_info->index_entry;
-                    HV *entry_hv = build_index_entry (index_entry);
-                    HV *index_info_hv
-                     = build_single_index_info (idx_info->index);
-                    index_entry_sv = newRV_noinc ((SV *)entry_hv);
-                    index_info_sv = newRV_noinc ((SV *)index_info_hv);
-
-                    register_element_handle_in_sv (index_entry->entry_element,
-                                                   document);
-                    if (index_entry->entry_associated_element)
-                      register_element_handle_in_sv (
-                                index_entry->entry_associated_element,
-                                                     document);
-                  }
-                free (idx_info);
-              }
-          }
-
-        if (!index_entry_sv)
-          {
-            index_entry_sv = newSV (0);
-            index_info_sv = newSV (0);
-          }
-
-        EXTEND(SP, 2);
-        PUSHs(sv_2mortal(index_entry_sv));
-        PUSHs(sv_2mortal(index_info_sv));
-
-void
-comment_or_end_line (SV *, SV *element_sv)
-      PREINIT:
-        DOCUMENT *document;
-        SV *comment_sv = 0;
-        SV *end_line_sv = 0;
-     PPCODE:
-        document = get_sv_element_document (element_sv, 0);
-        if (document)
-          {
-            const ELEMENT *element
-              = get_sv_element_element (element_sv, document);
-            COMMENT_OR_END_LINE *end_line_info = comment_or_end_line (element);
-            if (end_line_info->comment)
-              comment_sv = newSVsv ((SV *)end_line_info->comment->sv);
-            else
-              end_line_sv = newSVpv_utf8 (end_line_info->end_line, 0);
-            non_perl_free (end_line_info);
-          }
-
-        if (!comment_sv)
-          comment_sv = newSV (0);
-        if (!end_line_sv)
-          end_line_sv = newSV (0);
-
-        EXTEND(SP, 2);
-        PUSHs(sv_2mortal(comment_sv));
-        PUSHs(sv_2mortal(end_line_sv));
-
-void
-argument_comment_end_line (SV *, SV *element_sv)
-      PREINIT:
-        DOCUMENT *document;
-        SV *comment_sv = 0;
-        SV *end_line_sv = 0;
-        SV *argument_sv = 0;
-     PPCODE:
-        document = get_sv_element_document (element_sv, 0);
-        if (document)
-          {
-            const ELEMENT *element
-              = get_sv_element_element (element_sv, document);
-            ARGUMENT_COMMENT_END_LINE *arg_end_l_info
-              = argument_comment_end_line (element);
-            if (arg_end_l_info->comment_end_line.comment)
-              comment_sv = newSVsv ((SV *)
-                 arg_end_l_info->comment_end_line.comment->sv);
-            else
-              end_line_sv = newSVpv_utf8 (
-                 arg_end_l_info->comment_end_line.end_line, 0);
-
-            if (arg_end_l_info->argument)
-              {
-                register_element_handle_in_sv (
-                    (ELEMENT *)arg_end_l_info->argument, document);
-                argument_sv = newSVsv ((SV *)arg_end_l_info->argument->sv);
-              }
-
-            non_perl_free (arg_end_l_info);
-          }
-
-        if (!argument_sv)
-          argument_sv = newSV (0);
-        if (!comment_sv)
-          comment_sv = newSV (0);
-        if (!end_line_sv)
-          end_line_sv = newSV (0);
-
-        EXTEND(SP, 3);
-        PUSHs(sv_2mortal(argument_sv));
-        PUSHs(sv_2mortal(comment_sv));
-        PUSHs(sv_2mortal(end_line_sv));
-
-SV *
-tree_element_item_itemize_prepended (SV *element_sv)
-      PREINIT:
-        DOCUMENT *document;
-      CODE:
-        document = get_sv_element_document (element_sv, 0);
-        if (document)
-          {
-            const ELEMENT *element
-              = get_sv_element_element (element_sv, document);
-            const ELEMENT *prepended
-              = item_itemize_prepended (element);
-            register_element_handle_in_sv ((ELEMENT *)prepended, document);
-            RETVAL = newSVsv ((SV *)prepended->sv);
-          }
-        else
-          RETVAL = newSV (0);
-    OUTPUT:
-        RETVAL
-
-SV *
-tree_element_index_content_element (SV *element_sv, int 
prefer_reference_element=0)
-      PREINIT:
-        DOCUMENT *document;
-      CODE:
-        document = get_sv_element_document (element_sv, 0);
-        if (document)
-          {
-            const ELEMENT *element
-              = get_sv_element_element (element_sv, document);
-            ELEMENT *idx_content = index_content_element (element,
-                                           prefer_reference_element);
-            register_element_handle_in_sv (idx_content, document);
-            RETVAL = newSVsv ((SV *)idx_content->sv);
-          }
-        else
-          RETVAL = newSV (0);
-    OUTPUT:
-        RETVAL
-
-SV *
-element_table_item_content_tree (SV *, SV *element_sv)
-      PREINIT:
-        DOCUMENT *document;
-      CODE:
-        document = get_sv_element_document (element_sv, 0);
-        if (document)
-          {
-            ELEMENT *converted_e;
-            const ELEMENT *element
-              = get_sv_element_element (element_sv, document);
-            TREE_ADDED_ELEMENTS *tree = table_item_content_tree (0, element);
-            if (tree)
-              {
-                build_texinfo_tree (tree->tree, 1);
-                converted_e = tree->tree;
-                if (tree->status == tree_added_status_elements_added)
-                  {
-                    size_t i;
-                    for (i = 0; i < tree->added.number; i++)
-                      {
-                        ELEMENT *added_e = tree->added.list[i];
-                        register_element_handle_in_sv (added_e, document);
-                      }
-                  }
-                free (tree->added.list);
-                free (tree);
-              }
-            else
-              {
-                converted_e = element->e.c->contents.list[0];
-                register_element_handle_in_sv (converted_e, document);
-              }
-            RETVAL = newSVsv ((SV *)converted_e->sv);
-         }
-        else
-          RETVAL = newSV (0);
-    OUTPUT:
-        RETVAL
-
-void
-element_find_element_authors (SV *element_sv, SV *quotation_authors_sv)
-      PREINIT:
-        DOCUMENT *document;
-      CODE:
-        document = get_sv_element_document (element_sv, 0);
-        if (document)
-          {
-            size_t i;
-            const ELEMENT *element
-              = get_sv_element_element (element_sv, document);
-            AV *quotation_authors_av = (AV *) SvRV (quotation_authors_sv);
-            CONST_ELEMENT_LIST *quotation_authors = new_const_element_list ();
-
-            find_element_authors (element, quotation_authors);
-
-            for (i = 0; i < quotation_authors->number; i++)
-              {
-                const ELEMENT *author = quotation_authors->list[i];
-
-                register_element_handle_in_sv ((ELEMENT *)author, document);
-
-                av_push (quotation_authors_av, newSVsv ((SV *)author->sv));
-              }
-            destroy_const_element_list (quotation_authors);
-          }
-
-SV *
-element_expand_verbatiminclude (SV *element_sv, SV 
*input_file_name_encoding_sv, int doc_encoding_for_input_file_name, SV 
*locale_encoding_sv, SV *include_directories_sv, ...)
-      PROTOTYPE: $$$$$;$$
-      PREINIT:
-        DOCUMENT *document;
-        SV *result_sv = 0;
-      CODE:
-        document = get_sv_element_document (element_sv, 0);
-        if (document)
-          {
-            const char *input_file_name_encoding = 0;
-            const char *locale_encoding = 0;
-            STRING_LIST *include_directories = 0;
-            const ELEMENT *element
-              = get_sv_element_element (element_sv, document);
-            ELEMENT *result;
-            SV *converter_sv = 0;
-            CONVERTER *converter = 0;
-            ERROR_MESSAGE_LIST *error_messages = 0;
-
-            if (SvOK (input_file_name_encoding_sv))
-              input_file_name_encoding
-                = (char *)SvPVutf8_nolen (input_file_name_encoding_sv);
-            if (SvOK (locale_encoding_sv))
-              locale_encoding  = (char *)SvPVutf8_nolen (locale_encoding_sv);
-
-            if (items > 7 && SvOK(ST(7)))
-              converter_sv = ST(7);
-
-            if (converter_sv)
-              converter = get_sv_converter (converter_sv, 0);
-
-            if (converter)
-              error_messages = &converter->error_messages;
-            else if (converter_sv)
-              {
-                error_messages = (ERROR_MESSAGE_LIST *)
-                   non_perl_malloc (sizeof (ERROR_MESSAGE_LIST));
-                memset (error_messages, 0, sizeof (ERROR_MESSAGE_LIST));
-              }
-
-            if (include_directories_sv)
-              {
-                include_directories = new_string_list ();
-                add_svav_to_string_list (include_directories_sv,
-                                         include_directories, svt_dir);
-              }
-            result = expand_verbatiminclude (input_file_name_encoding,
-                     doc_encoding_for_input_file_name, locale_encoding,
-                     include_directories, 0, error_messages,
-                     &document->global_info, element);
-            if (result)
-              {
-                result_sv = build_texinfo_tree (result, 1);
-                register_element_handle_in_sv (result, document);
-              }
-            if (!converter && converter_sv)
-              {
-                pass_errors_to_registrar (error_messages, converter_sv, 0, 0);
-                wipe_error_message_list (error_messages);
-                free (error_messages);
-              }
-
-            if (include_directories)
-              destroy_strings_list (include_directories);
-          }
-
-        if (result_sv)
-          RETVAL = SvREFHVCNT_inc (result_sv);
-        else
-          RETVAL = newSV (0);
-    OUTPUT:
-        RETVAL
-
-SV *
-element_expand_today (SV *build_tree_sv, SV *test_sv, SV 
*lang_translations_sv, SV *debug_sv, SV *converter_in)
-      PREINIT:
-        DOCUMENT *document;
-     CODE:
-        document = get_converter_sv_document (converter_in, 0);
-        if (document)
-          {
-            int build_tree = 0;
-            int debug = 0;
-            int test = 0;
-            LANG_TRANSLATION *lang_translations
-              = get_lang_translations_sv (lang_translations_sv);
-
-            if (SvOK (build_tree_sv))
-              build_tree = SvIV (build_tree_sv);
-            if (SvOK (debug_sv))
-              debug = SvIV (debug_sv);
-            if (SvOK (test_sv))
-              test = SvIV (test_sv);
-
-            /* we do not set the converter argument even when we could, nor
-               the translation function, although we could check the converter
-               output format and set it if HTML, assuming that there is no
-               need for a specific translation function for the output formats
-               using this function
-             */
-            ELEMENT *e_today = expand_today (test, lang_translations,
-                                             debug, 0, 0);
-            if (build_tree)
-              build_texinfo_tree (e_today, 1);
-            register_element_handle_in_sv (e_today, document);
-
-            RETVAL = SvREFHVCNT_inc ((SV *) e_today->sv);
-          }
-        else
-          RETVAL = newSV (0);
-    OUTPUT:
-        RETVAL
-
-SV *
-tree_elements_sections_list (SV *converter_in)
-      PREINIT:
-        DOCUMENT *document;
-     CODE:
-        document = get_converter_sv_document (converter_in, 0);
-        if (document)
-          RETVAL = build_tree_elements_sections_list (document);
-        else
-          RETVAL = newSV (0);
-    OUTPUT:
-        RETVAL
-
-SV *
-tree_elements_nodes_list (SV *converter_in)
-      PREINIT:
-        DOCUMENT *document;
-     CODE:
-        document = get_converter_sv_document (converter_in, 0);
-        if (document)
-          RETVAL = build_tree_elements_nodes_list (document);
-        else
-          RETVAL = newSV (0);
-    OUTPUT:
-        RETVAL
-
-SV *
-tree_elements_headings_list (SV *converter_in)
-      PREINIT:
-        DOCUMENT *document;
-     CODE:
-        document = get_converter_sv_document (converter_in, 0);
-        if (document)
-          RETVAL = build_tree_elements_headings_list (document);
-        else
-          RETVAL = newSV (0);
-    OUTPUT:
-        RETVAL
-
-# following is in TreeElements.  Many accessors are not actually used
-# because using an accessor is much slower than accessing hash values in Perl
+# Some accessors are not actually used  because using an accessor is much
+# slower than accessing hash values in Perl
 SV *
 new (SV *element_hash)
     PREINIT:
@@ -938,51 +453,3 @@ add_to_element_contents (SV *parent_element_sv, SV 
*element_sv)
         hv_store (element_hv, "parent", strlen ("parent"),
                   newSVsv (element_sv), 0);
 
-SV *
-element_gdt (string, SV *lang_translations_sv, SV *document_sv, ...)
-        const char *string = (char *)SvPVutf8_nolen($arg);
-      PROTOTYPE: $$$;$$$$
-      PREINIT:
-        DOCUMENT *document;
-        SV *replaced_substrings_sv = 0;
-        int debug = 0;
-        const char *translation_context = 0;
-        int build_tree = 0;
-      CODE:
-        if (items > 3 && SvOK(ST(3)))
-          replaced_substrings_sv = ST(3);
-        if (items > 4 && SvOK(ST(4)))
-          build_tree = SvIV (ST(4));
-        if (items > 5 && SvOK(ST(5)))
-          debug = SvIV (ST(5));
-        if (items > 6 && SvOK(ST(6)))
-          translation_context = (char *)SvPVutf8_nolen(ST(6));
-
-        document = get_sv_document_document (document_sv, "element_gdt");
-        if (document)
-          {
-            NAMED_STRING_ELEMENT_LIST *replaced_substrings = 0;
-            LANG_TRANSLATION *lang_translations
-              = get_lang_translations_sv (lang_translations_sv);
-            ELEMENT *e_result;
-
-            if (replaced_substrings_sv)
-              {
-                replaced_substrings
-                  = get_replaced_substrings (replaced_substrings_sv);
-              }
-            e_result = gdt_tree (string, document, lang_translations,
-                                 replaced_substrings, debug,
-                                 translation_context);
-            if (build_tree)
-              build_texinfo_tree (e_result, 1);
-            register_element_handle_in_sv (e_result, document);
-            if (replaced_substrings)
-              destroy_named_string_element_list (replaced_substrings);
-            RETVAL = SvREFHVCNT_inc ((SV *)e_result->sv);
-          }
-        else
-          RETVAL = newSV (0);
-    OUTPUT:
-        RETVAL
-



reply via email to

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