/
niceSOFT
/
texinfo
Обзор
Документация
Войти
/
niceSOFT
/
texinfo
Код
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
ChangeLog
9 016 строк
337 KB
Patrice Dumas
commands with empty braces argument and symbol commands in plaintext C
12 авг 2026, 17:12
12 авг 2026, 17:12
e13e918
Код
Авторство
О чём код?
2026-08-12 Patrice Dumas <pertusus@free.fr> commands with empty braces argument and symbol commands in plaintext C * tta/C/convert/convert_to_plaintext.c (plaintext_format_setup) (convert_to_plaintext_internal), tta/C/main/plaintext_converter_state.h (FORMATTER): add no_added_eol FORMATTER field. Convert commands with empty braces argument and symbol commands in plaintext C converter. 2026-08-12 Patrice Dumas <pertusus@free.fr> Info tags table, @anchor and @namedanchor in C * tta/perl/Texinfo/Convert/InfoNonXS.pm (output): rearrange code. * tta/perl/Texinfo/Convert/PlaintextNonXS.pm (process_footnotes), tta/C/convert/convert_to_plaintext.c (plaintext_process_footnotes): do not put line_arg nor leading and trailing spaces in generated footnote anchor argument. * tta/C/convert/convert_to_plaintext.c (anchor) (convert_to_plaintext_internal): handle @anchor and @namedanchor. * tta/C/convert/convert_to_plaintext.c (plaintext_add_target_location): rename add_target_location as plaintext_add_target_location and make extern. * tta/C/convert/convert_to_info.c (info_output): output tag table. * tta/C/convert/convert_to_info.c (info_format_node): call plaintext_add_target_location. 2026-08-12 Patrice Dumas <pertusus@free.fr> Separate plaintext target locations from index entries locations * tta/perl/Texinfo/Convert/PlaintextNonXS.pm (_convert): use a counts hash for row. * tta/C/convert/convert_to_plaintext.c (TARGET_LOCATION_LIST) (add_target_location, plaintext_process_footnotes), tta/C/main/plaintext_converter_state.h (TARGET_LOCATION) (TARGET_LOCATION_LIST, INDEX_ENTRY_LINE_COUNT_LIST, COUNT_CONTEXT) (INDEX_ENTRY_INFO), tta/perl/Texinfo/Convert/InfoNonXS.pm (_info_header, format_node), tta/perl/Texinfo/Convert/PlaintextNonXS.pm (convert_tree) (add_target_location, add_index_entry_location) (_adjust_final_locations, _update_locations_counts) (process_footnotes, _align_lines, _align_environment, _anchor) (_convert): separate target_locations from index_entry_locations, adding add_target_location to add a target location and add_index_entry_location to add an index entry location. pass parent count context to _update_locations_counts and merge locations with parent locations there. Remove add_location. * tta/perl/Texinfo/Convert/PlaintextNonXS.pm (_convert): rename 'row_counts' format_context field as 'row_cell_counts'. 2026-08-11 Patrice Dumas <pertusus@free.fr> * tta/perl/Texinfo/Convert/PlaintextNonXS.pm (add_location): rename root field as location_element and set for index entry elements too, even though it is not used in that case. Update user. * tta/perl/Texinfo/Convert/InfoNonXS.pm (output): use variable for $location->{'location_element'}, rename $label as $location. * tta/perl/Texinfo/Convert/PlaintextNonXS.pm (process_printindex) (_convert): rename index_entries_line_location field as index_entry_info. Put 'node' in {'index_entry_info'}->{$element}, not in location. Do not set {'index_entry_info'}->{$element} to the location, but instead add a 'location' field pointing to the location. * tta/C/convert/convert_to_plaintext.c (plaintext_conversion_initialization, plaintext_process_printindex), (plaintext_conversion_finalization), tta/C/main/plaintext_converter_state.h (INDEX_ENTRY_INFO) (PLAINTEXT_CONVERTER_STATE): allocate in plaintext_conversion_initialization a structure holding conversion information of index entries, by sorted index name index and index entry number in original index. Use it in plaintext_process_printindex instead of local array. 2026-08-11 Patrice Dumas <pertusus@free.fr> Implement footnotes and output encoding in plaintext C converter * tta/perl/Texinfo/Convert/PlaintextNonXS.pm: move code around. * tta/perl/Texinfo/Convert/PlaintextNonXS.pm (add_location): comment out setting index_entry as it is never used. * tta/perl/Texinfo/Convert/PlaintextNonXS.pm (process_footnotes): fix field name. * tta/C/convert/convert_to_plaintext.c (push_top_formatter): add top context command argument, push it to the context stack. Update callers. * tta/C/convert/convert_to_plaintext.c (pop_context): add as a wrapper for pop_(command) that returns the popped cmd. * tta/C/convert/convert_to_plaintext.c (pop_top_formatter) (plaintext_conversion_finalization): add pop_top_formatter and call it in plaintext_conversion_finalization. In pop_top_formatter use pop_(formatter) instead of pop_formatter if the last context is popped, as there is no formatter left when the last formatter is popped. * tta/C/convert/convert_to_plaintext.c (convert_to_plaintext_internal): push and pop @math command on context stack. Pop context stack for PF_preformatted_context and float commands. * tta/C/convert/convert_to_plaintext.c (destroy_count_context) (stream_reset, stream_output, stream_output_add_text), tta/C/main/plaintext_converter_state.h (COUNT_CONTEXT): distinguish pending_text, which is utf-8, and result text, which is encoded in the output encoding. Add pending_text and encoding_disabled fields in COUNT_CONTEXT. Use pending_text where if should be. * tta/C/convert/convert_to_plaintext.c (stream_encode) (stream_byte_count, stream_output_encoded, stream_result) (stream_yield_result), tta/C/main/plaintext_converter_state.h (PLAINTEXT_CONVERTER_STATE): add encoding_object field in PLAINTEXT_CONVERTER_STATE. Add stream_encode, stream_byte_count and implement stream_output_encoded. Call stream_byte_count where it should be. * tta/C/convert/convert_to_plaintext.c (add_location), tta/C/main/plaintext_converter_state.h (LOCATION, LOCATION_LIST) (COUNT_CONTEXT): locations lists types and list functions, add to COUNT_CONTEXT. * tta/C/convert/convert_to_info.c (info_header, info_output), tta/C/convert/convert_to_plaintext.c (pending_footnote) (plaintext_process_footnotes, convert_to_plaintext_internal) (plaintext_convert_output_unit), tta/C/main/plaintext_converter_state.h (PENDING_FOOTNOTE) (PENDING_FOOTNOTE_LIST, PLAINTEXT_CONVERTER_STATE): Add PENDING_FOOTNOTE and related types and functions. Add multiple_pass, footnote_index and pending_footnotes fields to PLAINTEXT_CONVERTER_STATE. Implement plaintext_process_footnotes and conversion of footnotes. Call plaintext_process_footnotes. 2026-08-10 Patrice Dumas <pertusus@free.fr> * tta/C/convert/convert_to_info.c (info_output), tta/C/convert/convert_to_plaintext.c (plaintext_cache_node_names): implement plaintext_cache_node_names and call for Info output. 2026-08-10 Patrice Dumas <pertusus@free.fr> * tta/C/convert/convert_to_info.c (info_output): handle invalid documentscript. * tta/C/convert/convert_to_plaintext.c (plaintext_process_printindex): unallocate "(outside of any node)" translated tree. * tta/C/convert/convert_to_plaintext.c (convert_to_plaintext_internal): handle @math without argument. * tta/C/convert/convert_to_plaintext.c (convert_to_plaintext_internal): stream and free the prepared text. * tta/C/convert/html_conversion_state.c (html_unset_multiple_conversions) (html_close_registered_sections_level), tta/C/main/command_stack.c (pop_string_stack): add pop_string_stack that frees the top string before calling pop_(string). Use it instead of pop_(string). 2026-08-10 Patrice Dumas <pertusus@free.fr> * tta/C/convert/convert_to_plaintext.c (convert_to_plaintext_internal): do not call return on format_contents dispatched function, it is a function returning void and is called in a void function. * tta/C/convert/convert_to_plaintext.c (convert_to_plaintext_internal): set text_before and text_after to empty string in case of bug. * tta/C/convert/convert_to_plaintext.c (ensure_end_of_line): add. * tta/C/convert/convert_to_info.c (info_output), tta/C/convert/convert_to_plaintext.c (plaintext_conversion_finalization, convert_to_plaintext_internal), tta/C/main/plaintext_converter_state.h (PLAINTEXT_CONVERTER_STATE): add text_before_first_node field in PLAINTEXT_CONVERTER_STATE, set and use text_before_first_node. * tta/C/convert/convert_to_plaintext.c (convert_to_plaintext_internal): add some conditions for now existing elements, and use braces instead of ; when there is no code yet. 2026-08-10 Patrice Dumas <pertusus@free.fr> * tta/C/convert/call_embed_perl.c, tta/C/main/call_perl_function.c (call_eval_use_module): move call_eval_use_module call_perl_function.c such that it can be called from converters. 2026-08-10 Patrice Dumas <pertusus@free.fr> informative and unknown commands in plaintext C converter * tta/C/convert/convert_to_plaintext.c (convert_to_plaintext_internal): handle informative commands, switch language. Handle unknown command. * tta/perl/Texinfo/Convert/PlaintextNonXS.pm (_convert): remove the $unknown_command variable. 2026-08-09 Patrice Dumas <pertusus@free.fr> * doc/texinfo.texi (Info Format Local Variables): document the language script and variants local variables. 2026-08-09 Patrice Dumas <pertusus@free.fr> * tta/C/main/command_stack.c: use list macros for STRING_LIST string stack. 2026-08-09 Patrice Dumas <pertusus@free.fr> Replace STRING_STACK by STRING_LIST and remove * tta/C/main/converter_types.h: replace STRING_STACK by STRING_LIST and remove STRING_STACK. Replace in all users of the type. * tta/C/main/command_stack.c: remove clear_string_stack, replace by clear_strings_list in the user. 2026-08-09 Patrice Dumas <pertusus@free.fr> * tta/C/main/command_stack.c: use list macros for ELEMENT_REFERENCE ELEMENT_REFERENCE_STACK stack. 2026-08-09 Patrice Dumas <pertusus@free.fr> * tta/C/main/command_stack.c (push_element_reference_stack_element): fix type in sizeof. * tta/C/main/command_stack.c: replace ELEMENT_STACK type by CONST_ELEMENT_LIST type. Use stack macros for const ELEMENT * CONST_ELEMENT_LIST stack. Remove ELEMENT_STACK by removing def_list_type call on ELEMENT_STACK in document_types.h. 2026-08-09 Patrice Dumas <pertusus@free.fr> * tta/C/main/command_stack.c: use list macros for int integer stack. 2026-08-09 Patrice Dumas <pertusus@free.fr> * tta/C/main/command_stack.c: use list macros for enum command_id command stack. 2026-08-09 Gavin Smith <gavinsmith0123@gmail.com> * doc/texinfo.texi (Fonts) <@fonttextsize>: State that this command is recommended for use with texinfo.tex only. 2026-08-09 Patrice Dumas <pertusus@free.fr> INFO_MATH_IMAGES, C plaintext block command flags, math displaymath * tta/C/convert/convert_to_info.c (info_format_image): have dpi and depth arguments be integers. * tta/C/main/utils.c (collect_commands_in_tree_internal) (collect_commands_in_tree): implement collect_commands_in_tree. * tta/perl/Texinfo/Convert/InfoNonXS.pm (convert_math_to_images): return the collected_commands too, to simplify passing information to C. * tta/perl/Texinfo/Convert/PlaintextNonXS.pm (%preformatted_context_commands, %format_context_commands): rename default_preformatted_context_commands as preformatted_context_commands and default_format_context_commands as format_context_commands. Remove unused %block_math_commands. * tta/perl/Texinfo/Convert/PlaintextNonXS.pm (_insert_image): rename $lines_count as $line_count. * tta/C/convert/convert_to_plaintext.h (MATH_ELEMENT_IMAGE) (MATH_ELEMENTS_IMAGES, PLAINTEXT_CONVERTER_STATE): add types related to INFO_MATH_IMAGES. add element_images field in PLAINTEXT_CONVERTER_STATE. * tta/C/Makefile.am (libcallperl_libtexinfo_convert_la_SOURCES) (libtexinfo_convert_static_la_SOURCES, texistatic_SOURCES), tta/C/convert/call_plaintext_perl_function.c (call_latex_convert_math_to_images): add call_plaintext_perl_function.c for call_latex_convert_math_to_images that calls convert_math_to_images in Perl and get the information in MATH_ELEMENTS_IMAGES from Perl. * tta/C/convert/convert_to_info.c (info_output): if INFO_MATH_IMAGES, call call_latex_convert_math_to_images to set element_images in converter. * tta/C/convert/convert_to_plaintext.c (item_indent_format_length) (plaintext_format_setup), tta/C/convert/convert_to_plaintext.h (PF_*) (PLAINTEXT_COMMAND_STRUCT): set flags in plaintext_format_setup for block commands. Add indent_format_length field in PLAINTEXT_COMMAND_STRUCT for item_indent_format_length commands indent length. * tta/C/convert/convert_to_plaintext.c (PLAINTEXT_FORMAT_FUNCTIONS) (plaintext_format_image, plaintext_functions): add format_image field in PLAINTEXT_FORMAT_FUNCTIONS to dispatch *_format_image. Add plaintext_format_image as a no-op. * tta/C/convert/convert_to_plaintext.c (plaintext_insert_image) (convert_to_plaintext_internal), tta/C/main/plaintext_converter_state.h (PLAINTEXT_CONVERTER_STATE): add context field in PLAINTEXT_CONVERTER_STATE. Implement @math formatting in plaintext and partial formatting of block commands for @displaymath formatting with INFO_MATH_IMAGES. * tta/C/texi2any.c (main): handle INFO_MATH_IMAGES not set at all. * tta/C/convert/convert_to_info.c (info_format_image): use temporarily \x01 instead of \x00 NUL for image quoting in Info to have a visible output. 2026-08-08 Patrice Dumas <pertusus@free.fr> * tta/C/convert/convert_to_info.c (info_output), tta/perl/Texinfo/Convert/InfoNonXS.pm (output): use script name corresponding to XPG locales if possible for Info-documentscript. 2026-08-08 Patrice Dumas <pertusus@free.fr> * tta/C/Makefile.am (C_libtexinfo_sources), tta/maintain/regenerate_documentlanguages-iana.pl: add a gperf hash associating an ISO 15924 tag to an alias as used in XPG locales. 2026-08-08 Patrice Dumas <pertusus@free.fr> Update IANA language data 2026-08-08 Patrice Dumas <pertusus@free.fr> Set Info-document* language related variable in Info based on preamble * tta/C/convert/convert_to_info.c (info_output), tta/perl/Texinfo/Convert/InfoNonXS.pm (output): * tta/perl/Texinfo/Translations.pm (_set_lang_info_translation): always set 'bcp47_locale' even if there is a translation cache. * tta/perl/t/languages.t (multiple_in_preamble): use a language with region at the end of the preamble. * tta/tests/formatting/no_detailmenu_lang_at_begin_end.texi: set @documentscript, to an alias. 2026-08-08 Patrice Dumas <pertusus@free.fr> * contrib/mass_test/output_ConvertXS_perlVSC.sh, contrib/mass_test/setup_reference_perlVSC.sh: use TEXINFO_XS instead of TEXINFO_XS_* now removed variables. * tta/C/texi2any.c (main): set need_latex to require embedded Perl if CONVERT_TO_LATEX_IN_MATH is explicitly set. * tta/perl/Texinfo/XSLoader.pm: update and rearrange comments. * tta/swig/perl/t/20index_sort.t: remove code and comment not relevant anymore now that Perl modules are never loaded from SWIG. 2026-08-07 Patrice Dumas <pertusus@free.fr> * tta/C/structuring_transfo/structuring.c (sectioning_targets), tta/perl/Texinfo/StructuringNonXS.pm (sectioning_targets): do not set an identifier with postpended disambiguation string for sectioning commands, instead do not add any identifier at all. Also remove most of protection in target tree, as it is only used to generate an identifier. 2026-08-07 Patrice Dumas <pertusus@free.fr> * tta/perl/t/init/translation_in_parser_in_translation.pm: add braced substrings in translation, such that the elements are destroyed when the translated tree is destroyed, avoiding a memory leak. Avoiding the memory leak is not important, as it is small and unlikely in real cases, but it make checking for memory leaks more tedious. 2026-08-07 Patrice Dumas <pertusus@free.fr> * tta/C/convert/convert_indices.c (index_entry_first_letter_text_or_command): always destroy parsed_element. * tta/C/structuring_transfo/structuring.c (sectioning_targets): destroy node tree after having determined the possible identifier string. * tta/C/main/manipulate_indices.c (get_index_content_info_element): always set name_copy_out and class_copy_out even though it is not needed as it is easier to check the results when debugging calling code. * tta/C/main/manipulate_tree.c (print_source_marks) (print_element_add_prepend_info, print_element_info) (print_element_extra, print_element_details, print_tree_details) (tree_print_details): add an argument to show element pointers, that can be set for debugging. Update callers. 2026-08-07 Patrice Dumas <pertusus@free.fr> * tta/C/main/manipulate_tree.c (reference_to_arg_internal) (reference_to_arg_in_tree), tta/C/structuring_transfo/transformations.c, tta/perl/Texinfo/ManipulateTree.pm (_reference_to_arg) (reference_to_arg_in_tree), tta/perl/Texinfo/Transformations.pm: move reference_to_arg_in_tree to ManipulateTree, as it is now used by structuring code. Update callers. 2026-08-07 Patrice Dumas <pertusus@free.fr> Add target to sectioning commands without node * tta/C/convert/format_html.c (compare_element_target) (find_element_target_search, tta/C/convert/html_prepare_converter.c (reset_html_targets_list, add_element_target_to_list) (compare_element_target, check_targets_order, sort_cmd_targets), tta/C/main/html_converter_state.h (HTML_TARGET_LIST): store HTML_TARGET pointers in HTML_TARGET_LIST, such that their address does not change after a realloc of the list. * tta/C/convert/html_prepare_converter.c (html_register_id): associate the target identifier to the element_target for target commands and root commands. Update callers. * tta/C/structuring_transfo/structuring.c (sectioning_targets), tta/C/structuring_transfo/transformations.c (complete_transform_document), tta/perl/Texinfo/StructuringNonXS.pm (sectioning_targets), tta/perl/XSTexinfo/parser_document/StructuringXS.xs (sectioning_targets), tta/perl/t/test_utils.pl (test), tta/perl/texi2any.pl: add sectioning commands without nodes as targets, taking care about not replacing a node, anchor or float target. Warn if two sectioning commands added as targets have the same associated target. * tta/C/convert/html_prepare_converter.c (new_sectioning_command_target), tta/perl/Texinfo/Convert/HTMLNonXS.pm (_new_sectioning_command_target): modify setting up targets of sectioning commands, to reuse and complete target of sectioning commands not associated to a node that already have an associated target. * tta/perl/Texinfo/Convert/PlaintextNonXS.pm (process_footnotes): always add a footnotes in the node and not as a separate node if the associated command is not a node. 2026-08-06 Patrice Dumas <pertusus@free.fr> * tta/C/main/build_perl_info.c (element_to_perl_hash) (print_element_extra), tta/C/main/tree_types.h (EF_added), tta/C/structuring_transfo/transformations.c (new_node), tta/perl/Texinfo/TransformationsNonXS.pm (_new_node): add added flag to added elements, when needed. Add for added nodes, such that they can be distinguished from original Texinfo manual nodes. * tta/C/structuring_transfo/transformations.c (new_node), tta/perl/Texinfo/TransformationsNonXS.pm (_new_node): pass associated sectioning command. Warn if a new node has already been added. * tta/perl/Texinfo/Structuring.pm (_insert_menu_comment_content): handle a sectioning command with a missing argument. * tta/C/structuring_transfo/transformations.c (new_node), tta/perl/Texinfo/TransformationsNonXS.pm (_new_node): use the associated command as source info for a new node. * tta/C/main/utils.c (get_label_element), tta/perl/Texinfo/Common.pm (get_label_element): handle root command more generally, not only node. 2026-08-06 Patrice Dumas <pertusus@free.fr> * tta/perl/Texinfo/TransformationsNonXS.pm (_new_node), tta/C/structuring_transfo/transformations.c (new_node): decorate appended disambiguating prefix based on a number as [+1+] to make clearer that it is not a good idea to use that node name as target. 2026-08-05 Patrice Dumas <pertusus@free.fr> * doc/generate_html_doc_texi.pl (BEGIN), tta/perl/Texinfo/ModulePath.pm.in (init): add tta/perl from build directory to @INC to find generated modules, for now Texinfo::Configure. 2026-08-05 Patrice Dumas <pertusus@free.fr> * tta/perl/Texinfo/Convert/LaTeX.pm (_latex_header): set language= in \DocumentMetadata instead of lang=, as lang can derive from language according to the documentation. 2026-08-05 Gavin Smith <gavinsmith0123@gmail.com> * tta/perl/Texinfo/Convert/LaTeX.pm (_latex_header): Remove "arc=10pt" from tcolorbox argument. 2026-08-05 Gavin Smith <gavinsmith0123@gmail.com> * tta/perl/Texinfo/Convert/LaTeX.pm (_latex_header): Elaborate on comment re "alt" key with graphicx package slightly. 2026-08-05 Patrice Dumas <pertusus@free.fr> * doc/Makefile.am (pod2texi.texi), doc/tta_api/Makefile.am (texi2any_internals.texi): add TEXINFO_XS=omit to the environement such that pod2texi does not fail even if the XS modules are not built already. This happens with make distcheck after make maintainer-clean. 2026-08-05 Patrice Dumas <pertusus@free.fr> update po files 2026-08-05 Patrice Dumas <pertusus@free.fr> * tta/C/convert/convert_to_plaintext.c (plaintext_process_printindex): fix strings for outside_of_any_node_text. 2026-08-05 Patrice Dumas <pertusus@free.fr> * po/POTFILES.in, po_document/POTFILES.in: udpate. 2026-08-05 Patrice Dumas <pertusus@free.fr> Separate Perl module for information passed from configure * Makefile.am (BUILT_SOURCES, tta/perl/Texinfo/Configure.pm), tta/perl/Makefile.am (dist_noinst_DATA, modules_DATA) (Texinfo/ModulePath.pm, Texinfo/Configure.pm, CLEANFILES), tta/perl/Texinfo/ModulePath.pm.in, tta/perl/Texinfo/Configure.pm.in: split variables set by configure unrelated to paths out of Texinfo/ModulePath.pm.in to a new modules in Texinfo/Configure.pm.in. Update users. 2026-08-05 Patrice Dumas <pertusus@free.fr> * tta/perl/Texinfo/Convert/LaTeX.pm (_convert): do not escape any character in image file name. 2026-08-05 Patrice Dumas <pertusus@free.fr> * tta/perl/Texinfo/Convert/LaTeX.pm (_protect_latex_text) (_protect_text): split _protect_text in two, by adding _protect_latex_text that does only the protection and gets context information as arguments. * tta/perl/Texinfo/Convert/LaTeX.pm (_convert): protect in alt= argument, although it is not required it may help if the LaTeX macro is redefined. 2026-08-05 Patrice Dumas <pertusus@free.fr> * tta/perl/Texinfo/Convert/LaTeX.pm (%LaTeX_no_arg_brace_commands_ascii_replacement, _convert): use \texorpdfstring when in sectioning command argument for no arg commands using math mode for their formatting, euro and error. Try converting an encoded character, and use ASCII transliteration if this is not possible. 2026-08-05 Patrice Dumas <pertusus@free.fr> Use tcolorbox instead of mdframed for cartouche * tta/perl/Texinfo/Convert/LaTeX.pm (%LaTeX_environment_commands) (%LaTeX_environment_options, %LaTeX_environment_packages) (_latex_header, _set_environment_options): replace mdframed, which is not maintained, by tcolorbox for @cartouche formatting, by defining a tcolorbox environment. * tta/perl/Texinfo/Convert/LaTeX.pm (_latex_header): load amsfonts for \circledR even when unicode-math is used. * tta/perl/Texinfo/Convert/LaTeX.pm (_latex_header): with tagging, do not load fontenc and load inputenc only if not utf-8. 2026-08-04 Patrice Dumas <pertusus@free.fr> * tta/data/options_data.txt (LATEX_TAGGED_PDF), tta/perl/Texinfo/Convert/LaTeX.pm (_latex_header): add LATEX_TAGGED_PDF customization variable for LaTeX tagged PDF. Report form Charles Staats, David Carlisle example. * tta/perl/Makefile.tres, tta/perl/t/latex_tests.t (latex_tagged_pdf_default, latex_tagged_pdf_customized): add tests of LaTeX tagged PDF. 2026-08-04 Patrice Dumas <pertusus@free.fr> alt @image formatting argument for LaTeX * tta/perl/Texinfo/Convert/LaTeX.pm (_latex_header, _convert): add alt= argument to \includegraphics. Reorganize image options setting code. Add a providecommand for the case of alt not being defined as \includegraphics argument for pre 2021 graphicx. Report from Charles Staats and final definition of alt for old LaTeX by David Carlisle. 2026-08-04 Patrice Dumas <pertusus@free.fr> * tta/perl/Texinfo/Convert/InfoNonXS.pm (output): avoid comparing undef value. 2026-08-04 Patrice Dumas <pertusus@free.fr> XS interfaces for Plaintext and Info converters * tta/perl/Makefile.am (dist_convertmodules_DATA), tta/perl/Texinfo/Convert/Info.pm, tta/perl/Texinfo/Convert/InfoNonXS.pm, tta/perl/Texinfo/Convert/Plaintext.pm, tta/perl/Texinfo/Convert/PlaintextNonXS.pm, tta/perl/XSTexinfo/Makefile.am (xs_LTLIBRARIES) (*ConvertPlaintextXS_la*, *ConvertInfoXS_la*), tta/perl/XSTexinfo/convert/ConvertInfoXS.xs, tta/perl/XSTexinfo/convert/ConvertPlaintextXS.xs: add XS interfaces for Info and Plaintext converter. Add code to load XS for Info and Plaintext and move implementation in Perl to InfoNonXS.pm and PlaintextNonXS.pm. Add a converter function explicitely in Plaintext and Info converter to be able to override it with XS. Only enabled if TEXINFO_XS_INCOMPLETE environment variable is set to 2. * tta/C/main/converter_types.h (enum converter_format): add COF_unknown, as COF_none is already for known formats, those that do not have a C implementation. * tta/C/convert/converter.c (converter_format_name) (converter_format_perl_class_name): get names of converter formats. * tta/C/convert/convert_to_info.c (info_output), tta/C/convert/convert_to_plaintext.c (plaintext_output) (plaintext_convert):release output units list. * tta/C/convert/convert_to_plaintext.c (plaintext_process_printindex): fix format for index entry number. * tta/C/convert/convert_to_info.c (info_format_ref), tta/C/convert/convert_to_plaintext.c (plaintext_format_ref): set label_element only if target_element is not NULL. * tta/C/convert/convert_to_info.c (info_format_ref): use add_to_contents_as_array to add main tree element. * tta/C/convert/convert_to_info.c (info_format_ref), tta/C/convert/convert_to_plaintext.c (plaintext_free_converter): free memory. 2026-08-02 Patrice Dumas <pertusus@free.fr> * tta/perl/Texinfo/Convert/LaTeX.pm (_latex_header): add pdftitle. * tta/perl/Makefile.tres, tta/perl/t/latex_tests.t (protection_in_pdftitle): add test with special characters protection of pdftitle. 2026-08-02 Patrice Dumas <pertusus@free.fr> * tta/C/convert/convert_html.c (html_prepare_converted_output_info), tta/C/convert/converter.c (converter_get_fulltitle_tree), tta/perl/Texinfo/Convert/Converter.pm (get_fulltitle_tree), tta/perl/Texinfo/Convert/HTMLNonXS.pm (_prepare_converted_output_info): add get_fulltitle_tree in Perl and converter_get_fulltitle_tree in C for the code determining the full title tree. 2026-08-02 Patrice Dumas <pertusus@free.fr> * tta/C/convert/convert_html.c (html_prepare_converted_output_info), tta/perl/Texinfo/Convert/HTMLNonXS.pm (_prepare_converted_output_info): use empty_spaces_argument to determine if candidates for fulltitle_tree are selected. 2026-08-02 Patrice Dumas <pertusus@free.fr> * tta/C/texi2any.c (main): for conversion to Info, if INFO_MATH_IMAGES is set, use Perl module for conversion, as it requires conversion to LaTeX, which is only availble in Perl. 2026-08-02 Gavin Smith <gavinsmith0123@gmail.com> * tta/C/main/unicode-collation/: Sync 2026-08-02 Gavin Smith <gavinsmith0123@gmail.com> Import uninorm/filter * tta/: Run "gnulib-tool --add-import uninorm/filter". For C collation code. 2026-08-02 Patrice Dumas <pertusus@free.fr> * tta/C/parsetexi/parser.c (add_preamble_lang_cmd): fix type name in sizeof. * tta/C/main/converter_types.h, tta/C/main/document_types.h (ENCODING_CONVERSION): move ENCODING_CONVERSION to document_types.h as it is used earlier than conversion. * tta/perl/XSTexinfo/parser_document/OutputUnitsXS.xs, tta/perl/XSTexinfo/parser_document/ManipulateTreeXS.xs, tta/perl/XSTexinfo/parser_document/DocumentIndicesXS.xs, tta/perl/XSTexinfo/parser_document/StructuringXS.xs: use non_perl_free instead of free. * tta/C/*/*.c, tta/maintain/*.pl, tta/perl/XSTexinfo/*.xs, tta/perl/XSTexinfo/*/*.xs, tta/perl/XSTexinfo/*.c, tta/perl/XSTexinfo/*/*.c: correct includes using include-what-you-use from iwyu. 2026-08-01 Patrice Dumas <pertusus@free.fr> * tta/C/*/*.*, tta/perl/XSTexinfo/convert/get_html_perl_info.h: correct includes mainly for header files using include-what-you-use from iwyu. This leads to removing the include of config.h from xs_utils.h, which is a good thing as the xs_utils.h file is included in Perl C code that should not include Gnulib headers. 2026-08-01 Gavin Smith <gavinsmith0123@gmail.com> Plaintext C converter: use curly quotes * tta/C/convert/convert_to_plaintext.c (convert_to_plaintext_internal) Hardcode use of UTF-8 curly quotes for now. 2026-08-01 Gavin Smith <gavinsmith0123@gmail.com> Plaintext C converter asis_commands * tta/C/convert/convert_to_plaintext.h (PF_asis): Add flag. * tta/C/convert/convert_to_plaintext.c (plaintext_format_setup): Set PF_asis on some commands. (convert_to_plaintext_internal): Update. 2026-08-01 Gavin Smith <gavinsmith0123@gmail.com> Separate asis_commands from style_map * tta/perl/Texinfo/Convert/Plaintext.pm (@asis_commands, %asis_commands): Change from array to hash. (%style_map): Do not include asis_commands. (_convert) <style map>: Update. 2026-08-01 Gavin Smith <gavinsmith0123@gmail.com> * tta/perl/Texinfo/Convert/Plaintext.pm (%command_style_map): Remove unused hash. 2026-08-01 Patrice Dumas <pertusus@free.fr> plaintext C converter contents formatting * tta/perl/Texinfo/Convert/Plaintext.pm: move node_name and _cache_node_names. * tta/perl/Texinfo/Convert/Plaintext.pm (format_contents): remove useless code. Move repeat_count and spaces output before. * tta/perl/Texinfo/Convert/Plaintext.pm (_convert): call contents, shortcontents and summarycontents conversion in the same condition. * tta/C/convert/convert_to_plaintext.c (plaintext_convert_line) (plaintext_convert_line_new_context): call para_end as should be. * tta/C/convert/convert_to_info.c (info_format_contents), tta/C/convert/convert_to_plaintext.c (PLAINTEXT_COMMAND_STRUCT) (plaintext_format_contents, plaintext_functions) (convert_to_plaintext_internal): implement plaintext_format_contents and add dispatch and conversion of contents. 2026-08-01 Patrice Dumas <pertusus@free.fr> * tta/C/convert/converter.c (converter_txt_image_text): do not use the buffer size as string length. * tta/C/convert/convert_to_plaintext.c (plaintext_image_formatted_text): add warning message. * tta/C/convert/convert_to_plaintext.c (plaintext_format_image_element), tta/C/convert/converter.c (converter_txt_image_text): free strings. 2026-08-01 Patrice Dumas <pertusus@free.fr> Info and plaintext C converter @image formatting * tta/C/convert/converter.c (converter_txt_image_text): add. * tta/C/convert/convert_to_info.c (protect_image_string) (info_format_image, info_format_image_element), tta/C/convert/convert_to_plaintext.c (PLAINTEXT_FORMAT_FUNCTIONS) (plaintext_image_formatted_text, plaintext_format_image_element) (plaintext_functions, convert_to_plaintext_internal), tta/C/main/converter_types.h (STRING_LINE_COUNT): implement Info and plaintext image formatting, add dispatch. In Info, the result is incorrect because NULL is used as a quoting character and the code is not adapted to that. * tta/C/convert/convert_to_info.c (info_format_node): check that node_directions is set before accessing. 2026-07-31 Patrice Dumas <pertusus@free.fr> * tta/C/convert/convert_to_plaintext.c (plaintext_conversion_finalization, convert_to_plaintext_internal), tta/C/main/plaintext_converter_state.h (PLAINTEXT_CONVERTER_STATE): add current_node in PLAINTEXT_CONVERTER_STATE, set and zero it. * tta/C/convert/convert_to_info.c (info_format_error_outside_of_any_node), tta/C/convert/convert_to_plaintext.c (PLAINTEXT_FORMAT_FUNCTIONS) (plaintext_format_error_outside_of_any_node): implement info_format_error_outside_of_any_node and add to dispatch table. 2026-07-31 Gavin Smith <gavinsmith0123@gmail.com> * tta/perl/Texinfo/Convert/Plaintext.pm (%style_map): Simplify initialisation slightly. 2026-07-31 Gavin Smith <gavinsmith0123@gmail.com> C plaintext converter: initial style map implementation * tta/C/convert/convert_to_plaintext.c (struct style_map): Add type. (style_map): Add array. (plaintext_format_setup): Sort style_map array, and set PF_style_map command for commands listed therein. (convert_to_plaintext): Check PF_style_map and retrieve style map data. 2026-07-31 Gavin Smith <gavinsmith0123@gmail.com> * tta/C/convert/convert_to_plaintext.c: remove superannuated comment. 2026-07-31 Gavin Smith <gavinsmith0123@gmail.com> * tta/C/convert/convert_to_plaintext.c (convert_to_plaintext_internal): Initial @dfn implementation. 2026-07-31 Gavin Smith <gavinsmith0123@gmail.com> Use constant style map * tta/perl/Texinfo/Convert/Plaintext.pm (%command_style_map): Remove 'dfn'. (@double_quoted_commands, %double_quoted_commands): Change from array to hash. (conversion_initialization): Initialize $self->{'open_double_quote'} and $self->{'close_double_quote'}. Do not copy $self->{'style_map'} from %style_map. (_convert) <style commands>: Update to access %style_map rather than $self->{'style_map'}. Access $self->{'open_double_quote'} and $self->{'close_double_quote'}. 2026-07-31 Patrice Dumas <pertusus@free.fr> * tta/C/convert/convert_to_plaintext.c (plaintext_convert_line_new_context), tta/C/convert/convert_to_plaintext.h (STRING_COUNT_LINE_COUNT): add plaintext_convert_line_new_context and associated STRING_COUNT_LINE_COUNT return struct. * tta/C/convert/convert_to_info.c (info_format_ref), tta/C/convert/convert_to_plaintext.c (plaintext_process_printindex): use plaintext_convert_line_new_context to check colon in name and set outside_of_any_node_text. * tta/C/convert/convert_to_info.c (info_format_ref, info_format_node): do the check of character to quote in node names only if the node names are quoted or there is a warning emitted. 2026-07-31 Patrice Dumas <pertusus@free.fr> Implement conversion of printindex in plaintext and Info C converters * tta/C/convert/format_html.c (html_convert_printindex_command) (html_output_internal_links), tta/perl/Texinfo/Convert/HTML.pm (_convert_printindex_command, output_internal_links): rename index_entries_by_letter as sorted_indexes_by_letter. * tta/perl/Texinfo/Convert/Plaintext.pm (process_printindex): rename index_entries as sorted_indexes. Add sorted_index variable. Change conditions for clearer code. Put subentries in the same container as the main entry. * tta/C/main/utils.c (string_width_multibyte): rename width_multibyte as string_width_multibyte. Update callers. * tta/C/main/hashmap.c (c_hashmap_set_value): add. * tta/perl/Texinfo/Convert/Plaintext.pm, tta/C/main/element_types.txt: rename frenchspacing special type as _frenchspacing. Add to C. * tta/C/convert/convert_indices.c (converter_sort_index_names), tta/C/convert/converter.c (free_generic_converter), tta/C/convert/html_converter_finish.c (html_free_converter), tta/C/convert/html_prepare_converter.c (html_conversion_initialization), tta/C/main/html_converter_state.h (HTML_CONVERTER_STATE), tta/C/main/converter_types.h (CONVERTER): move code used to sort index names and remove empty indices in converter out of HTML conversion to the converter_sort_index_names function in convert_indices.c. Move sorted_index_names from HTML_CONVERTER_STATE to CONVERTER. Update users. * tta/C/convert/convert_to_plaintext.c (add_lines_count): add. * tta/C/convert/convert_to_plaintext.c (plaintext_conversion_initialization) (plaintext_conversion_finalization), tta/C/main/plaintext_converter_state.h (PLAINTEXT_CONVERTER_STATE): add index_entries_no_node and index_entry_node_colon hash maps, outside_of_any_node_text and outside_of_any_node_text_width used for printindex output to PLAINTEXT_CONVERTER_STATE, initialize and release. * tta/C/convert/convert_to_info.c (info_format_printindex), tta/C/convert/convert_to_plaintext.c (PLAINTEXT_FORMAT_FUNCTIONS) (CONVERT_PRINTINDEX_ENTRIES_INFO, plaintext_process_printindex) (plaintext_format_printindex, plaintext_functions) (convert_to_plaintext_internal): implement plaintext_process_printindex and dispatch functions to use in conversion to plaintext and Info. * tta/perl/Texinfo/Convert/Info.pm (format_contents): return undef. 2026-07-30 Patrice Dumas <pertusus@free.fr> * tta/perl/Texinfo/Convert/Info.pm: move code around. 2026-07-30 Patrice Dumas <pertusus@free.fr> * tta/perl/XSTexinfo/ParagraphXS.xs (para_end_line): adapt for para_end_line return value being const. 2026-07-30 Patrice Dumas <pertusus@free.fr> * tta/C/convert/convert_to_plaintext.c (push_formatter) (pop_formatter): add push_formatter that wraps add_(formatter) and para_set_state. Add para_set_state call to pop_formatter. Replace calls of add_(formatter) by calls of push_formatter. Remove calls of para_set_state that are not needed anymore. * tta/C/convert/convert_to_plaintext.c (stream_output_add_text): finish implementation. 2026-07-30 Patrice Dumas <pertusus@free.fr> Implement node line formatting in C info converter * tta/C/convert/plaintext_paragraph.c (para_end_line): make return value const. * tta/C/convert/convert_to_plaintext.c (plaintext_convert_line): add. * tta/C/convert/convert_to_info.c (info_output), tta/C/convert/convert_to_plaintext.c (plaintext_free_converter), tta/C/main/plaintext_converter_state.h (PLAINTEXT_CONVERTER_STATE): add output_filename field to PLAINTEXT_CONVERTER_STATE, fill it and free it. * tta/C/convert/convert_to_info.c (info_format_node, directions): implement info_format_node. * tta/C/convert/convert_to_plaintext.c (PLAINTEXT_FORMAT_FUNCTIONS) (plaintext_format_node, plaintext_functions) (convert_to_plaintext_internal): add noop plaintext_format_node and add dispatch of node formatting in conversion. * tta/perl/Texinfo/Convert/Info.pm (format_node): always return nothing. 2026-07-29 Patrice Dumas <pertusus@free.fr> * tta/C/main/utils.c (normalize_top_node_name): add. * tta/C/convert/plaintext_paragraph.c (para_add_pending_word), tta/perl/XSTexinfo/ParagraphXS.xs (para_add_pending_word): make return value of para_add_pending_word const as it is allocated and freed in the function. * tta/C/convert/convert_to_plaintext.c (fill_formatter): add. * tta/C/main/plaintext_converter_state.h (STRING_WITH_WIDTH) (PLAINTEXT_CONVERTER_STATE), tta/C/convert/convert_to_plaintext.c (plaintext_conversion_initialization) (plaintext_conversion_finalization): add node_names_cache array. Allocate and release. * tta/C/convert/convert_to_plaintext.c (plaintext_convert_node_name) (plaintext_node_name): implement. Cache node names only, not other commands names, since it is more complex to do and not often useful. * tta/C/convert/convert_to_info.c (info_format_ref): use plaintext_node_name. * tta/C/convert/convert_to_plaintext.c (plaintext_format_ref): copied elements cannot be const. 2026-07-28 Patrice Dumas <pertusus@free.fr> Add dispatch for plaintext or Info specific functions, use for format_ref * tta/C/convert/converter.c (converter_format_data), tta/C/convert/converter.h (TXI_CONVERSION_FORMAT_NR), tta/C/main/converter_types.h (enum converter_format): start the list of converters by plaintext and info to make simpler using the same index to dispatch plaintext or info specific functions. * tta/C/convert/convert_to_plaintext.c (PLAINTEXT_FORMAT_FUNCTIONS) (plaintext_functions, convert_to_plaintext_internal): add dispatch table for formatting functions that are different for Info and plaintext output. Use it for format_ref. * tta/perl/Texinfo/Convert/Info.pm (format_ref): do not replace $args[0] by empty text, instead handle especially undefined $label_element. Move code around. Reorganize code to follow more the order of output and simplify a bit. * tta/C/convert/convert_to_info.c (info_format_ref), tta/C/main/plaintext_converter_state.h (PLAINTEXT_CONVERTER_STATE): add silent field in PLAINTEXT_CONVERTER_STATE. Implement most of info_format_ref. 2026-07-27 Patrice Dumas <pertusus@free.fr> * tta/C/convert/convert_to_plaintext.c (convert_to_plaintext_internal): return immediately if a text type is ignored. * tta/C/main/element_types.txt (_code, _stop_upper_case) (_suppress_styles): add types used internally in plaintext converter. * tta/C/convert/convert_to_plaintext.c (plaintext_format_ref) (convert_to_plaintext_internal): add plaintext_format_ref and use in convert_to_plaintext_internal. * tta/perl/Texinfo/Convert/Info.pm (output): minor change to set encoding only if not empty, and use defined in conditions when the value is not used. * tta/perl/Texinfo/Convert/Plaintext.pm (format_ref): remove useless variable and reset target_element too (in code that cannot be called). 2026-07-27 Gavin Smith <gavinsmith0123@gmail.com> Use "$@" * util/texi2dvi, Replace use of ${1+"$@"} with "$@". 2026-07-27 Gavin Smith <gavinsmith0123@gmail.com> Use "$@" * util/texi2pdf, util/pdftexi2dvi: Replace use of ${1+"$@"} with "$@" and remove zsh workaround. ${1+"$@"} is no longer recommended as a workaround for ancient shells, as documented in the Autoconf 2.73 manual. 2026-07-27 Patrice Dumas <pertusus@free.fr> Finish C info converter output function except for node tags * tta/C/convert/convert_to_info.c (INDIRECT_FILE_OFFSET), INDIRECT_FILE_OFFSET_LIST, *indirect_files*: add indirect files lists types and functions. * tta/C/convert/convert_to_info.c (info_output): file indirect files list and output tag table with indirect tags file and local variables. 2026-07-26 Patrice Dumas <pertusus@free.fr> Continue C info converter output implementation * tta/C/main/convert_utils.c (output_files_rename_opened): add. * tta/perl/Texinfo/Convert/Info.pm (_open_info_file, output): have _open_info_file return the encoded file name. Use that information to replace _register_closed_info_file by a simple call to output_files_register_closed. Add a variable for new output file and new encoded output filename. * tta/C/convert/convert_to_info.c (info_output): implement writing output units to files. 2026-07-26 Patrice Dumas <pertusus@free.fr> * tta/C/convert/convert_to_plaintext.c (pop_count_context): destroy the previously top context, not the one above. * tta/C/main/list_macros.h (decl_stack_fns): fix top_of_* generated prototype. * tta/perl/Texinfo/Convert/Info.pm (output): set complete_header only if there are nodes. * tta/perl/Texinfo/Convert/Info.pm (output): do not add a new context when there are no nodes. * tta/C/convert/html_prepare_converter.c, tta/C/main/errors.c (fill_source_info_file): move fill_source_info_file to errors.c. * tta/C/convert/convert_to_info.c (open_info_file): pass encoded output file name back from open_info_file. Update caller. * tta/C/convert/convert_to_info.c (info_header): free result text. * tta/C/convert/convert_to_info.c (info_header, info_output): use stream_yield_result to get hold of the resulting string. * tta/C/convert/convert_to_info.c (info_output): set conversion, implement writing file without node. 2026-07-26 Patrice Dumas <pertusus@free.fr> * tta/perl/Texinfo/Convert/Plaintext.pm: move code around. 2026-07-25 Patrice Dumas <pertusus@free.fr> * tta/perl/Texinfo/Convert/Plaintext.pm (pop_top_formatter) (process_printindex): destroy more unused formatters. * tta/C/convert/plaintext_paragraph.c (para_destroy): add deebugging output. 2026-07-25 Patrice Dumas <pertusus@free.fr> * tta/C/convert/convert_to_info.c (info_header), tta/C/convert/convert_to_plaintext.c (convert_to_plaintext_internal): call para_destroy to release the current formatter when it is not used anymore. 2026-07-25 Patrice Dumas <pertusus@free.fr> * tta/perl/Texinfo/Convert/Info.pm (format_ref): if the cross-reference target is an internal identifier, call node_name to get the cached value or setup the cached value, it will be present or needed for the tag table. * tta/perl/Texinfo/Convert/Plaintext.pm (node_name): do not check that node_names_text key exists, it should always be initialized. * tta/perl/Texinfo/Indices.pm (print_indices_information): check if argument is not undef to avoid spurious autovivification. 2026-07-25 Patrice Dumas <pertusus@free.fr> * tta/perl/Texinfo/Convert/Plaintext.pm (_cache_node_names): use the same long-living formatter as node_name. 2026-07-25 Patrice Dumas <pertusus@free.fr> Distinguish paragraph end and destruction; improve node name caching * tta/C/convert/plaintext_paragraph.c (para_end, para_destroy), tta/perl/Texinfo/Convert/ParagraphNonXS.pm (destroy), tta/perl/Texinfo/Convert/Plaintext.pm (destroy_formatter), tta/perl/XSTexinfo/ParagraphXS.xs (para_destroy): add destroy for paragraph and formatter and distinguish from end. * tta/perl/Texinfo/Convert/Plaintext.pm, tta/perl/Texinfo/Convert/Info.pm: destroy formatters when they are not used anymore. * tta/perl/Texinfo/Convert/Plaintext.pm (node_name): use a long-living formatter instead of calling convert_line_new_context. * tta/perl/Texinfo/Convert/Plaintext.pm (_cache_node_names): go through nodes_list instead of going through output units. * tta/perl/Texinfo/Convert/Plaintext.pm (convert_line) (convert_line_new_context): remove bogus third argument. * tta/perl/Texinfo/Convert/Plaintext.pm (new_formatter): simplify indent_length_next setting. Set max for paragraph type only. * tta/perl/Texinfo/Convert/Plaintext.pm: inline and remove _normalize_top_node. 2026-07-25 Patrice Dumas <pertusus@free.fr> Enable C info converter * tta/C/convert/converter.c (converter_format_data), tta/C/convert/converter.h (TXI_CONVERSION_FORMAT_NR), tta/C/main/converter_types.h (COF_info), tta/C/texi2any.c (main): register info converter functions in converter_format_data and enable in texi2any.c. * tta/C/convert/plaintext_paragraph.c (para_end): mark returned char * as const, as it should be free'd in para_end, not by the caller. * tta/C/convert/convert_to_info.c (info_header): do not free para_end return value. 2026-07-25 Patrice Dumas <pertusus@free.fr> Do not call import on Texinfo::ModulePath without args in XSLoader.pm * tta/perl/Texinfo/XSLoader.pm (BEGIN): do not call Texinfo::ModulePath->import() without argument, it is always wrong not to pass the directories. Report and bisection from Dimitris Papavasiliou. 2026-07-25 Patrice Dumas <pertusus@free.fr> Begin C info converter * tta/perl/Texinfo/Convert/Info.pm (_info_header): use directly element instead of using contents. * tta/C/convert/convert_to_plaintext.c (plaintext_get_informative_global_commands): add. * tta/C/convert/convert_to_plaintext.c (plaintext_convert_output_unit), tta/C/convert/convert_to_plaintext.h: rename convert_output_unit as plaintext_convert_output_unit. Update callers. Make some functions extern for the C info converter, and move PF_* defines to convert_to_plaintext.h. * tta/C/Makefile.am (C_libtexinfo_convert_sources), tta/C/main/plaintext_converter_state.h (PLAINTEXT_CONVERTER_STATE), C/convert/convert_to_info.c: start on the C info converter. Add in_copying_header in PLAINTEXT_CONVERTER_STATE. 2026-07-23 Patrice Dumas <pertusus@free.fr> 2026-07-23 Patrice Dumas <pertusus@free.fr> * tta/C/convert/converter.c (set_output_units_files), tta/perl/Texinfo/Convert/Converter.pm (set_output_units_files), tta/perl/Texinfo/Convert/Info.pm (output): rename node_top as top_node. Rename top_node as top_target_element before it is checked that the element is a @node element. Check that the element is a @node when needed. 2026-07-23 Patrice Dumas <pertusus@free.fr> * tta/perl/Texinfo/Convert/Info.pm (output, _info_header): set informative commands to the values at the end of the preamble outside of _info_header and reset only after converting and caching the node names. Use set_converter_preamble_language_commands and reset_lang_translation_from_customization to set all the language information. 2026-07-25 Gavin Smith <gavinsmith0123@gmail.com> * tta/C/convert/convert_to_plaintext.c (convert_to_plaintext_internal): Add TODO comment to match structure of Perl code. 2026-07-24 Gavin Smith <gavinsmith0123@gmail.com> * tta/C/convert/convert_to_plaintext.c: Initial implementation of handling "quoted commands". 2026-07-24 Gavin Smith <gavinsmith0123@gmail.com> Split quoted commands from "style map" * tta/perl/Texinfo/Convert/Plaintext.pm, (@quoted_commands, %quoted_commands): Change from array to hash. (%style_map): Do not add quoted commands. (conversion_initialization) <quoted commands>: Rather than updating $self->{'style_map'}, save the open and close quote strings in $self->{'open_quote'} and $self->{'close_quote'}. (_convert) <style map commands>: Check for commands in %quoted_commands as well as in $self->{'style_map'}; This is intended to simplify the C implementation as it will be slightly easier to check a Boolean flag for a Texinfo command rather than retrieving string values for that command. Many of the "quoted commands" are very frequently used commands such as @code so this should simplify a common case. This also means that the only command left whose values are likely to change inside $self->{'style_map'} is @dfn. 2026-07-24 Gavin Smith <gavinsmith0123@gmail.com> * tta/perl/Texinfo/Convert/Plaintext.pm (%no_punctation_munging_commands, no_punctuation_munging_commands): Rename. Remove 'var' as it is no longer checked for in this hash. 2026-07-24 Gavin Smith <gavinsmith0123@gmail.com> Split out handling of @var and @sc from "style map" * tta/perl/Texinfo/Convert/Plaintext.pm (_convert) <style map>: Separate handling of "upper case commands" (@var and @sc) from handling of commands added to $self->{'style_map'}. Most of the code in the "style map" clause was irrelevant, except for the code under the %no_punctation_munging_commands (sic) condition to set frenchspacing, which applied to @var. However, @var already had special-case code under the "upper case commands" condition, so adding the frenchspacing code under the @var condition doesn't increase complexity too much. (@asis_commands): Remove 'var', 'sc'. 2026-07-23 Gavin Smith <gavinsmith0123@gmail.com> Shadow targets for texinfo.tex * doc/texinfo.tex (\donoderef): If no preceding @node, use the section text itself as the target name, passed to new macro \setrefshadow. (\setrefshadow): Output @xrshad line to .aux file for shadow target, and run \pdfdest in PDF output. (\setref, \dosetref): Split out \dosetref. (\xrshad): Provide definition for control sequence written to .aux file. Save information on shadow targets. (\checkshadowactive): New macro, used to check if a shadow target can be referenced. (\xrefX): Use \checkshadowactive to decide if we should output a reference to a shadow target or not. (\xrdef, \xrdefctxt): Split out \xrdefctxt. (\getrefx): Use \xrdefctx. Check for a shadow target if information on the target couldn't be found. (\countA): Move definition earlier in file to use it as a general purpose count register. 2026-07-23 Patrice Dumas <pertusus@free.fr> * tta/C/main/plaintext_converter_state.h (PLAINTEXT_COMMAND_STRUCT): move to plaintext_converter_state.h. * tta/C/convert/convert_to_plaintext.c (PF_ignored) (plaintext_format_setup, plaintext_converter_initialize) (convert_to_plaintext_internal), tta/C/main/plaintext_converter_state.h (PLAINTEXT_CONVERTER_STATE): setup default ignored commands in plaintext_commands_data flags. Add commands_data PLAINTEXT_COMMAND_STRUCT array in PLAINTEXT_CONVERTER_STATE. Copy plaintext_commands_data to commands_data in plaintext_converter_initialize, and modify based on customization. * tta/C/convert/convert_to_plaintext.c (PF_informative) (plaintext_format_setup, convert_to_plaintext_internal): setup informative commands as a flag in plaintext_commands_data. 2026-07-23 Gavin Smith <gavinsmith0123@gmail.com> Add const * info/tag.c (tag_expand, struct tag_handler, tag_image) (find_tag_handler, tag_expand): Change type of parameters from char * to const char *, or char ** to const char **. 2026-07-23 Gavin Smith <gavinsmith0123@gmail.com> * info/terminal.c (terminal_new_terminal, terminal_new_terminal_hook): Remove unused. 2026-07-23 Gavin Smith <gavinsmith0123@gmail.com> Add const * info/terminal.c (terminal_initialize_terminal) (terminal_initialize_terminal_hook): * info/pcterm.c (pc_initialize_terminal): Change types of arguments from char * to const char *. * info/terminal.c (term_name): change type from char * to const char *. 2026-07-23 Gavin Smith <gavinsmith0123@gmail.com> Add const * info/variables.c (update_rendition_from_string) (update_highlight_searches, set_variable_to_value): Change argument from type char * to const char *. 2026-07-22 Patrice Dumas <pertusus@free.fr> * tta/C/convert/convert_to_plaintext.c (plaintext_free_converter): free plaintext_converter only if it was allocated. It is allocated if the converter is created from C, but not if created from XS. 2026-07-22 Patrice Dumas <pertusus@free.fr> * tta/C/main/converter_types.h (TRANSLATED_COMMAND) (TRANSLATED_COMMAND_LIST, DEPRECATED_DIR_INFO, DEPRECATED_DIRS_LIST) (enum command_type_variety, COMMAND_ID_LIST, FILE_STREAM) (FILE_STREAM_LIST, OUTPUT_FILES_INFORMATION, FILE_NAME_PATH_COUNTER) (FILE_NAME_PATH_COUNTER_LIST, CONVERTER, COMMAND_OR_TYPE) (COMMAND_OR_TYPE_STACK, STRING_STACK, INTEGER_STACK) (SORTED_INDEX_NAMES, ACCENT_ENTITY_INFO, COMMAND_ACCENT_ENTITY_INFO), tta/C/main/html_converter_state.h, tta/maintain/generate_css_data.pl: now that HTML_CONVERTER_STATE is used through a pointer, it is possible to have a declaration without definition and reverse the inclusion order of header files, by having html_converter_state.h include converter_types.h. Move back some non-HTML specific types to converter_types.h. Add #include "html_converter_state.h" where needed. * tta/C/convert/convert_to_plaintext.c, tta/C/main/converter_types.h (CONVERTER): declare struct PLAINTEXT_CONVERTER_STATE and do not include plaintext_converter_state.h in converter_types.h. 2026-07-22 Patrice Dumas <pertusus@free.fr> * tta/C/convert/convert_to_plaintext.c (plaintext_free_converter) (plaintext_converter_initialize), tta/C/main/converter_types.h (CONVERTER): make plaintext_converter a pointer. Update users. * tta/C/convert/convert_to_plaintext.c: rename self_pt as self_plaintext, more homogeneous code. 2026-07-22 Patrice Dumas <pertusus@free.fr> * tta/C/convert/converter.c (set_output_units_files): free file_name_text text. * tta/C/convert/html_prepare_converter.c (html_converter_initialize_beginning), tta/C/convert/html_converter_finish.c (html_free_converter), tta/C/main/converter_types.h (CONVERTER): make html_converter a pointer in CONVERTER. Update users. * tta/C/main/get_perl_info.c (find_element_extra_index_entry_sv): access html_converter only if converter is set. * tta/C/main/get_perl_info.c (converter_release_output_units_built), tta/C/convert/converter.c (destroy_converter_output_units), tta/C/convert/converter.c (reset_tree_to_build): check if html_converter is set. 2026-07-22 Gavin Smith <gavinsmith0123@gmail.com> * doc/texinfo.texi (HTML Output Structure Customization): Move discussion of SPLIT after discussion of USE_NODES and say that by default, "each output unit" rather than "each node" is output in a separate file as this may not be the case if USE_NODES=0. 2026-07-22 Gavin Smith <gavinsmith0123@gmail.com> * info/signals.c (info_signal_proc) <SIGWINCH>: Do not attempt to unblock signal, as this should be unnecessary. 2026-07-22 Gavin Smith <gavinsmith0123@gmail.com> * info/signals.c, info/signals.h: Move most of the contents of signals.h into signals.c. Provide declaration of initialize_info_signal_handler in signals.h. 2026-07-22 Patrice Dumas <pertusus@free.fr> * tta/C/structuring_transfo/structuring.c (register_referenced_node) (check_nodes_are_referenced): add some const. 2026-07-22 Gavin Smith <gavinsmith0123@gmail.com> * info/signals.c, info/infomap.c: Remove lines setting vim editing options. 2026-07-22 Gavin Smith <gavinsmith0123@gmail.com> * info/info.c: fix formatting 2026-07-22 Patrice Dumas <pertusus@free.fr> * tta/C/convert/format_html.c (html_get_top_unit), tta/C/convert/html_prepare_converter.c (html_set_pages_files), tta/C/main/output_unit.c (units_directions), tta/C/structuring_transfo/structuring. (check_nodes_are_referenced) (complete_node_tree_with_menus, set_top_node_next) (construct_nodes_tree), tta/C/structuring_transfo/transformations.c (regenerate_master_menu), tta/perl/Texinfo/Convert/HTMLNonXS.pm (_get_top_unit, _html_set_pages_files), tta/perl/Texinfo/OutputUnits.pm (units_directions), tta/perl/Texinfo/StructuringNonXS.pm (check_nodes_are_referenced) (complete_node_tree_with_menus, construct_nodes_tree), tta/perl/Texinfo/TransformationsNonXS.pm (regenerate_master_menu): rename node_top as top_node. Rename top_node as top_target_element when it is not checked that the element is a @node element. Check that the element is a @node when needed. * tta/perl/Makefile.tres, tta/perl/t/converters_tests.t (top_is_an_anchor, top_is_an_anchor_and_node): test an anchor being named Top. * tta/perl/Makefile.tres, tta/perl/t/converters_tests.t (@file_tests): also test file_plaintext. 2026-07-22 Patrice Dumas <pertusus@free.fr> * info/info.c (main): fix removed first letters of function name calls. 2026-07-22 Patrice Dumas <pertusus@free.fr> C plaintext converter output and convert * tta/C/convert/convert_to_plaintext.c (plaintext_converter_initialize): fix sizeof call. * tta/C/convert/convert_to_plaintext.c (plaintext_convert_tree): do not set top_formatter context that is supposed to be already set. * tta/C/main/html_converter_state.h (HTML_CONVERTER_STATE), tta/C/main/converter_types.h (CONVERTER): move output_unit_file_indices field to the generic converter as it should be along with output_unit_files. Update users. * tta/C/convert/convert_to_plaintext.c (plaintext_conversion_finalization), tta/C/main/plaintext_converter_state.h (PLAINTEXT_CONVERTER_STATE): add encoding_disabled field. * tta/perl/Texinfo/Convert/Converter.pm (set_output_units_files): use directly associated_unit for Top node. Fix set_output_unit_file call in the last resort code (which is probably never called). * tta/C/convert/converter.c (set_output_units_files): add. * tta/C/convert/convert_to_plaintext.c (convert_output_unit) (plaintext_output, plaintext_convert): implement plaintext_output and plaintext_convert fully, and convert_output_unit partially. * tta/perl/Texinfo/Convert/Plaintext.pm (output): change a variable name. 2026-07-21 Gavin Smith <gavinsmith0123@gmail.com> info: expand tabs to spaces * info/echo-area.c, info/filesys.c, info/info.c, info/infopath.c, info/makedoc.c, info/m-x.c info/nodemenu.c, info/run-external.c, info/signals.c, info/tag.c, info/tilde.c, info/variables.c, info/session.h: Expand tabs used for indentation in files where they are anomalous. Leading tabs can make the output of "git diff" look wrong due to lines being misaligned. 2026-07-21 Gavin Smith <gavinsmith0123@gmail.com> info: do less in SIGWINCH handler * info/signals.c (signal_block_winch, signal_unblock_winch): Remove functions. Remove all calls to these functions. (sigwinch_block_count): Remove. (This reverses much of change on 2014-07-07.) (info_signal_proc) <SIGWINCH, SIGUSR1>: Do not do any redrawing of terminal inside this function. Instead, set a volatile variable to indicate that the terminal size may have changed and that windows need to be redrawn. (maybe_update_after_signal): New function, to be called outside of a signal handler on a regular basis. Redraw display if it's possible the screen size has changed. * info/session.c (fill_input_buffer): Call maybe_update_after_signal. According to C standards and glibc documentation, accessing data structures or calling library functions in a signal handler can lead to undefined behaviour. 2026-07-21 Patrice Dumas <pertusus@free.fr> Continue C plaintext converter and conversion initialization * tta/C/convert/converter.c (initialize_cmd_list), tta/C/convert/html_prepare_converter.c: move initialize_cmd_list to converter.c. * tta/C/convert/convert_to_plaintext.c (plaintext_converter_initialize), tta/C/main/plaintext_converter_state.h (PLAINTEXT_CONVERTER_STATE): implement plaintext_converter_initialize. * tta/perl/Texinfo/Convert/Plaintext.pm (converter_initialize): info_special_chars_warning is an integer, not a string. * tta/C/convert/convert_to_plaintext.c (plaintext_conversion_initialization, informative_global_commands) (contents_commands, plaintext_free_converter) (plaintext_converter_initialize), tta/C/main/plaintext_converter_state.h (PLAINTEXT_CONVERTER_STATE): being the implemention of plaintext_conversion_initialization. * tta/C/convert/convert_to_plaintext.c (format_raw_cmd) (PLAINTEXT_COMMAND_STRUCT, plaintext_commands_data) (plaintext_format_setup), tta/C/convert/converter.c (converter_format_data): setup constant data related to raw formt commands. 2026-07-20 Gavin Smith <gavinsmith0123@gmail.com> Change info test not to use :cntrl: in grep regex * info/t/quoted-index-target.sh: Strip out DEL bytes from output file with tr. Remove use of "[[:cntrl:]]" in grep regex to check for such bytes. Alter test slightly to be effective with updated regex, using "--index-search" instead of "--index-search --all", which means we actually go to the referenced node. The use of "[[:cntrl:]]" in a grep regex led to a failure on Solaris 11, where apparently such character classes are not recognised by the grep program. Report from Bruno. 2026-07-20 Gavin Smith <gavinsmith0123@gmail.com> * info/info.c (main) <--index-search>: Pass -1 as starting offset to next_index_match otherwise we skip over the very first index entry in the first index node. 2026-07-19 Gavin Smith <gavinsmith0123@gmail.com> * doc/texinfo.tex (\include): Remove \tracingmacros=1 left in by mistake. 2026-07-18 Gavin Smith <gavinsmith0123@gmail.com> Remove unused definitions for !HAVE_SIGPROCMASK * info/signals.h [!HAVE_SIGPROCMASK] (sigmask, SIG_UNBLOCK, SIG_BLOCK, sigset_t, sigemptyset, sigfillset) (sigaddset, sigdelset, sigismember, sigsuspend): Remove #define's as these symbols are not otherwise used under this condition. 2026-07-18 Gavin Smith <gavinsmith0123@gmail.com> Remove check of SA_NOCLDSTOP * info/signals.c (initialize_info_signal_handler): Use #ifdef HAVE_SIGACTION instead of #ifdef SA_NOCLDSTOP. * info/signals.h: Remove check of SA_NOCLDSTOP from condition. The use of SA_NOCLDSTOP was introduced on 2004-03-27 for the benefit of Solaris 7, which is likely no longer a relevant system to support. signals.h had a comment referencing "sort.c" in the coreutils sources, but recent coreutils sources do not check SA_NOCLDSTOP any more (likely since change on 2025-11-22). 2026-07-18 Gavin Smith <gavinsmith0123@gmail.com> * info/signals.h: Remove use of HAVE_SIGSETMASK conditional. Check for sigsetmask was removed on 2019-02-17. 2026-07-19 Patrice Dumas <pertusus@free.fr> * tta/TODO: link to recently started discussions on manuals translations. Improve comments. 2026-07-18 Gavin Smith <gavinsmith0123@gmail.com> * configure.ac (AC_CHECK_FUNCS): Re-add sigprocmask as HAVE_SIGPROCMASK is used in info/signals.h. 2026-07-18 Gavin Smith <gavinsmith0123@gmail.com> * configure.ac (AC_CHECK_FUNCS): Remove check for sigprocmask. * info/signals.c (info_signal_proc) [!HAVE_SIGACTION && HAVE_SIGPROCMASK]: Remove code. Systems without sigaction but which do have sigprocmask may be rare - the Gnulib manual only mentions that both functions are missing on mingw and MSVC 14. (term_conf_busy): Remove unused. 2026-07-18 Gavin Smith <gavinsmith0123@gmail.com> * info/scan.c (scan_reference_target) <menu entry>: Allow tab to follow period in terminating node name. 2026-07-18 Gavin Smith <gavinsmith0123@gmail.com> Use sig_atomic_t * info/signals.c [!HAVE_SIGACTION] (term_conf_busy), (sigwinch_block_count): Declare as volatile sig_atomic_t rather than int, as they are accessed inside the signal handler info_signal_proc. 2026-07-17 Gavin Smith <gavinsmith0123@gmail.com> * info/signals.c (info_signal_handler) [!HAVE_SIGACTION]: Remove #define of info_signal_handler to info_signal_proc. This is incorrect as the former is a structure and the latter is a function. info_signal_handler is not referred to elsewhere in this file under !HAVE_SIGACTION, except under #ifdef SA_NOCLDSTOP, where it is accessed as a structure. If both conditions are true, there is a compilation error. This #define appears to have been present since the use of sigaction was introduced in a patch by AIDA Shinra, dated 2003-01-25. 2026-07-17 Gavin Smith <gavinsmith0123@gmail.com> * doc/texinfo.texi (Images, Image Syntax): Try to discourage using images inside paragraphs. 2026-07-17 Gavin Smith <gavinsmith0123@gmail.com> Info: Add space for image output * tta/perl/Texinfo/Convert/ParagraphNonXS.pm (add_to_counter), * tta/C/convert/plaintext_paragraph.c (para_add_to_counter), * tta/perl/XSTexinfo/ParagraphXS.xs (para_add_to_counter): New functions. * tta/perl/Texinfo/Convert/Plaintext.pm (_convert) <image>: Call it in order to account for some horizontal space taken up by an image. Add a comment describing the unsatisfactory situation. Report from Werner. 2026-07-16 Gavin Smith <gavinsmith0123@gmail.com> Change paragraphindent from string to integer * tta/data/options_data.txt: declare paragraphindent as integer * tta/perl/Texinfo/Common.pm (informative_command_value), * tta/C/main/utils.c (informative_command_value), * tta/perl/texi2any.pl, * tta/C/texi2any.c: For paragraphindent, save 'asis' value as -2 and 'none' value as 0. * tta/perl/Texinfo/Convert/Plaintext.pm (_convert): update to handle paragraphindent setting as integer. * tta/C/convert/convert_to_plaintext.c: update This simplifies the C conversion code as we now don't need to call strcmp and strtol for every paragraph. 2026-07-16 Gavin Smith <gavinsmith0123@gmail.com> LaTeX: \smallbreak before definition * tta/perl/Texinfo/Convert/LaTeX.pm (_convert_def_line): Output \smallbreak before definition output. Report from Dimitris Papavasiliou <dpapavas@protonmail.ch>. 2026-07-15 Gavin Smith <gavinsmith0123@gmail.com> * tta/C/main/text.c (text_abandon, text_yield): Rename and return pointer to text buffer. 2026-07-15 Gavin Smith <gavinsmith0123@gmail.com> Continue C plaintext converter * tta/C/main/text.c (text_abandon): New function. * tta/C/convert/convert_to_plaintext.c (stream_reset, stream_yield_result): New. (convert_to_plaintext): Call stream_yield_result to avoid calling strdup unnecessarily. 2026-07-15 Gavin Smith <gavinsmith0123@gmail.com> * tta/perl/Texinfo/Convert/Plaintext.pm (_stream_reset, _stream_yield_result): New functions. (convert_output_unit): Use them. 2026-07-15 Gavin Smith <gavinsmith0123@gmail.com> * tta/C/Makefile.am: Fix rules to refer to main/types_data.c correctly. 2026-07-14 Gavin Smith <gavinsmith0123@gmail.com> Continue C plaintext converter * tta/C/convert/convert_to_plaintext.c (convert_to_plaintext_internal): Add more template code. 2026-07-14 Gavin Smith <gavinsmith0123@gmail.com> Continue C plaintext converter * tta/C/convert/convert_to_plaintext.c (convert_to_plaintext_internal): Return statement after processing text now matches Perl code. 2026-07-14 Gavin Smith <gavinsmith0123@gmail.com> * tta/perl/Texinfo/Convert/Plaintext.pm (_convert): Return after processing text. 2026-07-14 Gavin Smith <gavinsmith0123@gmail.com> Rename generated file. * tta/C/main/element_types.awk: Rename generated file element_types.c to types_data.c. This means that the comment at the top of tta/C/main/types_data.h refers to a file which exists, types_data.c, for which it contains declarations. This code has changed before, most recently in 2024-05-31 when the number of .c files generated by this helper program was reduced from 2 to 1. 2026-07-14 Gavin Smith <gavinsmith0123@gmail.com> * tta/: run "gnulib --add-import unistr/u32-mbsnlen unistr/u32-mbtouc". Report from Bruno Haible. 2026-07-14 Gavin Smith <gavinsmith0123@gmail.com> * tta/: run "gnulib --remove-import unistr/u32-strdup" as this module is not needed any more. 2026-07-14 Gavin Smith <gavinsmith0123@gmail.com> * info/t/quoted-index-target.sh: update test 2026-07-14 Thomas <thomb@pm.me> (tiny change) * info/indices.c (format_reference): Place quoting DEL bytes around node name if it contains a :. * info/scan.h, info/scan.c: move INFO_QUOTE, INFO_QUOTE_STR definition to scan.h. 2026-07-14 Gavin Smith <gavinsmith0123@gmail.com> * info/t/quoted-index-target.sh: in grep regular expression, replace "[[:blank:]]\{1,\}" with " *", as this seems simpler and avoids any hint of locale dependence. 2026-07-12 Gavin Smith <gavinsmith0123@gmail.com> * tta/C/main/unicode-collation: sync 2026-07-12 Gavin Smith <gavinsmith0123@gmail.com> * tta/C/convert/convert_to_plaintext.c (plaintext_converter_defaults): Call new generated function add_plaintext_regular_options_defaults. 2026-07-12 Gavin Smith <gavinsmith0123@gmail.com> * tta/data/converters_defaults.txt: Add section for 'plaintext'. Edit comments at top of file. * tta/perl/Texinfo/Convert/Plaintext.pm (%defaults): Set with Texinfo::Options::get_regular_options. 2026-07-11 Gavin Smith <gavinsmith0123@gmail.com> Fix messaging after index search * info/indices.c (info_indices_of_file_buffer): Reset list of index entries once we find a node with an index tag. * info/t/infodir/index-search.info: Add missing index tag to test file. It was possible that the string "CAN'T SEE THIS" would be displayed as the name of an index in the message line, due to incorrect internal counting of index entries. 2026-07-11 Thomas <thomb@pm.me> (tiny change) * info/t/quoted-index-target.sh: new test. 2026-07-11 Gavin Smith <gavinsmith0123@gmail.com> Fix index reference to node with : in its name * info/scan.c (scan_reference_label): Include DEL byte in argument to strcspn. This reverses change on 2024-12-30. Fix from ThomB <thomb@pm.me>. 2026-07-10 Gavin Smith <gavinsmith0123@gmail.com> * README-hacking: remove missed self-destructing note for post 7.3 release, which should have been removed after DUMP_TREE change on 2026-04-01. 2026-07-10 Gavin Smith <gavinsmith0123@gmail.com> Attempt at comments in data file cross-referencing other files * tta/data/converters_defaults.txt: add comment at top of file cross-referencing other related files. * tta/maintain/regenerate_perl_options_info.pl, * tta/maintain/regenerate_C_options_info.pl: Reference converter_defaults.txt and relevant Makefile.am files. Correct file names in comments at tops of files. * tta/perl/Makefile.am: Add comment about keeping a file name in sync with a comment in a another file. The thinking behind these comments is that if someone finds one of these files is relevant to converter options values, they should be easily able to find how they are set and used across the rest of the code base. They should also be able to easily know what comments to update in case of any changes to prevent out-of-date information. 2026-07-10 Gavin Smith <gavinsmith0123@gmail.com> Continue C plaintext converter * tta/C/convert/convert_to_plaintext.c (convert_to_plaintext_internal): Get paragraphindent conf value as string with strtoul. From Patrice. 2026-07-10 Gavin Smith <gavinsmith0123@gmail.com> Continue C plaintext converter * tta/C/convert/convert_to_plaintext.c (convert_to_plaintext_internal): Don't get paragraph indent from self->conf until we work out how to do this. Fill out more skeleton code. 2026-07-09 Gavin Smith <gavinsmith0123@gmail.com> * tta/C/convert/convert_to_plaintext.c (convert_to_plaintext_internal): Get paragraph indent from self->conf. 2026-07-09 Gavin Smith <gavinsmith0123@gmail.com> new_formatter for C plaintext converter * tta/C/convert/convert_to_plaintext.c (new_formatter): Set appropriate paragraph formatting settings. (This produced a big improvement in the output at this stage of development.) 2026-07-09 Gavin Smith <gavinsmith0123@gmail.com> Simplify new_formatter interface * tta/perl/Texinfo/Convert/Plaintext.pm (new_formatter): Take 'indent_length' and 'indent_length_next' as subroutine parameters rather than hash values. This should make this function easier to replicate in a C reimplementation. (convert_line, convert_line_new_context): Likewise. 2026-07-08 Gavin Smith <gavinsmith0123@gmail.com> Simplify new_formatter interface * tta/perl/Texinfo/Convert/Plaintext.pm (_convert) <list of floats>: Do not pass "max" configuration value to 'new_formatter' as 'new_formatter' retrieves this value itself. This allows simplifying the interface of 'new_formatter' as now the only configuration values it takes are 'indent_length' and 'indent_length_next'. 2026-07-07 Gavin Smith <gavinsmith0123@gmail.com> * tta/C/convert/convert_to_plaintext.c: Increase use of stack functions slightly. 2026-07-06 Patrice Dumas <pertusus@free.fr> * tta/C/main/builtin_commands.h, tta/C/main/command_data.awk (END): rename builtin_command_data as command_data. Update users. 2026-07-06 Patrice Dumas <pertusus@free.fr> * tta/C/parsetexi/commands.h (parsed_command_data): rename command_data as parsed_command_data. Update callers. 2026-07-07 Gavin Smith <gavinsmith0123@gmail.com> * tta/C/convert/convert_to_plaintext.c (convert_to_plaintext_internal): Call element_builtin_cmd and remove TODO comment. From Patrice. 2026-07-07 Gavin Smith <gavinsmith0123@gmail.com> Remove parameters from set_space_protection * tta/perl/Texinfo/Convert/ParagraphNonXS.pm, (set_space_protection), * tta/C/convert/plaintext_paragraph.c (para_set_space_protection), * tta/perl/XSTexinfo/ParagraphXS.xs (para_set_space_protection): Remove all optional parameters. * tta/perl/t/z_misc/paragraph.t: update use of set_space_protection. 2026-07-07 Gavin Smith <gavinsmith0123@gmail.com> Reduce use of set_space_protection * tta/perl/XSTexinfo/ParagraphXS.xs, tta/perl/Texinfo/Convert/ParagraphNonXS.pm (set_frenchspacing, set_double_width_no_break): New functions. * tta/perl/Texinfo/Convert/Paragraph.pm: Add these to @EXPORT_OK. * tta/perl/Texinfo/Convert/Plaintext.pm (_open_code, _convert), * tta/perl/Texinfo/Convert/Info.pm (_format_ref): Use these instead of set_space_protection, as it's easier to understand without remembering what all the arguments to set_space_protection mean. 2026-07-06 Patrice Dumas <pertusus@free.fr> * tta/C/main/manipulate_indices.c (print_indices_sort_strings): inline setup_indices_entries_sort_strings in print_indices_sort_strings and remove. More comments. * tta/C/main/manipulate_indices.c (INDEX_ENTRIES_SORT_STRINGS) (find_indices_entries_sort_strings_index, print_indices_sort_strings): replace index field in INDEX_ENTRIES_SORT_STRINGS by index_name, as it is all that is accessed from the index. * tta/perl/t/z_misc/test_sort.t: more comments. 2026-07-06 Patrice Dumas <pertusus@free.fr> * tta/C/main/document.c (document_sorted_indices_by_index) (document_sorted_indices_by_letter): return indices sorted by index or by letter instead of the collation information. Update callers. 2026-07-06 Patrice Dumas <pertusus@free.fr> * tta/perl/t/z_misc/accents.t: add comments, remove useless FIXME. 2026-07-06 Gavin Smith <gavinsmith0123@gmail.com> * tta/C/convert/plaintext_paragraph.h (PARA_CONF_VARIABLES_LIST): Remove word_counter and lines_counter as these are not set from outside the module. * tta/C/convert/plaintext_paragraph.c (struct PARAGRAPH): Reorder struct members. 2026-07-06 Gavin Smith <gavinsmith0123@gmail.com> Paragraph conf * tta/perl/XSTexinfo/ParagraphXS.xs (para_new): Warn if there is a key in the paragraph configuration hash that is not a recognized configuration variable. * tta/perl/Texinfo/Convert/Plaintext.pm (process_printindex): Use 'indent_length' instead of 'indent' in call to new_formatter. * tta/perl/Texinfo/Convert/Info.pm (format_ref): Fix call to convert_line_new_context. 2026-07-05 Patrice Dumas <pertusus@free.fr> * tta/perl/t/test_utils.pl (test): fix variable name. Report from Gavin. 2026-07-05 Gavin Smith <gavinsmith0123@gmail.com> * tta/perl/Texinfo/Convert/Plaintext.pm (new_formatter): Split $conf parameter into two parameters, one for paragraph configuration only. 2026-07-05 Gavin Smith <gavinsmith0123@gmail.com> * tta/perl/Texinfo/Convert/Plaintext.pm (new_formatter) <flush commands>: Set 'ignore_columns' and 'keep_end_lines' on container configuration rather than calling set_space_protection. 2026-07-05 Gavin Smith <gavinsmith0123@gmail.com> * tta/C/convert/plaintext_paragraph.h (PARA_CONF_VARIABLES_LIST): Add double_width_no_break, for completeness. 2026-07-05 Patrice Dumas <pertusus@free.fr> Converter indices sort strings comparison in tests * tta/C/main/manipulate_indices.c (print_indices_sort_strings), tta/perl/Texinfo/Indices.pm (print_indices_sort_strings): return NULL/undef instead of an empty string. * tta/perl/t/test_utils.pl (test): compare converter indices sort strings with reference in tests. 2026-07-05 Patrice Dumas <pertusus@free.fr> Implement printing of converter indices sort strings * tta/C/main/document.c (print_document_indices_sort_strings), tta/C/main/manipulate_indices.c (INDEX_ENTRIES_SORT_STRINGS) (INDICES_ENTRIES_SORT_STRINGS) (find_indices_entries_sort_strings_index) (setup_indices_entries_sort_strings, print_indices_sort_strings), tta/perl/Texinfo/Document/IndicesNonXS.pm (print_document_indices_sort_strings), tta/perl/Texinfo/Indices.pm (print_indices_information): split out of print_document_indices_sort_strings the association of index entries to sort strings and the output of sort strings by index to the print_indices_sort_strings function, moved to manipulate_indices.c or Indices.pm. Move INDEX_ENTRIES_SORT_STRINGS, INDICES_ENTRIES_SORT_STRINGS, find_indices_entries_sort_strings_index and setup_indices_entries_sort_strings to manipulate_indices.c. * tta/C/convert/converter.c (print_converter_indices_sort_strings), tta/perl/Texinfo/Convert/ConverterNonXS.pm (print_converter_indices_sort_strings), tta/perl/XSTexinfo/convert/ConvertConverterXS.xs (print_converter_indices_sort_strings): add print_converter_indices_sort_strings, including an XS interface. * tta/perl/t/test_utils.pl (test): prepare printing sort strings for converters, setting new variables in output files and calling print_converter_indices_sort_strings. 2026-07-04 Patrice Dumas <pertusus@free.fr> * tta/perl/t/test_utils.pl, tta/perl/texi2any.pl: add comments on I18N::Langinfo on Windows platform. 2026-07-04 Patrice Dumas <pertusus@free.fr> * tta/perl/t/test_utils.pl (test): with $arg_output set, collect errors messages after they have been collected and fix corresponding code. 2026-07-05 Gavin Smith <gavinsmith0123@gmail.com> C plaintext converter - start on paragraph indentation * tta/C/main/list_macros.h (decl_stack_fns, def_stack_fns) (top_, pop_): New. * tta/C/main/plaintext_converter_state.h: fill out * tta/C/convert/convert_to_plaintext.c: At a new paragraph, access 'format_context' stack and set paragraph indentation settings. 2026-07-05 Gavin Smith <gavinsmith0123@gmail.com> * tta/perl/Texinfo/Convert/Plaintext.pm (_stream_output_count_nl): New function, copied from _stream_output. (_stream_output): Remove optional third parameter. 2026-07-04 Gavin Smith <gavinsmith0123@gmail.com> Fix const warning * tta/C/main/utils.c (ultimate_index_const): Add. The same as ultimate_index, except take and return const pointers. * tta/C/main/manipulate_indices.c (merge_indices): Call it instead of ultimate_index. Warning presumably introduced in commit on 2026-06-30. 2026-07-04 Gavin Smith <gavinsmith0123@gmail.com> * tta/C/convert/convert_to_plaintext.c: flesh out slightly 2026-07-04 Gavin Smith <gavinsmith0123@gmail.com> * tta/C/convert/convert_to_plaintext.c (add_newline_if_needed): Add. 2026-07-04 Gavin Smith <gavinsmith0123@gmail.com> C plaintext converter - separate paragraphs * tta/C/convert/convert_to_plaintext.c: add paragraph formatter on stack for each paragraph. * tta/C/convert/plaintext_paragraph.c (para_add_next, para_add_text): Take const char * parameters rather than char *. 2026-07-04 Patrice Dumas <pertusus@free.fr> * tta/C/convert/converter.c (CONVERTER_FORMAT_DATA): add to comment on perl_converter_class. 2026-07-04 Patrice Dumas <pertusus@free.fr> * tta/C/Makefile.am (ctexi2any_CPPFLAGS), tta/C/texi2any.c (load_interpreter, main): have loading_info embedded_interpreter default to txi_interpreter_want_embedded, do not set it based on the EMBED_PERL flag, remove EMBED_PERL. Do not warn in load_interpreter if the interpreter is not built, should be done by the calling code. Add such a missing warning. * tta/C/Makefile.am (noinst_PROGRAMS, texistatic_*): rename teximakehtml as texistatic. 2026-07-04 Patrice Dumas <pertusus@free.fr> * tta/C/texi2any.c (main), tta/perl/texi2any.pl: determine if there is no argument and error out earlier, before loading converter code. 2026-07-04 Gavin Smith <gavinsmith0123@gmail.com> * doc/texinfo.tex (\include): Check if the file name includes a space character, and if it does, wrap the file name in { } before running \input. Report from Werner Lemberg. 2026-07-04 Patrice Dumas <pertusus@free.fr> * tta/C/main/convert_utils.c (definition_arguments_content) (definition_category_tree): assume that the tree is correct and that the definition line arguments container always exist. Change in variable names, change in comments. 2026-07-03 Patrice Dumas <pertusus@free.fr> * README-hacking: update the list of files relevant for ppport. 2026-07-04 Gavin Smith <gavinsmith0123@gmail.com> CONVERTER_FORMAT_DATA * tta/C/convert/converter.h, tta/C/convert/converter.c (CONVERTER_FORMAT_DATA, converter_format_data): Move type definition to converter.c and declare data array as static. Add a comment about the purpose of the 'perl_converter_class' string. 2026-07-03 Gavin Smith <gavinsmith0123@gmail.com> Initial use of paragraph formatting * tta/C/convert/convert_to_plaintext.c: Add formatter stack and access plaintext_paragraph.c paragraph formatting. 2026-07-03 Patrice Dumas <pertusus@free.fr> * tta/C/Makefile.am (C_libtexinfo_sources), tta/C/parsetexi/set_parser_conf.c, tta/C/parsetexi/set_parser_conf.h: rename parsetexi/conf.c to parsetexi/set_parser_conf.c. Update users. 2026-07-03 Patrice Dumas <pertusus@free.fr> * tta/C/Makefile.am (C_libtexinfo_sources), tta/C/parsetexi/parser_api.c, tta/C/parsetexi/parser_api.h: rename parsetexi/api.c to parsetexi/parser_api.c. Update users. 2026-07-03 Patrice Dumas <pertusus@free.fr> * tta/tests/many_input_files/*.sh: add ${dir_suffix} for staging_dir to use a different one for native and non native test. 2026-07-03 Patrice Dumas <pertusus@free.fr> * tta/C/Makefile.am (C_libtexinfo_convert_sources): add main/plaintext_converter_state.h. 2026-07-03 Patrice Dumas <pertusus@free.fr> * tta/perl/Makefile.am (documentmodulesdir) (dist_documentmodules_DATA): fix installation directory for Texinfo::Document::Indices* modules. 2026-07-03 Patrice Dumas <pertusus@free.fr> * doc/tta_api/Makefile.am (texi2any_internals_dependencies), tta/perl/Makefile.am (dist_modules_DATA), tta/perl/Texinfo/Document.pm, tta/perl/Texinfo/Document/Indices.pm (merged_indices, _document_indices_sort_strings) (sorted_indices_by_letter, sorted_indices_by_index), tta/perl/Texinfo/DocumentNonXS.pm, tta/perl/Texinfo/Document/IndicesNonXS.pm (print_document_indices_information) (print_document_indices_sort_strings), tta/perl/XSTexinfo/Makefile.am (xs_LTLIBRARIES, DocumentIndicesXS_*), tta/perl/XSTexinfo/parser_document/DocumentXS.xs, tta/perl/XSTexinfo/parser_document/DocumentIndicesXS.xs (print_document_indices_information) (print_document_indices_sort_strings): move indices related code from Texinfo::Document* and XS interfaces to a new module, Texinfo::Document::Indices, to avoid a circular dependency and to separate the document indices related code. Update callers. 2026-07-03 Patrice Dumas <pertusus@free.fr> * tta/perl/Texinfo/Translations.pm (_substitute_element_array): remove the call to Texinfo::Document::build_tree, there should never be a tree with an handle only passed to gdt and similar. 2026-07-03 Patrice Dumas <pertusus@free.fr> * tta/perl/Texinfo/XSLoader.pm (BEGIN): call Texinfo::ModulePath import after a successful require. 2026-07-03 Patrice Dumas <pertusus@free.fr> * README-hacking, tta/README: add a short information on doing a new texi2any backend in C. 2026-07-03 Gavin Smith <gavinsmith0123@gmail.com> * tta/C/convert/plaintext_paragraph.c: rename all functions to have para_ prefix rather than xspara_ prefix. 2026-07-03 Gavin Smith <gavinsmith0123@gmail.com> * tta/C/main/plaintext_converter_state.h: add FORMATTER. 2026-07-03 Gavin Smith <gavinsmith0123@gmail.com> Move xspara.c * tta/perl/XSTexinfo/xspara.c, tta/C/convert/plaintext_paragraph.c, tta/perl/XSTexinfo/xspara.h, tta/C/convert/plaintext_paragraph.h: xspara.c and xspara.h moved and renamed in preparation for being used in non-XS C code. 2026-07-03 Gavin Smith <gavinsmith0123@gmail.com> * tta/C/main/plaintext_converter_state.h (COUNT_CONTEXT_STACK): Define with def_list_type etc. 2026-07-03 Patrice Dumas <pertusus@free.fr> * tta/C/texi2any.c (INTERPRETER_LOADING_INFO): add embedded_interpreter field. * tta/C/texi2any.c (load_interpreter, main): use embedded_interpreter field of INTERPRETER_LOADING_INFO instead of the embedded_interpreter variable. Check if the interpreter should be loaded based on loading_info->embedded_interpreter in load_interpreter instead of in the calling code. 2026-07-03 Patrice Dumas <pertusus@free.fr> * tta/C/Makefile.am (libperlcall_utils_la_SOURCES), tta/C/texi2any.c (enum interpreter_use): move enum interpreter_use to texi2any.c, and define used values only. Remove interpreter_use_types.h. 2026-07-03 Patrice Dumas <pertusus@free.fr> * tta/C/main/xs_utils.h, tta/C/main/replace_set_perl_interpreter.c: fix set_use_perl_interpreter prototype. 2026-07-03 Patrice Dumas <pertusus@free.fr> * tta/C/main/set_perl_interpreter.c (use_perl_interpreter) (set_use_perl_interpreter, has_perl_interpreter): only use 2 values for use_perl_interpreter, 0 or 1. Update callers. * tta/perl/XSTexinfo/parser_document/DocumentXS.xs (init): call set_use_perl_interpreter independently of initialization of C libraries. 2026-07-03 Patrice Dumas <pertusus@free.fr> * tta/C/texi2any.c (main): remove default_is_html, considering that it is always false. 2026-07-03 Gavin Smith <gavinsmith0123@gmail.com> Generic list macros * tta/C/main/document_types.h (VALUE_LIST, ELEMENT_STACK), * tta/C/main/tree_types.h (FLOAT_RECORD_LIST, COMMAND_STACK): Define with def_list_type. 2026-07-03 Patrice Dumas <pertusus@free.fr> * tta/C/structuring_transfo/structuring.c (new_complete_node_menu) (new_detailmenu): add CONVERTER_CACHE_TRANSLATE argument and pass to gdt. Update callers. * tta/C/convert/format_html.c (html_convert_heading_command): give html_translation_function to new_complete_node_menu and new_complete_menu_master_menu with such that the user can replace the default translations. 2026-07-03 Patrice Dumas <pertusus@free.fr> * tta/C/main/html_converter_state.h (SPECIAL_UNIT_INFO_LIST): not a list of pointers. 2026-07-02 Patrice Dumas <pertusus@free.fr> * tta/C/main/translations.c (general_output_strings_setup): move txi_general_output_strings_setup to translations.c and rename as general_output_strings_setup. Update callers. * tta/C/parsetexi/api.c (parser): move txi_parser to api.c and rename as parser. Update callers. * tta/C/structuring_transfo/transformations.c (complete_transform_document), tta/C/structuring_transfo/transformations.h (TT_TYPES_LIST), tta/swig/python/Makefile.am (_Texinfo_la_CPPFLAGS), tta/swig/perl/Makefile.am (Texinfo_la_CPPFLAGS): move txi_complete_document to transformations.c and rename as complete_transform_document. Update callers. Move TT_TYPES_LIST and STTF_* to transformations.h. Add structuring_transfo to includes. * tta/C/Makefile.am (C_libtexinfo_main_sources): remove texinfo.c. 2026-07-02 Patrice Dumas <pertusus@free.fr> * tta/C/main/call_perl_function.c (txi_use_interpreter_load_modules), tta/C/convert/texinfo.c: move the txi_use_interpreter_load_modules unused function to call_perl_function.c. 2026-07-02 Patrice Dumas <pertusus@free.fr> * tta/C/convert/texinfo.c, tta/C/api_for_swig/swig_interface.c (txi_ext_output_parser_error_messages) (txi_ext_output_document_error_messages), tta/C/texi2any.c (main), tta/swig/texinfo.i: inline txi_output_parser_error_messages in main. Move txi_output_document_error_messages and txi_output_parser_error_messages dd to swig_interface.c and rename as txi_ext_output_parser_error_messages and and txi_ext_output_document_error_messages. Use in texinfo.i. * tta/C/convert/texinfo.c, tta/C/texi2any.c (main, close_file_stream): move txi_close_file_stream to texi2any.c and rename as close_file_stream. * tta/C/convert/texinfo.c, tta/C/texi2any.c (TRANSFORMATION_NAME_FLAG) (INTERPRETER_LOADING_INFO): move structures to texi2any.c. * tta/C/convert/texinfo.c, tta/C/texi2any.c (main) (remove_converter_and_output_units), tta/swig/texinfo.i: inline txi_parse_texi_file, txi_converter_output, txi_sort_element_counts, txi_destroy_document, txi_converter_remove_output_units and txi_destroy_converter in texi2any.c, add the remove_converter_and_output_units function. Call directly destroy_document in texinfo.i. 2026-07-01 Gavin Smith <gavinsmith0123@gmail.com> Use generic list macros for HTML_CONVERTER_STATE * tta/C/main/html_converter_state: (FILE_STREAM_LIST, FILE_SOURCE_INFO_LIST, CSS_SELECTOR_STYLE_LIST) (HTMLXREF_MANUAL_LIST, STRING_STACK_LIST, SORTED_INDEX_NAMES) (SPECIAL_UNIT_INFO_LIST, DEPRECATED_DIRS_LIST): Define with def_list_type. 2026-07-01 Gavin Smith <gavinsmith0123@gmail.com> Use generic list macros for HTML_CONVERTER_STATE * tta/C/main/html_converter_state: (COMMAND_OR_TYPE_STACK, STRING_STACK, INTEGER_STACK) (ELEMENT_REFERENCE_STACK, HTML_TARGET_LIST) (EXPLAINED_COMMAND_TYPE_LIST, ELEMENT_REFERENCE_STACK_STACK) (PAGES_CSS_LIST, TRANSLATED_COMMAND_LIST) (HTML_FORMATTING_CONTEXT_STACK, HTML_DOCUMENT_CONTEXT_STACK) (HTML_PENDING_FOOTNOTE_STACK, HTML_INLINE_CONTENT_STACK) (HTML_ASSOCIATED_INLINE_CONTENT_LIST): Define with def_list_type. This changes the names of fields 'stack' to 'list', and 'top' to 'number'. All uses updated. 2026-07-01 Gavin Smith <gavinsmith0123@gmail.com> * tta/C/main/translations.c (add_string_to_named_string_element_list) (add_element_to_named_string_element_list): Define with generic macros. 2026-07-01 Gavin Smith <gavinsmith0123@gmail.com> * tta/C/main/floats.c (add_to_listoffloats_list, add_to_float_information_list): Use generic macros. 2026-07-01 Gavin Smith <gavinsmith0123@gmail.com> Generic list macros: add reallocate_ * tta/C/main/list_macros.h (decl_list_fns, def_list_fns): Generate reallocation function. * tta/C/main/structure_list.c (setup_reallocate_relations_list): Remove this macro. Rely on def_list_fns to generate reallocation functions. (add_heading_to_heading_relations_list): Use generic list macros to append to list. 2026-07-01 Gavin Smith <gavinsmith0123@gmail.com> Generic list macros * tta/C/main/structure_list.c (add_to_node_relations_list, add_to_const_node_relations_list) (add_to_section_relations_list): Define with list_macros.h macros. 2026-07-01 Gavin Smith <gavinsmith0123@gmail.com> * tta/C/texi2any.c (main): Avoid accessing an uninitialized variable. 2026-06-30 Patrice Dumas <pertusus@free.fr> * tta/C/convert/texinfo.c, tta/C/texi2any.c (find_tree_transformation) (txi_tree_transformation_table, load_interpreter) (txi_load_init_file): move txi_tree_transformation_table, txi_find_tree_transformation, txi_load_interpreter, txi_load_init_file and err_add_option_value to texi2any.c. Remove leading txi_ from function names. * tta/C/convert/texinfo.c (txi_sort_element_counts), tta/C/texi2any.c (main): inline txi_setup_load_interpreter, txi_set_base_default_options, txi_stop_interpreter, txi_converter_output_format_setup, txi_converter_format_defaults, txi_converter_initialization_setup in texi2any.c main and in txi_sort_element_counts and remove. 2026-06-30 Patrice Dumas <pertusus@free.fr> * tta/C/main/translations.c (gdt_tree), tta/perl/Texinfo/Translations.pm (gdt, gdt_string): change order of arguments, put translation_context before debug_level. Update callers. 2026-06-30 Gavin Smith <gavinsmith0123@gmail.com> * tta/C/main/manipulate_tree.c (add_source_mark): Use generic list macro. 2026-06-30 Gavin Smith <gavinsmith0123@gmail.com> * tta/C/main/utils.c (add_string): Define with generic list macros. 2026-06-30 Gavin Smith <gavinsmith0123@gmail.com> Generic list appending * tta/C/main/list_macros.h: (decl_list_fns, def_list_fns): New macros for declaring and defining functions that operating on lists. (add_): Macro for accessing function defined by def_list_fns. * tta/C/main/tree.c (add_to_const_element_list, add_to_element_list): Define with decl_list_fns/def_list_fns. 2026-06-30 Gavin Smith <gavinsmith0123@gmail.com> Start on generic list macros * tta/C/main/list_macros.h: new file. (def_list_macro): New macro for defining list type. * tta/C/main/tree_types.h: use it throughout. 2026-06-30 Patrice Dumas <pertusus@free.fr> * tta/C/convert/convert_html.c (html_cdt_string): call gdt_string with the cache function replacement argument instead of reimplementing gdt_string. 2026-06-30 Patrice Dumas <pertusus@free.fr> * README-hacking: explain how to use commands and visually check that caching of translated strings and reuse of associated trees is effective. * tta/C/convert/convert_html.c (html_cache_translate_string) (html_cdt_string), tta/C/main/translations.c (cache_translate_string) (gdt_tree), tta/perl/Texinfo/Convert/HTML.pm (_html_cache_translate_string), tta/perl/Texinfo/Translations.pm (cache_translate_string, gdt): make translation caching and tree reusing debugging messages easier to read and to extract. * tta/perl/t/test_utils.pl (test): use a variable if debugging is set. Add output for the main test steps if debugging is set. * tta/perl/t/test_utils.pl (test): pass debug indicator to Document by using completed_parser_options instead of parser_options to set structuring and document options. Pass debug indicator to converter to raw text. * tta/C/main/convert_to_text.c (convert_to_text_internal), tta/C/main/convert_utils.c (definition_category_tree), tta/perl/Texinfo/Convert/Text.pm (_convert), tta/perl/Texinfo/Convert/Utils.pm (definition_category_tree): pass debug level in more functions, when outputting raw text. * tta/C/main/manipulate_indices.c (merge_indices), tta/perl/Texinfo/Indices.pm (setup_index_entries_sort_strings): sort merged indices based on name in C, and sort directly index names processed in setup_index_entries_sort_strings in Perl, to have a reproducible order for index sort string generation in case there is an error or debugging output. 2026-06-29 Patrice Dumas <pertusus@free.fr> * tta/C/convert/converter.c (converter_format_data, cdt_tree), tta/C/convert/converter.h (CONVERTER_FORMAT_DATA), tta/C/main/convert_utils.c: add cdt_tree dispatch to CONVERTER_FORMAT_DATA. Move cdt_tree out of convert_utils.c to converter.c and dispatch to the cdt_tree format function if found in converter_format_data, for HTML. * tta/C/convert/converter.c (converter_expand_today) (converter_translated_command_tree): remove cdt_tree_fn argument, pass directly cdt_tree. 2026-06-29 Patrice Dumas <pertusus@free.fr> * tta/C/main/converter_types.h (CONVERTER_CACHE_TRANSLATE): rename TRANSLATION_FUNCTION as CONVERTER_CACHE_TRANSLATE. Update users. * tta/C/main/converter_types.h (CONVERTER_CDT_TREE), tta/C/main/convert_utils.c (expand_today, definition_category_tree) (translated_command_tree): add CONVERTER_CDT_TREE that brings together a converter and a cdt_tree function reference. Pass it as argument to expand_today, definition_category_tree and translated_command_tree. Update callers. 2026-06-29 Gavin Smith <gavinsmith0123@gmail.com> Start count context stack * tta/C/main/text.c (text_destroy): Add function to free and zero text buffer. * tta/C/main/plaintext_converter_state.h: split from tta/C/main/converter_types.h. * tta/C/main/plaintext_converter_state.h (PLAINTEXT_CONVERSION_STATE, PLAINTEXT_CONVERTER_STATE): rename. * tta/C/convert/convert_to_plaintext.c: Add functions for count context stack, conversion initialization and finalization. 2026-06-28 Gavin Smith <gavinsmith0123@gmail.com> * tta/C/main/html_converter.h, tta/C/main/html_converter_state.h: rename to html_converter_state.h. 2026-06-29 Patrice Dumas <pertusus@free.fr> * tta/C/convert/format_html.c (html_convert_def_line_type): handle the case of parent element not existing, using the same extra information as in Perl. * tta/C/main/converter_types.h (TRANSLATION_FUNCTION), tta/C/main/translations.c (gdt_tree, gdt_string): add a translation function argument to be able to replace the call to cache_translate_string (same as in Perl). Update callers. * tta/C/convert/convert_html.c (html_cdt_tree): call gdt_tree with html_cache_translate_string in argument. Remove html_gdt_tree. 2026-06-29 Patrice Dumas <pertusus@free.fr> * tta/perl/Texinfo/Translations.pm (cache_translate_string): set the context to an empty string if the language is unknown. Set $cached_lang in the block it is used. * tta/C/main/translations.c (cache_translate_string): show translation_context in debug message. * tta/C/convert/convert_html.c (html_cdt_string), tta/C/main/translations.c (gdt_string), tta/perl/Texinfo/Translations.pm (gdt_string): add debug message for *_string. 2026-06-28 Patrice Dumas <pertusus@free.fr> * tta/perl/Texinfo/Translations.pm (setup_output_strings) (cache_translate_string), tta/perl/Texinfo/TranslationsNonXS.pm (_XS_setup_output_strings), tta/perl/XSTexinfo/parser_document/TranslationsXS.xs (_XS_setup_output_strings): remove XS interface for cache_translate_string. The translated string tree is in Perl only, with the XS interface the tree is associated to the string in the array reference returned from the XS function, therefore the array reference is recreated for each call, therefore the tree is not reused. Therefore remove the XS interface. Add _XS_setup_output_strings to setup the strings both in C and Perl. * tta/C/convert/convert_html.c (html_gdt_tree), tta/C/main/translations.c (gdt_tree), tta/perl/Texinfo/Translations.pm (gdt): add debug output for translated tree reusing. 2026-06-28 Patrice Dumas <pertusus@free.fr> * tta/C/main/build_perl_info.c (document_tree): change the order of conditionals to have a code easier to read. 2026-06-28 Patrice Dumas <pertusus@free.fr> * tta/perl/t/test_utils.pl (test): do not call $document->tree again after structuring code, the previously obtained tree should be right. * tta/C/main/build_perl_info.c (document_tree): add to comment now that $document->tree(1) is not called twice anymore. 2026-06-28 Patrice Dumas <pertusus@free.fr> * tta/C/main/build_perl_info.c (document_tree): reorganize code to be easier to read. Assume that sv field is set upon building tree to Perl. Assert that an existing tree_document_descriptor is the same as the document one. 2026-06-28 Gavin Smith <gavinsmith0123@gmail.com> Finish moving non-types out of html_converter_types.h * tta/maintain/generate_code_convert_data.pl: Generate "enum global_unit_direction" (defining D_up etc.) in html_conversion_data.h. This means that html_converter_types.h does not need to include "html_conversion_data.h", which contains variable declarations. This means that html_converter_types.h now only contains types, matching its name. 2026-06-28 Gavin Smith <gavinsmith0123@gmail.com> Move some non-types out of html_converter_types.h * tta/C/convert/html_converter_types.h, * tta/C/convert/html_prepare_converter.h: Move declarations to html_prepare_converter.h: html_command_args_flags, html_commands_data, special_list_mark_css_string_no_arg_command, no_arg_formatted_cmd, style_formatted_cmd, accent_cmd, format_raw_cmd. 2026-06-28 Gavin Smith <gavinsmith0123@gmail.com> Move some non-types out of html_converter_types.h * tta/C/convert/html_converter_types.h, * tta/C/convert/convert_html.h: Move declarations of html_conversion_context_type_names and html_stage_handler_stage_type_names to convert_html.h. 2026-06-28 Gavin Smith <gavinsmith0123@gmail.com> Move some non-types out of html_converter_types.h * tta/C/convert/html_converter_types.h, * tta/C/convert/format_html.h: Move declarations of direction_string_type_names and direction_string_context_names arrays. 2026-06-28 Gavin Smith <gavinsmith0123@gmail.com> Move some non-types out of html_converter_types.h * tta/maintain/generate_code_convert_data.pl: Output declaration of 'translated_special_unit_info' array. This is possible now that the definition of TRANSLATED_SUI_ASSOCIATION is in this file. * tta/C/convert/html_converter_types.h: Remove declaration of 'translated_special_unit_info' array. 2026-06-28 Gavin Smith <gavinsmith0123@gmail.com> Move TRANSLATED_SUI_ASSOCIATION type definition * tta/maintain/generate_code_convert_data.pl: Output TRANSLATED_SUI_ASSOCIATION definition in html_conversion_data.h. * tta/C/main/converter_types.h: Remove definition of TRANSLATED_SUI_ASSOCIATION and remove #include of "html_conversion_data.h". 2026-06-28 Gavin Smith <gavinsmith0123@gmail.com> Fix excess elements in array initialiser warning * tta/maintain/generate_code_convert_data.pl, Use CUSTOMIZED_SPECIAL_UNIT_INFO_TYPE_NR instead of SPECIAL_UNIT_INFO_TYPE_NR as number of elements in 'special_unit_info_type_names' array. 2026-06-28 Gavin Smith <gavinsmith0123@gmail.com> * tta/maintain/generate_code_convert_data.pl: Use HTML_CONVERSION_DATA_H rather than CONVERSION_DATA_H as include guard symbol in a/tta/C/main/html_conversion_data.h. 2026-06-28 Patrice Dumas <pertusus@free.fr> * tta/maintain/generate_code_convert_data.pl: fix typo in snecial_unit_info_type_names -> special_unit_info_type_names. 2026-06-28 Patrice Dumas <pertusus@free.fr> * tta/perl/t/test_utils.pl (test), tta/perl/t/z_misc/test_protect_hashchar_at_line_beginning.t (run_test), tta/perl/texi2any.pl: call document->tree() with an argument to get an handle only independently of XSLoader::XS_modules_enabled result. TEXINFO_XS=omit is checked by XSLoader such that the XS module of Document will not be loaded anyway if TEXINFO_XS=omit. 2026-06-28 Patrice Dumas <pertusus@free.fr> * tta/perl/Texinfo/Convert/*.pm (BEGIN), tta/perl/Texinfo/*.pm (BEGIN): do not use XS_modules_enabled to determine if the call to Texinfo::XSLoader::init should be done with an undef XS module file name, TEXINFO_XS=omit is checked in XSLoader::init, and that is all is needed to decide if the XS module file should be loaded. * tta/perl/Texinfo/ManipulateTree.pm (_element_remove_references): remove the case with XS for structuring only as it cannot happen anymore. Remove $no_XS_objects_refcount and $destroyed_objects_refcount_text. 2026-06-28 Gavin Smith <gavinsmith0123@gmail.com> Move some non-types out of html_converter_types.h * tta/C/convert/html_converter_types.h: Remove declarations of snecial_unit_info_type_names and special_unit_info_tree_names arrays. * tta/maintain/generate_code_convert_data.pl: Generate them in html_conversion_data.h. 2026-06-28 Gavin Smith <gavinsmith0123@gmail.com> * tta/C/main/converter_types.h, tta/C/main/html_converter.h: Split out html_converter.h. 2026-06-27 Gavin Smith <gavinsmith0123@gmail.com> Continue C plaintext converter * tta/C/convert/plaintext_converter_api.c, * tta/C/convert/convert_to_plaintext.c: Merge into convert_to_plaintext.c and remove plaintext_converter_api.c. 2026-06-27 Gavin Smith <gavinsmith0123@gmail.com> Continue C plaintext converter * tta/C/convert/convert_to_plaintext.c (plaintext_free_converter, plaintext_converter_initialize): New stubs.) * tta/C/convert/converter.c (converter_format_data): Reference these. 2026-06-27 Patrice Dumas <pertusus@free.fr> * tta/C/convert/format_html.c (html_convert_printindex_command): call get_converter_indices_sorted_by_letter only if there is an index name. * tta/C/main/translations.c (cache_translate_string): fix debug messages. * tta/perl/XSTexinfo/parser_document/TranslationsXS.xs (cache_translate_string): call cache_translate_string even if lang_translation is undef, to get the debugging messages. 2026-06-27 Patrice Dumas <pertusus@free.fr> * tta/perl/t/init/translation_in_parser_in_translation.pm: add more code in translation Texinfo code and add another translation. 2026-06-27 Patrice Dumas <pertusus@free.fr> * tta/README, perl/Texinfo/Convert/Plaintext.pm (new_formatter): comment out setting DEBUG for Texinfo::Convert::Paragraph as there is no debugging output in C. 2026-06-27 Patrice Dumas <pertusus@free.fr> * tta/perl/Texinfo/Convert/HTML.pm (_html_cache_translate_string): print debug message if $strings_cache is defined but the translation is not found. 2026-06-27 Gavin Smith <gavinsmith0123@gmail.com> Separate HTML-specific conversion fields into separate object. * tta/C/main/converter_types.h (struct CONVERTER, struct HTML_CONVERTER_STATE): Add HTML_CONVERTER_STATE type for HTML-specific fields, and add "HTML_CONVERTER_STATE html_converter" field to CONVERTER. All uses updated. 2026-06-27 Patrice Dumas <pertusus@free.fr> * tta/perl/Texinfo/Translations.pm (_set_lang_info_translation): add the new lang translations reference to the translations cache hash. * tta/C/main/translations.c (replace_convert_substrings): call reset_parser and not reset_parser_conf to get the same result as doing a new parser in Perl. * tta/C/convert/convert_html.c (html_cache_translate_string), tta/C/main/convert_to_text.c (text_heading, convert_to_text_internal), tta/C/main/convert_utils.c (add_heading_number), tta/C/main/translations.c (cache_translate_string, gdt_string), tta/perl/Texinfo/Convert/HTML.pm (_html_cache_translate_string) (cdt_string), tta/perl/Texinfo/Convert/Text.pm (_text_heading) (_convert), tta/perl/Texinfo/Convert/Utils.pm (add_heading_number), tta/perl/Texinfo/Translations.pm (gdt, gdt_string), tta/perl/Texinfo/TranslationsNonXS.pm (cache_translate_string), tta/perl/XSTexinfo/parser_document/TranslationsXS.xs (cache_translate_string), tta/perl/ext/epub3.pm, tta/perl/init/chm.pm: add debugging information on translations caching when debug is >= 2, in *cache_translate_string. Update callers. 2026-06-26 Gavin Smith <gavinsmith0123@gmail.com> * tta/C/convert/texinfo.c (txi_output_converter_error_messages, txi_builtin_default_css_text): Inline into sole use sites and remove. 2026-06-26 Gavin Smith <gavinsmith0123@gmail.com> * tta/C/convert/texinfo.c (txi_converter_setup): Inline into sole use site and remove. 2026-06-26 Gavin Smith <gavinsmith0123@gmail.com> Continue C plaintext converter * tta/C/main/converter_types.h (PLAINTEXT_CONVERSION_STATE): New type. (struct CONVERTER): Add PLAINTEXT_CONVERSION_STATE plaintext_converter field. * tta/C/convert/convert_to_plaintext.c: Take and pass around a CONVERTER object. Add stubs for stream_output_* functions using text object in plaintext_converter field, and call stream_output instead of appending to TEXT object. Note: until convert_to_plaintext.c (and other new code) is complete, ChangeLog entries may not be as detailed as usual. Other changes affecting established parts of the code should still be described to the usual standard. 2026-06-25 Gavin Smith <gavinsmith0123@gmail.com> * tta/C/convert/convert_to_plaintext.c (convert_to_plaintext_internal): Start filling in structure of function. 2026-06-25 Gavin Smith <gavinsmith0123@gmail.com> Stub plaintext converter for ctexi2any * tta/C/convert/plaintext_converter_api.h, * tta/C/convert/plaintext_converter_api.c, * tta/C/convert/convert_to_plaintext.c, * tta/C/convert/convert_to_plaintext.h: new stub implementations, based on code for "plaintexinfo" output format. * tta/C/convert/converter.c (converter_format_data): add entry for "plaintext". * tta/C/main/converter_types.h (enum converter_format, TXI_CONVERSION_FORMAT_NR): update. * tta/C/Makefile.am, * tta/C/convert/converter.h, * tta/C/texi2any.c (main): Disable use of Perl module for "plaintext" output format if environment variable TEXINFO_XS_INCOMPLETE is set. 2026-06-24 Gavin Smith <gavinsmith0123@gmail.com> TEXINFO_XS_* variables no longer obeyed * tta/perl/Texinfo/XSLoader.pm (XS_modules_enabled): New. (XS_parser_enabled, XS_structuring_enabled, XS_convert_enabled): Removed. All callers updated. 2026-06-24 Gavin Smith <gavinsmith0123@gmail.com> TEXINFO_XS_* variables no longer obeyed * tta/perl/Texinfo/XSLoader.pm (XS_parser_enabled, XS_structuring_enabled, XS_convert_enabled): Ignore environment variables TEXINFO_XS_PARSER, TEXINFO_XS_STRUCTURE and TEXINFO_XS_CONVERT. Only heed TEXINFO_XS. * tta/tests/run_parser_all.sh (check_strxfrm_ok): Only check TEXINFO_XS. * doc/texinfo.texi (texi2any Environment Variables): Remove documentation of these variables. * NEWS, README-hacking, INSTALL: updated. 2026-06-22 Patrice Dumas <pertusus@free.fr> * tta/maintain/regenerate_cmd_tests.sh (gather_tests): redirect stdin by calling exec within the script instead of redirecting the while loop input because in Solaris 10 /bin/sh a while loop with redirection is in a subshell and the change to type_test_files remains local. Solution by Gavin. 2026-06-22 Patrice Dumas <pertusus@free.fr> * tta/C/convert/convert_html.c (reset_unset_no_arg_commands_formatting_context): use else instead of else if for a condition that is always true to help compiler understand that a variable cannot be uninitialized. * tta/C/convert/convert_html.c (html_prepare_converted_output_info): fix nesting. * tta/C/structuring_transfo/transformations.c (protect_first_parenthesis): add parenthesis around flag matching. 2026-06-22 Patrice Dumas <pertusus@free.fr> * tta/perl/XSTexinfo/Makefile.am (DocumentXS_la_LIBADD): libtexinfo.la is needed, not libtexinfo-convert.la. 2026-06-22 Patrice Dumas <pertusus@free.fr> * tta: run "gnulib-tool --add-import unistr/u32-strdup", needed by unicode-collation/collation_key.c. 2026-06-22 Patrice Dumas <pertusus@free.fr> * tta/maintain/regenerate_cmd_tests.sh, autogen.sh, tta/tests/Makefile.am: do not remove the previous one test script files in regenerate_cmd_tests.sh but in calls in autogen.sh and Makefile.am. 2026-06-22 Patrice Dumas <pertusus@free.fr> * tta/maintain/regenerate_cmd_tests.sh, autogen.sh, tta/tests/Makefile.am: do not do a cd in regenerate_cmd_tests.sh and remove the destdir argument. 2026-06-21 Patrice Dumas <pertusus@free.fr> * tta/tests/run_parser_all.sh: remove code related to html2wiki and mediawiki.pm that were relevant in texi2html only. 2026-06-21 Patrice Dumas <pertusus@free.fr> * tta/C/convert/call_conversion_perl.c (call_config_GNUT_load_init_file): allow count to be 1 although it should be 0, as on Solaris 11 with Perl 5.10.1 it is 1. 2026-06-21 Patrice Dumas <pertusus@free.fr> * tta/tests/many_input_files/Makefile.am (distclean-local): remove raw_out_native. 2026-06-21 Patrice Dumas <pertusus@free.fr> * maintain/generate_many_input_files_native_tests.sh, tta/tests/many_input_files/Makefile.am (native_test_scripts_target): add a script that generates test scripts wrapper around many_input_files test scripts, with _native postpended to the script name and calling the script with -native. * tta/tests/many_input_files/Makefile.am (test_scripts) (native_test_scripts, TESTS): distribute native command tests and add them as tests. * tta/tests/many_input_files/*.sh: fix logs and diff by adding tested command language ${dir_suffix}. 2026-06-21 Patrice Dumas <pertusus@free.fr> * tta/tests/many_input_files/*.sh: distinguish outdir and basename. rename raw_output_dir as raw_out_dir. Add -native command-line argument to select the command tested. Prepend the language of the tested command to the out directories. Use tested_command instead of TESTS_MAIN_COMMAND. * tta/tests/many_input_files/Makefile.am (copy-tex-html, copy-tests): update. 2026-06-21 Patrice Dumas <pertusus@free.fr> * tta/tests/run_parser_all.sh: change variables names, use TESTS_MAIN_COMMAND on ly if set, set language based on input command name. 2026-06-20 Patrice Dumas <pertusus@free.fr> * tta/configure.ac: do not set TESTS_MAIN_COMMAND if prefer_c_t2a is set, as now the native command is always tested. 2026-06-20 Patrice Dumas <pertusus@free.fr> * tta/tests/run_parser_all.sh: fix diff file names. * tta/tests/run_parser_all.sh, tta/tests/*/Makefile.am: use perl instead of parser in tests output directories name. * tta/tests/README: update. * tta/tests/Makefile.am (clean-tests): also clean native command tests. 2026-06-20 Patrice Dumas <pertusus@free.fr> * tta/tests/nested_formats/Makefile.am (EXTRA_DIST): no more res_parser_html. * tta/tests/*/Makefile.am (distclean-local): remove new output directories. 2026-06-20 Patrice Dumas <pertusus@free.fr> * tta/tests/run_parser_all.sh (post_process_output): copy only the stderr file that is modified afterwards to raw_outdir. 2026-06-20 Patrice Dumas <pertusus@free.fr> Test native ctexi2any command * tta/maintain/regenerate_cmd_tests.sh: generate native command tests. * tta/tests/Makefile.am (TESTS, tex_html_tests, other_tests): add native tests scripts. 2026-06-20 Patrice Dumas <pertusus@free.fr> * tta/maintain/regenerate_cmd_tests.sh: fix output of language_option variable. * tta/tests/run_parser_all.sh, tta/maintain/regenerate_cmd_tests.sh: use a per command language log file. 2026-06-20 Patrice Dumas <pertusus@free.fr> * tta/maintain/regenerate_cmd_tests.sh (gather_tests) (one_language_test_files): generate set test files by command language implementation, add a language argument to gather_tests, add the one_language_test_files variable, and the language name in the test script name. * tta/tests/Makefile.am (TESTS, tex_html_tests, other_tests): add tex_html_tests and other_tests for the list of tex_html and other tests files. Update variables names. 2026-06-20 Patrice Dumas <pertusus@free.fr> * tta/tests/parser_tests.sh, tta/tests/run_parser_all.sh: add -native command-line, that selects ctexi2any and put results in a different directory. 2026-06-20 Patrice Dumas <pertusus@free.fr> * tta/maintain/regenerate_cmd_tests.sh: reindent, remove unused code line. 2026-06-20 Patrice Dumas <pertusus@free.fr> * tta/C/convert/converter.c (get_converter_indices_sorted_by_index) (get_converter_indices_sorted_by_letter): free input_lang_sorting_locale later on, as lang_sorting_locale may point to the input_lang_sorting_locale memory location. 2026-06-20 Patrice Dumas <pertusus@free.fr> * tta/tests/README, tta/tests/run_parser_all.sh: remove the # format in list of tests formats specification code and remove the associated documentation. 2026-06-20 Patrice Dumas <pertusus@free.fr> * tta/tests/Makefile.onetst, tta/tests/nested_formats/list-of-tests: remove the # format "magic" specification of tested formats in nested_formats/list-of-tests, set manually the list of all the tests. 2026-06-20 Patrice Dumas <pertusus@free.fr> * tta/perl/Texinfo/Convert/Converter.pm (_converter_indices_sort_strings), tta/perl/Texinfo/Document.pm (_document_indices_sort_strings): call indices_information() before merged_indices, and use the result in the setup_index_entries_sort_strings call instead of calling again. 2026-06-20 Patrice Dumas <pertusus@free.fr> * tta/perl/Texinfo/Convert/LaTeX.pm (_prepare_indices): reorganize conditions. 2026-06-20 Patrice Dumas <pertusus@free.fr> * tta/C/main/document.c (document_indices_sort_strings): remove error_messages and options arguments, get them from document. Update callers. * tta/C/main/document.c (document_sorted_indices_by_index) (document_sorted_indices_by_letter): remove error_messages and options arguments, get them from document. Update callers. 2026-06-20 Gavin Smith <gavinsmith0123@gmail.com> * doc/texinfo.texi (@anchor): @anchor as alias for node is after chapter structuring command, not before. Report from Patrice. 2026-06-20 Patrice Dumas <pertusus@free.fr> * tta/perl/texi2any.pl (%formats_table): remove unused 'setup_index_entries_sort_strings' field. 2026-06-20 Patrice Dumas <pertusus@free.fr> * tta/C/convert/converter.c (converter_indices_sort_strings), tta/C/main/document.c (document_indices_sort_strings), tta/C/main/manipulate_indices.c (setup_index_entries_sort_strings), tta/perl/Texinfo/Convert/Converter.pm (_converter_indices_sort_strings), tta/perl/Texinfo/Document.pm (_document_indices_sort_strings), tta/perl/Texinfo/Indices.pm (setup_index_entries_sort_strings): pass debug_level as argument to setup_index_entries_sort_strings to be more independent of document and converter options specifics. 2026-06-19 Patrice Dumas <pertusus@free.fr> * tta/perl/Texinfo/Document.pm (_document_indices_sort_strings), tta/perl/Texinfo/DocumentNonXS.pm, tta/perl/XSTexinfo/parser_document/DocumentXS.xs: move _document_indices_sort_strings to Document.pm and call indices_information() in the function to have indices built to Perl if with XS. Remove the XS override. 2026-06-19 Patrice Dumas <pertusus@free.fr> * tta/perl/Texinfo/DocumentNonXS.pm (_document_indices_sort_strings): rename document_indices_sort_strings as _document_indices_sort_strings. * tta/perl/Texinfo/Document.pm (sorted_indices_by_letter) (sorted_indices_by_index): do not call merged_indices, it is already called in _document_indices_sort_strings. Change calling prototype. * tta/perl/Texinfo/DocumentNonXS.pm (print_document_indices_sort_strings): remove a spurious my. * tta/C/main/build_perl_info.c (fill_document_hv): remove unused variable. * tta/perl/t/z_misc/test_sort.t: add test of Texinfo::Document::sorted_indices_by_index. 2026-06-19 Patrice Dumas <pertusus@free.fr> * tta/perl/t/z_misc/test_sort.t: replace a call of document_indices_sort_strings by a call of Texinfo::Indices::setup_index_entries_sort_strings, such that document_indices_sort_strings is only called from XS overriden functions. 2026-06-19 Patrice Dumas <pertusus@free.fr> * tta/C/main/build_perl_info.c (fill_document_hv): do not build the 'index_entries_sort_strings' hash of built Perl Document, it is built on-demand. 2026-06-18 Patrice Dumas <pertusus@free.fr> * tta/perl/Texinfo/Convert/Converter.pm (index_entry_first_letter_text_or_command): remove unused argument. * doc/texi2any_api.texi (Specific Formatting for Indices): update. 2026-06-19 Gavin Smith <gavinsmith0123@gmail.com> * doc/texinfo.texi (GNU Sample Texts): Remove "start of header" and "end of header" lines. 2026-06-19 Gavin Smith <gavinsmith0123@gmail.com> * doc/texinfo.texi (@anchor): State that @anchor giving an alias for a @node should be placed immediately after the node line. Report from Arsen Arsenović. 2026-06-18 Patrice Dumas <pertusus@free.fr> * tta/perl/Texinfo/Convert/Converter.pm (converter_index_content_element, _idx_leading_text_or_command) (index_entry_first_letter_text_or_command), tta/perl/Texinfo/Indices.pm: move index_entry_first_letter_text_or_command and converter_index_content_element to Converter. Update callers. 2026-06-18 Patrice Dumas <pertusus@free.fr> * tta/perl/Texinfo/Convert/ConverterNonXS.pm (_get_collation_lang_info, get_converter_indices_sorted_by_index) (get_converter_indices_sorted_by_letter): merge condition determining language and lang_key. Add _get_collation_lang_info for the common code determining language and lang_key. 2026-06-18 Patrice Dumas <pertusus@free.fr> * tta/C/convert/converter.c (get_converter_indices_sorted_by_index) (get_converter_indices_sorted_by_letter), tta/perl/Texinfo/Convert/Converter.pm, tta/perl/Texinfo/Convert/ConverterNonXS.pm (get_converter_indices_sorted_by_letter) (get_converter_indices_sorted_by_index): inline and remove converter_sorted_indices_by_index in get_converter_indices_sorted_by_index and converter_sorted_indices_by_letter in get_converter_indices_sorted_by_letter. * tta/perl/Texinfo/Indices.pm (_setup_collator): remove useless condition. 2026-06-18 Patrice Dumas <pertusus@free.fr> * tta/C/main/manipulate_indices.c: move code around. 2026-06-18 Patrice Dumas <pertusus@free.fr> * tta/C/convert/convert_indices.c (wrap_converter_index_content_element), tta/C/convert/converter.c, tta/C/main/manipulate_indices.c (wrap_element_index_content_element) (index_entry_element_sort_string, setup_index_entries_sort_strings), tta/perl/XSTexinfo/parser_document/IndicesXS.xs (index_entry_element_sort_string): add and use a function reference in argument of entry_tree_element_sort_string for the index_content_element call. Add wrap_element_index_content_element and wrap_converter_index_content_element around *_index_content_element implementations to have a common prototype and be passed or used in entry_tree_element_sort_string. Pass to index_content_element wrapper to setup_index_entries_sort_strings. Remove converter_index_entry_element_sort_string and entry_tree_element_sort_string. 2026-06-18 Patrice Dumas <pertusus@free.fr> * tta/C/main/manipulate_indices.c (setup_sort_sortable_strings_collator), tta/perl/Texinfo/Indices.pm (_setup_sort_sortable_strings_collator): inline setup_sortable_index_entries in setup_sort_sortable_strings_collator and remove the function. * tta/C/main/manipulate_indices.c, tta/perl/Texinfo/Indices.pm: move code around. * tta/perl/Texinfo/Indices.pm: remove _def_command_index_entry. 2026-06-18 Patrice Dumas <pertusus@free.fr> * tta/swig/texinfo.i (txi_ext_inline_setup): remove the converterdatadir argument and code, it is not used. 2026-06-17 Patrice Dumas <pertusus@free.fr> * doc/texi2any_api.texi (Specific Formatting for Indices): update. Update Pod documentation. 2026-06-17 Patrice Dumas <pertusus@free.fr> * tta/perl/XSTexinfo/parser_document/IndicesXS.xs (index_entry_element_sort_string): handle converter argument being set (this case never happens in practice). 2026-06-17 Patrice Dumas <pertusus@free.fr> * tta/perl/Texinfo/Document.pm (BEGIN), tta/perl/XSTexinfo/Makefile.am (DocumentXS_la_CPPFLAGS, DocumentXS_la_LIBADD), tta/perl/XSTexinfo/parser_document/DocumentXS.xs: remove includes and linking with converter headers and libraries. 2026-06-17 Gavin Smith <gavinsmith0123@gmail.com> Sync from experimental/unicode-collation * tta/C/main/unicode-collation/collation_data_loader.h, * tta/C/main/unicode-collation/collation_data_lookup.h: rename and update. * tta/C/main/unicode-collation/collation_data_loader.c, * tta/C/main/unicode-collation/collation_data_lookup.c: rename and update. * tta/C/main/unicode-collation/collation_key.c, * tta/C/main/unicode-collation/collation-table.c, * tta/C/main/unicode-collation/collation_key.h: update. * tta/C/main/manipulate_indices.c (get_sort_key) update calling code. 2026-06-17 Patrice Dumas <pertusus@free.fr> * tta/perl/Texinfo/Indices.pm (element_index_content_element), tta/C/main/manipulate_indices.c (element_index_content_element): rename document_index_content_element as element_index_content_element. Update callers. * tta/C/main/manipulate_indices.c (index_entry_element_sort_string) (setup_index_entries_sort_strings): add an explicit document argument. Update callers. * tta/C/main/manipulate_indices.c (index_entry_element_sort_string), tta/perl/XSTexinfo/parser_document/IndicesXS.xs (index_entry_element_sort_string): set debug_level to valid values, based on options in setup_index_entries_sort_strings and directly use debug_level in argument in index_entry_element_sort_string. 2026-06-17 Patrice Dumas <pertusus@free.fr> * tta/C/convert/texinfo.c (txi_complete_document): remove unused converter and element_cdt_tree_fn arguments. Update caller. * tta/C/main/build_perl_info.c (build_sv_options_from_options_list) (build_sv_converter_info_from_converter_initialization_info): remove converter argument as there should never be a converter already set in situation where these functions are called. Update callers. * tta/C/texi2any.c (main), tta/perl/texi2any.pl: move converter creation later now that there is no index sorting earlier needing a converter anymore. * tta/C/texi2any.c (main): error out if there is no converter at all, a situation which should never happen if the formats table is well done. 2026-06-16 Patrice Dumas <pertusus@free.fr> * tta/C/main/document.c (document_sorted_indices_by_index) (document_sorted_indices_by_letter) (print_document_indices_sort_strings), tta/perl/Texinfo/DocumentNonXS.pm (print_document_indices_sort_string), tta/perl/XSTexinfo/parser_document/DocumentXS.xs (print_document_indices_sort_strings): remove unused converter arguments. Update callers. * tta/perl/t/test_utils.pl (test): remove use of a converter for a print_document_indices_sort_strings call with converter, as it is not possible anymore. * tta/perl/Texinfo/Convert/Converter.pm (_converter_indices_sort_strings): rename converter_indices_sort_strings as _converter_indices_sort_strings. * tta/perl/Texinfo/DocumentNonXS.pm (document_indices_sort_strings), tta/perl/XSTexinfo/parser_document/DocumentXS.xs: put setup_indices_sort_strings code in document_indices_sort_strings and remove setup_indices_sort_strings, since it is not called anymore. * tta/C/convert/texinfo.h, tta/swig/texinfo.i: remove STTF_setup_index_entries_sort_strings now that it has no effect. Update users. 2026-06-16 Patrice Dumas <pertusus@free.fr> Add separate functions to sort index entries and cache in converters * tta/C/Makefile.am (C_libtexinfo_convert_sources): add tta/C/convert/convert_indices.c. * tta/C/convert/convert_indices.c (new_index_entry_text_or_command) (idx_leading_text_or_command) (index_entry_first_letter_text_or_command): move to convert_indices.c, since index_entry_first_letter_text_or_command should only be called from converters. * tta/C/main/document.c (document_sorted_indices_by_index) (document_sorted_indices_by_letter): rename sorted_indices_by_index as document_sorted_indices_by_index and sorted_indices_by_letter as document_sorted_indices_by_letter. * tta/C/main/manipulate_indices.c (document_index_content_element), tta/perl/Texinfo/Indices.pm (document_index_content_element): rename index_content_element as document_index_content_element. * tta/perl/Texinfo/DocumentNonXS.pm (document_indices_sort_strings): remove indices_sort_strings as document_indices_sort_strings. Update callers. * tta/C/main/manipulate_indices.c (get_index_content_info_element) (document_index_content_element), tta/perl/Texinfo/Indices.pm (get_index_content_info_element, document_index_content_element): add get_index_content_info_element that gets index content element for the cases where translation is not needed, and also gets information on object-oriented definitions that can be used by the caller to prepare an index content element. Remove def_command_index_entry. * tta/C/main/manipulate_indices.c (entry_tree_element_sort_string) (index_entry_element_sort_string): add entry_tree_element_sort_string based on index_entry_element_sort_string code. * tta/C/main/manipulate_indices.c (setup_index_entries_sort_strings): add index_entry_element_sort_string_fn argument to be able to use a different function than the index_entry_element_sort_string default, when called from converters. A function argument instead of a call to a function if converter argument is set is used to avoid depending on the libtexinfo-converter library. * tta/C/main/document.c (document_sorted_indices_by_index) (document_sorted_indices_by_letter), tta/C/main/manipulate_indices.c (new_collation_sorted_indices_by_index) (new_base_collations_sorted_indices_by_index) (get_collation_sorted_indices_by_index) (new_base_collations_sorted_indices_by_letter) (get_collation_sorted_indices_by_letter): add new_base_collations_sorted_indices_by_index, get_collation_sorted_indices_by_index, new_base_collations_sorted_indices_by_letter and get_collation_sorted_indices_by_letter based on document_sorted_indices_by_* code and call these functions. move new_collation_sorted_indices_by_index, find_collation_sorted_indices_by_index, new_collation_sorted_indices_by_letter and find_collation_sorted_indices_by_letter to manipulate_indices.c. * tta/C/main/document.c (document_sorted_indices_by_index) (document_sorted_indices_by_letter), tta/C/main/manipulate_indices.c (sort_indices_by_index) (sort_indices_by_letter, setup_sort_sortable_strings_collator), tta/perl/Texinfo/Document.pm (sorted_indices_by_letter) (sorted_indices_by_index), tta/perl/Texinfo/Indices.pm (_setup_sort_sortable_strings_collator) (sort_indices_by_index, sort_indices_by_letter): use indices_sort_strings as argument to sort_indices_by_index, sort_indices_by_letter and setup_sort_sortable_strings_collator, do not call document_indices_sort_strings in those functions, but in document_sorted_indices_by_index, document_sorted_indices_by_letter before calling sort_indices_by_index or sort_indices_by_letter. * tta/C/convert/converter.c (converter_index_entry_element_sort_string) (converter_indices_sort_strings, converter_sorted_indices_by_index) (get_converter_indices_sorted_by_index) (converter_sorted_indices_by_letter) (get_converter_indices_sorted_by_letter), tta/C/convert/convert_indices.c (converter_index_content_element) (index_entry_first_letter_text_or_command), tta/C/main/converter_types.h (CONVERTER), tta/C/main/manipulate_indices.c (document_index_content_element), tta/perl/Texinfo/Convert/Converter.pm (converter_indices_sort_strings) (_converter_sorted_indices_by_letter) (_converter_sorted_indices_by_index), tta/perl/Texinfo/Convert/ConverterNonXS.pm (get_converter_indices_sorted_by_letter) (get_converter_indices_sorted_by_index), tta/perl/Texinfo/Indices.pm (converter_index_content_element), tta/perl/Texinfo/IndicesNonXS.pm (index_entry_element_sort_string): add index sorting functions for converters that cache in the converter, using the new fields indices_sort_strings, sorted_indices_by_index and sorted_indices_by_letter, and use converter information. Use those functions in get_converter_indices_sorted_by_*, in index_entry_first_letter_text_or_command and in converters. Remove document_index_content_element converter and consider only the case of no converter in this function. Update callers, replacing index_content_element by converter_index_content_element in converters. Remove index_content_element. * tta/C/main/document.c (document_indices_sort_strings), tta/perl/Texinfo/Document.pm (sorted_indices_by_letter) (sorted_indices_by_index), tta/perl/Texinfo/DocumentNonXS.pm (document_indices_sort_strings), tta/perl/Texinfo/Indices.pm (sort_indices_by_index, sort_indices_by_letter), tta/perl/XSTexinfo/parser_document/DocumentXS.xs (document_indices_sort_strings): remove converter argument. Update callers. * tta/perl/XSTexinfo/parser_document/DocumentXS.xs (setup_indices_sort_strings): never use the converter argument. * tta/C/convert/texinfo.c (txi_complete_document), tta/perl/texi2any.pl: do not call document_indices_sort_strings or Document::setup_indices_sort_strings in advance anymore, as the sorted index entries used by converters are not in the document anymore. * tta/C/main/manipulate_indices.c (destroy_sorted_indices_by_index) (destroy_sorted_indices_by_letter), tta/C/main/document.c (destroy_document_information_except_tree): add destroy_sorted_indices_by_index and destroy_sorted_indices_by_letter based on destroy_document_information_except_tree code. * tta/perl/Texinfo/Convert/Converter.pm (conversion_initialization), tta/perl/Texinfo/Convert/DocBook.pm (converter_initialize), tta/perl/Texinfo/Convert/LaTeX.pm (conversion_initialization), tta/perl/Texinfo/Convert/Plaintext.pm (conversion_initialization): call set_document even if document is undef, to get the other initialization/destructions. * tta/C/convert/converter.c (destroy_converter_index_sorting) (converter_set_document, free_generic_converter), tta/C/main/build_perl_info.c (pass_document_sv_to_converter_sv), tta/perl/Texinfo/Convert/Converter.pm (converter_perl_release), tta/perl/Texinfo/Convert/ConverterNonXS.pm (set_document): destroy index sorting information set in converter. Destroy document in set_document if input document is undef. * tta/C/convert/converter.c (element_cdt_tree): add and call html_element_cdt_tree from this function only and call this function directly in converter_index_content_element. Remove all the now unneeded element_cdt_tree_fn arguments. * tta/perl/t/z_misc/test_sort.t: update. 2026-06-15 Patrice Dumas <pertusus@free.fr> * tta/C/main/manipulate_indices.c (def_command_index_entry), tta/C/main/translations.h, tta/perl/Texinfo/Indices.pm (_def_command_index_entry): do not use a different cache for translation without a converter, use the same cache as converters. Remove the unused cache variables and comment out TXI_PARSER_STRINGS_NR. 2026-06-15 Patrice Dumas <pertusus@free.fr> update po 2026-06-15 Patrice Dumas <pertusus@free.fr> * po_document/Makevars (XGETTEXT_OPTIONS): add element_cdt*. * Makefile.am (po_document-check), po_document/POTFILES.in: update. 2026-06-14 Patrice Dumas <pertusus@free.fr> * tta/C/texi2any.c (main): set element_cdt_tree_fn to html_element_cdt_tree if outputting HTML. * tta/perl/Makefile.am (test_files), tta/perl/t/input_files/customize_definition_index_translations.texi, tta/perl/t/init_files_tests.t (customize_definition_index_translations), tta/tests/Makefile.onetst, tta/tests/customization/list-of-tests (translated_strings_customization): move customize_definition_index_translations Texinfo to the customize_definition_index_translations.texi and use it for a test of the command in tests/customization/list-of-tests. 2026-06-14 Patrice Dumas <pertusus@free.fr> * tta/C/main/manipulate_indices.c: rename cdt_element_tree_fn as element_cdt_tree_fn. * tta/C/convert/converter.c (converter_format_data) (get_converter_indices_sorted_by_index) (get_converter_indices_sorted_by_letter), tta/C/convert/converter.h (CONVERTER_FORMAT_DATA): add element_cdt_tree field in CONVERTER_FORMAT_DATA, set it for HTML and get it in get_converter_indices_sorted_by_*. * tta/C/convert/texinfo.c (txi_complete_document), tta/C/main/document.c (document_indices_sort_strings) (sorted_indices_by_index, sorted_indices_by_letter) (print_document_indices_sort_strings), tta/C/main/manipulate_indices.c (index_entry_element_sort_string) (setup_index_entries_sort_strings) (setup_sort_sortable_strings_collator, sort_indices_by_index) (sort_indices_by_letter), tta/perl/Texinfo/DocumentNonXS.pm (print_document_indices_sort_strings), tta/perl/Texinfo/IndicesNonXS.pm (index_entry_element_sort_string), tta/perl/XSTexinfo/parser_document/DocumentXS.xs (setup_indices_sort_strings, indices_sort_strings) (print_document_indices_sort_strings), tta/swig/texinfo.i: pass converter in Perl and converter and HTML specific function from index sorting and print_document_indices_sort_strings down to indices_sort_strings or index_content_element. Update callers. * tta/C/convert/html_prepare_converter.c (html_converter_customize) (html_conversion_initialization): set self->current_* in html_converter_customize and not right before starting to output, as the current_* struct fields may be used in code called before starting the conversion, mainly for index strings sorting to use a customized function for translation. * tta/C/texi2any.c (main), tta/perl/t/test_utils.pl (test), tta/perl/texi2any.pl: setup converter earlier to have it for the call to setup_indices_sort_strings or txi_complete_document. * tta/perl/Texinfo/Document.pm (BEGIN), tta/perl/XSTexinfo/Makefile.am (DocumentXS_la_CPPFLAGS, DocumentXS_la_LIBADD): link DocumentXS against conversion library now that a converter and associated functions may be needed for index strings sorting translation customization. 2026-06-14 Patrice Dumas <pertusus@free.fr> * tta/C/convert/convert_html.c (html_custom_translate_string): use current_formatting_references. 2026-06-14 Patrice Dumas <pertusus@free.fr> * tta/C/main/translations.h (TXI_CONVERT_STRINGS_NR): the formerly parser only strings are now also translated by converters. 2026-06-14 Patrice Dumas <pertusus@free.fr> * tta/perl/t/init/translated_strings_customization.pm (%translations), tta/perl/t/init_files_tests.t (customize_definition_index_translations), tta/perl/Makefile.tres: add test of definition index strings translations. 2026-06-14 Patrice Dumas <pertusus@free.fr> Customization of HTML translation for object oriented definitions index * tta/perl/Texinfo/Convert/Converter.pm (element_cdt), tta/perl/Texinfo/Convert/HTML.pm (element_cdt), tta/C/convert/convert_html.c (html_element_cdt_tree): add wrappers for converters for translation based on element language information. * tta/C/main/manipulate_indices.c (def_command_index_entry) (index_content_element, index_entry_element_sort_string) (index_entry_first_letter_text_or_command), tta/perl/Texinfo/Indices.pm (_def_command_index_entry) (index_content_element, index_entry_first_letter_text_or_command), tta/perl/Texinfo/IndicesNonXS.pm (index_entry_element_sort_string): pass converter in Perl down to def_command_index_entry and use element_cdt if the converter is passed, and pass converter and a function reference in C. Update callers. * tta/C/main/manipulate_indices.c (index_entry_element_sort_string), tta/perl/XSTexinfo/parser_document/IndicesXS.xs (index_entry_element_sort_string): add debug level argument to index_entry_element_sort_string. 2026-06-14 Gavin Smith <gavinsmith0123@gmail.com> * doc/texinfo.tex (\initial): Reduce optional space at the end of a column (in the index two-column layout) from 5 lines to 4 lines. 2026-06-14 Gavin Smith <gavinsmith0123@gmail.com> * doc/txi-nb.tex: Define sort strings for Æ, Ø and Å. * doc/texinfo.tex (\idxsort): Provide definition of sequence used in translation files to improve reliability. 2026-06-14 Gavin Smith <gavinsmith0123@gmail.com> * doc/txi-is.tex: fix comment 2026-06-14 Gavin Smith <gavinsmith0123@gmail.com> * doc/txi-is.tex: Define sort strings for Þ, Æ, and Ö. 2026-06-14 Gavin Smith <gavinsmith0123@gmail.com> * texindex/texindex.awk (string_compare_internal): If characters not in order array, use < to compare them. 2026-06-14 Gavin Smith <gavinsmith0123@gmail.com> * texindex/texindex.awk (BEGIN): Fix case-insensitive ordering to keep non-ASCII values after ASCII characters. (extract_initial): fix comment. * doc/txi-es.tex: add special sort strings for ñ and Ñ. 2026-06-13 Patrice Dumas <pertusus@free.fr> * tta/perl/Texinfo/Convert/HTML.pm (_convert_printindex_command), tta/perl/Texinfo/Convert/HTMLNonXS.pm (_prepare_index_entries_targets) (output_internal_links), tta/perl/Texinfo/Convert/LaTeX.pm (_index_entry), tta/perl/Texinfo/Convert/Plaintext.pm (process_printindex), tta/perl/Texinfo/Indices.pm (index_entry_first_letter_text_or_command) (setup_index_entries_sort_strings), tta/perl/Texinfo/IndicesNonXS.pm (index_entry_element_sort_string): set debug argument of index_content_element, add debug argument and set argument of index_entry_first_letter_text_or_command and index_entry_element_sort_string. * tta/perl/Texinfo/Convert/HTML.pm, tta/perl/Texinfo/Convert/HTMLNonXS.pm, tta/perl/Texinfo/Convert/Plaintext.pm: use intermediary variable for DEBUG to avoid calling get_conf too often. 2026-06-13 Patrice Dumas <pertusus@free.fr> * tta/C/main/convert_utils.c (definition_category_tree), tta/perl/Texinfo/Convert/Utils.pm (definition_category_tree): use def_class_method and def_class_variable commands flags. 2026-06-13 Patrice Dumas <pertusus@free.fr> * tta/perl/Texinfo/ManipulateTree.pm (_copy_tree, tree_remove_parents) (_element_remove_references, @extra_out_of_tree), tta/C/main/tree_types.h (AI_KEYS_LIST): remove def_index_element and def_index_ref_element related definitions and code, as they are not in the tree anymore. 2026-06-13 Patrice Dumas <pertusus@free.fr> * tta/C/convert/format_html.c (html_convert_printindex_command): build tree for level 0 index entry container. * tta/perl/Texinfo/Indices.pm (_remove_def_types): add. * tta/C/main/manipulate_indices.c (def_command_index_entry) (index_content_element), tta/C/parsetexi/end_line.c (end_line_def_line), tta/perl/Texinfo/Indices.pm (_def_command_index_entry, index_content_element), tta/perl/Texinfo/ParserNonXS.pm (_end_line_def_line): rename set_def_command_index_entry as def_command_index_entry. Do not set def_index_element nor def_index_ref_element in def_command_index_entry or in end_line_def_line, instead return the new element from def_command_index_entry, including if there was no need for translation. Also make a copy of the returned element in index_content_element if the index entry is not a def command index entry. Update C callers of index_content_element to destroy the returned element. 2026-06-13 Gavin Smith <gavinsmith0123@gmail.com> TexiWeb Jr. removal updates * grand-replace.sh, * README-hacking, * TODO, * texindex/README: update for twjr removal. 2026-06-13 Gavin Smith <gavinsmith0123@gmail.com> texindex: by default, do not merge entries if text differs * texindex/texindex.awk (usage, BEGIN): Add --combine-equal-keys option. Set CombineEqualKeys variable if given. (main block) [!CombineEqualKeys]: Only eliminate duplicate entries if index entry text is equal as well as the sort key being equal. (index_compare) [!CombineEqualKeys]: Compare the index text if the sort keys are identical. (write_index_entry) (maybe_print_primary_entry, maybe_print_secondary_entry): Split out maybe_print_primary_entry, maybe_print_seconary_entry. Construct key to represent primary or secondary entry depending on the --combine-equal-keys setting. 2026-06-12 Gavin Smith <gavinsmith0123@gmail.com> * texindex/texindex.awk (write_index_entry): Take index key as argument directly, rather than index into the Index array. (check_split_null): Set Can_split_null global variable directly, rather than relying on the caller to do it. No functional change intended. 2026-06-12 Gavin Smith <gavinsmith0123@gmail.com> * texindex/texindex.awk (string_compare_internal): Compare values with a subtraction, as stated in comment about Ordval initialization. This is more concise and also is slightly faster. 2026-06-12 Gavin Smith <gavinsmith0123@gmail.com> * README-hacking, AUTHORS: update for no longer using TexiWeb Jr. * configure.ac: do not set GAWK variable. 2026-06-12 Gavin Smith <gavinsmith0123@gmail.com> texindex: separate ordering array for case-insensitive comparison * texindex/texindex.awk (BEGIN, Ordval, Ordval_ignorecase): Use separate array for case-insensitive ordering of bytes. (string_compare_internal): Add array argument for ordering. (string_compare): Call string_compare_internal. (string_compare_ignorecase, string_compare_noignorecase): Remove functions. This results in around a 40% reduction in runtime, as it avoids calling isalpha and tolower on every byte in the strings being sorted. 2026-06-13 Patrice Dumas <pertusus@free.fr> Add def_class_variable and def_class_method flags * tta/C/main/builtin_commands.h, tta/data/command_data.txt: add def_class_variable and def_class_method flags. * tta/C/parsetexi/end_line.c (end_line_def_line), tta/C/main/manipulate_indices.c (set_def_command_index_entry), tta/perl/Texinfo/Indices.pm (_set_def_command_index_entry), tta/perl/Texinfo/ParserNonXS.pm (_end_line_def_line): use the new flags. 2026-06-13 Patrice Dumas <pertusus@free.fr> * tta/C/main/builtin_commands.h, tta/C/main/command_data.awk (END): move preformatted_code to other flags. Update code checking that flag. 2026-06-13 Patrice Dumas <pertusus@free.fr> * tta/swig/python/Makefile.am (SWIG_header_dependencies): add missing dependencies. 2026-06-13 Patrice Dumas <pertusus@free.fr> Remove accent flag, accent brace command data can be used instead * tta/C/api_for_swig/swig_element_types.h, tta/data/command_data.txt, tta/perl/Texinfo/Convert/HTML.pm (%accent_commands), tta/C/main/builtin_commands.h, tta/perl/Texinfo/Commands.pod: remove accent flag, use brace flag and brace command data equal to accent instead. Update code using accent flags. 2026-06-13 Patrice Dumas <pertusus@free.fr> Format @defcv like other variable definitions with class and category * tta/C/parsetexi/end_line.c (end_line_def_line), tta/perl/Texinfo/ParserNonXS.pm (_end_line_def_line): add defcv to list of @-commands with a need for translation. 2026-06-13 Patrice Dumas <pertusus@free.fr> * tta/C/main/manipulate_indices.c (set_def_command_index_entry) (index_content_element), tta/C/parsetexi/indices.c, tta/C/parsetexi/parser.c (parse_texi), tta/perl/Texinfo/Indices.pm (_set_def_command_index_entry, index_content_element), tta/perl/Texinfo/ParserNonXS.pm (_parse_texi): add set_def_command_index_entry based on complete_indices code for one def command element. Call set_def_command_index_entry in index_content_element to generate the tree corresponding to the index entry when needed. Remove complete_indices. Update index_content_element callers. * tta/swig/texinfo.i (txi_ext_inline_index_content_element): add for change in index_content_element. * tta/perl/Texinfo/ManipulateTree.pm (_element_remove_references): do not check refcount for def_index_element and def_index_ref_element as they may not have been created in C. 2026-06-13 Patrice Dumas <pertusus@free.fr> * tta/perl/Texinfo/Indices.pm (complete_indices), tta/perl/Texinfo/Translations.pm: move complete_indices to Indices.pm. Update caller. 2026-06-13 Patrice Dumas <pertusus@free.fr> * tta/perl/Texinfo/Common.pm, tta/perl/Texinfo/Indices.pm (index_content_element): move index_content_element to Indices.pm. Update callers. 2026-06-13 Patrice Dumas <pertusus@free.fr> * TODO, tta/TODO, tta/perl/ext/epub3.pm: update TODOs. 2026-06-10 Patrice Dumas <pertusus@free.fr> * NEWS: add Perl and Python SWIG modules. * tta/swig/texinfo.i (interface_version): increase (for incompatible change in setup function). 2026-06-08 Patrice Dumas <pertusus@free.fr> * NEWS: add @documentscript and @documentlanguagevariant. 2026-06-11 Gavin Smith <gavinsmith0123@gmail.com> texindex: rename array * texindex/texindex.awk (Keys): Rename array to "Index". The contents do not need to be sort keys as far as they are used, just unique strings for identifying index entries. (main block): separate use of sort key as identifier for an index entry from use as a sort key. Add comment why it is better to eliminate duplicates at this stage. 2026-06-10 Gavin Smith <gavinsmith0123@gmail.com> * texindex/texindex.awk: Add comments with the meanings of several global variables. (main block): Store 1 instead of the sort key as the value in the Allkeys array, as the value isn't used. 2026-06-09 Gavin Smith <gavinsmith0123@gmail.com> Change texindex sort order to two level case insensitive/sensitive * texindex/texindex.awk (string_compare) (string_compare_ignorecase, string_compare_noignorecase) (string_compare_internal): Add functions beyond string_compare. Replace character-by-character logic with two-pass comparison. The first is case insensitive, the second is case sensitive. * texindex/ti.texi: add test cases and try to explain the change. 2026-06-09 Gavin Smith <gavinsmith0123@gmail.com> * doc/texinfo.texi (Details of texindex): Remove old information about TexiWeb Jr. 2026-06-08 Gavin Smith <gavinsmith0123@gmail.com> Remove Texiweb Jr. infrastructure * texindex/jrweave, texindex/jrtangle: deleted * texindex/Makefile.am, man/Makefile.am: updated. 2026-06-08 Gavin Smith <gavinsmith0123@gmail.com> * texindex/ti.texi: delete most of file, keeping introductory sections and test cases. 2026-06-08 Gavin Smith <gavinsmith0123@gmail.com> * texindex/ti.twjr, texindex/ti.texi: Rename to ti.texi in preparation for removal of most of file. 2026-06-08 Gavin Smith <gavinsmith0123@gmail.com> * texindex/texindex.awk: add small number of heading comments to organise the file. 2026-06-08 Gavin Smith <gavinsmith0123@gmail.com> * texindex/texindex.awk: add more text from ti.twjr in comments. 2026-06-08 Gavin Smith <gavinsmith0123@gmail.com> * texindex/texindex.awk: initial tidy up. remove declarations of public domain copyright status. blank lines between functions. 2026-06-08 Gavin Smith <gavinsmith0123@gmail.com> * texindex/texindex.awk: track file 2026-06-08 Gavin Smith <gavinsmith0123@gmail.com> * texindex/ti.twjr, texindex/Makefile.am: Rename jrtangle output file to ti.awk in preparation for committing texindex.awk as a non-generated file. 2026-06-08 Patrice Dumas <pertusus@free.fr> * tta/perl/t/09indices.t (sorting_of_symbols): skip test if Perl is too old (manually tested on Solaris 10). 2026-06-08 Patrice Dumas <pertusus@free.fr> * tta/swig/perl/t/20index_sort.t: skip comparison of sorting arrays if Perl is too old as SWIG corresponds to the C sorting, which is not compatible with texi2any Perl modules old Perl sorting order. 2026-06-08 Patrice Dumas <pertusus@free.fr> * tta/perl/t/09indices.t (sorting_of_symbols), tta/perl/Makefile.tres: add test with some symbols and spaces sorting test. Also a reference for the SWIG sorting test. 2026-06-07 Patrice Dumas <pertusus@free.fr> * tta/C/texi2any.c (main): call txi_load_interpreter only if embedded_interpreter is txi_interpreter_want_embedded, such that the interpreter is not loaded twice. 2026-06-07 Patrice Dumas <pertusus@free.fr> * tta/C/texi2any.c (main): initialize sort_element_count_text. Even though it is not possible to have it unnitialized, it is consistent with the code that is written as if sort_element_count_info could be NULL. 2026-06-07 Gavin Smith <gavinsmith0123@gmail.com> * texindex/ti.twjr (Library functions, Helper functions): Move node text and add comments at start of utility functions. 2026-06-07 Gavin Smith <gavinsmith0123@gmail.com> * texindex/ti.twjr (Comparing index entries): Move node text into comment in 'string_compare'. 2026-06-07 Gavin Smith <gavinsmith0123@gmail.com> * texindex/ti.twjr (Splitting the record): Move node text into comments. 2026-06-07 Gavin Smith <gavinsmith0123@gmail.com> * texindex/ti.twjr (Multilevel comparisons) (Comparing index entries): Move node text into comments. 2026-06-07 Gavin Smith <gavinsmith0123@gmail.com> * texindex/ti.twjr (Splitting the record): Inline chunks into function 'field_split', and move node text into comments. 2026-06-07 Gavin Smith <gavinsmith0123@gmail.com> * texindex/ti.twjr (Get initial): Move node text into a comment. 2026-06-07 Gavin Smith <gavinsmith0123@gmail.com> * texindex/ti.twjr (printing a single entry): move node text into a comment. 2026-06-07 Gavin Smith <gavinsmith0123@gmail.com> * texindex/ti.twjr (printing a single entry): inline chunks. 2026-06-07 Gavin Smith <gavinsmith0123@gmail.com> * texindex/ti.twjr: consistently place parameters and local variables on separate lines in function headers. 2026-06-07 Gavin Smith <gavinsmith0123@gmail.com> * texindex/ti.twjr (Remove duplicates): Remove node and inline chunks where they are used. (Store the data for this line): Inline "Set up control sequence regexps" chunk where it is used. 2026-06-07 Gavin Smith <gavinsmith0123@gmail.com> * texindex/ti.twjr (printing top level, printing a single entry): Inline chunks "Print primary entry if necessary" and "Print secondary entry if necessary". 2026-06-07 Patrice Dumas <pertusus@free.fr> * tta/configure.ac: set with_swig to no if not detected. 2026-06-07 Patrice Dumas <pertusus@free.fr> Enable SWIG interfaces building if detected * tta/configure.ac (swig): enable SWIG interfaces if swig is found. 2026-06-07 Patrice Dumas <pertusus@free.fr> Link statically SWIG interface with libtexinfo code * tta/C/Makefile.am (noinst_LTLIBRARIES, C_libtexinfo_LIBS) (libtexinfo_static_la_*, libtexinfo_convert_static_la_*) (libtexinfo_main_static_la_*): add internal static libraries without Perl calling code. * tta/swig/perl/Makefile.am (Texinfo_la_LIBADD), tta/swig/python/Makefile.am (_Texinfo_la_LIBADD): link against internal static library. 2026-06-07 Patrice Dumas <pertusus@free.fr> Never use a Perl interpreter in the SWIG interface * tta/swig/texinfo.i (txi_ext_inline_setup): remove loading of an interpreter or texi2any modules from txi_ext_inline_setup. Remove collation_language and collation_locale arguments of txi_ext_inline_get_index_sorted_by_index. Remove interpreter_use_types.h include. * tta/swig/perl/Makefile.PL, tta/swig/perl/Makefile.am (AM_CPPFLAGS), tta/swig/python/Makefile.am (AM_CPPFLAGS): remove USE_PERL_INTERPRETER and EMBED_PERL flags settings. Remove dependency on interpreter_use_types.h. * tta/swig/perl/t/20index_sort.t: remove language argument from Texinfo::get_index_sorted_by_index call and skip test of language tailored sorting as it is not possible anymore. * tta/swig/perl/parse_refold.pl, tta/swig/python/test_Texinfo.py: update call of Texinfo setup. * tta/swig/python/Makefile.am (AM_CPPFLAGS): remove linking against perl libraries. 2026-06-07 Gavin Smith <gavinsmith0123@gmail.com> * texindex/ti.twjr (printing top level, printing a single entry): Inline chunks and eliminate indirection. 2026-06-07 Gavin Smith <gavinsmith0123@gmail.com> * texindex/ti.twjr (End-of-file sorting and printing): Move node text into comments. 2026-06-07 Gavin Smith <gavinsmith0123@gmail.com> * texindex/ti.twjr (Store the data for this line): Inline "Split out and store the subparts of the sort key" chunk. 2026-06-07 Gavin Smith <gavinsmith0123@gmail.com> * texindex/ti.twjr (Get the initial, Processing each record): Move line calling extract_initial to "Processing each record", leaving the definition of extract_inital in "Get the initial". 2026-06-07 Gavin Smith <gavinsmith0123@gmail.com> * texindex/ti.twjr: Remove all index entries stating where functions or variables are used. 2026-06-07 Gavin Smith <gavinsmith0123@gmail.com> * texindex/ti.twjr (Check for more initial): Remove node and inline chunk. 2026-06-07 Gavin Smith <gavinsmith0123@gmail.com> * texindex/ti.twjr (Processing each record): Move text to a comment before the block. This makes it easier to spot where the main, unlabelled block starts in the resulting awk program. 2026-06-07 Gavin Smith <gavinsmith0123@gmail.com> * texindex/ti.twjr (Processing each record): Reword a sentence slightly. 2026-06-07 Gavin Smith <gavinsmith0123@gmail.com> * texindex/ti.twjr (Setup for each input file) (Store the data for this line): Move some text from node into code comments. 2026-06-07 Gavin Smith <gavinsmith0123@gmail.com> * texindex/ti.twjr (Remove leading \entry): Remove node and inline code. 2026-06-07 Gavin Smith <gavinsmith0123@gmail.com> * texindex/ti.twjr (Set up and name fields): Remove node and inline chunks where they are used. 2026-06-06 Karl Berry <karl@freefriends.org> * doc/texinfo.texi: use "uppercase" and "lowercase" instead of "upper-case" and "lower-case" consistently, and other minor spelling and grammar fixes. 2026-06-06 Gavin Smith <gavinsmith0123@gmail.com> * texindex/ti.twjr (Assumptions): Add note about when it may not make sense to merge index entries with the same sort key. 2026-06-06 Gavin Smith <gavinsmith0123@gmail.com> * texindex/ti.twjr (Output form): Elaborate on what a "secondary index entry" is. 2026-06-06 Gavin Smith <gavinsmith0123@gmail.com> * texindex/ti.twjr (Input form): move a sentence. 2026-06-06 Gavin Smith <gavinsmith0123@gmail.com> * texindex/ti.twjr (Preface): Inline sub-nodes into this node with @subheading's. 2026-06-06 Gavin Smith <gavinsmith0123@gmail.com> * texindex/ti.twjr (less_than, index_compare): Rename to index_compare. 2026-06-06 Gavin Smith <gavinsmith0123@gmail.com> * texindex/ti.twjr (key_compare, string_compare): Rename to string_compare. Move text describing the function to a comment before the function. 2026-06-06 Gavin Smith <gavinsmith0123@gmail.com> * texindex/ti.twjr (quicksort): Add comment explaining how to call the function and what the parameters mean. Inline @<Set compare mechanism@> and @<Do ``less than'' comparison@> chunks. 2026-06-06 Patrice Dumas <pertusus@free.fr> * doc/texinfo.texi (Raw Formatter Commands): explain differently the relation between raw @html and EPUB, since raw EPUB can only happen in @documentinfo. Expand the example to include @ifnotepub @html. * doc/texinfo.texi (Document Metadata): use the exact same code as in "Raw Formatter Commands" node. 2026-06-06 Patrice Dumas <pertusus@free.fr> * doc/texinfo.texi (Titlepage & Copyright Page): explain that in the default case, there is no title page output in HTML. * doc/texinfo.texi (Document Metadata): explain how Texinfo in @documentinfo ends up in metadata. * doc/texinfo.texi (Contents): contents can be after @end documentinfo. 2026-06-05 Gavin Smith <gavinsmith0123@gmail.com> * texindex/ti.twjr (Input form): Update for switch from \ to @ in index files. 2026-06-05 Patrice Dumas <pertusus@free.fr> Load an embedded Perl interpreter in SWIG only when needed * tta/C/convert/texinfo.c (txi_use_interpreter_load_modules): return a status. * tta/swig/texinfo.i (use_interpreter_state, txi_ext_inline_setup) (txi_ext_inline_get_index_sorted_by_index): setup loaded interpreter using txi_interpreter_want_embedded. Add txi_ext_inline_get_index_sorted_by_index wrapper around txi_ext_get_index_sorted_by_index that loads a Perl embedded interpreter if needed and calls txi_ext_get_index_sorted_by_index. Set use_interpreter_state to txi_interpreter_want_embedded in txi_ext_inline_setup if using an existing Perl interpreter and the call of txi_use_interpreter_load_modules succeeded. 2026-06-05 Patrice Dumas <pertusus@free.fr> * tta/C/convert/texinfo.c (txi_use_interpreter_load_modules) (txi_setup_load_interpreter), tta/C/texi2any.c (main), tta/swig/texinfo.i (txi_ext_inline_setup): split code loading modules but not embedding a Perl interpreter out of txi_setup_main_load_interpreter, since there is nothing in common with the case of embedding a Perl interpreter. Rename txi_setup_main_load_interpreter as txi_setup_load_interpreter. Update functions previously calling txi_setup_main_load_interpreter. * tta/swig/perl/parse_refold.pl, tta/swig/python/test_Texinfo.py, tta/swig/texinfo.i (txi_ext_inline_setup): change txi_ext_inline_setup argument to be a simple 1 or 0 to determine if using an interpreter instead of an enum interpreter_use. 2026-06-05 Patrice Dumas <pertusus@free.fr> * tta/swig/perl/t/20index_sort.t: add entries with sorting order changing with language. Add a test with sv language used for sorting. 2026-06-05 Patrice Dumas <pertusus@free.fr> * tta/C/convert/convert_html.c (html_convert_tree_append): add type with missing conversion function in error message. 2026-06-05 Gavin Smith <gavinsmith0123@gmail.com> * texindex/ti.twjr (Top): remove @menu and @detailmenu. 2026-06-05 Gavin Smith <gavinsmith0123@gmail.com> * texindex/ti.twjr: Use @nodedescription instead of explicit @menu throughout. 2026-06-01 Gavin Smith <gavinsmith0123@gmail.com> Avoid outputting extra spaces with index entry commands * doc/texinfo.tex (\checksortas, \checkseealso, \checkseeentry): Add missing % after {. Report from Arnold Robbins. 2026-06-01 Gavin Smith <gavinsmith0123@gmail.com> * tta/C/main/call_perl_function.c (call_setup_collator), * tta/C/main/replace_perl_api_call.c (call_setup_collator): Remove unused function. 2026-06-01 Gavin Smith <gavinsmith0123@gmail.com> * tta/C/main/manipulate_indices.c (setup_collator, get_sort_key): Remove #define NATIVE_UTS10_COLLATION and use NATIVE_UTS10_COLLATION code unconditionally. 2026-05-31 Patrice Dumas <pertusus@free.fr> * tta/C/main/get_perl_info.c (get_output_files_information): remove useless check of value associated to file name in file information opened_files. Changes in comments. 2026-05-31 Patrice Dumas <pertusus@free.fr> * tta/C/convert/converter.c (setup_converter_format): do not return from a void function (found on Solaris). 2026-05-31 Patrice Dumas <pertusus@free.fr> * tta/tests/other/list-of-tests (index_collation_test_html) (index_collation_test_collation_language_html) (index_collation_test_documentlanguage_collation_html): add tests of language tailored collation for HTML output. 2026-05-31 Patrice Dumas <pertusus@free.fr> * tta/C/main/call_perl_function.c (call_setup_lang_collator), tta/perl/Texinfo/Indices.pm (_setup_lang_collator, _setup_collator): split _setup_lang_collator out of _setup_collator for a language tailored collation locale and add call_setup_lang_collator to call from C. * tta/C/main/manipulate_indices.c (setup_collator): call call_setup_lang_collator if the collation language is set. * tta/perl/Texinfo/Indices.pm (_setup_collator): minor change in code to make clearer that Texinfo::CollateStub is only used with $use_unicode_collation set. 2026-05-31 Patrice Dumas <pertusus@free.fr> * README-hacking, tta/README: update for changes related to collation and languages. 2026-05-30 Patrice Dumas <pertusus@free.fr> * configure.ac: mandate Unicode::Collate. In particular to provide with the same features as C, which always include unicode collation now. * tta/perl/Texinfo/Indices.pm (_setup_collator): use Unicode::Collate and consider that it is always present. 2026-05-29 Patrice Dumas <pertusus@free.fr> * tta/C/convert/converter.c (converter_format_data) (setup_converter_format), tta/C/convert/converter.h (CONVERTER_FORMAT_DATA), tta/C/convert/html_prepare_converter.c (html_format_setup): add format_setup function reference in CONVERTER_FORMAT_DATA and add setup_converter_format that calls setup_converter_generic and the format specific format_setup to initialize the converter format data. Add converter_format argument to html_format_setup. Update callers. * tta/C/texi2any.c (main): call setup_converter_format. 2026-05-29 Patrice Dumas <pertusus@free.fr> * tta/C/texi2any.c (main): verify if documentlanguage_collation_option and collation_language_option are NULL before accessing the value. * tta/perl/XSTexinfo/parser_document/DocumentXS.xs (init): reorganize code to avoid using an intermediary variable. * tta/C/convert/texinfo.c (txi_converter_output_format_setup), tta/C/texi2any.c (main), tta/perl/XSTexinfo/convert/ConvertConverterXS.xs (init), tta/perl/XSTexinfo/convert/ConvertHTMLXS.xs (init): call setup_converter_generic and html_format_setup from texi2any main and not from XS init functions when Perl is embedded and called from C. Leave only code loading Perl modules in txi_converter_output_format_setup. 2026-05-29 Patrice Dumas <pertusus@free.fr> * tta/C/convert/html_prepare_converter.c (html_format_setup), tta/perl/Texinfo/Convert/Converter.pm: do not call setup_converter_generic, instead add a comment in Converter.pm to explain that it should be loaded first. * tta/C/convert/converter.c (setup_converter_generic): consider that the function is called only once, now that it is not called from html_format_setup anymore. 2026-05-29 Patrice Dumas <pertusus@free.fr> * tta/C/main/manipulate_indices.c (setup_index_entries_sort_strings): use a cast to convert char *to uint8_t * and avoid a useless copy of the string. * tta/C/main/manipulate_indices.c (setup_index_entries_sort_strings): use locale variables for code clarity. * tta/C/main/unicode.c (utf8_from_string, string_from_utf8): remove comments, assume that casting is always a good way to convert between char and uint8_t. 2026-05-29 Patrice Dumas <pertusus@free.fr> * tta/C/texi2any.c (main): load a Perl interpreter for the options triggering calling Perl functions from C, DOCUMENTLANGUAGE_COLLATION and COLLATION_LANGUAGE. Handle txi_sort_element_counts return value being NULL, even though it cannot happen right now because txi_sort_element_counts aborts rather than returning NULL. Add some const. * tta/C/convert/texinfo.c (txi_sort_element_counts): abort if the external_module argument is NULL. 2026-05-29 Patrice Dumas <pertusus@free.fr> do not uppercase sort strings * tta/C/main/manipulate_indices.c (setup_sortable_index_entries), tta/perl/Texinfo/Indices.pm (_setup_sortable_index_entries): do not uppercase sort strings before getting collator sort keys, leave the ordering to the collator only. * doc/texinfo.texi (Global Customization Variables): update USE_UNICODE_COLLATION description now that sorting is also done in C and that even for ASCII only the order may not be correct with USE_UNICODE_COLLATION=0 regarding upper and lower case letters. 2026-05-29 Patrice Dumas <pertusus@free.fr> * tta/C/convert/texinfo.c (txi_load_init_file): use a separate variable for the interpreter loading status, which is non-zero in case of failure. 2026-05-29 Patrice Dumas <pertusus@free.fr> * tta/perl/t/30sectioning.t (in_menu_only_special_spaces_node_menu_transliterate) (reference_to_only_special_spaces_node_transliterate), tta/perl/t/40moresectioning.t (only_special_spaces_node_transliterate): shorten skip messages. 2026-05-29 Patrice Dumas <pertusus@free.fr> * tta/perl/t/40moresectioning.t (only_special_spaces_node_transliterate): skip tests with transliteration if XS_convert_enabled as in C/XS the transliteration result depends on the iconv implementation and is not reproducible. 2026-05-29 Patrice Dumas <pertusus@free.fr> * tta/perl/t/30sectioning.t (in_menu_only_special_spaces_node_menu_transliterate) (reference_to_only_special_spaces_node_transliterate) (transliterated_split_equivalent_nodes), tta/perl/t/converters_tests.t (some_at_commands_in_ref_nodes_transliterate), tta/perl/t/formats_encodings.t (char_utf8_latin1_in_refs) (char_latin1_latin1_in_refs) (char_latin1_latin1_in_refs_output_encoding_latin1) (char_us_ascii_latin1_in_refs, at_commands_in_refs_utf8) (at_commands_in_refs_latin1), tta/perl/t/html_tests.t (redirection_same_labels, transliterated_names_conflicts) (node_footnote_use_node, node_footnote_use_node_separate) (simple_only_special_spaces_node): skip tests with transliteration if XS_convert_enabled as in C/XS the transliteration result depends on the iconv implementation and is not reproducible. 2026-05-29 Patrice Dumas <pertusus@free.fr> * tta/C/Makefile.am (teximakehtml_LDADD): revert adding $(perl_conf_LIBS), we do not want to link against Perl lib. AM_LDFLAGS is already used to have linking flags consistent with teximakehtml_CFLAGS. 2026-05-29 Patrice Dumas <pertusus@free.fr> * tta/perl/CheckXS/TestXS.xs (xstest_init): fix prototype. 2026-05-29 Patrice Dumas <pertusus@free.fr> * tta/C/Makefile.am (teximakehtml_LDADD): add $(perl_conf_LIBS) to be consistent with teximakehtml_CFLAGS. 2026-05-29 Patrice Dumas <pertusus@free.fr> * tta/perl/t/formats_encodings.t ($at_commands_in_refs_text): remove duplicate test Texinfo code. 2026-05-28 Patrice Dumas <pertusus@free.fr> * tta/perl/t/z_misc/nodenormalization.t (SKIP): fix the number of tests skipped. 2026-05-28 Patrice Dumas <pertusus@free.fr> do not use Perl transliterations in tests of C code * tta/C/main/node_name_normalization.c (unicode_to_transliterate), tta/C/main/call_perl_function.c: do not call call_nodenamenormalization_unicode_to_transliterate, remove external argument. Remove call_nodenamenormalization_unicode_to_transliterate. Update callers. * tta/C/texi2any.c (main): no more use of embedded Perl for transliteration. Load embedded Perl for SORT_ELEMENT_COUNT. * tta/perl/t/formats_encodings.t ($at_commands_in_refs_text) ($at_commands_in_refs_text_no_translit, at_commands_in_refs): separate @-commands with different transliteration in C and Perl from $at_commands_in_refs_text, they are now in $at_commands_in_refs_text_no_translit and use $at_commands_in_refs_text_no_translit only without transliteration. * tta/perl/t/formats_encodings.t (japanese_shift_jis, sample_utf8): remove transliteration. * tta/perl/t/input_files/char_latin2_latin2_in_refs.texi: remove standalone ogonek that is not transliterated the same in C and Perl. * tta/perl/t/input_files/in_menu_only_special_spaces_node.texi, tta/perl/t/input_files/only_special_spaces_node.texi: comment out characters that are not transliterated the same in chapters. 2026-05-28 Patrice Dumas <pertusus@free.fr> only use unidecode for transliteration * tta/C/main/call_perl_function.c (call_nodenamenormalization_unicode_to_transliterate), tta/perl/Texinfo/Convert/NodeNameNormalization.pm (_unicode_to_transliterate): use unidecode only to transliterate. Remove in_test argument. Update callers. 2026-05-28 Patrice Dumas <pertusus@free.fr> remove USE_UNIDECODE customization variable, always set * NEWS, tta/data/options_data.txt: remove USE_UNIDECODE. 2026-05-28 Patrice Dumas <pertusus@free.fr> always use unidecode for transliteration * tta/perl/Texinfo/Convert/NodeNameNormalization.pm (_unicode_to_transliterate), tta/C/main/call_perl_function.c (call_nodenamenormalization_unicode_to_transliterate): always use unidecode. Update callers. * doc/texinfo.texi (Global Customization Variables): remove description of USE_UNIDECODE. 2026-05-28 Patrice Dumas <pertusus@free.fr> do not transliterate letter in identifier * tta/C/convert/format_html.c (html_convert_printindex_command), tta/perl/Texinfo/Convert/HTML.pm (_convert_printindex_command): convert to identifier only instead of using transliteration and conversion to identifier for letter in identifier. 2026-05-28 Patrice Dumas <pertusus@free.fr> do not transliterate when generating index entry target * tta/C/convert/html_prepare_converter.c (prepare_index_entries_targets), tta/perl/Texinfo/Convert/HTMLNonXS.pm (_prepare_index_entries_targets): convert to identifier only instead of using transliteration and conversion to identifier. 2026-05-28 Patrice Dumas <pertusus@free.fr> * tta/C/main/manipulate_indices.c (setup_collator): handle the case of language collation and no Perl interpreter. Warn in that case. 2026-05-28 Patrice Dumas <pertusus@free.fr> * tta/C/Makefile.am (libtexinfoxs_la_LIBADD): do not include libtexinfo.la twice to make sure that variables are shared. * tta/perl/XSTexinfo/parser_document/DocumentXS.xs (init): set interpreter use to txi_interpreter_use_embedded. 2026-05-27 Patrice Dumas <pertusus@free.fr> Load a Perl interpreted from main C program only if needed * tta/C/convert/texinfo.c (txi_load_interpreter) (txi_setup_main_load_interpreter, txi_load_init_file), tta/C/convert/texinfo.h (INTERPRETER_LOADING_INFO), tta/C/main/interpreter_use_types.h (enum interpreter_use), tta/C/main/set_perl_interpreter.c (use_perl_interpreter), tta/C/texi2any.c (main): add INTERPRETER_LOADING_INFO structure for information on an interpreter to be loaded. Add txi_interpreter_want_embedded enum interpreter_use. Set use_perl_interpreter in set_perl_interpreter.c default value and texi2any.c default value with EMBED_PERL to txi_interpreter_want_embedded. Split txi_load_interpreter out of txi_setup_main_load_interpreter. If use_interpreter is txi_interpreter_want_embedded, do not load the interpreter in txi_setup_main_load_interpreter but prepare loading interpreter data only. Load interpreter in txi_load_init_file if needed, in main program if test mode is set, for reproducible transliteration, if USE_LIBINTL_PERL_IN_XS is set or if a Perl converter is used. Update callers. 2026-05-26 Patrice Dumas <pertusus@free.fr> When C code is called first, always initialize libraries from C * tta/C/convert/texinfo.c (txi_setup_main_load_interpreter), tta/C/texi2any.c (main), tta/perl/Texinfo/XSLoader.pm (init), tta/perl/XSTexinfo/convert/ConvertConverterXS.xs (init), tta/perl/XSTexinfo/convert/ConvertHTMLXS.xs (init), tta/perl/XSTexinfo/parser_document/DocumentXS.xs (init), tta/swig/texinfo.i (txi_ext_inline_setup): call messages_and_encodings_setup and setup_texinfo_main in main and in txi_ext_inline_setup, never in txi_setup_main_load_interpreter. Pass $mandatory_xs in XSLoader.pm init, such that init in DocumentXS.xs does not call messages_and_encodings_setup nor setup_texinfo_main when $mandatory_xs is set, as it will always have been already called. * tta/C/texi2any.c (main): do not set XS_STRXFRM_COLLATION_LOCALE, now we have a good collation in the default case. 2026-05-26 Patrice Dumas <pertusus@free.fr> * tta/C/main/manipulate_indices.c (setup_collator): do not call call_setup_collator if NATIVE_UTS10_COLLATION set. 2026-05-25 Patrice Dumas <pertusus@free.fr> * tta/: replace deprecated locale gnulib module by locale-h. 2026-05-25 Patrice Dumas <pertusus@free.fr> TODO: After next release about unicode collation gnulib 2026-05-25 Patrice Dumas <pertusus@free.fr> * tta/, tta/C/Makefile.am (libtexinfo_la_LDFLAGS, ctexi2any_LDADD) (teximakehtml_LDADD): replace uchar-h by uchar-h-c23 gnulib module. In the unicode collation C code char32_t is considered as unicode point. it is probably safer for other codes too. 2026-05-25 Gavin Smith <gavinsmith0123@gmail.com> Attempt at fixing index collation bug * tta/C/main/unicode-collation/collation_key.c (u32_make_collation_key_ext): Set length of collation key differently. It was possible the length would include uninitialised memory after a terminating null leading comparisons to be made incorrectly. Report from Bruno Haible. 2026-05-25 Patrice Dumas <pertusus@free.fr> * tta/C/Makefile.am (libtexinfo_la_LDFLAGS, ctexi2any_LDADD) (teximakehtml_LDADD): add link flags needed by gnulib. 2026-05-24 Patrice Dumas <pertusus@free.fr> * tta/C/convert/convert_html.c (html_prepare_converted_output_info), tta/perl/Texinfo/Convert/HTMLNonXS.pm (_prepare_converted_output_info): do not output @html in @documentinfo in the HTML preamble if EPUB is generated, such that the @html in @documentinfo is only output in the EPUB metadata and can be EPUB specific metadata. 2026-05-24 Gavin Smith <gavinsmith0123@gmail.com> Integrate native Unicode collation code * tta/C/main/unicode-collation/collation-table.c, tta/C/main/unicode-collation/collation_data_loader.c, tta/C/main/unicode-collation/collation_data_loader.h, tta/C/main/unicode-collation/collation_key.c, tta/C/main/unicode-collation/collation_key.h: Copy files from 'experimental/unicode-collation' branch. * tta/C/main/unicode-collation/REAMDE: New file, explaining origin of the files under this subdirectory. * tta/C/main/manipulate_indices.c (get_sort_key) <ctn_unicode>: Add code to call 'u8_make_collation_key' in new code, rather than calling call_collator_getSortKey in order to call Perl subroutines. * tta/C/Makefile.am (libtexinfo_la_SOURCES): Add new files. (libtexinfo_la_LDFLAGS): Add flags that may be needed by the gnulib dependencies of the collation code. 2026-05-24 Gavin Smith <gavinsmith0123@gmail.com> * configure.ac (AM_INIT_AUTOMAKE): Remove dist-xz from options for speed when testing. 2026-05-18 Patrice Dumas <pertusus@free.fr> * tta/C/main/debug.c: remove print_associate_info_debug and print_element_debug_details. Detailed tree element information in a compact format is available from manipulate_tree.c functions also used for tests. * tta/C/main/output_unit.c (print_output_unit) (print_output_units_details), tta/perl/Texinfo/OutputUnits.pm (print_output_unit, print_output_units_details): add print_output_unit based on print_output_units_details. Add more information to print_output_unit, the number of contents and the sectioning commands. * tta/perl/Texinfo/Common.pm, tta/perl/Texinfo/OutputUnits.pm (debug_print_output_unit): move debug_print_output_unit to OutputUnits.pm and use print_output_unit to display the output unit. 2026-05-18 Patrice Dumas <pertusus@free.fr> * tta/C/main/tree.c: inline and remove contents_child_by_index. It has been checked that bound checking in contents_child_by_index was never useful. Update callers. 2026-05-18 Patrice Dumas <pertusus@free.fr> * tta/perl/Texinfo/ManipulateTree.pm (copy_element_tree): inline non_leading_trailing_tree and reorganize code to set type early, as in C. * tta/perl/Texinfo/Common.pm (non_leading_trailing_tree): remove TODO comment and shorten code. * tta/C/parsetexi/separator.c (handle_open_brace), tta/perl/Texinfo/ParserNonXS.pm (_handle_open_brace, _parse_texi): do not set/unset internal_space_holder as it is not used anywhere. 2026-05-18 Patrice Dumas <pertusus@free.fr> * tta/perl/Texinfo/Convert/HTML.pm (_convert_printindex_command): keep the letter command if it is already uppercase. * tta/C/convert/convert_html.c (html_convert_tree_append), tta/perl/Texinfo/Convert/HTML.pm (_convert): use print_element_debug or debug_print_element for the element debugging output. * tta/C/main/debug.c (print_element_debug), tta/C/parsetexi/debug_parser.c (print_element_debug_parser), tta/perl/Texinfo/Common.pm (debug_print_element): always type before command. * tta/perl/Texinfo/Common.pm (debug_print_element): append instead of reconstituting a string. 2026-05-17 Patrice Dumas <pertusus@free.fr> * tta/C/convert/converter.c (converter_set_document), tta/perl/Texinfo/Convert/ConverterNonXS.pm (set_document), tta/perl/Texinfo/Convert/HTMLNonXS.pm (conversion_initialization): allow an undef/NULL document such that copy_options_for_convert_text is still called in that case. * tta/C/convert/get_converter_perl_info.c (get_converter_and_document_from_sv), tta/C/convert/html_converter_api.c (html_output, html_convert), tta/C/convert/html_prepare_converter.c (html_conversion_initialization), tta/perl/XSTexinfo/convert/ConvertConverterXS.xs (set_document), tta/perl/XSTexinfo/convert/ConvertHTMLXS.xs (conversion_initialization, output, convert): add document argument to html_conversion_initialization, and call set_document in html_conversion_initialization, as in Perl. Update callers. Add get_converter_and_document_from_sv to get both document and converter to use in XS. Remove converter_set_document_from_sv. 2026-05-17 Patrice Dumas <pertusus@free.fr> * tta/C/main/get_perl_info.c (get_lang_info_hv): comment out unused variable. 2026-05-17 Patrice Dumas <pertusus@free.fr> * README-hacking: add check that the debug output of pure Perl modules and XS/C are the same before the release as a manual test, since it allows to find real bugs. 2026-05-17 Patrice Dumas <pertusus@free.fr> * tta/C/main/get_perl_info.c (get_lang_info_hv): do not set lang_info->bcp47_locale, it will be set in set_lang_info_translation. Found with valgrind as there was a memory leak. 2026-05-17 Patrice Dumas <pertusus@free.fr> * tta/perl/Texinfo/Convert/HTMLNonXS.pm (@sorted_no_arg_commands) (conversion_initialization, _translate_names): add @sorted_no_arg_commands and use it to have a reproducible order for no args commands processing, in particular for debug messages. 2026-05-17 Patrice Dumas <pertusus@free.fr> * tta/C/convert/build_html_perl_info.c (pass_sv_converter_info), tta/C/convert/convert_html.c (html_prepare_converted_output_info) (html_convert_output), tta/perl/Texinfo/Convert/HTML.pm (_file_header_information), tta/perl/Texinfo/Convert/HTMLNonXS.pm (%available_converter_info, _prepare_converted_output_info): set date_in_header in prepare_converted_output_info. Add it to converter_info. Use it from converter_info in _file_header_information. * doc/texi2any_api.texi (Converter General Information): document date_in_header. * tta/C/convert/converter.c (set_file_path): fix debug message. 2026-05-17 Patrice Dumas <pertusus@free.fr> * tta/C/main/translations.c (reset_lang_translation_from_customization): no need to call set_translations_documentlanguagevariant, as a NULL lang_translations is used to reset fully the cur_lang_trans. * tta/perl/Texinfo/Convert/Converter.pm (reset_lang_translation_from_customization): add. * tta/perl/Texinfo/Convert/DocBook.pm (conversion_output_begin), tta/perl/Texinfo/Convert/HTMLNonXS.pm (_prepare_converted_output_info) (_setup_output): call reset_lang_translation_from_customization to properly reset the current lang_translations. 2026-05-17 Patrice Dumas <pertusus@free.fr> * tta/C/main/utils.c (add_include_directory), tta/perl/Texinfo/ParserNonXS.pm (parser): canonicalize include directories in parsers. * tta/perl/Texinfo/OutputUnits.pm (units_directions): setup NodeForward and similar directions even if there are no node directions (no next, prev up). * tta/C/parsetexi/end_line.c (end_line_misc_line): rename fullpath as included_file_path. * tta/perl/Texinfo/Convert/HTML.pm (_default_format_special_body_about): add explanation. * tta/C/convert/convert_html.c (html_translate_names): handle NULL OUTPUT_ENCODING_NAME in debug message. 2026-05-17 Patrice Dumas <pertusus@free.fr> * tta/perl/Texinfo/Common.pm (%spaces_protection) (debug_print_element), tta/perl/Texinfo/Convert/HTML.pm (%spaces_protection, _convert), tta/perl/Texinfo/ParserNonXS.pm (%spaces_protection, _debug_protect_eol): protect tabs and form feeds. * tta/perl/Texinfo/Convert/HTML.pm (_convert_menu_entry_type): remove unneeded container around node_content. Minor changes. * tta/perl/Texinfo/Convert/HTML.pm (_file_header_information): call Texinfo::TreeElement::new for new elements. * tta/perl/Texinfo/OutputUnits.pm (output_unit_texi): remove trailing spaces for external node formatting. 2026-05-17 Patrice Dumas <pertusus@free.fr> * tta/C/main/convert_to_texinfo.c (root_heading_command_to_texinfo): reorganize code, use xasprintf instead of TEXT, never return NULL. 2026-05-17 Patrice Dumas <pertusus@free.fr> * tta/perl/t/test_utils.pl: encode STDERR in UTF-8, to have the same encoding as C direct output on stderr (for debugging output). 2026-05-17 Patrice Dumas <pertusus@free.fr> * tta/C/main/translations.c (replace_convert_substrings), tta/perl/Texinfo/Translations.pm (_replace_convert_substrings): show debug messages if debug > 1 to avoid seeing spurious differences between C and Perl debugging output in case both are compared. * tta/perl/Texinfo/Convert/Plaintext.pm (new_formatter): set debug in the Texinfo::Convert::Paragraph container only if debug > 1 as there is no equivalent debugging info in C. * tta/perl/Texinfo/Convert/Texinfo.pm (root_heading_command_to_texinfo): check if tree is empty on non_leading_trailing_tree returned tree. * tta/perl/Texinfo/Common.pm (debug_print_element): print type before command for the main element. 2026-05-17 Patrice Dumas <pertusus@free.fr> * tta/C/convert/format_html.c (html_special_unit_info_text): use enum direction_string_context instead of enum conversion_context. Update callers. 2026-05-16 Patrice Dumas <pertusus@free.fr> * tta/C/convert/convert_html.c (html_gdt_tree): add debugging message. * tta/C/main/debug.c (print_element_debug): do not print type in debugging if c_only flag is set. 2026-05-16 Patrice Dumas <pertusus@free.fr> * tta/C/main/translations.c (replace_convert_substrings): print debug message both with substitute substrings and without. * tta/perl/Texinfo/Translations.pm (_replace_convert_substrings): distinguish translated string and parsed string with substitutions. Print different messages with substitute substrings and without. * tta/perl/Texinfo/Convert/Texinfo.pm (root_heading_command_to_texinfo): call non_leading_trailing_tree to avoid returning leading and trailing spaces and comment. * tta/perl/Texinfo/Convert/HTMLNonXS.pm (conversion_initialization): add debug message output in C. 2026-05-16 Patrice Dumas <pertusus@free.fr> * tta/C/convert/convert_html.c, tta/C/convert/html_prepare_converter.c: prepend C| in debug messages. * tta/perl/Texinfo/Convert/HTMLNonXS.pm (_html_convert_convert), tta/C/convert/convert_html.c (html_convert_convert): change a debug message. 2026-05-16 Patrice Dumas <pertusus@free.fr> * tta/perl/Texinfo/ParserNonXS.pm (_process_remaining_on_line) (_parse_texi), tta/C/parsetexi/parser.c (parse_texi) (process_verb_contents): protect end of line and always add an end of line. * tta/C/parsetexi/*.c: prepand debug messagaes by C| to distinguish from Perl parser debug messages. 2026-05-16 Patrice Dumas <pertusus@free.fr> * tta/C/main/translations.c (gdt_tree), tta/perl/Texinfo/Translations.pm (gdt): improved and same error message for gdt. 2026-05-16 Patrice Dumas <pertusus@free.fr> * tta/perl/Texinfo/Convert/Converter.pm (table_item_content_tree): do not use the tree provided by non_leading_trailing_tree such that a comment is kept. * tta/C/parsetexi/separator.c (handle_close_brace): use & for flag. * tta/C/main/element_types.txt (normal_text): add c_only. * tta/C/convert/convert_html.c (html_convert_tree_append), tta/C/parsetexi/debug_parser.c (print_element_debug_parser): do not print type in debugging if c_only flag is set. * tta/perl/Texinfo/ParserNonXS.pm (_end_line_misc_line) (_handle_line_command): set index_entry_command type as soon as possible. * tta/perl/Texinfo/ParserNonXS.pm (_process_raw_block_contents): fix missing 'conf' key. 2026-05-17 Gavin Smith <gavinsmith0123@gmail.com> * README-hacking: add note for removal of texi2any_internals manual from webpages 2026-05-16 Patrice Dumas <pertusus@free.fr> * tta/C/convert/converter.c (current_bcp47_locale): add. * tta/C/convert/convert_html.c (html_translate_names) (html_prepare_converted_output_info), tta/C/convert/html_prepare_converter.c (html_setup_output): use current_bcp47_locale. 2026-05-16 Patrice Dumas <pertusus@free.fr> * tta/perl/Texinfo/Convert/NodeNameNormalization.pm (_protect_unicode_char): no need to check unicode_simple_character_map, the result is the same with sprintf. * tta/perl/Texinfo/Convert/NodeNameNormalization.pm (_unicode_to_transliterate): change ordering of conditionals for clearer code. Changes in TODO and comments. 2026-05-15 Patrice Dumas <pertusus@free.fr> * tta/perl/Texinfo/Convert/HTML.pm (_convert_def_line_type): call set_context_convert_tree instead of _set_code_context to use the HTML customization API. 2026-05-15 Patrice Dumas <pertusus@free.fr> * tta/perl/Texinfo/Convert/HTML.pm (set_context_convert_tree) ($CTXF_normal): add CTXF_normal, flag that can be used to unset code context. Add set_context_convert_tree that accepts CTXF_normal or CTXF_code to set or unset code context. Remove convert_tree_in_code_context. Update callers. * doc/texi2any_api.texi (Setting the Expansion Context for Conversion): update for the replacement of convert_tree_in_code_context by set_context_convert_tree. 2026-05-15 Patrice Dumas <pertusus@free.fr> * tta/C/convert/format_html.c (html_convert_printindex_command), tta/C/convert/html_conversion_state.c (html_open_command_update_context) (html_convert_command_update_context), tta/perl/Texinfo/Convert/HTML.pm (_convert_printindex_command), tta/perl/Texinfo/Convert/HTMLNonXS.pm (_open_command_update_context) (_convert_command_update_context): start a new context for printindex in the generic conversion state updating instead of in the printindex conversion function. 2026-05-14 Patrice Dumas <pertusus@free.fr> * tta/perl/Texinfo/ManipulateTree.pm (_copy_tree), configure.ac (Perl version and modules), tta/perl/Texinfo/Translations.pm (_replace_convert_substrings): call Scalar::Util weaken on parent added by _copy_tree. Do not remove the parent of the tree returned after translation now that the reference is weakened. 2026-05-14 Patrice Dumas <pertusus@free.fr> * doc/tta_api/Makefile.am (texi2any_internals_dependencies), tta/perl/Texinfo/Parser.pm: move POD documentation of the Parser out of ParserNonXS.pm to Parser.pm. 2026-05-14 Patrice Dumas <pertusus@free.fr> * tta/perl/Texinfo/*.pm, tta/perl/Texinfo/Convert/*.pm: verify that there is a VERSION for all modules that are not *NonXS modules. Add use warnings and use 5.006 if needed for our VERSION. * tta/perl/t/z_misc/test_is_content_empty.t, tta/perl/t/z_misc/nodenormalization.t: add "use Texinfo::Document;". * tta/perl/Texinfo/Parser*: small misc changes. Add "use Texinfo::Document;" in the main Parser.pm module. 2026-05-14 Patrice Dumas <pertusus@free.fr> * tta/perl/XSTexinfo/parser_document/ParserXS.xs (_register_parser_conf, _parser_store_values) (_parser_store_INCLUDE_DIRECTORIES, _parser_store_EXPANDED_FORMATS): add leading _ for functions that should only be called from ParserXS.pm in XS. * tta/perl/Texinfo/Common.pm, tta/perl/Texinfo/ParserNonXS.pm (%parser_document_state_configuration, %parser_inner_options) (%parser_document_parsing_options): move to ParserNonXS.pm. 2026-05-14 Patrice Dumas <pertusus@free.fr> * tta/C/main/errors.c (message_list_format_line_message) (message_list_format_document_message): rename message_list_line_formatted_message as message_list_format_line_message and message_list_document_formatted_message as message_list_format_document_message to have a common part in name with similar Perl functions. Update callers. * tta/C/main/errors.c, tta/perl/Texinfo/Report.pm: move code around. Improve POD and comments. 2026-05-13 Patrice Dumas <pertusus@free.fr> * tta/C/Makefile.am (libperlcall_utils_la_SOURCES), tta/C/main/interpreter_use_types.h: rename use_interpreter_types.h as interpreter_use_types.h. 2026-05-13 Patrice Dumas <pertusus@free.fr> * doc/texi2any_api.texi (Other Dynamic Information): document command_is_in_referred_command_stack. 2026-05-13 Patrice Dumas <pertusus@free.fr> * doc/texi2any_api.texi (Document Structure): rename "Tree Elements and Document Structure" as "Document Structure" and make it a section directly in "Formatting HTML Output". * doc/texi2any_api.texi (Output Units Information): rename "Output Units in User Defined Functions" as "Output Units Information" and move to "Document Structure". 2026-05-13 Patrice Dumas <pertusus@free.fr> * tta/C/convert/convert_html.c (html_prepare_converted_output_info): access command flags only if an element is not a text element. * tta/perl/Makefile.tres, tta/perl/t/converters_tests.t (documentinfo_with_empty_line): new test with empty line in @documentinfo. 2026-05-13 Patrice Dumas <pertusus@free.fr> Do not install nor put on the web the texi2any internals manual * doc/Makefile.am (wwwdoc-build, wwwdoc-install): do not generate the texi2any internals manual. The manual is only useful to develop texi2any and can be with the sources only. * doc/tta_api/Makefile.am (AUTOMAKE_OPTIONS): add no-installinfo to avoid installing the texi2any internals Info manual. 2026-05-13 Patrice Dumas <pertusus@free.fr> * tta/perl/t/z_misc/html_convert_tree.t, tta/perl/t/z_misc/test_fill_gaps_in_sectioning.t: use a combination of XS_parser_enabled call return true and core_modules_built set to determine if the XS Parser is used, as it is the good way to check that the XS Parser is actually used. 2026-05-13 Patrice Dumas <pertusus@free.fr> * Pod-Simple-Texinfo/pod2texi.pl, tta/perl/t/*.t: remove unused code, change formatting of functions beginning. Change in spacing. Cosmetic changes. 2026-05-12 Patrice Dumas <pertusus@free.fr> * util/htmlxref.d/Texinfo_GNU.cnf: add autosprintf. 2026-05-11 Patrice Dumas <pertusus@free.fr> * Pod-Simple-Texinfo/t/Pod-Simple-Texinfo.t: change formatting of functions beginning. Change in spacing. * Pod-Simple-Texinfo/lib/Pod/Simple/Texinfo.pm: update Pod documentation. 2026-05-11 Patrice Dumas <pertusus@free.fr> * Pod-Simple-Texinfo/lib/Pod/Simple/Texinfo.pm: change formatting of functions beginning. Use defined or exists if the value is not used. Change in spacing. 2026-05-11 Patrice Dumas <pertusus@free.fr> * Pod-Simple-Texinfo/lib/Pod/Simple/Texinfo.pm (%line_commands) (_texinfo_handle_element_end): keep %pod_head_commands_level levels out of %line_commands. * Pod-Simple-Texinfo/lib/Pod/Simple/Texinfo.pm, Pod-Simple-Texinfo/pod2texi.pl: change formatting of functions beginning. Use defined or exists if the value is not used. Change in spacing. Other cosmetic changes. 2026-05-11 Patrice Dumas <pertusus@free.fr> * Pod-Simple-Texinfo/pod2texi.pl (BEGIN): update to match the change in Texinfo::ModulePath::init call. 2026-05-11 Patrice Dumas <pertusus@free.fr> * Pod-Simple-Texinfo/pod2texi.pl (pod2texi_help), POD: use document instead of manual, convert instead of translate. Other updates. * doc/texinfo.texi (Invoking @command{pod2texi}): use document instead of manual, convert instead of translate. 2026-05-11 Patrice Dumas <pertusus@free.fr> * tta/perl/ext/epub3.pm (@epub_language, epub_setup, epub_init) (epub_finish): add epub_init handler where all the languages are gathered. Use configured documentlanguage and documentscript and go through global commands information language_commands to gather all the language in the document, and use all the languages to set dc:language elements. Only add a language with @documentscript or @documentlanguagevariant if there was already a script or variant setup, to avoid setting languages without following @documentscript or @documentlanguagevariant values set. * tta/perl/Makefile.tres, tta/perl/t/epub_tests.t (languages_scripts_variants): new test of multilingual document. 2026-05-10 Patrice Dumas <pertusus@free.fr> Generic metadata in HTML and DocBook in @documentinfo * tta/C/convert/build_html_perl_info.c (pass_sv_converter_info), tta/C/convert/convert_html.c (html_prepare_converted_output_info), tta/C/convert/format_html.c (html_default_format_begin_file) (html_default_format_node_redirection_page), tta/C/convert/html_converter_finish.c (html_free_converter), tta/C/convert/html_prepare_converter.c (html_conversion_initialization), tta/C/main/converter_types.h (CONVERTER), tta/perl/Texinfo/Convert/HTML.pm (_file_header_information, _default_format_begin_file) (_default_format_node_redirection_page), tta/perl/Texinfo/Convert/HTMLNonXS.pm (%available_converter_info) (_prepare_converted_output_info): add documentinfo_metadata to converter in C and to 'converter_info' in Perl with @documentinfo content except for metadata_commands. Get in _file_header_information in Perl. Output in file headers. * doc/texi2any_api.texi (Converter General Information): document documentinfo_metadata in converter information. * tta/perl/Texinfo/Convert/DocBook.pm (conversion_output_begin): gather @documentinfo content except for metadata_commands and output in documentinfo element. * tta/perl/t/converters_tests.t (metadata_in_documentinfo), tta/perl/Makefile.tres: new test for metadata in @documentinfo. 2026-05-10 Patrice Dumas <pertusus@free.fr> * tta/perl/ext/epub3.pm ($epub_doc_dest_dir): reindent. Rename $epub_document_destination_directory as $epub_doc_dest_dir. 2026-05-10 Patrice Dumas <pertusus@free.fr> * tta/C/api_for_swig/swig_element_types.h (TXI_CM_OTHER_FLAGS_LIST), tta/C/main/builtin_commands.h (CF_metadata), tta/C/main/command_data.awk, tta/data/command_data.txt: add metadata flag for @-commands with document metadata information that are supposed to be handled explicitly in output formats conversion. * tta/perl/ext/epub3.pm: remove local definition of $metadata_commands, use Texinfo::Commands::metadata_commands. 2026-05-10 Patrice Dumas <pertusus@free.fr> Generic metadata in EPUB in @documentinfo * tta/perl/ext/epub3.pm (%metadata_commands, conversion_output_begin): convert content of @documentinfo that is not an explicit @-command usually used for metadata in the <metadata> EPUB element. * tta/perl/t/epub_tests.t (epub_metadata), tta/perl/Makefile.tres: new test. 2026-05-09 Gavin Smith <gavinsmith0123@gmail.com> Fix M-TAB moving before DEL-quoted cross-reference * info/scan.c (scan_reference_label) [hide-note-references=On]: If "quoting" DEL bytes surround the reference label, remove them when rewriting the node contents. Because these bytes are invisible, if the node position is placed on one of these bytes, it would be advanced past that byte in display_cursor_at_point, which is called in the main loop in info_read_and_dispatch. Then the cursor would get "stuck" when trying to move before a cross-reference with M-TAB. Report from Aidan <aidanczhai@gmail.com>. 2026-05-07 Patrice Dumas <pertusus@free.fr> * doc/texi2any_api.texi (Text Tree Elements Conversion): document xml_format_text_with_numeric_entities. * doc/texi2any_api.texi (Commands Without Arguments Formatting): document expand_today. * doc/texi2any_api.texi (Accent Commands with Arguments Formatting): document %Texinfo::UnicodeData::unicode_accented_letters. * doc/texi2any_api.texi (Specific Formatting for Indices): add the description of more indices related formatting functions. * doc/texi2any_api.texi (@code{@@verbatiminclude} Formatting) (Definition Commands Formatting) (Float and List of Floats Formatting) (Block Commands with @code{@@item}) (Informative Commands): add nodes for diverse elements. * doc/texi2any_api.texi (Specific Functions for Specific Elements): remove previous "Specific Functions for Specific Elements" node and rename "Functions and Data for Default Formatting" as "Specific Functions for Specific Elements". * doc/texi2any_api.texi (Specific Functions for Specific Elements): document simple_arg_text, empty_spaces_argument and Texinfo::Convert::NodeNameNormalization methods. * tta/perl/Texinfo/Convert/HTML.pm (_convert_float_command): call float_name_caption object oriented. * tta/perl/Texinfo/Convert/NodeNameNormalization.pm (@EXPORT_OK): export convert_to_normalized. 2026-05-06 Patrice Dumas <pertusus@free.fr> * doc/texi2any_api.texi (Command Tree Element Conversion) (Functions and Data for Default Formatting): put information on default formatting functions used for diverse commands in a spearate chapter, keeping only formatting of commands that require calling some specific functions in "Command Tree Element Conversion". 2026-05-06 Gavin Smith <gavinsmith0123@gmail.com> Replace use of strcat and strncat * install-info/install-info.c (split_entry): Remove sole remaining use of strncat. 2026-05-06 Gavin Smith <gavinsmith0123@gmail.com> Replace use of strcat * install-info/install-info.c (format_entry): Eliminate use of strcat and strncat. 2026-05-06 Gavin Smith <gavinsmith0123@gmail.com> Replace use of strcat * install-info/install-info.c (split_entry): Eliminate use of strcat in this function, as it always needs to scan the string from the beginning, which is a well-known defect in the use of this function. Remove pointless division by "sizeof (char)". 2026-05-06 Gavin Smith <gavinsmith0123@gmail.com> * install-info/install-info.c (split_entry): Only convert "\n" to " " a limited number of times, and allocate enough memory to do so. Memory overflow reported by LogicLuminary <memorylogicdev@gmail.com>. 2026-05-06 Patrice Dumas <pertusus@free.fr> * doc/texi2any_api.texi (Texinfo Tree Conversion Functions), POD documentation: update/improve. 2026-05-06 Patrice Dumas <pertusus@free.fr> * tta/C/api_for_swig/swig_interface.c (txi_ext_get_index_sorted_by_index), tta/C/convert/converter.c (lang_info_sorting_locale, get_converter_indices_sorted_by_index) (get_converter_indices_sorted_by_letter), tta/C/main/document.c (sorted_indices_by_index, sorted_indices_by_letter) (print_document_indices_sort_strings), tta/C/main/document_types.h, tta/C/main/utils.c, tta/perl/Texinfo/Convert/ConverterNonXS.pm (get_converter_indices_sorted_by_letter) (get_converter_indices_sorted_by_index), tta/perl/Texinfo/Document.pm (sorted_indices_by_letter, sorted_indices_by_index), tta/perl/Texinfo/DocumentNonXS.pm (print_document_indices_sort_strings): determine the lang_sorting_locale based either on COLLATION_LANGUAGE customization variable or current_lang_translations lang and script in Converter code, in get_converter_indices_sorted_by_index and get_converter_indices_sorted_by_letter instead of in Document code. Move lang_info_sorting_locale to converter.c. Remove SORTING_LANG_INFO and new_sorting_lang_info. 2026-05-05 Patrice Dumas <pertusus@free.fr> * doc/texi2any_api.texi: add indices entries. * tta/perl/Texinfo/Indices.pm (setup_index_entries_sort_strings) (_setup_sortable_index_entries, sort_indices_by_letter): cosmetic changes and variable names change. Changes in POD and comments. 2026-05-05 Gavin Smith <gavinsmith0123@gmail.com> info: Fix infinite loop * info/session-cmd.c (forward_move_node_structure): Replace call to info_handle_pointer to follow "Up" pointer. Check Up pointer is not to a different file, to avoid going all the way up to "(dir)". Also check that it does not point to the current node, to avoid an infinite loop. Fall through to code handling last node in the file when we can't go Up any more. Remove braces and extra level of indentation. An infinite loop occured when the "dir" node had an Up node. Report from Aidan <aidanczhai@gmail.com>. 2026-05-04 Gavin Smith <gavinsmith0123@gmail.com> * doc/texinfo.tex (@documentlanguagevariant, @documentscript): Add stub implementations. 2026-05-03 Patrice Dumas <pertusus@free.fr> * tta/C/convert/get_converter_perl_info.c (get_hv_lang_translation) (copy_sv_options_for_convert_text), tta/C/main/get_perl_info.c (get_lang_translation_sv), tta/perl/XSTexinfo/parser_document/TranslationsXS.xs (cache_translate_string): add get_hv_lang_translation and get_lang_translation_sv based on copy_sv_options_for_convert_text code. Use in TranslationsXS.xs cache_translate_string. * tta/C/api_for_swig/swig_interface.c (txi_ext_get_index_sorted_by_index), tta/C/convert/converter.c (get_converter_indices_sorted_by_index) (get_converter_indices_sorted_by_letter), tta/C/main/document.c (lang_info_sorting_locale, sorted_indices_by_index) (sorted_indices_by_letter, print_document_indices_sort_strings), tta/C/main/document.h (SORTING_LANG_INFO), tta/C/main/utils.c (new_sorting_lang_info), tta/perl/Texinfo/Convert/ConverterNonXS.pm (get_converter_indices_sorted_by_letter), tta/perl/Texinfo/Document.pm (sorted_indices_by_letter, sorted_indices_by_index), tta/perl/Texinfo/DocumentNonXS.pm (print_document_indices_sort_strings), tta/perl/XSTexinfo/convert/ConvertConverterXS.xs (get_converter_indices_sorted_by_index): setup information on language for sorting based COLLATION_LANGUAGE or on current lang translations lang_info in a SORTING_LANG_INFO structure in get_converter_indices_sorted_by_*, using new_sorting_lang_info in C. Use this information in sorted_indices_by_* to determine the language to use for sorting, based either on COLLATION_LANGUAGE or on the main language and script from the lang_info, using lang_info_sorting_locale in C. * tta/perl/Texinfo/Indices.pm (_setup_collator): rename $locale_lang as $lang_sorting_locale. * tta/tests/other/Makefile.am (EXTRA_DIST), tta/tests/other/index_collation_script_test.texi, tta/tests/other/list-of-tests (index_collation_script_test_documentlanguage_collation): add test with documentscript and DOCUMENTLANGUAGE_COLLATION set. This test is not final, as the order is not different with and without the documentscript for the selected index entries. * tta/tests/other/list-of-tests: comment out tests of XS_STRXFRM_COLLATION_LOCALE. 2026-05-03 Gavin Smith <gavinsmith0123@gmail.com> * doc/texinfo.texi (Internationalization, Setting the language): Grammar fixes. 2026-05-03 Patrice Dumas <pertusus@free.fr> document @documentscript and @documentlanguagevariant * doc/texinfo.texi (Inserting Accents): add a pragraph stating that accented chracters and other can in general be input as encoded characters. * doc/texinfo.texi (Internationalization): be more precise on the current status of Internationalization in Texinfo. * doc/texinfo.texi (Internationalization): introduce the @-commands and elements of a language locale. * doc/texinfo.texi (Setting the language): rename @code{@@documentlanguage} as "Setting the language". Document that the IANA language subtag registry is used, use CC for the country code and do not use a precise ISO 639 standard. * doc/texinfo.texi (Setting the language) (Customization Variables for @@-Commands) (Global Customization Variables, Command List) (Internationalization of Document Strings): add @documentlanguagevariant and @documentscript. * doc/texinfo.texi (Invoking @command{texi2any}): update description of --document-language. 2026-05-02 Patrice Dumas <pertusus@free.fr> * tta/perl/Texinfo/Convert/HTML.pm (bcp47_tag), tta/perl/t/init/translated_strings_customization.pm: rename bcp47_locale as bcp47_tag. * doc/texi2any_api.texi (Translated Strings Customization): document the lang_info argument of format_translate_message and xpg_locale and bcp47_tag use. * tta/perl/init/documentation_examples.pm, doc/texi2any_api.texi (Translated Strings Customization): use a country code in language to show an XPG locale name in example. 2026-05-02 Patrice Dumas <pertusus@free.fr> object-based interface for format_translate_message lang info argument * tta/perl/Texinfo/Translations.pm (get_lang_info_xpg_locale): rename get_lang_info_xdg_locale as get_lang_info_xpg_locale. Update callers. * tta/perl/Texinfo/Convert/HTML.pm (Texinfo::Convert::HTML::Language) (new, bcp47_locale, xpg_locale): new package turning lang_info to a blessed reference, with two accessors xpg_locale and bcp47_locale. * tta/perl/Texinfo/Convert/HTML.pm ($unknown_lang_info) (_html_cache_translate_string): call Texinfo::Convert::HTML::Language::new on the lang_info argument of format_translate_message. * tta/C/convert/call_html_perl_function.c (call_formatting_function_format_translate_message): bless lang_info argument of format_translate_message into the Texinfo::Convert::HTML::Language class. * tta/perl/t/init/translated_strings_customization.pm (%translations) (_texi2any_tests_format_translate_message), tta/perl/t/init_files_tests.t (customize_translations): use bcp47 locale name, add test of language with country code. 2026-05-02 Patrice Dumas <pertusus@free.fr> * tta/perl/Texinfo/Translations.pm: rename translations argument as translations_cache. 2026-05-01 Patrice Dumas <pertusus@free.fr> * tta/C/convert/build_html_perl_state.c (build_html_translated_names), tta/perl/Texinfo/Translations.pm (_init_lang_translation) (_set_lang_info_translation, $converters_translation_cache), tta/perl/Texinfo/TranslationsNonXS.pm (cache_translate_string): use lang_translations array references as $Texinfo::Translations::converters_translation_cache values, not translated strings hash. The translated strings hash is last in the lang_translations array references and now set in _init_lang_translation. Preset the empty string lang_translations in converters_translation_cache for the unknown language. 2026-05-01 Patrice Dumas <pertusus@free.fr> * tta/perl/Texinfo/Translations.pm (_lang_info_bcp47_locale): rename lang_info_bcp47_locale as _lang_info_bcp47_locale. * tta/C/main/translations.c (set_lang_info_translation), tta/perl/Texinfo/Translations.pm (_set_lang_info_translation): set bcp47_locale in set_lang_info_translation instead of right before in callers. Update callers. * tta/C/main/translations.c (new_element_language_translation), tta/perl/Texinfo/Translations.pm (new_element_language_translation): inline new_lang_info in new_element_language_translation. Remove new_lang_info. 2026-05-01 Patrice Dumas <pertusus@free.fr> * tta/C/main/translations.c (set_translations_documentlanguage) (set_translations_documentscript) (set_translations_documentlanguagevariant), tta/perl/Texinfo/Translations.pm (set_translations_documentlanguage) (set_translations_documentscript) (set_translations_documentlanguagevariant): do not check the current lang translations to return it, as it can only happen if the user use the same command twice, which is not supposed to happen. 2026-05-01 Patrice Dumas <pertusus@free.fr> * tta/C/convert/convert_html.c (html_prepare_converted_output_info), tta/C/convert/html_prepare_converter.c (html_setup_output), tta/C/main/translations.c (reset_lang_translation_from_customization): add reset_lang_translation_from_customization and use it in html_prepare_converted_output_info and html_setup_output. 2026-05-01 Patrice Dumas <pertusus@free.fr> * tta/C/main/convert_utils.c (definition_category_tree), tta/perl/Texinfo/Convert/Utils.pm (definition_category_tree): remove unused command_line_encoding argument. Update callers. 2026-05-01 Patrice Dumas <pertusus@free.fr> * tta/C/convert/build_html_perl_state.c (build_html_translated_names): pass a full current_lang_translations including the translated strings cache hash, setup if needed. * tta/perl/Texinfo/TranslationsNonXS.pm (cache_translate_string): update code now that lang translations always have a translation cache associated. 2026-05-01 Patrice Dumas <pertusus@free.fr> * tta/C/main/get_perl_info.c (get_lang_info_hv): get bcp47_locale from Perl data. * tta/C/main/get_perl_info.c (set_lang_info_copy_translation): rename get_lang_info_translation as set_lang_info_copy_translation. Update caller. * tta/C/main/get_perl_info.c (new_lang_info_copy) (set_lang_info_copy_translation): add new_lang_info_copy based on new_copy_translation. Inline the remaining of new_copy_translation in set_lang_info_copy_translation. * tta/perl/Texinfo/Translations.pm (_init_lang_translation) (_new_lang_info): rename new_lang_info as _new_lang_info and _set_lang_info_translation as _init_lang_translation. * tta/perl/Texinfo/Translations.pm (%parser_translation_cache): rename %indices_lang_translations as %parser_translation_cache. * tta/perl/Texinfo/Translations.pm (complete_indices): call new_element_language_translation instead of two levels caching. 2026-05-01 Patrice Dumas <pertusus@free.fr> * tta/perl/Texinfo/Translations.pm (new_element_language_translation): add a translations cache argument and call _set_lang_info_translation. Update callers. * tta/perl/Texinfo/Translations.pm: remove new_lang_translations. 2026-04-30 Patrice Dumas <pertusus@free.fr> * tta/C/main/translations.c (set_translations_documentscript) (set_translations_documentlanguagevariant): copy lang only if it is set. * tta/perl/Makefile.tres, tta/perl/t/languages.t (documentscript_documentlanguagevariant) (documentlanguagevariant_documentscript): add tests for current lang translations without @documentlanguage being set. 2026-04-30 Patrice Dumas <pertusus@free.fr> * tta/C/main/translations.c: move code around. 2026-04-30 Patrice Dumas <pertusus@free.fr> * tta/C/main/translations.c (new_element_language_translation): add lang translation cache arguments, such that they are always set by the callers, call set_lang_info_translation. Update callers. * tta/C/parsetexi/indices.c (complete_indices): call new_element_language_translation. * tta/C/main/translations.c: remove new_element_lang_info and new_lang_translations. Make more functions static. * tta/C/main/translations.c (cache_translate_string): simplify now that translations can only be unset if the lang_translation argument is NULL. * tta/C/main/translations.c (unknown_lang_translations) (set_output_strings_translate_method, cache_translate_string): add a specific lang translation tree list for unknown language, and simpler code for that case. Remove unknown_lang_info. 2026-04-29 Patrice Dumas <pertusus@free.fr> * tta/C/convert/build_html_perl_state.c (build_html_translated_names): build language_env again, reverting recent change, in case cache_translate_string is not overriden. * tta/perl/Texinfo/TransformationsNonXS.pm (complete_tree_nodes_missing_menu, regenerate_master_menu): set the translation cache when calling set_preamble_language_commands. * tta/C/main/translations.c (cache_translate_string), tta/perl/Texinfo/TranslationsNonXS.pm (cache_translate_string): move code around to have all the code related to finding the translation hash before the code finding the string and context in the hash. Reorganize Perl code to be more like C code, to first find translations hash. 2026-04-29 Patrice Dumas <pertusus@free.fr> * tta/C/convert/build_html_perl_state.c (build_html_translated_names): inline set_perl_lang_translations in build_html_translated_names and remove set_perl_lang_translations. 2026-04-29 Patrice Dumas <pertusus@free.fr> * tta/C/convert/build_html_perl_state.c (set_perl_lang_translations): do not pass language_env, it is not needed as cache_translate_string is overriden. 2026-04-29 Patrice Dumas <pertusus@free.fr> add const for current lang translation in argument and return 2026-04-29 Patrice Dumas <pertusus@free.fr> * tta/C/convert/build_html_perl_state.c (set_perl_lang_translations): do not pass translations at all, it is not needed as cache_translate_string is overriden. 2026-04-29 Patrice Dumas <pertusus@free.fr> * tta/C/convert/build_html_perl_state.c (set_perl_lang_translations): update for the changes in Perl code, by using converters_translation_cache directly. 2026-04-29 Patrice Dumas <pertusus@free.fr> gnulib update * tta: run "gnulib-tool --add-import". 2026-04-29 Patrice Dumas <pertusus@free.fr> revert 2026-04-22 change of bcp47.c now fixed upstream 2026-04-29 Patrice Dumas <pertusus@free.fr> * tta/perl/Texinfo/Convert/Converter.pm (converter_perl_release) (converter_set_documentlanguage, converter_set_documentscript) (converter_set_documentlanguagevariant) (set_converter_preamble_language_commands), tta/perl/Texinfo/Convert/Text.pm (copy_options_for_convert_text): do not add a 'translations' state in converters, pass directly $Texinfo::Translations::converters_translation_cache argument. 2026-04-29 Patrice Dumas <pertusus@free.fr> * README-hacking: add a note to update TXI_DOCUMENT_TRANSLATED_STRINGS_NR * tta/C/main/translations.c (converters_translation_cache), tta/C/parsetexi/indices.c (parser_translation_cache), tta/perl/Texinfo/Translations.pm ($converters_translation_cache) ($parser_translation_cache): rename translation_cache as converters_translation_cache and lang_translations_cache/lang_translations as parser_translation_cache. Update users * tta/C/main/translations.c (get_lang_info_translation): add const. 2026-04-28 Patrice Dumas <pertusus@free.fr> * tta/perl/Texinfo/Convert/Text.pm (copy_options_for_convert_text) (convert, output): inline and remove _initialize_converter_text_options_encoding and _initialize_text_options_encoding. * tta/C/main/convert_to_text.c, tta/perl/Texinfo/Convert/Text.pm: remove text_set_language, text_set_script, text_set_languagevariant, set_language, set_script and set_languagevariant. * tta/C/convert/convert_html.c (html_prepare_converted_output_info): remove language_variants unused variable code. * tta/perl/t/z_misc/convert_to_text.t: add a test with a @documentlanguage before the translated appendix @-command. 2026-04-27 Patrice Dumas <pertusus@free.fr> * tta/C/main/build_perl_info.c (build_lang_info): build bcp47_locale field too. 2026-04-27 Patrice Dumas <pertusus@free.fr> * tta/C/main/manipulate_tree.c (parse_node_manual): destroy node if it is not registered. * tta/C/main/translations.c (set_translations_documentlanguage): free bcp47_locale. 2026-04-27 Patrice Dumas <pertusus@free.fr> * tta/C/main/build_perl_info.c (pass_global_info): remove unused variables. 2026-04-27 Patrice Dumas <pertusus@free.fr> Document language_commands global commands data 2026-04-27 Patrice Dumas <pertusus@free.fr> * tta/perl/texi2any.pl: do not set main_configuration documentlanguage based on document information, as it is not gathered in document information anymore. It wouldn't be needed from there anyway, as values set from command-line or init files are already in main_configuration. * tta/C/parsetexi/parser.c (get_parser_info): rename get_document_info as get_parser_info to have the same name as in Perl. Changes in comments. 2026-04-27 Patrice Dumas <pertusus@free.fr> * tta/perl/t/test_utils.pl (test): pass documentlanguage and documentscript to test_customization_options. * tta/perl/t/transformations.t (@tests_converted): set full_document. * tta/perl/Makefile.tres, tta/perl/t/transformations.t (regenerate_master_menu_language_at_beginning_and_end) (regenerate_master_menu_language_at_beginning_end_set_lang), tta/tests/formatting/no_detailmenu_lang_at_begin_end.texi, tta/tests/formatting/Makefile.am (EXTRA_DIST), tta/tests/formatting/list-of-tests (no_detailmenu_lang_at_begin_end) (no_detailmenu_lang_at_begin_end_set_lang): add tests of regenerate_master_menu tree transformations and documentlanguage at beginning and end of Texinfo file, and setting documentlanguage. 2026-04-27 Patrice Dumas <pertusus@free.fr> * tta/C/convert/converter.c (set_converter_preamble_language_commands), tta/perl/Texinfo/Convert/Converter.pm (set_converter_preamble_language_commands): reset configuration variables to begin values in set_converter_preamble_language_commands. Update callers. * tta/C/main/translations.c (set_preamble_language_commands), tta/perl/Texinfo/Translations.pm (set_preamble_language_commands): start from a NULL lang_translations, remove the corresponding argument. Update callers. * tta/C/convert/build_html_perl_state.c (set_perl_lang_translations): rename set_perl_translations_documentlanguage as set_perl_lang_translations. * tta/C/convert/build_html_perl_state.c (build_html_translated_names): remove code setting documentlanguage for Text converter, as it is not used. 2026-04-26 Patrice Dumas <pertusus@free.fr> * tta/C/main/build_perl_info.c (pass_global_info): do not register language related commands information directly in global_info. 2026-04-26 Patrice Dumas <pertusus@free.fr> * tta/C/main/manipulate_tree.c (copy_tree_internal), tta/perl/Texinfo/ManipulateTree.pm (_copy_tree): do not add a parent to the copied element if the source element does not have a parent. * tta/perl/Texinfo/Translations.pm (gdt): use Texinfo::ManipulateTree::copy_element_tree to copy tree, and not dclone, to get the same detailed tree as in C. * tta/perl/Texinfo/Translations.pm (_set_lang_info_translation): handle an undef $translations. * tta/C/structuring_transfo/transformations.c (complete_tree_nodes_missing_menu, regenerate_master_menu), tta/perl/Texinfo/TransformationsNonXS.pm (complete_tree_nodes_missing_menu, regenerate_master_menu): create lang_translation by calling set_preamble_language_commands. * tta/perl/Texinfo/ParserNonXS.pm (get_parser_info): do not register language related commands information directly in global_info. 2026-04-26 Patrice Dumas <pertusus@free.fr> for DocBook, take into account resetting by @documentlanguage in preamble * tta/perl/Texinfo/Convert/DocBook.pm (conversion_output_begin): call set_converter_preamble_language_commands to determine the bcp47_locale at the end of the preamble. 2026-04-26 Patrice Dumas <pertusus@free.fr> for HTML, take into account resetting by @documentlanguage in preamble * tta/C/convert/convert_html.c (html_translate_names) (html_convert_tree_append), tta/perl/Texinfo/Convert/HTML.pm (_convert), tta/perl/Texinfo/Convert/HTMLNonXS.pm (_translate_names), tta/perl/XSTexinfo/convert/ConvertHTMLXS.xs (_translate_names): do not set current_lang_translations converter in *_translate_names, set it before calling *_translate_names, for instance in html_convert_tree_append. Remove language_variants *_translate_names argument, update callers. * tta/perl/Texinfo/Common.pm (in_preamble), tta/C/main/utils.c (in_preamble): rename _in_preamble as in_preamble in Perl. Make function extern in C and add const. * tta/C/main/command_data.awk, tta/C/parsetexi/end_line.c (end_line_misc_line), tta/C/main/build_perl_info.c (build_global_commands), tta/C/main/utils.c (delete_global_commands), tta/perl/Texinfo/ParserNonXS.pm (_end_line_misc_line): add new elements list in global_commands with all the language related commands in the order they appear in in the document. This allows to get the commands in order to take into acount that @documentlanguage resets @documentscript and @documentlanguagevariant. * tta/C/main/document_types.h (PREAMBLE_LANG_CMD) (PREAMBLE_LANG_CMD_LIST, GLOBAL_INFO), tta/C/main/utils.c (delete_global_info), tta/C/parsetexi/parser.c (add_preamble_lang_cmd), (get_document_info, parse_texi_document), tta/C/main/build_perl_info.c (pass_global_info), tta/perl/Texinfo/ParserNonXS.pm (get_parser_info): new global info field, preamble_lang_cmd with add textual information on lang related commands appearing in preamble in the order the appear in the preamble, and only if the values are not already set from command-line. * tta/C/convert/converter.c (set_converter_preamble_language_commands), tta/C/main/translations.c (set_preamble_language_commands), tta/C/main/convert_to_text.c (copy_options_for_convert_text), tta/perl/Texinfo/Convert/Converter.pm (set_converter_preamble_language_commands), tta/perl/Texinfo/Translations.pm (set_preamble_language_commands), tta/perl/Texinfo/Convert/Text.pm (copy_options_for_convert_text): add to set current_lang_translations based on global info preamble_lang_cmd. Use in copy_options_for_convert_text. * tta/C/convert/convert_html.c (html_prepare_converted_output_info), tta/C/convert/html_prepare_converter.c (html_setup_output), tta/perl/Texinfo/Convert/HTMLNonXS.pm (_prepare_converted_output_info) (_setup_output): call set_converter_preamble_language_commands to set current_lang_translations to the end of the preamble values. Reset afterwards. * tta/perl/t/languages.t (documentscript_variant_reset_in_preamble), tta/perl/Makefile.tres: add a test with @documentscript and @documentlanguagevariant reset by @documentlanguge in preamble. 2026-04-24 Patrice Dumas <pertusus@free.fr> * tta/perl/t/languages.t (unknown_documentscript_selection) (documentlanguagevariant_selection): add more testing to have some combinations now that documentlanguage unset the other language commands. 2026-04-24 Patrice Dumas <pertusus@free.fr> documentlanguage resets documentscript and variants in conversion * tta/C/main/translations.c (set_translations_documentlanguage), tta/perl/Texinfo/Translations.pm (set_translations_documentlanguage): reset script and language variants. * tta/perl/Texinfo/Convert/Text.pm (copy_options_for_convert_text): call set_translations_documentlanguage first to avoid resetting the other commands values. 2026-04-24 Patrice Dumas <pertusus@free.fr> * tta/perl/Texinfo/Translations.pm (%indices_lang_translations) (complete_indices): collect a lang_info only from the definition element, and cache the corresponding lang_translations. Separate the current_lang_translations and the element lang_translations such that the element lang_translations can be undef independently of the current_lang_translations. * tta/C/main/translations.c (new_element_lang_info) (new_element_language_translation), tta/perl/Texinfo/Translations.pm (new_element_language_translation): return undef/NULL immediately if documentlanguage is not present. 2026-04-24 Patrice Dumas <pertusus@free.fr> * tta/perl/Texinfo/Convert/Converter.pm (converter_set_documentlanguage, converter_set_documentscript) (converter_set_documentlanguagevariant), tta/perl/Texinfo/Convert/Text.pm (set_language, set_script) (set_languagevariant): do not register undef as current_lang_translations. * tta/perl/Texinfo/Translations.pm (new_lang_translations): return directly undef if $lang_info is undef. * tta/perl/Texinfo/Convert/HTML.pm (_html_cache_translate_string): use a file scoped $unknown_lang_info when lang_translation is undef. * tta/perl/Texinfo/Translations.pm (lang_info_bcp47_locale): add. * tta/perl/Texinfo/Translations.pm (new_lang_info) (set_translations_documentlanguage, set_translations_documentscript) (set_translations_documentlanguagevariant): always set 'bcp47_locale' when creating a lang translations. Remove get_lang_info_bcp47_locale. Update get_lang_info_bcp47_locale callers. 2026-04-24 Patrice Dumas <pertusus@free.fr> documentlanguage resets documentscript and variants in parsers * tta/C/parsetexi/end_line.c (end_line_misc_line), tta/perl/Texinfo/ParserNonXS.pm (_end_line_misc_line): reset documentscript and documentlanguagevariant states when encountering documentlanguage. 2026-04-24 Patrice Dumas <pertusus@free.fr> * tta/C/main/build_perl_info.c (pass_global_info): pass documentlanguagevariant from the end of the preamble. * tta/C/main/utils.c (documentlanguagevariant_variants): change a variable name. 2026-04-26 Gavin Smith <gavinsmith0123@gmail.com> Index sort key output for UTF-8 * doc/texinfo.tex (\unicodechardefs): Use \DeclareUnicodeCharacterSK instead of \DeclareUnicodeCharacter for several characters in the Latin-1 block (U+00A0-U+OOFF). 2026-04-26 Gavin Smith <gavinsmith0123@gmail.com> Index sort key output for UTF-8 * doc/texinfo.tex (\DeclareUnicodeCharacterSK): Add definition to be used in place of \DeclareUnicodeCharacter to allow defining sort string for index sort key along with the main definition for the character. 2026-04-26 Gavin Smith <gavinsmith0123@gmail.com> Index sort key output for UTF-8 * doc/texinfo.tex (\ifinindexsortkey): Define with \newif. (\doindexsegment): Set \inindexsortkeytrue when processing index sort key. (\UTFviiiSortkeyTwo, \UTFviiiSortkeyThree, \UTFviiiSortkeyFour): Special definitions for UTF-8 sequences inside UTF-8 sequences. By default, output the sequences as they are within a pair of curly brackets. Check for special sort key definition and use that instead if available. (\DefineSortKey): Add macro to define special sort key for Unicode codepoint. Do not actually use it anywhere yet. (\DeclareUnicodeCharacterNative): Handle \ifinindexsortkey similarly for luatex and xetex. (\DeclareUnicodeCharacterUTFviii): Correct a comment. There would be errors with texindex output with a UTF-8-encoded Texinfo file under a non-UTF-8 locale, or with an awk program that didn't pay attention to the locale encoding. Report from Vincent Belaïche, March 2026, and Werner Lemberg, November 2022. 2026-04-23 Patrice Dumas <pertusus@free.fr> * tta/C/convert/get_converter_perl_info.c (copy_sv_options_for_convert_text), tta/C/main/get_perl_info.c (get_lang_info_hv), tta/perl/XSTexinfo/parser_document/TranslationsXS.xs (cache_translate_string): allocate lang info in get_lang_info_hv. * tta/C/main/translations.c (lang_info_bcp47_locale): add. * tta/C/main/get_perl_info.c (get_lang_info_hv), tta/C/main/translations.c (new_lang_info, new_copy_translation) (set_translations_documentlanguage, set_translations_documentscript) (set_translations_documentlanguagevariant): always set bcp47_locale when creating a lang info. Remove get_lang_info_bcp47_locale. Update get_lang_info_bcp47_locale callers to access directly bcp47_locale. The bcp47_locale is always needed soon after the creation and it simplifies the code. * tta/C/parsetexi/indices.c (complete_indices): rename current_lang_translations variable as element_lang_translations. 2026-04-23 Patrice Dumas <pertusus@free.fr> use documentlanguagevariant in HTML, DocBook and LaTeX conversion * tta/C/main/utils.c (documentlanguagevariant_variants): add. * tta/C/convert/convert_html.c (html_translate_names) (html_prepare_converted_output_info, html_convert_tree_append), tta/C/convert/format_html.c (html_convert_documentlanguagevariant_command), tta/C/convert/html_prepare_converter.c (commands_internal_conversion_table), tta/perl/Texinfo/Convert/HTML.pm (_convert_documentlanguagevariant_command, _convert), tta/perl/Texinfo/Convert/HTMLNonXS.pm (_translate_names) (_prepare_converted_output_info), tta/perl/XSTexinfo/convert/ConvertHTMLXS.xs (_translate_names): add language_variants argument to *_translate_names. Set variants based on documentlanguagevariant and value at the end of the preamble and pass to translate_names. Update *_translate_names callers. * tta/C/convert/html_prepare_converter.c (html_setup_output), tta/perl/Texinfo/Convert/HTMLNonXS.pm (_setup_output): handle documentlanguagevariant for BODY_ELEMENT_ATTRIBUTES lang attribute. * tta/perl/Texinfo/Convert/DocBook.pm (%docbook_global_commands) (conversion_output_begin, _convert): handle documentlanguagevariant. * tta/perl/Texinfo/Convert/LaTeX.pm (%LaTeX_formatted_line_commands) (%LaTeX_formatted_nobrace_commands): rename %formatted_line_commands as %LaTeX_formatted_line_commands and %formatted_nobrace_commands as %LaTeX_formatted_nobrace_commands. * tta/perl/Texinfo/Convert/LaTeX.pm (%LaTeX_formatted_line_commands) (_convert): handle documentlanguagevariant. 2026-04-23 Patrice Dumas <pertusus@free.fr> use documentlanguagevariant in Plaintext and in Text with converter * tta/C/main/utils.c (join_strings_list): add const. * tta/C/main/convert_to_text.c (copy_options_for_convert_text) (text_set_languagevariant), tta/C/main/translations.c (set_translations_documentlanguagevariant), tta/perl/Texinfo/Convert/Converter.pm (converter_set_documentscript), tta/perl/Texinfo/Convert/Text.pm (copy_options_for_convert_text) (set_languagevariant), tta/perl/Texinfo/Translations.pm (set_translations_documentlanguagevariant): handle documentlanguagevariant with set_translations_documentlanguagevariant, converter_set_documentscript and text_set_languagevariant. Add document argument to copy_options_for_convert_text and update callers. Use global_information for documentlanguage and documentscript in Perl copy_options_for_convert_text. * tta/perl/Texinfo/Convert/Plaintext.pm (%formatted_line_commands) (_convert): set current lang translation based on documentlanguagevariant. * tta/C/main/translations.c (new_copy_translation): inline copy_lang_info in new_copy_translation. * tta/C/main/translations.c (set_translations_documentscript): set to 0 before copying. * po_document/qaa.po, po_document/qaa@1234.po, po_document/qaa@latin.po, tta/perl/t/z_misc/convert_to_text.t (@tests_specs, run_test): add a function to generalize running tests and tests specifications that also test documentscript and documentlanguagevariant. Call parse_texi_text instead of parse_texi_piece and let the generic code set documentlanguage and documentscript. 2026-04-22 Patrice Dumas <pertusus@free.fr> use documentlanguagevariant in completed def alias translations * tta/C/main/translations.c (init_lang_translation): use both the XPG full locale and the lang part if they are different. * tta/C/main/translations.c (new_lang_info), tta/C/main/translations.c (new_element_lang_info, new_element_language_translation), tta/perl/Texinfo/Translations.pm (new_lang_info) (new_element_language_translation): get documentlanguagevariant from element and put variants in lang info. * tta/perl/Makefile.tres, tta/perl/t/languages.t (documentlanguagevariant_conversion): add test of @documentlanguagevariant for conversion. 2026-04-22 Patrice Dumas <pertusus@free.fr> * tta/gnulib/lib/bcp47.c (bcp47_to_xpg): do not consider a subtag with numbers to possibly be a script subtag. Local fix reported upstream: https://lists.gnu.org/archive/html/bug-gnulib/2026-04/msg00154.html 2026-04-22 Patrice Dumas <pertusus@free.fr> * po_document/LINGUAS, po_document/Makevars (UNDESIRED_LINGUAS), po_document/qaa@1234.po: rename qaa@123.po as qaa@1234.po and update translations. A variant with numbers must be at least 4 characters long. 2026-04-22 Patrice Dumas <pertusus@free.fr> Set documentlanguagevariant in extra for translations and global info * tta/C/main/utils.c (analyze_documentlanguagevariant_argument_e), tta/C/parsetexi/end_line.c (end_line_misc_line), tta/perl/Texinfo/Common.pm (_analyze_documentlanguagevariant_argument_e) (warn_documentlanguagevariant_arguments) (documentlanguagevariant_variants), tta/perl/Texinfo/ParserNonXS.pm (_end_line_misc_line) (@translation_commands), : add analyze_documentlanguagevariant_argument_e. Add warnings on malformed or unknown documentlanguagevariant arguments. * tta/C/main/tree_types.h (AI_KEYS_LIST), tta/C/parsetexi/def.c (parse_def), tta/C/parsetexi/end_line.c (end_line_def_line), tta/perl/Texinfo/ManipulateTree.pm (_print_element_associated_info), tta/perl/Texinfo/ParserNonXS.pm (@translation_commands): add extra documentlanguagevariant and pass it to def elements to translate. * tta/C/main/build_perl_info.c (pass_global_info), tta/C/main/document_types.h (GLOBAL_INFO), tta/C/main/utils.c (delete_global_info), tta/C/parsetexi/end_line.c (end_line_misc_line), tta/perl/Texinfo/ParserNonXS.pm (get_parser_info): pass documentlanguagevariant to global info. * tta/perl/Makefile.tres, tta/perl/t/08misc_commands.t (documentlanguagevariant_validity), tta/perl/t/languages.t (documentlanguagevariant_selection): add tests for malformed documentlanguagevariant arguments, and to see extra being set. 2026-04-22 Patrice Dumas <pertusus@free.fr> * po_document/qaa@123.po: add pseudo-translations that make clear which file they come from. 2026-04-21 Patrice Dumas <pertusus@free.fr> Use documentscript in conversion * tta/C/main/utils.c (analyze_documentscript_argument): handle NULL text. * tta/perl/Texinfo/Translations.pm (get_lang_info_xdg_locale): fix typo in module name. * tta/perl/Texinfo/Translations.pm (set_translations_documentlanguage): return current_lang_translations if the documentlanguage is bogus. * tta/C/convert/build_html_perl_state.c (set_perl_translations_documentlanguage), tta/C/convert/get_converter_perl_info.c (copy_sv_options_for_convert_text): use converter current_lang_translations to build the lang info Perl information through a call to build_lang_info. * tta/C/main/translations.c (new_lang_info, new_element_lang_info) (new_lang_translations, new_element_language_translation) (set_translations_documentlanguage), tta/C/main/tree_types.h (LANG_TRANSLATION), tta/perl/Texinfo/Translations.pm (new_lang_info) (new_lang_translations, new_element_language_translation), tta/perl/XSTexinfo/parser_document/TranslationsXS.xs (cache_translate_string): add new_lang_info and new_element_lang_info, new_lang_translations and new_element_language_translation. Use a pointer for DOCUMENT_LANG_INFO info in LANG_TRANSLATION. Update set_translations_documentlanguage and other users. Remove new_documentlanguage_translation, get_documentlanguage_translation and fill_document_lang_info. * tta/C/main/translations.c (destroy_document_lang_info): replace free_document_lang_info by destroy_document_lang_info and free the lang_info too. * tta/C/main/translations.c (set_translations_documentscript), tta/perl/Texinfo/Translations.pm (set_translations_documentscript): add. * tta/C/main/build_perl_info.c (build_convert_text_options), tta/C/main/convert_to_text.c (destroy_text_options) (copy_options_for_convert_text, text_set_language, text_set_script) tta/C/main/convert_to_text.h (TEXT_OPTIONS), tta/perl/Texinfo/Convert/Text.pm (copy_options_for_convert_text) (set_script): remove documentlanguage from text options, instead set current_lang_translations based on documentlanguage and documentscript options values. Add text_set_script and set_script. * tta/C/convert/converter.c (set_converter_init_information), tta/perl/Texinfo/Convert/Converter.pm (converter_set_documentscript), tta/perl/Texinfo/Convert/ConverterNonXS.pm (_generic_converter_init): pass documentscript. Add converter_set_documentscript. * tta/C/convert/convert_html.c (html_prepare_converted_output_info), tta/perl/Texinfo/Convert/HTMLNonXS.pm (_prepare_converted_output_info): use current_lang_translations to get bcp47_locale and set documentlanguage and documentscript in html_prepare_converted_output_info. * tta/C/parsetexi/indices.c (complete_indices), tta/perl/Texinfo/Translations.pm (complete_indices): use new_element_lang_info and set_lang_info_translation in complete_indices in C and new_element_language_translation in Perl. * tta/C/structuring_transfo/transformations.c (complete_tree_nodes_missing_menu, regenerate_master_menu), tta/perl/Texinfo/TransformationsNonXS.pm (complete_tree_nodes_missing_menu, regenerate_master_menu): setup lang_translation with a call to new_lang_translations. * tta/C/convert/convert_html.c (html_translate_names) (conf_for_documentlanguage, html_convert_tree_append), tta/C/convert/html_prepare_converter.c (informative_global_commands) (conf_for_documentlanguage, commands_internal_conversion_table), tta/perl/Texinfo/Convert/HTML.pm (@informative_global_commands) (_convert), tta/perl/Texinfo/Convert/HTMLNonXS.pm (_translate_names): in html_translate_names, call text_set_script and set_translations_documentscript based on documentscript option. Get documentscript value during conversion, and call html_translate_names for documentscript too. * tta/perl/Texinfo/Convert/DocBook.pm (%docbook_global_commands) (conversion_output_begin, _convert), tta/perl/Texinfo/Convert/LaTeX.pm (_informative_command_output, _latex_begin_output), tta/perl/Texinfo/Convert/Plaintext.pm (@informative_global_commands) (_convert): handle documentscript. * tta/C/main/convert_to_text.c (convert_to_text_internal), tta/C/main/convert_utils.c (definition_category_tree), tta/perl/Texinfo/Convert/Text.pm (_convert), tta/perl/Texinfo/Convert/Utils.pm (definition_category_tree): use new_element_language_translation to set lang translations for category text when there is no converter. * tta/C/convert/html_prepare_converter.c (html_setup_output), tta/perl/Texinfo/Convert/HTMLNonXS.pm (_setup_output): use new_lang_info with configuration options to determine the body lang attribute. * tta/perl/t/languages.t (documentscript_conversion), tta/perl/Makefile.tres: add test for documentscript in conversions. * tta/perl/t/z_misc/do_master_menu.t: simply pass undef for lang_translation. 2026-04-20 Patrice Dumas <pertusus@free.fr> * po_document/qaa.po po_document/qaa@latin.po: add pseudo-translations that make clear which file they come from. 2026-04-20 Patrice Dumas <pertusus@free.fr> Setup po files with private use language for script and variant tests * README-hacking, po_document/LINGUAS, po_document/Makevars (UNDESIRED_LINGUAS, INST_LINGUAS, CATALOGS), po_document/qaa.po, po_document/qaa@123.po, po_document/qaa@latin.po: add po files solely used for in-build tests. Reset CATALOGS in Makevars excluding these po files such that they are not installed. Use qaa language for these files, which is in a range with "Private use" Description in language-subtag-registry. 2026-04-20 Patrice Dumas <pertusus@free.fr> * tta/C/main/tree_types.h (enum extra_type): rename extra_misc_args as extra_string_list. Update users. * tta/C/main/extra.c (add_extra_string_list) (lookup_extra_string_list): rename lookup_extra_misc_args as lookup_extra_string_list and add_extra_misc_args as add_extra_string_list. Update callers. * tta/C/main/tree_types.h (AI_KEYS_LIST), tta/C/parsetexi/macro.c (parse_macro_command_line, lookup_macro_parameter) (expand_macro_arguments, expand_linemacro_arguments, handle_macro), tta/perl/Texinfo/Example/TexinfoMarkup.pm (_convert), tta/perl/Texinfo/ManipulateTree.pm (_print_element_associated_info), tta/perl/Texinfo/ParserNonXS.pm (_parse_macro_command_line) (_expand_macro_arguments, _expand_linemacro_arguments) (_handle_macro): add formal_args extra_string_list extra element for macro formal arguments list and use it. * tta/C/api_for_swig/swig_interface.c (txi_ext_element_formal_args), tta/swig/texinfo.i (element_formal_args): add. 2026-04-19 Patrice Dumas <pertusus@free.fr> * tta/C/convert/html_converter_finish.c (html_free_converter): clear units_direction_names_index (found with valgrind). 2026-04-19 Patrice Dumas <pertusus@free.fr> * tta/C/main/build_perl_info.c: move code around. 2026-04-19 Patrice Dumas <pertusus@free.fr> * tta/C/main/build_perl_info.c (build_key_pair_info), tta/C/tree_elements/build_perl_tree_elements.c (build_element_attribute): replace build_extra_misc_args by a call to build_string_list. Remove build_extra_misc_args. 2026-04-19 Patrice Dumas <pertusus@free.fr> * tta/perl/t/languages.t (invalid_documentlanguage) (documentlanguage_selection_accented_region) (documentlanguage_selection_region_unicode): do not set COMMAND_LINE_ENCODING as documentlanguage argument is not encoded anymore. 2026-04-19 Patrice Dumas <pertusus@free.fr> * tta/C/parsetexi/end_line.c (end_line_misc_line), tta/perl/Texinfo/ParserNonXS.pm (_end_line_misc_line): do not set documentscript state if it is an empty string. * tta/perl/Makefile.tres, tta/perl/t/languages.t (documentscript_selection, documentscript_before_documentlanguage) (unknown_documentscript_selection): add tests of documentscript being set in translated elements extra. 2026-04-19 Patrice Dumas <pertusus@free.fr> Set documentscript extra on translated elements * tta/C/main/utils.c (analyze_documentscript_argument): rename analyse_documentscript_argument as analyze_documentscript_argument. Add valid_script argument. Fix one-off NUL. * tta/C/parsetexi/parser.c (text_contents_to_plain_text): return an empty string, never return NULL. Update callers. * tta/C/main/parser_conf.h (PARSER_CONF), tta/C/parsetexi/api.c (initialize_parsing), tta/C/parsetexi/conf.c (parser_conf_set_documentscript), tta/C/parsetexi/parser.c (global_documentscript), tta/C/parsetexi/end_line.c (end_line_def_line), tta/perl/Texinfo/Common.pm (analyze_documentscript_argument), tta/perl/Texinfo/ParserNonXS.pm (@translation_commands, get_parser_info, _initialize_parsing) (_end_line_misc_line), tta/perl/Texinfo/ParserXS.pm (parser), tta/perl/XSTexinfo/parser_document/ParserXS.xs (parser_conf_set_documentscript), tta/C/convert/texinfo.c (txi_parser), tta/C/main/build_perl_info.c (pass_global_info), tta/perl/texi2any.pl, tta/C/main/document.c (set_document_options): pass documentscript from command line. Analyze documentscript argument and warn if needed. Set documentscript in parser state. * tta/C/parsetexi/def.c (parse_def), tta/C/main/tree_types.h (AI_KEYS_LIST), tta/C/parsetexi/end_line.c (end_line_def_line), tta/perl/Texinfo/ParserNonXS.pm (_parse_def, _end_line_def_line): put documenscript in extra for elements needing to be translated. * tta/C/api_for_swig/swig_parser_api.c (txi_ext_parser_conf_set_documentscript), tta/swig/texinfo.i (parser_conf_set_documentscript): add. * tta/perl/t/08misc_commands.t (documentscript_argument), tta/perl/Makefile.tres: add @documentscript arguments test. 2026-04-19 Patrice Dumas <pertusus@free.fr> * tta/perl/Texinfo/Convert/Converter.pm (converter_set_documentlanguage), tta/perl/Texinfo/Convert/Text.pm (set_language), tta/perl/Texinfo/Convert/Utils.pm, tta/perl/Texinfo/Translations.pm (_set_lang_info_translation) (set_translations_documentlanguage): move _set_lang_info_translation and set_translations_documentlanguage, have set_translations_documentlanguage return the new current translations, pass translations hashes and current translations in argument. Add converter_set_documentlanguage wrapper and use Text.pm set_language as wrapper. Update callers to call the wrappers. For a more logical separation of code and to be more like C. * tta/perl/Texinfo/Translations.pm (_new_lang_info_translation): rename new_lang_info_translation as _new_lang_info_translation. 2026-04-19 Patrice Dumas <pertusus@free.fr> * tta/C/main/translations.c (set_translations_documentlanguage), tta/perl/Texinfo/Convert/Utils.pm (set_translations_documentlanguage), tta/C/convert/build_html_perl_state.c (set_perl_translations_documentlanguage): rename switch_lang_translations as set_translations_documentlanguage and switch_perl_lang_translations as set_perl_translations_documentlanguage. 2026-04-19 Patrice Dumas <pertusus@free.fr> Merge new documentlanguage with current lang translations * tta/perl/Texinfo/Translations.pm (new_lang_info_translation): split out of new_documentlanguage_translation. * tta/C/main/translations.c (switch_lang_translations), tta/perl/Texinfo/Convert/Utils.pm (switch_lang_translations) (_switch_lang_info_translations): compare lang and region to current_lang_translations. Merge current_lang_translations lang_info with new documentlanguage information. add _set_lang_info_translation in Perl. * tta/C/structuring_transfo/structuring.c (new_complete_node_menu): allow NULL lang_translations. * tta/perl/Texinfo/Common.pm (analyze_documentlanguage_argument): allow undef argument. * tta/C/main/translations.c (set_lang_info_translation): inline and remove new_set_translation. Rename info as lang_info. 2026-04-18 Patrice Dumas <pertusus@free.fr> Add data fields for language scripts and variants * tta/C/convert/build_html_perl_state.c (switch_perl_lang_translations), tta/C/convert/call_html_perl_function.c (call_formatting_function_format_translate_message), tta/C/main/build_perl_info.c (build_lang_info): add build_lang_info. * tta/C/main/translations.c (free_document_lang_info): rename clear_document_lang_info as free_document_lang_info. Update callers. * tta/C/main/translations.c (copy_lang_info, new_copy_translation): add copy_lang_info, based on new_copy_translation. * tta/C/convert/build_html_perl_state.c (switch_perl_lang_translations), tta/C/convert/call_html_perl_function.c (call_formatting_function_format_translate_message), tta/C/convert/convert_html.c (unknown_lang_info), tta/C/convert/html_prepare_converter.c (html_setup_output), tta/C/main/build_perl_info.c (build_lang_info), tta/C/main/get_perl_info.c (get_lang_info_hv), tta/C/main/translations.c (get_lang_info_bcp47_locale) (fill_document_lang_info, free_document_lang_info) (init_lang_translation, new_documentlanguage_translation) (new_set_translation, copy_lang_info, new_copy_translation) (find_lang_translation, set_lang_info_translation) (get_lang_info_translation, switch_lang_translations) (unknown_lang_info), tta/C/main/tree_types.h (DOCUMENT_LANG_INFO), tta/perl/Texinfo/Convert/Converter.pm (current_bcp47_locale), tta/perl/Texinfo/Convert/HTML.pm (_html_cache_translate_string), tta/perl/Texinfo/Convert/HTMLNonXS.pm (_setup_output), tta/perl/Texinfo/Convert/Utils.pm (switch_lang_translations), tta/perl/Texinfo/Translations.pm (get_lang_info_xdg_locale), (get_lang_info_bcp47_locale, fill_document_lang_info) (new_documentlanguage_translation, complete_indices), tta/perl/Texinfo/TranslationsNonXS.pm (cache_translate_string), tta/perl/XSTexinfo/parser_document/TranslationsXS.xs (cache_translate_string): use a hash for lang_info in Perl. Add script and variants to lang info data structures. Add get_lang_info_bcp47_locale in C. Do not set immediately bcp47_locale, set when needed by calling get_lang_info_bcp47_locale. Initialize lang info to 0. Because get_lang_info_bcp47_locale modifies the data, remove const for most LANG_TRANSLATION. Add get_lang_info_hv. Modify get_lang_info_xdg_locale and get_lang_info_bcp47_locale to prepare for having script and variants set in lang info. * tta/C/parsetexi/indices.c: reindent. 2026-04-18 Patrice Dumas <pertusus@free.fr> * tta/maintain/regenerate_documentlanguages-iana.pl: add %documentscript_XPG_script to associated ISO script name to name usable for XPG locales. 2026-04-18 Patrice Dumas <pertusus@free.fr> * tta/data/options_data.txt (documentscript): add documentscript. 2026-04-18 Patrice Dumas <pertusus@free.fr> * tta/C/main/utils.c (join_strings_list): add delimiter argument. Update callers. * tta/C/main/utils.c (analyse_documentscript_argument): add. * tta/C/main/utils.h (TXI_DOCUMENT_SCRIPT): add typedef. 2026-04-18 Patrice Dumas <pertusus@free.fr> * tta/perl/t/init/translate_txiinternalvalue_macro.init: change beginning of function, use exists instead of defined. 2026-04-17 Patrice Dumas <pertusus@free.fr> * tta/C/Makefile.am (C_libtexinfo_sources), tta/maintain/regenerate_documentlanguages-iana.pl: get language variants. 2026-04-17 Patrice Dumas <pertusus@free.fr> * tta/C/main/utils.h (TXI_DOCUMENT_SCRIPT), tta/maintain/regenerate_documentlanguages-iana.pl: add aliases for script names to be able to specify scripts usually part of XPG locale @variant. 2026-04-16 Patrice Dumas <pertusus@free.fr> @documentlanguagevariant and @documentscript in texi2any tree * tta/C/parsetexi/end_line.c (end_line_misc_line), tta/C/parsetexi/handle_commands.c (handle_line_command), tta/perl/Texinfo/ParserNonXS.pm (_end_line_misc_line) (_handle_line_command): handle variadic line command. Use the same condition to remove remaining_args for line commands as for adding it. * tta/C/parsetexi/end_line.c (end_line_misc_line), tta/data/command_data.txt (documentscript, documentlanguagevariant), tta/perl/Texinfo/ParserNonXS.pm (_end_line_misc_line): add @documentlanguagevariant and @documentscript. * tta/perl/t/08misc_commands.t (documentlanguagevariant_arguments), tta/perl/Makefile.tres: add test of @documentlanguagevariant. 2026-04-19 Gavin Smith <gavinsmith0123@gmail.com> * doc/texinfo.tex (\onepageout): Remove call to \turnoffactive directly after \atdummies as \atdummies also calls \turnoffactive. 2026-04-19 Gavin Smith <gavinsmith0123@gmail.com> * info/dir.c (build_dir_node): avoid crash if dir file is malformed or couldn't be loaded. Report from Hilmar Preuße. 2026-04-14 Patrice Dumas <pertusus@free.fr> Use BCP 47 language format in output formats * tta/C/convert/html_prepare_converter.c (html_setup_output), tta/perl/Texinfo/Convert/Converter.pm (current_bcp47_locale), tta/perl/Texinfo/Convert/DocBook.pm (conversion_output_begin) (_convert), tta/perl/Texinfo/Convert/HTMLNonXS.pm (_setup_output), tta/perl/Texinfo/Convert/LaTeX.pm (_informative_command_output) (_latex_header): add current_bcp47_locale to get the BCP 47 language locale in the current_lang_translations. Output BCP 47 language locales for output formats, as output formats use this language specification format. * tta/C/main/convert_utils.h: do not include translations.h in convert_utils.h. Update users. * tta/C/main/translations.c (init_lang_translation): add const. 2026-04-14 Patrice Dumas <pertusus@free.fr> * tta/perl/Texinfo/Convert/DocBook.pm, tta/perl/Texinfo/Convert/HTMLNonXS.pm, tta/perl/Texinfo/Convert/Info.pm, tta/perl/Texinfo/Convert/LaTeX.pm, tta/perl/Texinfo/Convert/Plaintext.pm, tta/perl/Texinfo/Convert/Text.pm, tta/perl/Texinfo/Example/ReadDocBook.pm: remove now unused command line encoding argument in calls to Texinfo::Convert::Utils::switch_lang_translations. * tta/perl/Texinfo/Convert/DocBook.pm: minor changes in code order. 2026-04-12 Patrice Dumas <pertusus@free.fr> add lang information in lang_translation and use bcp47 locale * tta/perl/Texinfo/Common.pm (analyze_documentlanguage_argument): add. * tta/perl/Texinfo/Translations.pm ($lang_translations_cache): rename $lang_translations as $lang_translations_cache. * tta/C/convert/build_html_perl_state.c (switch_perl_lang_translations, build_html_translated_names), tta/C/convert/convert_html.c (html_cache_translate_string), tta/C/main/call_perl_function.c (call_translations_translate_string), tta/C/main/translations.c (translate_string, fill_document_lang_info) (clear_document_lang_info, init_lang_translation) (new_documentlanguage_translation, new_set_translation) (new_copy_translation, free_lang_translation, find_lang_translation) (set_lang_info_translation, get_lang_info_translation) (get_documentlanguage_translation, switch_lang_translations) (cache_translate_string), tta/C/main/tree_types.h (DOCUMENT_LANG_INFO) (LANG_TRANSLATION), tta/C/parsetexi/indices.c (complete_indices), (analyze_documentlanguage_argument), tta/perl/Texinfo/Convert/HTML.pm (_html_cache_translate_string), tta/perl/Texinfo/Convert/Utils.pm (switch_lang_translations), tta/perl/Texinfo/Translations.pm (translate_string, fill_document_lang_info) (new_documentlanguage_translation, complete_indices), tta/perl/Texinfo/TranslationsNonXS.pm (cache_translate_string), tta/perl/XSTexinfo/parser_document/TranslationsXS.xs (cache_translate_string): add lang information with the language, region and bcp47 language locale name to lang_translation. Setup string to use with LANGUAGE environement variable for gettext when creating lang_translation and pass it to translate_string to avoid recomputing it many times. Rename new_lang_translation as new_documentlanguage_translation and get_lang_translation as get_documentlanguage_translation. Use the bcp47 language name to retrieve translations. Remove encoded language as argument and remove get_lang_encoded_lang_translation. * tta/perl/Texinfo/Translations.pm (get_lang_info_xdg_locale) (get_lang_info_bcp47_locale, get_lang_info_language) (get_lang_info_region): add accessors for lang_info. * tta/C/convert/call_html_perl_function.c (call_formatting_function_format_translate_message), tta/C/convert/convert_html.c (format_translate_message) (html_custom_translate_string, html_cache_translate_string): pass lang_info to html_custom_translate_string and format_translate_message. * tta/perl/init/documentation_examples.pm (*_translate_message), tta/perl/t/init/css_in_node_redirection_page.pm (*_translate_message), tta/perl/t/init/special_element_customization.pm (*_translate_message), tta/perl/t/init/translated_strings_customization.pm (*_translate_message), tta/perl/t/init/translation_in_parser_in_translation.pm (*_translate_message): use get_lang_info_xdg_locale to get language from lang_info. * tta/C/main/utils.c (analyze_documentlanguage_argument): allocate region. Update callers. 2026-04-11 Patrice Dumas <pertusus@free.fr> add gnulib bcp47 module * tta: run "gnulib-tool --add-import bcp47". 2026-04-10 Patrice Dumas <pertusus@free.fr> * tta/C/main/utils.c (analyze_documentlanguage_argument), tta/perl/Texinfo/Common.pm (warn_unknown_language): if the documentlanguage is invalid, for instance if not ASCII, or not lower-case language and upper-case region, return NULL/undef for the language code. * tta/perl/Texinfo/ParserNonXS.pm (_end_line_misc_line), tta/C/parsetexi/end_line.c (end_line_misc_line), tta/C/texi2any.c (main), tta/perl/texi2any.pl: do not set documentlanguage if the argument is invalid. 2026-04-10 Patrice Dumas <pertusus@free.fr> * tta/C/Makefile.am (C_libtexinfo_sources), tta/maintain/regenerate_documentlanguages-iana.pl: improve regenerate_documentlanguages-iana.pl to correctly extract language names and region names. Extract scripts names and generate Perl hash, gperf input and gperf generated C code. 2026-04-10 Patrice Dumas <pertusus@free.fr> * tta/tests/coverage/formatting.texi: add something in Top. 2026-04-10 Patrice Dumas <pertusus@free.fr> Add @ifepub and @ifnotepub in texi2any * tta/C/texi2any.c (is_texinfo_output_formats) (format_expanded_formats): add is_texinfo_output_formats. * tta/C/texi2any.c (main): add converted_format_specification for the converted format, and keep format_specification for the main format. * tta/C/texi2any.c (format_expanded_formats), tta/perl/texi2any.pl (_format_expanded_formats): add expanded region for main format (as opposed to converted format). * tta/C/main/parser_conf.h (PARSER_CONF), tta/C/main/utils.c (default_expanded_formats), tta/data/command_data.txt (ifepub) (ifnotepub), tta/perl/Texinfo/Common.pm (%texinfo_output_formats): add ifepub and ifnotepub block @-commands and epub expanded format. * tta/C/texi2any.c (converter_format_expanded_region_name) (IFEPUB_OPT, NO_IFEPUB_OPT, long_options, main), tta/perl/t/test_utils.pl (convert_to_html, test), tta/perl/texi2any.pl (%converter_format_expanded_region_name, makeinfo_help, GetOptions): add epub as expanded format for EPUB output format and corresponding command-line options. * NEWS, doc/texinfo.texi (Conditional Commands, Raw Formatter Commands) (Inline Conditionals, Invoking @command{texi2any}, Command List): document @ifepub, @ifnotepub and associated command-line arguments. * tta/perl/Makefile.tres, tta/perl/t/16raw.t (raw_epub), tta/perl/t/epub_tests.t (epub_conditional, epub_inline_conditional), tta/perl/t/html_tests.t (epub_conditionals): add tests for epub conditionals. 2026-04-09 Gavin Smith <gavinsmith0123@gmail.com> No menu positioning after "Up" to different file * info/session-cmd.c (info_handle_pointer): If going up to a different file, do not try to find the current node in the new node's menu. This led to a bad result when going "Up" to the dir node. Report from Aidan <aidanczhai@gmail.com>. 2026-04-09 Gavin Smith <gavinsmith0123@gmail.com> No crash for repeated visit to "*" node * info/nodes.c (info_get_node_of_file_buffer): If nodename is "*", set replica bit on node so to avoid attempt to free the contents of the node. Report from Aidan <aidanczhai@gmail.com>. 2026-04-09 Gavin Smith <gavinsmith0123@gmail.com> Fix searching dir node * info/scan.c (scan_node_contents): Clear N_Simple flag. As we used info_node_of_tag_fast to build the dir node, the final dir node still had this flag set on it, which led to an infinite recursion in info_search_in_node_internal attempting to retrieve the dir node without the N_Simple flag set. * info/session-cmd.c (info_search_internal): Avoid attempting to load other nodes when searching in the dir node (or other nodes flagged as internal). Report from Aidan <aidanczhai@gmail.com>. 2026-04-08 Gavin Smith <gavinsmith0123@gmail.com> Fix dir node for hide-note-references=On * info/nodes.c (info_get_node_tag_of_file_buffer): New function, returning pointer into tags table. (info_get_node_of_file_buffer): Use it. * info/dir.c (build_dir_node): Use info_get_node_tag_of_file_buffer along with info_node_of_tag_fast to load dir nodes without scanning their contents. Only call scan_node_contents once, on the composite dir node. When hide-note-references was On, the dir node was completely broken due to parts of it being processed by scan_node_contents multiple times. Report from Aidan <aidanczhai@gmail.com>. 2026-04-08 Patrice Dumas <pertusus@free.fr> * tta/C/main/translations.c (translate_string), tta/perl/Texinfo/Translations.pm (translate_string): only get the main language, do not try to match the region code at all, such that bogus region codes do not prevent matching the main language, in case gettext does not do it already. * tta/perl/t/test_utils.pl (test): pass COMMAND_LINE_ENCODING to convert_to_text. * tta/perl/Makefile.tres, tta/perl/t/languages.t (invalid_documentlanguage, documentlanguage_selection_accented_region) (documentlanguage_selection_region_unicode): add more tests of invalid documentlanguage. Check if the main language is selected with a bogus region code. 2026-04-08 Gavin Smith <gavinsmith0123@gmail.com> * info/session-cmd.c (info_move_to_next_xref, info_move_to_prev_xref): If cursor-movement-scrolls=On and scroll-behaviour="Page Only", issue an error message when there is no later (resp. earlier) cross-reference to move to. Suggestion from Aidan <aidanczhai@gmail.com>. 2026-04-07 Gavin Smith <gavinsmith0123@gmail.com> * info/dir.c (build_dir_node): Add blank line at end of list of used dir nodes. Report from Aidan <aidanczhai@gmail.com>. 2026-04-06 Patrice Dumas <pertusus@free.fr> * README-hacking: information on testing ffmpeg HTML customization init file. 2026-04-06 Patrice Dumas <pertusus@free.fr> * tta/C/structuring_transfo/transformations.c (new_node): add missing NUL at end of string in place of white spaces. * tta/perl/Texinfo/ManipulateTree.pm (modify_tree): if the returned content is an empty string, remove the tree contents if it becomes empty. * tta/perl/Texinfo/Transformations.pm (_reference_to_arg): rename $result as $new. Always return a list if the element is an @*ref element. * tta/C/structuring_transfo/transformations.c (reference_to_arg_internal), tta/perl/Texinfo/Transformations.pm (_reference_to_arg): put new element in returned elements list only if there is a non-empty argument for the @*ref command. * tta/perl/Makefile.tres, tta/perl/t/transformations.t (test_new_node_empty_ref): test adding nodes with empty @ref to test reference_to_arg_in_tree with empty @ref, and the result in _new_node. 2026-04-06 Patrice Dumas <pertusus@free.fr> * tta/perl/t/transformations.t (insert_nodes_for_sectioning_commands): sync with tta/perl/t/z_misc/automatic_nodes.t $sections_text. 2026-04-06 Patrice Dumas <pertusus@free.fr> * tta/perl/Texinfo/Convert/Plaintext.pm (node_name), tta/perl/Texinfo/Transformations.pm (_protect_first_parenthesis_in_targets): simplify conditions on Texinfo::Common::get_label_element returned element. 2026-04-06 Patrice Dumas <pertusus@free.fr> * tta/perl/Texinfo/Transformations.pm, tta/perl/Texinfo/TransformationsNonXS.pm (_new_node): move _new_node to TransformationsNonXS.pm. 2026-04-06 Patrice Dumas <pertusus@free.fr> * tta/perl/t/z_misc/automatic_nodes.t: remove test_new_node and associated tests, that are now equivalently done in the t/transformations.t various_added_nodes_and_refs test. 2026-04-06 Patrice Dumas <pertusus@free.fr> * tta/perl/Makefile.tres, tta/perl/t/transformations.t (various_added_nodes_and_refs): add test of node additions with insert_nodes_for_sectioning_commands tree transformation corresponding to tests of _new_node in tta/perl/t/z_misc/automatic_nodes.t. * tta/perl/Texinfo/Transformations.pm (_reference_to_arg): undef contents of removed tree elements to remove more references. 2026-04-06 Patrice Dumas <pertusus@free.fr> * tta/C/structuring_transfo/transformations.c (move_selected_element_index_entries_after_items), tta/perl/Texinfo/ManipulateTreeNonXS.pm (_move_selected_element_index_entries_after_items): remove condition on @subentry, which is not relevant now that subentries are in index commands in the tree. * tta/C/parsetexi/handle_commands.c (handle_line_command), tta/perl/Texinfo/ParserNonXS.pm (_handle_line_command): rename internal variable to avoid reusing the name of an external variable for a more readable code. 2026-04-06 Patrice Dumas <pertusus@free.fr> * tta/perl/Makefile.tres, tta/perl/t/transformations.t (index_entry_before_item_with_subentry): test index entry with @subentry before @item with with move_index_entries_after_items. 2026-04-06 Patrice Dumas <pertusus@free.fr> * tta/tests/formatting/indices_in_begin_tables_lists.texi: add index command and comments or something else in @itemize in @example. 2026-04-03 Gavin Smith <gavinsmith0123@gmail.com> gnulib update * tta: run "gnulib-tool --add-import". * .gitignore: update 2026-04-03 Gavin Smith <gavinsmith0123@gmail.com> gnulib update * (top-level): run "gnulib-tool --add-import". 2026-04-03 Gavin Smith <gavinsmith0123@gmail.com> * tta: run "gnulib-tool --add-import unictype/property-unified-ideograph uninorm/nfd uninorm/u32-normalize unistr/u8-to-u32" in preparation for testing collation code. 2026-04-03 Gavin Smith <gavinsmith0123@gmail.com> * tta: replace gnulib module uchar (old name) with uchar-h. 2026-04-02 Gavin Smith <gavinsmith0123@gmail.com> Remove misleading messages for move-to-next/prev-xref. * info/session-cmd.c (forward_move_node_structure, backward_move_node_structure) [scroll-behaviour=Page Only]: Do not print message saying we are already on the last (or first) page of a node. This may not be true if called via move-to-next-xref (or move-to-prev-xref). (point_next_line, point_prev_line, _scroll_backward, _scroll_forward): Reinstate the removed messages for cursor movement and scrolling commands where they would be accurate. 2026-04-02 Gavin Smith <gavinsmith0123@gmail.com> Fix M-Tab with "info -v scroll-behaviour=Page\ Only" * info/session-cmd.c (info_move_to_prev_xref): Move misplaced ) in order to correctly pass value of info_scroll_behaviour to backward_move_node_structure. M-Tab would move to a previous node with scroll-behavior=Page Only and cursor-movement-scrolls=On, which was incorrect. Report from Aidan <aidanczhai@gmail.com>. 2026-04-02 Gavin Smith <gavinsmith0123@gmail.com> * info/variables.c (variable_long_description_string): Handle alias variable specially, in part to avoid printing null pointer. 2026-04-02 Gavin Smith <gavinsmith0123@gmail.com> Implement scroll-behavior/scroll-behaviour alias differently * info/variables.c (ALIAS_VAR, alias_var): New macro and dummy variable for declaring an alias of a variable. (info_variables) <"scroll-behavior">: Use it. (variable_by_name): Check if variable is an alias and if so resolve the alias. This is to avoid using separate 'where_set' fields for the two equivalent names of the variable, which could lead to inconsistency, including in the help buffer. 2026-04-02 Gavin Smith <gavinsmith0123@gmail.com> * info/variables.c (set_variable_to_value): For variables with a list of possible choices, if requested value is not in that list, do not update 'where_set' field and return 0. This has the effect of printing an error message if an incorrect value is used in an infokey file, which wasn't done before with this version of the code. 2026-04-02 Gavin Smith <gavinsmith0123@gmail.com> * doc/info-stnd.texi (Selecting Xrefs): Remove text "in this node" from description of move-to-next-xref and move-to-prev-xref as this is incorrect. Report from Aidan <aidanczhai@gmail.com>. 2026-04-02 Gavin Smith <gavinsmith0123@gmail.com> * doc/info-stnd.texi (Cursor Commands): Add a note mentioning that some of these commands are governed by the "cursor-movement-scrolls" variable. 2026-04-02 Gavin Smith <gavinsmith0123@gmail.com> * doc/info-stnd.texi (Xref Commands): Move chapter before "Searching Commands" and "Index Commands". 2026-04-01 Patrice Dumas <pertusus@free.fr> Update po files 2026-04-01 Patrice Dumas <pertusus@free.fr> * po/POTFILES.in: add XS interface files with translated strings. * Makefile.am (po-check, po_document-check): match .xs files. 2026-04-01 Patrice Dumas <pertusus@free.fr> Update po files 2026-04-01 Patrice Dumas <pertusus@free.fr> * configure.ac (AC_CONFIG_FILES): remove removed doc/refcard/Makefile. 2026-04-01 Patrice Dumas <pertusus@free.fr> * NEWS, configure.ac, tta/configure.ac: remove --enable-refcounts-checks, --enable-perl-api-texi-build and --enable-pod-simple-texinfo-tests configure flags, keeping the automatic detection only. 2026-04-01 Patrice Dumas <pertusus@free.fr> * po/POTFILES.in, po_document/POTFILES.in: update. * Makefile.am (po-check, po_document-check): update. 2026-04-01 Patrice Dumas <pertusus@free.fr> * TODO: update, item on translations, SWIG information when relevant, update non implemented manuals installation support to hint that it is not really rejected, but one possibility among others. 2026-04-01 Bruno Haible <bruno@clisp.org> * INSTALL: edit description of --enable-xs-perl-libintl. 2026-04-01 Gavin Smith <gavinsmith0123@gmail.com> * TODO: remove done items 2026-04-01 Gavin Smith <gavinsmith0123@gmail.com> No -c DUMP_TREE=1 * tta/perl/texi2any.pl, * tta/C/texi2any.c (main): Do not accept "1" as synonym for "-". * doc/texinfo.texi, TODO: update 2026-04-01 Gavin Smith <gavinsmith0123@gmail.com> * README-hacking: update for refcard removal. 2026-04-01 Gavin Smith <gavinsmith0123@gmail.com> * doc/refcard/txicmdcheck, doc/txicmdcheck, * doc/refcard/txivarcheck, doc/txivarcheck: Move to doc/. * doc/refcard: remove subdirectory. 2026-04-01 Gavin Smith <gavinsmith0123@gmail.com> Remove refcard * doc/refcard/txicmdcheck, doc/refcard/txivarcheck: check texi2any and manual only. * doc/refcard/txirefcard.tex: deleted 2026-04-01 Gavin Smith <gavinsmith0123@gmail.com> * TODO: remove done item 2026-04-01 Gavin Smith <gavinsmith0123@gmail.com> * NEWS, * doc/texinfo.texi (Click Sequences, Macro Details, Command List) (Obsolete @-Commands): Document @clickstyle removal. 2026-04-01 Gavin Smith <gavinsmith0123@gmail.com> Test updates for removal of @clickstyle * tta/perl/t/08misc_commands.t (clickstyle, clickstyle_no_end_of_line, invalid_clickstyle) (clickstyle_and_comments): remove. 2026-04-01 Gavin Smith <gavinsmith0123@gmail.com> Test updates for removal of @clickstyle * tta/perl/t/50value.t (value_in_misc_commands), * tta/perl/t/60value.t (macro_in_misc_commands), * tta/perl/t/html_tests.t, * tta/perl/t/xml_tests.t (commands_and_spaces): Remove use of @clickstyle. 2026-04-01 Gavin Smith <gavinsmith0123@gmail.com> Test updates for removal of @clickstyle * tta/tests/coverage_macro.texi: remove use of @clickstyle. 2026-04-01 Gavin Smith <gavinsmith0123@gmail.com> Remove @clickstyle * tta/data/command_data.txt, * tta/C/parsetexi/handle_commands.c (parse_rawline_command), * tta/perl/Texinfo/ParserNonXS.pm (_parse_rawline_command), * tta/perl/Texinfo/Example/TexinfoMarkup.pm (_convert): Remove @clickstyle as a Texinfo command. 2026-04-01 Gavin Smith <gavinsmith0123@gmail.com> * TODO: remove done item 2026-03-31 Gavin Smith <gavinsmith0123@gmail.com> * doc/texinfo.tex (\indexwritesortas): Remove useless change of catcode around definition. 2026-03-31 Gavin Smith <gavinsmith0123@gmail.com> * doc/texinfo.tex (\dummybox): Move definition in file. 2026-03-31 Gavin Smith <gavinsmith0123@gmail.com> Fix "Missing character" messages in log file * doc/texinfo.tex (\extractindexcommands, \checksortas, \checkseealso, \checkseeentry): New. Use TeX macros to check if @sortas, @seeentry and @seealso occur in the text of an index entry. (\doindexsegment): Replace implementation of the @sortas, @seeentry and @seealso commands with call to \extractindexcommands. The problem with the old way was that we typeset the index text inside a dummy box, which could lead to many error messages about missing glyphs being output in the log file. Report from Jamenson Espindula. 2026-03-30 Patrice Dumas <pertusus@free.fr> * tta/C/convert/convert_html.c, tta/C/main/convert_to_text.c, tta/C/main/convert_utils.c, tta/C/main/converter_types.h (CONVERTER), tta/C/main/translations.c (find_lang_translation) (store_new_lang_translation, get_lang_translation) (get_lang_encoded_lang_translation, switch_lang_translations) (cache_translate_string, gdt_string, gdt_tree, pgdt_tree), tta/C/parsetexi/indices.c, tta/C/structuring_transfo/structuring.c, tta/perl/XSTexinfo/parser_document/TranslationsXS.xs (cache_translate_string): add const for LANG_TRANSLATION passed around. * tta/C/main/translations.c (substitute_substrings_in_tree) (substitute_element_array): const for replaced_substrings. 2026-03-30 Patrice Dumas <pertusus@free.fr> * tta/perl/Texinfo/Convert/LaTeX.pm (%LaTeX_environment_commands) (_convert): use Texinfoindented environment for @indentedblock and @def item. * tta/perl/t/converters_tests.t (table_in_display_in_example) (table_in_example_in_display): add some text for easier visualization. 2026-03-30 Patrice Dumas <pertusus@free.fr> * tta/tests/coverage_macro.texi: remove empty line in @displaymath to avoid invalid LaTeX. 2026-03-30 Patrice Dumas <pertusus@free.fr> * tta/perl/Texinfo/Convert/DocBook.pm (_convert): use blockquote for @indentedblock and @smallindentedblock. Report from Per Bothner in 2014. * tta/tests/coverage_macro.texi: add @indentedblock and @smallindentedblock. 2026-03-30 Patrice Dumas <pertusus@free.fr> * tta/perl/Texinfo/Convert/LaTeX.pm (_stop_embrac, _convert_def_line) (_convert): simplify code related to embrac context stack. 2026-03-30 Noé Lopez <noelopez@free.fr> (tiny change) * util/htmlxref.d/Texinfo_GNU.cnf: Update URLs for Guix and Shepherd. 2026-03-29 Patrice Dumas <pertusus@free.fr> * tta/perl/Texinfo/Convert/Utils.pm (output_files_rename_opened): add. * tta/perl/Texinfo/Convert/Info.pm (output): call Texinfo::Convert::Utils::output_files_rename_opened instead of setting an unused array. 2026-03-29 Patrice Dumas <pertusus@free.fr> * tta/perl/Texinfo/Convert/LaTeX.pm (_tree_anchor_label): get an element in argument. * tta/perl/Texinfo/Convert/LaTeX.pm: use Texinfo::Common::empty_spaces_argument to determine if arguments are empty. Use elements instead of contents when relevant. Use exists or defined when the value is not used. 2026-03-29 Patrice Dumas <pertusus@free.fr> * tta/perl/Texinfo/Convert/Plaintext.pm (_convert): do not output anything for @itemx in @itemize or @enumerate in @table. 2026-03-29 Patrice Dumas <pertusus@free.fr> * tta/perl/XSTexinfo/convert/get_html_perl_info.c (html_converter_get_customization_sv): initialize direction_node_name->direction_nr to 0. * tta/C/convert/html_prepare_converter.c (html_set_global_direction) (html_set_main_units_direction_names) (html_prepare_output_units_global_targets), tta/perl/Texinfo/Convert/HTML.pm (converter_initialize), tta/perl/Texinfo/Convert/HTMLNonXS.pm (set_global_direction): warn if a customized global direction is set on a relative direction. * tta/C/convert/html_prepare_converter.c (html_prepare_output_units_global_targets): more explicit fatal message. * tta/perl/t/init/set_global_direction_for_relative.pm: also test calling set_global_direction on a relative direction. * tta/perl/Makefile.tres, tta/perl/t/init_files_tests.t (set_global_direction_for_relative_direction): enable test. 2026-03-28 Patrice Dumas <pertusus@free.fr> * ta/maintain/generate_code_convert_data.pl (@ordered_text_directions) (%ordered_text_global_directions_hash, %direction_orders) (@orders_order, @ordered_directions): separate text directions from global units directions. * tta/maintain/generate_code_convert_data.pl, tta/C/convert/format_html.c, tta/C/convert/html_prepare_converter.c: generate DEFAULT_GLOBAL_DIRECTION_LAST_IDX and DEFAULT_TEXT_DIRECTION_LAST_IDX and use instead of D_Last and D_direction_This. * tta/C/convert/html_prepare_converter.c (html_prepare_output_units_global_targets), tta/perl/Texinfo/Convert/HTMLNonXS.pm (_prepare_output_units_global_targets): show default text directions in debugging code. * tta/perl/Texinfo/Convert/HTML.pm (@text_directions_order) (converter_initialize): set @text_directions_order based on automatically generated directions and use it to set default text directions in converter_initialize. 2026-03-28 Patrice Dumas <pertusus@free.fr> * tta/perl/Texinfo/Convert/DocBook.pm (_convert): determine $part if not already determined. 2026-03-28 Patrice Dumas <pertusus@free.fr> * tta/C/main/document.c (setup_texinfo_main), tta/C/main/translations.c (set_output_strings_translate_method) (setup_output_strings_translations): split set_output_strings_translate_method out of setup_output_strings_translations. Call it in setup_texinfo_main, as it sets use_external_translate_string, which should always be set, even if C functions are not used for translation of output strings. * tta/C/convert/texinfo.c (txi_general_output_strings_setup), tta/perl/XSTexinfo/parser_document/TranslationsXS.xs (setup_output_strings): update for change in setup_output_strings_translations. Update callers. 2026-03-28 Patrice Dumas <pertusus@free.fr> * tta/C/structuring_transfo/structuring.c (check_node_tree_menu_structure), tta/perl/Texinfo/StructuringNonXS.pm (check_node_tree_menu_structure): remove a condition on node associated to node menu relation being set, as if there is a number, the relation exists. * tta/perl/Makefile.tres, tta/perl/t/10menu.t (menu_pointing_to_anchor_nodes): add test of anchor and namedanchor nodes in menu, with another node with a sectioning command too, such that the menu structure is checked (with CHECK_NORMAL_MENU_STRUCTURE). 2026-03-28 Patrice Dumas <pertusus@free.fr> * tta/perl/Texinfo/Translations.pm (BEGIN): do not load XS module for translations if Perl is older than 5.38.0 as before Perl 5.38.0 getenv/setenv and similar cannot be reliably used in XS. * tta/configure.ac: remove setting HAVE_USABLE_GETENV_IN_XS, unused. 2026-03-27 Patrice Dumas <pertusus@free.fr> * tta/perl/Texinfo/TranslationsNonXS.pm (setup_output_strings), tta/perl/XSTexinfo/parser_document/TranslationsXS.xs (setup_output_strings): rename configure as setup_output_strings. Update callers. * tta/C/main/translations.c (setup_output_strings_translations): rename configure_output_strings_translations as setup_output_strings_translations. Update callers. 2026-03-27 Patrice Dumas <pertusus@free.fr> XS interface for Texinfo::Translations configure * tta/perl/Texinfo/DocumentNonXS.pm, tta/perl/Texinfo/Translations.pm, tta/perl/Texinfo/TranslationsNonXS.pm (configure), tta/perl/XSTexinfo/parser_document/DocumentXS.xs, tta/perl/XSTexinfo/parser_document/TranslationsXS.xs (configure): add an XS interface for Texinfo::Translations configure. Remove configure_output_strings_translations from Perl code and from Document XS interface. 2026-03-27 Patrice Dumas <pertusus@free.fr> XS interface for Texinfo::Translations for cache_translate_string * tta/configure.ac (use_libintl_perl_in_xs), tta/perl/Makefile.am (ModulePath.pm), tta/perl/Texinfo/ModulePath.pm.in ($use_libintl_perl_in_xs): pass use_libintl_perl_in_xs to Perl. * tta/C/main/translations.c (find_lang_translation) (get_lang_translation, store_new_lang_translation) (get_lang_encoded_lang_translation): split find_lang_translation and store_new_lang_translation out of get_lang_translation. Add get_lang_encoded_lang_translation that is very similar to get_lang_translation, but directly uses encoded lang instead of determining it. * tta/perl/Texinfo/Translations.pm (BEGIN), tta/perl/XSTexinfo/Makefile.am (xs_LTLIBRARIES, TranslationsXS*), tta/perl/Makefile.am (dist_modules_DATA), tta/perl/Texinfo/TranslationsNonXS.pm (cache_translate_string), tta/perl/XSTexinfo/parser_document/TranslationsXS.xs (cache_translate_string): add an XS interface for Texinfo::Translations cache_translate_string. 2026-03-27 Patrice Dumas <pertusus@free.fr> * tta/perl/t/z_misc/do_master_menu.t: setup the lang_translation by calling new_lang_translation. 2026-03-26 Patrice Dumas <pertusus@free.fr> * doc/texi2any_api.texi (Tree Elements and Document Structure) (Heading Commands Formatting): describe relevant functions in "Tree Elements and Document Structure" not in the appendix. Improve references to this node. * tta/perl/Texinfo/Convert/DocBook.pm (%docbook_level_section) (%docbook_sections, _docbook_section_element): split %docbook_level_section out of %docbook_sections for the map of section levels, for a more readable code. * tta/perl/t/z_misc/no_structure_test.t: add raisesctions to the test Texinfo code. 2026-03-26 Patrice Dumas <pertusus@free.fr> * doc/texi2any_api.texi (Simple Formatting Customization) (Internationalization of Output Strings): rename "Simple formatting customization" as "Simple Formatting Customization" and "Internationalization of Strings Function" as "Internationalization of Output Strings". * doc/texi2any_api.texi (Accent Commands with Arguments Formatting): add. * doc/texi2any_api.texi: remove cross-references to modules documentation that are not needed for the described tasks. Copy the function or data descriptions instead of having a cross reference, as the corresponding text is small and requiring to go to another document to get the information is distracting. Improve Pod documentation of output strings translation language switching. 2026-03-23 Patrice Dumas <pertusus@free.fr> * tta/C/main/utils.h (ARG_INDICES), tta/C/main/utils.c (non_leading_trailing_indices): add the ARG_INDICES struct to hold the first and last indices of non trailing non leading contents. Use it in non_leading_trailing_indices. Update callers. 2026-03-22 Gavin Smith <gavinsmith0123@gmail.com> Always build info/makedoc when cross-compiling * Makefile.am (SUBDIRS) [TOOLS_ONLY]: Always include "info" subdirectory to allow "makedoc" program to be built on "build" system when cross-compiling, even if terminal library is not found on "build". * info/Makefile.am (bin_PROGRAMS): Use HAVE_TERMLIBS conditional to only include "ginfo" if terminal library is found. Use TOOLS_ONLY not to built "ginfo" if building tools for cross-compiling. (LDADD, ginfo_LDADD): Only use $(TERMLIBS) in ginfo_LDADD. Report and investigation by Manuel Jacob, 2026-03-23 Patrice Dumas <pertusus@free.fr> * tta/C/convert/convert_html.c (html_convert_tree_append), tta/perl/Texinfo/Convert/HTML.pm (_convert): different message for ignored text type and other ignored types and commands. 2026-03-23 Patrice Dumas <pertusus@free.fr> * tta/C/convert/html_prepare_converter.c (html_converter_customize): set ignored types for css conversion too. This is not needed when called from Perl XS, but necessary for ctexi2any. 2026-03-23 Patrice Dumas <pertusus@free.fr> * tta/C/parsetexi/macro.c (expand_macro_body), tta/perl/Texinfo/ParserNonXS.pm (_expand_macro_body): simplify conditions, taking into account that macro call arguments can only contain text elements. 2026-03-23 Patrice Dumas <pertusus@free.fr> * tta/C/parsetexi/handle_commands.c (handle_line_command), tta/perl/Texinfo/ParserNonXS.pm (_handle_line_command): use spaces_before_argument for an empty lineraw line. * tta/perl/Texinfo/Common.pm (non_leading_trailing_indices): verify that end_idx is not negative. This could happen if there are only spaces_after_argument. * tta/perl/Texinfo/ParserNonXS.pm (_expand_macro_body): use a tree element in input for macro arguments. 2026-03-23 Patrice Dumas <pertusus@free.fr> * tta/C/main/element_types.txt, tta/C/parsetexi/parser.c (process_remaining_on_line), tta/perl/Texinfo/ParserNonXS.pm (%trailing_space_types, _process_remaining_on_line): use spaces_after_argument for ignored spaces before @subentry. Remove ignorable_spaces_before_command type everywhere. * tta/C/parsetexi/parser.c (isolate_leading_trailing), tta/perl/Texinfo/ParserNonXS.pm (_isolate_leading_trailing): add a debugging statement. 2026-03-23 Patrice Dumas <pertusus@free.fr> * tta/perl/Texinfo/ParserNonXS.pm (_is_container_empty): do not check info value, and avoid checking contents for text elements, with same code as in C. 2026-03-23 Patrice Dumas <pertusus@free.fr> * tta/C/parsetexi/close.c (remove_empty_content), tta/perl/Texinfo/ParserNonXS.pm (_remove_empty_content): remove the empty element, which could theoretically be before comments and trailing spaces. 2026-03-23 Patrice Dumas <pertusus@free.fr> * tta/C/parsetexi/close.c (close_container), tta/perl/Texinfo/ParserNonXS.pm (_close_container): remove check that was needed when there were args in tree. Reorganize code to be easier to read. 2026-03-22 Patrice Dumas <pertusus@free.fr> * tta/perl/Texinfo/Example/TexinfoMarkup.pm (_convert): inline and remove _arg_leading_spaces_arg and simplify attribute setting of endspaces. 2026-03-22 Patrice Dumas <pertusus@free.fr> * tta/C/main/element_types.awk, tta/C/main/element_types.txt, tta/C/main/tree_types.h (enum elt_info_type), tta/C/main/tree.c (elt_info_names), tta/C/parsetexi/parser.c (do_abort_empty_line) (merge_text), tta/perl/Texinfo/ParserNonXS.pm (%leading_space_types) (_merge_text, _abort_empty_line): remove internal_spaces_after_command, now unused. Remove spaces_before and spaces_after flags too, as they are not generated anymore. Remove spaces_before_argument, spaces_after_argument and comment_at_end names and enums. Remove move_last_space_to_element, not called anymore. * tta/C/structuring_transfo/structuring.c (new_block_command), tta/C/structuring_transfo/transformations.c (correct_level) (fill_gaps_in_sectioning_in_document, new_node), tta/perl/Texinfo/ManipulateTree.pm (_print_tree_elements_ref) (tree_remove_parents, _element_remove_references, @elt_info_names), tta/perl/Texinfo/Structuring.pm (new_block_command), tta/perl/Texinfo/Transformations.pm (_new_node), tta/perl/Texinfo/TransformationsNonXS.pm (_correct_level) (fill_gaps_in_sectioning_in_document): do not generate spaces_before_argument, spaces_after_argument nor comment_at_end in info additional information, directly in the tree. Update to match the new tree structure. * tta/C/main/convert_to_texinfo.c (convert_to_texinfo_internal), tta/C/main/convert_utils.c (get_comment_or_end_line), tta/perl/Texinfo/Convert/Converter.pm (comment_or_end_line), tta/perl/Texinfo/Convert/DocBook.pm (_format_comment), tta/perl/Texinfo/Convert/Texinfo.pm (_convert_to_texinfo), tta/perl/Texinfo/DebugTree.pm, tta/perl/Texinfo/Example/TexinfoMarkup.pm: remove use of spaces_before_argument, spaces_after_argument and comment_at_end in info additional information. * tta/perl/t/z_misc/01use.t: update for the new tree structure. 2026-03-22 Patrice Dumas <pertusus@free.fr> * tta/C/main/element_types.txt, tta/perl/Texinfo/ParserNonXS.pm (%leading_space_types): remove internal_spaces_before_context_argument, which is not set anymore, and remove all conditions with this type. 2026-03-22 Patrice Dumas <pertusus@free.fr> Put lineraw line commands leading and trailing directly in tree * tta/C/parsetexi/handle_commands.c (raw_line_command_arg_spaces) (handle_line_command, add_comment_at_end), tta/perl/Texinfo/ParserNonXS.pm (_raw_line_command_arg_spaces) (_add_comment_at_end, _handle_line_command): put lineraw line commands leading and trailing spaces, and comments directly in tree, not in info elements. Remove raw_line_command_arg_spaces second argument, since it is not used anymore. * tta/perl/Texinfo/Convert/DocBook.pm (_format_comment), tta/perl/Texinfo/Convert/LaTeX.pm (_convert), tta/perl/Texinfo/Example/TexinfoMarkup.pm (_format_comment, _convert), tta/perl/t/init/ignore_and_comments_output.init: adapt for change in tree. 2026-03-22 Patrice Dumas <pertusus@free.fr> Put context brace commands leading spaces directly in tree * tta/C/main/element_types.txt (spaces_before_argument), tta/C/parsetexi/separator.c (handle_open_brace), tta/perl/Texinfo/ParserNonXS.pm (%leading_space_types) (_handle_open_brace): use spaces_before_argument instead of internal_spaces_before_context_argument at context brace command opening such that it stays as is in the tree and is not collected in info. * tta/C/convert/format_html.c (html_convert_float_command) (html_convert_listoffloats_command), tta/C/main/floats.c (print_caption_shortcaption), tta/perl/Texinfo/Convert/HTML.pm (_convert_listoffloats_command, _convert_float_command), tta/perl/Texinfo/Convert/LaTeX.pm (_convert), tta/perl/Texinfo/Convert/Plaintext.pm (_convert), tta/perl/Texinfo/ManipulateTree.pm (_print_caption_shortcaption): update for change in tree, and also to cope with bogus @caption without brace at all. * tta/perl/t/27float.t (no_brace_caption), tta/perl/Makefile.tres: caption without brace in float with listoffloats. 2026-03-22 Patrice Dumas <pertusus@free.fr> * tta/C/main/element_types.txt, tta/perl/Texinfo/ParserNonXS.pm (%leading_space_types): remove internal_spaces_before_argument as it is not set anywhere anymore. Remove in test in all the using codes. 2026-03-22 Patrice Dumas <pertusus@free.fr> Put macro expansion element leading spaces directly in tree * tta/C/parsetexi/close.c (remove_empty_content), tta/perl/Texinfo/ParserNonXS.pm (_remove_empty_content): remove empty elements starting from the end, avoiding empty spaces. * tta/C/parsetexi/macro.c (expand_macro_arguments) (expand_linemacro_arguments, expand_macro_body), tta/perl/Texinfo/ParserNonXS.pm (_expand_macro_arguments) (_expand_linemacro_arguments, _expand_macro_body): put leading spaces directly in argument elements, and call isolate_leading_trailing in expand_macro_body. Avoid leading and trailing spaces when gathering formal arguments. 2026-03-21 Patrice Dumas <pertusus@free.fr> Put leading and trailing spaces directly in tree for block and line non raw * tta/C/parsetexi/separator.c (handle_close_brace): remove spurious backslash in string. * tta/C/main/utils.c (informative_command_value), tta/perl/Texinfo/Common.pm (informative_command_value): do not handle rawline @-command with more than one argument, as it is only the case for @set, which is not an informative command associated to a customization variable. More const. * tta/C/main/manipulate_tree.c (parse_node_manual): set node_content in result only if not empty. * tta/C/parsetexi/parser.c (isolate_leading_spaces_element), tta/perl/Texinfo/ParserNonXS.pm (_isolate_leading_spaces_element): rebase remaining source marks. Always set the type. Consider that spaces are ascii. Rename leading_spaces as spaces_len. * tta/C/main/utils.c (simple_arg_text, empty_text), tta/perl/Texinfo/Common.pm (simple_arg_text): ignore comments. Return TEXT instead of string in C and update callers. * tta/C/parsetexi/parser.c (text_contents_to_plain_text), tta/perl/Texinfo/ParserNonXS.pm (_text_contents_to_plain_text): ignore comments. * tta/perl/Texinfo/Common.pm (non_leading_trailing_tree): remove optional arguments. * tta/perl/Texinfo/Common.pm (non_trailing_tree), tta/perl/Texinfo/Convert/Converter.pm (comment_end_line_end_space): add. * tta/C/main/convert_to_texinfo.c (convert_contents_to_texinfo), tta/C/main/structure_list.c: use non_leading_trailing_indices to determine the slice to convert. Update callers as the function can now return NULL if the argument is empty. * tta/C/main/manipulate_tree.c, tta/C/main/utils.c (non_leading_trailing_indices): move non_leading_trailing_indices to utils.c. * tta/perl/Texinfo/Common.pm (non_leading_trailing_indices): rename _non_leading_trailing_indices as non_leading_trailing_indices. * tta/C/parsetexi/def.c (split_def_args), tta/C/structuring_transfo/transformations.c (protect_first_parenthesis), tta/perl/Texinfo/ManipulateTree.pm (protect_first_parenthesis), tta/perl/Texinfo/ParserNonXS.pm (_split_element_delimiters): catch all types of text elements and spaces_before_argument. * tta/perl/Texinfo/ParserNonXS.pm (_parse_def): move code around to be more similar to C implementation. * tta/C/parsetexi/def.c (parse_def), tta/C/parsetexi/end_line.c (parse_line_command_args, end_line_starting_block) (end_line_misc_line), tta/C/parsetexi/labels.c (check_register_target_element_label), tta/C/parsetexi/parser.c (parent_of_command_as_argument, process_remaining_on_line), tta/C/parsetexi/separator.c (handle_close_brace, handle_comma), tta/perl/Texinfo/ParserNonXS.pm (_parse_def, _end_line_misc_line) (_end_line_starting_block, _check_register_target_element_label) (_parent_of_command_as_argument, _handle_line_command) (_handle_close_brace, _handle_comma, _process_remaining_on_line): put leading and trailing spaces and comments directly in tree by isolate_leading_trailing instead of isolate_last_space, having effect on all block command lines and most line commands arguments, except for raw line commands. Remove isolate_last_space. * tta/C/parsetexi/handle_commands.c (handle_other_command), tta/C/parsetexi/parser.c, tta/perl/Texinfo/ParserNonXS.pm (_handle_other_command): inline start_empty_line_after_command as now there is only one case that remains and remove start_empty_line_after_command. * tta/perl/Texinfo/Convert/Texinfo.pm (convert_contents_to_texinfo): add. * tta/C/main/convert_utils.c (get_comment_or_end_line), tta/C/main/manipulate_tree.c (copy_contents), tta/C/main/utils.c (block_line_argument_command, multitable_columnfractions) (informative_command_value, enumerate_item_representation), tta/perl/Texinfo/Common.pm (multitable_columnfractions) (block_line_argument_command, informative_command_value) (enumerate_item_representation), tta/perl/Texinfo/Convert/Converter.pm (comment_or_end_line, table_item_content_tree), tta/perl/Texinfo/Convert/Texinfo.pm (target_element_to_texi_label) (check_node_same_texinfo_code), tta/perl/Texinfo/ManipulateTree.pm (copy_contents, _print_root_command, print_element_base), tta/perl/Texinfo/OutputUnits.pm (_output_unit_name_string), tta/perl/Texinfo/StructuringNonXS.pm (_print_line_command) (_print_root_command, _print_menu_node, print_headings_list) (print_nodes_list): update for changes in tree. * tta/C/main/convert_to_texinfo.c (link_element_to_texi): call convert_to_texinfo instead of convert_contents_to_texinfo as there is no need to convert contents only, and to always return a string. * tta/C/main/convert_utils.c: comment out item_itemize_prepended as it is unused. * tta/C/convert/format_html.c (html_internal_command_tree) (html_convert_enumerate_command, html_convert_item_command) (html_open_quotation_command), tta/C/main/convert_utils.c (itemize_line_prepended_element), tta/C/structuring_transfo/transformations.c (protect_hashchar_at_line_beginning_internal), tta/perl/Texinfo/Convert/Converter.pm (sort_element_counts), tta/perl/Texinfo/Convert/DocBook.pm (conversion_output_begin) (_format_comment_or_end_line, _convert_def_line, _convert), tta/perl/Texinfo/Convert/HTML.pm (_convert_enumerate_command) (_convert_item_command, _open_quotation_command), tta/perl/Texinfo/Convert/HTMLNonXS.pm (_internal_command_tree) (_node_redirections), tta/perl/Texinfo/Convert/Info.pm (output), tta/perl/Texinfo/Convert/LaTeX.pm (_set_environment_options) (_convert), tta/perl/Texinfo/Convert/Plaintext.pm (_convert), tta/perl/Texinfo/Convert/TextContent.pm (_convert), tta/perl/Texinfo/Document.pm (_existing_label_error), tta/perl/Texinfo/Example/TexinfoMarkup.pm, tta/perl/Texinfo/Transformations.pm (_protect_hashchar_at_line_beginning), tta/perl/init/documentation_examples.pm (_set_appendix_direction_node_name), tta/perl/t/init/index_direction_from_index_name.pm (_set_index_global_direction_from_index_name): update for changes in tree, mainly by using empty_spaces_argument, simple_arg_text, or handling especially spaces_* types. Also calling convert_contents_to_texinfo in Perl. 2026-03-17 Patrice Dumas <pertusus@free.fr> * tta/C/main/utils.c (simple_arg_text), tta/perl/Texinfo/Common.pm (simple_arg_text): return information related to unexpected non text elements. Update callers. * tta/C/parsetexi/separator.c (handle_close_brace), tta/perl/Texinfo/ParserNonXS.pm (_handle_close_brace): add more information on superfluous argument to @U. * tta/C/parsetexi/end_line.c (parse_line_command_args), tta/perl/Texinfo/ParserNonXS.pm (_parse_line_command_args): use simple_arg_text. 2026-03-17 Patrice Dumas <pertusus@free.fr> Move @math command from context commands to arguments commands * tta/data/command_data.txt (math), tta/C/parsetexi/close.c (close_brace_command, close_current), tta/C/parsetexi/separator.c (handle_open_brace, handle_close_brace), tta/perl/Texinfo/ParserNonXS.pm (_close_brace_command, _close_current) (_handle_open_brace, _handle_close_brace): change math data type to be arguments. Move code related to math to arguments brace commands handling, with explicit setting of context. * tta/C/convert/html_conversion_state.c (html_open_command_update_context) (html_convert_command_update_context), tta/perl/Texinfo/Convert/DocBook.pm (_convert), tta/perl/Texinfo/Convert/HTMLNonXS.pm (_open_command_update_context) (_convert_command_update_context): set explicitly math context for brace math command. 2026-03-17 Patrice Dumas <pertusus@free.fr> * tta/perl/Texinfo/ParserNonXS.pm (_end_line_def_line): reorganize the code to be more legible, and converge to C version. 2026-03-17 Patrice Dumas <pertusus@free.fr> Put leading spaces and trailing spaces directly in brace arg elements * tta/C/main/manipulate_tree.c (non_leading_trailing_indices) (parse_node_manual), tta/C/main/utils.c (empty_spaces_argument) (simple_arg_text), tta/perl/Texinfo/Common.pm (_non_leading_trailing_indices, parse_node_manual) (empty_spaces_argument, simple_arg_text): add functions to determine if empty, what are the non empty argument and simple text argument if there are trailing, leading spaces and comments. Use in parse_node_manual. * tta/C/parsetexi/close.c (close_all_style_commands, close_current), tta/C/parsetexi/def.c (split_def_args), tta/C/parsetexi/parser.c (isolate_leading_spaces_element, isolate_leading_trailing), tta/C/parsetexi/separator.c (handle_open_brace, handle_close_brace) (handle_comma), tta/perl/Texinfo/ParserNonXS.pm (_close_all_style_commands, _close_current) (_isolate_leading_spaces_element, _split_element_def_args) (_end_line_def_line, _handle_open_brace, _handle_close_brace) (_handle_comma): add functions to isolate trailing spaces and comments and leading spaces and comments, use them in parsing for brace commands and also use simple_arg_text and empty_spaces_argument. Isolate trailing spaces in @math too. * tta/C/main/element_types.txt (empty_line), tta/perl/Texinfo/ParserNonXS.pm (%trailing_space_types): set empty_line as trailing space such that it is not replaced by spaces_after_argument. * tta/C/parsetexi/parser.c (isolate_last_space), tta/perl/Texinfo/ParserNonXS.pm (_isolate_last_space): simplify, it is not called for brace commands anymore. * tta/C/structuring_transfo/transformations.c (reference_to_arg_internal), tta/perl/Texinfo/Common.pm (non_leading_trailing_tree), tta/perl/Texinfo/Transformations.pm (_reference_to_arg), tta/perl/ext/tex4ht.pm (tex4ht_prepare): update for change in tree. * tta/C/convert/html_prepare_converter.c (ignored_types), tta/C/main/convert_to_text.c (convert_to_text_internal), tta/C/main/node_name_normalization.c (convert_to_normalized_internal), tta/C/main/manipulate_indices.c (idx_leading_text_or_command), tta/C/parsetexi/end_line.c (end_line_def_line), tta/C/parsetexi/parser.c (text_contents_to_plain_text), tta/perl/Texinfo/ParserNonXS.pm (_text_contents_to_plain_text), tta/perl/Texinfo/Convert/DocBook.pm, tta/perl/Texinfo/Convert/HTML.pm, tta/perl/Texinfo/Convert/LaTeX.pm, tta/perl/Texinfo/Convert/NodeNameNormalization.pm, tta/perl/Texinfo/Convert/Plaintext.pm, tta/perl/Texinfo/Convert/Text.pm, tta/perl/Texinfo/Convert/TextContent.pm: ignore spaces_before_argument and spaces_after_argument. Catch all spaces in more code. * tta/C/convert/convert_html.c, tta/perl/Texinfo/Convert/DocBook.pm (_convert), tta/perl/Texinfo/Convert/HTML.pm, tta/perl/Texinfo/Convert/HTMLNonXS.pm, tta/perl/Texinfo/Convert/Info.pm, tta/perl/Texinfo/Convert/LaTeX.pm, tta/perl/Texinfo/Convert/Plaintext.pm: call empty_spaces_argument to determine if an argument is empty, cannot check only that there are no contents anymore. 2026-03-16 Gavin Smith <gavinsmith0123@gmail.com> * NEWS: mention removal of --xml etc. options 2026-03-14 Gavin Smith <gavinsmith0123@gmail.com> * doc/texinfo.texi (@example): Tweak description of tab handling. Report from Werner Lemberg. 2026-03-12 Patrice Dumas <pertusus@free.fr> Obey @exampleindent in plaintext and Info output * tta/perl/Texinfo/Convert/Plaintext.pm (_convert): use exampleindent customization info to increase the indent length for %example_indented_commands. Report from Rik. * tta/perl/Makefile.tres, tta/perl/t/20preformatted.t ($nested_examples, exampleindent_set, exampleindent_zero) (exampleindent_set_nestings, exampleindent_zero_nestings): new tests of @exampleindent. 2026-03-12 Patrice Dumas <pertusus@free.fr> * tta/perl/Texinfo/Convert/Plaintext.pm (new_formatter, _convert): never put 'indent_length' in 'format_context', only in new_formatter $conf. 2026-03-12 Patrice Dumas <pertusus@free.fr> * tta/perl/Texinfo/Convert/Plaintext.pm (%example_indented_commands): set to the indented %preformatted_commands. * tta/perl/Texinfo/Convert/Plaintext.pm (push_top_formatter) (new_formatter, new_formatter, _convert): replace 'indent_level' by a length, 'context_indent_len'. This prepares for indentation added being different from the default. 2026-03-12 Patrice Dumas <pertusus@free.fr> * tta/perl/Texinfo/Convert/Plaintext.pm (@informative_global_commands): add exampleindent. * tta/perl/Texinfo/Convert/Plaintext.pm ($default_indent_length) (_text_heading): rename $indent_length as $default_indent_length. Rename $indent_length in _text_heading as $indented_len. 2026-03-12 Patrice Dumas <pertusus@free.fr> * tta/C/convert/convert_html.c (html_cache_translate_string): initialize lang. 2026-03-11 Gavin Smith <gavinsmith0123@gmail.com> * info/infodoc.c (create_internal_info_help_node): Free return value of variable_long_description_string. 2026-03-11 Gavin Smith <gavinsmith0123@gmail.com> * info/infodoc.c (create_internal_info_help_node): Check if return value of where_is is null before using it. This shouldn't happen but it is not easy to see this just by looking at this function. Avoid calling strdup on a string. Report from Patrice. 2026-03-10 Gavin Smith <gavinsmith0123@gmail.com> * tta/perl/Texinfo/Translations.pm (fake_setlocale) [openbsd]: Remove forced override of POSIX::setlocale as now we use the "gettext_dumb" option of Locale::Messages. 2026-03-09 Patrice Dumas <pertusus@free.fr> * Pod-Simple-Texinfo/t/Pod-Simple-Texinfo.t: set number of tests when importing Test::More. 2026-03-09 Patrice Dumas <pertusus@free.fr> * tta/C/texi2any.c (main), tta/perl/texi2any.pl: if TEST is set and OUTFILE is set to /dev/null and /dev/null is not a null device, reset OUTFILE to a platform null device. For a test that uses -o /dev/null. 2026-03-09 Patrice Dumas <pertusus@free.fr> * tta/C/Makefile.am (libtexinfo_main_la_LDFLAGS): add $(LTLIBINTL) since gettext is used in texinfo.c. 2026-03-09 Patrice Dumas <pertusus@free.fr> * tta/perl/Texinfo/Indices.pm (BEGIN): add missing texinfo libraries dependencies. 2026-03-08 Patrice Dumas <pertusus@free.fr> * tta/C/Makefile.am (libtexinfo_convert_la_LIBADD) (libtexinfo_main_la_LIBADD, ctexi2any_LDADD): remove libgnu.la from libraries and executable linking against libtexinfo, as libtexinfo already includes libgnu.a files through libperlcall_utils convenience library linked in libtexinfo. Based on Bruno Haible report. 2026-03-08 Patrice Dumas <pertusus@free.fr> * tta/C/main/utils.c (html_get_direction_index): remove unused variable. 2026-03-08 Patrice Dumas <pertusus@free.fr> * doc/texinfo.texi (@command{texi2any} Environment Variables): remove explanations on TEXINFO_XS_* and TEXINFO_C_EMBED_PERL as these environment variables are likely to be removed at some point. 2026-03-08 Patrice Dumas <pertusus@free.fr> * doc/texinfo.texi (@command{texi2any} Environment Variables): update for changes in TEXINFO_XS. 2026-03-08 Patrice Dumas <pertusus@free.fr> * doc/texinfo.texi (Invoking @command{texi2any}) (Global Customization Variables): remove references to xml command-line and format options. 2026-03-08 Patrice Dumas <pertusus@free.fr> * tta/perl/Makefile.tres, tta/perl/t/xml_tests.t: remove the sectioning_test_no_use_nodes that is now a duplicate. Replace $sectioning_test by its value. 2026-03-08 Patrice Dumas <pertusus@free.fr> * tta/maintain/check_back_xml_forth_texi_t.sh: update. * util/txixml2texi.pl: update Perl modules names. 2026-03-08 Patrice Dumas <pertusus@free.fr> * NEWS, TODO: update for Texinfo XML removed as an output format. 2026-03-08 Patrice Dumas <pertusus@free.fr> * doc/tta_api/Makefile.am (texi2any_internals_dependencies): fix TexinfoMarkup.pm and TexinfoXML.pm paths. 2026-03-08 Patrice Dumas <pertusus@free.fr> Move TexinfoXML.pm, TexinfoSXML.pm and TexinfoMarkup.pm to Example * tta/perl/Makefile.am (dist_convertmodules_DATA), tta/perl/Texinfo/Example/TexinfoMarkup.pm, tta/perl/Texinfo/Example/TexinfoSXML.pm, tta/perl/Texinfo/Example/TexinfoXML.pm: move TexinfoMarkup.pm, TexinfoSXML.pm and TexinfoXML.pm out of Texinfo/ to Example/. * tta/C/texi2any.c (formats_table), tta/perl/Texinfo/Example/TexinfoMarkup.pm, tta/perl/Texinfo/Example/TexinfoSXML.pm, tta/perl/Texinfo/Example/TexinfoXML.pm, tta/perl/t/test_utils.pl, tta/perl/t/z_misc/no_structure_test.t, tta/perl/texi2any.pl: update Perl modules names. * tta/maintain/regenerate_converters_documentation.sh, tta/perl/Convert_format_template.pod: update to handle TexinfoXML being in Example. 2026-03-08 Patrice Dumas <pertusus@free.fr> * tta/perl/t/test_utils.pl (test): remove xml from the default expanded formats. 2026-03-08 Patrice Dumas <pertusus@free.fr> Mark texinfo XML related @-command as deprecated * tta/data/command_data.txt: mark xml, ifxml and ifnotxml as deprecated. 2026-03-08 Patrice Dumas <pertusus@free.fr> Remove Texinfo XML command line options * tta/C/texi2any.c (format_command_line_names, long_options) (main), tta/perl/texi2any.pl (%format_command_line_names) (makeinfo_help): remove Texinfo XML related command line options. * tta/tests/coverage/list-of-tests (formatting_xml): update. 2026-03-08 Patrice Dumas <pertusus@free.fr> Deprecate xml format in documentation and associated variables * doc/texinfo.texi (Output Formats, Adding Output Formats) (Conditional Commands, Conditional Not Commands) (Raw Formatter Commands, Inline Conditionals) (Generic Translator @command{texi2any}, Invoking @command{texi2any}) (Output Format Selection, Command List) (Customization Variables for Multiple Formats): do not document Texinfo XML as being a supported output format. Document @ifxml, @xml and @ifnotxml as being deprecated. * tta/maintain/catalog.xml.in, tta/perl/Texinfo/Convert/TexinfoMarkup.pm (_convert), tta/perl/Texinfo/Convert/TexinfoXML.pm (txi_markup_header): remove TXI_MARKUP_NO_SECTION_EXTENT, considering that it is always false. Hardcode TEXINFO_DTD_VERSION to 7.3. * tta/data/options_data.txt: set TEXINFO_DTD_VERSION to 7.3, document markup and Texinfo XML customization variables as not being used anymore. * doc/texinfo.texi (Other Formats Customization Variables), tta/Makefile.am (maintain/catalog.xml), tta/perl/Makefile.am (do_subst): remove Texinfo XML customization variables documentation and substitutions. * configure.ac, tta/configure.ac, tta/maintain/change_perl_modules_version.sh: do not set TEXINFO_DTD_VERSION. * tta/C/convert/texinfo.c (txi_set_base_default_options), tta/perl/texi2any.pl ($main_program_set_options): do not set TEXINFO_DTD_VERSION. * tta/perl/t/xml_tests.t (sectioning_test_no_use_nodes): do not set TXI_MARKUP_NO_SECTION_EXTENT. * Makefile.am, README-hacking: remove dtd-check. 2026-03-08 Patrice Dumas <pertusus@free.fr> * tta/perl/XSTexinfo/convert/ConvertTextXS.xs (XS_convert_tree): remove call of get_sv_element_document and get_sv_element_element, no code sets the corresponding handle and document descriptor. * tta/C/tree_elements/get_perl_tree_elements.c (get_sv_element_document, get_sv_element_element), tta/C/main/get_perl_info.c: move unused get_sv_element_document and get_sv_element_element to get_perl_tree_elements.c. * tta/C/main/document.c (destroy_document), tta/C/main/document_types.h (DOCUMENT): comment out definition of element_handles document field and associated code, as no code built uses it currently. 2026-03-08 Patrice Dumas <pertusus@free.fr> * tta/C/Makefile.am (libtexinfo_convertxs_la_SOURCES, EXTRA_DIST): do not build tree_elements/build_perl_tree_elements.c and tree_elements/get_perl_tree_elements.c. 2026-03-08 Patrice Dumas <pertusus@free.fr> remove the Texinfo::TreeElement XS interface * doc/tta_api/Makefile.am (texi2any_internals_dependencies), tta/perl/Makefile.am (dist_modules_DATA), tta/perl/Texinfo/TreeElement.pm, tta/perl/XSTexinfo/Makefile.am: rename TreeElementNonXS.pm as TreeElement.pm. Remove TreeElement XS loading and reader_element/TreeElementXS.xs. 2026-03-08 Patrice Dumas <pertusus@free.fr> * tta/perl/Texinfo/TreeElementNonXS.pm, tta/perl/XSTexinfo/reader_element/TreeElementXS.xs: remove all the methods except for new. Those methods should not be used. 2026-03-08 Patrice Dumas <pertusus@free.fr> * tta/perl/Texinfo/Convert/Converter.pm (txt_image_text), tta/perl/Texinfo/Example/ReadDocBook.pm (_convert): do not use the TreeElement interface. 2026-03-08 Patrice Dumas <pertusus@free.fr> * tta/C/tree_elements/build_perl_tree_elements.c: remove unused header includes. * tta/C/tree_elements/get_perl_tree_elements.c: remove get_sv_reader_reader. 2026-03-08 Patrice Dumas <pertusus@free.fr> remove the Texinfo::Reader XS interface * doc/tta_api/Makefile.am (texi2any_internals_dependencies), tta/perl/Makefile.am (dist_modules_DATA), tta/perl/Texinfo/Reader.pm, tta/perl/XSTexinfo/Makefile.am: remove XS interface of Texinfo::Reader. Rename ReaderNonXS.pm as Reader.pm. Remove reader_element/ReaderXS.xs. 2026-03-08 Patrice Dumas <pertusus@free.fr> * tta/C/tree_elements/build_perl_tree_elements.c: remove register_document_sections_list_elements, register_document_nodes_list_elements, register_document_headings_list_elements, register_document_relations_lists_elements, build_tree_elements_relations_lists, build_tree_elements_sections_list, build_tree_elements_nodes_list, build_tree_elements_headings_list that were only used in TreeElementConverterXS. * tta/C/tree_elements/get_perl_tree_elements.c: remove get_lang_translations_sv. 2026-03-08 Patrice Dumas <pertusus@free.fr> * doc/tta_api/Makefile.am (texi2any_internals_dependencies), tta/perl/Makefile.am (dist_convertmodules_DATA), tta/perl/XSTexinfo/Makefile.am: remove completely TreeElementConverter by removing TreeElementConverterXS.xs, TreeElementConverter.pm and TreeElementConverterXS.pm. 2026-03-08 Patrice Dumas <pertusus@free.fr> * Texinfo/Example/ReadDocBook.pm: remove or replace code related to XS interfaces. 2026-03-08 Patrice Dumas <pertusus@free.fr> * tta/perl/Makefile.am (dist_convertmodules_DATA), tta/perl/texi2any.pl (%formats_table): remove completely Texinfo::Example::TreeElementReadDocBook. * tta/perl/Texinfo/Example/TODO: move information on obsolete code to this new file. 2026-03-08 Patrice Dumas <pertusus@free.fr> * tta/perl/Texinfo/XSLoader.pm: make $disable_C_libraries a file scoped variable. 2026-03-08 Patrice Dumas <pertusus@free.fr> * tta/perl/Texinfo/Parser.pm (BEGIN): do not call set_XS_parser_loaded. * tta/perl/Texinfo/XSLoader.pm: remove XS_parser_loaded and set_XS_parser_loaded. The information can be determined in advance with $Texinfo::XSLoader::core_modules_built and XS_parser_enabled. 2026-03-08 Patrice Dumas <pertusus@free.fr> * tta/perl/Texinfo/ManipulateTree.pm (tree_remove_references): determine early the object count number by using the $Texinfo::XSLoader::core_modules_built variable value to determine if the XS parser module is loaded. 2026-03-08 Patrice Dumas <pertusus@free.fr> * tta/swig/perl/t/20index_sort.t: load the SWIG interface before the texi2any internal modules and call Texinfo::setup in a BEGIN block to make sure that set_XS_mandatory is called before any module reading TEXINFO_XS_* environmnent variables is loaded. 2026-03-07 Patrice Dumas <pertusus@free.fr> * tta/perl/Texinfo/XSLoader.pm (set_XS_mandatory, init): unset $ENV{'TEXINFO_XS'} if set to omit in set_XS_mandatory, not in init. * tta/perl/Texinfo/XSLoader.pm (init): handle first the case where there is no attempt to load XS module. Make $TEXINFO_XS a file lexical. * tta/perl/Texinfo/XSLoader.pm ($core_modules_built): add. 2026-03-07 Patrice Dumas <pertusus@free.fr> * tta/C/main/call_perl_function.c (call_eval_load_texinfo_modules): no need to check whether Document XS loaded, XS is mandatory such that XSLoader would already have died if Document XS was not loaded. * tta/perl/Texinfo/Document.pm (BEGIN): no more need to detect that Document XS was loaded. In general, it should be better to make sure in upstream codes that failure happens as soon as the XS module does not load. 2026-03-07 Patrice Dumas <pertusus@free.fr> * tta/swig/perl/test_refold.sh: avoid using diff exit status. 2026-03-07 Patrice Dumas <pertusus@free.fr> * tta/C/main/call_perl_function.c (call_eval_load_texinfo_modules): call set_XS_mandatory to be more like C texi2any and simplify the possible cases. 2026-03-07 Patrice Dumas <pertusus@free.fr> * tta/perl/Texinfo/XSLoader.pm (init): handle mandatory_xs more like other cases since in situations with mandatory_xs set, all the XS modules should be enabled. Show missing fallback only after the required modules that have not been loaded caused to die. Silently reset TEXINFO_XS if set to omit and mandatory_xs is set. 2026-03-07 Patrice Dumas <pertusus@free.fr> * tta/perl/Texinfo/XSLoader.pm ($mandatory_xs, set_XS_mandatory): rename embedded_xs to mandatory_xs and set_XS_embedded to set_XS_mandatory. Update users and callers. 2026-03-07 Patrice Dumas <pertusus@free.fr> * tta/perl/Texinfo/Convert/Converter.pm (BEGIN), tta/perl/Texinfo/Convert/HTML.pm (BEGIN), tta/perl/Texinfo/Convert/Texinfo.pm (BEGIN), tta/perl/Texinfo/Convert/Text.pm (BEGIN), tta/perl/Texinfo/Indices.pm (BEGIN), tta/perl/Texinfo/ManipulateTree.pm (BEGIN), tta/perl/Texinfo/OutputUnits.pm (BEGIN), tta/perl/Texinfo/Structuring.pm (BEGIN), tta/perl/Texinfo/Transformations.pm (BEGIN): remove unused Texinfo::XSLoader::init return value variable. 2026-03-07 Patrice Dumas <pertusus@free.fr> * tta/perl/Texinfo/ModulePath.pm.in ($XS_modules_dir, init), tta/perl/Texinfo/XSLoader.pm (init): set $XS_modules_dir in ModulePath instead of prepending to @INC. Search for libtool archive in $XS_modules_dir only in XSLoader init. Remove _find_file_in_inc. 2026-03-07 Patrice Dumas <pertusus@free.fr> * INSTALL, README-hacking: document TEXINFO_XS_CONVERT only in INSTALL. Move documentation about all the TEXINFO_XS_* to README-hacking. Mention that those variables will be removed in the future. 2026-03-07 Patrice Dumas <pertusus@free.fr> * INSTALL, tta/perl/Texinfo/XSLoader.pm (_message, init, override): make requiredifenabled the default for TEXINFO_XS. Remove TEXINFO_XS warn, required and previous default possibilities. 2026-03-07 Patrice Dumas <pertusus@free.fr> * tta/perl/Makefile.am (modulesdir), tta/perl/Texinfo/Config.pm (BEGIN): move ConfigXS.pm code to Config.pm. Remove ConfigXS.pm. 2026-03-06 Patrice Dumas <pertusus@free.fr> * tta/perl/init/documentation_examples.pm: add a license. 2026-03-06 Patrice Dumas <pertusus@free.fr> * tta/perl/Makefile.am (test_files): remove unused test_renamed_nodes.init. 2026-03-06 Patrice Dumas <pertusus@free.fr> * tta/C/main/get_perl_info.c, tta/C/main/txi_config.c, tta/C/tree_elements/get_perl_tree_elements.c, tta/perl/XSTexinfo/convert/ConvertConverterXS.xs, tta/perl/XSTexinfo/convert/ConvertHTMLXS.xs, tta/perl/XSTexinfo/convert/get_html_perl_info.c, tta/perl/XSTexinfo/parser_document/ConfigXS.xs, tta/perl/XSTexinfo/parser_document/DocumentXS.xs, tta/perl/XSTexinfo/parser_document/ManipulateTreeXS.xs, tta/perl/XSTexinfo/parser_document/OutputUnitsXS.xs, tta/perl/XSTexinfo/parser_document/ParserXS.xs: remove cast for SvPVutf8_nolen and SvPVbyte_nolen. Add const. 2026-03-06 Patrice Dumas <pertusus@free.fr> * tta/perl/XSTexinfo/convert/ConvertHTMLXS.xs (direction_string): remove static for const size_t, as the solaris compiler does not want a non-constant initializer with strlen call. 2026-03-06 Patrice Dumas <pertusus@free.fr> * tta/perl/XSTexinfo/convert/ConvertHTMLXS.xs: remove cast to char * for SvPVutf8_nolen, it should not be useful. 2026-03-05 Patrice Dumas <pertusus@free.fr> * tta/perl/Texinfo/Convert/ParagraphNonXS.pm, tta/perl/XSTexinfo/xspara.c: minor changes in spacing, parentheses use. 2026-03-05 Patrice Dumas <pertusus@free.fr> * tta/perl/Texinfo/Convert/ParagraphNonXS.pm (dump, add_text): check if $paragraph->{'end_sentence'} exists, not if defined. * tta/perl/XSTexinfo/xspara.c (enum eos_status): rename eos_undef as eos_unset. Update users. 2026-03-05 Patrice Dumas <pertusus@free.fr> * tta/perl/Texinfo/Convert/ParagraphNonXS.pm (add_end_sentence), tta/perl/XSTexinfo/ParagraphXS.xs (xspara_add_end_sentence), tta/perl/XSTexinfo/xspara.c (xspara_add_end_sentence): remove add_end_sentence value argument, always set to eos_present. Update callers. 2026-03-05 Patrice Dumas <pertusus@free.fr> * tta/perl/Texinfo/Convert/ParagraphNonXS.pm (get_pending) (_add_pending_word): do not delete $paragraph->{'space'}, set it to an empty string instead. 2026-03-05 Patrice Dumas <pertusus@free.fr> * tta/perl/Texinfo/Convert/ParagraphNonXS.pm (new, get_pending) (_add_pending_word, _add_next, set_space_protection, add_text): instead of setting paragraph->{'word'} to undef to signal that there is no empty string pending that need to be kept as is, add invisible_pending_word to signal it, as in C. * tta/perl/XSTexinfo/xspara.c (xspara__add_next) (xspara_set_space_protection): change conditions to be simpler. * tta/perl/XSTexinfo/xspara.c (xspara_add_text, xspara__add_next): more similar debug messages as in Perl. 2026-03-04 Patrice Dumas <pertusus@free.fr> * tta/perl/Texinfo/Convert/ParagraphNonXS.pm: reformat functions beginning. 2026-03-04 Patrice Dumas <pertusus@free.fr> * doc/texi2any_api.texi, tta/perl/init/documentation_examples.pm: change the formatting of functions beginning in documentation_examples.pm and in texi2any_api.texi examples. 2026-03-04 Patrice Dumas <pertusus@free.fr> * tta/perl/Texinfo/ParserNonXS.pm: update POD. 2026-03-04 Patrice Dumas <pertusus@free.fr> * tta/C/main/get_perl_info.c (find_element_from_sv), tta/C/main/tree_types.h (enum string_info_type), tta/C/parsetexi/labels.c (check_register_target_element_label), tta/C/structuring_transfo/transformations.c (new_node), tta/perl/Texinfo/Transformations.pm (_new_node), tta/perl/Texinfo/ParserNonXS.pm (_check_register_target_element_label): set 'identifier' extra information with element label instead of 'normalized' for elements being targets of links. Update code accessing the extra information. 2026-03-04 Patrice Dumas <pertusus@free.fr> * tta/C/main/targets.c: remove unused compare_labels. * tta/C/main/build_perl_info.c: update comments. 2026-03-04 Patrice Dumas <pertusus@free.fr> * doc/texi2any_api.texi (Simple Customization for Commands Without Arguments): fix documentation of texinfo_register_no_arg_command_texinfo. 2026-03-03 Patrice Dumas <pertusus@free.fr> * tta/C/convert/build_html_perl_info.c, tta/C/convert/build_html_perl_state.c: commented out code and unused variables. Remove unused build_directions_strings function. 2026-03-03 Patrice Dumas <pertusus@free.fr> TODO: update DevHelp information 2026-03-02 Patrice Dumas <pertusus@free.fr> * tta/C/main/api_to_perl.c: remove useless includes and preprocessor code. 2026-03-02 Patrice Dumas <pertusus@free.fr> * tta/perl/XSTexinfo/Makefile.am: remove BUILD_C_CODE conditional use, as it should always be true. BUILD_C_CODE true is implied by XS being enabled, and code is built in the directory only if XS is enabled. 2026-03-02 Patrice Dumas <pertusus@free.fr> * tta/perl/Texinfo/Convert/Paragraph.pm (BEGIN), tta/perl/XSTexinfo/Makefile.am, tta/perl/XSTexinfo/ParagraphXS.xs: rename XSParagraph.xs as ParagraphXS.xs. 2026-03-02 Patrice Dumas <pertusus@free.fr> * tta/perl/Texinfo/Parser.pm (BEGIN), tta/perl/XSTexinfo/Makefile.am, tta/perl/XSTexinfo/parser_document/ParserXS.xs: rename Parsetexi.xs to ParserXS.xs. 2026-03-02 Patrice Dumas <pertusus@free.fr> Finish TEXINFO_XS requiredifenabled implementation * tta/perl/Texinfo/XSLoader.pm (init): now that all the modules that need one have fallback, die if fallback is missing when it should be present. Update comments. * tta/perl/Texinfo/XSLoader.pm (override): die if overriding a function failed and embedded_xs is set. 2026-03-02 Patrice Dumas <pertusus@free.fr> * tta/configure.ac (prefer_c_t2a): move ctexi2any related code later to depend on use_shared_txi_libraries rather than am_func_iconv. 2026-03-02 Patrice Dumas <pertusus@free.fr> * tta/perl/Texinfo/Structuring.pm (_associate_internal_references): rename associate_internal_referencesNonXS as _associate_internal_references. Update callers. 2026-03-02 Patrice Dumas <pertusus@free.fr> * tta/C/main/manipulate_tree.c (copy_tree_root), tta/perl/Texinfo/ManipulateTreeNonXS.pm (copy_tree_root), tta/perl/XSTexinfo/parser_document/ManipulateTreeXS.xs (copy_tree_root), tta/perl/t/z_misc/test_tree_copy.t: add copy_tree_root that copies a whole tree root element. * tta/perl/Texinfo/ManipulateTree.pm (copy_element_tree), tta/C/main/manipulate_tree.c (copy_element_tree): rename copy_treeNonXS as copy_element_tree in Perl. Rename copy_tree as copy_element_tree in C. Update callers. 2026-03-02 Patrice Dumas <pertusus@free.fr> * tta/perl/Texinfo/Convert/Texinfo.pm (BEGIN), tta/perl/XSTexinfo/Makefile.am, tta/perl/XSTexinfo/convert/ConvertTexinfoXS.xs: rename ConvertToTexinfoXS.xs to ConvertTexinfoXS.xs. 2026-03-02 Patrice Dumas <pertusus@free.fr> Finish TEXINFO_XS requiredifenabled implementation * tta/perl/Texinfo/XSLoader.pm (init): now that all the modules that need one have fallback, die if fallback is missing when it should be present. Update comments. * tta/perl/Texinfo/XSLoader.pm (override): die if overriding a function failed and embedded_xs is set. 2026-03-02 Patrice Dumas <pertusus@free.fr> * tta/configure.ac (prefer_c_t2a): move ctexi2any related code later to depend on use_shared_txi_libraries rather than am_func_iconv. 2026-03-02 Patrice Dumas <pertusus@free.fr> * tta/perl/Texinfo/Structuring.pm (_associate_internal_references): rename associate_internal_referencesNonXS as _associate_internal_references. Update callers. 2026-03-02 Patrice Dumas <pertusus@free.fr> * tta/C/main/manipulate_tree.c (copy_tree_root), tta/perl/Texinfo/ManipulateTreeNonXS.pm (copy_tree_root), tta/perl/XSTexinfo/parser_document/ManipulateTreeXS.xs (copy_tree_root), tta/perl/t/z_misc/test_tree_copy.t: add copy_tree_root that copies a whole tree root element. * tta/perl/Texinfo/ManipulateTree.pm (copy_element_tree), tta/C/main/manipulate_tree.c (copy_element_tree): rename copy_treeNonXS as copy_element_tree in Perl. Rename copy_tree as copy_element_tree in C. Update callers. 2026-03-02 Patrice Dumas <pertusus@free.fr> * tta/perl/Texinfo/ManipulateTree.pm (copy_contents): remove copy_contentsNonXS, copy_contents does not have an XS implementation. Update callers. 2026-03-02 Patrice Dumas <pertusus@free.fr> * tta/C/structuring_transfo/transformations.c (move_selected_element_index_entries_after_items): rename move_index_entries_after_items as move_selected_element_index_entries_after_items. * tta/perl/Texinfo/ManipulateTreeNonXS.pm (_move_selected_element_index_entries_after_items): rename move_index_entries_after_items as _move_selected_element_index_entries_after_items. * tta/perl/Texinfo/ManipulateTreeNonXS.pm (move_index_entries_after_items_in_document): remove move_index_entries_after_items_in_tree. 2026-03-02 Patrice Dumas <pertusus@free.fr> * tta/perl/XSTexinfo/convert/ConvertToTexinfoXS.xs (_XS_texinfo_convert_tree): rename plain_texinfo_convert_tree as _XS_texinfo_convert_tree. * tta/perl/Texinfo/Convert/Texinfo.pm (_convert_to_texinfo): rename convert_to_texinfoNonXS as _convert_to_texinfo. * tta/perl/Texinfo/Convert/Texinfo.pm (BEGIN, convert_to_texinfo), tta/perl/Texinfo/Convert/TexinfoNonXS.pm (_XS_texinfo_convert_tree), tta/perl/XSTexinfo/convert/ConvertToTexinfoXS.xs (_XS_texinfo_convert_tree): have _XS_texinfo_convert_tree return undef if the C data is not found. Override _XS_texinfo_convert_tree in TexinfoNonXS.pm, returning undef. Define convert_to_texinfo in Texinfo.pm, by calling _XS_texinfo_convert_tree and switching to Perl implementation if _XS_texinfo_convert_tree returns undef. * tta/perl/Makefile.am (dist_convertmodules_DATA): remove Texinfo/Convert/TexinfoXS.pm. 2026-03-02 Patrice Dumas <pertusus@free.fr> * tta/perl/Texinfo/Convert/Converter.pm (table_item_content_tree): rename table_item_content_tree_noxs as table_item_content_tree. Update callers. * tta/C/main/get_perl_info.c (get_messages_from_sv), tta/perl/Texinfo/Convert/Converter.pm, tta/perl/Texinfo/Convert/ConverterNonXS.pm (merge_converter_error_messages_lists), tta/perl/XSTexinfo/convert/ConvertConverterXS.xs (merge_converter_error_messages_lists): add get_messages_from_sv, and use it in merge_converter_error_messages_lists to get messages from the Perl object if a C converter could not be found. Move merge_converter_error_messages_lists_noxs code to merge_converter_error_messages_lists in ConverterNonXS.pm. Remove merge_converter_error_messages_lists_noxs. 2026-03-02 Patrice Dumas <pertusus@free.fr> Change in comments 2026-03-02 Patrice Dumas <pertusus@free.fr> * tta/perl/Texinfo/Config.pm, tta/perl/Texinfo/Convert/HTML.pm, tta/perl/Texinfo/Convert/Plaintext.pm, tta/perl/Texinfo/Convert/Unicode.pm, tta/perl/Texinfo/Example/TreeElementConverter.pm, tta/perl/Texinfo/ParserNonXS.pm: make $module_loaded a file scoped my variable. 2026-03-02 Patrice Dumas <pertusus@free.fr> * tta/perl/Texinfo/Convert/HTML.pm, tta/perl/Texinfo/Convert/HTMLNonXS.pm, tta/perl/XSTexinfo/convert/ConvertHTMLXS.xs: prepend _ to function names for functions that are not supposed to be called outside of HTML converter. * tta/perl/Texinfo/Convert/HTMLNonXS.pm (command_is_in_referred_command_stack), tta/perl/XSTexinfo/convert/ConvertHTMLXS.xs (command_is_in_referred_command_stack): rename _command_is_in_referred_command_stack as command_is_in_referred_command_stack. Update callers. * tta/perl/XSTexinfo/convert/ConvertHTMLXS.xs: remove _push_referred_command_stack_command and _pop_referred_command_stack XS interfaces, the functions are only called from already overriden functions. 2026-03-02 Patrice Dumas <pertusus@free.fr> * tta/perl/Makefile.am (dist_modules_DATA), tta/perl/Texinfo/Indices.pm (BEGIN), tta/perl/Texinfo/IndicesNonXS.pm, tta/perl/XSTexinfo/parser_document/IndicesXS.xs: add IndicesNonXS.pm based on Indices.pm for the code also in the XS interface. Add loading of XS module in Indices.pm. Remove tta/perl/Texinfo/IndicesXS.pm. 2026-03-02 Patrice Dumas <pertusus@free.fr> * tta/perl/Texinfo/Convert/HTML.pm, tta/perl/Texinfo/Convert/HTMLNonXS.pm, tta/perl/XSTexinfo/convert/ConvertHTMLXS.xs: prepend _ to function names for functionss that are not supposed to be called outside of HTML converter. * tta/perl/Texinfo/Convert/HTMLNonXS.pm (command_is_in_referred_command_stack), tta/perl/XSTexinfo/convert/ConvertHTMLXS.xs (command_is_in_referred_command_stack): rename _command_is_in_referred_command_stack as command_is_in_referred_command_stack. Update callers. * tta/perl/XSTexinfo/convert/ConvertHTMLXS.xs: remove _push_referred_command_stack_command and _pop_referred_command_stack XS interfaces, the functions are only called from already overriden functions. 2026-03-02 Patrice Dumas <pertusus@free.fr> * tta/perl/XSTexinfo/convert/ConvertHTMLXS.xs: fix names in strings used in warn message. Modify 2 XS interface names. 2026-03-02 Patrice Dumas <pertusus@free.fr> * tta/C/convert/format_html.c (html_unit_is_top_output_unit): rename unit_is_top_output_unit as html_unit_is_top_output_unit. * tta/C/main/get_perl_info.c (get_output_unit_from_sv): add, based on find_root_command code. * tta/perl/Texinfo/Convert/HTML.pm, tta/perl/Texinfo/Convert/HTMLNonXS.pm (_get_top_unit) (unit_is_top_output_unit), tta/perl/XSTexinfo/convert/ConvertHTMLXS.xs (unit_is_top_output_unit): add an XS interface for unit_is_top_output_unit. 2026-03-02 Patrice Dumas <pertusus@free.fr> * tta/C/convert/html_prepare_converter.c (html_set_main_units_direction_names), tta/C/main/converter_types.h (CONVERTER), tta/C/main/utils.c (html_get_direction_index): setup an hash associating direction names to their index in main_units_direction_names while filling the array. Use it in html_get_direction_index. 2026-03-02 Patrice Dumas <pertusus@free.fr> * tta/C/convert/format_html.c (html_direction_string): rename direction_string as html_direction_string. * tta/perl/Texinfo/Convert/HTML.pm, tta/perl/Texinfo/Convert/HTMLNonXS.pm (direction_string), tta/perl/XSTexinfo/convert/ConvertHTMLXS.xs (direction_string): add XS interface for direction_string. * tta/C/convert/build_html_perl_info.c (html_pass_converter_initialization_state), tta/C/convert/build_html_perl_state.c (build_html_translated_names): do not pass nor reset direction_string converter hash, as nothing access the Perl data when going through the XS interface. 2026-03-02 Patrice Dumas <pertusus@free.fr> * tta/C/convert/format_html.c (html_special_unit_info): handle an unknown special_unit_variety being given in argument. * tta/perl/Texinfo/Convert/HTML.pm, tta/perl/Texinfo/Convert/HTMLNonXS.pm (get_special_unit_info_varieties, special_unit_info), tta/perl/XSTexinfo/convert/ConvertHTMLXS.xs (get_special_unit_info_varieties, special_unit_info): do not sort get_special_unit_info_varieties output. Add an XS interface for get_special_unit_info_varieties and special_unit_info. 2026-03-02 Patrice Dumas <pertusus@free.fr> * tta/C/convert/format_html.c (html_get_top_unit): reorganize code to be more efficient, and more similar to Perl code. 2026-03-02 Patrice Dumas <pertusus@free.fr> * doc/texi2any_api.texi (Customizing Output Target Names) (Target Tree Element Link), tta/perl/Texinfo/Convert/ConverterNonXS.pm (converter_find_identifier_target), tta/perl/Texinfo/Convert/HTML.pm, tta/perl/XSTexinfo/convert/ConvertConverterXS.xs (converter_find_identifier_target): rename find_identifier_target as converter_find_identifier_target. Move to ConverterNonXS.pm and add an XS implementation. Update callers. * tta/perl/Texinfo/Convert/HTML.pm (_get_top_unit) (_convert_xref_command, _convert_printindex_command): use converter_find_identifier_target. 2026-03-02 Patrice Dumas <pertusus@free.fr> * doc/texi2any_api.texi (Customizing Output Target Names) (Target Tree Element Link), tta/perl/Texinfo/Convert/HTML.pm (find_identifier_target), tta/perl/init/documentation_examples.pm, tta/perl/t/init/access_output_unit_in_handler.pm: rename label_command as find_identifier_target. Update callers. * tta/perl/Texinfo/Convert/HTML.pm (_convert_xref_command): rename _convert_xref_commands as _convert_xref_command. 2026-03-02 Patrice Dumas <pertusus@free.fr> * tta/perl/t/init/t2h_singular.init (singular_collect_values) (singular_get_value): collect version set values in the tree. Use them in formatting. * tta/perl/Texinfo/Convert/HTML.pm: remove get_value. * tta/tests/coverage/formatting.texi: add setting of VERSION value, for t2h_singular.init testing. 2026-03-02 Patrice Dumas <pertusus@free.fr> * tta/perl/Texinfo/Convert/HTML.pm, tta/perl/Texinfo/Convert/HTMLNonXS.pm: move functions around and modify comments for a better organized code. 2026-03-02 Patrice Dumas <pertusus@free.fr> * tta/perl/Makefile.am (dist_convertmodules_DATA), tta/perl/Texinfo/Convert/HTML.pm (BEGIN), tta/perl/Texinfo/Convert/HTMLNonXS.pm, tta/perl/XSTexinfo/Makefile.am (xs_LTLIBRARIES, *_ConvertHTMLXS_la_*), tta/perl/XSTexinfo/convert/ConvertHTMLXS.xs: add HTMLNonXS.pm based on HTML.pm for the code also in the XS interface. Rename ConvertXS.xs as ConvertHTMLXS.xs. Add loading of XS module in HTML.pm. Use the same name in Perl code and in XS interface. 2026-03-02 Patrice Dumas <pertusus@free.fr> * tta/perl/Texinfo/Convert/HTML.pm (%XS_conversion_overrides), tta/perl/XSTexinfo/convert/ConvertXS.xs: use the same name in Perl code and in XS interface. 2026-03-02 Patrice Dumas <pertusus@free.fr> * tta/C/convert/converter.c (setup_converter_generic_done) (setup_converter_generic), tta/C/convert/html_prepare_converter.c (html_format_setup): have html_format_setup call setup_converter_generic_done as it depends on some xml conversion data having been set. Add setup_converter_generic_done to avoid running setup_converter_generic code twice. * tta/perl/Texinfo/Convert/HTML.pm (%XS_conversion_overrides, import), tta/perl/XSTexinfo/convert/ConvertXS.xs (init): call html_format_setup in init in ConvertXS.xs. Remove html_format_setup. * tta/perl/Texinfo/Convert/HTML.pm (%XS_conversion_overrides) (html_converter_initialize_beginning) (XS_html_converter_get_customization), tta/perl/XSTexinfo/convert/ConvertXS.xs (XS_html_converter_get_customization): rename _XS_html_converter_initialize_beginning as html_converter_initialize_beginning and _XS_html_converter_get_customization and html_converter_get_customization_sv as XS_html_converter_get_customization. * tta/perl/Texinfo/Convert/HTML.pm (html_converter_initialize_beginning, converter_initialize): do not use a dynamic check of converter_descriptor presence before html_converter_initialize_beginning and converter_initialize calls, it should always set and we do not do it for any other function. Move Perl code called where html_converter_initialize_beginning was to the function. 2026-03-02 Patrice Dumas <pertusus@free.fr> * tta/perl/Makefile.am (dist_convertmodules_DATA), tta/perl/Texinfo/Convert/Text.pm (BEGIN), tta/perl/Texinfo/Convert/TextNonXS.pm, tta/perl/XSTexinfo/Makefile.am (xs_LTLIBRARIES, *_ConvertTextXS_la_*), tta/perl/XSTexinfo/convert/ConvertXS.xs, tta/perl/XSTexinfo/convert/ConvertTextXS.xs: add TextNonXS.pm based on Text.pm with the trivial code present in the XS interface. Split ConvertTextXS.xs out of ConvertXS.xs with the Texinfo::Convert::Text XS interface code. Add loading of XS module in Text.pm. * tta/perl/XSTexinfo/Makefile.am: cleanups. 2026-03-02 Patrice Dumas <pertusus@free.fr> * tta/perl/Texinfo/Convert/Text.pm (XS_convert_tree), tta/perl/XSTexinfo/convert/ConvertXS.xs (XS_convert_tree): rename _convert_tree_with_XS and text_convert_tree as XS_convert_tree. * tta/perl/Texinfo/Convert/Text.pm (XS_convert_tree, convert_to_text) (convert, output), tta/perl/XSTexinfo/convert/ConvertXS.xs (XS_convert_tree): determine in XS_convert_tree if a C element corresponding to the input Perl tree element is found and if not found return undef. Always call XS_convert_tree in Perl code, and determine if the element was converted by checking if the return value is undef. 2026-03-02 Patrice Dumas <pertusus@free.fr> * tta/perl/Makefile.am (dist_convertmodules_DATA), tta/perl/Texinfo/Convert/Converter.pm, tta/perl/Texinfo/Convert/ConverterNonXS.pm, tta/perl/XSTexinfo/Makefile.am (xs_LTLIBRARIES) (*ConvertConverterXS_la_*), tta/perl/XSTexinfo/convert/ConvertXS.xs, tta/perl/XSTexinfo/convert/ConvertConverterXS.xs: add ConverterNonXS.pm based on Converter.pm with the code also present in the XS interface. Split ConvertConverterXS.xs out of ConvertXS.xs with the Texinfo::Convert::Converter XS interface code. Add loading of XS module in Converter.pm. 2026-03-02 Patrice Dumas <pertusus@free.fr> * tta/perl/Makefile.am (dist_modules_DATA), tta/perl/Texinfo/ManipulateTree.pm, tta/perl/Texinfo/ManipulateTreeNonXS.pm, tta/perl/Texinfo/OutputUnits.pm, tta/perl/Texinfo/OutputUnitsNonXS.pm, tta/perl/XSTexinfo/Makefile.am (xs_LTLIBRARIES, *_OutputUnitsXS_*) (*_ManipulateTreeXS_la_), tta/perl/XSTexinfo/parser_document/ManipulateTreeXS.xs, tta/perl/XSTexinfo/parser_document/OutputUnitsXS.xs: add OutputUnitsNonXS.pm based on OutputUnits.pm with the code also present in the XS interface. Similarly, add ManipulateTreeNonXS.pm based on ManipulateTree.pm with the code also present in the XS interface. Split StructuringTransfoXS.xs in ManipulateTreeXS.xs and OutputUnitsXS.xs. Add loading of XS module in OutputUnits.pm and ManipulateTree.pm, and keep there the functions not in the XS interfaces. Remove StructuringTransfoXS.xs and perl/Texinfo/StructTransfXS.pm. 2026-03-02 Patrice Dumas <pertusus@free.fr> * tta/perl/Makefile.am (dist_modules_DATA), tta/perl/Texinfo/Transformations.pm, tta/perl/Texinfo/TransformationsNonXS.pm tta/perl/XSTexinfo/parser_document/TransformationsXS.xs, tta/perl/XSTexinfo/Makefile.am (xs_LTLIBRARIES) (*_TransformationsXS_la_*), tta/perl/XSTexinfo/parser_document/StructuringTransfoXS.xs: add TransformationsNonXS.pm based on Transformations.pm with the code also present in the XS interface. Separate TransformationsXS.xs from StructuringTransfoXS.xs with the transformations interface only. Add loading of XS modules in Transformations.pm and keep the code not in the XS interface in that file too. 2026-03-02 Patrice Dumas <pertusus@free.fr> * tta/perl/Makefile.am (dist_modules_DATA), tta/perl/Texinfo/StructuringNonXS.pm, tta/perl/Texinfo/Structuring.pm, tta/perl/XSTexinfo/parser_document/StructuringTransfoXS.xs, tta/perl/XSTexinfo/parser_document/StructuringXS.xs, tta/perl/XSTexinfo/Makefile.am (xs_LTLIBRARIES, *_StructuringXS_la_*): add StructuringNonXS.pm based on Structuring.pm code, keeping only code also in the XS interface. Separate StructuringXS.xs from StructuringTransfoXS.xs with the structuring interface only. Add loading of XS in Structuring.pm and keep code not in the XS interface too. 2026-03-02 Patrice Dumas <pertusus@free.fr> * tta/C/Makefile.am (libcallperl_libtexinfo_la_SOURCES) (libcallperl_libtexinfo_convert_la_SOURCES): move call_document_perl_functions.c to libtexinfo. * tta/perl/Makefile.am (dist_modules_DATA), tta/perl/XSTexinfo/parser_document/DocumentXS.xs (destroy_document): call call_document_remove_document_references in destroy_document in DocumentXS.xs. Remove DocumentXS.pm. 2026-03-02 Patrice Dumas <pertusus@free.fr> * tta/perl/Makefile.am (dist_modules_DATA), tta/perl/Texinfo/Document.pm (BEGIN), tta/perl/Texinfo/DocumentNonXS.pm, tta/perl/Texinfo/DocumentXS.pm (destroy_document), tta/perl/XSTexinfo/parser_document/DocumentXS.xs (MODULE, PACKAGE): move code loading XS to Document.pm, move non XS interface code to the new DocumentNonXS.pm code file. Use DocumentXS.pm for the only Perl function needed by the XS interface. Update XS interface function names. * tta/perl/Texinfo/Translations.pm (configure): simply call Texinfo::Document::configure_output_strings_translations, remove XS override. * tta/C/main/call_perl_function.c (call_eval_load_texinfo_modules): update for change in Perl modules. 2026-02-21 Patrice Dumas <pertusus@free.fr> * tta/perl/Makefile.am (dist_modules_DATA), tta/perl/XSTexinfo/Makefile.am, tta/perl/Texinfo/Parser.pm (BEGIN), tta/perl/Texinfo/ParserXS.pm: rename tta/perl/XSTexinfo/Parsetexi.pm as ParserXS.pm and move to tta/perl/Texinfo/ to be consistent with the other modules. 2026-03-02 Patrice Dumas <pertusus@free.fr> * tta/perl/Texinfo/Translations.pm (translate_string): switch to gettext_dumb implementation to use a gettext implementation that does not use the current locale information at all. Idea of Guido Flohr. 2026-03-02 Gavin Smith <gavinsmith0123@gmail.com> * README-hacking: add instructions for updating refcard on website 2026-03-02 Gavin Smith <gavinsmith0123@gmail.com> * TODO: change "Post-release" section to "After 7.3 release". 2026-03-02 Gavin Smith <gavinsmith0123@gmail.com> * tta/perl/t/08misc_commands.t (definfoenclose_command_on_section_line): Re-enable test. 2026-03-02 Patrice Dumas <pertusus@free.fr> * tta/C/convert/call_html_perl_function.c: add includes for libc files used in the code. Report from Eli Zaretskii. 2026-03-02 Gavin Smith <gavinsmith0123@gmail.com> * configure.ac: bump version to 7.3dev. Copyright 2026 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved.