)]}'
{
  "log": [
    {
      "commit": "efc815e04846f7483e3af30324e89eb2bdcb3ba7",
      "tree": "7d163d7a1c724039e2a46ed45c0e8b06b80117f2",
      "parents": [
        "657f04aa42a2dc22eb4b00d6c628386ed3115d05"
      ],
      "author": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Fri Aug 14 22:16:20 2026 +0200"
      },
      "committer": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Fri Aug 14 22:16:20 2026 +0200"
      },
      "message": "* tta/C/convert/convert_to_plaintext.c (text_heading)\n(convert_def_line): add partial implementations to have formatters for\nthe texts inside of the sectioning and @def* commands.\n\n* tta/C/convert/convert_to_plaintext.c\n(convert_to_plaintext_internal): more cases for text formatting, still\nvery partial.\n\n* tta/C/convert/convert_to_plaintext.c\n(convert_to_plaintext_internal): handle sectioning and heading\ncommands, and def lines.\n\n* tta/perl/Texinfo/Convert/PlaintextNonXS.pm\n(_stream_output_add_text): remove a useless intermediary variable.\n\n* tta/perl/Texinfo/Convert/PlaintextNonXS.pm (_convert): update\ncomment about inlined function and replace code by recent code.\n"
    },
    {
      "commit": "657f04aa42a2dc22eb4b00d6c628386ed3115d05",
      "tree": "0766bf65f2ef275dd5692821b9ef9b0ab02134ea",
      "parents": [
        "5d839ee03886846ebd0eedf7c2e0b331965dc4c7"
      ],
      "author": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Fri Aug 14 19:27:52 2026 +0200"
      },
      "committer": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Fri Aug 14 19:27:52 2026 +0200"
      },
      "message": "* tta/C/convert/convert_to_plaintext.c (get_form_feeds)\n(convert_to_plaintext_internal): add get_form_feeds.  Handle better\nempty line text and ignored text.\n\n* tta/C/convert/convert_to_plaintext.c (plaintext_insert_image):\nfixes, call plaintext_add_image.\n"
    },
    {
      "commit": "5d839ee03886846ebd0eedf7c2e0b331965dc4c7",
      "tree": "487a4690d4d02077299df313065a38ba3586b14a",
      "parents": [
        "cc0f92bf0232259655336ddee5a4accecdc567c4"
      ],
      "author": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Fri Aug 14 18:50:08 2026 +0200"
      },
      "committer": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Fri Aug 14 18:50:08 2026 +0200"
      },
      "message": "* tta/C/convert/convert_to_plaintext.c (add_newline_if_needed):\nimplement.\n"
    },
    {
      "commit": "cc0f92bf0232259655336ddee5a4accecdc567c4",
      "tree": "f1511835db322dd1a5de7a64b98a18fef6e3f3b1",
      "parents": [
        "c04be3fea8512896e7ec3520fcbe9828a1c8f701"
      ],
      "author": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Fri Aug 14 18:32:51 2026 +0200"
      },
      "committer": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Fri Aug 14 18:32:51 2026 +0200"
      },
      "message": "* tta/C/convert/convert_to_plaintext.c (update_locations_counts)\n(convert_to_plaintext_internal),\ntta/perl/Texinfo/Convert/PlaintextNonXS.pm (_update_locations_counts)\n(_convert): do not call _stream_byte_count for the parent counts in\n_update_locations_counts, as it is difficult to understand that it is\nthe parent counts that are modified here.  Instead, call\n_stream_byte_count before pushing a count context in commands such as\ncenter and flushright that need to flush parent before merging with\ntheir counts.\n\n* tta/C/convert/convert_to_plaintext.c (stream_output_add_next)\n(stream_output_count_nl, adjust_final_locations): implement.\n\n* tta/C/convert/convert_to_plaintext.c\n(plaintext_convert_output_unit): call adjust_final_locations.\n\n* tta/C/convert/convert_to_plaintext.c\n(plaintext_conversion_finalization): warn if more than one count\ncontext remain.\n\n* tta/C/convert/convert_to_plaintext.c (convert_to_plaintext)\n(plaintext_convert_tree): inline in plaintext_convert_tree and remove.\n\n* tta/C/convert/convert_to_plaintext.c (plaintext_convert_tree),\ntta/perl/Texinfo/Convert/PlaintextNonXS.pm (convert_tree): update to\nremove probable bugs, and use _update_locations_counts.\n"
    },
    {
      "commit": "c04be3fea8512896e7ec3520fcbe9828a1c8f701",
      "tree": "b4c5954a642777512b08b867a9953a3e33d3002c",
      "parents": [
        "88e81219ee3fb010464f82d93c1812dd97e017a3"
      ],
      "author": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Fri Aug 14 15:41:23 2026 +0200"
      },
      "committer": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Fri Aug 14 15:41:23 2026 +0200"
      },
      "message": "* tta/perl/Texinfo/Convert/PlaintextNonXS.pm\n(_compute_spaces_align_line, _align_lines),\ntta/C/convert/convert_to_plaintext.c (compute_spaces_align_line)\n(align_lines): rename spaces_prepended as prepended_spaces.\n\n* tta/C/convert/convert_to_plaintext.c (align_lines): finish\nimplementation.\n\n* tta/C/convert/convert_to_plaintext.c\n(convert_to_plaintext_internal): add new preformatted formatter in\nrawpreformatted or preformatted, if needed.\n\n* tta/C/convert/convert_to_plaintext.c\n(convert_to_plaintext_internal): open count context for flushright,\nalign to the right and close count context by calling\nalign_environment.\n\n* tta/C/convert/convert_to_plaintext.c\n(convert_to_plaintext_internal): free accented text and enumerate item\nrepresentation.\n"
    },
    {
      "commit": "88e81219ee3fb010464f82d93c1812dd97e017a3",
      "tree": "470a8f25dd4ef258ce9e3622d10089b81c56b621",
      "parents": [
        "0e1429013d03cfe05ebe6f291e8067dc11fc61e9"
      ],
      "author": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Fri Aug 14 13:59:11 2026 +0200"
      },
      "committer": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Fri Aug 14 14:04:15 2026 +0200"
      },
      "message": "plaintext C @U, @value, and partial implementation of flushright\n\n* tta/C/convert/convert_to_plaintext.c (convert_to_plaintext_internal):\nconvert @u and @value.\n\n* tta/C/convert/convert_to_info.c (info_format_image_element)\ntta/C/convert/convert_to_plaintext.c (destroy_count_context)\n(plaintext_add_image, plaintext_format_image_element),\ntta/C/main/plaintext_converter_state.h (IMAGE_LOCATION_INFO)\n(IMAGE_LOCATION_INFO_LIST, COUNT_CONTEXT): add\nIMAGE_LOCATION_INFO_LIST type, add plaintext_add_image and call it to\nregister images in count context.\n\n* tta/C/convert/convert_to_plaintext.c (fill_formatter)\n(plaintext_format_setup, update_locations_counts)\n(enum align_directions, compute_spaces_align_line)\n(IMAGE_LOCATION_POINTER_LIST, reallocate_line_target_image_for)\n(align_lines, align_environment, convert_to_plaintext_internal): set\nflush text commands context, partial implementation of align_lines.\n"
    },
    {
      "commit": "0e1429013d03cfe05ebe6f291e8067dc11fc61e9",
      "tree": "45670b4d260fccd27ae8ef1e3761230a64eaa930",
      "parents": [
        "548863ac8b752dcc54fc63a13d6dc1284ff52f64"
      ],
      "author": {
        "name": "Gavin Smith",
        "email": "gavinsmith0123@gmail.com",
        "time": "Fri Aug 14 10:11:47 2026 +0100"
      },
      "committer": {
        "name": "Gavin Smith",
        "email": "gavinsmith0123@gmail.com",
        "time": "Fri Aug 14 10:11:47 2026 +0100"
      },
      "message": "Make sure XS modules are built before running pod2texi\n\n* doc/Makefile.am (pod2texi.texi),\n* doc/tta_api/Makefile.am (texi2any_internals.texi):\nDo not force TEXINFO_XS\u003domit.  Build in tta/ so that the texi2any\nXS modules will be built for the use of pod2texi.\n\nReverses change on 2026-08-05.  This still allows the sequence \"make \\\nmaintainer-clean ; ./configure ; make dist\" to work.\n"
    },
    {
      "commit": "548863ac8b752dcc54fc63a13d6dc1284ff52f64",
      "tree": "142f6dcb483f8f9cf13a8be2cef0244842b61072",
      "parents": [
        "a49635d45981d8fdd4419da3624c6765ec43af5b"
      ],
      "author": {
        "name": "Gavin Smith",
        "email": "gavinsmith0123@gmail.com",
        "time": "Thu Aug 13 22:19:29 2026 +0100"
      },
      "committer": {
        "name": "Gavin Smith",
        "email": "gavinsmith0123@gmail.com",
        "time": "Thu Aug 13 22:19:29 2026 +0100"
      },
      "message": "Allow ragged bottom before @float\n\n* doc/texinfo.tex (\\float): Add optional space at the bottom of a\npage before a float.  This is intended to reduce interparagraph\nspacing on the preceding page if there is not much on it.\n\nReport from Bernard Petit, bug-texinfo, 2024-12-13.\n"
    },
    {
      "commit": "a49635d45981d8fdd4419da3624c6765ec43af5b",
      "tree": "da00865217c5533ddaf99d5a27dc86d07a414767",
      "parents": [
        "9f5a172165984a762fd6523334c6500b2c846a30"
      ],
      "author": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Thu Aug 13 09:42:51 2026 +0200"
      },
      "committer": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Thu Aug 13 09:42:51 2026 +0200"
      },
      "message": "* tta/C/convert/convert_to_plaintext.c (plaintext_format_setup),\ntta/perl/XSTexinfo/convert/ConvertInfoXS.xs (init),\ntta/perl/XSTexinfo/convert/ConvertPlaintextXS.xs (init): call\nplaintext_format_setup in XS modules init, unless the C command is\nused.  Avoid calling plaintext_format_setup twice, once for Plaintext,\nonce for Info and verify that it is not called twice for the same\ninitial format.\n\n* tta/C/convert/convert_to_plaintext.c (plaintext_process_footnotes)\n(plaintext_conversion_finalization),\ntta/C/main/plaintext_converter_state.h (PLAINTEXT_CONVERTER_STATE):\nuse copy for element labels.  Register new elements in converter\nadded_element new field and destroy them in\nplaintext_conversion_finalization.\n\n* tta/C/convert/convert_to_plaintext.c (plaintext_process_footnotes)\n(convert_to_plaintext_internal),\ntta/C/main/plaintext_converter_state.h (PENDING_FOOTNOTE): add\nTREE_ADDED_ELEMENTS added element field in PENDING_FOOTNOTE, put added\nelement generated when a footnote is used as item formatter in there\nand destroy the tree added elements in plaintext_process_footnotes.\n\n* tta/C/convert/convert_to_plaintext.c (plaintext_free_converter):\nfree lists.\n\n* tta/C/convert/convert_to_plaintext.c\n(convert_to_plaintext_internal): check if added text is not NULL\nbefore streaming, for definfoenclose command.\n\n* tta/C/convert/convert_to_plaintext.c\n(convert_to_plaintext_internal): fix format for footnote number.\n\n* tta/C/convert/convert_to_plaintext.c (destroy_count_context): free\nlocations lists.\n"
    },
    {
      "commit": "9f5a172165984a762fd6523334c6500b2c846a30",
      "tree": "eabab83f8aa963c9bc05700955ff5ea684c93919",
      "parents": [
        "0bd2eed4e910d0d60d537c6e2060b24f59e9dbe5"
      ],
      "author": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Thu Aug 13 00:51:57 2026 +0200"
      },
      "committer": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Thu Aug 13 00:51:57 2026 +0200"
      },
      "message": "C plaintext @abbr and @acronym and @inline*\n\n* tta/C/convert/convert_to_plaintext.c\n(convert_to_plaintext_internal): convert explained commands @abbr and\n@acronym and non-ignored @inline*.\n"
    },
    {
      "commit": "0bd2eed4e910d0d60d537c6e2060b24f59e9dbe5",
      "tree": "84c857574f5823225b24b6489b8daac7770e92a9",
      "parents": [
        "18c7551dc9fe0cbc5a33fc9e8f4b036a5676a4b0"
      ],
      "author": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Wed Aug 12 23:59:13 2026 +0200"
      },
      "committer": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Wed Aug 12 23:59:13 2026 +0200"
      },
      "message": "C plaintext @today, @email, @url/@uref\n\n* tta/C/convert/convert_to_plaintext.c\n(convert_to_plaintext_internal): implement conversion of @today,\n@email, and @url/@uref.\n"
    },
    {
      "commit": "18c7551dc9fe0cbc5a33fc9e8f4b036a5676a4b0",
      "tree": "1b2d30e662b4946cdc0fed3a6a861462f789103f",
      "parents": [
        "1eb2d4ba1eb1f80d8621b8e36d11779606d11a00"
      ],
      "author": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Wed Aug 12 23:05:17 2026 +0200"
      },
      "committer": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Wed Aug 12 23:05:17 2026 +0200"
      },
      "message": "C plaintext partial accents implementation, definfoenclose and @link\n\n* tta/C/convert/convert_to_plaintext.c\n(convert_to_plaintext_internal): implement accents conversion except\nfor uppercasing, implement definfoenclos\u0027ed command and @link\nconversion.\n"
    },
    {
      "commit": "1eb2d4ba1eb1f80d8621b8e36d11779606d11a00",
      "tree": "5a8fe46054f341038fcdeb513e40d448c3d0dfb4",
      "parents": [
        "2f0661094188e7cdd4eb831ae29193fc32f50a1e"
      ],
      "author": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Wed Aug 12 22:36:52 2026 +0200"
      },
      "committer": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Wed Aug 12 22:36:52 2026 +0200"
      },
      "message": "* tta/perl/Texinfo/Convert/PlaintextNonXS.pm (_convert): inline\nadd_index_entry_location in _convert and remove.\n\n* tta/C/convert/convert_to_info.c (info_format_node): reset th elines\ncount at the end of a node.\n\n* tta/C/convert/convert_to_plaintext.c (INDEX_ENTRY_LINE_COUNT_LIST)\n(plaintext_process_printindex, convert_to_plaintext_internal): collect\nindex entry location line count and node when encountering the\ncommand.  Use the information in printindex conversion.\n\n* tta/C/convert/convert_to_plaintext.c\n(convert_to_plaintext_internal): ignore inline commands that should be\nignored.\n"
    },
    {
      "commit": "2f0661094188e7cdd4eb831ae29193fc32f50a1e",
      "tree": "19e3668d528c2a9bde6e89d94a2587265fdb95cf",
      "parents": [
        "9a251f791896ef076a0ef2c6da1dac96796d4320"
      ],
      "author": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Wed Aug 12 21:37:59 2026 +0200"
      },
      "committer": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Wed Aug 12 21:37:59 2026 +0200"
      },
      "message": "* tta/C/main/convert_utils.c (item_itemize_prepended): uncomment.\n\n* tta/C/main/plaintext_converter_state.h (FORMAT_CONTEXT): fix typo.\n\n* tta/C/convert/convert_to_plaintext.c (fill_formatter): set\npara_set_conf_indent_length based on top_format_context\ncontext_indent_len if indent_length argument is set to -1.\n\n* tta/C/convert/convert_to_plaintext.c\n(convert_to_plaintext_internal): push and pop format_context for\nblock commands and set indenting.  Handle item in enumerate and itemize.\n"
    },
    {
      "commit": "9a251f791896ef076a0ef2c6da1dac96796d4320",
      "tree": "1461eba6eec28b0aa3afd02b1f28181996094d79",
      "parents": [
        "597959236d201ac3e24cf5f4f63123d0986f18d4"
      ],
      "author": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Wed Aug 12 17:32:26 2026 +0200"
      },
      "committer": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Wed Aug 12 17:32:26 2026 +0200"
      },
      "message": "* tta/C/convert/convert_to_plaintext.c\n(convert_to_plaintext_internal): handle item and itemx in @table,\n_suppress_styles and untranslated_def_line_arg types.\n"
    },
    {
      "commit": "597959236d201ac3e24cf5f4f63123d0986f18d4",
      "tree": "eb4a3e552959ffc462aaef55811edd58d2ae1e99",
      "parents": [
        "c99a109907b7b4ff7650108346ecc8cb95cabeaf"
      ],
      "author": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Wed Aug 12 16:30:28 2026 +0200"
      },
      "committer": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Wed Aug 12 16:30:28 2026 +0200"
      },
      "message": "tta/C/main/plaintext_converter_state.h: reindent struct\n"
    },
    {
      "commit": "c99a109907b7b4ff7650108346ecc8cb95cabeaf",
      "tree": "eb4d4706379c31f7f542985d96a46daac1950caf",
      "parents": [
        "e13e9185a50f972a41229e6df66ec3bce5b98c91"
      ],
      "author": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Wed Aug 12 16:29:32 2026 +0200"
      },
      "committer": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Wed Aug 12 16:29:32 2026 +0200"
      },
      "message": "* tta/C/main/plaintext_converter_state.h (FORMATTER): add\nsuppress_styles field.\n\n* tta/C/convert/convert_to_plaintext.c\n(plaintext_convert_line_new_context, plaintext_convert_node_name)\n(plaintext_cache_node_names, plaintext_process_printindex): add\nsuppress_styles and no_added_eol arguments to\nplaintext_convert_line_new_context.  Set no_added_eol and\nsuppress_styles.  Update callers.\n"
    },
    {
      "commit": "e13e9185a50f972a41229e6df66ec3bce5b98c91",
      "tree": "a66f49387fdacffa2e153417a701e4db026c3ad3",
      "parents": [
        "abe9b4dfcaf45432c789790219ee2e8a4caa0adb"
      ],
      "author": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Wed Aug 12 16:12:24 2026 +0200"
      },
      "committer": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Wed Aug 12 16:12:24 2026 +0200"
      },
      "message": "commands with empty braces argument and symbol commands in plaintext C\n\n* tta/C/convert/convert_to_plaintext.c (plaintext_format_setup)\n(convert_to_plaintext_internal),\ntta/C/main/plaintext_converter_state.h (FORMATTER): add no_added_eol\nFORMATTER field.  Convert commands with empty braces argument and\nsymbol commands in plaintext C converter.\n"
    },
    {
      "commit": "abe9b4dfcaf45432c789790219ee2e8a4caa0adb",
      "tree": "0e26a9affea313a814ee42c46a461665d9ee0567",
      "parents": [
        "3e10844c07258a994e079a8edd5e7610baafadc0"
      ],
      "author": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Wed Aug 12 14:44:49 2026 +0200"
      },
      "committer": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Wed Aug 12 14:44:49 2026 +0200"
      },
      "message": "Info tags table, @anchor and @namedanchor in C\n\n* tta/perl/Texinfo/Convert/InfoNonXS.pm (output): rearrange code.\n\n* tta/perl/Texinfo/Convert/PlaintextNonXS.pm (process_footnotes),\ntta/C/convert/convert_to_plaintext.c (plaintext_process_footnotes): do\nnot put line_arg nor leading and trailing spaces in generated footnote\nanchor argument.\n\n* tta/C/convert/convert_to_plaintext.c (anchor)\n(convert_to_plaintext_internal): handle @anchor and @namedanchor.\n\n* tta/C/convert/convert_to_plaintext.c\n(plaintext_add_target_location): rename add_target_location as\nplaintext_add_target_location and make extern.\n\n* tta/C/convert/convert_to_info.c (info_output): output tag table.\n\n* tta/C/convert/convert_to_info.c (info_format_node): call\nplaintext_add_target_location.\n"
    },
    {
      "commit": "3e10844c07258a994e079a8edd5e7610baafadc0",
      "tree": "6cbcc6233dd71a80cc70c5b8989edad8bb6d9062",
      "parents": [
        "f8b73eed4d5b3d8029df70cd89e644d5336553a1"
      ],
      "author": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Wed Aug 12 12:03:29 2026 +0200"
      },
      "committer": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Wed Aug 12 12:03:29 2026 +0200"
      },
      "message": "Separate plaintext target locations from index entries locations\n\n* tta/perl/Texinfo/Convert/PlaintextNonXS.pm (_convert): use\na counts hash for row.\n\n* tta/C/convert/convert_to_plaintext.c (TARGET_LOCATION_LIST)\n(add_target_location, plaintext_process_footnotes),\ntta/C/main/plaintext_converter_state.h (TARGET_LOCATION)\n(TARGET_LOCATION_LIST, INDEX_ENTRY_LINE_COUNT_LIST, COUNT_CONTEXT)\n(INDEX_ENTRY_INFO), tta/perl/Texinfo/Convert/InfoNonXS.pm\n(_info_header, format_node),\ntta/perl/Texinfo/Convert/PlaintextNonXS.pm (convert_tree)\n(add_target_location, add_index_entry_location)\n(_adjust_final_locations, _update_locations_counts)\n(process_footnotes, _align_lines, _align_environment, _anchor)\n(_convert): separate target_locations from index_entry_locations,\nadding add_target_location to add a target location and\nadd_index_entry_location to add an index entry location.  pass parent\ncount context to _update_locations_counts and merge locations with\nparent locations there.  Remove add_location.\n\n* tta/perl/Texinfo/Convert/PlaintextNonXS.pm (_convert): rename\n\u0027row_counts\u0027 format_context field as \u0027row_cell_counts\u0027.\n"
    },
    {
      "commit": "f8b73eed4d5b3d8029df70cd89e644d5336553a1",
      "tree": "5c7b458140e74bcb1af53ca4810183ad8e490d56",
      "parents": [
        "468471c657c0b65c7958108f6c6e5bce72b26248"
      ],
      "author": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Wed Aug 12 00:49:01 2026 +0200"
      },
      "committer": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Wed Aug 12 00:49:01 2026 +0200"
      },
      "message": "* tta/perl/Texinfo/Convert/PlaintextNonXS.pm (add_location): rename\nroot field as location_element and set for index entry elements too,\neven though it is not used in that case.  Update user.\n\n* tta/perl/Texinfo/Convert/InfoNonXS.pm (output): use variable for\n$location-\u003e{\u0027location_element\u0027}, rename $label as $location.\n\n* tta/perl/Texinfo/Convert/PlaintextNonXS.pm (process_printindex)\n(_convert): rename index_entries_line_location field as\nindex_entry_info.  Put \u0027node\u0027 in {\u0027index_entry_info\u0027}-\u003e{$element},\nnot in location.  Do not set {\u0027index_entry_info\u0027}-\u003e{$element}\nto the location, but instead add a \u0027location\u0027 field pointing to\nthe location.\n\n* tta/C/convert/convert_to_plaintext.c\n(plaintext_conversion_initialization, plaintext_process_printindex),\n(plaintext_conversion_finalization),\ntta/C/main/plaintext_converter_state.h (INDEX_ENTRY_INFO)\n(PLAINTEXT_CONVERTER_STATE): allocate in\nplaintext_conversion_initialization a structure holding conversion\ninformation of index entries, by sorted index name index and index\nentry number in original index.  Use it in\nplaintext_process_printindex instead of local array.\n"
    },
    {
      "commit": "468471c657c0b65c7958108f6c6e5bce72b26248",
      "tree": "9506b0cba400f7b0e08a1911f5bb2ad5a7e9ede4",
      "parents": [
        "13e8b03dfb0915a1632f38c0f79869fecd494d55"
      ],
      "author": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Tue Aug 11 18:39:01 2026 +0200"
      },
      "committer": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Tue Aug 11 18:39:01 2026 +0200"
      },
      "message": "Implement footnotes and output encoding in plaintext C converter\n\n* tta/perl/Texinfo/Convert/PlaintextNonXS.pm: move code around.\n\n* tta/perl/Texinfo/Convert/PlaintextNonXS.pm (add_location): comment\nout setting index_entry as it is never used.\n\n* tta/perl/Texinfo/Convert/PlaintextNonXS.pm (process_footnotes): fix\nfield name.\n\n* tta/C/convert/convert_to_plaintext.c (push_top_formatter): add top\ncontext command argument, push it to the context stack.  Update\ncallers.\n\n* tta/C/convert/convert_to_plaintext.c (pop_context): add as a wrapper\nfor pop_(command) that returns the popped cmd.\n\n* tta/C/convert/convert_to_plaintext.c (pop_top_formatter)\n(plaintext_conversion_finalization): add pop_top_formatter and call\nit in plaintext_conversion_finalization.  In pop_top_formatter use\npop_(formatter) instead of pop_formatter if the last context is\npopped, as there is no formatter left when the last formatter is\npopped.\n\n* tta/C/convert/convert_to_plaintext.c\n(convert_to_plaintext_internal): push and pop @math command on\ncontext stack.  Pop context stack for PF_preformatted_context and\nfloat commands.\n\n* tta/C/convert/convert_to_plaintext.c (destroy_count_context)\n(stream_reset, stream_output, stream_output_add_text),\ntta/C/main/plaintext_converter_state.h (COUNT_CONTEXT): distinguish\npending_text, which is utf-8, and result text, which is encoded in the\noutput encoding.  Add pending_text and encoding_disabled fields in\nCOUNT_CONTEXT.  Use pending_text where if should be.\n\n* tta/C/convert/convert_to_plaintext.c (stream_encode)\n(stream_byte_count, stream_output_encoded, stream_result)\n(stream_yield_result), tta/C/main/plaintext_converter_state.h\n(PLAINTEXT_CONVERTER_STATE): add encoding_object field in\nPLAINTEXT_CONVERTER_STATE.  Add stream_encode,\nstream_byte_count and implement stream_output_encoded.  Call\nstream_byte_count where it should be.\n\n* tta/C/convert/convert_to_plaintext.c (add_location),\ntta/C/main/plaintext_converter_state.h (LOCATION, LOCATION_LIST)\n(COUNT_CONTEXT): locations lists types and list functions, add to\nCOUNT_CONTEXT.\n\n* tta/C/convert/convert_to_info.c (info_header, info_output),\ntta/C/convert/convert_to_plaintext.c (pending_footnote)\n(plaintext_process_footnotes, convert_to_plaintext_internal)\n(plaintext_convert_output_unit),\ntta/C/main/plaintext_converter_state.h (PENDING_FOOTNOTE)\n(PENDING_FOOTNOTE_LIST, PLAINTEXT_CONVERTER_STATE): Add\nPENDING_FOOTNOTE and related types and functions.  Add multiple_pass,\nfootnote_index and pending_footnotes fields to\nPLAINTEXT_CONVERTER_STATE.  Implement plaintext_process_footnotes and\nconversion of footnotes.  Call plaintext_process_footnotes.\n"
    },
    {
      "commit": "13e8b03dfb0915a1632f38c0f79869fecd494d55",
      "tree": "730f85327210525ddd3480a3ff3bf6c32357b6a9",
      "parents": [
        "8bb8cdd0de8bf8d1e93d3553bb45bbcc207f5e88"
      ],
      "author": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Mon Aug 10 21:10:21 2026 +0200"
      },
      "committer": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Mon Aug 10 21:10:21 2026 +0200"
      },
      "message": "* tta/C/convert/convert_to_info.c (info_output),\ntta/C/convert/convert_to_plaintext.c (plaintext_cache_node_names):\nimplement plaintext_cache_node_names and call for Info output.\n"
    },
    {
      "commit": "8bb8cdd0de8bf8d1e93d3553bb45bbcc207f5e88",
      "tree": "119e62b443b986c7680e101dbf6b76e252d43d04",
      "parents": [
        "11e06bf643c2c2de47a5e04970f25e4b2f238348"
      ],
      "author": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Mon Aug 10 19:26:16 2026 +0200"
      },
      "committer": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Mon Aug 10 19:26:16 2026 +0200"
      },
      "message": "* tta/C/convert/convert_to_info.c (info_output): handle invalid\ndocumentscript.\n\n* tta/C/convert/convert_to_plaintext.c (plaintext_process_printindex):\nunallocate \"(outside of any node)\" translated tree.\n\n* tta/C/convert/convert_to_plaintext.c\n(convert_to_plaintext_internal): handle @math without argument.\n\n* tta/C/convert/convert_to_plaintext.c\n(convert_to_plaintext_internal): stream and free the prepared text.\n\n* tta/C/convert/html_conversion_state.c\n(html_unset_multiple_conversions)\n(html_close_registered_sections_level), tta/C/main/command_stack.c\n(pop_string_stack): add pop_string_stack that frees the top string\nbefore calling pop_(string).  Use it instead of pop_(string).\n"
    },
    {
      "commit": "11e06bf643c2c2de47a5e04970f25e4b2f238348",
      "tree": "fab31f8b6af86d366d10494d6d5f67a0150c8787",
      "parents": [
        "d5b54e35d7b903d17b520f1ffc8c421a41e84aea"
      ],
      "author": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Mon Aug 10 18:42:58 2026 +0200"
      },
      "committer": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Mon Aug 10 18:42:58 2026 +0200"
      },
      "message": "* tta/C/convert/convert_to_plaintext.c\n(convert_to_plaintext_internal): do not call return on format_contents\ndispatched function, it is a function returning void and is called in\na void function.\n\n* tta/C/convert/convert_to_plaintext.c\n(convert_to_plaintext_internal): set text_before and text_after to\nempty string in case of bug.\n\n* tta/C/convert/convert_to_plaintext.c (ensure_end_of_line): add.\n\n* tta/C/convert/convert_to_info.c (info_output),\ntta/C/convert/convert_to_plaintext.c\n(plaintext_conversion_finalization, convert_to_plaintext_internal),\ntta/C/main/plaintext_converter_state.h (PLAINTEXT_CONVERTER_STATE):\nadd text_before_first_node field in PLAINTEXT_CONVERTER_STATE, set and\nuse text_before_first_node.\n\n* tta/C/convert/convert_to_plaintext.c\n(convert_to_plaintext_internal): add some conditions for now existing\nelements, and use braces instead of ; when there is no code yet.\n"
    },
    {
      "commit": "d5b54e35d7b903d17b520f1ffc8c421a41e84aea",
      "tree": "4b9f43e1025e1719fbf2be5c74af8c41cbf6ddf0",
      "parents": [
        "1ecf4142e877be13f9800a54115bb115356a63d7"
      ],
      "author": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Mon Aug 10 17:09:14 2026 +0200"
      },
      "committer": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Mon Aug 10 17:09:14 2026 +0200"
      },
      "message": "* tta/C/convert/call_embed_perl.c, tta/C/main/call_perl_function.c\n(call_eval_use_module): move call_eval_use_module call_perl_function.c\nsuch that it can be called from converters.\n"
    },
    {
      "commit": "1ecf4142e877be13f9800a54115bb115356a63d7",
      "tree": "00f65747e4f8043507a356dcc04382a8fd1d7575",
      "parents": [
        "4eabe8b421e22677d369efb083144621ee3fbabb"
      ],
      "author": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Mon Aug 10 13:44:02 2026 +0200"
      },
      "committer": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Mon Aug 10 13:44:02 2026 +0200"
      },
      "message": "Add forgotten files (report from Bruno)\n"
    },
    {
      "commit": "4eabe8b421e22677d369efb083144621ee3fbabb",
      "tree": "80c874a91c31413287f88c991251588a823a5965",
      "parents": [
        "5d9e567e6decb82c7abcace81cbe8075bfd38e7b"
      ],
      "author": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Mon Aug 10 12:03:09 2026 +0200"
      },
      "committer": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Mon Aug 10 12:03:09 2026 +0200"
      },
      "message": "informative and unknown commands in plaintext C converter\n\n* tta/C/convert/convert_to_plaintext.c\n(convert_to_plaintext_internal): handle informative commands, switch\nlanguage.  Handle unknown command.\n\n* tta/perl/Texinfo/Convert/PlaintextNonXS.pm (_convert): remove\nthe $unknown_command variable.\n"
    },
    {
      "commit": "5d9e567e6decb82c7abcace81cbe8075bfd38e7b",
      "tree": "670166d3febe7591c55d5575ebaf4bdd7b24e0da",
      "parents": [
        "94a21ffabf4db24bc4201df513743f2bd9a5b3bd"
      ],
      "author": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Mon Aug 10 00:47:05 2026 +0200"
      },
      "committer": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Mon Aug 10 00:47:05 2026 +0200"
      },
      "message": "* doc/texinfo.texi (Info Format Local Variables): document the\nlanguage script and variants local variables.\n"
    },
    {
      "commit": "94a21ffabf4db24bc4201df513743f2bd9a5b3bd",
      "tree": "d657eef883c647a6d6fac0494ab691f17f9d892f",
      "parents": [
        "4995ffd3e43f05ee168452237071e3705202b851"
      ],
      "author": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Sun Aug 09 23:57:15 2026 +0200"
      },
      "committer": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Sun Aug 09 23:57:15 2026 +0200"
      },
      "message": "* tta/C/main/command_stack.c: use list macros for STRING_LIST string\nstack.\n"
    },
    {
      "commit": "4995ffd3e43f05ee168452237071e3705202b851",
      "tree": "c0ec7f48750aa3c20f5c4093d8409c8321f7d4e4",
      "parents": [
        "36f4aac1fd584fad7c28cfec885ac39d039a5113"
      ],
      "author": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Sun Aug 09 23:41:12 2026 +0200"
      },
      "committer": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Sun Aug 09 23:41:12 2026 +0200"
      },
      "message": "Replace STRING_STACK by STRING_LIST and remove\n\n* tta/C/main/converter_types.h: replace STRING_STACK by STRING_LIST\nand remove STRING_STACK.  Replace in all users of the type.\n\n* tta/C/main/command_stack.c: remove clear_string_stack, replace by\nclear_strings_list in the user.\n"
    },
    {
      "commit": "36f4aac1fd584fad7c28cfec885ac39d039a5113",
      "tree": "5946c885b3badc4883f31cfa51cbcbe39eac6b0e",
      "parents": [
        "495d88b80296519e28143efd40f9003028602fdd"
      ],
      "author": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Sun Aug 09 23:21:15 2026 +0200"
      },
      "committer": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Sun Aug 09 23:21:15 2026 +0200"
      },
      "message": "* tta/C/main/command_stack.c: use list macros for ELEMENT_REFERENCE\nELEMENT_REFERENCE_STACK stack.\n"
    },
    {
      "commit": "495d88b80296519e28143efd40f9003028602fdd",
      "tree": "e9a1b2e0515d01b68a9f2d12087a5a06e7790994",
      "parents": [
        "3113c1450e8740e667775fff3423ff82ee3c09b8"
      ],
      "author": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Sun Aug 09 22:04:50 2026 +0200"
      },
      "committer": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Sun Aug 09 22:20:39 2026 +0200"
      },
      "message": "* tta/C/main/command_stack.c (push_element_reference_stack_element):\nfix type in sizeof.\n\n* tta/C/main/command_stack.c: replace ELEMENT_STACK type by\nCONST_ELEMENT_LIST type.  Use stack macros for const ELEMENT *\nCONST_ELEMENT_LIST stack.  Remove ELEMENT_STACK by removing\ndef_list_type call on ELEMENT_STACK in document_types.h.\n"
    },
    {
      "commit": "3113c1450e8740e667775fff3423ff82ee3c09b8",
      "tree": "8c35c04d9b103cb98ee5bd22ca04b0b217ae93c6",
      "parents": [
        "203f3d434d6ed9a174aae975acfb2582e30a23c6"
      ],
      "author": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Sun Aug 09 21:28:39 2026 +0200"
      },
      "committer": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Sun Aug 09 22:20:39 2026 +0200"
      },
      "message": "* tta/C/main/command_stack.c: use list macros for int integer stack.\n"
    },
    {
      "commit": "203f3d434d6ed9a174aae975acfb2582e30a23c6",
      "tree": "5444905166fa3842ab1310ec19127cda3d910a1e",
      "parents": [
        "13d6631d6477ec75ab4e15aae5e1e6758d1b8a95"
      ],
      "author": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Sun Aug 09 21:22:15 2026 +0200"
      },
      "committer": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Sun Aug 09 22:20:39 2026 +0200"
      },
      "message": "* tta/C/main/command_stack.c: use list macros for enum command_id\ncommand stack.\n"
    },
    {
      "commit": "13d6631d6477ec75ab4e15aae5e1e6758d1b8a95",
      "tree": "6562fd839db9a7dfa2203a53611b5c0916f2171b",
      "parents": [
        "a66a874a9eded462fec565337c84a9561fcdf55b"
      ],
      "author": {
        "name": "Gavin Smith",
        "email": "gavinsmith0123@gmail.com",
        "time": "Sun Aug 09 19:18:56 2026 +0100"
      },
      "committer": {
        "name": "Gavin Smith",
        "email": "gavinsmith0123@gmail.com",
        "time": "Sun Aug 09 19:19:37 2026 +0100"
      },
      "message": "* doc/texinfo.texi (Fonts) \u003c@fonttextsize\u003e: State that this command\nis recommended for use with texinfo.tex only.\n"
    },
    {
      "commit": "a66a874a9eded462fec565337c84a9561fcdf55b",
      "tree": "96408558b3d3103a76fac38e817364427abc9563",
      "parents": [
        "f51199aad3095ac336491c0095eb02676e4dfaa0"
      ],
      "author": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Sun Aug 09 16:50:37 2026 +0200"
      },
      "committer": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Sun Aug 09 16:50:37 2026 +0200"
      },
      "message": "INFO_MATH_IMAGES, C plaintext block command flags, math displaymath\n\n* tta/C/convert/convert_to_info.c (info_format_image): have dpi and\ndepth arguments be integers.\n\n* tta/C/main/utils.c (collect_commands_in_tree_internal)\n(collect_commands_in_tree): implement collect_commands_in_tree.\n\n* tta/perl/Texinfo/Convert/InfoNonXS.pm (convert_math_to_images):\nreturn the collected_commands too, to simplify passing information to\nC.\n\n* tta/perl/Texinfo/Convert/PlaintextNonXS.pm\n(%preformatted_context_commands, %format_context_commands): rename\ndefault_preformatted_context_commands as preformatted_context_commands\nand default_format_context_commands as format_context_commands.\nRemove unused %block_math_commands.\n\n* tta/perl/Texinfo/Convert/PlaintextNonXS.pm (_insert_image): rename\n$lines_count as $line_count.\n\n* tta/C/convert/convert_to_plaintext.h (MATH_ELEMENT_IMAGE)\n(MATH_ELEMENTS_IMAGES, PLAINTEXT_CONVERTER_STATE): add types related\nto INFO_MATH_IMAGES.  add element_images field in\nPLAINTEXT_CONVERTER_STATE.\n\n* tta/C/Makefile.am (libcallperl_libtexinfo_convert_la_SOURCES)\n(libtexinfo_convert_static_la_SOURCES, texistatic_SOURCES),\ntta/C/convert/call_plaintext_perl_function.c\n(call_latex_convert_math_to_images): add\ncall_plaintext_perl_function.c for call_latex_convert_math_to_images\nthat calls convert_math_to_images in Perl and get the information\nin MATH_ELEMENTS_IMAGES from Perl.\n\n* tta/C/convert/convert_to_info.c (info_output): if INFO_MATH_IMAGES,\ncall call_latex_convert_math_to_images to set element_images in\nconverter.\n\n* tta/C/convert/convert_to_plaintext.c (item_indent_format_length)\n(plaintext_format_setup), tta/C/convert/convert_to_plaintext.h (PF_*)\n(PLAINTEXT_COMMAND_STRUCT): set flags in plaintext_format_setup for\nblock commands.  Add indent_format_length field in\nPLAINTEXT_COMMAND_STRUCT for item_indent_format_length commands\nindent length.\n\n* tta/C/convert/convert_to_plaintext.c (PLAINTEXT_FORMAT_FUNCTIONS)\n(plaintext_format_image, plaintext_functions): add format_image field\nin PLAINTEXT_FORMAT_FUNCTIONS to dispatch *_format_image.  Add\nplaintext_format_image as a no-op.\n\n* tta/C/convert/convert_to_plaintext.c (plaintext_insert_image)\n(convert_to_plaintext_internal),\ntta/C/main/plaintext_converter_state.h (PLAINTEXT_CONVERTER_STATE):\nadd context field in PLAINTEXT_CONVERTER_STATE.  Implement @math\nformatting in plaintext and partial formatting of block commands\nfor @displaymath formatting with INFO_MATH_IMAGES.\n\n* tta/C/texi2any.c (main): handle INFO_MATH_IMAGES not set at all.\n\n* tta/C/convert/convert_to_info.c (info_format_image): use\ntemporarily \\x01 instead of \\x00 NUL for image quoting in Info to\nhave a visible output.\n"
    },
    {
      "commit": "f51199aad3095ac336491c0095eb02676e4dfaa0",
      "tree": "86cfebe63dcabd6aa3fe275fb4a8c806a29609cd",
      "parents": [
        "842a094128b32d7050e5c601275195bc90bc962c"
      ],
      "author": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Sat Aug 08 20:14:13 2026 +0200"
      },
      "committer": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Sat Aug 08 20:14:13 2026 +0200"
      },
      "message": "* tta/C/convert/convert_to_info.c (info_output),\ntta/perl/Texinfo/Convert/InfoNonXS.pm (output): use script name\ncorresponding to XPG locales if possible for Info-documentscript.\n"
    },
    {
      "commit": "842a094128b32d7050e5c601275195bc90bc962c",
      "tree": "8fc4403cac794949f1f7a982fd7a05a2e82e89ea",
      "parents": [
        "4cc71c3cba944ad5d828e0f68c4c02970743a685"
      ],
      "author": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Sat Aug 08 19:47:14 2026 +0200"
      },
      "committer": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Sat Aug 08 19:47:14 2026 +0200"
      },
      "message": "* tta/C/Makefile.am (C_libtexinfo_sources),\ntta/maintain/regenerate_documentlanguages-iana.pl: add a gperf hash\nassociating an ISO 15924 tag to an alias as used in XPG locales.\n"
    },
    {
      "commit": "4cc71c3cba944ad5d828e0f68c4c02970743a685",
      "tree": "c732fec3a164dbb1837bd377d7bd9c8006e2ec11",
      "parents": [
        "071d1a5eaba8657a951d9675996316b6439b1287"
      ],
      "author": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Sat Aug 08 19:43:47 2026 +0200"
      },
      "committer": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Sat Aug 08 19:43:47 2026 +0200"
      },
      "message": "Update IANA language data\n"
    },
    {
      "commit": "071d1a5eaba8657a951d9675996316b6439b1287",
      "tree": "87f5c608c128e1323a74a291bd49a75567811ffd",
      "parents": [
        "36f2dca4f4f45eaa38a2c5cbb7be7f6b141d9cd1"
      ],
      "author": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Sat Aug 08 14:54:06 2026 +0200"
      },
      "committer": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Sat Aug 08 14:54:06 2026 +0200"
      },
      "message": "Set Info-document* language related variable in Info based on preamble\n\n* tta/C/convert/convert_to_info.c (info_output),\ntta/perl/Texinfo/Convert/InfoNonXS.pm (output):\n\n* tta/perl/Texinfo/Translations.pm (_set_lang_info_translation):\nalways set \u0027bcp47_locale\u0027 even if there is a translation cache.\n\n* tta/perl/t/languages.t (multiple_in_preamble): use a language with\nregion at the end of the preamble.\n\n* tta/tests/formatting/no_detailmenu_lang_at_begin_end.texi: set\n@documentscript, to an alias.\n"
    },
    {
      "commit": "36f2dca4f4f45eaa38a2c5cbb7be7f6b141d9cd1",
      "tree": "24c33ede77b5c08cb29e472fb23536bb6e0631cd",
      "parents": [
        "11ddf08567512a51ed402bc38fe7c2085ae4621e"
      ],
      "author": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Sat Aug 08 10:35:09 2026 +0200"
      },
      "committer": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Sat Aug 08 10:35:09 2026 +0200"
      },
      "message": "* contrib/mass_test/output_ConvertXS_perlVSC.sh,\ncontrib/mass_test/setup_reference_perlVSC.sh: use TEXINFO_XS instead\nof TEXINFO_XS_* now removed variables.\n\n* tta/C/texi2any.c (main): set need_latex to require embedded Perl if\nCONVERT_TO_LATEX_IN_MATH is explicitly set.\n\n* tta/perl/Texinfo/XSLoader.pm: update and rearrange comments.\n\n* tta/swig/perl/t/20index_sort.t: remove code and comment not relevant\nanymore now that Perl modules are never loaded from SWIG.\n"
    },
    {
      "commit": "11ddf08567512a51ed402bc38fe7c2085ae4621e",
      "tree": "7247647cee09e7a23363b1f338e07281102ca124",
      "parents": [
        "eecb2c2eda07fe08d2b5a913de0aefec8cf1381d"
      ],
      "author": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Fri Aug 07 22:14:51 2026 +0200"
      },
      "committer": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Fri Aug 07 22:14:51 2026 +0200"
      },
      "message": "* tta/C/structuring_transfo/structuring.c (sectioning_targets),\ntta/perl/Texinfo/StructuringNonXS.pm (sectioning_targets): do not set\nan identifier with postpended disambiguation string for sectioning\ncommands, instead do not add any identifier at all.  Also remove\nmost of protection in target tree, as it is only used to generate an\nidentifier.\n"
    },
    {
      "commit": "eecb2c2eda07fe08d2b5a913de0aefec8cf1381d",
      "tree": "8a0a16a1f614920ddeae363b350a14c5a2b341a9",
      "parents": [
        "3b546c1962a49317266fa01d69f0485fd711cbc8"
      ],
      "author": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Fri Aug 07 18:28:23 2026 +0200"
      },
      "committer": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Fri Aug 07 18:28:23 2026 +0200"
      },
      "message": "Add missing test result new files\n"
    },
    {
      "commit": "3b546c1962a49317266fa01d69f0485fd711cbc8",
      "tree": "1c297b60b6cd776922e24023a0b0eacf7a58ad20",
      "parents": [
        "e4b908234a69cd65cd1ebf4ed362a35b3586b1ea"
      ],
      "author": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Fri Aug 07 18:22:58 2026 +0200"
      },
      "committer": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Fri Aug 07 18:22:58 2026 +0200"
      },
      "message": "* tta/perl/t/init/translation_in_parser_in_translation.pm: add braced\nsubstrings in translation, such that the elements are destroyed when\nthe translated tree is destroyed, avoiding a memory leak.  Avoiding\nthe memory leak is not important, as it is small and unlikely in real\ncases, but it make checking for memory leaks more tedious.\n"
    },
    {
      "commit": "e4b908234a69cd65cd1ebf4ed362a35b3586b1ea",
      "tree": "2758e890d9ad637d7ba10efc725b6761c3841102",
      "parents": [
        "1425ce37ace46c72188781b2fe4f12bb260cad76"
      ],
      "author": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Fri Aug 07 18:12:59 2026 +0200"
      },
      "committer": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Fri Aug 07 18:12:59 2026 +0200"
      },
      "message": "* tta/C/convert/convert_indices.c\n(index_entry_first_letter_text_or_command): always destroy\nparsed_element.\n\n* tta/C/structuring_transfo/structuring.c (sectioning_targets):\ndestroy node tree after having determined the possible identifier\nstring.\n\n* tta/C/main/manipulate_indices.c (get_index_content_info_element):\nalways set name_copy_out and class_copy_out even though it is not\nneeded as it is easier to check the results when debugging calling\ncode.\n\n* tta/C/main/manipulate_tree.c (print_source_marks)\n(print_element_add_prepend_info, print_element_info)\n(print_element_extra, print_element_details, print_tree_details)\n(tree_print_details): add an argument to show element pointers, that\ncan be set for debugging.  Update callers.\n"
    },
    {
      "commit": "1425ce37ace46c72188781b2fe4f12bb260cad76",
      "tree": "6b1f882d668db800145bd04c71526c937a840535",
      "parents": [
        "b22dbe8af5e05937308f05c74faca21b0c5f43a5"
      ],
      "author": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Fri Aug 07 14:32:50 2026 +0200"
      },
      "committer": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Fri Aug 07 14:32:50 2026 +0200"
      },
      "message": "* tta/C/main/manipulate_tree.c (reference_to_arg_internal)\n(reference_to_arg_in_tree),\ntta/C/structuring_transfo/transformations.c,\ntta/perl/Texinfo/ManipulateTree.pm (_reference_to_arg)\n(reference_to_arg_in_tree), tta/perl/Texinfo/Transformations.pm:\nmove reference_to_arg_in_tree to ManipulateTree, as it is now used by\nstructuring code.  Update callers.\n"
    },
    {
      "commit": "b22dbe8af5e05937308f05c74faca21b0c5f43a5",
      "tree": "78d64236142353ccbc2249b361ac239a7af73ac1",
      "parents": [
        "fbe2257a4c746f895b3a8e92511fa22242221555"
      ],
      "author": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Fri Aug 07 14:00:43 2026 +0200"
      },
      "committer": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Fri Aug 07 14:00:43 2026 +0200"
      },
      "message": "Add target to sectioning commands without node\n\n* tta/C/convert/format_html.c (compare_element_target)\n(find_element_target_search, tta/C/convert/html_prepare_converter.c\n(reset_html_targets_list, add_element_target_to_list)\n(compare_element_target, check_targets_order, sort_cmd_targets),\ntta/C/main/html_converter_state.h (HTML_TARGET_LIST):\nstore HTML_TARGET pointers in HTML_TARGET_LIST, such that their\naddress does not change after a realloc of the list.\n\n* tta/C/convert/html_prepare_converter.c (html_register_id): associate\nthe target identifier to the element_target for target commands and\nroot commands.  Update callers.\n\n* tta/C/structuring_transfo/structuring.c (sectioning_targets),\ntta/C/structuring_transfo/transformations.c\n(complete_transform_document), tta/perl/Texinfo/StructuringNonXS.pm\n(sectioning_targets),\ntta/perl/XSTexinfo/parser_document/StructuringXS.xs\n(sectioning_targets), tta/perl/t/test_utils.pl (test),\ntta/perl/texi2any.pl: add sectioning commands without nodes as\ntargets, taking care about not replacing a node, anchor or float\ntarget.  Warn if two sectioning commands added as targets have the\nsame associated target.\n\n* tta/C/convert/html_prepare_converter.c\n(new_sectioning_command_target), tta/perl/Texinfo/Convert/HTMLNonXS.pm\n(_new_sectioning_command_target): modify setting up targets of\nsectioning commands, to reuse and complete target of sectioning\ncommands not associated to a node that already have an associated\ntarget.\n\n* tta/perl/Texinfo/Convert/PlaintextNonXS.pm (process_footnotes):\nalways add a footnotes in the node and not as a separate node if\nthe associated command is not a node.\n"
    },
    {
      "commit": "fbe2257a4c746f895b3a8e92511fa22242221555",
      "tree": "9b8ea5ee679b3c6f053996fedaf5246c2285effe",
      "parents": [
        "ed2eb113d6ab61d96b09e57f6027c79116dc5262"
      ],
      "author": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Thu Aug 06 19:22:45 2026 +0200"
      },
      "committer": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Thu Aug 06 19:22:45 2026 +0200"
      },
      "message": "* tta/C/main/build_perl_info.c (element_to_perl_hash)\n(print_element_extra), tta/C/main/tree_types.h (EF_added),\ntta/C/structuring_transfo/transformations.c (new_node),\ntta/perl/Texinfo/TransformationsNonXS.pm (_new_node): add added flag\nto added elements, when needed.  Add for added nodes, such that they\ncan be distinguished from original Texinfo manual nodes.\n\n* tta/C/structuring_transfo/transformations.c (new_node),\ntta/perl/Texinfo/TransformationsNonXS.pm (_new_node): pass\nassociated sectioning command.  Warn if a new node has already been\nadded.\n\n* tta/perl/Texinfo/Structuring.pm (_insert_menu_comment_content):\nhandle a sectioning command with a missing argument.\n\n* tta/C/structuring_transfo/transformations.c (new_node),\ntta/perl/Texinfo/TransformationsNonXS.pm (_new_node): use the\nassociated command as source info for a new node.\n\n* tta/C/main/utils.c (get_label_element), tta/perl/Texinfo/Common.pm\n(get_label_element): handle root command more generally, not only\nnode.\n"
    },
    {
      "commit": "ed2eb113d6ab61d96b09e57f6027c79116dc5262",
      "tree": "435ff6bc9a43d7c89052cde17dc350de04713bb8",
      "parents": [
        "79a2f1c9552a694c04cab8a3adf998cefbf39348"
      ],
      "author": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Thu Aug 06 08:07:04 2026 +0200"
      },
      "committer": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Thu Aug 06 08:07:04 2026 +0200"
      },
      "message": "* tta/perl/Texinfo/TransformationsNonXS.pm (_new_node),\ntta/C/structuring_transfo/transformations.c (new_node): decorate\nappended disambiguating prefix based on a number as [+1+] to make\nclearer that it is not a good idea to use that node name as target.\n"
    },
    {
      "commit": "79a2f1c9552a694c04cab8a3adf998cefbf39348",
      "tree": "0a800c6dd3ae2ea8dd52adc7d242eece52e1f5a0",
      "parents": [
        "ecdfc0d632b9e6c5cf314d2140e19dc7026ff114"
      ],
      "author": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Thu Aug 06 00:19:11 2026 +0200"
      },
      "committer": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Thu Aug 06 00:19:11 2026 +0200"
      },
      "message": "* doc/generate_html_doc_texi.pl (BEGIN),\ntta/perl/Texinfo/ModulePath.pm.in (init): add tta/perl from build\ndirectory to @INC to find generated modules, for now\nTexinfo::Configure.\n"
    },
    {
      "commit": "ecdfc0d632b9e6c5cf314d2140e19dc7026ff114",
      "tree": "b900528f06aef686cd8ddde54b52fb8f8db0fc69",
      "parents": [
        "c079d4b72fe853219c132abad10f08aa8a17aa95"
      ],
      "author": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Wed Aug 05 22:25:11 2026 +0200"
      },
      "committer": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Wed Aug 05 22:25:11 2026 +0200"
      },
      "message": "* tta/perl/Texinfo/Convert/LaTeX.pm (_latex_header): set language\u003d in\n\\DocumentMetadata instead of lang\u003d, as lang can derive from language\naccording to the documentation.\n"
    },
    {
      "commit": "c079d4b72fe853219c132abad10f08aa8a17aa95",
      "tree": "da30a9bb442d27d5b758254f77ffcdcb49d20763",
      "parents": [
        "514b6b209e66ef1c1a6c90dd8ecbcca1388286ab"
      ],
      "author": {
        "name": "Gavin Smith",
        "email": "gavinsmith0123@gmail.com",
        "time": "Wed Aug 05 21:01:09 2026 +0100"
      },
      "committer": {
        "name": "Gavin Smith",
        "email": "gavinsmith0123@gmail.com",
        "time": "Wed Aug 05 21:01:28 2026 +0100"
      },
      "message": "* tta/perl/Texinfo/Convert/LaTeX.pm (_latex_header):\nRemove \"arc\u003d10pt\" from tcolorbox argument.\n"
    },
    {
      "commit": "514b6b209e66ef1c1a6c90dd8ecbcca1388286ab",
      "tree": "bbc036c864403e10a4c0173fbef324d825784612",
      "parents": [
        "107cd4184737a495733cd7ed6e69837353e9e917"
      ],
      "author": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Wed Aug 05 20:10:50 2026 +0200"
      },
      "committer": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Wed Aug 05 20:11:10 2026 +0200"
      },
      "message": "* doc/Makefile.am (pod2texi.texi), doc/tta_api/Makefile.am\n(texi2any_internals.texi): add TEXINFO_XS\u003domit to the environement\nsuch that pod2texi does not fail even if the XS modules are not built\nalready.  This happens with make distcheck after make\nmaintainer-clean.\n"
    },
    {
      "commit": "107cd4184737a495733cd7ed6e69837353e9e917",
      "tree": "815732661d7c68f7fff4888acec5d0a642369161",
      "parents": [
        "af608fc40077698c38535a438826a576093863c1"
      ],
      "author": {
        "name": "Gavin Smith",
        "email": "gavinsmith0123@gmail.com",
        "time": "Wed Aug 05 18:01:22 2026 +0100"
      },
      "committer": {
        "name": "Gavin Smith",
        "email": "gavinsmith0123@gmail.com",
        "time": "Wed Aug 05 18:01:22 2026 +0100"
      },
      "message": "* tta/perl/Texinfo/Convert/LaTeX.pm (_latex_header):\nElaborate on comment re \"alt\" key with graphicx package slightly.\n"
    },
    {
      "commit": "af608fc40077698c38535a438826a576093863c1",
      "tree": "707ec0dfbfb6088902cf675810408b5295a03e59",
      "parents": [
        "4389ee4f3384f0b4a932e9f12ddf5f8c10640c20"
      ],
      "author": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Wed Aug 05 16:52:59 2026 +0200"
      },
      "committer": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Wed Aug 05 16:52:59 2026 +0200"
      },
      "message": "update po files\n"
    },
    {
      "commit": "4389ee4f3384f0b4a932e9f12ddf5f8c10640c20",
      "tree": "7f51aa1175fea695686638d21dfd816860c0190c",
      "parents": [
        "25eb56268318a5ba45f075edb18b4ecda868007f"
      ],
      "author": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Wed Aug 05 16:49:51 2026 +0200"
      },
      "committer": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Wed Aug 05 16:49:51 2026 +0200"
      },
      "message": "* tta/C/convert/convert_to_plaintext.c (plaintext_process_printindex):\nfix strings for outside_of_any_node_text.\n"
    },
    {
      "commit": "25eb56268318a5ba45f075edb18b4ecda868007f",
      "tree": "bdbac52c7dc0ed5e6f3813dadd9fe0759267c0cc",
      "parents": [
        "9169794143d84e71b85f31cfcf583874878c6fcf"
      ],
      "author": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Wed Aug 05 16:41:30 2026 +0200"
      },
      "committer": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Wed Aug 05 16:41:30 2026 +0200"
      },
      "message": "* po/POTFILES.in, po_document/POTFILES.in: udpate.\n"
    },
    {
      "commit": "9169794143d84e71b85f31cfcf583874878c6fcf",
      "tree": "b3e5be96957d33b6419a0682cfdef6d37604c939",
      "parents": [
        "41d16c651c74a9e032c9c3ac8c09f20c17804861"
      ],
      "author": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Wed Aug 05 16:24:15 2026 +0200"
      },
      "committer": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Wed Aug 05 16:24:15 2026 +0200"
      },
      "message": "Separate Perl module for information passed from configure\n\n* Makefile.am (BUILT_SOURCES, tta/perl/Texinfo/Configure.pm),\ntta/perl/Makefile.am (dist_noinst_DATA, modules_DATA)\n(Texinfo/ModulePath.pm, Texinfo/Configure.pm, CLEANFILES),\ntta/perl/Texinfo/ModulePath.pm.in, tta/perl/Texinfo/Configure.pm.in:\nsplit variables set by configure unrelated to paths out of\nTexinfo/ModulePath.pm.in to a new modules in Texinfo/Configure.pm.in.\nUpdate users.\n"
    },
    {
      "commit": "41d16c651c74a9e032c9c3ac8c09f20c17804861",
      "tree": "318eee5148346d1d2bdcabc6a5e1af761c9949ed",
      "parents": [
        "4de20e67f87d5281fac079d77bedceecd53ba140"
      ],
      "author": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Wed Aug 05 15:16:54 2026 +0200"
      },
      "committer": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Wed Aug 05 15:16:54 2026 +0200"
      },
      "message": "* tta/perl/Texinfo/Convert/LaTeX.pm (_convert): do not escape any\ncharacter in image file name.\n"
    },
    {
      "commit": "4de20e67f87d5281fac079d77bedceecd53ba140",
      "tree": "82b999c28aad6d80d0b3c62a95d961f62bf6d0c0",
      "parents": [
        "a72c493e53a02fa5d39cbff876c75eca735ad7da"
      ],
      "author": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Wed Aug 05 14:07:33 2026 +0200"
      },
      "committer": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Wed Aug 05 14:07:33 2026 +0200"
      },
      "message": "* tta/perl/Texinfo/Convert/LaTeX.pm (_protect_latex_text)\n(_protect_text): split _protect_text in two, by adding\n_protect_latex_text that does only the protection and gets context\ninformation as arguments.\n\n* tta/perl/Texinfo/Convert/LaTeX.pm (_convert): protect in alt\u003d\nargument, although it is not required it may help if the LaTeX macro\nis redefined.\n"
    },
    {
      "commit": "a72c493e53a02fa5d39cbff876c75eca735ad7da",
      "tree": "3914b563f0af5cbe2a799107445d109bd4d51b57",
      "parents": [
        "39cc19bc82fc54b50d86f8ecb959a7701f847c0c"
      ],
      "author": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Wed Aug 05 09:28:27 2026 +0200"
      },
      "committer": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Wed Aug 05 09:28:27 2026 +0200"
      },
      "message": "* tta/perl/Texinfo/Convert/LaTeX.pm\n(%LaTeX_no_arg_brace_commands_ascii_replacement, _convert): use\n\\texorpdfstring when in sectioning command argument for no arg\ncommands using math mode for their formatting, euro and error.\nTry converting an encoded character, and use ASCII transliteration if\nthis is not possible.\n"
    },
    {
      "commit": "39cc19bc82fc54b50d86f8ecb959a7701f847c0c",
      "tree": "9e497dc23e1957bebb38d88400a1f14a109bb439",
      "parents": [
        "d699aca0684a4c19ee097464521ed846ed3c7913"
      ],
      "author": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Wed Aug 05 08:40:57 2026 +0200"
      },
      "committer": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Wed Aug 05 08:40:57 2026 +0200"
      },
      "message": "Use tcolorbox instead of mdframed for cartouche\n\n* tta/perl/Texinfo/Convert/LaTeX.pm (%LaTeX_environment_commands)\n(%LaTeX_environment_options, %LaTeX_environment_packages)\n(_latex_header, _set_environment_options): replace mdframed, which is\nnot maintained, by tcolorbox for @cartouche formatting, by defining a\ntcolorbox environment.\n\n* tta/perl/Texinfo/Convert/LaTeX.pm (_latex_header): load amsfonts for\n\\circledR even when unicode-math is used.\n\n* tta/perl/Texinfo/Convert/LaTeX.pm (_latex_header): with tagging, do\nnot load fontenc and load inputenc only if not utf-8.\n"
    },
    {
      "commit": "d699aca0684a4c19ee097464521ed846ed3c7913",
      "tree": "dead80b1bcb81857bcb792c041b410bacfd0fc9d",
      "parents": [
        "4510ede9d6713ac0019d26d12be5b04b963fcfe4"
      ],
      "author": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Wed Aug 05 00:08:31 2026 +0200"
      },
      "committer": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Wed Aug 05 00:08:31 2026 +0200"
      },
      "message": "* tta/data/options_data.txt (LATEX_TAGGED_PDF),\ntta/perl/Texinfo/Convert/LaTeX.pm (_latex_header): add\nLATEX_TAGGED_PDF customization variable for LaTeX tagged PDF.  Report\nform Charles Staats, David Carlisle example.\n\n* tta/perl/Makefile.tres, tta/perl/t/latex_tests.t\n(latex_tagged_pdf_default, latex_tagged_pdf_customized): add tests of\nLaTeX tagged PDF.\n"
    },
    {
      "commit": "4510ede9d6713ac0019d26d12be5b04b963fcfe4",
      "tree": "b9108a8058e8ebdd60fb6c6f6ab68fb18bb5b025",
      "parents": [
        "ccaa18bcabf6fa39e27868b8235c2d11560535e3"
      ],
      "author": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Tue Aug 04 22:31:29 2026 +0200"
      },
      "committer": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Tue Aug 04 22:31:29 2026 +0200"
      },
      "message": "alt @image formatting argument for LaTeX\n\n* tta/perl/Texinfo/Convert/LaTeX.pm (_latex_header, _convert): add\nalt\u003d argument to \\includegraphics.  Reorganize image options setting\ncode.  Add a providecommand for the case of alt not being defined as\n\\includegraphics argument for pre 2021 graphicx.  Report from Charles\nStaats and final definition of alt for old LaTeX by David Carlisle.\n"
    },
    {
      "commit": "ccaa18bcabf6fa39e27868b8235c2d11560535e3",
      "tree": "82d375b1985ae5f1c609398bfa8ac8d628c7cf85",
      "parents": [
        "4f5f0531fd6cd0273256dd3b6d4cde4ed53509be"
      ],
      "author": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Tue Aug 04 22:13:36 2026 +0200"
      },
      "committer": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Tue Aug 04 22:13:36 2026 +0200"
      },
      "message": "* tta/perl/Texinfo/Convert/InfoNonXS.pm (output): avoid comparing\nundef value.\n"
    },
    {
      "commit": "4f5f0531fd6cd0273256dd3b6d4cde4ed53509be",
      "tree": "43bdbc3caa454197b8ed644d85afa8ee31e3d016",
      "parents": [
        "4e29136a0b3d547d1e4451e8dfe3baed42ededbf"
      ],
      "author": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Tue Aug 04 19:48:15 2026 +0200"
      },
      "committer": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Tue Aug 04 19:48:15 2026 +0200"
      },
      "message": "XS interfaces for Plaintext and Info converters\n\n* tta/perl/Makefile.am (dist_convertmodules_DATA),\ntta/perl/Texinfo/Convert/Info.pm,\ntta/perl/Texinfo/Convert/InfoNonXS.pm,\ntta/perl/Texinfo/Convert/Plaintext.pm,\ntta/perl/Texinfo/Convert/PlaintextNonXS.pm,\ntta/perl/XSTexinfo/Makefile.am (xs_LTLIBRARIES)\n(*ConvertPlaintextXS_la*, *ConvertInfoXS_la*),\ntta/perl/XSTexinfo/convert/ConvertInfoXS.xs,\ntta/perl/XSTexinfo/convert/ConvertPlaintextXS.xs: add XS interfaces\nfor Info and Plaintext converter.  Add code to load XS for Info and\nPlaintext and move implementation in Perl to InfoNonXS.pm and\nPlaintextNonXS.pm.  Add a converter function explicitely in Plaintext\nand Info converter to be able to override it with XS.  Only enabled if\nTEXINFO_XS_INCOMPLETE environment variable is set to 2.\n\n* tta/C/main/converter_types.h (enum converter_format): add\nCOF_unknown, as COF_none is already for known formats, those that do\nnot have a C implementation.\n\n* tta/C/convert/converter.c (converter_format_name)\n(converter_format_perl_class_name): get names of converter formats.\n\n* tta/C/convert/convert_to_info.c (info_output),\ntta/C/convert/convert_to_plaintext.c (plaintext_output)\n(plaintext_convert):release output units list.\n\n* tta/C/convert/convert_to_plaintext.c (plaintext_process_printindex):\nfix format for index entry number.\n\n* tta/C/convert/convert_to_info.c (info_format_ref),\ntta/C/convert/convert_to_plaintext.c (plaintext_format_ref): set\nlabel_element only if target_element is not NULL.\n\n* tta/C/convert/convert_to_info.c (info_format_ref): use\nadd_to_contents_as_array to add main tree element.\n\n* tta/C/convert/convert_to_info.c (info_format_ref),\ntta/C/convert/convert_to_plaintext.c (plaintext_free_converter): free\nmemory.\n"
    },
    {
      "commit": "4e29136a0b3d547d1e4451e8dfe3baed42ededbf",
      "tree": "8ac00cd3726a858bf4856a8caa49bc6055432d95",
      "parents": [
        "3f89bc0b273ab3431a58f80b4528163b8f998faf"
      ],
      "author": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Mon Aug 03 00:29:21 2026 +0200"
      },
      "committer": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Mon Aug 03 18:29:24 2026 +0200"
      },
      "message": "* tta/perl/Texinfo/Convert/LaTeX.pm (_latex_header): add pdftitle.\n\n* tta/perl/Makefile.tres, tta/perl/t/latex_tests.t\n(protection_in_pdftitle): add test with special characters protection\nof pdftitle.\n"
    },
    {
      "commit": "3f89bc0b273ab3431a58f80b4528163b8f998faf",
      "tree": "d4ce4edfa11d52fc261e73af51bde0b10a000f5d",
      "parents": [
        "ee4c8bfafedd8f76eb2db22cde5fd9f3bf58a01f"
      ],
      "author": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Mon Aug 03 00:08:05 2026 +0200"
      },
      "committer": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Mon Aug 03 18:29:24 2026 +0200"
      },
      "message": "* tta/C/convert/convert_html.c (html_prepare_converted_output_info),\ntta/C/convert/converter.c (converter_get_fulltitle_tree),\ntta/perl/Texinfo/Convert/Converter.pm (get_fulltitle_tree),\ntta/perl/Texinfo/Convert/HTMLNonXS.pm\n(_prepare_converted_output_info): add get_fulltitle_tree in Perl and\nconverter_get_fulltitle_tree in C for the code determining the\nfull title tree.\n"
    },
    {
      "commit": "ee4c8bfafedd8f76eb2db22cde5fd9f3bf58a01f",
      "tree": "5011dcc461a1d0f3f4687554dee814899a5714fd",
      "parents": [
        "131e077edf1c547122d4092bc50c77afdbc8bf0e"
      ],
      "author": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Sun Aug 02 19:35:01 2026 +0200"
      },
      "committer": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Mon Aug 03 18:29:24 2026 +0200"
      },
      "message": "* tta/C/convert/convert_html.c (html_prepare_converted_output_info),\ntta/perl/Texinfo/Convert/HTMLNonXS.pm\n(_prepare_converted_output_info): use empty_spaces_argument to\ndetermine if candidates for fulltitle_tree are selected.\n"
    },
    {
      "commit": "131e077edf1c547122d4092bc50c77afdbc8bf0e",
      "tree": "7944901602b53cb3767a6dd50534eecaa604817f",
      "parents": [
        "68262c06504901439ac04829e8b352069a0690ee"
      ],
      "author": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Sun Aug 02 19:22:39 2026 +0200"
      },
      "committer": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Mon Aug 03 18:29:24 2026 +0200"
      },
      "message": "* tta/C/texi2any.c (main): for conversion to Info, if INFO_MATH_IMAGES\nis set, use Perl module for conversion, as it requires conversion to\nLaTeX, which is only availble in Perl.\n"
    },
    {
      "commit": "68262c06504901439ac04829e8b352069a0690ee",
      "tree": "dfcdeecef90c3633e12da33266258f4b04942269",
      "parents": [
        "7e5d21aad4b79e57a7762d449746f724749ec498"
      ],
      "author": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Sun Aug 02 18:24:23 2026 +0200"
      },
      "committer": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Mon Aug 03 18:29:24 2026 +0200"
      },
      "message": "Update TODO and tta/TODO\n"
    },
    {
      "commit": "7e5d21aad4b79e57a7762d449746f724749ec498",
      "tree": "ba8ac7eba19e7a98b90fa3eeece85cb4f025da1a",
      "parents": [
        "7621ff4b331b1e0621081cfa4b4a5fdf9efeff4a"
      ],
      "author": {
        "name": "Gavin Smith",
        "email": "gavinsmith0123@gmail.com",
        "time": "Sun Aug 02 22:19:49 2026 +0100"
      },
      "committer": {
        "name": "Gavin Smith",
        "email": "gavinsmith0123@gmail.com",
        "time": "Sun Aug 02 22:20:03 2026 +0100"
      },
      "message": "* tta/C/main/unicode-collation/: Sync\n"
    },
    {
      "commit": "7621ff4b331b1e0621081cfa4b4a5fdf9efeff4a",
      "tree": "568908932416c5e806cf1fc7c1e2c660a8b6a0a2",
      "parents": [
        "5f981a9fe109e4fd34b9acabdfed376d616d1a12"
      ],
      "author": {
        "name": "Gavin Smith",
        "email": "gavinsmith0123@gmail.com",
        "time": "Sat Aug 01 14:12:17 2026 +0100"
      },
      "committer": {
        "name": "Gavin Smith",
        "email": "gavinsmith0123@gmail.com",
        "time": "Sun Aug 02 22:20:03 2026 +0100"
      },
      "message": "Import uninorm/filter\n\n* tta/: Run \"gnulib-tool --add-import uninorm/filter\".\n\nFor C collation code.\n"
    },
    {
      "commit": "5f981a9fe109e4fd34b9acabdfed376d616d1a12",
      "tree": "d0d0cc37961d1186ad3226f0ec808f35327354b9",
      "parents": [
        "50fdb4ef938230839b5436b37e9fcc1c558d956a"
      ],
      "author": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Sun Aug 02 12:08:31 2026 +0200"
      },
      "committer": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Sun Aug 02 12:08:31 2026 +0200"
      },
      "message": "Update generated file and minor change in tta/TODO\n"
    },
    {
      "commit": "50fdb4ef938230839b5436b37e9fcc1c558d956a",
      "tree": "fb2f07e2813b1acd3f08096959a25e5a0b668533",
      "parents": [
        "cea0afa1acb1571b9c9093eed7a8fe2d60034812"
      ],
      "author": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Sun Aug 02 12:05:41 2026 +0200"
      },
      "committer": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Sun Aug 02 12:06:51 2026 +0200"
      },
      "message": "* tta/C/parsetexi/parser.c (add_preamble_lang_cmd): fix type name in\nsizeof.\n\n* tta/C/main/converter_types.h, tta/C/main/document_types.h\n(ENCODING_CONVERSION): move ENCODING_CONVERSION to document_types.h\nas it is used earlier than conversion.\n\n* tta/perl/XSTexinfo/parser_document/OutputUnitsXS.xs,\ntta/perl/XSTexinfo/parser_document/ManipulateTreeXS.xs,\ntta/perl/XSTexinfo/parser_document/DocumentIndicesXS.xs,\ntta/perl/XSTexinfo/parser_document/StructuringXS.xs: use non_perl_free\ninstead of free.\n\n* tta/C/*/*.c, tta/maintain/*.pl, tta/perl/XSTexinfo/*.xs,\ntta/perl/XSTexinfo/*/*.xs, tta/perl/XSTexinfo/*.c,\ntta/perl/XSTexinfo/*/*.c: correct includes using include-what-you-use\nfrom iwyu.\n"
    },
    {
      "commit": "cea0afa1acb1571b9c9093eed7a8fe2d60034812",
      "tree": "866d6e51afb87005f191b80fd40d5773d46f03c3",
      "parents": [
        "b529027070d79a62d70f0e75c9792e29cfee7404"
      ],
      "author": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Sat Aug 01 23:11:48 2026 +0200"
      },
      "committer": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Sun Aug 02 12:06:51 2026 +0200"
      },
      "message": "* tta/C/*/*.*, tta/perl/XSTexinfo/convert/get_html_perl_info.h:\ncorrect includes mainly for header files using include-what-you-use\nfrom iwyu.  This leads to removing the include of config.h from\nxs_utils.h, which is a good thing as the xs_utils.h file is included in\nPerl C code that should not include Gnulib headers.\n"
    },
    {
      "commit": "b529027070d79a62d70f0e75c9792e29cfee7404",
      "tree": "0af59ca32da73edc4d0ef72b75a5f9cfc0a0041f",
      "parents": [
        "817ddc75a6afed66ba664cb17ed1c61fc779b61f"
      ],
      "author": {
        "name": "Gavin Smith",
        "email": "gavinsmith0123@gmail.com",
        "time": "Sat Aug 01 13:14:51 2026 +0100"
      },
      "committer": {
        "name": "Gavin Smith",
        "email": "gavinsmith0123@gmail.com",
        "time": "Sat Aug 01 13:15:17 2026 +0100"
      },
      "message": "Plaintext C converter: use curly quotes\n\n* tta/C/convert/convert_to_plaintext.c (convert_to_plaintext_internal)\nHardcode use of UTF-8 curly quotes for now.\n"
    },
    {
      "commit": "817ddc75a6afed66ba664cb17ed1c61fc779b61f",
      "tree": "c1e45a31e505408f6e9fc3c10c1dd78e9833ff57",
      "parents": [
        "714322ee3383b6fdcd7aecf3b7b83f6f890259f4"
      ],
      "author": {
        "name": "Gavin Smith",
        "email": "gavinsmith0123@gmail.com",
        "time": "Sat Aug 01 13:03:43 2026 +0100"
      },
      "committer": {
        "name": "Gavin Smith",
        "email": "gavinsmith0123@gmail.com",
        "time": "Sat Aug 01 13:04:00 2026 +0100"
      },
      "message": "Plaintext C converter asis_commands\n\n* tta/C/convert/convert_to_plaintext.h (PF_asis): Add flag.\n* tta/C/convert/convert_to_plaintext.c\n(plaintext_format_setup): Set PF_asis on some commands.\n(convert_to_plaintext_internal): Update.\n"
    },
    {
      "commit": "714322ee3383b6fdcd7aecf3b7b83f6f890259f4",
      "tree": "93eeb6215d8c3434cdc58a7858c3360e0f8203e9",
      "parents": [
        "c3d4af7025e395b643a6f7070bd9cbbaa1b563a4"
      ],
      "author": {
        "name": "Gavin Smith",
        "email": "gavinsmith0123@gmail.com",
        "time": "Sat Aug 01 12:40:52 2026 +0100"
      },
      "committer": {
        "name": "Gavin Smith",
        "email": "gavinsmith0123@gmail.com",
        "time": "Sat Aug 01 13:04:00 2026 +0100"
      },
      "message": "Separate asis_commands from style_map\n\n* tta/perl/Texinfo/Convert/Plaintext.pm\n(@asis_commands, %asis_commands): Change from array to hash.\n(%style_map): Do not include asis_commands.\n(_convert) \u003cstyle map\u003e: Update.\n"
    },
    {
      "commit": "c3d4af7025e395b643a6f7070bd9cbbaa1b563a4",
      "tree": "20fa48d9397791b99d236d5cd139625c29ebf872",
      "parents": [
        "c93190ebc5153759511ecd81c45bbb67c6b77d80"
      ],
      "author": {
        "name": "Gavin Smith",
        "email": "gavinsmith0123@gmail.com",
        "time": "Sat Aug 01 12:29:48 2026 +0100"
      },
      "committer": {
        "name": "Gavin Smith",
        "email": "gavinsmith0123@gmail.com",
        "time": "Sat Aug 01 13:04:00 2026 +0100"
      },
      "message": "* tta/perl/Texinfo/Convert/Plaintext.pm (%command_style_map):\nRemove unused hash.\n"
    },
    {
      "commit": "c93190ebc5153759511ecd81c45bbb67c6b77d80",
      "tree": "48125e6dda21591f0e55655f7107c85b615c176f",
      "parents": [
        "d715d4e0bf6d32f9d583614eecf6dd108ff14cf6"
      ],
      "author": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Sat Aug 01 13:44:09 2026 +0200"
      },
      "committer": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Sat Aug 01 13:44:09 2026 +0200"
      },
      "message": "plaintext C converter contents formatting\n\n* tta/perl/Texinfo/Convert/Plaintext.pm: move node_name and\n_cache_node_names.\n\n* tta/perl/Texinfo/Convert/Plaintext.pm (format_contents): remove\nuseless code.  Move repeat_count and spaces output before.\n\n* tta/perl/Texinfo/Convert/Plaintext.pm (_convert): call\ncontents, shortcontents and summarycontents conversion in the same\ncondition.\n\n* tta/C/convert/convert_to_plaintext.c (plaintext_convert_line)\n(plaintext_convert_line_new_context): call para_end as should be.\n\n* tta/C/convert/convert_to_info.c (info_format_contents),\ntta/C/convert/convert_to_plaintext.c (PLAINTEXT_COMMAND_STRUCT)\n(plaintext_format_contents, plaintext_functions)\n(convert_to_plaintext_internal): implement plaintext_format_contents\nand add dispatch and conversion of contents.\n"
    },
    {
      "commit": "d715d4e0bf6d32f9d583614eecf6dd108ff14cf6",
      "tree": "8fc2ebfcbb018f9cd7cdf06373c5b4b6c4638c3b",
      "parents": [
        "a676d709eadc0eb3bd94594022d28c8a7d99d045"
      ],
      "author": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Sat Aug 01 11:18:51 2026 +0200"
      },
      "committer": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Sat Aug 01 11:18:51 2026 +0200"
      },
      "message": "* tta/C/convert/converter.c (converter_txt_image_text): do not use the\nbuffer size as string length.\n\n* tta/C/convert/convert_to_plaintext.c\n(plaintext_image_formatted_text): add warning message.\n\n* tta/C/convert/convert_to_plaintext.c\n(plaintext_format_image_element), tta/C/convert/converter.c\n(converter_txt_image_text): free strings.\n"
    },
    {
      "commit": "a676d709eadc0eb3bd94594022d28c8a7d99d045",
      "tree": "23d48f8928ab447c0ac42e3ffcac3f3520404a4f",
      "parents": [
        "b22f414a045743b1a90d9924fcfe48c8901d5485"
      ],
      "author": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Sat Aug 01 10:03:40 2026 +0200"
      },
      "committer": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Sat Aug 01 10:04:43 2026 +0200"
      },
      "message": "Info and plaintext C converter @image formatting\n\n* tta/C/convert/converter.c (converter_txt_image_text): add.\n\n* tta/C/convert/convert_to_info.c (protect_image_string)\n(info_format_image, info_format_image_element),\ntta/C/convert/convert_to_plaintext.c (PLAINTEXT_FORMAT_FUNCTIONS)\n(plaintext_image_formatted_text, plaintext_format_image_element)\n(plaintext_functions, convert_to_plaintext_internal),\ntta/C/main/converter_types.h (STRING_LINE_COUNT): implement Info and\nplaintext image formatting, add dispatch.  In Info, the result is\nincorrect because NULL is used as a quoting character and the code is\nnot adapted to that.\n\n* tta/C/convert/convert_to_info.c (info_format_node): check that\nnode_directions is set before accessing.\n"
    },
    {
      "commit": "b22f414a045743b1a90d9924fcfe48c8901d5485",
      "tree": "1e5391cd0dcdec99486d02aa08db88c62e9039e9",
      "parents": [
        "e8ae027cd963565613086895d144b48024e96e5c"
      ],
      "author": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Fri Jul 31 21:13:59 2026 +0200"
      },
      "committer": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Sat Aug 01 10:04:43 2026 +0200"
      },
      "message": "* tta/C/convert/convert_to_plaintext.c\n(plaintext_conversion_finalization, convert_to_plaintext_internal),\ntta/C/main/plaintext_converter_state.h (PLAINTEXT_CONVERTER_STATE):\nadd current_node in PLAINTEXT_CONVERTER_STATE, set and zero it.\n\n* tta/C/convert/convert_to_info.c\n(info_format_error_outside_of_any_node),\ntta/C/convert/convert_to_plaintext.c (PLAINTEXT_FORMAT_FUNCTIONS)\n(plaintext_format_error_outside_of_any_node): implement\ninfo_format_error_outside_of_any_node and add to dispatch table.\n"
    },
    {
      "commit": "e8ae027cd963565613086895d144b48024e96e5c",
      "tree": "c632f3a9433838b9cd13ebc694d453b2f68281e0",
      "parents": [
        "596c8fec77dc97a7fa163ca2a459ce9e2120868e"
      ],
      "author": {
        "name": "Gavin Smith",
        "email": "gavinsmith0123@gmail.com",
        "time": "Fri Jul 31 23:49:21 2026 +0100"
      },
      "committer": {
        "name": "Gavin Smith",
        "email": "gavinsmith0123@gmail.com",
        "time": "Fri Jul 31 23:49:21 2026 +0100"
      },
      "message": "* tta/perl/Texinfo/Convert/Plaintext.pm (%style_map):\nSimplify initialisation slightly.\n"
    },
    {
      "commit": "596c8fec77dc97a7fa163ca2a459ce9e2120868e",
      "tree": "31792a593159e2409491e5958ab083d15309306d",
      "parents": [
        "7a3f955630767413eba23eb766364970a69ba8cb"
      ],
      "author": {
        "name": "Gavin Smith",
        "email": "gavinsmith0123@gmail.com",
        "time": "Fri Jul 31 23:44:01 2026 +0100"
      },
      "committer": {
        "name": "Gavin Smith",
        "email": "gavinsmith0123@gmail.com",
        "time": "Fri Jul 31 23:44:01 2026 +0100"
      },
      "message": "C plaintext converter: initial style map implementation\n\n* tta/C/convert/convert_to_plaintext.c\n(struct style_map): Add type.\n(style_map): Add array.\n(plaintext_format_setup): Sort style_map array, and set PF_style_map\ncommand for commands listed therein.\n(convert_to_plaintext): Check PF_style_map and retrieve style map data.\n"
    },
    {
      "commit": "7a3f955630767413eba23eb766364970a69ba8cb",
      "tree": "ff0a7f329f82e73412f2bb7f85ba82e8aa17e0e2",
      "parents": [
        "9e02df1901fb2f92510ea11ffde7d521a0d6dbd2"
      ],
      "author": {
        "name": "Gavin Smith",
        "email": "gavinsmith0123@gmail.com",
        "time": "Fri Jul 31 22:59:22 2026 +0100"
      },
      "committer": {
        "name": "Gavin Smith",
        "email": "gavinsmith0123@gmail.com",
        "time": "Fri Jul 31 22:59:22 2026 +0100"
      },
      "message": "* tta/C/convert/convert_to_plaintext.c: remove superannuated comment.\n"
    },
    {
      "commit": "9e02df1901fb2f92510ea11ffde7d521a0d6dbd2",
      "tree": "c7fc1c8a50901e4ff98370b5480d949f9784d955",
      "parents": [
        "a9aaae6cf20a2d331e29a4d7da7028b23bdce915"
      ],
      "author": {
        "name": "Gavin Smith",
        "email": "gavinsmith0123@gmail.com",
        "time": "Fri Jul 31 22:52:09 2026 +0100"
      },
      "committer": {
        "name": "Gavin Smith",
        "email": "gavinsmith0123@gmail.com",
        "time": "Fri Jul 31 22:52:09 2026 +0100"
      },
      "message": "* tta/C/convert/convert_to_plaintext.c (convert_to_plaintext_internal):\nInitial @dfn implementation.\n"
    },
    {
      "commit": "a9aaae6cf20a2d331e29a4d7da7028b23bdce915",
      "tree": "6edea771ca7545166cd8f4a1c9b9fe8fe6b3bfc1",
      "parents": [
        "dd66acf4d0d830cb0462eb336d2d9326bfe2ee39"
      ],
      "author": {
        "name": "Gavin Smith",
        "email": "gavinsmith0123@gmail.com",
        "time": "Fri Jul 31 22:37:52 2026 +0100"
      },
      "committer": {
        "name": "Gavin Smith",
        "email": "gavinsmith0123@gmail.com",
        "time": "Fri Jul 31 22:37:52 2026 +0100"
      },
      "message": "Use constant style map\n\n* tta/perl/Texinfo/Convert/Plaintext.pm\n(%command_style_map): Remove \u0027dfn\u0027.\n(@double_quoted_commands, %double_quoted_commands):\nChange from array to hash.\n\n(conversion_initialization): Initialize $self-\u003e{\u0027open_double_quote\u0027}\nand $self-\u003e{\u0027close_double_quote\u0027}.  Do not copy $self-\u003e{\u0027style_map\u0027}\nfrom %style_map.\n\n(_convert) \u003cstyle commands\u003e:\nUpdate to access %style_map rather than $self-\u003e{\u0027style_map\u0027}.\nAccess $self-\u003e{\u0027open_double_quote\u0027} and $self-\u003e{\u0027close_double_quote\u0027}.\n"
    },
    {
      "commit": "dd66acf4d0d830cb0462eb336d2d9326bfe2ee39",
      "tree": "71478aa885dcc83658320b77572b71954868d849",
      "parents": [
        "3c595ec72f2d2180b7b2020850348de2ae9e31e8"
      ],
      "author": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Fri Jul 31 20:43:31 2026 +0200"
      },
      "committer": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Fri Jul 31 20:43:31 2026 +0200"
      },
      "message": "* tta/C/convert/convert_to_plaintext.c\n(plaintext_convert_line_new_context),\ntta/C/convert/convert_to_plaintext.h (STRING_COUNT_LINE_COUNT): add\nplaintext_convert_line_new_context and associated\nSTRING_COUNT_LINE_COUNT return struct.\n\n* tta/C/convert/convert_to_info.c (info_format_ref),\ntta/C/convert/convert_to_plaintext.c (plaintext_process_printindex):\nuse plaintext_convert_line_new_context to check colon in name and set\noutside_of_any_node_text.\n\n* tta/C/convert/convert_to_info.c (info_format_ref, info_format_node):\ndo the check of chracter to quote in node names only if the node names\nare quoted or there is a warning emitted.\n"
    },
    {
      "commit": "3c595ec72f2d2180b7b2020850348de2ae9e31e8",
      "tree": "3df9f693dd989c1280ace275fb31a31bd1f64dcf",
      "parents": [
        "a5a120add781e4345a74dc7934902269772d0ab9"
      ],
      "author": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Fri Jul 31 17:46:56 2026 +0200"
      },
      "committer": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Fri Jul 31 17:46:56 2026 +0200"
      },
      "message": "Implement conversion of printindex in plaintext and Info C converters\n\n* tta/C/convert/format_html.c (html_convert_printindex_command)\n(html_output_internal_links), tta/perl/Texinfo/Convert/HTML.pm\n(_convert_printindex_command, output_internal_links): rename\nindex_entries_by_letter as sorted_indexes_by_letter.\n\n* tta/perl/Texinfo/Convert/Plaintext.pm (process_printindex): rename\nindex_entries as sorted_indexes.  Add sorted_index variable.  Change\nconditions for clearer code.  Put subentries in the same container as\nthe main entry.\n\n* tta/C/main/utils.c (string_width_multibyte): rename width_multibyte\nas string_width_multibyte.  Update callers.\n\n* tta/C/main/hashmap.c (c_hashmap_set_value): add.\n\n* tta/perl/Texinfo/Convert/Plaintext.pm, tta/C/main/element_types.txt:\nrename frenchspacing special type as _frenchspacing.  Add to C.\n\n* tta/C/convert/convert_indices.c (converter_sort_index_names),\ntta/C/convert/converter.c (free_generic_converter),\ntta/C/convert/html_converter_finish.c (html_free_converter),\ntta/C/convert/html_prepare_converter.c\n(html_conversion_initialization), tta/C/main/html_converter_state.h\n(HTML_CONVERTER_STATE), tta/C/main/converter_types.h (CONVERTER): move\ncode used to sort index names and remove empty indices in converter\nout of HTML conversion to the converter_sort_index_names function in\nconvert_indices.c.  Move sorted_index_names from HTML_CONVERTER_STATE\nto CONVERTER.  Update users.\n\n* tta/C/convert/convert_to_plaintext.c (add_lines_count): add.\n\n* tta/C/convert/convert_to_plaintext.c\n(plaintext_conversion_initialization)\n(plaintext_conversion_finalization),\ntta/C/main/plaintext_converter_state.h (PLAINTEXT_CONVERTER_STATE): add\nindex_entries_no_node and index_entry_node_colon hash maps,\noutside_of_any_node_text and outside_of_any_node_text_width used for\nprintindex output to PLAINTEXT_CONVERTER_STATE, initialize and release.\n\n* tta/C/convert/convert_to_info.c (info_format_printindex),\ntta/C/convert/convert_to_plaintext.c (PLAINTEXT_FORMAT_FUNCTIONS)\n(CONVERT_PRINTINDEX_ENTRIES_INFO, plaintext_process_printindex)\n(plaintext_format_printindex, plaintext_functions)\n(convert_to_plaintext_internal): implement\nplaintext_process_printindex and dispatch functions to use in\nconversion to plaintext and Info.\n\n* tta/perl/Texinfo/Convert/Info.pm (format_contents): return undef.\n"
    },
    {
      "commit": "a5a120add781e4345a74dc7934902269772d0ab9",
      "tree": "d6e3d3b6ea7aa94e2e0514189a8538c4617495a4",
      "parents": [
        "5a2d0c42f60ee6e52b913d426aadbb69e0dd1a4e"
      ],
      "author": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Thu Jul 30 13:26:23 2026 +0200"
      },
      "committer": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Thu Jul 30 13:26:23 2026 +0200"
      },
      "message": "* tta/perl/Texinfo/Convert/Info.pm: move code around.\n"
    },
    {
      "commit": "5a2d0c42f60ee6e52b913d426aadbb69e0dd1a4e",
      "tree": "1ed08892b37b217bc5e3e125a035ed192b20bb52",
      "parents": [
        "0a433d547afa6eadeaea8d4a09e903f6394a5b7f"
      ],
      "author": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Thu Jul 30 12:43:31 2026 +0200"
      },
      "committer": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Thu Jul 30 12:43:31 2026 +0200"
      },
      "message": "* tta/perl/XSTexinfo/ParagraphXS.xs (para_end_line): adapt for\npara_end_line return value being const.\n"
    },
    {
      "commit": "0a433d547afa6eadeaea8d4a09e903f6394a5b7f",
      "tree": "15191d29f897295d850acbd5bc90bc53449ccb76",
      "parents": [
        "970d06a8aefb75744299b1fcd94c0df5860c2bd6"
      ],
      "author": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Thu Jul 30 12:41:03 2026 +0200"
      },
      "committer": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Thu Jul 30 12:41:03 2026 +0200"
      },
      "message": "* tta/C/convert/convert_to_plaintext.c (push_formatter)\n(pop_formatter): add push_formatter that wraps add_(formatter) and\npara_set_state.  Add para_set_state call to pop_formatter.  Replace\ncalls of add_(formatter) by calls of push_formatter.  Remove calls of\npara_set_state that are not needed anymore.\n\n* tta/C/convert/convert_to_plaintext.c (stream_output_add_text):\nfinish implementation.\n"
    },
    {
      "commit": "970d06a8aefb75744299b1fcd94c0df5860c2bd6",
      "tree": "24f5b6498a0070cf59995456b103d5c14fd5be7f",
      "parents": [
        "71070f0dc4b13cad689c09c1feed0b19c49988cb"
      ],
      "author": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Thu Jul 30 11:02:05 2026 +0200"
      },
      "committer": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Thu Jul 30 11:02:05 2026 +0200"
      },
      "message": "Implement node line formatting in C info converter\n\n* tta/C/convert/plaintext_paragraph.c (para_end_line): make return\nvalue const.\n\n* tta/C/convert/convert_to_plaintext.c (plaintext_convert_line): add.\n\n* tta/C/convert/convert_to_info.c (info_output),\ntta/C/convert/convert_to_plaintext.c (plaintext_free_converter),\ntta/C/main/plaintext_converter_state.h (PLAINTEXT_CONVERTER_STATE):\nadd output_filename field to PLAINTEXT_CONVERTER_STATE, fill it and\nfree it.\n\n* tta/C/convert/convert_to_info.c (info_format_node, directions):\nimplement info_format_node.\n\n* tta/C/convert/convert_to_plaintext.c (PLAINTEXT_FORMAT_FUNCTIONS)\n(plaintext_format_node, plaintext_functions)\n(convert_to_plaintext_internal): add noop plaintext_format_node and\nadd dispatch of node formatting in conversion.\n\n* tta/perl/Texinfo/Convert/Info.pm (format_node): always return\nnothing.\n"
    },
    {
      "commit": "71070f0dc4b13cad689c09c1feed0b19c49988cb",
      "tree": "a1cb443a35e2799b95ad09cd45e639019311c82e",
      "parents": [
        "1a287ccecae39c4b3c4dcd5dad6d8b9a92def834"
      ],
      "author": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Wed Jul 29 13:25:26 2026 +0200"
      },
      "committer": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Wed Jul 29 13:25:26 2026 +0200"
      },
      "message": "* tta/C/main/utils.c (normalize_top_node_name): add.\n\n* tta/C/convert/plaintext_paragraph.c (para_add_pending_word),\ntta/perl/XSTexinfo/ParagraphXS.xs (para_add_pending_word): make return\nvalue of para_add_pending_word const as it is allocated and freed in\nthe function.\n\n* tta/C/convert/convert_to_plaintext.c (fill_formatter): add.\n\n* tta/C/main/plaintext_converter_state.h (STRING_WITH_WIDTH)\n(PLAINTEXT_CONVERTER_STATE), tta/C/convert/convert_to_plaintext.c\n(plaintext_conversion_initialization)\n(plaintext_conversion_finalization): add node_names_cache array.\nAllocate and release.\n\n* tta/C/convert/convert_to_plaintext.c (plaintext_convert_node_name)\n(plaintext_node_name): implement.  Cache node names only, not other\ncommands names, since it is more complex to do and not often useful.\n\n* tta/C/convert/convert_to_info.c (info_format_ref): use\nplaintext_node_name.\n\n* tta/C/convert/convert_to_plaintext.c (plaintext_format_ref): copied\nelements cannot be const.\n"
    },
    {
      "commit": "1a287ccecae39c4b3c4dcd5dad6d8b9a92def834",
      "tree": "7bfb53323c63654d4f1493b66b46a0235c3421c9",
      "parents": [
        "62e92083a52c8523b98babdb67536043114147fe"
      ],
      "author": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Tue Jul 28 20:27:25 2026 +0200"
      },
      "committer": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Tue Jul 28 20:27:25 2026 +0200"
      },
      "message": "Add dispatch for plaintext or Info specific functions, use for format_ref\n\n* tta/C/convert/converter.c (converter_format_data),\ntta/C/convert/converter.h (TXI_CONVERSION_FORMAT_NR),\ntta/C/main/converter_types.h (enum converter_format): start the list\nof converters by plaintext and info to make simpler using the same\nindex to dispatch plaintext or info specific functions.\n\n* tta/C/convert/convert_to_plaintext.c (PLAINTEXT_FORMAT_FUNCTIONS)\n(plaintext_functions, convert_to_plaintext_internal): add dispatch\ntable for formatting functions that are different for Info and\nplaintext output.  Use it for format_ref.\n\n* tta/perl/Texinfo/Convert/Info.pm (format_ref): do not replace\n$args[0] by empty text, instead handle especially undefined\n$label_element.  Move code around.  Reorganize code to follow more the\norder of output and simplify a bit.\n\n* tta/C/convert/convert_to_info.c (info_format_ref),\ntta/C/main/plaintext_converter_state.h (PLAINTEXT_CONVERTER_STATE):\nadd silent field in PLAINTEXT_CONVERTER_STATE.  Implement\nmost of info_format_ref.\n"
    },
    {
      "commit": "62e92083a52c8523b98babdb67536043114147fe",
      "tree": "7956d255e99e143bc448e79b04c44c2202ea7e8b",
      "parents": [
        "4582e62b61e26a24e0d5550776f7c30fd9874687"
      ],
      "author": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Mon Jul 27 23:33:52 2026 +0200"
      },
      "committer": {
        "name": "Patrice Dumas",
        "email": "pertusus@free.fr",
        "time": "Mon Jul 27 23:34:18 2026 +0200"
      },
      "message": "* tta/C/convert/convert_to_plaintext.c\n(convert_to_plaintext_internal): return immediately if a text type is\nignored.\n\n* tta/C/main/element_types.txt (_code, _stop_upper_case)\n(_suppress_styles): add types used internally in plaintext converter.\n\n* tta/C/convert/convert_to_plaintext.c (plaintext_format_ref)\n(convert_to_plaintext_internal): add plaintext_format_ref and use in\nconvert_to_plaintext_internal.\n\n* tta/perl/Texinfo/Convert/Info.pm (output): minor change to set\nencoding only if not empty, and use defined in conditions when the\nvalue is not used.\n\n* tta/perl/Texinfo/Convert/Plaintext.pm (format_ref): remove useless\nvariable and reset target_element too (in code that cannot be called).\n"
    },
    {
      "commit": "4582e62b61e26a24e0d5550776f7c30fd9874687",
      "tree": "f6ef52f6b37760b3166c869239eee2362d079f99",
      "parents": [
        "d297eefba22c826ab25266001564abde65e7d23d"
      ],
      "author": {
        "name": "Gavin Smith",
        "email": "gavinsmith0123@gmail.com",
        "time": "Mon Jul 27 13:20:19 2026 +0100"
      },
      "committer": {
        "name": "Gavin Smith",
        "email": "gavinsmith0123@gmail.com",
        "time": "Mon Jul 27 13:20:44 2026 +0100"
      },
      "message": "Use \"$@\"\n\n* util/texi2dvi,\nReplace use of ${1+\"$@\"} with \"$@\".\n"
    }
  ],
  "next": "d297eefba22c826ab25266001564abde65e7d23d"
}
