blob: 06747a3d0bb5a2ac2c555738b181653814d33dff [file]
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-03 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.