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, 29 Sep 2024 08:53:22 -0400 (EDT)

branch: master
commit 612b7df014418ac5e1d1f08916796dceacf08803
Author: Patrice Dumas <pertusus@free.fr>
AuthorDate: Thu Jun 27 19:46:54 2024 +0200

    * tp/Texinfo/XS/convert/convert_html.c (convert_xref_commands),
    tp/Texinfo/XS/main/extra.c (lookup_extra_element)
    (lookup_extra_container), tp/Texinfo/XS/main/manipulate_tree.c
    (copy_container_contents): separate extra_container from
    extra_element, by adding a specific function to lookup extra
    container, lookup_extra_container.  Add copy_container_contents to
    create a new element to be used as extra_container and refer to the
    contents of another element.  Use it to add containers instead of
    elements.  Replace lookup_extra_element by lookup_extra_container for
    all the callers with extra_container keys.
---
 ChangeLog                                       | 13 +++++++++
 tp/Texinfo/XS/convert/convert_html.c            | 38 ++++++++++++-------------
 tp/Texinfo/XS/main/convert_to_texinfo.c         |  4 +--
 tp/Texinfo/XS/main/extra.c                      | 20 ++++++++++++-
 tp/Texinfo/XS/main/extra.h                      |  1 +
 tp/Texinfo/XS/main/manipulate_tree.c            | 27 ++++++++++++++++--
 tp/Texinfo/XS/main/manipulate_tree.h            |  4 +++
 tp/Texinfo/XS/main/output_unit.c                |  2 +-
 tp/Texinfo/XS/structuring_transfo/structuring.c | 34 +++++++++++-----------
 9 files changed, 101 insertions(+), 42 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 2f743b9fa1..ca62f4900f 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,16 @@
+2024-06-27  Patrice Dumas  <pertusus@free.fr>
+
+       * tp/Texinfo/XS/convert/convert_html.c (convert_xref_commands),
+       tp/Texinfo/XS/main/extra.c (lookup_extra_element)
+       (lookup_extra_container), tp/Texinfo/XS/main/manipulate_tree.c
+       (copy_container_contents): separate extra_container from
+       extra_element, by adding a specific function to lookup extra
+       container, lookup_extra_container.  Add copy_container_contents to
+       create a new element to be used as extra_container and refer to the
+       contents of another element.  Use it to add containers instead of
+       elements.  Replace lookup_extra_element by lookup_extra_container for
+       all the callers with extra_container keys.
+
 2024-06-26  Patrice Dumas  <pertusus@free.fr>
 
        Add some const
diff --git a/tp/Texinfo/XS/convert/convert_html.c 
b/tp/Texinfo/XS/convert/convert_html.c
index f7ec24fdcb..8078eedda4 100644
--- a/tp/Texinfo/XS/convert/convert_html.c
+++ b/tp/Texinfo/XS/convert/convert_html.c
@@ -3164,9 +3164,9 @@ external_node_href (CONVERTER *self, const ELEMENT 
*external_node,
   const char *extension = 0;
   int target_split = 0;
   char *normalized = lookup_extra_string (external_node, AI_key_normalized);
-  const ELEMENT *node_contents = lookup_extra_element (external_node,
+  const ELEMENT *node_contents = lookup_extra_container (external_node,
                                                  AI_key_node_content);
-  const ELEMENT *manual_content = lookup_extra_element (external_node,
+  const ELEMENT *manual_content = lookup_extra_container (external_node,
                                                   AI_key_manual_content);
 
   TARGET_FILENAME *target_filename =
@@ -3682,7 +3682,7 @@ html_command_href (CONVERTER *self, const ELEMENT 
*command,
                    const ELEMENT *source_command,
                    const char *specified_target)
 {
-  const ELEMENT *manual_content = lookup_extra_element (command,
+  const ELEMENT *manual_content = lookup_extra_container (command,
                                                   AI_key_manual_content);
   if (manual_content)
     {
@@ -3995,7 +3995,7 @@ html_external_command_tree (CONVERTER *self, const 
ELEMENT *command,
   ELEMENT *open_p;
   ELEMENT *close_p;
 
-  ELEMENT *node_content = lookup_extra_element (command,
+  ELEMENT *node_content = lookup_extra_container (command,
                                                 AI_key_node_content);
 
   tree = new_tree_added_elements (tree_added_status_elements_added);
@@ -4022,7 +4022,7 @@ TREE_ADDED_ELEMENTS *
 html_command_tree (CONVERTER *self, const ELEMENT *command, int no_number)
 {
 
-  ELEMENT *manual_content = lookup_extra_element (command,
+  ELEMENT *manual_content = lookup_extra_container (command,
                                                   AI_key_manual_content);
   if (manual_content)
     {
@@ -4131,7 +4131,7 @@ html_command_text (CONVERTER *self, const ELEMENT 
*command,
                    const enum html_text_type type)
 {
   char *result;
-  ELEMENT *manual_content = lookup_extra_element (command,
+  ELEMENT *manual_content = lookup_extra_container (command,
                                                   AI_key_manual_content);
   if (manual_content)
     {
@@ -12438,7 +12438,7 @@ convert_xref_commands (CONVERTER *self, const enum 
command_id cmd,
   if (cmd != CM_inforef && !book && !file && arg_node)
     {
       const char *normalized = lookup_extra_string (arg_node, 
AI_key_normalized);
-      const ELEMENT *manual_content = lookup_extra_element (arg_node,
+      const ELEMENT *manual_content = lookup_extra_container (arg_node,
                                                       AI_key_manual_content);
       if (normalized && !manual_content)
         {
@@ -12594,14 +12594,14 @@ convert_xref_commands (CONVERTER *self, const enum 
command_id cmd,
 
       if (arg_node)
         {
-          node_content = lookup_extra_element (arg_node, AI_key_node_content);
+          node_content = lookup_extra_container (arg_node, 
AI_key_node_content);
           if (node_content)
             {
               const char *normalized = lookup_extra_string (arg_node,
                                                             AI_key_normalized);
               label_element = new_element (ET_NONE);
-              add_extra_element (label_element, AI_key_node_content,
-                                 node_content);
+              add_extra_container (label_element, AI_key_node_content,
+                                   copy_container_contents (node_content));
               if (normalized)
                 add_extra_string_dup (label_element, AI_key_normalized,
                                       normalized);
@@ -12613,13 +12613,12 @@ convert_xref_commands (CONVERTER *self, const enum 
command_id cmd,
         {
           if (!label_element)
             label_element = new_element (ET_NONE);
-          /* TODO would be better to have add_extra_element argument const */
-          add_extra_element (label_element, AI_key_manual_content,
-                             (ELEMENT *)file_arg->arg_tree);
+          add_extra_container (label_element, AI_key_manual_content,
+                               copy_container_contents (file_arg->arg_tree));
         }
       else
         {
-          manual_content = lookup_extra_element (arg_node,
+          manual_content = lookup_extra_container (arg_node,
                                                  AI_key_manual_content);
         }
 
@@ -12630,9 +12629,10 @@ convert_xref_commands (CONVERTER *self, const enum 
command_id cmd,
           if (!label_element)
             label_element = new_element (ET_NONE);
 
-          add_extra_element (label_element, AI_key_manual_content,
-                             manual_content);
+          add_extra_container (label_element, AI_key_manual_content,
+                               copy_container_contents (manual_content));
 
+          /* convert the manual part to file string */
           root_code = new_element (ET__code);
 
           add_to_contents_as_array (root_code, manual_content);
@@ -14787,7 +14787,7 @@ convert_menu_entry_type (CONVERTER *self, const enum 
element_type type,
         menu_entry_node = arg;
     }
 
-  manual_content = lookup_extra_element (menu_entry_node,
+  manual_content = lookup_extra_container (menu_entry_node,
                                          AI_key_manual_content);
 
   if (manual_content)
@@ -15026,10 +15026,10 @@ convert_menu_entry_type (CONVERTER *self, const enum 
element_type type,
           if (!name)
             {
               const ELEMENT *manual_content
-                           = lookup_extra_element (menu_entry_node,
+                           = lookup_extra_container (menu_entry_node,
                                                    AI_key_manual_content);
               ELEMENT *node_content
-                         = lookup_extra_element (menu_entry_node,
+                         = lookup_extra_container (menu_entry_node,
                                                  AI_key_node_content);
               if (manual_content)
                 {
diff --git a/tp/Texinfo/XS/main/convert_to_texinfo.c 
b/tp/Texinfo/XS/main/convert_to_texinfo.c
index 02cc510f1e..bb067f07c3 100644
--- a/tp/Texinfo/XS/main/convert_to_texinfo.c
+++ b/tp/Texinfo/XS/main/convert_to_texinfo.c
@@ -242,7 +242,7 @@ link_element_to_texi (const ELEMENT *element)
   text_init (&result);
   text_append (&result, "");
 
-  element_link = lookup_extra_element (element, AI_key_manual_content);
+  element_link = lookup_extra_container (element, AI_key_manual_content);
   if (element_link)
     {
       char *manual_texi = convert_contents_to_texinfo (element_link);
@@ -252,7 +252,7 @@ link_element_to_texi (const ELEMENT *element)
       free (manual_texi);
     }
 
-  element_link = lookup_extra_element (element, AI_key_node_content);
+  element_link = lookup_extra_container (element, AI_key_node_content);
   if (element_link)
     {
       char *node_texi = convert_contents_to_texinfo (element_link);
diff --git a/tp/Texinfo/XS/main/extra.c b/tp/Texinfo/XS/main/extra.c
index 22bcf26109..6cf26e055c 100644
--- a/tp/Texinfo/XS/main/extra.c
+++ b/tp/Texinfo/XS/main/extra.c
@@ -200,7 +200,7 @@ lookup_extra_element (const ELEMENT *e, enum ai_key_name 
key)
   k = lookup_associated_info (&e->e.c->extra_info, key);
   if (!k)
     return 0;
-  else if (k->type != extra_element && k->type != extra_container)
+  else if (k->type != extra_element)
     {
       char *msg;
       xasprintf (&msg, "Bad type for lookup_extra_element: %s: %d",
@@ -229,6 +229,24 @@ lookup_extra_element_oot (const ELEMENT *e, enum 
ai_key_name key)
   return k->k.element;
 }
 
+ELEMENT *
+lookup_extra_container (const ELEMENT *e, enum ai_key_name key)
+{
+  const KEY_PAIR *k;
+  k = lookup_associated_info (&e->e.c->extra_info, key);
+  if (!k)
+    return 0;
+  else if (k->type != extra_container)
+    {
+      char *msg;
+      xasprintf (&msg, "Bad type for lookup_extra_element: %s: %d",
+                ai_key_names[key], k->type);
+      fatal (msg);
+      free (msg);
+    }
+  return k->k.element;
+}
+
 char *
 lookup_extra_string (const ELEMENT *e, enum ai_key_name key)
 {
diff --git a/tp/Texinfo/XS/main/extra.h b/tp/Texinfo/XS/main/extra.h
index 5c832ec2c2..d028cd4bed 100644
--- a/tp/Texinfo/XS/main/extra.h
+++ b/tp/Texinfo/XS/main/extra.h
@@ -34,6 +34,7 @@ void add_extra_integer (ELEMENT *e, enum ai_key_name key, int 
value);
 KEY_PAIR *lookup_extra (const ELEMENT *e, enum ai_key_name key);
 ELEMENT *lookup_extra_element (const ELEMENT *e, enum ai_key_name key);
 ELEMENT *lookup_extra_element_oot (const ELEMENT *e, enum ai_key_name key);
+ELEMENT *lookup_extra_container (const ELEMENT *e, enum ai_key_name key);
 ELEMENT_LIST *lookup_extra_contents (const ELEMENT *e, enum ai_key_name key);
 const STRING_LIST *lookup_extra_misc_args (const ELEMENT *e,
                                            enum ai_key_name key);
diff --git a/tp/Texinfo/XS/main/manipulate_tree.c 
b/tp/Texinfo/XS/main/manipulate_tree.c
index ad7e8489aa..731c171901 100644
--- a/tp/Texinfo/XS/main/manipulate_tree.c
+++ b/tp/Texinfo/XS/main/manipulate_tree.c
@@ -356,6 +356,29 @@ copy_contents (const ELEMENT *element, enum element_type 
type)
 
 
 
+/* This function is designed to create a new element passed in
+   argument of add_extra_container to be registered as extra_container,
+   with CONTAINER contents.  The new element (but not the contents) will
+   be destroyed when the element it is registered in with
+   add_extra_container is destroyed.
+ */
+ELEMENT *
+copy_container_contents (const ELEMENT *container)
+{
+  ELEMENT *result;
+  if (container->e.c->cmd)
+    result = new_command_element (container->e.c->cmd,
+                                  container->type);
+  else
+    result = new_element (container->type);
+
+  insert_slice_into_contents (result, 0, container,
+                              0, container->e.c->contents.number);
+  return result;
+}
+
+
+
 void
 add_source_mark (SOURCE_MARK *source_mark, ELEMENT *e)
 {
@@ -1022,7 +1045,7 @@ normalized_menu_entry_internal_node (const ELEMENT *entry)
       const ELEMENT *content = entry->e.c->contents.list[i];
       if (content->type == ET_menu_entry_node)
         {
-          if (!lookup_extra_element (content, AI_key_manual_content))
+          if (!lookup_extra_container (content, AI_key_manual_content))
             {
               return lookup_extra_string (content, AI_key_normalized);
             }
@@ -1076,7 +1099,7 @@ first_menu_node (const ELEMENT *node, LABEL_LIST 
*identifiers_target)
                       if (content->type == ET_menu_entry_node)
                         {
                           const ELEMENT *manual_content
-                           = lookup_extra_element (content,
+                           = lookup_extra_container (content,
                                                   AI_key_manual_content);
                           /* a reference to an external manual */
                           if (manual_content)
diff --git a/tp/Texinfo/XS/main/manipulate_tree.h 
b/tp/Texinfo/XS/main/manipulate_tree.h
index 6da672e8be..32f8756fd3 100644
--- a/tp/Texinfo/XS/main/manipulate_tree.h
+++ b/tp/Texinfo/XS/main/manipulate_tree.h
@@ -26,6 +26,10 @@ ELEMENT *copy_contents (const ELEMENT *element, enum 
element_type type);
 
 
 
+ELEMENT *copy_container_contents (const ELEMENT *container);
+
+
+
 void add_source_mark (SOURCE_MARK *source_mark, ELEMENT *e);
 size_t relocate_source_marks (SOURCE_MARK_LIST *source_mark_list, ELEMENT 
*new_e,
                               size_t previous_position, size_t 
current_position);
diff --git a/tp/Texinfo/XS/main/output_unit.c b/tp/Texinfo/XS/main/output_unit.c
index e0d1a6d368..97ab6fc5f4 100644
--- a/tp/Texinfo/XS/main/output_unit.c
+++ b/tp/Texinfo/XS/main/output_unit.c
@@ -502,7 +502,7 @@ label_target_unit_element (const ELEMENT *label,
                            OUTPUT_UNIT_LIST *external_node_target_units)
 {
   const ELEMENT *manual_content
-    = lookup_extra_element (label, AI_key_manual_content);
+    = lookup_extra_container (label, AI_key_manual_content);
   if (manual_content)
     {
   /* setup an output_unit for consistency with regular output units */
diff --git a/tp/Texinfo/XS/structuring_transfo/structuring.c 
b/tp/Texinfo/XS/structuring_transfo/structuring.c
index 51a2f5d511..abc9aa8a6f 100644
--- a/tp/Texinfo/XS/structuring_transfo/structuring.c
+++ b/tp/Texinfo/XS/structuring_transfo/structuring.c
@@ -433,7 +433,7 @@ check_menu_entry (DOCUMENT *document, enum command_id cmd,
         }
       else
         {
-          const ELEMENT *node_content = lookup_extra_element (menu_entry_node,
+          const ELEMENT *node_content = lookup_extra_container 
(menu_entry_node,
                                                           AI_key_node_content);
           if (!check_node_same_texinfo_code (menu_node, node_content))
             {
@@ -865,8 +865,8 @@ set_menus_node_directions (DOCUMENT *document)
                       if (content->type == ET_menu_entry_node)
                         {
                           const ELEMENT *manual_content
-                           = lookup_extra_element (content,
-                                                   AI_key_manual_content);
+                           = lookup_extra_container (content,
+                                                     AI_key_manual_content);
 
                           if (!manual_content)
                             {
@@ -902,10 +902,10 @@ set_menus_node_directions (DOCUMENT *document)
                       if (previous_node)
                         {
                           const ELEMENT *manual_content
-                           = lookup_extra_element (menu_node,
+                           = lookup_extra_container (menu_node,
                                                    AI_key_manual_content);
                           const ELEMENT *prev_manual_content
-                           = lookup_extra_element (previous_node,
+                           = lookup_extra_container (previous_node,
                                                    AI_key_manual_content);
                           if (!manual_content)
                             {
@@ -949,7 +949,7 @@ set_menus_node_directions (DOCUMENT *document)
                       if (content->type == ET_menu_entry_node)
                         {
                           const ELEMENT *manual_content
-                           = lookup_extra_element (content,
+                           = lookup_extra_container (content,
                                                    AI_key_manual_content);
 
                           if (!manual_content)
@@ -1114,7 +1114,7 @@ complete_node_tree_with_menus (DOCUMENT *document)
                       ELEMENT *elt_menu_direction
                        = menu_directions->list[d];
                       const ELEMENT *menu_direction_manual_content
-                        = lookup_extra_element (elt_menu_direction,
+                        = lookup_extra_container (elt_menu_direction,
                                                 AI_key_manual_content);
                       if (!menu_direction_manual_content)
                         {
@@ -1155,7 +1155,7 @@ complete_node_tree_with_menus (DOCUMENT *document)
 
                   node_directions->list[D_next] = menu_child;
                   const ELEMENT *menu_child_manual_content
-                    = lookup_extra_element (menu_child, AI_key_manual_content);
+                   = lookup_extra_container (menu_child, 
AI_key_manual_content);
                   if (!menu_child_manual_content)
                     {
                       const ELEMENT_LIST *child_node_directions
@@ -1219,11 +1219,11 @@ complete_node_tree_with_menus (DOCUMENT *document)
                       const ELEMENT *menu_direction
                        = menu_directions->list[d];
                       const ELEMENT *menu_dir_manual_content
-                       = lookup_extra_element (menu_direction,
-                                               AI_key_manual_content);
+                       = lookup_extra_container (menu_direction,
+                                                 AI_key_manual_content);
                       const ELEMENT *node_dir_manual_content
-                       = lookup_extra_element (node_directions->list[d],
-                                               AI_key_manual_content);
+                       = lookup_extra_container (node_directions->list[d],
+                                                 AI_key_manual_content);
                       if (!menu_dir_manual_content && !node_dir_manual_content)
                         {
                           char *node_texi = target_element_to_texi_label 
(node);
@@ -1256,7 +1256,7 @@ complete_node_tree_with_menus (DOCUMENT *document)
             up_node = node_directions->list[D_up];
           if (up_node)
             {
-              const ELEMENT *manual_content = lookup_extra_element (up_node,
+              const ELEMENT *manual_content = lookup_extra_container (up_node,
                                                        AI_key_manual_content);
               int is_target = (node->flags & EF_is_target);
               const ELEMENT_LIST *menus
@@ -1431,7 +1431,7 @@ nodes_tree (DOCUMENT *document)
               ELEMENT *direction_element = node->e.c->args.list[i];
               int direction = i - 1;
               const ELEMENT *manual_content
-                            = lookup_extra_element (direction_element,
+                            = lookup_extra_container (direction_element,
                                                     AI_key_manual_content);
               if (manual_content)
                 {
@@ -1458,7 +1458,7 @@ nodes_tree (DOCUMENT *document)
                                || options->novalidate.o.integer <= 0)
                             {
                               ELEMENT *direction_node_content
-                                = lookup_extra_element (direction_element,
+                                = lookup_extra_container (direction_element,
                                                       AI_key_node_content);
                                if (!check_node_same_texinfo_code (node_target,
                                                        direction_node_content))
@@ -1533,7 +1533,7 @@ associate_internal_references (DOCUMENT *document)
         label_element = ref->e.c->args.list[0];
 
       label_node_content
-          = lookup_extra_element (label_element, AI_key_node_content);
+          = lookup_extra_container (label_element, AI_key_node_content);
       if (label_node_content)
         {
           char *normalized
@@ -1579,7 +1579,7 @@ associate_internal_references (DOCUMENT *document)
             }
           else
             {
-              label_node_content = lookup_extra_element (label_element,
+              label_node_content = lookup_extra_container (label_element,
                                                          AI_key_node_content);
               if ((!options)
                   || options->novalidate.o.integer <= 0)



reply via email to

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