[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;
}
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- 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 [...],
Patrice Dumas <=