texinfo-commits
[Top][All Lists]
Advanced

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

branch master updated: * tp/Texinfo/XS/convert/convert_html.c (convert_p


From: Patrice Dumas
Subject: branch master updated: * tp/Texinfo/XS/convert/convert_html.c (convert_printindex_command), tp/Texinfo/XS/main/build_perl_info.c (build_additional_info), tp/Texinfo/XS/main/extra.c (add_extra_index_entry) (lookup_extra_index_entry), tp/Texinfo/XS/main/manipulate_tree.c (copy_associated_info), tp/Texinfo/XS/main/tree.c (destroy_associated_info), tp/Texinfo/XS/main/tree_types.h (INDEX_ENTRY_LOCATION, KEY_PAIR, enum extra_type), tp/Texinfo/XS/parsetexi/indices.c (enter_index_entry), tp/Texinfo/XS/structuring_transf [...]
Date: Sun, 29 Sep 2024 05:17:47 -0400

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 bc1489a61a * tp/Texinfo/XS/convert/convert_html.c 
(convert_printindex_command), tp/Texinfo/XS/main/build_perl_info.c 
(build_additional_info), tp/Texinfo/XS/main/extra.c (add_extra_index_entry) 
(lookup_extra_index_entry), tp/Texinfo/XS/main/manipulate_tree.c 
(copy_associated_info), tp/Texinfo/XS/main/tree.c (destroy_associated_info), 
tp/Texinfo/XS/main/tree_types.h (INDEX_ENTRY_LOCATION, KEY_PAIR, enum 
extra_type), tp/Texinfo/XS/parsetexi/indices.c (enter_index_entry), tp/Texinfo/ 
[...]
bc1489a61a is described below

commit bc1489a61adf82bbdc1c31396345d8e0acd78cdc
Author: Patrice Dumas <pertusus@free.fr>
AuthorDate: Mon Jun 10 23:59:26 2024 +0200

    * tp/Texinfo/XS/convert/convert_html.c (convert_printindex_command),
    tp/Texinfo/XS/main/build_perl_info.c (build_additional_info),
    tp/Texinfo/XS/main/extra.c (add_extra_index_entry)
    (lookup_extra_index_entry), tp/Texinfo/XS/main/manipulate_tree.c
    (copy_associated_info), tp/Texinfo/XS/main/tree.c
    (destroy_associated_info), tp/Texinfo/XS/main/tree_types.h
    (INDEX_ENTRY_LOCATION, KEY_PAIR, enum extra_type),
    tp/Texinfo/XS/parsetexi/indices.c (enter_index_entry),
    tp/Texinfo/XS/structuring_transfo/transformations.c
    (lookup_index_entry, relate_index_entries_to_table_items_in): add
    extra_index_entry extra type that represents the location of an index
    entry, with index name and number in index.  Use it instead of
    misc_args for index entries.
---
 ChangeLog                                          | 16 +++++++++++
 tp/Texinfo/XS/convert/convert_html.c               |  9 ++----
 tp/Texinfo/XS/main/build_perl_info.c               | 16 +++++++++++
 tp/Texinfo/XS/main/extra.c                         | 26 ++++++++++++++++++
 tp/Texinfo/XS/main/extra.h                         |  3 ++
 tp/Texinfo/XS/main/manipulate_tree.c               |  9 ++++++
 tp/Texinfo/XS/main/tree.c                          |  4 ++-
 tp/Texinfo/XS/main/tree_types.h                    | 23 ++++++++++++----
 tp/Texinfo/XS/parsetexi/indices.c                  | 14 ++++------
 .../XS/structuring_transfo/transformations.c       | 32 +++++++++-------------
 10 files changed, 111 insertions(+), 41 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 0526c18314..a97c3efc4b 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,19 @@
+2024-06-10  Patrice Dumas  <pertusus@free.fr>
+
+       * tp/Texinfo/XS/convert/convert_html.c (convert_printindex_command),
+       tp/Texinfo/XS/main/build_perl_info.c (build_additional_info),
+       tp/Texinfo/XS/main/extra.c (add_extra_index_entry)
+       (lookup_extra_index_entry), tp/Texinfo/XS/main/manipulate_tree.c
+       (copy_associated_info), tp/Texinfo/XS/main/tree.c
+       (destroy_associated_info), tp/Texinfo/XS/main/tree_types.h
+       (INDEX_ENTRY_LOCATION, KEY_PAIR, enum extra_type),
+       tp/Texinfo/XS/parsetexi/indices.c (enter_index_entry),
+       tp/Texinfo/XS/structuring_transfo/transformations.c
+       (lookup_index_entry, relate_index_entries_to_table_items_in): add 
+       extra_index_entry extra type that represents the location of an index
+       entry, with index name and number in index.  Use it instead of
+       misc_args for index entries.
+
 2024-06-10  Patrice Dumas  <pertusus@free.fr>
 
        * tp/Texinfo/XS/main/build_perl_info.c (element_to_perl_hash): nest
diff --git a/tp/Texinfo/XS/convert/convert_html.c 
b/tp/Texinfo/XS/convert/convert_html.c
index fd13755406..d31680aaff 100644
--- a/tp/Texinfo/XS/convert/convert_html.c
+++ b/tp/Texinfo/XS/convert/convert_html.c
@@ -13027,7 +13027,6 @@ convert_printindex_command (CONVERTER *self, const enum 
command_id cmd,
 
       for (j = 0; j < letter_entry->entries_number; j++)
         {
-          int status;
           int level;
           int in_code;
           int *formatted_index_entry_nr;
@@ -13051,11 +13050,9 @@ convert_printindex_command (CONVERTER *self, const 
enum command_id cmd,
           ELEMENT *entry_ref_tree;
           INDEX_ENTRY *index_entry_ref = letter_entry->entries[j];
           ELEMENT *main_entry_element = index_entry_ref->entry_element;
-          const ELEMENT_LIST *index_entry_info
-             = lookup_extra_misc_args (main_entry_element, "index_entry");
-          int entry_number
-             = lookup_extra_integer (index_entry_info->list[1],
-                                     "integer", &status);
+          const INDEX_ENTRY_LOCATION *index_entry_info
+             = lookup_extra_index_entry (main_entry_element, "index_entry");
+          int entry_number = index_entry_info->number;
           entry_nr++;
 
           if (self->conf->NO_TOP_NODE_OUTPUT.o.integer > 0)
diff --git a/tp/Texinfo/XS/main/build_perl_info.c 
b/tp/Texinfo/XS/main/build_perl_info.c
index 96f59420d5..acfedc0587 100644
--- a/tp/Texinfo/XS/main/build_perl_info.c
+++ b/tp/Texinfo/XS/main/build_perl_info.c
@@ -420,6 +420,22 @@ build_additional_info (HV *extra, const ASSOCIATED_INFO *a,
                 }
               break;
               }
+            case extra_index_entry:
+              {
+              const INDEX_ENTRY_LOCATION *entry_loc = k->k.index_entry;
+              AV *av = newAV ();
+              SV *sv;
+
+              av_unshift (av, 2);
+
+              STORE(newRV_inc ((SV *)av));
+              sv = newSVpv_utf8 (entry_loc->index_name,
+                                 strlen (entry_loc->index_name));
+              av_store (av, 0, sv);
+              sv = newSViv ((IV) entry_loc->number);
+              av_store (av, 1, sv);
+              break;
+              }
             default:
               fatal ("store_additional_info: unknown extra type");
               break;
diff --git a/tp/Texinfo/XS/main/extra.c b/tp/Texinfo/XS/main/extra.c
index 6d119ff1ee..cdbc552a74 100644
--- a/tp/Texinfo/XS/main/extra.c
+++ b/tp/Texinfo/XS/main/extra.c
@@ -148,6 +148,15 @@ add_extra_misc_args (ELEMENT *e, char *key, ELEMENT_LIST 
*value)
   k->k.list = value;
 }
 
+void
+add_extra_index_entry (ELEMENT *e, char *key, INDEX_ENTRY_LOCATION *value)
+{
+  if (!value) return;
+  KEY_PAIR *k = get_associated_info_key (&e->e.c->extra_info, key,
+                                         extra_index_entry);
+  k->k.index_entry = value;
+}
+
 void
 add_extra_string (ELEMENT *e, const char *key, char *value)
 {
@@ -328,6 +337,23 @@ lookup_extra_misc_args (const ELEMENT *e, const char *key)
   return k->k.list;
 }
 
+const INDEX_ENTRY_LOCATION *
+lookup_extra_index_entry (const ELEMENT *e, const char *key)
+{
+  KEY_PAIR *k = lookup_extra (e, key);
+  if (!k)
+    return 0;
+  else if (k->type != extra_index_entry)
+    {
+      char *msg;
+      xasprintf (&msg, "Bad type for lookup_extra_misc_args: %s: %d",
+                 key, k->type);
+      fatal (msg);
+      free (msg);
+    }
+  return k->k.index_entry;
+}
+
 /* only called in tree copy to optimize for speed */
 KEY_PAIR *
 lookup_associated_info_by_index (const ASSOCIATED_INFO *a,
diff --git a/tp/Texinfo/XS/main/extra.h b/tp/Texinfo/XS/main/extra.h
index 262b41b0da..53862138fc 100644
--- a/tp/Texinfo/XS/main/extra.h
+++ b/tp/Texinfo/XS/main/extra.h
@@ -27,6 +27,7 @@ void add_extra_container (ELEMENT *e, char *key, ELEMENT 
*value);
 const ELEMENT_LIST *add_extra_directions (ELEMENT *e, const char *key);
 void add_extra_text (ELEMENT *e, char *key, ELEMENT *value);
 void add_extra_misc_args (ELEMENT *e, char *key, ELEMENT_LIST *value);
+void add_extra_index_entry (ELEMENT *e, char *key, INDEX_ENTRY_LOCATION 
*value);
 void add_extra_string (ELEMENT *e, const char *key, char *value);
 void add_extra_string_dup (ELEMENT *e, const char *key, const char *value);
 void add_extra_integer (ELEMENT *e, char *key, long value);
@@ -38,6 +39,8 @@ KEY_PAIR *lookup_extra (const ELEMENT *e, const char *key);
 ELEMENT *lookup_extra_element (const ELEMENT *e, const char *key);
 ELEMENT_LIST *lookup_extra_contents (const ELEMENT *e, const char *key);
 const ELEMENT_LIST *lookup_extra_misc_args (const ELEMENT *e, const char *key);
+const INDEX_ENTRY_LOCATION *lookup_extra_index_entry (const ELEMENT *e,
+                                                      const char *key);
 const ELEMENT_LIST *lookup_extra_directions (const ELEMENT *e, const char 
*key);
 int lookup_extra_integer (const ELEMENT *e, const char *key, int *ret);
 char *lookup_extra_string (const ELEMENT *e, const char *key);
diff --git a/tp/Texinfo/XS/main/manipulate_tree.c 
b/tp/Texinfo/XS/main/manipulate_tree.c
index 7f7756705b..4a5a28361c 100644
--- a/tp/Texinfo/XS/main/manipulate_tree.c
+++ b/tp/Texinfo/XS/main/manipulate_tree.c
@@ -150,6 +150,15 @@ copy_associated_info (ASSOCIATED_INFO *info, 
ASSOCIATED_INFO* new_info)
             }
           break;
           }
+        case extra_index_entry:
+          {
+            KEY_PAIR *k = get_associated_info_key (new_info, key, k_ref->type);
+            k->k.index_entry = (INDEX_ENTRY_LOCATION *)
+                             malloc (sizeof (INDEX_ENTRY_LOCATION));
+            memcpy (k->k.index_entry, k_ref->k.index_entry,
+                    sizeof (INDEX_ENTRY_LOCATION));
+            break;
+          }
         default:
           fatal ("copy_associated_info: unknown extra type");
           break;
diff --git a/tp/Texinfo/XS/main/tree.c b/tp/Texinfo/XS/main/tree.c
index 5cac560bf6..66bd4a167b 100644
--- a/tp/Texinfo/XS/main/tree.c
+++ b/tp/Texinfo/XS/main/tree.c
@@ -186,7 +186,9 @@ destroy_associated_info (ASSOCIATED_INFO *a)
           destroy_list (k_pair->k.list);
           }
           break;
-
+        case extra_index_entry:
+          free (k_pair->k.index_entry);
+          break;
         default:
           break;
         }
diff --git a/tp/Texinfo/XS/main/tree_types.h b/tp/Texinfo/XS/main/tree_types.h
index 5a90177790..f9e3353b84 100644
--- a/tp/Texinfo/XS/main/tree_types.h
+++ b/tp/Texinfo/XS/main/tree_types.h
@@ -30,6 +30,7 @@ enum extra_type {
    extra_container,
    extra_directions,
    extra_misc_args,
+   extra_index_entry, /* index name and position in index */
    extra_string,
    extra_integer,
    extra_deleted
@@ -135,6 +136,20 @@ typedef struct ELEMENT_LIST {
     size_t space;
 } ELEMENT_LIST;
 
+/* the index name is allocated in the index info main structure that
+   should outlive the INDEX_ENTRY_LOCATION */
+typedef struct INDEX_ENTRY_LOCATION {
+    const char *index_name;
+    int number; /* position in the original index.  May be different in
+                   merged index */
+} INDEX_ENTRY_LOCATION;
+
+typedef struct STRING_LIST {
+    char **list;
+    size_t number;
+    size_t space;
+} STRING_LIST;
+
 typedef struct KEY_PAIR {
     const char *key;
     enum extra_type type;
@@ -143,6 +158,8 @@ typedef struct KEY_PAIR {
       ELEMENT_LIST *list;
       char *string;
       int integer;
+      INDEX_ENTRY_LOCATION *index_entry;
+      STRING_LIST *strings_list;
     } k;
 } KEY_PAIR;
 
@@ -339,12 +356,6 @@ typedef struct {
     FLOAT_RECORD *list;
 } FLOAT_RECORD_LIST;
 
-typedef struct STRING_LIST {
-    char **list;
-    size_t number;
-    size_t space;
-} STRING_LIST;
-
 enum tree_added_elements_status {
   tree_added_status_none,
   tree_added_status_elements_added,
diff --git a/tp/Texinfo/XS/parsetexi/indices.c 
b/tp/Texinfo/XS/parsetexi/indices.c
index 8bcba5ff24..3393d7485e 100644
--- a/tp/Texinfo/XS/parsetexi/indices.c
+++ b/tp/Texinfo/XS/parsetexi/indices.c
@@ -288,15 +288,11 @@ enter_index_entry (enum command_id index_type_cmd,
      extra_misc_args to pass that information as an array */
   {
     /* put in extra "misc_args" */
-    ELEMENT_LIST *index_entry = new_list ();
-    /* index name put as text in extra "misc_args" */
-    ELEMENT *e = new_text_element (ET_other_text);
-    text_append (e->e.text, idx->name);
-    add_to_element_list (index_entry, e);
-    e = new_element (ET_NONE);
-    add_extra_integer (e, "integer", idx->entries_number);
-    add_to_element_list (index_entry, e);
-    add_extra_misc_args (element, "index_entry", index_entry);
+    INDEX_ENTRY_LOCATION *index_entry = (INDEX_ENTRY_LOCATION *)
+           malloc (sizeof (INDEX_ENTRY_LOCATION));
+    index_entry->index_name = idx->name;
+    index_entry->number = idx->entries_number;
+    add_extra_index_entry (element, "index_entry", index_entry);
   }
 
   if (nesting_context.regions_stack.top > 0)
diff --git a/tp/Texinfo/XS/structuring_transfo/transformations.c 
b/tp/Texinfo/XS/structuring_transfo/transformations.c
index c6ec47d5aa..1ea6d7efed 100644
--- a/tp/Texinfo/XS/structuring_transfo/transformations.c
+++ b/tp/Texinfo/XS/structuring_transfo/transformations.c
@@ -51,15 +51,12 @@
 
 /* in Common.pm */
 INDEX_ENTRY_AND_INDEX *
-lookup_index_entry (const ELEMENT_LIST *index_entry_info,
+lookup_index_entry (const INDEX_ENTRY_LOCATION *index_entry_info,
                     INDEX_LIST *indices_info)
 {
   INDEX_ENTRY_AND_INDEX *result = 0;
-  int status;
-  int entry_number
-    = lookup_extra_integer (index_entry_info->list[1], "integer",
-                            &status);
-  const char *entry_index_name = index_entry_info->list[0]->e.text->text;
+  int entry_number = index_entry_info->number;
+  const char *entry_index_name = index_entry_info->index_name;
   INDEX *index_info;
 
   index_info = indices_info_index_by_name (indices_info,
@@ -384,8 +381,8 @@ relate_index_entries_to_table_items_in (ELEMENT *table,
                   if (!entry_idx_info)
                     {
                       INDEX_ENTRY_AND_INDEX *idx_info;
-                      const ELEMENT_LIST *index_entry_info
-                        = lookup_extra_misc_args (content, "index_entry");
+                      const INDEX_ENTRY_LOCATION *index_entry_info
+                        = lookup_extra_index_entry (content, "index_entry");
                       idx_info = lookup_index_entry (index_entry_info,
                                                      indices_info);
                       if (idx_info->index_entry)
@@ -402,22 +399,19 @@ relate_index_entries_to_table_items_in (ELEMENT *table,
                 }
               if (item && entry_idx_info)
                 {
-                  ELEMENT_LIST *index_entry_command = new_list ();
-                  ELEMENT *e = new_text_element (ET_other_text);
+                  INDEX_ENTRY_LOCATION *index_entry;
                  /*
                   This is better than overwriting 'entry_element', which
                   holds important information.
                   */
                   entry_idx_info->index_entry->entry_associated_element = item;
-              /* also add a reference from element to index entry in index */
-                  text_append (e->e.text, entry_idx_info->index->name);
-                  add_to_element_list (index_entry_command, e);
-                  e = new_element (ET_NONE);
-                  add_extra_integer (e, "integer",
-                                     entry_idx_info->entry_number);
-                  add_to_element_list (index_entry_command, e);
-                  add_extra_misc_args (item, "associated_index_entry",
-                                       index_entry_command);
+               /* also add a reference from element to index entry in index */
+                  index_entry = (INDEX_ENTRY_LOCATION *)
+                     malloc (sizeof (INDEX_ENTRY_LOCATION));
+                  index_entry->index_name = entry_idx_info->index->name;
+                  index_entry->number = entry_idx_info->entry_number;
+                  add_extra_index_entry (item, "associated_index_entry",
+                                         index_entry);
                   free (entry_idx_info);
                   break;
                 }



reply via email to

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