[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)