summaryrefslogtreecommitdiff
path: root/macros/texinfo/texinfo/doc/tp_api/api_includes
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /macros/texinfo/texinfo/doc/tp_api/api_includes
Initial commit
Diffstat (limited to 'macros/texinfo/texinfo/doc/tp_api/api_includes')
-rw-r--r--macros/texinfo/texinfo/doc/tp_api/api_includes/Texinfo-Common.texi369
-rw-r--r--macros/texinfo/texinfo/doc/tp_api/api_includes/Texinfo-Convert-Converter.texi254
-rw-r--r--macros/texinfo/texinfo/doc/tp_api/api_includes/Texinfo-Convert-DocBook.texi76
-rw-r--r--macros/texinfo/texinfo/doc/tp_api/api_includes/Texinfo-Convert-HTML.texi84
-rw-r--r--macros/texinfo/texinfo/doc/tp_api/api_includes/Texinfo-Convert-Info.texi76
-rw-r--r--macros/texinfo/texinfo/doc/tp_api/api_includes/Texinfo-Convert-NodeNameNormalization.texi73
-rw-r--r--macros/texinfo/texinfo/doc/tp_api/api_includes/Texinfo-Convert-Plaintext.texi76
-rw-r--r--macros/texinfo/texinfo/doc/tp_api/api_includes/Texinfo-Convert-Texinfo.texi50
-rw-r--r--macros/texinfo/texinfo/doc/tp_api/api_includes/Texinfo-Convert-TexinfoXML.texi76
-rw-r--r--macros/texinfo/texinfo/doc/tp_api/api_includes/Texinfo-Convert-Text.texi140
-rw-r--r--macros/texinfo/texinfo/doc/tp_api/api_includes/Texinfo-Convert-Unicode.texi103
-rw-r--r--macros/texinfo/texinfo/doc/tp_api/api_includes/Texinfo-Encoding.texi51
-rw-r--r--macros/texinfo/texinfo/doc/tp_api/api_includes/Texinfo-Parser.texi1428
-rw-r--r--macros/texinfo/texinfo/doc/tp_api/api_includes/Texinfo-Report.texi209
-rw-r--r--macros/texinfo/texinfo/doc/tp_api/api_includes/Texinfo-Structuring.texi414
15 files changed, 3479 insertions, 0 deletions
diff --git a/macros/texinfo/texinfo/doc/tp_api/api_includes/Texinfo-Common.texi b/macros/texinfo/texinfo/doc/tp_api/api_includes/Texinfo-Common.texi
new file mode 100644
index 0000000000..aa97e56374
--- /dev/null
+++ b/macros/texinfo/texinfo/doc/tp_api/api_includes/Texinfo-Common.texi
@@ -0,0 +1,369 @@
+@node Texinfo::Common
+@chapter Texinfo::Common
+
+@menu
+* Texinfo@asis{::}Common NAME::
+* Texinfo@asis{::}Common SYNOPSIS::
+* Texinfo@asis{::}Common DESCRIPTION::
+* Texinfo@asis{::}Common COMMAND CLASSES::
+* Texinfo@asis{::}Common METHODS::
+* Texinfo@asis{::}Common SEE ALSO::
+* Texinfo@asis{::}Common AUTHOR::
+@end menu
+
+@node Texinfo::Common NAME
+@section NAME
+
+Texinfo::Common - Classification of commands and miscellaneous methods
+
+@node Texinfo::Common SYNOPSIS
+@section SYNOPSIS
+
+@verbatim
+ use Texinfo::Common qw(expand_today expand_verbatiminclude);
+ if ($Texinfo::Common::accent_commands{$a_command}) {
+ print STDERR "$a_command is an accent command\n";
+ }
+
+ my $today_tree = expand_today($converter);
+ my $verbatiminclude_tree
+ = expand_verbatiminclude(undef, $verbatiminclude);
+@end verbatim
+
+@node Texinfo::Common DESCRIPTION
+@section DESCRIPTION
+
+Texinfo::Common holds interesting hashes classifying Texinfo @@-commands,
+as well as miscellaneous methods that may be useful for any backend
+converting texinfo trees.
+
+It also defines, as our variable a hash for default indices,
+named @code{%index_names}. The format of this hash is described in
+@ref{Texinfo::Parser indices_information}.
+
+@node Texinfo::Common COMMAND CLASSES
+@section COMMAND CLASSES
+
+Hashes are defined as @code{our} variables, and are therefore available
+outside of the module.
+
+The key of the hashes are @@-command names without the @@. The
+following hashes are available:
+
+@table @asis
+@item %all_commands
+@anchor{Texinfo::Common %all_commands}
+
+All the @@-commands.
+
+@item %no_brace_commands
+@anchor{Texinfo::Common %no_brace_commands}
+
+Commands without brace with a single character as name, like @code{*}
+or @code{:}. The value is an ascii representation of the command. It
+may be an empty string.
+
+@item %misc_commands
+@anchor{Texinfo::Common %misc_commands}
+
+Command that do not take braces and are not block commands either, like
+@code{@@node}, @code{@@chapter}, @code{@@cindex}, @code{@@deffnx}, @code{@@end}, @code{@@footnotestyle},
+@code{@@set}, @code{@@settitle}, @code{@@indent}, @code{@@definfoenclose}, @code{@@comment} and many
+others.
+
+@item %default_index_commands
+@anchor{Texinfo::Common %default_index_commands}
+
+Index entry commands corresponding to default indices. For example
+@code{@@cindex}.
+
+@item %root_commands
+@anchor{Texinfo::Common %root_commands}
+
+Commands that are at the root of a Texinfo document, namely
+@code{@@node} and sectioning commands, except heading commands.
+
+@item %sectioning_commands
+@anchor{Texinfo::Common %sectioning_commands}
+
+All the sectioning and heading commands.
+
+@item %brace_commands
+@anchor{Texinfo::Common %brace_commands}
+
+The commands that take braces. The associated value is the maximum
+number of arguments.
+
+@item %letter_no_arg_commands
+@anchor{Texinfo::Common %letter_no_arg_commands}
+
+@@-commands with braces but no argument corresponding to letters,
+like @code{@@AA@{@}} or @code{@@ss@{@}} or @code{@@o@{@}}.
+
+@item %accent_commands
+@anchor{Texinfo::Common %accent_commands}
+
+Accent @@-commands taking an argument, like @code{@@'} or @code{@@ringaccent}
+including @code{@@dotless} and @code{@@tieaccent}.
+
+@item %style_commands
+@anchor{Texinfo::Common %style_commands}
+
+Commands that mark a fragment of texinfo, like @code{@@strong},
+@code{@@cite}, @code{@@code} or @code{@@asis}.
+
+@item %code_style_commands
+@anchor{Texinfo::Common %code_style_commands}
+
+@emph{style_commands} that have their argument in code style, like
+@code{@@code}.
+
+@item %regular_font_style_commands
+@anchor{Texinfo::Common %regular_font_style_commands}
+
+@emph{style_commands} that have their argument in regular font, like
+@code{@@r} or @code{@@slanted}.
+
+@item %context_brace_commands
+@anchor{Texinfo::Common %context_brace_commands}
+
+@@-commands with brace like @code{@@footnote}, @code{@@caption} and @code{@@math}
+whose argument is outside of the main text flow in one way or another.
+
+@item %ref_commands
+@anchor{Texinfo::Common %ref_commands}
+
+Cross reference @@-command referencing nodes, like @code{@@xref}.
+
+@item %explained_commands
+@anchor{Texinfo::Common %explained_commands}
+
+@@-commands whose second argument explain first argument and further
+@@-command call without first argument, as @code{@@abbr} and @code{@@acronym}.
+
+@item %block commands
+@anchor{Texinfo::Common %block commands}
+
+Commands delimiting a block with a closing @code{@@end}. The value
+is @emph{conditional} for @code{@@if} commands, @emph{def} for definition
+commands like @code{@@deffn}, @emph{raw} for @@-commands that have no expansion
+of @@-commands in their bodies and @emph{multitable} for @code{@@multitable}.
+Otherwise it is set to the number of arguments separated by commas
+that may appear on the @@-command line. That means 0 in most cases,
+1 for @code{@@quotation} and 2 for @code{@@float}.
+
+@item %raw_commands
+@anchor{Texinfo::Common %raw_commands}
+
+@@-commands that have no expansion of @@-commands in their bodies,
+as @code{@@macro}, @code{@@verbatim} or @code{@@ignore}.
+
+@item %format_raw_commands
+@anchor{Texinfo::Common %format_raw_commands}
+
+@@-commands associated with raw output format, like @code{@@html}, or
+@code{@@docbook}.
+
+@item %texinfo_output_formats
+@anchor{Texinfo::Common %texinfo_output_formats}
+
+Cannonical output formats that have associated conditionals. In
+practice @code{%format_raw_commands} plus @code{info} and @code{plaintext}.
+
+@item %def_commands
+@anchor{Texinfo::Common %def_commands}
+
+@item %def_aliases
+@anchor{Texinfo::Common %def_aliases}
+
+Definition commands. @code{%def_aliases} associates an aliased command
+to the original command, for example @code{defun} is associated to @code{deffn}.
+
+@item %menu_commands
+@anchor{Texinfo::Common %menu_commands}
+
+@@-commands with menu entries.
+
+@item %align_commands
+@anchor{Texinfo::Common %align_commands}
+
+@@-commands related with alignement of text.
+
+@item %region_commands
+@anchor{Texinfo::Common %region_commands}
+
+Block @@-commands that enclose full text regions, like @code{@@titlepage}.
+
+@item %preformatted_commands
+@anchor{Texinfo::Common %preformatted_commands}
+
+@item %preformatted_code_commands
+@anchor{Texinfo::Common %preformatted_code_commands}
+
+@emph{%preformatted_commands} is for commands whose content should not
+be filled, like @code{@@example} or @code{@@display}. If the command is meant
+for code, it is also in @emph{%preformatted_code_commands}, like @code{@@example}.
+
+@item %item_container_commands
+@anchor{Texinfo::Common %item_container_commands}
+
+Commands holding @code{@@item} with @code{@@item} that contains blocks of text,
+like @code{@@itemize}.
+
+@item %item_line_commands
+@anchor{Texinfo::Common %item_line_commands}
+
+Commands with @code{@@item} that have their arguments on their lines, like
+@code{@@ftable}.
+
+@end table
+
+@node Texinfo::Common METHODS
+@section METHODS
+
+No method is exported in the default case.
+
+Most methods takes a @emph{$converter} as argument, sometime optionally,
+to get some information and use methods for error reporting,
+see @ref{Texinfo::Convert::Converter NAME} and @ref{Texinfo::Report NAME}.
+
+@table @asis
+@item $tree = expand_today($converter)
+@anchor{Texinfo::Common $tree = expand_today($converter)}
+
+Expand today's date, as a texinfo tree with translations.
+
+@item $tree = expand_verbatiminclude($converter, $verbatiminclude)
+@anchor{Texinfo::Common $tree = expand_verbatiminclude($converter@comma{} $verbatiminclude)}
+
+The @emph{$converter} argument may be undef. @emph{$verbatiminclude} is a
+@code{@@verbatiminclude} tree element. This function returns a
+@code{@@verbatim} tree elements after finding the included file and
+reading it. If @emph{$converter} is not defined, the document encoding
+is not taken into account when reading the file.
+
+@item $tree = definition_category($converter, $def_line)
+@anchor{Texinfo::Common $tree = definition_category($converter@comma{} $def_line)}
+
+The @emph{$converter} argument may be undef. @emph{$def_line} is a
+@code{def_line} texinfo tree container. This function
+returns a texinfo tree corresponding to the category of the
+@emph{$def_line} taking the class into account, if there is one.
+If @emph{$converter} is not defined, the resulting string won't be
+translated.
+
+@item $result = is_content_empty($tree, $do_not_ignore_index_entries)
+@anchor{Texinfo::Common $result = is_content_empty($tree@comma{} $do_not_ignore_index_entries)}
+
+Return true if the @code{$tree} has content that could be formatted.
+@code{$do_not_ignore_index_entries} is optional. If set, index entries
+are considered to be formatted.
+
+@item $result = numbered_heading ($converter, $heading_element, $heading_text, $do_number)
+@anchor{Texinfo::Common $result = numbered_heading ($converter@comma{} $heading_element@comma{} $heading_text@comma{} $do_number)}
+
+The @emph{$converter} argument may be undef. @emph{$heading_element} is
+a heading command tree element. @emph{$heading_text} is the already
+formatted heading text. if the @emph{$do_number} optional argument is
+defined and false, no number is used and the text is returned as is.
+This function returns the heading with a number and the appendix
+part if needed. If @emph{$converter} is not defined, the resulting
+string won't be translated.
+
+@item ($caption, $prepended) = float_name_caption ($converter, $float)
+@anchor{Texinfo::Common ($caption@comma{} $prepended) = float_name_caption ($converter@comma{} $float)}
+
+@emph{$float} is a texinfo tree @code{@@float} element. This function
+returns the caption that should be used for the float formatting
+and the @emph{$prepended} texinfo tree combining the type and label
+of the float.
+
+@item $text = enumerate_item_representation($specification, $number)
+@anchor{Texinfo::Common $text = enumerate_item_representation($specification@comma{} $number)}
+
+This function returns the number or letter correponding to item
+number @emph{$number} for an @code{@@enumerate} specification @emph{$specification},
+appearing on an @code{@@enumerate} line. For example
+
+@verbatim
+ enumerate_item_representation('c', 3)
+@end verbatim
+
+is @code{e}.
+
+@item trim_spaces_comment_from_content($contents)
+@anchor{Texinfo::Common trim_spaces_comment_from_content($contents)}
+
+Remove empty spaces after commands or braces at begin and
+spaces and comments at end from a content array, modifying it.
+
+@item $normalized_name = normalize_top_node_name ($node_string)
+@anchor{Texinfo::Common $normalized_name = normalize_top_node_name ($node_string)}
+
+Normalize the node name string given in argument, by normalizing
+Top node case.
+
+@item protect_comma_in_tree($tree)
+@anchor{Texinfo::Common protect_comma_in_tree($tree)}
+
+Protect comma characters, replacing @code{,} with @@comma@{@} in tree.
+
+@item protect_colon_in_tree($tree)
+@anchor{Texinfo::Common protect_colon_in_tree($tree)}
+
+@item protect_node_after_label_in_tree($tree)
+@anchor{Texinfo::Common protect_node_after_label_in_tree($tree)}
+
+Protect colon with @code{protect_colon_in_tree} and characters that
+are special in node names after a label in menu entries (tab
+dot and comma) with @code{protect_node_after_label_in_tree}.
+The protection is achieved by putting protected characters
+in @code{@@asis@{@}}.
+
+@item $contents_result = protect_first_parenthesis ($contents)
+@anchor{Texinfo::Common $contents_result = protect_first_parenthesis ($contents)}
+
+Return a contents array reference with first parenthesis in the
+contents array reference protected.
+
+@item protect_hashchar_at_line_beginning($parser, $tree)
+@anchor{Texinfo::Common protect_hashchar_at_line_beginning($parser@comma{} $tree)}
+
+Protect hash character at beginning of line if the line is a cpp
+line directive. The @emph{$parser} argument maybe undef, if it is
+defined it is used for error reporting in case an hash character
+could not be protected because it appeared in a raw environment.
+
+@item move_index_entries_after_items_in_tree($tree)
+@anchor{Texinfo::Common move_index_entries_after_items_in_tree($tree)}
+
+In @code{@@enumerate} and @code{@@itemize} from the tree, move index entries
+appearing just before @code{@@item} after the @code{@@item}. Comment lines
+between index entries are moved too.
+
+@item $command = find_parent_root_command($parser, $tree_element)
+@anchor{Texinfo::Common $command = find_parent_root_command($parser@comma{} $tree_element)}
+
+Find the parent root command of a tree element (sectioning command or node).
+The @code{$parser} argument is optional, it is used to continue
+through @code{@@insertcopying} if in a @code{@@copying}.
+
+@item valid_tree_transformation($name)
+@anchor{Texinfo::Common valid_tree_transformation($name)}
+
+Return true if the @emph{$name} is a known tree transformation name
+that may be passed with @code{TREE_TRANSFORMATIONS} to modify a texinfo
+tree.
+
+@end table
+
+@node Texinfo::Common SEE ALSO
+@section SEE ALSO
+
+@ref{Texinfo::Parser NAME}, @ref{Texinfo::Convert::Converter NAME} and @ref{Texinfo::Report NAME}.
+
+@node Texinfo::Common AUTHOR
+@section AUTHOR
+
+Patrice Dumas, <pertusus@@free.fr>
+
diff --git a/macros/texinfo/texinfo/doc/tp_api/api_includes/Texinfo-Convert-Converter.texi b/macros/texinfo/texinfo/doc/tp_api/api_includes/Texinfo-Convert-Converter.texi
new file mode 100644
index 0000000000..ca99e329cf
--- /dev/null
+++ b/macros/texinfo/texinfo/doc/tp_api/api_includes/Texinfo-Convert-Converter.texi
@@ -0,0 +1,254 @@
+@node Texinfo::Convert::Converter
+@chapter Texinfo::Convert::Converter
+
+@menu
+* Texinfo@asis{::}Convert@asis{::}Converter NAME::
+* Texinfo@asis{::}Convert@asis{::}Converter SYNOPSIS::
+* Texinfo@asis{::}Convert@asis{::}Converter DESCRIPTION::
+* Texinfo@asis{::}Convert@asis{::}Converter METHODS::
+* Texinfo@asis{::}Convert@asis{::}Converter SEE ALSO::
+* Texinfo@asis{::}Convert@asis{::}Converter AUTHOR::
+* Texinfo@asis{::}Convert@asis{::}Converter POD ERRORS::
+@end menu
+
+@node Texinfo::Convert::Converter NAME
+@section NAME
+
+Texinfo::Convert::Converter - Parent class for Texinfo tree converters
+
+@node Texinfo::Convert::Converter SYNOPSIS
+@section SYNOPSIS
+
+@verbatim
+ package Texinfo::Convert::MyConverter;
+
+ use Texinfo::Convert::Converter;
+ @ISA = qw(Texinfo::Convert::Converter);
+
+ sub converter_defaults ($$) {
+ return %myconverter_defaults;
+ }
+ sub converter_initialize($) {
+ my $self = shift;
+ $self->{'document_context'} = [{}];
+ }
+ sub converter_global_commands($) {
+ return ('documentlanguage', documentencoding', 'paragraphindent');
+ }
+
+ sub convert($$) {
+ ...
+ }
+ sub convert_tree($$) {
+ ...
+ }
+ sub output($$) {
+ ...
+ }
+
+ # end of Texinfo::Convert::MyConverter
+
+ my $converter = Texinfo::Convert::MyConverter->converter(
+ {'parser' => $parser});
+ $converter->output($texinfo_tree);
+@end verbatim
+
+@node Texinfo::Convert::Converter DESCRIPTION
+@section DESCRIPTION
+
+Texinfo::Convert::Converter is a super class that can be used to
+simplify converters initialization. The class also provide some
+useful methods.
+
+In turn, the converter should define some methods. Three are
+optional, @code{converter_defaults}, @code{converter_initialize} and
+@code{converter_global_commands} and used for initialization, to
+give @code{Texinfo::Convert::Converter} some informations.
+
+The @code{convert_tree} method is more or less mandatory and should
+convert portions of Texinfo tree. The @code{output} and @code{convert}
+are not required, but customarily used by converters as entry
+points for conversion to a file with headers and so on, or
+conversion of a whole Texinfo tree.
+
+Existing backends may be used as examples that implement those
+methods. @code{Texinfo::Convert::Texinfo} together with
+@code{Texinfo::Convert::PlainTexinfo}, as well as
+@code{Texinfo::Convert::TextContent} are trivial examples.
+@code{Texinfo::Convert::Text} is less trivial, although still simplistic,
+while @code{Texinfo::Convert::DocBook} is a real converter
+that is also not too complex.
+
+@ref{Texinfo::Common NAME}, @ref{Texinfo::Convert::Unicode NAME}
+and @ref{Texinfo::Report NAME} document modules or additional function
+that may be useful for backends, while the parsed Texinfo tree is
+described in @ref{Texinfo::Parser NAME}.
+
+@node Texinfo::Convert::Converter METHODS
+@section METHODS
+
+@menu
+* Texinfo@asis{::}Convert@asis{::}Converter Initialization::
+* Texinfo@asis{::}Convert@asis{::}Converter Helper methods::
+@end menu
+
+@node Texinfo::Convert::Converter Initialization
+@subsection Initialization
+
+A module subclassing @code{Texinfo::Convert::Converter} is created by calling
+the @code{converter} method that should be inherited from
+@code{Texinfo::Convert::Converter}.
+
+@table @asis
+@item $converter = MyConverter->converter($options)
+@anchor{Texinfo::Convert::Converter $converter = MyConverter->converter($options)}
+
+The @emph{$options} hash reference holds options for the converter. In
+this option hash reference a @ref{Texinfo::Parser NAME, parser object, parser object}
+may be associated with the @emph{parser} key. The other options
+should be configuration options described in the Texinfo manual.
+Those options, when appropriate, override the document content.
+
+The @code{converter} function returns a converter object (a blessed hash
+reference) after checking the options and performing some initializations,
+especially when a parser is given among the options. The converter is
+also initialized as a @ref{Texinfo::Report NAME}.
+
+@end table
+
+To help with these initializations, the modules can define three methods:
+
+@table @asis
+@item %defaults = $converter->converter_defaults($options)
+@anchor{Texinfo::Convert::Converter %defaults = $converter->converter_defaults($options)}
+
+The converter can provide a defaults hash for configuration options.
+The @emph{$options} hash reference holds options for the converter.
+
+@item @@global_commands = $converter->converter_global_commands()
+@anchor{Texinfo::Convert::Converter @@global_commands = $converter->converter_global_commands()}
+
+The list returned is the list of Texinfo global commands (like
+@code{@@paragraphindent}, @code{@@documentlanguage}...) that are relevant for the
+converter.
+
+@item converter_initialize
+@anchor{Texinfo::Convert::Converter converter_initialize}
+
+This method is called at the end of the converter initialization.
+
+@end table
+
+@node Texinfo::Convert::Converter Helper methods
+@subsection Helper methods
+
+@code{Texinfo::Convert::Converter} provides methods
+that may be useful for every converter:
+
+@table @asis
+@item $converter->get_conf($option_string)
+@anchor{Texinfo::Convert::Converter $converter->get_conf($option_string)}
+
+Returns the value of the Texinfo configuration option @emph{$option_string}.
+
+@item $converter->set_conf($option_string, $value)
+@anchor{Texinfo::Convert::Converter $converter->set_conf($option_string@comma{} $value)}
+
+Set the Texinfo configuration option @emph{$option_string} to @emph{$value} if
+not set as a converter option.
+
+@item $converter->force_conf($option_string, $value)
+@anchor{Texinfo::Convert::Converter $converter->force_conf($option_string@comma{} $value)}
+
+Set the Texinfo configuration option @emph{$option_string} to @emph{$value}.
+This should rarely be used, but the purpose of this method is to be able
+to revert a configuration that is always wrong for a given output
+format, like the splitting for example.
+
+@item $result = $converter->convert_document_sections($root, $file_handler)
+@anchor{Texinfo::Convert::Converter $result = $converter->convert_document_sections($root@comma{} $file_handler)}
+
+This method splits the @emph{$root} Texinfo tree at sections and
+calls @code{convert_tree} on the elements. If the optional @emph{$file_handler}
+is given in argument, the result are output in @emph{$file_handler}, otherwise
+the resulting string is returned.
+
+@item $result = $converter->convert_accents($accent_command, \&format_accents, $in_upper_case)
+@anchor{Texinfo::Convert::Converter $result = $converter->convert_accents($accent_command@comma{} \&format_accents@comma{} $in_upper_case)}
+
+@emph{$accent_command} is an accent command, which may have other accent
+commands nested. The function returns the accents formatted either
+as encoded letters, or formatted using @emph{\&format_accents}.
+If @emph{$in_upper_case} is set, the result should be uppercased.
+
+@end table
+
+Other @code{Texinfo::Convert::Converter} methods target conversion to XML:
+
+@table @asis
+@item $protected_text = $converter->xml_protect_text($text)
+@anchor{Texinfo::Convert::Converter $protected_text = $converter->xml_protect_text($text)}
+
+Protect special XML characters (&, <, >, ") of @emph{$text}.
+
+@item $comment = $converter->xml_comment($text)
+@anchor{Texinfo::Convert::Converter $comment = $converter->xml_comment($text)}
+
+Returns an XML comment for @emph{$text}.
+
+@item $result = xml_accent($text, $accent_command, $in_upper_case, $use_numeric_entities)
+@anchor{Texinfo::Convert::Converter $result = xml_accent($text@comma{} $accent_command@comma{} $in_upper_case@comma{} $use_numeric_entities)}
+
+@emph{$text} is the text appearing within an accent command. @emph{$accent_command}
+should be a Texinfo tree element corresponding to an accent command taking
+an argument. @emph{$in_upper_case} is optional, and, if set, the text is put
+in upper case. The function returns the accented letter as XML entity
+if possible. @emph{$use_numeric_entities} is also optional, and, if set, and
+there is no XML entity, the numerical entity corresponding to Unicode
+points is preferred to an ASCII transliteration.
+
+@item $result = $converter->xml_accents($accent_command, $in_upper_case)
+@anchor{Texinfo::Convert::Converter $result = $converter->xml_accents($accent_command@comma{} $in_upper_case)}
+
+@emph{$accent_command} is an accent command, which may have other accent
+commands nested. If @emph{$in_upper_case} is set, the result should be
+upper cased. The function returns the accents formatted as XML.
+
+@end table
+
+Finally, there is:
+
+@table @asis
+@item $result = $converter->output_internal_links()
+@anchor{Texinfo::Convert::Converter $result = $converter->output_internal_links()}
+
+At this level, the method just returns undef. It is used in the HTML
+output, following the @code{--internal-links} option of texi2any/makeinfo
+specification.
+
+@end table
+
+@node Texinfo::Convert::Converter SEE ALSO
+@section SEE ALSO
+
+@ref{Texinfo::Common NAME}, @ref{Texinfo::Convert::Unicode NAME}, @ref{Texinfo::Report NAME}
+and @ref{Texinfo::Parser NAME}.
+
+@node Texinfo::Convert::Converter AUTHOR
+@section AUTHOR
+
+Patrice Dumas, <pertusus@@free.fr>
+
+@node Texinfo::Convert::Converter POD ERRORS
+@section POD ERRORS
+
+Hey! @strong{The above document had some coding errors, which are explained below:}
+
+@table @asis
+@item Around line 1760:
+@anchor{Texinfo::Convert::Converter Around line 1760:}
+
+'=item' outside of any '=over'
+
+@end table
+
diff --git a/macros/texinfo/texinfo/doc/tp_api/api_includes/Texinfo-Convert-DocBook.texi b/macros/texinfo/texinfo/doc/tp_api/api_includes/Texinfo-Convert-DocBook.texi
new file mode 100644
index 0000000000..89d63fefcb
--- /dev/null
+++ b/macros/texinfo/texinfo/doc/tp_api/api_includes/Texinfo-Convert-DocBook.texi
@@ -0,0 +1,76 @@
+@node Texinfo::Convert::DocBook
+@chapter Texinfo::Convert::DocBook
+
+@menu
+* Texinfo@asis{::}Convert@asis{::}DocBook NAME::
+* Texinfo@asis{::}Convert@asis{::}DocBook SYNOPSIS::
+* Texinfo@asis{::}Convert@asis{::}DocBook DESCRIPTION::
+* Texinfo@asis{::}Convert@asis{::}DocBook METHODS::
+* Texinfo@asis{::}Convert@asis{::}DocBook AUTHOR::
+@end menu
+
+@node Texinfo::Convert::DocBook NAME
+@section NAME
+
+Texinfo::Convert::DocBook - Convert Texinfo tree to DocBook
+
+@node Texinfo::Convert::DocBook SYNOPSIS
+@section SYNOPSIS
+
+@verbatim
+ my $converter
+ = Texinfo::Convert::DocBook->converter({'parser' => $parser});
+
+ $converter->output($tree);
+ $converter->convert($tree);
+ $converter->convert_tree($tree);
+@end verbatim
+
+@node Texinfo::Convert::DocBook DESCRIPTION
+@section DESCRIPTION
+
+Texinfo::Convert::DocBook converts a Texinfo tree to DocBook.
+
+@node Texinfo::Convert::DocBook METHODS
+@section METHODS
+
+@table @asis
+@item $converter = Texinfo::Convert::DocBook->converter($options)
+@anchor{Texinfo::Convert::DocBook $converter = Texinfo::Convert::DocBook->converter($options)}
+
+Initialize converter from Texinfo to DocBook.
+
+The @emph{$options} hash reference holds options for the converter. In
+this option hash reference a parser object may be associated with the
+@emph{parser} key. The other options should be configuration options
+described in the Texinfo manual. Those options, when appropriate,
+override the document content.
+
+See @ref{Texinfo::Convert::Converter NAME} for more informations.
+
+@item $converter->output($tree)
+@anchor{Texinfo::Convert::DocBook $converter->output($tree)}
+
+Convert a Texinfo tree @emph{$tree} and output the result in files as
+described in the Texinfo manual.
+
+@item $result = $converter->convert($tree)
+@anchor{Texinfo::Convert::DocBook $result = $converter->convert($tree)}
+
+Convert a Texinfo tree @emph{$tree} or tree portion and return
+the resulting output.
+
+@item $result = $converter->convert_tree($tree)
+@anchor{Texinfo::Convert::DocBook $result = $converter->convert_tree($tree)}
+
+Convert a Texinfo tree portion @emph{$tree} and return the resulting
+output. This function does not try to output a full document but only
+portions. For a full document use @code{convert}.
+
+@end table
+
+@node Texinfo::Convert::DocBook AUTHOR
+@section AUTHOR
+
+Patrice Dumas, <pertusus@@free.fr>
+
diff --git a/macros/texinfo/texinfo/doc/tp_api/api_includes/Texinfo-Convert-HTML.texi b/macros/texinfo/texinfo/doc/tp_api/api_includes/Texinfo-Convert-HTML.texi
new file mode 100644
index 0000000000..0ec39b33f6
--- /dev/null
+++ b/macros/texinfo/texinfo/doc/tp_api/api_includes/Texinfo-Convert-HTML.texi
@@ -0,0 +1,84 @@
+@node Texinfo::Convert::HTML
+@chapter Texinfo::Convert::HTML
+
+@menu
+* Texinfo@asis{::}Convert@asis{::}HTML NAME::
+* Texinfo@asis{::}Convert@asis{::}HTML SYNOPSIS::
+* Texinfo@asis{::}Convert@asis{::}HTML DESCRIPTION::
+* Texinfo@asis{::}Convert@asis{::}HTML METHODS::
+* Texinfo@asis{::}Convert@asis{::}HTML AUTHOR::
+@end menu
+
+@node Texinfo::Convert::HTML NAME
+@section NAME
+
+Texinfo::Convert::HTML - Convert Texinfo tree to HTML
+
+@node Texinfo::Convert::HTML SYNOPSIS
+@section SYNOPSIS
+
+@verbatim
+ my $converter
+ = Texinfo::Convert::HTML->converter({'parser' => $parser});
+
+ $converter->output($tree);
+ $converter->convert($tree);
+ $converter->convert_tree($tree);
+ $converter->output_internal_links(); # HTML only
+@end verbatim
+
+@node Texinfo::Convert::HTML DESCRIPTION
+@section DESCRIPTION
+
+Texinfo::Convert::HTML converts a Texinfo tree to HTML.
+
+@node Texinfo::Convert::HTML METHODS
+@section METHODS
+
+@table @asis
+@item $converter = Texinfo::Convert::HTML->converter($options)
+@anchor{Texinfo::Convert::HTML $converter = Texinfo::Convert::HTML->converter($options)}
+
+Initialize converter from Texinfo to HTML.
+
+The @emph{$options} hash reference holds options for the converter. In
+this option hash reference a parser object may be associated with the
+@emph{parser} key. The other options should be configuration options
+described in the Texinfo manual. Those options, when appropriate,
+override the document content.
+
+See @ref{Texinfo::Convert::Converter NAME} for more informations.
+
+@item $converter->output($tree)
+@anchor{Texinfo::Convert::HTML $converter->output($tree)}
+
+Convert a Texinfo tree @emph{$tree} and output the result in files as
+described in the Texinfo manual.
+
+@item $result = $converter->convert($tree)
+@anchor{Texinfo::Convert::HTML $result = $converter->convert($tree)}
+
+Convert a Texinfo tree @emph{$tree} or tree portion and return
+the resulting output.
+
+@item $result = $converter->convert_tree($tree)
+@anchor{Texinfo::Convert::HTML $result = $converter->convert_tree($tree)}
+
+Convert a Texinfo tree portion @emph{$tree} and return the resulting
+output. This function does not try to output a full document but only
+portions. For a full document use @code{convert}.
+
+@item $result = $converter->output_internal_links()
+@anchor{Texinfo::Convert::HTML $result = $converter->output_internal_links()}
+
+Returns text representing the links in the document. The format should
+follow the @code{--internal-links} option of the texi2any/makeinfo
+specification. This is only supported in (and relevant for) HTML.
+
+@end table
+
+@node Texinfo::Convert::HTML AUTHOR
+@section AUTHOR
+
+Patrice Dumas, <pertusus@@free.fr>
+
diff --git a/macros/texinfo/texinfo/doc/tp_api/api_includes/Texinfo-Convert-Info.texi b/macros/texinfo/texinfo/doc/tp_api/api_includes/Texinfo-Convert-Info.texi
new file mode 100644
index 0000000000..6a78de235d
--- /dev/null
+++ b/macros/texinfo/texinfo/doc/tp_api/api_includes/Texinfo-Convert-Info.texi
@@ -0,0 +1,76 @@
+@node Texinfo::Convert::Info
+@chapter Texinfo::Convert::Info
+
+@menu
+* Texinfo@asis{::}Convert@asis{::}Info NAME::
+* Texinfo@asis{::}Convert@asis{::}Info SYNOPSIS::
+* Texinfo@asis{::}Convert@asis{::}Info DESCRIPTION::
+* Texinfo@asis{::}Convert@asis{::}Info METHODS::
+* Texinfo@asis{::}Convert@asis{::}Info AUTHOR::
+@end menu
+
+@node Texinfo::Convert::Info NAME
+@section NAME
+
+Texinfo::Convert::Info - Convert Texinfo tree to Info
+
+@node Texinfo::Convert::Info SYNOPSIS
+@section SYNOPSIS
+
+@verbatim
+ my $converter
+ = Texinfo::Convert::Info->converter({'parser' => $parser});
+
+ $converter->output($tree);
+ $converter->convert($tree);
+ $converter->convert_tree($tree);
+@end verbatim
+
+@node Texinfo::Convert::Info DESCRIPTION
+@section DESCRIPTION
+
+Texinfo::Convert::Info converts a Texinfo tree to Info.
+
+@node Texinfo::Convert::Info METHODS
+@section METHODS
+
+@table @asis
+@item $converter = Texinfo::Convert::Info->converter($options)
+@anchor{Texinfo::Convert::Info $converter = Texinfo::Convert::Info->converter($options)}
+
+Initialize converter from Texinfo to Info.
+
+The @emph{$options} hash reference holds options for the converter. In
+this option hash reference a parser object may be associated with the
+@emph{parser} key. The other options should be configuration options
+described in the Texinfo manual. Those options, when appropriate,
+override the document content.
+
+See @ref{Texinfo::Convert::Converter NAME} for more informations.
+
+@item $converter->output($tree)
+@anchor{Texinfo::Convert::Info $converter->output($tree)}
+
+Convert a Texinfo tree @emph{$tree} and output the result in files as
+described in the Texinfo manual.
+
+@item $result = $converter->convert($tree)
+@anchor{Texinfo::Convert::Info $result = $converter->convert($tree)}
+
+Convert a Texinfo tree @emph{$tree} or tree portion and return
+the resulting output.
+
+@item $result = $converter->convert_tree($tree)
+@anchor{Texinfo::Convert::Info $result = $converter->convert_tree($tree)}
+
+Convert a Texinfo tree portion @emph{$tree} and return the resulting
+output. This function does not try to output a full document but only
+portions. For a full document use @code{convert}.
+
+@end table
+
+@node Texinfo::Convert::Info AUTHOR
+@section AUTHOR
+
+Patrice Dumas, <pertusus@@free.fr>
+
diff --git a/macros/texinfo/texinfo/doc/tp_api/api_includes/Texinfo-Convert-NodeNameNormalization.texi b/macros/texinfo/texinfo/doc/tp_api/api_includes/Texinfo-Convert-NodeNameNormalization.texi
new file mode 100644
index 0000000000..c36fa2c5de
--- /dev/null
+++ b/macros/texinfo/texinfo/doc/tp_api/api_includes/Texinfo-Convert-NodeNameNormalization.texi
@@ -0,0 +1,73 @@
+@node Texinfo::Convert::NodeNameNormalization
+@chapter Texinfo::Convert::NodeNameNormalization
+
+@menu
+* Texinfo@asis{::}Convert@asis{::}NodeNameNormalization NAME::
+* Texinfo@asis{::}Convert@asis{::}NodeNameNormalization SYNOPSIS::
+* Texinfo@asis{::}Convert@asis{::}NodeNameNormalization DESCRIPTION::
+* Texinfo@asis{::}Convert@asis{::}NodeNameNormalization METHODS::
+* Texinfo@asis{::}Convert@asis{::}NodeNameNormalization AUTHOR::
+@end menu
+
+@node Texinfo::Convert::NodeNameNormalization NAME
+@section NAME
+
+Texinfo::Convert::NodeNameNormalization - Normalize and transliterate Texinfo trees
+
+@node Texinfo::Convert::NodeNameNormalization SYNOPSIS
+@section SYNOPSIS
+
+@verbatim
+ use Texinfo::Convert::NodeNameNormalization qw(normalize_node
+ transliterate_texinfo);
+
+ my $normalized = normalize_node({'contents' => $node_contents});
+
+ my $file_name = transliterate_texinfo({'contents'
+ => $section_contents});
+@end verbatim
+
+@node Texinfo::Convert::NodeNameNormalization DESCRIPTION
+@section DESCRIPTION
+
+Texinfo::Convert::NodeNameNormalization allows to normalize node names,
+with @code{normalize_node} following the specification described in the
+Texinfo manual for HTML Xref. This is usefull each time one want a
+unique identifier for Texinfo content that is only composed of letter,
+digits, @code{-} and @code{_}. In @code{Texinfo::Parser} @code{normalize_node} is used
+for node, floats and anchor names normalization, but also float
+types @code{@@acronym} and @code{@@abbr} first argument.
+
+It is also possible to transliterate non ascii letters, instead of mangling
+them, with @code{transliterate_texinfo}, losing the uniqueness feature of
+normalized node names.
+
+@node Texinfo::Convert::NodeNameNormalization METHODS
+@section METHODS
+
+@table @asis
+@item $normalized = normalize_node($tree)
+@anchor{Texinfo::Convert::NodeNameNormalization $normalized = normalize_node($tree)}
+
+The Texinfo @emph{$tree} is returned as a string, normalized as described in the
+Texinfo manual for HTML Xref.
+
+The result will be poor for Texinfo trees which are not @@-command arguments
+(on an @@-command line or in braces), for instance if the tree contains
+@code{@@node} or block commands.
+
+@item $transliterated = transliterate_texinfo($tree, $no_unidecode)
+@anchor{Texinfo::Convert::NodeNameNormalization $transliterated = transliterate_texinfo($tree@comma{} $no_unidecode)}
+
+The Texinfo @emph{$tree} is returned as a string, with non ascii letters
+transliterated as ascii, but otherwise similar with @code{normalize_node}
+output. If the optional @emph{$no_unidecode} argument is set, @code{Text::Unidecode}
+is not used for characters whose transliteration is not built-in.
+
+@end table
+
+@node Texinfo::Convert::NodeNameNormalization AUTHOR
+@section AUTHOR
+
+Patrice Dumas, <pertusus@@free.fr>
+
diff --git a/macros/texinfo/texinfo/doc/tp_api/api_includes/Texinfo-Convert-Plaintext.texi b/macros/texinfo/texinfo/doc/tp_api/api_includes/Texinfo-Convert-Plaintext.texi
new file mode 100644
index 0000000000..26a45ca2b8
--- /dev/null
+++ b/macros/texinfo/texinfo/doc/tp_api/api_includes/Texinfo-Convert-Plaintext.texi
@@ -0,0 +1,76 @@
+@node Texinfo::Convert::Plaintext
+@chapter Texinfo::Convert::Plaintext
+
+@menu
+* Texinfo@asis{::}Convert@asis{::}Plaintext NAME::
+* Texinfo@asis{::}Convert@asis{::}Plaintext SYNOPSIS::
+* Texinfo@asis{::}Convert@asis{::}Plaintext DESCRIPTION::
+* Texinfo@asis{::}Convert@asis{::}Plaintext METHODS::
+* Texinfo@asis{::}Convert@asis{::}Plaintext AUTHOR::
+@end menu
+
+@node Texinfo::Convert::Plaintext NAME
+@section NAME
+
+Texinfo::Convert::Plaintext - Convert Texinfo tree to Plaintext
+
+@node Texinfo::Convert::Plaintext SYNOPSIS
+@section SYNOPSIS
+
+@verbatim
+ my $converter
+ = Texinfo::Convert::Plaintext->converter({'parser' => $parser});
+
+ $converter->output($tree);
+ $converter->convert($tree);
+ $converter->convert_tree($tree);
+@end verbatim
+
+@node Texinfo::Convert::Plaintext DESCRIPTION
+@section DESCRIPTION
+
+Texinfo::Convert::Plaintext converts a Texinfo tree to Plaintext.
+
+@node Texinfo::Convert::Plaintext METHODS
+@section METHODS
+
+@table @asis
+@item $converter = Texinfo::Convert::Plaintext->converter($options)
+@anchor{Texinfo::Convert::Plaintext $converter = Texinfo::Convert::Plaintext->converter($options)}
+
+Initialize converter from Texinfo to Plaintext.
+
+The @emph{$options} hash reference holds options for the converter. In
+this option hash reference a parser object may be associated with the
+@emph{parser} key. The other options should be configuration options
+described in the Texinfo manual. Those options, when appropriate,
+override the document content.
+
+See @ref{Texinfo::Convert::Converter NAME} for more informations.
+
+@item $converter->output($tree)
+@anchor{Texinfo::Convert::Plaintext $converter->output($tree)}
+
+Convert a Texinfo tree @emph{$tree} and output the result in files as
+described in the Texinfo manual.
+
+@item $result = $converter->convert($tree)
+@anchor{Texinfo::Convert::Plaintext $result = $converter->convert($tree)}
+
+Convert a Texinfo tree @emph{$tree} or tree portion and return
+the resulting output.
+
+@item $result = $converter->convert_tree($tree)
+@anchor{Texinfo::Convert::Plaintext $result = $converter->convert_tree($tree)}
+
+Convert a Texinfo tree portion @emph{$tree} and return the resulting
+output. This function does not try to output a full document but only
+portions. For a full document use @code{convert}.
+
+@end table
+
+@node Texinfo::Convert::Plaintext AUTHOR
+@section AUTHOR
+
+Patrice Dumas, <pertusus@@free.fr>
+
diff --git a/macros/texinfo/texinfo/doc/tp_api/api_includes/Texinfo-Convert-Texinfo.texi b/macros/texinfo/texinfo/doc/tp_api/api_includes/Texinfo-Convert-Texinfo.texi
new file mode 100644
index 0000000000..0fcf8a06d3
--- /dev/null
+++ b/macros/texinfo/texinfo/doc/tp_api/api_includes/Texinfo-Convert-Texinfo.texi
@@ -0,0 +1,50 @@
+@node Texinfo::Convert::Texinfo
+@chapter Texinfo::Convert::Texinfo
+
+@menu
+* Texinfo@asis{::}Convert@asis{::}Texinfo NAME::
+* Texinfo@asis{::}Convert@asis{::}Texinfo SYNOPSIS::
+* Texinfo@asis{::}Convert@asis{::}Texinfo DESCRIPTION::
+* Texinfo@asis{::}Convert@asis{::}Texinfo METHODS::
+* Texinfo@asis{::}Convert@asis{::}Texinfo AUTHOR::
+@end menu
+
+@node Texinfo::Convert::Texinfo NAME
+@section NAME
+
+Texinfo::Convert::Texinfo - Convert a Texinfo tree to Texinfo code
+
+@node Texinfo::Convert::Texinfo SYNOPSIS
+@section SYNOPSIS
+
+@verbatim
+ use Texinfo::Convert::Texinfo qw(convert);
+
+ my $texinfo_text = convert($tree);
+@end verbatim
+
+@node Texinfo::Convert::Texinfo DESCRIPTION
+@section DESCRIPTION
+
+Texinfo::Convert::Texinfo converts a Texinfo tree (described in
+@ref{Texinfo::Parser NAME}) to Texinfo code. If the Texinfo tree results from
+parsing some Texinfo document, The converted Texinfo code should be
+exactly the same as the initial document, except that user defined @@-macros
+and @code{@@value} are expanded, and some invalid code is discarded.
+
+@node Texinfo::Convert::Texinfo METHODS
+@section METHODS
+
+@table @asis
+@item $texinfo_text = convert($tree)
+@anchor{Texinfo::Convert::Texinfo $texinfo_text = convert($tree)}
+
+Converts the Texinfo tree @emph{$tree} to Texinfo code.
+
+@end table
+
+@node Texinfo::Convert::Texinfo AUTHOR
+@section AUTHOR
+
+Patrice Dumas, <pertusus@@free.fr>
+
diff --git a/macros/texinfo/texinfo/doc/tp_api/api_includes/Texinfo-Convert-TexinfoXML.texi b/macros/texinfo/texinfo/doc/tp_api/api_includes/Texinfo-Convert-TexinfoXML.texi
new file mode 100644
index 0000000000..3b9229b10c
--- /dev/null
+++ b/macros/texinfo/texinfo/doc/tp_api/api_includes/Texinfo-Convert-TexinfoXML.texi
@@ -0,0 +1,76 @@
+@node Texinfo::Convert::TexinfoXML
+@chapter Texinfo::Convert::TexinfoXML
+
+@menu
+* Texinfo@asis{::}Convert@asis{::}TexinfoXML NAME::
+* Texinfo@asis{::}Convert@asis{::}TexinfoXML SYNOPSIS::
+* Texinfo@asis{::}Convert@asis{::}TexinfoXML DESCRIPTION::
+* Texinfo@asis{::}Convert@asis{::}TexinfoXML METHODS::
+* Texinfo@asis{::}Convert@asis{::}TexinfoXML AUTHOR::
+@end menu
+
+@node Texinfo::Convert::TexinfoXML NAME
+@section NAME
+
+Texinfo::Convert::TexinfoXML - Convert Texinfo tree to TexinfoXML
+
+@node Texinfo::Convert::TexinfoXML SYNOPSIS
+@section SYNOPSIS
+
+@verbatim
+ my $converter
+ = Texinfo::Convert::TexinfoXML->converter({'parser' => $parser});
+
+ $converter->output($tree);
+ $converter->convert($tree);
+ $converter->convert_tree($tree);
+@end verbatim
+
+@node Texinfo::Convert::TexinfoXML DESCRIPTION
+@section DESCRIPTION
+
+Texinfo::Convert::TexinfoXML converts a Texinfo tree to TexinfoXML.
+
+@node Texinfo::Convert::TexinfoXML METHODS
+@section METHODS
+
+@table @asis
+@item $converter = Texinfo::Convert::TexinfoXML->converter($options)
+@anchor{Texinfo::Convert::TexinfoXML $converter = Texinfo::Convert::TexinfoXML->converter($options)}
+
+Initialize converter from Texinfo to TexinfoXML.
+
+The @emph{$options} hash reference holds options for the converter. In
+this option hash reference a parser object may be associated with the
+@emph{parser} key. The other options should be configuration options
+described in the Texinfo manual. Those options, when appropriate,
+override the document content.
+
+See @ref{Texinfo::Convert::Converter NAME} for more informations.
+
+@item $converter->output($tree)
+@anchor{Texinfo::Convert::TexinfoXML $converter->output($tree)}
+
+Convert a Texinfo tree @emph{$tree} and output the result in files as
+described in the Texinfo manual.
+
+@item $result = $converter->convert($tree)
+@anchor{Texinfo::Convert::TexinfoXML $result = $converter->convert($tree)}
+
+Convert a Texinfo tree @emph{$tree} or tree portion and return
+the resulting output.
+
+@item $result = $converter->convert_tree($tree)
+@anchor{Texinfo::Convert::TexinfoXML $result = $converter->convert_tree($tree)}
+
+Convert a Texinfo tree portion @emph{$tree} and return the resulting
+output. This function does not try to output a full document but only
+portions. For a full document use @code{convert}.
+
+@end table
+
+@node Texinfo::Convert::TexinfoXML AUTHOR
+@section AUTHOR
+
+Patrice Dumas, <pertusus@@free.fr>
+
diff --git a/macros/texinfo/texinfo/doc/tp_api/api_includes/Texinfo-Convert-Text.texi b/macros/texinfo/texinfo/doc/tp_api/api_includes/Texinfo-Convert-Text.texi
new file mode 100644
index 0000000000..595cbf916e
--- /dev/null
+++ b/macros/texinfo/texinfo/doc/tp_api/api_includes/Texinfo-Convert-Text.texi
@@ -0,0 +1,140 @@
+@node Texinfo::Convert::Text
+@chapter Texinfo::Convert::Text
+
+@menu
+* Texinfo@asis{::}Convert@asis{::}Text NAME::
+* Texinfo@asis{::}Convert@asis{::}Text SYNOPSIS::
+* Texinfo@asis{::}Convert@asis{::}Text DESCRIPTION::
+* Texinfo@asis{::}Convert@asis{::}Text METHODS::
+* Texinfo@asis{::}Convert@asis{::}Text AUTHOR::
+@end menu
+
+@node Texinfo::Convert::Text NAME
+@section NAME
+
+Texinfo::Convert::Text - Convert Texinfo tree to simple text
+
+@node Texinfo::Convert::Text SYNOPSIS
+@section SYNOPSIS
+
+@verbatim
+ use Texinfo::Convert::Text qw(convert ascii_accent text_accents);
+
+ my $result = convert($tree);
+ my $result_encoded = convert($tree,
+ {'enabled_encoding' => 'utf-8'});
+ my $result_converter = convert($tree,
+ {'converter' => $converter});
+
+ my $result_accent_text = ascii_accent('e', $accent_command);
+ my $accents_text = text_accents($accents, 'utf-8');
+@end verbatim
+
+@node Texinfo::Convert::Text DESCRIPTION
+@section DESCRIPTION
+
+Texinfo::Convert::Text is a simple backend that converts a Texinfo tree
+to simple text. It is used for some command argument expansion in
+@code{Texinfo::Parser}, for instance the file names, or encoding names.
+The converter is very simple, and, in the default case, cannot handle
+output strings translation or error handling.
+
+@node Texinfo::Convert::Text METHODS
+@section METHODS
+
+@table @asis
+@item $result = convert($tree, $options)
+@anchor{Texinfo::Convert::Text $result = convert($tree@comma{} $options)}
+
+Convert a Texinfo tree to simple text. @emph{$options} is a hash reference of
+options. The converter is very simple, and has no internal state besides
+the options. It cannot handle as is output strings translation or error
+storing.
+
+If the @emph{converter} option is set, some additional features may be available
+for the conversion of some @@-commands, like output strings translation or
+error reporting.
+
+The following options may be set:
+
+@table @asis
+@item enabled_encoding
+@anchor{Texinfo::Convert::Text enabled_encoding}
+
+If set, the value is considered to be the encoding name texinfo accented
+letters should be converted to. This option corresponds to the
+@code{--enable-encoding} option, or the @code{ENABLE_ENCODING} customization
+variable.
+
+@item sc
+@anchor{Texinfo::Convert::Text sc}
+
+If set, the text is upper-cased.
+
+@item code
+@anchor{Texinfo::Convert::Text code}
+
+If set the text is in code style. (mostly --, ---, '' and `` are kept as
+is).
+
+@item NUMBER_SECTIONS
+@anchor{Texinfo::Convert::Text NUMBER_SECTIONS}
+
+If set, sections are numbered when output.
+
+@item sort_string
+@anchor{Texinfo::Convert::Text sort_string}
+
+A somehow internal option to convert to text more suitable for alphabetical
+sorting rather than presentation.
+
+@item converter
+@anchor{Texinfo::Convert::Text converter}
+
+If this converter object is passed to the function, some features of this
+object may be used during conversion. Mostly error reporting and strings
+translation, as the converter object is also supposed to be a
+@ref{Texinfo::Report NAME} objet. See also @ref{Texinfo::Convert::Converter NAME}.
+
+@item expanded_formats_hash
+@anchor{Texinfo::Convert::Text expanded_formats_hash}
+
+A reference on a hash. The keys should be format names (like @code{html},
+@code{tex}), and if thecorresponding value is set, the format is expanded.
+
+@end table
+
+@item $result_accent_text = ascii_accent($text, $accent_command)
+@anchor{Texinfo::Convert::Text $result_accent_text = ascii_accent($text@comma{} $accent_command)}
+
+@emph{$text} is the text appearing within an accent command. @emph{$accent_command}
+should be a Texinfo tree element corresponding to an accent command taking
+an argument. The function returns a transliteration of the accented
+character.
+
+@item $result_accent_text = ascii_accent_fallback($converter, $text, $accent_command)
+@anchor{Texinfo::Convert::Text $result_accent_text = ascii_accent_fallback($converter@comma{} $text@comma{} $accent_command)}
+
+Same as @code{ascii_accent} but with an additional first argument
+converter, which is in ignored, but needed if this function is to
+be in argument of functions that need a fallback for accents
+conversion.
+
+@item $accents_text = text_accents($accents, $encoding, $set_case)
+@anchor{Texinfo::Convert::Text $accents_text = text_accents($accents@comma{} $encoding@comma{} $set_case)}
+
+@emph{$accents} is an accent command that may contain other nested accent
+commands. The function will format the whole stack of nested accent
+commands and the innermost text. If @emph{$encoding} is set, the formatted
+text is converted to this encoding as much as possible instead of being
+converted as simple ascii. If @emph{$set_case} is positive, the result
+is meant to be upper-cased, if it is negative, the result is to be
+lower-cased.
+
+@end table
+
+@node Texinfo::Convert::Text AUTHOR
+@section AUTHOR
+
+Patrice Dumas, <pertusus@@free.fr>
+
diff --git a/macros/texinfo/texinfo/doc/tp_api/api_includes/Texinfo-Convert-Unicode.texi b/macros/texinfo/texinfo/doc/tp_api/api_includes/Texinfo-Convert-Unicode.texi
new file mode 100644
index 0000000000..232f316274
--- /dev/null
+++ b/macros/texinfo/texinfo/doc/tp_api/api_includes/Texinfo-Convert-Unicode.texi
@@ -0,0 +1,103 @@
+@node Texinfo::Convert::Unicode
+@chapter Texinfo::Convert::Unicode
+
+@menu
+* Texinfo@asis{::}Convert@asis{::}Unicode NAME::
+* Texinfo@asis{::}Convert@asis{::}Unicode SYNOPSIS::
+* Texinfo@asis{::}Convert@asis{::}Unicode DESCRIPTION::
+* Texinfo@asis{::}Convert@asis{::}Unicode METHODS::
+* Texinfo@asis{::}Convert@asis{::}Unicode AUTHOR::
+@end menu
+
+@node Texinfo::Convert::Unicode NAME
+@section NAME
+
+Texinfo::Convert::Unicode - Handle conversion to Unicode
+
+@node Texinfo::Convert::Unicode SYNOPSIS
+@section SYNOPSIS
+
+@verbatim
+ use Texinfo::Convert::Unicode qw(unicode_accent encoded_accents
+ unicode_text);
+
+ my ($innermost_contents, $stack)
+ = Texinfo::Common::find_innermost_accent_contents($accent);
+
+ my $formatted_accents = encoded_accents ($converter,
+ convert($innermost_contents), $stack, $encoding,
+ \&Texinfo::Text::ascii_accent_fallback);
+
+ my $accent_text = unicode_accent('e', $accent_command);
+@end verbatim
+
+@node Texinfo::Convert::Unicode DESCRIPTION
+@section DESCRIPTION
+
+Texinfo::Convert::Unicode provides methods that deals with unicode for
+converters. Unicode is important, because it is used internally in perl
+for strings, therefore if converted to Unicode, a string could be output
+in other encodings as well when writting out the converted documents.
+
+When an encoding is given as argument of a method of the module, the
+accented letters should only be converted to unicode if it is known that
+it will be possible to convert the unicode points to encoded charactes
+in the encoding character set.
+
+@node Texinfo::Convert::Unicode METHODS
+@section METHODS
+
+@table @asis
+@item $result = unicode_accent($text, $accent_command)
+@anchor{Texinfo::Convert::Unicode $result = unicode_accent($text@comma{} $accent_command)}
+
+@emph{$text} is the text appearing within an accent command. @emph{$accent_command}
+should be a Texinfo tree element corresponding to an accent command taking
+an argument. The function returns the unicode representation of the accented
+character.
+
+@item $result = encoded_accents ($converter, $text, $stack, $encoding, $format_accent, $set_case)
+@anchor{Texinfo::Convert::Unicode $result = encoded_accents ($converter@comma{} $text@comma{} $stack@comma{} $encoding@comma{} $format_accent@comma{} $set_case)}
+
+@emph{$converter} is a converter object. It may be undef if there is no need of
+converter object in @emph{$format_accent} (@emph{$format_accent} described below).
+@emph{$text} is the text appearing within nested accent commands. @emph{$stack} is
+an array reference holding the nested accents texinfo element trees. For
+example, @emph{$text} could be the formatted content and @emph{$stack} the stack
+returned by @code{Texinfo::Common::find_innermost_accent_contents}. @emph{$encoding}
+is the encoding the accented characters should be encoded to. If
+@emph{$encoding} not set the @emph{$result} is set to undef. @emph{$format_accent}
+is a function reference that is used to format the accent commands if
+there is no encoded character available for the encoding @emph{$encoding}
+at some point of the conversion of the @emph{$stack}. Last, if
+@emph{$set_case} is positive, the result is upper-cased, while if it is negative,
+the result is lower-cased.
+
+@item $result = unicode_text ($text, $in_code)
+@anchor{Texinfo::Convert::Unicode $result = unicode_text ($text@comma{} $in_code)}
+
+Return @emph{$text} with characters encoded in unicode. If @emph{$in_code}
+is set, the text is considered to be in code style.
+
+@item $result = unicode_for_brace_no_arg_command($command_name, $encoding)
+@anchor{Texinfo::Convert::Unicode $result = unicode_for_brace_no_arg_command($command_name@comma{} $encoding)}
+
+Return the unicode representing a command with brace and no argument
+@emph{$command_name} (like @code{@@bullet@{@}}, @code{@@aa@{@}} or @code{@@guilsinglleft@{@}}),
+or undef if there is no available encoded character for encoding
+@emph{$encoding}.
+
+@item $width = string_width($string)
+@anchor{Texinfo::Convert::Unicode $width = string_width($string)}
+
+Return the string width, taking into account the fact that some characters
+have a zero width (like composing accents) while some have a width of 2
+(most chinese characters, for example).
+
+@end table
+
+@node Texinfo::Convert::Unicode AUTHOR
+@section AUTHOR
+
+Patrice Dumas, <pertusus@@free.fr>
+
diff --git a/macros/texinfo/texinfo/doc/tp_api/api_includes/Texinfo-Encoding.texi b/macros/texinfo/texinfo/doc/tp_api/api_includes/Texinfo-Encoding.texi
new file mode 100644
index 0000000000..627b93ab65
--- /dev/null
+++ b/macros/texinfo/texinfo/doc/tp_api/api_includes/Texinfo-Encoding.texi
@@ -0,0 +1,51 @@
+@node Texinfo::Encoding
+@chapter Texinfo::Encoding
+
+@menu
+* Texinfo@asis{::}Encoding NAME::
+* Texinfo@asis{::}Encoding SYNOPSIS::
+* Texinfo@asis{::}Encoding DESCRIPTION::
+* Texinfo@asis{::}Encoding METHODS::
+* Texinfo@asis{::}Encoding AUTHOR::
+@end menu
+
+@node Texinfo::Encoding NAME
+@section NAME
+
+Texinfo::Encoding - Encodings and encoding aliases
+
+@node Texinfo::Encoding SYNOPSIS
+@section SYNOPSIS
+
+@verbatim
+ use Texinfo::Encoding qw(encoding_alias);
+
+ my ($canonical_texinfo_encoding, $perl_encoding,
+ $canonical_output_encoding) = encoding_alias($encoding);
+@end verbatim
+
+@node Texinfo::Encoding DESCRIPTION
+@section DESCRIPTION
+
+Texinfo::Encoding takes care of encoding definition and aliasing.
+
+@node Texinfo::Encoding METHODS
+@section METHODS
+
+@table @asis
+@item ($canonical_texinfo_encoding, $perl_encoding, $canonical_output_encoding) = encoding_alias($encoding)
+@anchor{Texinfo::Encoding ($canonical_texinfo_encoding@comma{} $perl_encoding@comma{} $canonical_output_encoding) = encoding_alias($encoding)}
+
+Taking an encoding name as argument, the function returns the
+corresponding canonical Texinfo encoding @emph{$canonical_texinfo_encoding}
+as described in the Texinfo manual (or undef), an encoding name suitable
+for perl @emph{$perl_encoding}, and an encoding name suitable for most
+output formaats, especially HTML, @emph{$canonical_output_encoding}.
+
+@end table
+
+@node Texinfo::Encoding AUTHOR
+@section AUTHOR
+
+Patrice Dumas, <pertusus@@free.fr>
+
diff --git a/macros/texinfo/texinfo/doc/tp_api/api_includes/Texinfo-Parser.texi b/macros/texinfo/texinfo/doc/tp_api/api_includes/Texinfo-Parser.texi
new file mode 100644
index 0000000000..26fadf340c
--- /dev/null
+++ b/macros/texinfo/texinfo/doc/tp_api/api_includes/Texinfo-Parser.texi
@@ -0,0 +1,1428 @@
+@node Texinfo::Parser
+@chapter Texinfo::Parser
+
+@menu
+* Texinfo@asis{::}Parser NAME::
+* Texinfo@asis{::}Parser SYNOPSIS::
+* Texinfo@asis{::}Parser DESCRIPTION::
+* Texinfo@asis{::}Parser METHODS::
+* Texinfo@asis{::}Parser TEXINFO TREE::
+* Texinfo@asis{::}Parser SEE ALSO::
+* Texinfo@asis{::}Parser AUTHOR::
+@end menu
+
+@node Texinfo::Parser NAME
+@section NAME
+
+Texinfo::Parser - Parse Texinfo code into a Perl tree
+
+@node Texinfo::Parser SYNOPSIS
+@section SYNOPSIS
+
+@verbatim
+ use Texinfo::Parser;
+ my $parser = Texinfo::Parser::parser();
+ my $tree = $parser->parse_texi_file("somefile.texi");
+ my ($errors, $errors_count) = $parser->errors();
+ foreach my $error_message (@$errors) {
+ warn $error_message->{'error_line'};
+ }
+
+ my $index_names = $parser->indices_information();
+ my $float_types_arrays = $parser->floats_information();
+ my $internal_references_array
+ = $parser->internal_references_information();
+ # An hash reference on normalized node/float/anchor names
+ my $labels_information = $parser->labels_information();
+ # A hash reference, keys are @-command names, value is an
+ # array reference holding all the corresponding @-commands.
+ my $global_commands_information = $parser->global_commands_information();
+ # a hash reference on some document informations (encodings,
+ # input file name, dircategory and direntry list, for exampel).
+ my $global_informations = $parser->global_informations();
+@end verbatim
+
+@node Texinfo::Parser DESCRIPTION
+@section DESCRIPTION
+
+Texinfo::Parser will parse Texinfo text into a perl tree. In one pass
+it expands user-defined @@-commands, conditionals (@@ifset, @@ifinfo...)
+and @@value and constructs the tree. Some extra information is gathered
+while doing the tree: for example, the block command associated with @@end,
+the number of rows in a multitable, or the node associated with a section.
+
+@node Texinfo::Parser METHODS
+@section METHODS
+
+No method is exported in the default case. The module allows both
+an object-oriented syntax, or traditional function, with the parser
+as an opaque data structure given as an argument to every function.
+
+@menu
+* Texinfo@asis{::}Parser Initialization::
+* Texinfo@asis{::}Parser Parsing Texinfo text::
+* Texinfo@asis{::}Parser Getting information on the document::
+* Texinfo@asis{::}Parser Texinfo Parser options::
+@end menu
+
+@node Texinfo::Parser Initialization
+@subsection Initialization
+
+The following method is used to construct a new @code{Texinfo::Parser} object:
+
+@table @asis
+@item $parser = Texinfo::Parser::parser($options);
+@anchor{Texinfo::Parser $parser = Texinfo::Parser::parser($options);}
+
+This method creates a new parser. The options may be provided as a hash
+reference. There are two types of option. The first type of option
+change the way the parser behaves; they are described right here. The
+other type of option allows giving the parser some information as if
+it came from texinfo code; for example, allow setting aliases (as with
+@code{@@alias}), values (as with @code{@@set}), or merged indices (as with
+@code{@@synindex}). These options are described below in @ref{Texinfo::Parser Texinfo Parser options,, Texinfo Parser options}.
+
+@table @asis
+@item expanded_formats
+@anchor{Texinfo::Parser expanded_formats}
+
+An array reference of the output formats for which @code{@@if@emph{FORMAT}}
+conditional blocks should be expanded. Default is empty.
+
+@item include_directories
+@anchor{Texinfo::Parser include_directories}
+
+An array reference of directories in which @code{@@include} files should be
+searched for. Default contains the working directory, @file{.}.
+
+@item IGNORE_BEFORE_SETFILENAME
+@anchor{Texinfo::Parser IGNORE_BEFORE_SETFILENAME}
+
+If set, and @code{@@setfilename} exists, everything before @code{@@setfilename}
+is put in a special container type, @@@code{preamble_before_setfilename}.
+This option is set in the default case.
+
+@item IGNORE_SPACE_AFTER_BRACED_COMMAND_NAME
+@anchor{Texinfo::Parser IGNORE_SPACE_AFTER_BRACED_COMMAND_NAME}
+
+If set, spaces after an @@-command name that take braces are ignored.
+Default on.
+
+@item MAX_MACRO_CALL_NESTING
+@anchor{Texinfo::Parser MAX_MACRO_CALL_NESTING}
+
+Maximal number of nested user-defined macro calls. Default is 100000.
+
+@item SHOW_MENU
+@anchor{Texinfo::Parser SHOW_MENU}
+
+If false, no menu-related errors are reported. Default is true.
+
+@end table
+
+@end table
+
+@node Texinfo::Parser Parsing Texinfo text
+@subsection Parsing Texinfo text
+
+There are three methods that may be called to parse some Texinfo code:
+@code{parse_texi_line} for a line, @code{parse_texi_text} for a text fragment,
+and @code{parse_texi_file} for a file.
+
+For all those functions, if the @emph{$parser} argument is undef, a new
+parser object is generated to parse the line. Otherwise the parser given
+as an argument is used to parse into a tree.
+
+When @code{parse_texi_text} is used, the resulting tree is rooted at
+a @code{root_line} type container. Otherwise, the resulting tree should be
+rooted at a @code{text_root} type container if it does not contain nodes or
+sections, at a @code{document_root} type container otherwise.
+
+@table @asis
+@item $tree = parse_texi_line($parser, $text, $first_line_number, $file_name, $macro_name, $fixed_line_number)
+@anchor{Texinfo::Parser $tree = parse_texi_line($parser@comma{} $text@comma{} $first_line_number@comma{} $file_name@comma{} $macro_name@comma{} $fixed_line_number)}
+
+This function is used to parse a short fragment of Texinfo code.
+
+@emph{$text} may be either an array reference of lines, or a text.
+
+The other arguments are optional and allow specifying the position
+information of the Texinfo code. @emph{$first_line_number} is the line number
+of the first text line. @emph{$file_name} is the name of the file the
+text comes from. @emph{$macro} is for the user-defined macro name the text
+is expanded from. If @emph{$fixed_line_number} is set, the line number is
+not increased for the different lines, as if the text was the expansion
+of a macro.
+
+@item $tree = parse_texi_text ($parser, $text, $line_numbers_specification, $file_name, $macro_name, $fixed_line_number)
+@anchor{Texinfo::Parser $tree = parse_texi_text ($parser@comma{} $text@comma{} $line_numbers_specification@comma{} $file_name@comma{} $macro_name@comma{} $fixed_line_number)}
+
+This function is used to parse some Texinfo text.
+
+@emph{$text} may be either an array reference of lines, or a text.
+
+The other arguments are optional and allow specifying the position
+information of the Texinfo code. There are two distinct cases for
+@emph{$line_numbers_specification}.
+
+@enumerate
+@item If it is an array reference, it is considered to hold objects describing
+the position information of each text line.
+
+@item If @emph{$line_numbers_specification} is a scalar, it is the line number of
+the first text line. In that case (like for @code{parse_texi_text}),
+@emph{$file_name} is the name of the file the text comes from.
+and @emph{$macro} is for the user-defined macro name the text
+is expanded from. If @emph{$fixed_line_number} is set, the line number is
+not increased for the different lines, as if the text was the expansion
+of a macro.
+
+@end enumerate
+
+@item $tree = parse_texi_file($parser, $file_name)
+@anchor{Texinfo::Parser $tree = parse_texi_file($parser@comma{} $file_name)}
+
+The file with name @emph{$file_name} is considered to be a Texinfo file and
+is parsed into a tree.
+
+undef is returned if the file couldn't be read.
+
+@end table
+
+The errors collected during the tree parsing are available through the
+@code{errors} method. This method comes from @code{Texinfo::Report}, and is
+described in @ref{Texinfo::Report ($error_warnings_list@comma{} $error_count) = errors ($converter), errors, errors}.
+
+@node Texinfo::Parser Getting information on the document
+@subsection Getting information on the document
+
+After parsing some information about the Texinfo code that was processed
+is available from the parser.
+
+Some global information is available through @code{global_informations}
+
+@table @asis
+@item $info = global_informations($parser)
+@anchor{Texinfo::Parser $info = global_informations($parser)}
+
+The @emph{$info} returned is a hash reference. The possible keys are
+
+@table @asis
+@item input_file_name
+@anchor{Texinfo::Parser input_file_name}
+
+The name of the main Texinfo input file.
+
+@item input_encoding_name
+@anchor{Texinfo::Parser input_encoding_name}
+
+@item input_perl_encoding
+@anchor{Texinfo::Parser input_perl_encoding}
+
+@code{input_encoding_name} string is the encoding name used for the
+Texinfo code.
+@code{input_perl_encoding} string is a corresponding perl encoding name.
+
+@item dircategory_direntry
+@anchor{Texinfo::Parser dircategory_direntry}
+
+An array of successive @code{@@dircategory} and @code{@@direntry} as they appear
+in the document.
+
+@item novalidate
+@anchor{Texinfo::Parser novalidate}
+
+If set, it is as if @code{@@novalidate} was set in the document.
+
+@end table
+
+@end table
+
+Some command lists are available, such that it is possible to go through
+the corresponding tree elements without walking the tree. They are
+available through @code{global_commands_information}
+
+@table @asis
+@item $commands = global_commands_information($parser)
+@anchor{Texinfo::Parser $commands = global_commands_information($parser)}
+
+@emph{$commands} is an hash reference. The keys are @@-command names. The
+associated values are array references containing all the corresponding
+tree elements.
+
+@end table
+
+All the @@-commands that have an associated label (so can be the
+target of cross references) - @code{@@node}, @code{@@anchor} and @code{@@float} with
+label - have a normalized name associated, constructed as described in the
+@strong{HTML Xref} node in the Texinfo manual. Those normalized labels and
+the association with @@-commands is available through @code{labels_information}:
+
+@table @asis
+@item $labels_information = labels_information($parser)
+@anchor{Texinfo::Parser $labels_information = labels_information($parser)}
+
+@emph{$labels_information} is a hash reference whose keys are normalized
+labels, and the associated value is the corresponding @@-command.
+
+@end table
+
+Information on @code{@@float} is also available, grouped by type of
+floats, each type correponding to potential @code{@@listoffloats}.
+This information is available through the method @code{floats_information}.
+
+@table @asis
+@item $float_types = floats_information($parser)
+@anchor{Texinfo::Parser $float_types = floats_information($parser)}
+
+@emph{$float_types} is a hash reference whose keys are normalized float
+types (the first float argument, or the @code{@@listoffloats} argument).
+The normalization is the same as for node names. The value is the list
+of float tree elements appearing in the texinfo document.
+
+@end table
+
+Internal references, that is, @@-commands that refer to node, anchors
+or floats within the document are also available:
+
+@table @asis
+@item $internal_references_array = internal_references_information($parser);
+@anchor{Texinfo::Parser $internal_references_array = internal_references_information($parser);}
+
+The function returns a list of cross-reference commands referring to
+the same document.
+
+@end table
+
+Information about defined indices, merged indices and index entries is
+also available through the @code{indices_information} method.
+
+@table @asis
+@item indices_information
+@anchor{Texinfo::Parser indices_information}
+
+@verbatim
+ $index_names = indices_information($parser);
+@end verbatim
+
+The index names is a hash reference. The keys are
+
+@table @asis
+@item in_code
+@anchor{Texinfo::Parser in_code}
+
+1 if the index entries should be formatted as code, 0 in the opposite case.
+
+@item name
+@anchor{Texinfo::Parser name}
+
+The index name.
+
+@item prefix
+@anchor{Texinfo::Parser prefix}
+
+An array reference of prefix associated to the index.
+
+@item merged_in
+@anchor{Texinfo::Parser merged_in}
+
+In case the index is merged to another index, this key holds the name of
+the index the index is merged into. It takes into account indirectly
+merged indices.
+
+@item contained_indices
+@anchor{Texinfo::Parser contained_indices}
+
+An hash reference holding names of indices that are merged into the index,
+including itself. It also contains indirectly merged indices. This key
+is removed if the index is itself later merged to another index.
+
+@item index_entries
+@anchor{Texinfo::Parser index_entries}
+
+An array reference containing index entry structures for index entries
+associated with the index. The index entry could be associated to
+@@-commands like @code{@@cindex}, or @code{@@item} in @code{@@vtable}, or definition
+commands entries like @code{@@deffn}.
+
+The keys of the index entry structures are
+
+@table @asis
+@item index_name
+@anchor{Texinfo::Parser index_name}
+
+The index name.
+
+@item index_at_command
+@anchor{Texinfo::Parser index_at_command}
+
+The name of the @@-command associated with the index entry.
+
+@item index_type_command
+@anchor{Texinfo::Parser index_type_command}
+
+The @@-command associated with the index entry allowing to
+find the index type.
+
+@item content
+@anchor{Texinfo::Parser content}
+
+An array reference corresponding to the index entry content.
+
+@item content_normalized
+@anchor{Texinfo::Parser content_normalized}
+
+An array reference corresponding to the index entry content, independent
+of the current language.
+
+@item command
+@anchor{Texinfo::Parser command}
+
+The element in the parsed tree associated with the @@-command holding the
+index entry.
+
+@item node
+@anchor{Texinfo::Parser node}
+
+The node in the parsed tree containing the index entry.
+
+@item number
+@anchor{Texinfo::Parser number}
+
+The number of the index entry.
+
+@item region
+@anchor{Texinfo::Parser region}
+
+The region command (@code{@@copying}, @code{@@titlepage}) containing the index entry,
+if it is in such an environement.
+
+@end table
+
+@end table
+
+The following shows the references corresponding to the default indexes
+@emph{cp} and @emph{fn}, the @emph{fn} index having its entries formatted as code and
+the indices corresponding to the following texinfo
+
+@verbatim
+ @defindex some
+ @defcodeindex code
+
+ $index_names = {'cp' => {'name' => 'cp', 'in_code' => 0, },
+ 'fn' => {'name' => 'fn', 'in_code' => 1, },
+ 'some' => {'in_code' => 0},
+ 'code' => {'in_code' => 1}};
+@end verbatim
+
+If @code{name} is not set, it is set to the index name.
+
+@end table
+
+@node Texinfo::Parser Texinfo Parser options
+@subsection Texinfo Parser options
+
+Setting these options is the same as seeing some Texinfo constructs in the
+document.
+
+@table @asis
+@item aliases
+@anchor{Texinfo::Parser aliases}
+
+A hash reference. The key is a command name, the value is the alias, as
+could be set by @code{@@alias}.
+
+@item clickstyle
+@anchor{Texinfo::Parser clickstyle}
+
+A string, the command name associated with @code{@@clickstyle}.
+
+@item documentlanguage
+@anchor{Texinfo::Parser documentlanguage}
+
+A string corresponding to a document language set by @code{@@documentlanguage}.
+
+@item INPUT_ENCODING_NAME
+@anchor{Texinfo::Parser INPUT_ENCODING_NAME}
+
+@item INPUT_PERL_ENCODING
+@anchor{Texinfo::Parser INPUT_PERL_ENCODING}
+
+@code{INPUT_ENCODING_NAME} string is the encoding name as set
+by @code{@@documentencoding}.
+@code{INPUT_PERL_ENCODING} string is a corresponding perl encoding name.
+In general those two strings should be set simultaneously.
+
+@item indices
+@anchor{Texinfo::Parser indices}
+
+If it is a hash reference, the keys are index names, the values are
+index prefix hash references. The index prefix hash reference values are
+prefix, the value is set if the corresponding index entries should be
+formatted as if in @code{@@code}. An example is as @ref{Texinfo::Parser indices_information,, indices_information}.
+
+If it is an array reference, it is a list of index names, as if they were
+entered as
+
+@verbatim
+ @defindex name
+@end verbatim
+
+@item kbdinputstyle
+@anchor{Texinfo::Parser kbdinputstyle}
+
+A string, the @code{@@kbdinputstyle} style.
+
+@item labels
+@anchor{Texinfo::Parser labels}
+
+A hash reference. Keys are normalized node names as described in the
+@strong{HTML Xref} node in the Texinfo manual. Instead of a node, it may also
+be a float label or an anchor name. The value is the corresponding
+@@-command element in the tree.
+
+@item macros
+@anchor{Texinfo::Parser macros}
+
+The associated hash reference has as keys user-defined macro names. The
+value is the reference on a macro definition element as obtained by
+the Parser when parsing a @code{@@macro}. For example
+
+@verbatim
+ @macro mymacro{arg}
+ coucou \arg\ after arg
+ @end macro
+@end verbatim
+
+Is associated to a macro definition element
+
+@verbatim
+ {'cmdname' => 'macro',
+ 'args' => [{'text' => 'mymacro', 'type' => 'macro_name'},
+ {'text' => 'arg', 'type' => 'macro_arg}],
+ 'contents' => [{'text' => "coucou \arg\ after arg\n", 'type' => 'raw'}],
+ 'extra' => {'arg_line' => " mymacro{arg}\n", }}
+@end verbatim
+
+= item merged_indices
+
+The associated hash reference holds merged indices information, each key
+is merged in the value. Same as setting @code{@@synindex} or @code{syncodeindex}.
+
+@item sections_level
+@anchor{Texinfo::Parser sections_level}
+
+Modifier of the sections level. Same as calling @code{@@lowersections} or
+@code{@@raisesections}.
+
+@item values
+@anchor{Texinfo::Parser values}
+
+A hash reference. Keys are names, values are the corresponding values.
+Same as values set by @code{@@set}.
+
+@end table
+
+@node Texinfo::Parser TEXINFO TREE
+@section TEXINFO TREE
+
+A Texinfo tree element (called element because node is overloaded in
+the Texinfo world) is an hash reference. There are three main categories
+of tree element. Tree elements associated with an @@-command have a
+@code{cmdname} key holding the @@-command name. Tree elements corresponding
+to text fragments have a @code{text} key holding the corresponding text.
+Finally, the last category is other containers (hereafter called
+containers) which in most cases have a @code{type} key holding their name.
+Text fragments and @@-command elements may also have an associated type
+when such information is needed.
+
+The children of an @@-command or container element are in the array
+referred to with the @code{args} key or with the @code{contents} key. The
+@code{args} key is for arguments of @@-commands, either in braces or on
+the rest of the line after the command, depending on the type of command.
+@code{args} is also used for the elements of a menu entry, as a menu
+entry is well-structured with a limited number of arguments.
+The @code{contents} key array holds the contents of the texinfo
+code appearing within a block @@-command, within a container,
+or within a @code{@@node} or sectioning @@-command.
+
+Another important key for the elements is the @code{extra} key which is
+associated to a hash reference and holds all kinds of information that
+is gathered during the parsing and may help with the conversion.
+
+You can see examples of the tree structure by running makeinfo like
+this:
+
+@verbatim
+ makeinfo -c DUMP_TREE=1 -c TEXINFO_OUTPUT_FORMAT=parse document.texi
+@end verbatim
+
+For a simpler, more regular representation of the tree structure, you
+can do:
+
+@verbatim
+ makeinfo -c TEXINFO_OUTPUT_FORMAT=debugtree document.texi
+@end verbatim
+
+@menu
+* Texinfo@asis{::}Parser Element keys::
+* Texinfo@asis{::}Parser Element types::
+* Texinfo@asis{::}Parser Information available in the extra key::
+* Texinfo@asis{::}Parser Other information set by the parser::
+@end menu
+
+@node Texinfo::Parser Element keys
+@subsection Element keys
+
+@table @asis
+@item cmdname
+@anchor{Texinfo::Parser cmdname}
+
+The command name of @@-command elements.
+
+@item text
+@anchor{Texinfo::Parser text}
+
+The text fragment of text elements.
+
+@item type
+@anchor{Texinfo::Parser type}
+
+The type of the element. For @code{@@verb} it is the delimiter. But otherwise
+it is the type of element considered as a container. Frequent types
+encountered are @emph{paragraph} for a paragraph container,
+@emph{brace_command_arg} for the container holding the brace @@-commands
+contents, @emph{line_arg} and @emph{block_line_arg} contain the arguments
+appearing on the line of @@-commands. Text fragments may have a type to
+give an information of the kind of text fragment, for example
+@code{empty_spaces_before_argument} is associated to spaces after a brace
+opening and before the argument. Many @@-commands elements don't have
+a type associated.
+
+@item args
+@anchor{Texinfo::Parser args}
+
+Arguments in braces or on @@-command line, and the elements of a menu entry.
+
+@item contents
+@anchor{Texinfo::Parser contents}
+
+The Texinfo appearing in the element. For block commands, other
+containers, @code{@@node} and sectioning commands.
+
+@item parent
+@anchor{Texinfo::Parser parent}
+
+The parent element.
+
+@item line_nr
+@anchor{Texinfo::Parser line_nr}
+
+An hash reference corresponding to information on the location of the
+element in the Texinfo input manual. It should only be available for
+@@-command elements, and only for @@-commands that are considered to be
+complex enough that the location in the document is needed, for example
+to prepare an error message.
+
+The keys of the line number hash references are
+
+@table @asis
+@item line_nr
+@anchor{Texinfo::Parser line_nr 1}
+
+The line number of the @@-command.
+
+@item file_name
+@anchor{Texinfo::Parser file_name}
+
+The file name where @@-command appeared.
+
+@item macro
+@anchor{Texinfo::Parser macro}
+
+The user macro name the @@-command is expanded from.
+
+@end table
+
+@item extra
+@anchor{Texinfo::Parser extra}
+
+A hash reference holding any additional information.
+See @ref{Texinfo::Parser Information available in the extra key,, Information available in the extra key}.
+
+@end table
+
+@node Texinfo::Parser Element types
+@subsection Element types
+
+@menu
+* Texinfo@asis{::}Parser Types for command elements::
+* Texinfo@asis{::}Parser Types for text elements::
+* Texinfo@asis{::}Parser Types of container elements::
+@end menu
+
+@node Texinfo::Parser Types for command elements
+@subsubsection Types for command elements
+
+Some types can be associated with @@-commands (in addition to the element
+being described by @code{cmdname}), although usually there will be no type
+at all. As said above, for @code{@@verb} the type is the delimiter. For a
+@code{@@value} command that is not expanded because there is no corresponding
+value set, the type is the value argument string.
+
+The following are the other possible values of @code{type} for tree elements
+for @@-commands.
+
+@table @asis
+@item def_line
+@anchor{Texinfo::Parser def_line}
+
+This type may be associated with a definition command with a x form,
+like @code{@@defunx}, @code{@@defvrx}. For the form without x, the associated
+@emph{def_line} is the first @code{contents} element. It is described in more
+details below.
+
+@item command_as_argument
+@anchor{Texinfo::Parser command_as_argument}
+
+This is the type of a command given in argument of @code{@@itemize},
+@code{@@table}, @code{@@vtable} or @code{@@ftable}. For example in
+
+@verbatim
+ @itemize @bullet
+ @item item
+ @end itemize
+@end verbatim
+
+the element corresponding with bullet has the following keys:
+
+@verbatim
+ 'cmdname' => 'bullet'
+ 'type' => 'command_as_argument'
+@end verbatim
+
+The parent @@-command has an entry in extra for the @emph{command_as_argument}
+element:
+
+@verbatim
+ 'cmdname' => 'itemize'
+ 'extra => {'command_as_argument' => $command_element_as_argument}
+@end verbatim
+
+@item index_entry_command
+@anchor{Texinfo::Parser index_entry_command}
+
+This is the type of index entry command like @code{@@cindex}, and, more
+importantly user-defined index entry commands. So for example if there
+is
+
+@verbatim
+ @defindex foo
+ ...
+
+ @fooindex index entry
+@end verbatim
+
+the @code{@@fooindex} @@-command element will have the @emph{index_entry_command}
+type.
+
+@item following_arg
+@anchor{Texinfo::Parser following_arg}
+
+This type is set for non-alphabetic accent @@-commands that don't use braces
+but instead have their argument right after them, as
+
+@verbatim
+ @~n
+@end verbatim
+
+@item space_command_arg
+@anchor{Texinfo::Parser space_command_arg}
+
+This type is set for accent @@-commands that don't use brace but instead
+have their argument after some space, as
+
+@verbatim
+ @ringaccent A
+@end verbatim
+
+@item definfoenclose_command
+@anchor{Texinfo::Parser definfoenclose_command}
+
+This type is set for an @@-command that is redefined by @code{@@definfoenclose}.
+The beginning is in @code{@{'extra'@}->@{'begin'@}} and the end in
+@code{@{'extra'@}->@{'end'@}}.
+
+@end table
+
+@node Texinfo::Parser Types for text elements
+@subsubsection Types for text elements
+
+The text elements may have the following types (or may have no type
+at all):
+
+@table @asis
+@item empty_line
+@anchor{Texinfo::Parser empty_line}
+
+An empty line (possibly containing whitespace characters only).
+
+@item empty_line_after_command
+@anchor{Texinfo::Parser empty_line_after_command}
+
+@item empty_spaces_after_command
+@anchor{Texinfo::Parser empty_spaces_after_command}
+
+The text is spaces for @emph{empty_spaces_after_command}
+or spaces followed by a newline for
+@emph{empty_line_after_command}, appearing after an @@-command that
+takes an argument on the line or a block @@-command.
+
+@item empty_spaces_before_argument
+@anchor{Texinfo::Parser empty_spaces_before_argument}
+
+The text is spaces appearing after an opening brace or after a
+comma separating a command's arguments.
+
+@item spaces_at_end
+@anchor{Texinfo::Parser spaces_at_end}
+
+Space at the end of an argument to a line command, at the end of an
+comma-separated argument for some brace commands, or at the end of
+bracketed content on a @code{@@multitable} line or definition line.
+
+@item empty_spaces_after_close_brace
+@anchor{Texinfo::Parser empty_spaces_after_close_brace}
+
+Spaces appearing after a closing brace, for some rare commands for which
+this space should be ignorable (like @code{@@caption}).
+
+@item empty_spaces_before_paragraph
+@anchor{Texinfo::Parser empty_spaces_before_paragraph}
+
+Space appearing before a paragraph beginning.
+
+@item raw
+@anchor{Texinfo::Parser raw}
+
+Text in an environment where it should be kept as is (in @code{@@verbatim},
+@code{@@verb}, @code{@@html}, @code{@@macro} body).
+
+@item last_raw_newline
+@anchor{Texinfo::Parser last_raw_newline}
+
+The last end of line in a raw block (except for @code{@@verbatim}).
+
+@item preamble_text
+@anchor{Texinfo::Parser preamble_text}
+
+Text appearing before real content, including the @code{\input texinfo.tex}.
+
+@item space_at_end_menu_node
+@anchor{Texinfo::Parser space_at_end_menu_node}
+
+@item after_description_line
+@anchor{Texinfo::Parser after_description_line}
+
+Space after a node in the menu entry, when there is no description,
+and space appearing after the description line.
+
+@end table
+
+@node Texinfo::Parser Types of container elements
+@subsubsection Types of container elements
+
+The other types of element are the following. These are containers with
+other elements appearing in their @code{contents}.
+
+@table @asis
+@item text_root
+@anchor{Texinfo::Parser text_root}
+
+@item document_root
+@anchor{Texinfo::Parser document_root}
+
+@item root_line
+@anchor{Texinfo::Parser root_line}
+
+These types correspond to document roots. @code{text_root} is the document
+root when there is no @code{@@node} or sectioning command. When
+such a command appears, a new root container is used, @code{document_root},
+and @code{text_root} becomes the first element in the contents of @code{document_root}.
+@code{root_line} is the type of the root tree when parsing Texinfo line
+fragments using @code{parse_texi_line}.
+
+@item preamble
+@anchor{Texinfo::Parser preamble}
+
+This container holds the text appearing before the first content, including
+the @code{\input texinfo.tex} line and following blank lines.
+
+@item preamble_before_setfilename
+@anchor{Texinfo::Parser preamble_before_setfilename}
+
+This container holds everything that appears before @code{@@setfilename}
+if @emph{IGNORE_BEFORE_SETFILENAME} parser option is set.
+
+@item paragraph
+@anchor{Texinfo::Parser paragraph}
+
+A paragraph. The @code{contents} of a paragraph (like other container
+elements for Texinfo content) are elements representing the contents of
+the paragraph in the order they occur, such as simple text elements
+without a @code{cmdname} or @code{type}, or @@-command elements for commands
+appearing in the paragraph.
+
+@item preformatted
+@anchor{Texinfo::Parser preformatted}
+
+Texinfo code within a format that is not filled. Happens within some
+block commands like @code{@@example}, but also in menu (in menu descriptions,
+menu comments...).
+
+@item brace_command_arg
+@anchor{Texinfo::Parser brace_command_arg}
+
+@item brace_command_context
+@anchor{Texinfo::Parser brace_command_context}
+
+@item line_arg
+@anchor{Texinfo::Parser line_arg}
+
+@item block_line_arg
+@anchor{Texinfo::Parser block_line_arg}
+
+Those containers occur within the @code{args} array of @@-commands taking an
+argument. @emph{brace_command_arg} is used for the arguments to commands
+taking arguments surrounded by braces (and in some cases separated by
+commas). @emph{brace_command_context} is used for @@-commands with braces
+that start a new context (@code{@@footnote}, @code{@@caption}, @code{@@math}).
+
+@emph{line_arg} is used for commands that take the texinfo code on the
+rest of the line as their argument (for example (@code{@@settitle}, @code{@@node},
+@code{@@section} and similar). @emph{block_line_arg} is similar but is used for
+commands that start a new block (which is to be ended with @code{@@end}).
+
+For example
+
+@verbatim
+ @code{in code}
+@end verbatim
+
+leads to
+
+@verbatim
+ {'cmdname' => 'code',
+ 'args' => [{'type' => 'brace_command_arg',
+ 'contents' => [{'text' => 'in code'}]}]}
+@end verbatim
+
+@item misc_arg
+@anchor{Texinfo::Parser misc_arg}
+
+Used for the arguments to some special line commands whose arguments
+aren't subject to the usual macro expansion. For example @code{@@set},
+@code{@@clickstyle}, @code{@@unmacro}, @code{@@comment}. The argument is associated to
+the @emph{text} key.
+
+@item menu_entry
+@anchor{Texinfo::Parser menu_entry}
+
+@item menu_entry_leading_text
+@anchor{Texinfo::Parser menu_entry_leading_text}
+
+@item menu_entry_name
+@anchor{Texinfo::Parser menu_entry_name}
+
+@item menu_entry_separator
+@anchor{Texinfo::Parser menu_entry_separator}
+
+@item menu_entry_node
+@anchor{Texinfo::Parser menu_entry_node}
+
+@item menu_entry_description
+@anchor{Texinfo::Parser menu_entry_description}
+
+A @emph{menu_entry} holds a full menu entry, like
+
+@verbatim
+ * node:: description.
+@end verbatim
+
+The different elements of the menu entry are directly in the
+@emph{menu_entry} @code{args} array reference.
+
+@emph{menu_entry_leading_text} holds the star and following spaces.
+@emph{menu_entry_name} is the menu entry name (if present), @emph{menu_entry_node}
+corresponds to the node in the menu entry, @emph{menu_entry_separator} holds
+the text after the node and before the description, in most cases
+@code{:: }. Lastly, @emph{menu_entry_description} is for the description.
+
+@item menu_comment
+@anchor{Texinfo::Parser menu_comment}
+
+The @emph{menu_comment} container holds what is between menu entries
+in menus. For example in
+
+@verbatim
+ @menu
+ Menu title
+
+ * entry::
+
+ Between entries
+ * other::
+ @end menu
+@end verbatim
+
+Both
+
+@verbatim
+ Menu title
+@end verbatim
+
+and
+
+@verbatim
+ Between entries
+@end verbatim
+
+will be in @emph{menu_comment}.
+
+@item macro_name
+@anchor{Texinfo::Parser macro_name}
+
+@item macro_arg
+@anchor{Texinfo::Parser macro_arg}
+
+Taken from @code{@@macro} definition and put in the @code{args} key array of
+the macro, @emph{macro_name} is the type of the text fragment corresponding
+to the macro name, @emph{macro_arg} is the type of the text fragments
+correponding to macro formal arguments.
+
+@item before_item
+@anchor{Texinfo::Parser before_item}
+
+A container for content before the first @code{@@item} of block @@-commands
+with items (@code{@@table}, @code{@@multitable}, @code{@@enumerate}...).
+
+@item table_entry
+@anchor{Texinfo::Parser table_entry}
+
+@item table_term
+@anchor{Texinfo::Parser table_term}
+
+@item table_item
+@anchor{Texinfo::Parser table_item}
+
+@item inter_item
+@anchor{Texinfo::Parser inter_item}
+
+Those containers appear in @code{@@table}, @code{@@ftable} and @code{@@vtable}.
+A @emph{table_entry} container contains an entire row of the table.
+It contains a @emph{table_term} container, which holds all the @code{@@item} and
+@code{@@itemx} lines. This is followed by a @emph{table_item} container, which
+holds the content that is to go into the second column of the table.
+
+If there is any content before an @code{@@itemx} (normally only comments,
+empty lines or maybe index entries are allowed), it will be in
+a container with type @emph{inter_item}.
+
+@item def_line
+@anchor{Texinfo::Parser def_line 1}
+
+@item def_item
+@anchor{Texinfo::Parser def_item}
+
+@item inter_def_item
+@anchor{Texinfo::Parser inter_def_item}
+
+The @emph{def_line} type is either associated with a container within a
+definition command, or is the type of a definition command with a x
+form, like @code{@@deffnx}. It holds the definition line arguments.
+The container with type @emph{def_item} holds the definition text content.
+Content appearing before a definition command with a x form is in
+an @emph{inter_def_item} container.
+
+@item multitable_head
+@anchor{Texinfo::Parser multitable_head}
+
+@item multitable_body
+@anchor{Texinfo::Parser multitable_body}
+
+@item row
+@anchor{Texinfo::Parser row}
+
+In @code{@@multitable}, a @emph{multitable_head} container contains all the rows
+with @code{@@headitem}, while @emph{multitable_body} contains the rows associated
+with @code{@@item}. A @emph{row} container contains the @code{@@item} and @@<tab>
+forming a row.
+
+@item bracketed
+@anchor{Texinfo::Parser bracketed}
+
+This a special type containing content in brackets in the context
+where they are valid, in @code{@@math}.
+
+@item bracketed_def_content
+@anchor{Texinfo::Parser bracketed_def_content}
+
+Content in brackets on definition command lines.
+
+@item def_aggregate
+@anchor{Texinfo::Parser def_aggregate}
+
+Contains several elements that together are a single unit on a @@def* line.
+
+@item bracketed_multitable_prototype
+@anchor{Texinfo::Parser bracketed_multitable_prototype}
+
+@item row_prototype
+@anchor{Texinfo::Parser row_prototype}
+
+On @code{@@multitable} line, content in brackets is in
+@emph{bracketed_multitable_prototype}, text not in brackets
+is in @emph{row_prototype}.
+
+@end table
+
+@node Texinfo::Parser Information available in the extra key
+@subsection Information available in the extra key
+
+@menu
+* Texinfo@asis{::}Parser Extra keys available for more than one @@-command::
+* Texinfo@asis{::}Parser Extra keys specific of certain @@-commands or containers::
+@end menu
+
+@node Texinfo::Parser Extra keys available for more than one @@-command
+@subsubsection Extra keys available for more than one @@-command
+
+@table @asis
+@item end_command
+@anchor{Texinfo::Parser end_command}
+
+The @code{@@end} associated to the block @@-command.
+
+@item missing_argument
+@anchor{Texinfo::Parser missing_argument}
+
+Set for some @@-commands with line arguments and a missing argument.
+
+@item arg_line
+@anchor{Texinfo::Parser arg_line}
+
+The string correspond to the line after the @@-command
+for @@-commands that have special arguments on their line,
+and for @code{@@macro} line.
+
+@item text_arg
+@anchor{Texinfo::Parser text_arg}
+
+The string correspond to the line after the @@-command for @@-commands
+that have an argument interpreted as simple text, like @code{@@setfilename},
+@code{@@end} or @code{@@documentencoding}.
+
+@item index_entry
+@anchor{Texinfo::Parser index_entry}
+
+The index entry information (described in @ref{Texinfo::Parser index_entries,, index_entries}
+in details) is associated to @@-commands that have an associated
+index entry.
+
+@item misc_args
+@anchor{Texinfo::Parser misc_args}
+
+An array holding strings, the arguments of @@-commands taking simple
+textual arguments as arguments, like @code{@@everyheadingmarks},
+@code{@@frenchspacing}, @code{@@alias}, @code{@@synindex}, @code{@@columnfractions}.
+Also filled for @code{@@set}, @code{@@clickstyle}, @code{@@unmacro} or @code{@@comment}
+arguments.
+
+@item spaces_before_argument
+@anchor{Texinfo::Parser spaces_before_argument}
+
+For @@-commands with opening brace followed by spaces held in a
+@code{empty_spaces_before_argument} element, a reference to those spaces.
+
+@item spaces
+@anchor{Texinfo::Parser spaces}
+
+For accent commands acting on one letter only, like @code{@@ringaccent}
+appearing like
+
+@verbatim
+ @ringaccent A
+@end verbatim
+
+there is a @emph{spaces} key which holds the spaces appearing between
+the command and the argument.
+
+@end table
+
+@node Texinfo::Parser Extra keys specific of certain @@-commands or containers
+@subsubsection Extra keys specific of certain @@-commands or containers
+
+@table @asis
+@item @code{@@macro}
+@anchor{Texinfo::Parser @code{@@macro}}
+
+@emph{invalid_syntax} is set if there was an error on the @code{@@macro}
+line. @emph{arg_line} holds the line after @code{@@macro}.
+
+@item @code{@@node}
+@anchor{Texinfo::Parser @code{@@node}}
+
+The arguments are in the @emph{nodes_manuals} array. Each
+of the entries is a hash with a @emph{node_content} key for
+an array holding the corresponding content, a @emph{manual_content} key
+if there is an associated external manual name, and a @emph{normalized}
+key for the normalized label, built as specified in the Texinfo manual
+in the @strong{HTML Xref} node.
+
+An @emph{associated_section} key holds the tree element of the
+sectioning command that follows the node.
+
+@item @code{@@part}
+@anchor{Texinfo::Parser @code{@@part}}
+
+The next sectioning command is in @emph{part_associated_section}.
+
+@item sectioning command
+@anchor{Texinfo::Parser sectioning command}
+
+The node preceding the command is in @emph{associated_node}.
+The part preceding the command is in @emph{associated_part}.
+If the level of the document was modified by @code{@@raisections}
+or @code{@@lowersections}, the differential level is in @emph{sections_level}.
+
+@item @code{@@float}
+@anchor{Texinfo::Parser @code{@@float}}
+
+@item @code{@@listoffloats}
+@anchor{Texinfo::Parser @code{@@listoffloats}}
+
+If float has a second argument, and for @code{@@listoffloats}
+argument there is a @emph{type} key which is also a hash reference,
+with two keys. @emph{content} is an array holding the associated
+contents, @emph{normalized} holds the normalized float type.
+
+@emph{caption} and @emph{shortcaption} holds the corresponding
+tree elements for float. The @code{@@caption} or @code{@@shortcaption}
+have the float tree element stored in @emph{float}.
+
+@item @code{@@float}
+@anchor{Texinfo::Parser @code{@@float} 1}
+
+@item @code{@@anchor}
+@anchor{Texinfo::Parser @code{@@anchor}}
+
+@@-commands that are targets for cross-references have a @emph{normalized}
+key for the normalized label, built as specified in the Texinfo manual
+in the @strong{HTML Xref} node. There is also a @emph{node_content} key for
+an array holding the corresponding content.
+
+@code{@@anchor} also has @emph{region} set to the special region name if
+in a special region (@code{@@copying}, @code{@@titlepage}).
+
+@item @code{@@ref}
+@anchor{Texinfo::Parser @code{@@ref}}
+
+@item @code{@@xref}
+@anchor{Texinfo::Parser @code{@@xref}}
+
+@item @code{@@pxref}
+@anchor{Texinfo::Parser @code{@@pxref}}
+
+@item @code{@@inforef}
+@anchor{Texinfo::Parser @code{@@inforef}}
+
+The @emph{node_argument} entry holds a parsed node entry, like
+the one appearing in the @emph{nodes_manuals} array for @code{@@node}.
+
+@item @code{@@abbr}
+@anchor{Texinfo::Parser @code{@@abbr}}
+
+@item @code{@@acronym}
+@anchor{Texinfo::Parser @code{@@acronym}}
+
+The first argument normalized is in @emph{normalized}.
+
+@item definition command
+@anchor{Texinfo::Parser definition command}
+
+@emph{def_command} holds the command name, without x if it is
+an x form of a definition command.
+@emph{original_def_cmdname} is the original def command.
+
+If it is an x form, it has @emph{not_after_command} set if not
+appearing after the definition command without x.
+
+@item def_line
+@anchor{Texinfo::Parser def_line 2}
+
+For each element in a def_line, the key @emph{def_role} holds a string
+describing the meaning of the element. It is one of
+@emph{category}, @emph{name}, @emph{class}, @emph{type}, @emph{arg}, @emph{typearg},
+@emph{spaces} or @emph{delimiter}, depending on the definition.
+
+The @emph{def_parsed_hash} hash reference has these strings as keys,
+and the values are the corresponding elements.
+
+@item @code{@@multitable}
+@anchor{Texinfo::Parser @code{@@multitable}}
+
+The key @emph{max_columns} holds the maximal number of columns. If there
+are prototypes on the line they are in the array associated with
+@emph{prototypes}. If there is a @code{@@columnfractions} as argument, then the
+@emph{columnfractions} key is associated with the element for the
+@@columnfractions command.
+
+@item @code{@@enumerate}
+@anchor{Texinfo::Parser @code{@@enumerate}}
+
+The extra key @emph{enumerate_specification} contains the enumerate
+argument.
+
+@item @code{@@itemize}
+@anchor{Texinfo::Parser @code{@@itemize}}
+
+@item @code{@@table}
+@anchor{Texinfo::Parser @code{@@table}}
+
+@item @code{@@vtable}
+@anchor{Texinfo::Parser @code{@@vtable}}
+
+@item @code{@@ftable}
+@anchor{Texinfo::Parser @code{@@ftable}}
+
+The @emph{command_as_argument} extra key points to the @@-command on
+as argument on the @@-command line.
+
+@item paragraph
+@anchor{Texinfo::Parser paragraph 1}
+
+The @emph{indent} or @emph{noindent} key value is set if the corresponding
+@@-commands are associated with that paragraph.
+
+@item @code{@@item} in @code{@@enumerate} or @code{@@itemize}
+@anchor{Texinfo::Parser @code{@@item} in @code{@@enumerate} or @code{@@itemize}}
+
+The @emph{item_number} extra key holds the number of this item.
+
+@item @code{@@item} and @code{@@tab} in @code{@@multitable}
+@anchor{Texinfo::Parser @code{@@item} and @code{@@tab} in @code{@@multitable}}
+
+The @emph{cell_number} index key holds the index of the column of
+the cell.
+
+@item row
+@anchor{Texinfo::Parser row 1}
+
+The @emph{row_number} index key holds the index of the row in
+the @code{@@multitable}.
+
+@item @code{@@author}
+@anchor{Texinfo::Parser @code{@@author}}
+
+If in a @code{@@titlepage}, the titlepage is in @emph{titlepage}, if in
+@code{@@quotation} or @code{@@smallquotation}, the corresponding tree element
+is in @emph{quotation}.
+
+The author tree element is in the @emph{author} array of the @code{@@titlepage}
+or the @code{@@quotation} or @code{@@smallquotation} it is associated with.
+
+@item @code{@@ifclear}
+@anchor{Texinfo::Parser @code{@@ifclear}}
+
+@item @code{@@ifset}
+@anchor{Texinfo::Parser @code{@@ifset}}
+
+The original line is in @emph{line}.
+
+@item @code{@@end}
+@anchor{Texinfo::Parser @code{@@end}}
+
+The textual argument is in @emph{command_argument}.
+The corresponding @@-command is in @emph{command}.
+
+@item @code{@@documentencoding}
+@anchor{Texinfo::Parser @code{@@documentencoding}}
+
+The argument, normalized is in @emph{input_encoding_name} if it is recognized.
+The corresponding perl encoding name is in @emph{input_perl_encoding}.
+
+@item @code{@@click}
+@anchor{Texinfo::Parser @code{@@click}}
+
+In @emph{clickstyle} there is the current clickstyle command.
+
+@item @code{@@kbd}
+@anchor{Texinfo::Parser @code{@@kbd}}
+
+@emph{code} is set depending on the context and @code{@@kbdinputstyle}.
+
+@item definfoenclose defined commands
+@anchor{Texinfo::Parser definfoenclose defined commands}
+
+@emph{begin} holds the string beginning the definfoenclose,
+@emph{end} holds the string ending the definfoenclose.
+
+@item menu_entry
+@anchor{Texinfo::Parser menu_entry 1}
+
+The @emph{menu_entry_description} and @emph{menu_entry_name} keys
+are associated with the corresponding tree elements. The
+@emph{menu_entry_node} value is a hash with information about the parsed
+node entry; its keys are the same as those appearing in the
+elements of the @emph{nodes_manuals} array for @code{@@node}.
+
+@item empty_line_after_command
+@anchor{Texinfo::Parser empty_line_after_command 1}
+
+The corresponding command is in @emph{command}.
+
+@item @code{@@inlinefmt}
+@anchor{Texinfo::Parser @code{@@inlinefmt}}
+
+@item @code{@@inlineraw}
+@anchor{Texinfo::Parser @code{@@inlineraw}}
+
+@item @code{@@inlinefmtifelse}
+@anchor{Texinfo::Parser @code{@@inlinefmtifelse}}
+
+@item @code{@@inlineifclear}
+@anchor{Texinfo::Parser @code{@@inlineifclear}}
+
+@item @code{@@inlineifset}
+@anchor{Texinfo::Parser @code{@@inlineifset}}
+
+The first argument is in @emph{format}. If an argument has been determined
+as being expanded by the Parser, the index of this argument is in
+@emph{expand_index}. Index numbering begins at 0, but the first argument is
+always the format or flag name, so, if set, it should be 1 or 2 for
+@code{@@inlinefmtifelse}, and 1 for other commands.
+
+@end table
+
+@node Texinfo::Parser Other information set by the parser
+@subsection Other information set by the parser
+
+The parser creates an array of nodes and stores this in the
+@emph{nodes} key of the parser object.
+
+Each element in the tree corresponding to a node contaning a menu
+has a @emph{menus} key which refers to an array of references to menu
+elements occuring in the node.
+
+These are both used by the @code{Texinfo::Structuring} module.
+
+@node Texinfo::Parser SEE ALSO
+@section SEE ALSO
+
+@url{http://www.gnu.org/s/texinfo/manual/texinfo/, Texinfo manual}
+
+@node Texinfo::Parser AUTHOR
+@section AUTHOR
+
+Patrice Dumas, <pertusus@@free.fr>
+
diff --git a/macros/texinfo/texinfo/doc/tp_api/api_includes/Texinfo-Report.texi b/macros/texinfo/texinfo/doc/tp_api/api_includes/Texinfo-Report.texi
new file mode 100644
index 0000000000..59bf76c2d7
--- /dev/null
+++ b/macros/texinfo/texinfo/doc/tp_api/api_includes/Texinfo-Report.texi
@@ -0,0 +1,209 @@
+@node Texinfo::Report
+@chapter Texinfo::Report
+
+@menu
+* Texinfo@asis{::}Report NAME::
+* Texinfo@asis{::}Report SYNOPSIS::
+* Texinfo@asis{::}Report DESCRIPTION::
+* Texinfo@asis{::}Report METHODS::
+* Texinfo@asis{::}Report AUTHOR::
+@end menu
+
+@node Texinfo::Report NAME
+@section NAME
+
+Texinfo::Report - Error storing and string translations for Texinfo modules
+
+@node Texinfo::Report SYNOPSIS
+@section SYNOPSIS
+
+@verbatim
+ @ISA = qw(Texinfo::Report);
+
+ $converter->Texinfo::Report::new();
+
+ if ($warning_happened) {
+ $converter->line_warn(sprintf($converter->__("\@%s is wrongly used"),
+ $current->{'cmdname'}), $current->{'line_nr'});
+ }
+
+ my ($errors, $errors_count) = $converter->errors();
+ foreach my $error_message (@$errors) {
+ warn $error_message->{'error_line'};
+ }
+
+ my $tree_translated = $converter->gdt('See {reference} in @cite{{book}}',
+ {'reference' => $tree_reference,
+ 'book' => {'text' => $book_name}});
+@end verbatim
+
+@node Texinfo::Report DESCRIPTION
+@section DESCRIPTION
+
+The Texinfo::Report module helps with string translations and error
+handling. It is used by the Texinfo modules Texinfo::Parser and
+Texinfo::Convert::Converter. To use this module, the usual way is
+to inherit Texinfo::Report methods and initialize the Texinfo::Report
+variables for a @emph{$converter} object. This is done by calling
+@code{Texinfo::Report::new()} on the @emph{$converter} object. This is done by
+Texinfo::Convert::Converter, for instance, so every module that inherits
+Texinfo::Convert::Converter can automatically use the Texinfo::Report
+methods in an object-oriented way.
+
+Besides the @code{new} method, @code{gdt} is used for string translations,
+@code{errors} for reporting errors, and the other methods to store errors
+(and warnings).
+
+@node Texinfo::Report METHODS
+@section METHODS
+
+No method is exported in the default case.
+
+The @code{new} method initializes Texinfo::Report related fields:
+
+@verbatim
+ $converter->Texinfo::Report::new()
+@end verbatim
+
+The @code{gdt} method is used to translate strings to be output in
+converted documents, and return a texinfo tree.
+
+@table @asis
+@item $tree = $converter->gdt($string, $replaced_substrings, $mode)
+@anchor{Texinfo::Report $tree = $converter->gdt($string@comma{} $replaced_substrings@comma{} $mode)}
+
+The @emph{$string} is a string to be translated. In the default case,
+the function returns a Texinfo tree, as the string is
+interpreted as Texinfo code after
+translation. @emph{$replaced_substrings} is an optional
+hash reference specifying some
+substitution to be done after the translation. The key of
+the @emph{$replaced_substrings} hash reference identifies what is to
+be substituted, and the value is some string, texinfo tree or array content
+that is substituted in the resulting texinfo tree.
+In the string to be translated word in brace matching keys of
+@emph{$replaced_substrings} are replaced.
+
+@emph{$mode} is an optional string which may modify how the function
+behaves. The possible values are
+
+@table @asis
+@item translated_text
+@anchor{Texinfo::Report translated_text}
+
+In that case the string is not considered to be Texinfo, a plain string
+that is returned after translation and substitution. The substitutions
+may only be strings in that case.
+
+@end table
+
+For example in the following call, the string
+@emph{See @{reference@} in @@cite@{@{book@}@}} is translated, then
+parsed as a Texinfo string, with @emph{@{reference@}} substituted by
+@emph{$tree_reference} in the resulting tree, and @emph{@{book@}}
+replaced by the associated texinfo tree text element:
+
+@verbatim
+ $tree = $converter->gdt('See {reference} in @cite{{book}}',
+ {'reference' => $tree_reference,
+ 'book' => {'text' => $book_name}});
+@end verbatim
+
+@code{gdt} uses the information in the @emph{$converter} to know the
+encoding and documentlanguage. More precisely,
+@code{$converter->@{'encoding_name'@}}, @code{$converter->@{'perl_encoding'@}}
+and @code{$converter->get_conf('documentlanguage')} are used.
+
+@code{gdt} uses a gettext-like infrastructure to retrieve the
+translated strings, using the @emph{texinfo_document} domain.
+
+@end table
+
+The errors collected are available through the @code{errors} method, the other
+methods allow registering errors and warnings.
+
+@table @asis
+@item ($error_warnings_list, $error_count) = errors ($converter)
+@anchor{Texinfo::Report ($error_warnings_list@comma{} $error_count) = errors ($converter)}
+
+This function returns as @emph{$error_count} the count of errors since
+calling @code{new}. The @emph{$error_warnings_list} is an array of hash references
+one for each error, warning or error line continuation. Each of these has
+the following keys:
+
+@table @asis
+@item type
+@anchor{Texinfo::Report type}
+
+May be @code{warning}, or @code{error}.
+
+@item text
+@anchor{Texinfo::Report text}
+
+The text of the error.
+
+@item error_line
+@anchor{Texinfo::Report error_line}
+
+The text of the error formatted with the file name, line number and macro
+name, as needed.
+
+@item line_nr
+@anchor{Texinfo::Report line_nr}
+
+The line number of the error or warning.
+
+@item file_name
+@anchor{Texinfo::Report file_name}
+
+The file name where the error or warning occurs.
+
+@item macro
+@anchor{Texinfo::Report macro}
+
+The user macro name that is expanded at the location of
+the error or warning.
+
+@end table
+
+@item $converter->line_warn($text, $line_nr)
+@anchor{Texinfo::Report $converter->line_warn($text@comma{} $line_nr)}
+
+@item $converter->line_error($text, $line_nr)
+@anchor{Texinfo::Report $converter->line_error($text@comma{} $line_nr)}
+
+Register a warning or an error. The @emph{$text} is the text of the
+error or warning. The optional @emph{$line_nr} holds the information
+on the error or warning location. It is associated with the @emph{line_nr}
+key of Texinfo tree elements as described in @ref{Texinfo::Parser line_nr}
+for the @@-commands. The @emph{$line_nr} structure is described in @ref{, errors,, error_warnings_list_error_count__errors_converter}
+above.
+
+@item $converter->document_warn($text)
+@anchor{Texinfo::Report $converter->document_warn($text)}
+
+@item $converter->document_error($text)
+@anchor{Texinfo::Report $converter->document_error($text)}
+
+Register a document-wide error or warning. @emph{$text} is the error or
+warning message.
+
+@item $converter->file_line_warn($text, $file, $line_nr)
+@anchor{Texinfo::Report $converter->file_line_warn($text@comma{} $file@comma{} $line_nr)}
+
+Register the warning message @emph{$text} for file @emph{$file}, with, optionally
+the line @emph{$line_nr} in the file.
+
+@item $converter->file_line_error($text, $file, $line_nr)
+@anchor{Texinfo::Report $converter->file_line_error($text@comma{} $file@comma{} $line_nr)}
+
+Register the error message @emph{$text} for file @emph{$file}, with, optionally
+the line @emph{$line_nr} in the file.
+
+@end table
+
+@node Texinfo::Report AUTHOR
+@section AUTHOR
+
+Patrice Dumas, <pertusus@@free.fr>
+
diff --git a/macros/texinfo/texinfo/doc/tp_api/api_includes/Texinfo-Structuring.texi b/macros/texinfo/texinfo/doc/tp_api/api_includes/Texinfo-Structuring.texi
new file mode 100644
index 0000000000..f15808f7da
--- /dev/null
+++ b/macros/texinfo/texinfo/doc/tp_api/api_includes/Texinfo-Structuring.texi
@@ -0,0 +1,414 @@
+@node Texinfo::Structuring
+@chapter Texinfo::Structuring
+
+@menu
+* Texinfo@asis{::}Structuring NAME::
+* Texinfo@asis{::}Structuring SYNOPSIS::
+* Texinfo@asis{::}Structuring DESCRIPTION::
+* Texinfo@asis{::}Structuring METHODS::
+* Texinfo@asis{::}Structuring SEE ALSO::
+* Texinfo@asis{::}Structuring AUTHOR::
+@end menu
+
+@node Texinfo::Structuring NAME
+@section NAME
+
+Texinfo::Structuring - information on Texinfo::Parser tree
+
+@node Texinfo::Structuring SYNOPSIS
+@section SYNOPSIS
+
+@verbatim
+ use Texinfo::Structuring qw(sectioning_structure nodes_tree number_floats
+ associate_internal_references split_by_node split_by_section split_pages
+ merge_indices sort_indices_by_letter sort_indices elements_directions
+ elements_file_directions);
+ # $tree is a Texinfo document tree. $parser is a Texinfo::Parser object.
+ my $sections_root = sectioning_structure ($parser, $tree);
+ my $top_node = nodes_tree($parser);
+ number_floats($parser->floats_information());
+ associate_internal_references($parser);
+ my $elements;
+ if ($split_at_nodes) {
+ $elements = split_by_node($tree);
+ } else {
+ $elements = split_by_section($tree);
+ }
+ split_pages($elements, $split);
+ elements_directions($parser, $elements);
+ elements_file_directions($parser, $elements);
+
+ my $index_names = $parser->indices_information();
+ my $merged_index_entries
+ = merge_indices($index_names);
+ my $index_entries_sorted;
+ if ($sort_by_letter) {
+ $index_entries_sorted = sort_indices_by_letter($parser,
+ $merged_index_entries, $index_names);
+ } else {
+ $index_entries_sorted = sort_indices($parser, $merged_index_entries,
+ $index_names);
+ }
+
+
+@end verbatim
+
+@node Texinfo::Structuring DESCRIPTION
+@section DESCRIPTION
+
+Texinfo::Structuring first allows to collect informations on a Texinfo tree.
+In most case, it also requires a parser object to do that job. Thanks to
+@code{sectioning_structure} the hierarchy of sectioning commands is determined.
+The node and menus tree is analysed with @code{nodes_tree}. Floats get their
+standard numbering with @code{number_floats} and internal references are matched
+up with nodes, floats or anchors with @code{associate_internal_references}.
+
+It is also possible to group the top-level contents of the tree, which consist
+in nodes and sectioning commands into elements that group together a node and
+the next sectioning element. With @code{split_by_node} nodes are considered
+to be the main sectioning elements, while with @code{split_by_section} the
+sectioning command elements are the main elements. The first mode is typical
+of Info format, while the second correspond to a traditional book.
+The elements may be further split in @emph{pages}, which are not pages as
+in book pages, but more like web pages, and hold series of elements.
+
+The elements may have directions to other elements prepared
+by @code{elements_directions}. @code{elements_file_directions} should also
+set direction related to files, provided files are associated with
+elements by the user.
+
+@code{merge_indices} may be used to merge indices, which may be sorted
+with @code{sort_indices} or @code{sort_indices_by_letter} to sort by letters.
+
+Other miscellaneous methods include @code{set_menus_to_simple_menu} and
+@code{menu_to_simple_menu} to change the menu texinfo tree, as well
+as @code{insert_nodes_for_sectioning_commands} that adds nodes for
+sectioning commands without nodes and @code{complete_tree_nodes_menus}
+that completes the node menus based on the sectioning tree.
+
+@node Texinfo::Structuring METHODS
+@section METHODS
+
+No method is exported in the default case.
+
+Most of those function references takes a Texinfo::Parser object
+as argument, see @ref{Texinfo::Parser NAME}.
+
+@table @asis
+@item $sections_root = sectioning_structure ($parser, $tree)
+@anchor{Texinfo::Structuring $sections_root = sectioning_structure ($parser@comma{} $tree)}
+
+This function goes through the tree and gather information on
+the document structure for sectioning commands. It returns the
+root of the sectioning commands tree.
+
+For section elements, it sets:
+
+@table @asis
+@item level
+@anchor{Texinfo::Structuring level}
+
+The level in the sectioning tree hierarchy. 0 is for @code{@@top} or
+@code{@@part}, 1 for @code{@@chapter}, @code{@@appendix}... This level is corrected
+by @code{@@raisesections} and @code{@@lowersections}.
+
+@item number
+@anchor{Texinfo::Structuring number}
+
+The sectioning element number.
+
+@item section_childs
+@anchor{Texinfo::Structuring section_childs}
+
+An array holding sectioning elements children of the element.
+
+@item section_up
+@anchor{Texinfo::Structuring section_up}
+
+@item section_prev
+@anchor{Texinfo::Structuring section_prev}
+
+@item section_next
+@anchor{Texinfo::Structuring section_next}
+
+The up, previous and next sectioning elements.
+
+@item toplevel_next
+@anchor{Texinfo::Structuring toplevel_next}
+
+@item toplevel_prev
+@anchor{Texinfo::Structuring toplevel_prev}
+
+@item toplevel_up
+@anchor{Texinfo::Structuring toplevel_up}
+
+The next and previous and up sectioning elements of toplevel sectioning
+elements (like @code{@@top}, @code{@@chapter}, @code{@@appendix}), not taking into
+account @code{@@part} elements.
+
+@end table
+
+@item my $top_node = nodes_tree($parser)
+@anchor{Texinfo::Structuring my $top_node = nodes_tree($parser)}
+
+Goes through menu and nodes and set directions. Returns the top
+node.
+
+This functions sets:
+
+@table @asis
+@item menu_child
+@anchor{Texinfo::Structuring menu_child}
+
+The first child in the menu of the node.
+
+@item menu_up
+@anchor{Texinfo::Structuring menu_up}
+
+@item menu_next
+@anchor{Texinfo::Structuring menu_next}
+
+@item menu_prev
+@anchor{Texinfo::Structuring menu_prev}
+
+Up, next and previous directions as set in menus.
+
+@item node_up
+@anchor{Texinfo::Structuring node_up}
+
+@item node_prev
+@anchor{Texinfo::Structuring node_prev}
+
+@item node_next
+@anchor{Texinfo::Structuring node_next}
+
+Up, next and previous directions for the node.
+
+@end table
+
+@item number_floats($float_information)
+@anchor{Texinfo::Structuring number_floats($float_information)}
+
+Number the floats as described in the Texinfo manual. Sets
+the @emph{number} key of the float tree elements.
+
+@item associate_internal_references($parser)
+@anchor{Texinfo::Structuring associate_internal_references($parser)}
+
+Verify that internal references (@code{@@ref} and similar without
+fourth of fifth argument) have an associated node, anchor or float.
+Set the @emph{label} key in the @emph{extra} hash of the reference tree
+element to the associated labeled tree element.
+
+@item warn_non_empty_parts($parser)
+@anchor{Texinfo::Structuring warn_non_empty_parts($parser)}
+
+Register a warning in @code{$parser} for each @code{@@part} that is not empty.
+
+@item $elements = split_by_node($tree)
+@anchor{Texinfo::Structuring $elements = split_by_node($tree)}
+
+Returns a reference array of elements where a node is associated to
+the following sectioning commands. Sectioning commands without nodes
+are also with the previous node, while nodes without sectioning commands
+are alone in their elements.
+
+Elements are regular tree items with type @emph{element}, the
+associated nodes and sectioning tree items are in the array associated
+with the @emph{contents} key. They have directions, namely @emph{element_next}
+and @emph{element_prev} pointing to the previous and the next element.
+
+In the @emph{extra} hash they have
+
+@table @asis
+@item no_node
+@anchor{Texinfo::Structuring no_node}
+
+A special case, if there are no nodes in the document, the value is set.
+
+@item node
+@anchor{Texinfo::Structuring node}
+
+@item element_command
+@anchor{Texinfo::Structuring element_command}
+
+The node command associated with the element.
+
+@item section
+@anchor{Texinfo::Structuring section}
+
+The sectioning command associated with the element node.
+
+@end table
+
+@item $elements = split_by_section($tree)
+@anchor{Texinfo::Structuring $elements = split_by_section($tree)}
+
+Similarly with @code{split_by_node}, returns an array of elements. This time,
+lone nodes are associated with the previous sections and lone sections
+makes up an element.
+
+The extra hash keys set are the same, except that @emph{element_command} is
+the sectioning command associated with the element, and @emph{no_node} is
+replaced by @emph{no_section}.
+
+@item $pages = split_pages($elements, $split)
+@anchor{Texinfo::Structuring $pages = split_pages($elements@comma{} $split)}
+
+The elements from the array reference argument have an extra @emph{first_in_page}
+value set to the first element on the unit, and based on the
+value of @emph{$split}. The possible values for @emph{$split} are
+
+@table @asis
+@item chapter
+@anchor{Texinfo::Structuring chapter}
+
+The elements are split at chapter or other toplevel sectioning elements.
+
+@item node
+@anchor{Texinfo::Structuring node 1}
+
+Each element has its own page.
+
+@item section
+@anchor{Texinfo::Structuring section 1}
+
+The elements are split at sectioning commands below chapter.
+
+@item value evaluating to false
+@anchor{Texinfo::Structuring value evaluating to false}
+
+No splitting, only one page is returned, holding all the elements.
+
+@end table
+
+@item elements_directions($parser, $elements)
+@anchor{Texinfo::Structuring elements_directions($parser@comma{} $elements)}
+
+Directions are set up for the elements in the array reference given in
+argument. The corresponding hash reference is in
+@code{@{'extra'@}->@{'directions'@}}
+and keys correspond to directions while values are elements.
+
+The following directions are set up:
+
+@table @asis
+@item This
+@anchor{Texinfo::Structuring This}
+
+The element itself.
+
+@item Forward
+@anchor{Texinfo::Structuring Forward}
+
+Element next.
+
+@item Back
+@anchor{Texinfo::Structuring Back}
+
+Previous element.
+
+@item NodeForward
+@anchor{Texinfo::Structuring NodeForward}
+
+Following node element in reading order. It is the next node, or the
+first in menu or the next of the up node.
+
+@item NodeBack
+@anchor{Texinfo::Structuring NodeBack}
+
+Preceding node element.
+
+@item NodeUp
+@anchor{Texinfo::Structuring NodeUp}
+
+@item NodeNext
+@anchor{Texinfo::Structuring NodeNext}
+
+@item NodePrev
+@anchor{Texinfo::Structuring NodePrev}
+
+The up, next and previous node elements.
+
+@item Up
+@anchor{Texinfo::Structuring Up}
+
+@item Next
+@anchor{Texinfo::Structuring Next}
+
+@item Prev
+@anchor{Texinfo::Structuring Prev}
+
+The up, next and previous section elements.
+
+@item FastForward
+@anchor{Texinfo::Structuring FastForward}
+
+The next top level section element.
+
+@item FastBack
+@anchor{Texinfo::Structuring FastBack}
+
+For top level elements, the previous top level element. For other elements
+the up top level element. For example, for a chapter element it is the
+previous chapter, for a subsection element it is the chapter element
+that contains the subsection.
+
+@item FastForward
+@anchor{Texinfo::Structuring FastForward 1}
+
+The next top level element.
+
+@end table
+
+@item elements_file_directions($parser, $elements)
+@anchor{Texinfo::Structuring elements_file_directions($parser@comma{} $elements)}
+
+In the directions reference described above for @code{elements_directions}, sets
+the @emph{PrevFile} and @code{NextFile} directions to the elements in previous and
+following files.
+
+The API for association of pages/elements to files is not defined yet.
+
+@item $merged_entries = merge_indices($index_names)
+@anchor{Texinfo::Structuring $merged_entries = merge_indices($index_names)}
+
+Using informations returned by @ref{Texinfo::Parser indices_information},
+a structure holding all the index entries by index name is returned,
+with all the entries of merged indices merged with those of the indice
+merged into.
+
+The @emph{$merged_entries} returned is a hash reference whose
+keys are the index names and values arrays of index entry structures
+described in details in @ref{Texinfo::Parser index_entries}.
+
+@item $index_entries_sorted = sort_indices_by_letter($parser, $merged_index_entries, $index_names)
+@anchor{Texinfo::Structuring $index_entries_sorted = sort_indices_by_letter($parser@comma{} $merged_index_entries@comma{} $index_names)}
+
+@item $index_entries_sorted = sort_indices($parser, $merged_index_entries, $index_names)
+@anchor{Texinfo::Structuring $index_entries_sorted = sort_indices($parser@comma{} $merged_index_entries@comma{} $index_names)}
+
+These functions first sets a plain text key for each index entry, used for
+sorting. In both cases, a hash reference with index names as keys is returned.
+
+When sorting by letter, an array reference of letter hash references is
+associated with each index name. Each letter hash reference has two
+keys, a @emph{letter} key with the letter, and an @emph{entries} key with an array
+reference of sorted index entries beginning with the letter.
+
+When simply sorting, the array of the sorted indes entries is associated
+with the index name.
+
+@end table
+
+@node Texinfo::Structuring SEE ALSO
+@section SEE ALSO
+
+@url{http://www.gnu.org/s/texinfo/manual/texinfo/, Texinfo manual},
+@ref{Texinfo::Parser NAME}.
+
+@node Texinfo::Structuring AUTHOR
+@section AUTHOR
+
+Patrice Dumas, <pertusus@@free.fr>
+