use Texinfo::Commands;
if ($Texinfo::Commands::accent_commands{$a_command}) {
print STDERR "$a_command is an accent command\n";
}
The Texinfo Perl module main purpose is to be used in texi2any to convert
Texinfo to other formats. There is no promise of API stability.
Texinfo::Commands holds a few hashes with information on @-commands and hashes classifying Texinfo @-commands.
Hashes are defined as our variables, and are therefore available
outside of the module.
Hash describing the default Texinfo indices. The format of this hash is
described in Texinfo::Document::indices_information.
Hashes are defined as 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:
Accent @-commands taking an argument, like @' or @ringaccent,
including @dotless and @tieaccent.
Commands delimiting a block with a closing @end. The values are:
@if* commands;
Definition commands like @deffn;
@float;
raw output format commands such as @html or @info;
commands with @item containing
any content, @itemize and @enumerate;
commands like @table in which the @item argument is on its line;
menu @-commands, @menu, @detailmenu
and @direntry;
Math block commands, like @displaymath.
@multitable;
The remaining block commands.
Commands whose content should not be filled, like @example or @display.
Commands like @quotation.
@-commands that have no expansion
of @-commands in their bodies (@macro, @verbatim and @ignore);
Commands delimiting a region of the document out of the main processing:
@titlepage, @copying, @documentdescription.
Block commands containing @item with possible content before an @item,
like @itemize, @table or @multitable.
Brace commands that have their argument in code style, like
@code.
The commands that take braces. Value is noarg for brace commands without
argument such as @AA, @TeX, or @equiv. Other values include
accent, arguments, context and other values.
Commands that stop a paragraph. Root commands are not specified here, but they also close paragraphs.
Set to the number of arguments separated by commas that may appear in braces or
on the @-command line. That means 0 or unset for most block commands,
including @example which has an unlimited (variadic) number of arguments, 1
for @quotation, 2 for @float, 1 for most brace commands, 2 for @email
and @abbr, 5 for @image and @ref.
Values are not necessarily set for all the commands, as commands are also classified by type of command, some type of commands implying a number of arguments, and the number of arguments may not be set if it corresponds to the default (0 for block commands, 1 for other commands that take arguments).
Commands containing simple text only, much like paragraph text, but
without @ref, @footnote, @titlefont, @anchor nor @verb.
Commands accepting only plain text with accent, symbol and glyph commands.
Definition commands.
Index entry commands corresponding to default indices. For example
@cindex.
@-commands whose second argument explain first argument and further
@-command call without first argument, as @abbr and @acronym.
Line commands which may be formatted as text, but that require constructing
some replacement text, for example @printindex, @need or
@verbatiminclude. @contents and @shortcontents are not in this hash,
since they are in a corresponding situation only when the tables of contents
are formatted where the commands are.
Commands not taking brace formatted as text or with text in the main
document body, corresponding to symbol commands such as @@ or @: and
commands such as @item. @-commands appearing only in headers are not
in this hash, but in in %in_heading_spec_commands.
Line commands which arguments may be formatted as text, such as
@center, @author, @item, @node, @chapter and other.
Index commands may be formatted as text too, but they may be added
with @def*index, therefore they are not in that hash. Also,
in general, they are not formatted as text where they appear, only
when an index is printed.
@-commands used to specify custom headings, like @everyheading.
Special @-commands appearing in custom headings, such as @thischapter,
@thistitle or @|.
@-commands only valid in index entries, such as @sortas or @subentry.
Inline conditional commands, like @inlineifclear, and inline format
commands like @inlineraw and @inlinefmt.
@-commands with braces but no argument corresponding to letters,
like @AA{} or @ss{} or @o{}.
@-commands which contains math, like @math or @displaymath.
Commands that do not take braces, take arguments on the command line and are
not block commands either, like @node, @chapter, @cindex, @deffnx,
@end, @footnotestyle, @set, @settitle, @itemx,
@definfoenclose, @comment and many others.
Note that @item is in %line_commands for its role in @table and
similar @-commands.
Commands that do not start a paragraph.
Command that do not take braces, do not have argument on their line and
are not block commands either. The value is symbol for single character
non-alphabetical @-commands such as @@, @ or @:. Other commands in that hash
include @indent, @tab or @thissection.
Note that @item is in %nobrace_commands for its role in @multitable,
@itemize and @enumerate.
Block commands not formatted as text, such as @ignore or @macro.
Brace commands that are not immediately replaced with text, such as
anchor, caption, errormsg and others.
@-commands that do not stop the preamble.
%preformatted_commands is for commands whose content should not
be filled, like @example or @display. If the command is meant
for code, it is also in %preformatted_code_commands, like @example.
Cross reference @-command referencing nodes, like @xref or @link.
Commands that are at the root of a Texinfo document, namely
@node and sectioning commands, except heading commands
like @heading.
All the sectioning and heading commands.
Commands with unlimited arguments, like @example.
Copyright 2010- Free Software Foundation, Inc. See the source file for all copyright years.
This library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version.
use Texinfo::Common;
my @commands_to_collect = ('math');
my $collected_commands
= Texinfo::Common::collect_commands_in_tree($document_root,
\@commands_to_collect);
my $package_version
= Texinfo::Common::get_build_constant('PACKAGE_AND_VERSION');
The Texinfo Perl module main purpose is to be used in texi2any to convert
Texinfo to other formats. There is no promise of API stability.
Texinfo::Common holds hashes with miscellaneous information and some hashes with information on Texinfo @-commands, as well as miscellaneous methods.
Hashes are defined as our variables, and are therefore available
outside of the module.
Values defined for a Texinfo build independently of any document or
output format are available by calling get_build_constant:
The following build constants are available:
Texinfo package name and versions. Values of build constants without
_CONFIG appended are set by configure. For each variable set by
configure there is another one with _CONFIG appended
to the name set to the same value, to match the name of the macros set in
C. So, for example PACKAGE_VERSION_CONFIG value is the same as
PACKAGE_VERSION, set to the PACKAGE_VERSION value set by configure.
Cannonical output formats that have associated conditionals. In
practice corresponds to format_raw %block_commands plus info
and plaintext.
TODO: undocumented %null_device_file %default_parser_customization_values %multiple_at_command_options %unique_at_command_options %converter_cmdline_options %default_main_program_customization_options %converter_customization_options %document_settable_at_commands %def_map %command_structuring_level %level_to_structuring_command %encoding_name_conversion_map %text_brace_no_arg_commands
Hashes are defined as 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:
All the @-commands.
%def_aliases associates an aliased command to the original command, for
example defun is associated to deffn.
%def_no_var_arg_commands associates a definition command name with
a true value if the argument on the definition command line can contain
non-metasyntactic variables. For instance, it is true for deftypevr
but false for defun, since @defun argument is supposed to contain
metasyntactic variables only.
Values are ASCII representation of single character non-alphabetical commands
without brace such as * or :. The value may be an empty string.
Associate small command like smallexample to the regular command
example.
Two methods are exported in the default case for Texinfo modules messages
translation in the Uniforum gettext framework, __ and __p.
The Texinfo tree and Texinfo tree elements used in argument of some functions
are documented in TEXINFO TREE. When customization
information is needed, an object that defines set_conf and/or get_conf is
expected, for example a converter inheriting from
Texinfo::Convert::Converter, see Getting and setting customization variables.
Returns the $msgid string translated in the Texinfo messages text domain.
__p can be used instead of __ to pass a $msgctxt context string to
provide translators with information on the string context when the string is
short or if the translation could depend on the context. __ corresponds to
the gettext function and __p to the pgettext function.
It is not advised to use those functions in user-defined code. It is not
practical either, as the translatable strings marked by __ or __p need to
be collected and added to the Texinfo messages domain. This facility could
only be used in user-defined code with translatable strings already present in
the domain anyway. In fact, these functions are documented mainly because they
are automatically exported.
See Locale::Messages,
gettext C interface,
Perl in GNU Gettext.
For translation of strings in output, see Texinfo::Translations.
Returns a hash reference with keys @-commands names specified in the $commands_list array reference and values arrays of tree elements corresponding to those @-command found in $tree by traversing the tree.
Return a list reference containing the tree elements corresponding to the @-commands names specified in the $commands_list found in $tree by traversing the tree. The order of the @-commands should be kept.
Returns the encoding name that can be used for decoding derived from the encoding that was set where $element appeared.
Return true if the element passed in argument is in running text context. If the optional $check_current argument is set, check the element itself, in addition to the parent context.
Encode the $file_name text string to a binary string $encoded_file_name
based on $input_encoding. Also returns the $encoding name actually
used which may have undergone some normalization. This function is mostly
a wrapper around Encode Encode::encode which avoids calling the module if not
needed. Do nothing if $input_encoding is undef.
This function returns the number or letter correponding to item
number $number for an @enumerate specification $specification,
appearing on an @enumerate line. For example
enumerate_item_representation('c', 3)
is e.
Find the parent root command (sectioning command or node) of a tree element.
The $object argument is optional, its global_commands field is used
to continue through @insertcopying if in a @copying.
Return a Texinfo tree element corresponding to the content of the index
entry associated to $element. If $prefer_reference_element is set,
prefer an untranslated element. If the element is an index command like
@cindex or an @ftable @item, the content element is the argument
of the command. If the element is a definition line, the index entry
element is based on the name and class.
Return true if the $tree has content that could be formatted. $do_not_ignore_index_entries is optional. If set, index entries are considered to be formatted.
Locate $file_path. If $file_path is an absolute path or has .
or .. in the path directories it is checked that the path exists and is a
file. Otherwise, the file name in $file_path is located in include
directories also used to find texinfo files included in Texinfo documents.
$file_path should be a binary string. undef is returned if the file was
not found, otherwise the file found is returned as a binary string.
Returns an $index_entry hash based on the $index_entry_info and
$indices_information. Also returns the $index_info hash with information on
the index associated to the index entry. $index_entry_info should be
an array reference with an index name as first element and the index entry number
in that index (1-based) as second element. In general, the $index_entry_info
is an extra index_entry associated to an element.
The $index_entry hash is described in Texinfo::Document index_entries. The
$index_info hash is described in Texinfo::Document::indices_information.
Normalize the node name string given in argument, by normalizing Top node case.
Remove first occurence of $element in the array reference $array.
Return the removed element, or undef if not found.
Return numbered level of the tree sectioning element $section, as modified by raise/lowersections.
Set the Texinfo customization variable corresponding to $cmdname in $customization_information. The $global_commands_information should contain information about global commands in a Texinfo document, typically obtained from a parsed document $document->global_commands_information(). $command_location specifies where in the document the value should be taken from, for commands that may appear more than once. The possibilities are:
Set to the last value for the command.
Set sequentially to the values in the Texinfo preamble.
Set to the first value of the command if the first command is not in the Texinfo preamble, else set as with preamble, sequentially to the values in the Texinfo preamble.
The $element returned is the last element that was used to set the
customization value, or undef if no customization value was found.
Notice that the only effect of this function is to set a customization variable value, no @-command side effects are run, no associated customization variables are set.
Set the Texinfo customization option corresponding to the tree element
$element. The command associated to the tree element should be
a command that sets some information, such as @documentlanguage,
@contents or @footnotestyle for example. Return true if the command
argument was found and the customization variable was set.
If not already set, set OUTPUT_ENCODING_NAME based on input file
encoding.
Set OUTPUT_PERL_ENCODING based on OUTPUT_ENCODING_NAME. In general,
OUTPUT_PERL_ENCODING should not be set directly by user-defined code such
that it corresponds to OUTPUT_ENCODING_NAME.
Split the $element contents at @| in at max three parts.
Return an element containing the split parts in contents, or undef if
the $element has no useful content. The input $element
is supposed to be $element->{'args'}->[0]
of %Texinfo::Commands::heading_spec_commands commands such as @everyheading.
Return true if the $name is a known customization option.
Return true if the $name is a known tree transformation name
that may be passed with TREE_TRANSFORMATIONS to modify a texinfo
tree.
Copyright 2010- Free Software Foundation, Inc. See the source file for all copyright years.
This library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version.
use Texinfo::Parser;
my $parser = Texinfo::Parser::parser();
my $document = $parser->parse_texi_file("somefile.texi");
my ($errors, $errors_count) = $document->parser_errors();
foreach my $error_message (@$errors) {
warn $error_message->{'error_line'};
}
The Texinfo Perl module main purpose is to be used in texi2any to convert
Texinfo to other formats. There is no promise of API stability.
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 @quotation associated to an @author
command, the number of columns in a multitable, or the node associated with a
section.
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.
The following method is used to construct a new Texinfo::Parser object:
This method creates a new parser. The options may be provided as a hash reference. Most of those options correspond to Texinfo customization options described in the Texinfo manual.
Handle cpp like synchronization lines if set. Set in the default case.
An array reference of the output formats for which @ifFORMAT
conditional blocks should be expanded. Default is empty.
Possible values are nomenu, menu and sectiontoc. Only report
menu-related errors for menu.
An array reference of directories in which @include files should be
searched for. Default contains the working directory, ..
If set, spaces after an @-command name that take braces are ignored. Default on.
Maximal number of nested user-defined macro calls. Default is 100000.
A string corresponding to a document language set by @documentlanguage.
It overrides the document @documentlanguage information, if present.
A hash reference. Keys are names, values are the corresponding values.
Same as values set by @set.
Different methods may be called to parse some Texinfo code:
parse_texi_line for a line, parse_texi_piece for a fragment of
Texinfo, parse_texi_text for a string corresponding to a full document
and parse_texi_file for a file. The first argument of these functions
is a parser.
When parse_texi_line is used, the resulting tree is rooted at
a root_line type container. Otherwise, the resulting tree should be
rooted at a document_root type container.
This function is used to parse a short fragment of Texinfo code.
$text is the string containing the texinfo line. $first_line_number is the line number of the line, if undef, it will be set to 1.
This function is used to parse Texinfo fragments.
$text is the string containing the texinfo text. $first_line_number is the line number of the first text line, if undef, it will be set to 1.
This function is used to parse a text as a whole document.
$text is the string containing the texinfo text. $first_line_number is the line number of the first text line, if undef, it will be set to 1.
The file with name $file_name is considered to be a Texinfo file and is parsed into a tree. $file_name should be a binary string.
The errors collected during the tree parsing are available with
the resulting document parser_errors. These errors are internally
registered in a Texinfo::Report object.
This function returns as $error_count the count of parsing errors. The $error_warnings_list is an array of hash references one for each error, warning or error line continuation. They are described in detail in Texinfo::Report::errors.
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
cmdname key holding the @-command name. Tree elements corresponding
to text fragments have a text key holding the corresponding text.
Finally, the last category is other elements, which in most cases have
a 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 of other container element are in the array
referred to with the args key or with the contents key. The 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. The contents key array
holds the contents of the texinfo code appearing within a block @-command,
within a container, or within a @node or sectioning @-command.
Another important key for the elements is the 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:
makeinfo -c DUMP_TREE=1 -c TEXINFO_OUTPUT_FORMAT=parse document.texi
For a simpler, more regular representation of the tree structure, you can do:
makeinfo -c TEXINFO_OUTPUT_FORMAT=debugtree document.texi
info keyextra keyThe command name of @-command elements.
The text fragment of text elements.
The type of element considered, in general a container. Frequent types encountered are paragraph for a paragraph container, brace_container for the container holding a brace @-commands content, line_arg and 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 spaces_before_paragraph is associated to spaces appearing before a paragraph beginning. Most @-commands elements do not have a type associated.
Arguments in braces or on @-command line. An array reference.
The Texinfo appearing in the element. For block commands, other
containers, @node and sectioning commands. An array reference.
The parent element.
An hash reference corresponding to information on the location of the element in the Texinfo input manual. It should mainly 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
A hash reference holding any other information that cannot be
obtained otherwise from the tree.
See Information available in the info key.
A hash reference holding information that could also be obtained
from the tree, but is directly associated to the element to simplify
downstream code.
See Information available in the extra key.
Some types can be associated with @-commands (in addition to cmdname),
although usually there will be no type at all. The following are the
possible values of type for tree elements for @-commands.
This type is set for an @-command that is redefined by @definfoenclose.
The beginning is in {'extra'}->{'begin'} and the end in
{'extra'}->{'end'}.
The command name is the info command_name value.
This is the type of index entry command like @cindex, and, more
importantly user-defined index entry commands. So for example if there
is:
@defindex foo ... @fooindex index entry
the @fooindex @-command element will have the index_entry_command
type.
The command name is the info command_name value.
The text elements may have the following types (or may have no type at all):
Space after a node in the menu entry, when there is no description, and space appearing after the description line.
Spaces on definition command line separating the definition command arguments. Delimiters, such as comma, square brackets and parentheses appearing in definition command line arguments at the end of the line, separated from surrounding texts during the parsing phase.
An empty line (possibly containing whitespace characters only).
spaces appearing after an @-command without braces that does not
take argument on the line, but which is followed by ignorable
spaces, such as @item in @itemize or @multitable, or @noindent.
Spaces appearing after a closing brace, for some rare commands for which
this space should be ignorable (like @caption or @sortas).
Space appearing before a paragraph beginning.
Text in an environment where it should be kept as is (in @verbatim,
@verb, @macro body).
Used for the arguments to some special line commands whose arguments
aren’t subject to the usual macro expansion. For example @set,
@clickstyle, @unmacro, @comment. The argument is associated to
the text key.
Space within an index @-command before an @-command interrupting the index command.
Text appearing after @bye.
Text appearing before real content, including the \input texinfo.tex.
English text added by the parser that may need to be translated during conversion. Happens for definition line @-commands aliases that leads to prepending text such as “Function”.
Some types of element are containers of portions of the tree,
either for the whole tree, or for contents appearing before @node
and sectioning commands.
Content before nodes and sectioning commands at the beginning of
document_root.
root_line is the type of the root tree when parsing Texinfo line
fragments using parse_texi_line. document_root is the document
root otherwise.
document_root first content should be before_node_section, then nodes and
sections @-commands elements, @bye element and postamble_after_end.
This container holds everything appearing after @bye.
This container holds everything appearing before the first content, including
the \input texinfo.tex line and following blank lines.
This container holds everything that appears before @setfilename.
This container holds everything appearing before the first formatted content, corresponding to the preamble in the Texinfo documentation.
The other types of element are containers with other elements appearing in
their contents. The paragraph container holds normal text from the
Texinfo manual outside of any @-commands, and within @-commands with blocks of
text (@footnote, @itemize @item, @quotation for example). The
preformatted container holds the content appearing in @-commands like
@example and the rawpreformatted container holds the content appearing in
format commands such as @html. The other containers are more specific.
The types of container element are the following:
Special type containing balanced braces content (braces included)
in the context where they are valid, and where balanced braces need to
be collected to know when a top-level brace command is closed. In @math,
in raw output format brace commands and within brace @-commands in raw output
format block commands.
A container for content before the first @defline or @deftypeline
in @defblock.
A container for content before the first @item of block @-commands
with items (@table, @multitable, @enumerate...).
Those containers occur within the args array of @-commands taking an
argument. brace_container is used for the argument to commands
taking arguments surrounded by braces when the whole text in the braces
is in the argument. brace_arg is used for the arguments to commands taking
arguments surrounded by braces when the leading and, in most cases, trailing
spaces are not part of the argument, and for arguments in braces separated by
commas. brace_command_context is used for @-commands with braces that start
a new context (@footnote, @caption, @math).
line_arg is used for commands that take the texinfo code on the rest of the
line as their argument, such as @settitle, @node, @section.
block_line_arg is similar but is used for commands that start a new block
(which is to be ended with @end).
following_arg is used for the accent @-commands argument that did not use braces but instead followed the @-command, possibly after a space, as
@~n @ringaccent A
For example
@code{in code}
leads to
{'cmdname' => 'code',
'args' => [{'type' => 'brace_container',
'contents' => [{'text' => 'in code'}]}]}
Bracketed argument. On definition command and on @multitable line.
Argument of a user defined linemacro call in bracket. It holds directly the argument text (which does not contain the braces) and does not contain other elements. It should not appear directly in the tree as the user defined linemacro call is replaced by the linemacro body.
Definition line arguments containers corresponding to the different parts of a
definition line command. Contains one bracketed_arg, def_line_arg or
untranslated_def_line_arg container.
The def_line type is associated with a container within a block definition
command. It holds the definition line arguments in block_line_arg.
A @def* @-command line command such as @deffnx or @defline
also holds the definition line arguments, in line_arg.
The type of each definition line arguments element describes the meaning of the
element. It is one of def_category, def_name, def_class, def_type,
def_arg, def_typearg, spaces or delimiter, depending on the
definition.
The container with type def_item holds the definition text content. Content appearing before a definition command with a x form is in an inter_def_item container.
the def_line_arg contains one or several elements that together are a single unit on a definition command line. This container is very similar with a bracketed_arg on a definition line, except that there is no bracket. Appears in definition line arguments containers such as def_category, def_arg or similar.
The untranslated_def_line_arg is similar, but only happens for automatically
added categories and contains only a text element. For example, the deffun
line def_category container may contain an untranslated_def_line_arg type
container containing itself a text element with “Function” as text, if the
document language demands a translation. Note that the
untranslated_def_line_arg is special, as, in general, it should not be
recursed into, as the text within is untranslated, but the untranslated text
should be gathered when converting the untranslated_def_line_arg type
container.
Container holding the arguments of a user defined macro, linemacro or rmacro. It should not appear directly in the tree as the user defined call is expanded. The name of the macro, rmacro or linemacro is the the info command_name value. The macro_call_line or rmacro_call_line elements are used when there are no braces and the whole line is the argument.
Taken from @macro definition and put in the args key array of
the macro, macro_name is the type of the text fragment corresponding
to the macro name, macro_arg is the type of the text fragments
corresponding to macro formal arguments.
The menu_comment container holds what is between menu entries in menus. For example, in:
@menu Menu title * entry:: Between entries * other:: @end menu
Both
Menu title
and
Between entries
will be in a menu_comment.
A menu_entry holds a full menu entry, like
* node:: description.
The different elements of the menu entry are in the
menu_entry contents array reference.
menu_entry_leading_text holds the star and following spaces.
menu_entry_name is the menu entry name (if present), menu_entry_node
corresponds to the node in the menu entry, menu_entry_separator holds
the text after the node and before the description, in most cases
:: . Lastly, menu_entry_description is for the description.
In @multitable, a multitable_head container contains all the rows
with @headitem, while multitable_body contains the rows associated
with @item. A row container contains the @item and @tab
forming a row.
A paragraph. The 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 text elements
without a cmdname or type, or @-command elements for commands
appearing in the paragraph.
Texinfo code within a format that is not filled. Happens within some
block commands like @example, but also in menu (in menu descriptions,
menu comments...).
Texinfo code within raw output format block commands such as @tex
or @html.
Those containers appear in @table, @ftable and @vtable.
A table_entry container contains an entire row of the table.
It contains a table_term container, which holds all the @item and
@itemx lines. This is followed by a table_definition container, which
holds the content that is to go into the second column of the table.
If there is any content before an @itemx (normally only comments,
empty lines or maybe index entries are allowed), it will be in
a container with type inter_item at the same level of @item
and @itemx, in a table_term.
info key ¶The string correspond to the line after the @-command
for @-commands that have special arguments on their line,
and for @macro line.
Name of commands that can be defined dynamically. The name of index command or definfoenclose defined command (also available in cmdname for those commands). The name of user defined macro, rmacro or linemacro called associated with the element holding the arguments of the user defined command call.
@verb delimiter is in delimiter.
Set if the element is not in the Texinfo input code, but is inserted
as a default for @-command argument or as a definition command automatically
inserted category (for example Function for @defun).
A reference to an element containing the spaces after @-command arguments before a comma, a closing brace or at end of line, for some @-commands and bracketed content type with opening brace, and line commands and block command lines taking Texinfo as argument and comma delimited arguments. Depending on the @-command, the spaces_after_argument is associated with the @-command element, or with each argument element.
For accent commands with spaces following the @-command, like:
@ringaccent A @^ u
there is a spaces_after_cmd_before_arg key linking to an element containing the spaces appearing after the command in text.
Space between a brace @-command name and its opening brace also ends up in spaces_after_cmd_before_arg. It is not recommended to leave space between an @-command name and its opening brace.
A reference to an element containing the spaces following the opening brace of some @-commands with braces and bracketed content type, spaces following @-commands for line commands and block command taking Texinfo as argument, and spaces following comma delimited arguments. For context brace commands, line commands and block commands, spaces_before_argument is associated with the @-command element, for other brace commands and for spaces after comma, it is associated with each argument element.
extra key ¶The node element in the parsed tree containing the element.
Set for @-commands elements that have an associated
index entry and for @nodedescription.
The region command (@copying, @titlepage) containing the element,
if it is in such an environement. Set for @-commands elements that have an
associated index entry and for @anchor.
The index entry information is associated to @-commands that have an associated
index entry. The associated information should not be directly accessed,
instead Texinfo::Common::lookup_index_entry
should be called on the extra index_entry value:
my ($index_entry, $index_info)
= Texinfo::Common::lookup_index_entry(
$element->{'extra'}->{'index_entry'},
$indices_information);
The $indices_information is the information on a Texinfo manual indices
obtained from
Texinfo::Document::indices_information.
The index entry information hash returned by
Texinfo::Common::lookup_index_entry is described in
Texinfo::Document index_entries.
Currently, the index_entry value is an array reference with an index name as first element and the index entry number in that index (1-based) as second element.
A string containing the characters flagged as ignored in key sorting in the document by setting flags such as txiindexbackslashignore. Set, if not empty, for @-commands elements that have an associated index entry.
An array holding strings, the arguments of @-commands taking simple
textual arguments as arguments, like @everyheadingmarks,
@frenchspacing, @alias, @synindex, @columnfractions.
The string correspond to the line after the @-command for @-commands
that have an argument interpreted as simple text, like @setfilename,
@end or @documentencoding.
@abbr@acronymThe first argument normalized is in normalized.
@anchor@float@-commands that are targets for cross-references have a normalized key for the normalized label, built as specified in the Texinfo documentation in the HTML Xref node. There is also a node_content key for an element holding the corresponding content.
@authorIf in a @titlepage, the titlepage is in titlepage, if in
@quotation or @smallquotation, the corresponding tree element
is in quotation.
The author tree element is in the authors array of the @titlepage
or the @quotation or @smallquotation it is associated with.
@clickIn clickstyle there is the current clickstyle command.
def_linedef_command holds the line definition command name, without x if the line
definition command is an x form of a block definition command. For a
def_line container, def_command holds the command name associated
with the def_line. original_def_cmdname is the original def command
name.
If the element is a definition line command and is an x form of a block definition command, it has not_after_command set if not appearing after the block definition command without x.
The def_index_element is a Texinfo tree element corresponding to
the index entry associated to the definition line, based on the
name and class. If needed this element is based on translated strings.
In that case, if @documentlanguage is defined where the element
is located, documentlanguage holds the documentlanguage value.
def_index_ref_element is similar, but not translated, and only set if
there could have been a translation.
The omit_def_name_space key value is set and true if the Texinfo variable
txidefnamenospace was set, signaling that the space between function
definition name and arguments should be omitted.
@definfoenclose defined commandsbegin holds the string beginning the @definfoenclose,
end holds the string ending the @definfoenclose.
@documentencodingThe argument, normalized is in input_encoding_name.
@enumerateThe enumerate_specification extra key contains the enumerate argument.
@float@listoffloatsIf @float has a first argument, and for @listoffloats argument there
is a float_type key with the normalized float type.
caption and shortcaption hold the corresponding tree elements
associated to a @float. The @caption or @shortcaption have the
float tree element stored in float.
@subentryIf an index entry @-command, such as @cindex, or a @subentry contains
a @sortas command, sortas holds the @sortas command content
formatted as plain text.
subentry links to the next level @subentry element. subentry_parent
links to the previous level element.
Index entry @-command (but not @subentry) can also have seentry
and seealso keys that link to the corresponding @-commands elements.
@inlinefmt@inlineraw@inlinefmtifelse@inlineifclear@inlineifsetThe first argument is in format. If an argument has been determined
as being expanded by the Parser, the index of this argument is in
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
@inlinefmtifelse, and 1 for other commands.
@item in @enumerate or @itemizeThe item_number extra key holds the number of this item.
@item and @tab in @multitableThe cell_number index key holds the index of the column of the cell.
@itemize@table@vtable@ftableThe command_as_argument extra key points to the @-command
as argument on the @-command line.
If the command in argument for @table, @vtable or @ftable
is @kbd and the context and @kbdinputstyle is such that @kbd
should be formatted as code, the command_as_argument_kbd_code
extra key is set to 1.
@kbdcode is set depending on the context and @kbdinputstyle.
@macroinvalid_syntax is set if there was an error on the @macro
line. info key hash arg_line holds the line after @macro.
menu_entry_nodeExtra keys with information about the node entry label same as those
appearing in the @node line_arg explicit directions arguments
extra hash labels information.
@multitableThe key max_columns holds the maximal number of columns. If there is a
@columnfractions as argument, then the columnfractions key is associated
with the element for the @columnfractions command.
@nodeExplicit directions labels information are available in the line_arg
node directions arguments of @node. Each line_arg argument element
extra hash node_content key value is an element holding the
contents corresponding to the node name. There is also a manual_content key
if there is an associated external manual name, and a normalized key for the
normalized label, built as specified in the HTML Xref Texinfo documentation
node.
If you called Texinfo::Structuring::nodes_tree,
the node_directions hash in the @node element extra associates
up, next and prev keys to the elements corresponding to the node
line directions.
An associated_section key holds the tree element of the
sectioning command that follows the node. An node_preceding_part
key holds the tree element of the @part that precedes the node,
if there is no sectioning command between the @part and the node.
A node_description key holds the first @nodedescription associated
to the node.
A node containing a menu have a menus key which refers to an array of references to menu elements occuring in the node.
The first node containing a @printindex @-command has the isindex
key set.
paragraphThe indent or noindent key value is set if the corresponding @-commands are associated with that paragraph.
@partThe next sectioning command tree element is in part_associated_section.
The following node tree element is in part_following_node if there is
no sectioning command between the @part and the node.
@ref@xref@pxref@inforefThe brace_arg corresponding to the node argument holds information on
the label, with the same information in the extra hash as for the
@node line_arg explicit directions arguments.
rowThe row_number index key holds the index of the row in
the @multitable.
The node preceding the command is in associated_node.
The part preceding the command is in associated_part.
If the level of the document was modified by @raisections
or @lowersections, the differential level is in level_modifier.
Other extra keys are set when you call Texinfo::Structuring::sectioning_structure.
untranslated_def_line_argdocumentlanguage holds the @documentlanguage value.
If there is a translation context, it should be in translation_context.
Copyright 2010- Free Software Foundation, Inc. See the source file for all copyright years.
This library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version.
use Texinfo::Parser;
my $parser = Texinfo::Parser::parser();
my $document = $parser->parse_texi_file("somefile.texi");
my $indices_information = $document->indices_information();
my $float_types_arrays = $document->floats_information();
my $internal_references_array
= $parser->internal_references_information();
# $identifier_target is an hash reference on normalized
# node/float/anchor names.
my $identifier_target = $document->labels_information();
# A hash reference, keys are @-command names, value is an
# array reference holding all the corresponding @-commands.
# Also contains dircategory and direntry list.
my $global_commands_information
= $document->global_commands_information();
# a hash reference on document information (encodings,
# input file name, for example).
my $global_information = $document->global_information();
The Texinfo Perl module main purpose is to be used in texi2any to convert
Texinfo to other formats. There is no promise of API stability.
This module is used to represent parsed Texinfo documents, with the Texinfo tree and associated information. In general a document is obtained from a Texinfo parser call, there is no need to setup the document.
The main purpose of Texinfo::Document methods is to retrieve information on a Texinfo document.
The Texinfo tree obtained by parsing a Texinfo document is available through
tree:
The $tree is a hash reference. It is described in TEXINFO TREE.
If $handler_only is set and XS extensions are used, the returned tree holds a reference to the C Texinfo tree data only, but no actual Perl Texinfo tree. This avoids building the Perl tree if all the functions called with the tree as argument have XS interfaces and directly use the C data and do not use the Perl tree.
Some global information is available through global_information:
The $info returned is a hash reference. The possible keys are
An array of included file paths as they appear in the document. Binary
strings. From both @include and @verbatiminclude.
input_encoding_name string is the encoding name used for the
Texinfo code.
The name of the main Texinfo input file and the associated directory.
Binary strings. In texi2any, they should come from the command line
(and can be decoded with the encoding in the customization variable
COMMAND_LINE_ENCODING).
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 global_commands_information:
$commands is an hash reference. The keys are @-command names. The associated values are array references containing all the corresponding tree elements.
The following list of commands is also available as a key:
All the @-commands that have an associated label (so can be the
target of cross references) -- @node, @anchor and @float with
label -- have a normalized name associated, constructed as described in the
HTML Xref node in the Texinfo documentation. Those normalized labels and
the association with @-commands is available through labels_information:
$identifier_target is a hash reference whose keys are normalized labels, and the associated value is the corresponding @-command.
$labels_list is a list of Texinfo tree command elements that could be the target of cross references.
Information on @float grouped by type of floats, each type corresponding
to potential @listoffloats is available through floats_information.
$float_types is a hash reference whose keys are normalized float
types (the first float argument, or the @listoffloats argument).
The normalization is the same as for the first step of node names
normalization. The value is the list of float tree elements appearing
in the texinfo document.
Internal references, nodes and section lists may also be available.
The function returns an array reference of cross-reference commands referring to the same document with @-commands that refer to node, anchors or floats.
Returns an array reference containing the document nodes. In general set to the nodes list returned by Texinfo::Structuring nodes_tree, by a call to register_document_nodes_list.
Returns an array reference containing the document sections. In general set to the sections list returned by Texinfo::Structuring sectioning_structure, by a call to register_document_sections_list.
Information about defined indices, indices merging and index entries is
available through indices_information.
$indices_information is a hash reference. The keys are
1 if the index entries should be formatted as code, 0 in the opposite case.
The index name.
An array reference of prefix associated to the index.
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.
An array reference containing index entry structures for index entries
associated with the index. The index entry could be associated to
@-commands like @cindex, or @item in @vtable, or definition
commands entries like @deffn.
The keys of the index entry structures are
The following shows the references corresponding to the default indexes cp and fn, the fn index having its entries formatted as code and the indices corresponding to the following texinfo
@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}};
If name is not set, it is set to the index name.
Merged and sorted document indices are also available. Parsed indices are not merged nor sorted, Texinfo::Indices functions are called to merge or sort the indices the first time the following methods are called. The results are afterwards associated to the document and simply returned.
In general, those methods should not be called directly, instead Index sorting Converter methods should be used, which already call the following functions.
Merge indices if needed and return merged indices. The $merged_indices returned is a hash reference whose keys are the index names and values arrays of index entry structures described in index_entries.
Texinfo::Indices::merge_indices
is used to merge the indices.
In general, it is not useful to call this function directly, as it is already called by index sorting functions.
sorted_indices_by_letter returns the indices sorted by index and letter,
while sorted_indices_by_index returns the indices with all entries
of an index together.
By default, indices are sorted according to the Unicode Collation Algorithm defined in the Unicode Technical Standard #10, without language-specific collation tailoring. If $use_unicode_collation is set to 0, the sorting will not use the Unicode Collation Algorithm and simply sort according to the codepoints. If $locale_lang is set, the language is used for linguistic tailoring of the sorting, if possible.
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 letter key with the letter, and an entries key with an array reference of sorted index entries beginning with the letter. The letter is a character string suitable for sorting letters, but is not necessarily the best to use for output.
When simply sorting, the array of the sorted index entries is associated with the index name.
The optional $customization_information argument is used for error reporting, both to find the Texinfo::Report object to use for error reporting and Texinfo customization variables information. In general, it should be a converter (Getting and setting customization variables) or a document Getting customization options values registered in document).
Texinfo::Indices::sort_indices_by_index
and Texinfo::Indices::sort_indices_by_letter
are used to sort the indices, if needed.
In general, those methods should not be called directly, instead
Texinfo::Convert::Converter::get_converter_indices_sorted_by_index
and Texinfo::Convert::Converter::get_converter_indices_sorted_by_letter
should be used. The Texinfo::Convert::Converter methods call
sorted_indices_by_index and sorted_indices_by_letter.
A document has a Texinfo::Report objet associated, that is used to
register errors and warning messages in. To get the errors registered
in the document, the errors method should be called.
It is also possible to get the document associated Texinfo::Report objet
by calling the registrar accessor method.
Returns the Texinfo::Report object associated with the $document.
In general, this is not needed as most functions use the document associated
Texinfo::Report object automatically. However, for some functions a
Texinfo::Report object is passed in argument, being able to
get the document registrar object is interesting in those cases.
This function returns as $error_count the count of errors since setting
up the $document (or calling the function). The returned
$error_warnings_list is an array of hash references
one for each error, warning or error line continuation. The format of
these hash references is described
in Texinfo::Report::errors.
By default, customization information is registered in a document object just after parsing the Texinfo code. Structuring and tree transformation methods then get customization variables values from the document object they have in argument. The customization variables set by default may be a subset selected to be useful for structuring and tree transformation codes.
To retrieve Texinfo customization variables you can call get_conf:
Returns the value of the Texinfo customization variable $variable_name
(possibly undef), if the variable value was registered in the document,
or undef.
The setup of a document is described next, it should only be used in parsers codes.
Setup a document. There is no reason to call this method out of parsers, as it is already done by the Texinfo parsers. The arguments are gathered during parsing and correspond to information returned by the other methods.
Further information can be registered in the document.
Register the $nodes_list array reference as $document nodes list. This method should be called after the processing of document structure.
The $options hash reference holds options for the document. These options
should be Texinfo customization options. Usually, the options registered in
the document contain those useful for structuring and tree transformation
getting place between Texinfo code parsing and conversion to output formats.
Indeed, document customization options are mainly accessed by structuring and
tree transformation methods (by calling get_conf). The options should in general be registered before
the calls to get_conf.
Register the $sections_list array reference as $document sections list. This method should be called after the processing of document structure.
Add $value $key global information to $document. This method
should not be generally useful, as document global information is already
set by the Texinfo parser. The information set should be available through
the next calls to global_information.
The method should in general be called before the calls to
global_information.
The parsing of Texinfo code, structuring and transformations of the tree called through Texinfo Perl modules may be done by pure Perl modules or by C code called through XS interfaces. In general, it makes no difference whether pure Perl or C code is used. When the document and tree are modified by C code, the Perl structures are automatically rebuilt when calling the accessors described previously. In some cases, however, specific functions need to be called to pass information from C to Perl or perform actions related to C data.
The methods can always be called on pure Perl modules even if they do nothing. Therefore it is, in general, better to call them assuming that modules setting up C data were called, even when it is not the case.
First, document_descriptor can be called to get the document identifier
document used by C code to retrieve the document data in C. In general
this identifier is directly and transparently taken from the document, but may
need to be set on other objects in rare cases.
Returns the document descriptor if the document is available as C data,
0 or undef if not.
When the tree is directly accessed in Perl (not through a document)
but is modified by C code, for instance called through Texinfo::Common or
Texinfo::Transformations methods, the Perl structures need to be rebuilt
from the C data with rebuild_tree:
Return a $rebuilt_tree, rebuilt from C data if needed. If there is no C data, the tree is returned as is. The tree rebuilt is based on the Texinfo parsed document associated to the Texinfo tree $tree.
If the optional $no_store argument is set, remove the C data.
Note that the Perl tree associated to a document is rebuilt from C data
when calling $document->tree(). Similarly, the tree is rebuilt when
calling other accessors that depend on the document tree. Therefore
rebuild_tree should only be called when there is no document associated to a
tree and $document->tree() cannot be called to rebuild the tree.
Some methods allow to release the memory held by C data associated to a Texinfo parsed document:
Copyright 2010- Free Software Foundation, Inc. See the source file for all copyright years.
This library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version.
Texinfo::ManipulateTree - Texinfo modules common tree manipulation functions
The Texinfo Perl module main purpose is to be used in texi2any to convert
Texinfo to other formats. There is no promise of API stability.
Texinfo::ManipulateTree contains methods for copying and modifying the
Texinfo tree used for default conversion to output formats.
For optional tree transformation, see Texinfo::Transformations.
The Texinfo tree and Texinfo tree elements used in argument of some functions
are documented in TEXINFO TREE. When customization
information is needed, an object that defines get_conf is
expected, normally a Getting customization options values registered in document object.
In @enumerate and @itemize from the tree, move index entries
appearing just before @item after the @item. Comment lines
between index entries are moved too.
Protect colon with protect_colon_in_tree and characters that
are special in node names after a label in menu entries (tab
dot and comma) with protect_node_after_label_in_tree.
The protection is achieved by putting protected characters
in @asis{}.
Protect comma characters, replacing , with @comma{} in tree.
Modify $element contents by protecting the first parenthesis. If $element is undef a fatal error with a backtrace will be emitted.
In tables, relate index entries preceding and following an
entry with said item. Reference one of them in the entry’s
entry_associated_element.
Texinfo::Document, Texinfo::Structuring, Texinfo::Transformations.
Copyright 2010- Free Software Foundation, Inc. See the source file for all copyright years.
This library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version.
Texinfo::Structuring - information on Texinfo::Document document structure
use Texinfo::Structuring qw(sectioning_structure nodes_tree number_floats
associate_internal_references);
# $document is a parsed Texinfo::Document document.
# When customization variables information is needed, it is obtained
# from the $document by calling the get_conf() method.
my $sections_list = sectioning_structure($document);
my $nodes_list = nodes_tree($document);
set_menus_node_directions($document);
complete_node_tree_with_menus($document);
check_nodes_are_referenced($document);
associate_internal_references($document);
number_floats($document->floats_information());
The Texinfo Perl module main purpose is to be used in texi2any to convert
Texinfo to other formats. There is no promise of API stability.
Texinfo::Structuring allows to collect information on a Texinfo
document structure. Thanks to sectioning_structure the hierarchy of
sectioning commands is determined. The directions implied by menus are
determined with set_menus_node_directions. The node tree is analysed
with nodes_tree. Nodes directions are completed with menu directions
with complete_node_tree_with_menus. Floats get their standard
numbering with number_floats and internal references are matched up
with nodes, floats or anchors with associate_internal_references.
No method is exported in the default case.
Most methods use the Texinfo::Report registrar from a parsed document
for error reporting. Most also require Texinfo customization variables
information, which means an object implementing the get_conf method, in
general a parsed document with registered customization, or, sometime,
a converter (Getting and setting customization variables). Other common data needed such as target elements associated to
identifiers or refs are obtained from a parsed document, see
Texinfo::Document.
Verify that internal references (@ref and similar without fourth of
fifth argument and menu entries) have an associated node, anchor or float.
Set the normalized key in the extra hash of menu_entry_node container
for menu entries and in the first argument extra hash for internal
references @ref and similar @-commands.
Check that all the nodes are referenced (in menu, @*ref or node direction).
Should be called after complete_node_tree_with_menus in order to
have the autogenerated menus available.
Complete nodes directions with menu directions. Check consistency of menus, sectionning and nodes direction structures.
$node is a node tree element. Find the node $node children based
on the sectioning structure. For the node associated with @top
sectioning command, the sections associated with parts are considered.
Complete $element by adding the $command_name, the command line
argument and @end to turn the element to a proper block command.
Returns a @menu Texinfo tree element for node $node, pointing to the
children of the node obtained with the sectioning structure. If
$use_sections is set, use section names for the menu entry names.
$customization_information, if defined, should hold information needed for
translations. Translations are only needed when generating the top node menu.
Returns a detailmenu tree element formatted as a master node. $menus is an array reference containing the regular menus of the Top node. $customization_information should hold information needed for translations and error reporting.
The $registrar argument can be set to a Texinfo::Report object. If the $registrar argument is not set, $customization_information is assumed to be a converter, and error reporting uses converters error messages reporting functions (Registering error and warning messages).
Returns the Texinfo tree corresponding to a single menu entry pointing to
$node. If $use_sections is set, use the section name for the menu
entry name. Returns undef if the node argument is missing.
Goes through nodes in $document tree and set directions. Returns the list of nodes.
This functions sets, in the extra node element hash:
Number the floats as described in the Texinfo manual. Sets
the float_number key in the extra hash of the float
tree elements.
Return the sectioning command name corresponding to the sectioning element $element, adjusted in order to take into account raised and lowered sections, when needed.
This function goes through the parsed document tree and gather information on the document structure for sectioning commands. It returns a reference on the sections elements list.
It sets section elements extra hash values:
The level in the sectioning tree hierarchy. 0 is for @top or
@part, 1 for @chapter, @appendix... This level is corrected
by @raisesections and @lowersections.
The sectioning element number.
An array holding sectioning elements children of the element.
Hash reference with up, next and prev keys associated to elements corresponding to sectioning structure directions.
Hash reference with up, next and prev keys associated to
elements corresponding to toplevel sectioning structure directions,
for elements like @top, @chapter, @appendix, not taking into
account @part elements.
An element is created and used as the root of the sectioning commands tree.
This element is associated to the extra sectioning_root key of the first
section element of the sections list. It is also at the top of the tree when
following the up section_directions.
Goes through menu and set directions.
This functions sets, in the extra node element hash reference:
Register a warning in for each @part in global commands information of
$document that is not empty.
Copyright 2010- Free Software Foundation, Inc. See the source file for all copyright years.
This library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version.
use Texinfo::Report;
my $registrar = Texinfo::Report::new();
if ($warning_happened) {
$registrar->line_warn($converter, sprintf(__("\@%s is wrongly used"),
$current->{'cmdname'}), $current->{'source_info'});
}
my ($errors, $errors_count) = $registrar->errors();
foreach my $error_message (@$errors) {
warn $error_message->{'error_line'};
}
$registrar->clear();
The Texinfo Perl module main purpose is to be used in texi2any to convert
Texinfo to other formats. There is no promise of API stability.
The Texinfo::Report module helps with error handling. Errors
and warnings can be setup, stored and retrieved later on.
This module is used by the Texinfo modules Texinfo::Parser and
Texinfo::Convert::Converter.
No method is exported in the default case.
The new method initializes a Texinfo::Report object.
The errors collected are available through the errors method, the other
methods allow registering errors and warnings.
Return an initialized Texinfo::Report object.
This function returns as $error_count the count of errors since
calling new. The $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:
If set, the line is a continuation line of a message.
The text of the error formatted with the macro name, as needed.
The file name where the error or warning occurs.
The line number of the error or warning.
The user macro name that is expanded at the location of the error or warning.
The text of the error.
May be warning, or error.
Clear the previously registered messages.
Register the $msg hash reference corresponding to an error, warning or error line
continuation. The $msg hash reference should correspond to the structure returned
by errors.
Register a warning or an error. The $text is the text of the
error or warning. The mandatory $error_location_info holds the information
on the error or warning location. The $error_location_info reference on
hash may be obtained from Texinfo elements source_info keys. It may also
be setup to point to a file name, using the file_name key and to a line
number, using the line_nr key. The file_name key value should be a
binary string.
The $continuation optional arguments, if true, conveys that the line is a continuation line of a message.
The $debug optional integer arguments sets the debug level.
The $silent optional arguments, if true, suppresses the output of a message that is output immediatly if debugging is set.
The source_info key of Texinfo tree elements is described in more details in Texinfo::Parser source_info.
Register a document-wide error or warning. $text is the error or warning message. The $program_name is prepended to the message, if defined. The $continuation optional arguments, if true, conveys that the line is a continuation line of a message.
Copyright 2010- Free Software Foundation, Inc. See the source file for all copyright years.
This library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version.
Texinfo::Translations - Translations of output documents strings for Texinfo modules
@ISA = qw(Texinfo::Translations);
Texinfo::Translations::configure('LocaleData');
my $tree_translated
= Texinfo::Translations::gdt('See {reference} in @cite{{book}}',
$converter->get_conf('documentlanguage'),
{'reference' => $tree_reference,
'book' => {'text' => $book_name}});
The Texinfo Perl module main purpose is to be used in texi2any to convert
Texinfo to other formats. There is no promise of API stability.
The Texinfo::Translations module helps with translations
in output documents.
Translation of error messages is not described here, some
elements are in Texinfo::Common __ and __p.
No method is exported.
The configure method sets the translation files base directory. If not
called, system defaults are used.
$localesdir is the directory where translation files are found. The directory structure and files format should follow the conventions expected for gettext based internationalization. The $strings_textdomain is optional, if set, it determines the translation domain.
The gdt and pgdt methods are used to translate strings to be output in
converted documents, and return a Texinfo tree. The gdt_string is similar
but returns a simple string, for already converted strings.
The $string is a string to be translated. With gdt
the function returns a Texinfo tree, as the string is interpreted
as Texinfo code after translation. With gdt_string a string
is returned.
$lang is the language used for the translation.
$replaced_substrings is an optional hash reference specifying
some substitution to be done after the translation. The key of the
$replaced_substrings hash reference identifies what is to be substituted.
In the string to be translated word in brace matching keys of
$replaced_substrings are replaced.
For gdt, the value is a Texinfo tree element that is substituted in the
resulting Texinfo tree. For gdt_string, the value is a string that
is replaced in the resulting string.
$debug_level is an optional debugging level supplied to gdt, similar to
the DEBUG customization variable. If set, the debug level minus one is
passed to the Texinfo string parser called in gdt.
The $translation_context is optional. If not undef this is a translation
context string for $string. It is the first argument of pgettext
in the C API of Gettext.
For example, in the following call, the string
See {reference} in @cite{{book}} is translated, then
parsed as a Texinfo string, with {reference} substituted by
$tree_reference in the resulting tree, and {book}
replaced by the associated Texinfo tree text element:
$tree = gdt('See {reference} in @cite{{book}}', "ca",
{'reference' => $tree_reference,
'book' => {'text' => $book_name}});
By default, gdt and gdt_string call translate_string to use a
gettext-like infrastructure to retrieve the translated strings, using the
texinfo_document domain. You can change the method used to retrieve the
translated strings by providing a $translate_string_method argument. If not
undef it should be a reference on a function that is called instead of
translate_string. The $object is passed as first argument of the
$translate_string_method, the other arguments are the same as
translate_string
arguments.
Same to gdt except that the $translation_context is not optional.
Calls gdt. This function is useful to mark strings with a
translation context for translation. This function is similar to pgettext
in the Gettext C API.
By default, in gdt, gdt_string and pgdt a string is translated with
translate_string.
The $string is a string to be translated. $lang is the language used for
the translation. The $translation_context is optional. If not undef
this is a translation context string for $string. It is the first argument
of pgettext in the C API of Gettext.
translate_string uses a gettext-like infrastructure to retrieve the
translated strings, using the texinfo_document domain.
Copyright 2010- Free Software Foundation, Inc. See the source file for all copyright years.
This library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version.
The Texinfo Perl module main purpose is to be used in texi2any to convert
Texinfo to other formats. There is no promise of API stability.
Includes miscellaneous methods such as as
insert_nodes_for_sectioning_commands that adds nodes for sectioning commands
without nodes and complete_tree_nodes_menus and
complete_tree_nodes_missing_menu that completes the node menus based on the
sectioning tree.
Methods for copying and modifying the Texinfo tree used for default conversion to output formats are in Texinfo::ManipulateTree.
No method is exported in the default case.
Add menu entries or whole menus for nodes associated with sections,
based on the sectioning tree. If the optional
$add_section_names_in_entries argument is set, a menu entry
name is added using the section name. This function should be
called after sectioning_structure.
Add whole menus for nodes associated with sections and without menu, based on the $document sectioning tree. If the optional $add_section_names_in_entries argument is set, a menu entry name is added using the section name. This function should be called after sectioning_structure.
This function adds empty @unnumbered and similar commands in a tree
to fill gaps in sectioning. This may be used, for example, when converting
from a format that can handle gaps in sectioning. $tree is the tree
root, which is modified by adding the new sectioning commands.
In the default case, the added sectioning commands headings are empty. It is possible to use instead the $commands_heading_tree Texinfo tree element.
If the sectioning commands are lowered or raised (with @raisesections,
@lowersection) the tree may be modified with @raisesections or
@lowersection added to some tree elements.
Insert nodes for sectioning commands without node in $document
tree.
menu_to_simple_menu transforms the tree of a menu tree element.
set_menus_to_simple_menu calls menu_to_simple_menu for all the
menus of the nodes in $nodes_list.
A simple menu has no menu_comment, menu_entry or menu_entry_description container anymore, their content are merged directly in the menu in preformatted container.
Note that this kind of tree is not supported by other codes, so this transformation should be avoided unless one knows exactly what to expect.
Protect hash (#) character at the beginning of line such that they would not be
considered as lines to be processed by the CPP processor. The $registrar
and $customization_information arguments are optional. If defined, the
$registrar argument should be a Texinfo::Report object in which the
errors and warnings encountered while parsing are registered. If defined,
$customization_information should give access to customization through
get_conf. If both $registrar and $customization_information are
defined they are used for error reporting in case an hash character could not
be protected because it appeared in a raw formatted environment (@tex,
@html...).
Modify $tree by converting reference @-commands to simple text using one of the arguments. This transformation can be used, for example, to remove reference @-command from constructed node names trees, as node names cannot contain reference @-command while there could be some in the tree used in input for the node name tree. The $document argument is optional. If given, the converted reference @-command is removed from the $document internal references list.
A $modified_tree is not systematically returned, if the $tree in argument is not replaced, undef may also be returned.
Regenerate the $document Top node master menu, replacing the first detailmenu in Top node menus or appending at the end of the Top node menu.
$use_sections is an optional argument. If set, sections associated with nodes are used as labels in the generated master menu.
Copyright 2010- Free Software Foundation, Inc. See the source file for all copyright years.
This library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version.
use Texinfo::Indices;
# $document is a parsed Texinfo::Document document.
my $indices_information = $document->indices_information();
my $merged_index_entries
= Texinfo::Indices::merge_indices($indices_information);
# $registrar is a Texinfo::Report object. $config is an object
# implementing the get_conf() method.
my $index_entries_sorted;
if ($sort_by_letter) {
$index_entries_sorted
= Texinfo::Indices::sort_indices_by_letter($document, $registrar,
$config);
} else {
$index_entries_sorted
= Texinfo::Indices::sort_indices_by_index($document, $registrar,
$config);
}
The Texinfo Perl module main purpose is to be used in texi2any to convert
Texinfo to other formats. There is no promise of API stability.
merge_indices may be used to merge indices. Document indices may be sorted
with sort_indices_by_index or sort_indices_by_letter. Other functions
deal with formatting of index entries as text or getting information on
index entry.
Note that, in general, the functions used to merge or sort indices should not be called directly, corresponding functions in Texinfo::Document already call the functions in this module, and, in addition, cache the result with the document. Furthermore, it should be even better to call converter functions, which call document functions.
No method is exported.
Return a string suitable as a sort string, for index entries.
$document_info is used by C code to retrieve the document data,
using the document_descriptor key. $document_info can be a
converter based on Texinfo::Convert::Converter, a Texinfo::Document
document, otherwise document_descriptor need, in general, to be
set up explicitely.
The tree element index entry processed is $index_entry_element,
and can be a @subentry. $main_entry is the main index entry
that can be used to gather information.
The $options are options used for Texinfo to text conversion for the generation of the sort string. If the sort string is supposed to be output, the $options are typically obtained from setup_index_entry_keys_formatting.
If $prefer_reference_element is set, prefer an untranslated element for the formatting as sort string.
Return the $index_entry leading text $text or textual command Texinfo
tree hash reference $command. Here textual commands means accent
commands, brace commands without arguments used for character and glyph
insertion and @U.
This method can in particular be used to format the leading letter
of an index entry using $command instead of the sort string set by
sort_indices_by_letter.
Returns a structure holding all the index entries by index name
with all the entries of merged indices merged with those of the indice
merged into. The $indices_information argument should be an hash reference
with indices information, it is described in details in
Texinfo::Document::indices_information.
The $merged_indices returned is a hash reference whose keys are the index names and values arrays of index entry structures described in details in Texinfo::Document index_entries.
In general, this method should not be called directly, instead
Texinfo::Document::merged_indices
should be called on a document, which calls merge_indices if needed and
associate the merged indices to the document.
Return options relevant for index keys sorting for conversion of Texinfo to text to be output.
sort_indices_by_letter sorts by index and letter, while
sort_indices_by_index sort all entries of an index together.
Indices are obtained from $document, and should have been merged
previously, in general by using
Texinfo::Document::merged_indices.
In both cases, a hash reference with index names as keys $index_entries_sorted
is returned.
By default, indices are sorted according to the Unicode Collation Algorithm defined in the Unicode Technical Standard #10, without language-specific collation tailoring. If $use_unicode_collation is set to 0, the sorting will not use the Unicode Collation Algorithm and simply sort according to the codepoints. If $locale_lang is set, the language is used for linguistic tailoring of the sorting, if possible.
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 letter key with the letter, and an entries key with an array reference of sorted index entries beginning with the letter. The letter is a character string suitable for sorting letters, but is not necessarily the best to use for output.
When simply sorting, the array of the sorted index entries is associated with the index name.
The $registrar argument can be set to a Texinfo::Report object.
Error reporting also requires Texinfo customization variables
information, which means an object implementing the get_conf method, a
converter (Getting and setting customization variables) or a document Getting customization options values registered in document) as $customization_information argument. If
the $registrar argument is not set, the object used to get customization
information is assumed to be a converter, and the error reporting uses
converters error messages reporting functions
(Registering error and warning messages).
In general, those methods should not be called directly, instead
Texinfo::Document::sorted_indices_by_index
or Texinfo::Document::sorted_indices_by_letter
should be called on a document. The Texinfo::Document functions call
sort_indices_by_index or sort_indices_by_letter if needed and associate
the sorted indices to the document.
Copyright 2010- Free Software Foundation, Inc. See the source file for all copyright years.
This library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version.
Texinfo::OutputUnits - setup and manage Texinfo document output units
use Texinfo::OutputUnits qw(split_by_node split_by_section split_pages
units_directions units_file_directions);
# $document is a parsed Texinfo::Document document.
# When customization variables information is needed, it is obtained
# from the $document by calling the get_conf() method.
my $identifier_target = $document->labels_information();
my $output_units;
if ($split_at_nodes) {
$output_units = split_by_node($document);
} else {
$output_units = split_by_section($document);
}
split_pages($output_units, $split);
units_directions($identifier_target, $output_units,
$document->get_conf('DEBUG'));
units_file_directions($output_units);
The Texinfo Perl module main purpose is to be used in texi2any to convert
Texinfo to other formats. There is no promise of API stability.
You can convert a Texinfo parsed document to an output format in a Converter code by first splitting the nodes and sectioning commands in units and then converting those units. We will call the main unit of output documents an output unit. Usually a node is associated with a following sectioning command, while a sectioning command is associated with a previous node; they both together make up the output unit. Either the node or the sectioning command is considered to be the main element component.
The module provides methods to setup output units associated with
node and sectioning commands of a Texinfo parsed document. With
split_by_node nodes are used as the main component for the separation of
output units, while with split_by_section the sectioning command elements
are used to separate output units. The first mode is typical of Info format,
while the second corresponds better to a traditional book. Note that the
result is different when there are unassociated sectioning commands or nodes,
in the usual case of each node being associated with a sectioning command and
each sectioning command being associated with a node, splitting by node or by
section does not make much difference as each output unit will consist of the
node and the associated section in both cases.
Output units are used for conversion to HTML and Info output formats. See
Texinfo::Convert::Converter::convert_output_unit
for more information on conversion of output units in Converters. Output units
are not relevant for all the formats, the Texinfo tree can also be converted
directly, see Texinfo::Convert::Converter::output_tree.
The output units may be further grouped in pages, which are not pages as
in book pages, but more like web pages, and hold series of output units.
The output units may have directions to other output units prepared
by units_directions. units_file_directions should also
set direction related to files, provided files are associated with
output units by the user.
No method is exported in the default case.
Output units are hash references created with the following keys:
typeThe type of the output unit. Set to unit for output units associated
with nodes and sectioning commands.
unit_commandMain node or sectioning command associated with the output unit.
unit_contentsThis array reference holds all the nodes and sectioning commands Texinfo tree
elements associated with the output unit (in order). The Texinfo tree nodes
and sectioning commands elements have an associated_unit key set that points
to the output unit.
tree_unit_directionsHash reference with next and prev pointing to the previous and the next output unit.
Call one of the following methods to create output units and associate them with nodes and sectioning command Texinfo tree elements:
Returns a reference array of output units where a node is associated with the following sectioning commands. Sectioning commands without nodes are also with the previous node, while nodes without sectioning commands are alone in their output units.
Each output unit unit_command key points to the node command associated with the output unit.
Similarly with split_by_node, returns an array of output units. This
time, lone nodes are associated with the previous sections and lone
sections makes up an output unit.
Output units unit_command keys point to the sectioning command associated with the output unit.
You can call split_pages to group together output units:
Add the first_in_page key to each output unit in the array reference argument $output_units, set to the first output unit in the group.
The first output unit in the group is based on the value of $split:
You can call the following methods to set output units directions:
The $identifier_target argument associates identifiers with target elements
and is generally obtained from a parsed document,
Texinfo::Document::labels_information.
Directions are set up for the output units in the array reference
$output_units given in argument. The corresponding hash is associated
with the directions key. In this hash, keys correspond to directions
while values are output units.
$print_debug is optional. If set, some debugging information is printed.
The following directions are set up:
The output unit itself.
Unit next.
Previous output unit.
Following node output unit in reading order. It is the next node unit, or the first in menu or the next of the up node.
Preceding node output unit.
The up, next and previous node output unit.
The up, next and previous section output unit.
For top level output units, the previous top level output unit. For other output units the up top level unit. For example, for a chapter output unit it is the previous chapter output unit, for a subsection output unit it is the chapter output unit that contains the subsection.
The next top level output unit.
In the directions reference described above for units_directions,
sets the PrevFile and NextFile directions to the output units in
previous and following files.
It also sets FirstInFile* directions for all the output units by using the directions of the first output unit in file. So, for example, FirstInFileNodeNext is the output unit associated with the next node of the first output unit node in the file for each output unit in the file.
The API for association of pages/output units to files is not defined yet.
Texinfo manual, Texinfo::Document, Texinfo::Convert::Converter.
Copyright 2010- Free Software Foundation, Inc. See the source file for all copyright years.
This library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version.
Texinfo::Convert::Texinfo - Convert a Texinfo tree to Texinfo code
use Texinfo::Convert::Texinfo qw(convert_to_texinfo); my $texinfo_text = convert_to_texinfo($tree);
The Texinfo Perl module main purpose is to be used in texi2any to convert
Texinfo to other formats. There is no promise of API stability.
Texinfo::Convert::Texinfo converts a Texinfo tree (described in
Texinfo::Parser) 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 @value are expanded, and some invalid code is discarded.
Copyright 2010- Free Software Foundation, Inc. See the source file for all copyright years.
This library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version.
Texinfo::Convert::Utils - miscellaneous functions usable in all converters
use Texinfo::Convert::Utils;
my $today_tree = Texinfo::Convert::Utils::expand_today($converter);
my $verbatiminclude_tree
= Texinfo::Convert::Utils::expand_verbatiminclude($converter,
$verbatiminclude);
The Texinfo Perl module main purpose is to be used in texi2any to convert
Texinfo to other formats. There is no promise of API stability.
Miscellaneous methods that may be useful for backends converting Texinfo trees. This module contains the methods that can be used in converters which do not inherit from Texinfo::Convert::Converter.
No method is exported in the default case.
Most methods takes a $converter as argument, in some cases optionally, to get some information, see Getting and setting customization variables and use methods for error reporting, see Texinfo::Convert::Converter and Texinfo::Report, and for strings translations, see Texinfo::Translations.
Even when the caller does not inherit from Texinfo::Convert::Converter, it could implement the required interfaces and could also have a converter available in some cases, to call the functions which require a converter.
The $converter argument may be undef. $heading_element is a heading command tree element. $heading_text is the already formatted heading text. if the $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 $converter is not defined, the resulting string won’t be translated.
$element should be a @def* Texinfo tree element. The
$category, $class, $type, $name are elements corresponding
to the definition @-command line. Texinfo elements
on the @-command line corresponding to arguments in the function
definition are returned in the $arguments element.
Arguments correspond to text following the other elements
on the @-command line. If there is no argument, $arguments
will be undef.
The $converter argument may be undef. $def_line is a
def_line Texinfo tree container. This function
returns a Texinfo tree corresponding to the category of the
$def_line taking the class into account, if there is one.
If $converter is not defined, the resulting string won’t be
translated.
Encode $character_string_name in the same way as other file names are
encoded in converters, based on customization variables, and possibly
on the input file encoding. Return the encoded name and the encoding
used to encode the name. The encoded_input_file_name and
encoded_output_file_name functions use different customization variables to
determine the encoding. The $converter argument is not optional
and is used both to access to customization variables and to access to parser
information.
The $input_file_encoding argument is optional. If set, it is used for the input file encoding. It is useful if there is more precise information on the input file encoding where the file name appeared.
Expand today’s date, as a Texinfo tree with translations. The $converter argument is not optional and is used both to retrieve customization information and to translate strings.
The $converter argument is required and is used to output error messages and
retrieve customization information Getting and setting customization variables. $verbatiminclude is a @verbatiminclude
tree element. This function returns a @verbatim tree elements after finding
the included file and reading it.
$element should be an accent command Texinfo tree element. Returns
an element containing the innermost accent @-command contents,
normally a text element with one or two letter, and an array reference
containing the accent commands nested in $element (including
$element). If there is no argument at all for the accent command,
$contents_element is undef.
Return an heading element found in the $element contents if it
appears before contents that could be formatted. $expanded_format_raw
is a hash reference with raw output formats (html, docbook, xml...) as
keys, associated value should be set for expanded raw output formats.
$do_not_ignore_contents is optional. If set, @contents and
@shortcontents are considered to be formatted.
$do_not_ignore_index_entries is optional. If set, index entries
are considered to be formatted.
Only heading elements corresponding to @heading, @subheading and similar
@-commands that are not associated to nodes in general are found, not
sectioning commands.
Copyright 2010- Free Software Foundation, Inc. See the source file for all copyright years.
This library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version.
Texinfo::Convert::Unicode - Representation as Unicode characters
use Texinfo::Convert::Unicode qw(unicode_accent encoded_accents
unicode_text);
use Texinfo::Convert::Text qw(convert_to_text);
my ($contents_element, $stack)
= Texinfo::Convert::Utils::find_innermost_accent_contents($accent);
my $formatted_accents = encoded_accents ($converter,
convert_to_text($contents_element), $stack, $encoding,
\&Texinfo::Text::ascii_accent_fallback);
my $accent_text = unicode_accent('e', $accent_command);
The Texinfo Perl module main purpose is to be used in texi2any to convert
Texinfo to other formats. There is no promise of API stability.
Texinfo::Convert::Unicode provides methods dealing with Unicode
representation and conversion of Unicode code points, to be used in Texinfo
converters.
When an encoding supported in Texinfo is given as argument of a method of the module, the accented letters or characters returned by the method should only be represented by Unicode code points if it is known that Perl should manage to convert the Unicode code points to encoded characters in the encoding character set. Note that the actual conversion is done by Perl, not by the module.
Return the Unicode representation of a command with brace and no argument
$command_name (like @bullet{}, @aa{} or @guilsinglleft{}),
or undef if the Unicode representation cannot be converted to encoding
$encoding.
Check that it is possible to output actual UTF-8 binary bytes
corresponding to the Unicode code point string $arg (such as
201D). Perl gives a warning and will not output UTF-8 for
Unicode non-characters such as U+10FFFF. If the optional
$output_debug argument is set, a debugging output warning
is emitted if the test of the conversion failed.
Returns 1 if the conversion is possible and can be attempted,
0 otherwise.
$encoding is the encoding the accented characters should be encoded to. If
$encoding not set, $result is set to undef. Nested accents and
their content are passed with $text and $stack. $text is the text
appearing within nested accent commands. $stack is an array reference
holding the nested accents texinfo tree elements. In general, $text is
the formatted contents and $stack the stack returned by
Texinfo::Convert::Utils::find_innermost_accent_contents. The function
tries to convert as much as possible the accents to $encoding starting from the
innermost accent.
$format_accent is a function reference that is used to format the accent
commands if there is no encoded character available at some point of the
conversion of the $stack. $converter is a converter object optionaly
used by $format_accent. It may be undef if there is no need of
converter object in $format_accent.
The $set_case argument is optional. If $set_case is positive, the result is upper-cased, while if it is negative, the result is lower-cased.
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).
$text is the text appearing within an accent command. $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.
Return true if the $unicode_point will be encoded in the encoding
$encoding. The $unicode_point should be specified as a four letter
string describing an hexadecimal number with letters in upper case
(such as 201D). Tables are used to determine if the $unicode_point
will be encoded, when the encoding does not cover the whole Unicode range.
If the encoding is not supported in Texinfo, the result will always be false.
Return $text with dashes and quotes corresponding, for example to --- or
', represented as Unicode code points. If $in_code is set, the text is
considered to be in code style.
Copyright 2010- Free Software Foundation, Inc. See the source file for all copyright years.
This library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version.
Texinfo::Convert::NodeNameNormalization - Normalize and transliterate Texinfo trees
use Texinfo::Convert::NodeNameNormalization qw(convert_to_identifier
normalize_transliterate_texinfo);
my $normalized = convert_to_identifier($node_element->{'args'}->[0]);
my $file_name
= normalize_transliterate_texinfo($section_element->{'args'}->[0]);
The Texinfo Perl module main purpose is to be used in texi2any to convert
Texinfo to other formats. There is no promise of API stability.
Texinfo::Convert::NodeNameNormalization allows to normalize node names
with convert_to_normalized and convert_to_identifier.
convert_to_identifier follows the specification described in the Texinfo
manual HTML Xref node. This is useful whenever one want a unique identifier
for Texinfo content, which is only composed of letter, digits, - and _,
for example for @node, @float and @anchor names normalization.
convert_to_normalized leaves out the step of protecting characters.
It is also possible to transliterate non-ASCII letters, instead of mangling
them, with normalize_transliterate_texinfo, losing the uniqueness feature of
normalized node names.
Another method, transliterate_protect_file_name transliterates non-ASCII
letters and protect characters that should not appear on file names.
The Texinfo $tree is returned as a string, with @-commands and spaces normalized as described in the Texinfo manual HTML Xref node. ASCII 7-bit characters other than spaces and non-ASCII characters are left as is in the resulting string.
The Texinfo $tree is returned as a string, normalized as described in the Texinfo manual HTML Xref node.
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
@node or block commands.
The Texinfo $tree is returned as a string, with non-ASCII letters
transliterated as ASCII, but otherwise similar with convert_to_identifier
output. If the optional $no_unidecode argument is set, Text::Unidecode
is not used for characters whose transliteration is not built-in.
The Texinfo $tree is returned as a string, with non-ASCII letters
transliterated as ASCII. If the optional $no_unidecode argument is set,
Text::Unidecode is not used for characters whose transliteration is not
built-in.
The string $string is returned with non-ASCII letters transliterated as
ASCII, and ASCII characters not safe in file names protected as in
node normalization. If the optional $no_unidecode argument is set,
Text::Unidecode is not used for characters whose transliteration is not
built-in.
Copyright 2010- Free Software Foundation, Inc. See the source file for all copyright years.
This library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version.
use Texinfo::Convert::Text qw(convert_to_text text_accents);
my $result = convert_to_text($tree);
my $accents_text = text_accents($accents, 'utf-8');
# using text conversion options set in $converter derived from
# Texinfo::Convert::Converter
my $text_options = $converter->{'convert_text_options'};
set_options_code($text_options);
my $result_with_converter = convert_to_text($tree, $text_options);
reset_options_code($text_options);
The Texinfo Perl module main purpose is to be used in texi2any to convert
Texinfo to other formats. There is no promise of API stability.
Texinfo::Convert::Text is a simple backend that converts a Texinfo tree
to simple text. It is used in converters, especially for file names.
The conversion is very simple, and, in the default case, cannot handle
error handling nor some output strings translation.
Converters derived from Texinfo::Convert::Converter should have conversion
text options preset associated to the convert_text_options key.
The main function is convert_to_text. The text conversion options
can be modified with the set_* functions before calling convert_to_text,
and reset afterwards with the corresponding reset_* functions.
Convert a Texinfo tree to simple text. $text_options is a hash reference of options. The converter is very simple, and has almost no internal state besides the options. It cannot handle as is output strings translation or error storing.
If the converter option is set in $text_options, some additional features may be available for the conversion of some @-commands, like output strings translation or error reporting.
The NUMBER_SECTIONS, ASCII_GLYPH and TEST options corresponding to
customization variables may be set in $text_options. The following options
may also be set:
If set, the value is considered to be the encoding name texinfo accented
letters should be converted to. This option being set corresponds to the
--enable-encoding option, or the ENABLE_ENCODING customization
variable for Info and Plaintext and for some conversion to text in other
formats. For file names in HTML and LaTeX, and for DocBook or Texinfo XML,
this variable should in general be set unless the output encoding is US-ASCII.
If positive, the text is upper-cased, if negative, the text is lower-cased.
A somehow internal option to convert to text more suitable for alphabetical sorting rather than presentation.
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. See also Texinfo::Convert::Converter.
A reference on a hash. The keys should be format names (like html,
tex), and if the corresponding value is set, the format is expanded.
$text is the text appearing within an accent command. $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. The $converter argument is ignored, but needed for this function to be in argument of functions that need a fallback for accents conversion.
set_options_code sets $text_options to be in code style.
(mostly --, ---, '' and `` are kept as is). reset_options_code
undo the effect of set_options_code.
reset_options_code should always be called after set_options_code.
set_options_encoding sets enabled_encoding in $text_options
to $encoding. set_options_encoding_if_not_ascii sets enabled_encoding
in $text_options based on customization options associated to
$customization_information. In that case, enabled_encoding is set unless
the output encoding is US-ASCII even if ENABLE_ENCODING is not set.
reset_options_encoding undo the effect of set_options_encoding and
set_options_encoding_if_not_ascii and should always be called after these
functions.
$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 $encoding is set, the formatted text is converted to this encoding as much as possible instead of being converted as simple ASCII. If $set_case is positive, the result is meant to be upper-cased, if it is negative, the result is to be lower-cased.
Copyright 2010- Free Software Foundation, Inc. See the source file for all copyright years.
This library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version.
Texinfo::Convert::Converter - Parent class for Texinfo tree converters
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;
...
}
sub conversion_initialization($;$) {
my $self = shift;
my $document = shift;
if ($document) {
$self->set_document($document);
}
$self->{'document_context'} = [{}];
...
}
sub conversion_finalization($) {
my $self = shift;
}
sub convert_tree($$) {
...
}
sub convert($$) {
my $self = shift;
my $document = shift;
$self->conversion_initialization($document);
...
$self->conversion_finalization();
}
sub output($$) {
my $self = shift;
my $document = shift;
$self->conversion_initialization($document);
...
$self->conversion_finalization();
...
}
# end of Texinfo::Convert::MyConverter
my $converter = Texinfo::Convert::MyConverter->converter();
$converter->output($texinfo_parsed_document);
The Texinfo Perl module main purpose is to be used in texi2any to convert
Texinfo to other formats. There is no promise of API stability.
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 for
conversion. In general convert_tree, output and convert should be
defined.
The convert_tree method is mandatory and should convert portions of Texinfo
tree. Takes a $converter and Texinfo tree $tree in arguments. Returns
the converted output.
The output method is used by converters as entry point for conversion
to a file with headers and so on. This method should be implemented by
converters. output is called from texi2any. output takes a
$converter and a Texinfo parsed document Texinfo::Document $document
as arguments.
Texinfo::Convert::Converter implements a generic output_tree
function suitable for conversion of the Texinfo tree, with the conversion
result output into a file or returned from the function. output_tree
takes a $converter and a Texinfo parsed document Texinfo::Document
$document as arguments. In a converter that uses output_tree,
output is in general defined as:
sub output($$) {
my $self = shift;
my $document = shift;
return $self->output_tree($document);
}
In general, output and output_tree output to files and return undef.
When the output file name is an empty string, however, it is customary
for output and output_tree to return the output as a character string
instead. The output file name is obtained in output_tree through a call to
determine_files_and_directory.
In general determine_files_and_directory is also used when output_tree is not used.
Entry point for the conversion of a Texinfo parsed document to an output
format, without the headers usually done when outputting to a file. convert
takes a $converter and a Texinfo parsed document Texinfo::Document
$document as arguments. Returns the output as a character string. Not
mandatory, not called from texi2any, but used in the texi2any test suite.
Can be used for the conversion of output units by converters.
convert_output_unit takes a $converter and an output unit
$output_unit as argument. The implementation of
convert_output_unit of Texinfo::Convert::Converter could be suitable in
many cases. Output units are typically returned by Texinfo::OutputUnits
split_by_section
or Texinfo::OutputUnits split_by_node.
Two methods, converter_defaults and converter_initialize are
used for initialization, to give information
to Texinfo::Convert::Converter and can be redefined in converters.
To help with the conversion, the set_document function associates a
Texinfo::Document to a converter. Other methods are called in default
implementations to be redefined to call code at specific moments of the
conversion. conversion_initialization, for instance, is generally
called at the beginning of output, output_tree and convert.
conversion_finalization is generally called at the end of output_tree,
output and convert. output_tree also calls the
conversion_output_begin method before the Texinfo tree conversion to obtain
the beginning of the output. output_tree calls the
conversion_output_end method after the Texinfo tree conversion to obtain
the end of the output.
For output formats based on output units conversion, the
Texinfo::Convert::Plaintext output method could be a good starting
point. HTML and Info output are also based on output units conversion.
Output units are not relevant for all the formats, the Texinfo tree can also be
converted directly, in general by using output_tree. This is how the other
Converters are implemented.
Existing backends based on output_tree may be used as examples.
Texinfo::Convert::Texinfo together with Texinfo::Convert::PlainTexinfo,
as well as Texinfo::Convert::TextContent are trivial examples.
Texinfo::Convert::Text is less trivial, although still simple, while
Texinfo::Convert::DocBook is a real converter that is also not too complex.
The documentation of Texinfo::Common, Texinfo::OutputUnits, Texinfo::Convert::Unicode and Texinfo::Convert::Text describes modules or additional function that may be useful for backends, while the parsed Texinfo tree is described in Texinfo::Parser.
A module subclassing Texinfo::Convert::Converter is created by calling
the converter method that should be inherited from
Texinfo::Convert::Converter.
The $options hash reference holds options for the converter. These options should be Texinfo customization options. The customization options are described in the Texinfo manual or in the customization API manual.
The converter function returns a converter object (a blessed hash
reference) after checking the options and performing some initializations.
To help with the initializations, the modules subclassing Texinfo::Convert::Converter
can define two methods:
Returns a reference on a hash with defaults for the converter module
customization options or undef. The $options hash reference holds
options for the converter. This method is called through a converter by converter, but it may also
be called through a converter module class.
This method is called at the end of the Texinfo::Convert::Converter
converter initialization.
For conversion with output and convert a document to convert should be
associated to the converter, in general the document passed in argument of
output or convert. The set_document function associates a
Texinfo::Document to a converter. This function is used in the default
implementations.
Associate $document to $converter. Also set the encoding related customization
options based on $converter customization information and information on
document encoding, and setup converter hash convert_text_options value that
can be used to call Texinfo::Convert::Text::convert_to_text.
The conversion_initialization, conversion_finalization,
conversion_output_begin and conversion_output_end can be redefined to
call code at diverse moments:
conversion_initialization is called at the beginning of output_tree and
of the default implementations of the output and convert functions.
conversion_finalization is called at the end of output_tree and of
the default output and convert methods implementations.
These functions should be redefined to have code run before a document
conversion and after the document conversion.
In the default case, conversion_initialization calls
set_document to associate the Texinfo::Document
document passed in argument to the converter. A subclass converter redefining
conversion_initialization should in general call set_document in the
redefined function too to associate the converted document to the converter.
conversion_output_begin returned string $beginning is output
by the output_tree calling method before the Texinfo tree conversion.
The $output_file argument is the output file path.
If $output_file is an empty string, it means that text will be returned by
the converter instead of being written to an output file.
$output_filename is, in general, the file name portion of $output_file
(without directory) but can also be set based on @setfilename.
conversion_output_end returned string $end is output
by the output_tree calling method after the Texinfo tree conversion.
The default methods implementations return an empty string.
Calling conversion_initialization and, if needed, conversion_finalization
in redefined output and convert methods is not mandated, but it is
recommended to have similar converter codes. In subclassed converters that do
not need to define conversion_initialization, calling the default
Texinfo::Convert::Converter conversion_initialization implementation is
also recommended to avoid having to explictely call set_document.
If conversion_initialization is defined in a converter subclass it is
recommended to call set_document at the very beginning of the function to
have the document associated to the converter.
Texinfo::Convert::Converter implements a simple interface to
set and retrieve Texinfo customization variables. Helper
functions from diverse Texinfo modules needing customization
information expect an object implementing get_conf and/or
set_conf. The converter itself can therefore be used in
such cases.
Customization variables are typically setup when
initializing a converter with converter
and completed by Texinfo informative @-commands tree element values,
for commands such as @frenchspacing or @footnotestyle.
Set the Texinfo customization option $variable_name to $variable_value. This should rarely be used, but the purpose of this method is to be able to revert a customization that is always wrong for a given output format, like the splitting for example.
Returns the value of the Texinfo customization variable $variable_name.
Set the Texinfo customization option $variable_name to $variable_value if not set as a converter option. Returns false if the customization options was not set.
Texinfo::Convert::Converter implements an interface to register error and
warning messages in the converter, that can be retrieved later on, in general
to be given to Texinfo::Report::add_formatted_message. Underneath,
Texinfo::Report is used to setup the messages data structure.
Register a warning or an error. The $text is the text of the error or warning.
The $continuation optional arguments, if true, conveys that the line is a continuation line of a message.
Register a warning or an error with a line information. The $text is the
text of the error or warning. The $error_location_info argument holds the
information on the error or warning location. The $error_location_info
reference on hash may be obtained from Texinfo elements source_info keys.
It may also be setup to point to a file name, using the file_name key and to
a line number, using the line_nr key. The file_name key value should be
a binary string.
The $continuation optional arguments, if true, conveys that the line is a continuation line of a message.
Return a reference on an array containing the error or warning messages registered in the converter. Error and warning messages are hash references as described in Texinfo::Report::errors and can be used in input of Texinfo::Report::add_formatted_message.
Texinfo::Convert::Converter provides wrappers around
Texinfo::Translations methods that sets the language to the current
documentlanguage.
The cdt and pcdt methods are used to translate strings to be output in
converted documents, and return a Texinfo tree. The cdt_string is similar
but returns a simple string, for already converted strings.
The $string is a string to be translated. With cdt
the function returns a Texinfo tree, as the string is interpreted
as Texinfo code after translation. With cdt_string a string
is returned.
$replaced_substrings is an optional hash reference specifying
some substitution to be done after the translation. The key of the
$replaced_substrings hash reference identifies what is to be substituted.
In the string to be translated word in brace matching keys of
$replaced_substrings are replaced.
For cdt, the value is a Texinfo tree that is substituted in the
resulting Texinfo tree. For cdt_string, the value is a string that
is replaced in the resulting string.
The $translation_context is optional. If not undef this is a translation
context string for $string. It is the first argument of pgettext
in the C API of Gettext.
Same to cdt except that the $translation_context is not optional.
This function is useful to mark strings with a translation context for
translation. This function is similar to pgettext in the Gettext C API.
You should call the following methods to sort indices in conversion:
get_converter_indices_sorted_by_letter returns the indices sorted by index
and letter, while get_converter_indices_sorted_by_index returns the indices
with all entries of an index together.
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 letter key with the letter, and an entries key with an array reference of sorted index entries beginning with the letter. The letter is a character string suitable for sorting letters, but is not necessarily the best to use for output.
When simply sorting, the array of the sorted index entries is associated with the index name.
The functions call Texinfo::Document::sorted_indices_by_letter
or Texinfo::Document::sorted_indices_by_index
with arguments based on USE_UNICODE_COLLATION, COLLATION_LANGUAGE and
DOCUMENTLANGUAGE_COLLATION customization options, and, if relevant, current
@documentlanguage.
Some Texinfo::Convert::Converter methods target conversion to XML.
Most methods take a $converter as argument to get some
information and use methods for error reporting.
Replace quotation marks and hyphens used to represent dash in Texinfo text with numeric XML entities.
Protect special XML characters (&, <, >, ") of $text.
Returns an XML comment for $text.
$text is the text appearing within an accent command. $accent_command should be a Texinfo tree element corresponding to an accent command taking an argument. $in_upper_case is optional, and, if set, the text is put in upper case. The function returns the accented letter as XML named entity if possible, falling back to numeric entities if there is no named entity and returns the argument as last resort. $use_numeric_entities is optional. If set, numerical entities are used instead of named entities if possible.
$accent_command is an accent command, which may have other accent commands nested. If $in_upper_case is set, the result should be upper cased. The function returns the accents formatted as XML.
$accent_command_name is the name of an accent command. $text is the text
appearing within the accent command. Returns the accented letter as XML numeric
entity, or undef is there is no such entity.
The module provides methods that may be useful for converter.
Most methods take a $converter as argument to get some
information and use methods for error reporting, see Registering error and
warning messages. Also to translate strings, see Translations in output
documents. For useful methods that need a converter optionally and can be
used in converters that do not inherit from Texinfo::Convert::Converter, see
Texinfo::Convert::Utils.
$entry is a Texinfo tree index entry element. The function sets up
an array with the @subentry contents. The result is returned as
contents in the $contents_element element, or undef if there is no
such content. $separator is an optional separator argument used, if given,
instead of the default: a comma followed by a space.
$accent_command is an accent command, which may have other accent commands nested. The function returns the accents formatted either as encoded letters if $output_encoded_characters is set, or formatted using \&format_accents. If $in_upper_case is set, the result should be uppercased.
Create destination directory $destination_directory_path. $destination_directory_path should be a binary string, while $destination_directory_name should be a character string, that can be used in error messages. $succeeded is true if the creation was successful or uneeded, false otherwise.
Determine output file and directory, as well as names related to files. The
result depends on the presence of @setfilename, on the Texinfo input file
name, and on customization options such as OUTPUT, SUBDIR or SPLIT,
as described in the Texinfo manual. If $output_format is defined and not an
empty string, _$output_format is prepended to the default directory name.
$output_file is mainly relevant when not split and should be used as the
output file name. In general, if not split and $output_file is an empty
string, it means that text should be returned by the converter instead of being
written to an output file. This is used in the test suite.
$destination_directory is either the directory $output_file is in, or if
split, the directory where the files should be created. $output_filename
is, in general, the file name portion of $output_file (without directory)
but can also be set based on @setfilename, in particular when
$output_file is an empty string. $document_name is $output_filename
without extension. $input_basefile is based on the input Texinfo file name,
with the file name portion only (without directory).
The strings returned are text strings.
Encode $character_string_name in the same way as other file names are
encoded in the converter, based on customization variables, and possibly
on the input file encoding. Return the encoded name and the encoding
used to encode the name. The encoded_input_file_name and
encoded_output_file_name functions use different customization variables to
determine the encoding.
The $input_file_encoding argument is optional. If set, it is used for the input file encoding. It is useful if there is more precise information on the input file encoding where the file name appeared.
Note that encoded_output_file_name is a wrapper around the
function with the same name in Texinfo::Convert::Utils::encoded_output_file_name,
and encoded_input_file_name is a wrapper around the
function with the same name in Texinfo::Convert::Utils::encoded_input_file_name.
$float is a Texinfo tree @float element. This function
returns the caption element that should be used for the float formatting
and the $prepended Texinfo tree combining the type and label
of the float.
$float is a Texinfo tree @float element. This function
returns the type and number of the float as a Texinfo tree with
translations.
Format comment at end of line or return the end of line associated with the element. In many cases, converters ignore comments and output is better formatted with new lines added independently of the presence of newline or comment in the initial Texinfo line, so most converters are better off not using this method.
Returns the normalized file name corresponding to the $normalized node name and to the $label_element node name element contents.
Returns a normalized name $normalized_name corresponding to a sectioning command tree element $element, expanding the command argument using transliteration and characters protection. Also returns $filename the corresponding filename based on $normalized_name taking into account additional constraint on file names and adding a file extension.
Show a bug message using $message text. Use information on $element tree element if given in argument.
Set the Texinfo customization options for @-commands. $selected_commands is an array reference containing the @-commands set. $commands_location specifies where in the document the value should be taken from. The possibilities are:
Set to the values before document conversion, from defaults and command-line.
Set to the last value for the command.
Set sequentially to the values in the Texinfo preamble.
Set to the first value of the command if the first command is not in the Texinfo preamble, else set as with preamble, sequentially to the values in the Texinfo preamble.
Notice that the only effect of this function is to set a customization variable value, no @-command side effects are run, no associated customization variables are set.
For more information on the function used to set the value for each of the command, see
Texinfo::Common set_global_document_command.
$element should be an @item or @itemx tree element.
Returns a tree in which the @-command in argument of @*table
of the $element has been applied to the $element line argument,
or undef.
Returns a file name for the Top node file using either TOP_FILE
customization value, or EXTENSION customization value and $document_name.
Finally, there is:
At this level, the method just returns undef. It is used in the HTML
output, following the --internal-links option of texi2any
specification.
Texinfo::Common, Texinfo::Convert::Unicode, Texinfo::Report, Texinfo::Translations, Texinfo::Convert::Utils and Texinfo::Parser.
Copyright 2011- Free Software Foundation, Inc. See the source file for all copyright years.
This library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version.
my $converter
= Texinfo::Convert::Info->converter({'NUMBER_SECTIONS' => 0});
$converter->output($document);
$converter->convert($document);
$converter->convert_tree($tree);
The Texinfo Perl module main purpose is to be used in texi2any to convert
Texinfo to other formats. There is no promise of API stability.
Initialize converter from Texinfo to Info.
The $options hash reference holds Texinfo customization options for the converter. These options should be Texinfo customization options that can be passed to the converter. Most of the customization options are described in the Texinfo manual or in the customization API manual. Those customization options, when appropriate, override the document content.
See Texinfo::Convert::Converter for more information.
Convert a Texinfo parsed document $document and output the result in files as described in the Texinfo manual.
Convert a Texinfo parsed document $document and return the resulting output.
Convert a Texinfo tree portion $tree and return the resulting
output. This function does not try to output a full document but only
portions. For a full document use convert.
In general, this function should be called after the converter has been
associated to a document by a call to output or convert.
Copyright 2010- Free Software Foundation, Inc. See the source file for all copyright years.
This library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version.
my $converter
= Texinfo::Convert::HTML->converter({'NUMBER_SECTIONS' => 0});
$converter->output($document);
$converter->convert($document);
$converter->convert_tree($tree);
$converter->output_internal_links(); # HTML only
The Texinfo Perl module main purpose is to be used in texi2any to convert
Texinfo to other formats. There is no promise of API stability.
Initialize converter from Texinfo to HTML.
The $options hash reference holds Texinfo customization options for the converter. These options should be Texinfo customization options that can be passed to the converter. Most of the customization options are described in the Texinfo manual or in the customization API manual. Those customization options, when appropriate, override the document content.
See Texinfo::Convert::Converter for more information.
Convert a Texinfo parsed document $document and output the result in files as described in the Texinfo manual.
Convert a Texinfo parsed document $document and return the resulting output.
Convert a Texinfo tree portion $tree and return the resulting
output. This function does not try to output a full document but only
portions. For a full document use convert.
In general, this function should be called after the converter has been
associated to a document by a call to output or convert.
Returns text representing the links in the document. The format should
follow the --internal-links option of the texi2any
specification. This is only supported in (and relevant for) HTML.
Copyright 2010- Free Software Foundation, Inc. See the source file for all copyright years.
This library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version.
my $converter
= Texinfo::Convert::DocBook->converter({'NUMBER_SECTIONS' => 0});
$converter->output($document);
$converter->convert($document);
$converter->convert_tree($tree);
The Texinfo Perl module main purpose is to be used in texi2any to convert
Texinfo to other formats. There is no promise of API stability.
Texinfo::Convert::DocBook converts a Texinfo tree to DocBook.
Initialize converter from Texinfo to DocBook.
The $options hash reference holds Texinfo customization options for the converter. These options should be Texinfo customization options that can be passed to the converter. Most of the customization options are described in the Texinfo manual or in the customization API manual. Those customization options, when appropriate, override the document content.
See Texinfo::Convert::Converter for more information.
Convert a Texinfo parsed document $document and output the result in files as described in the Texinfo manual.
Convert a Texinfo parsed document $document and return the resulting output.
Convert a Texinfo tree portion $tree and return the resulting
output. This function does not try to output a full document but only
portions. For a full document use convert.
In general, this function should be called after the converter has been
associated to a document by a call to output or convert.
Copyright 2010- Free Software Foundation, Inc. See the source file for all copyright years.
This library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version.
Texinfo::Convert::TexinfoMarkup - Convert Texinfo tree to element and attribute markup
package Texinfo::Convert::TexinfoMyMarkup;
use Texinfo::Convert::TexinfoMarkup;
@ISA = qw(Texinfo::Convert::TexinfoMarkup);
sub converter_defaults ($$) {
return %myconverter_defaults;
}
sub txi_markup_protect_text($$)
{
my $self = shift;
....
}
The Texinfo Perl module main purpose is to be used in texi2any to convert
Texinfo to other formats. There is no promise of API stability.
Texinfo::Convert::TexinfoMarkup converts a Texinfo tree to the Texinfo
Markup Language which is based on nested elements with attributes, similar
to XML. All the information present in the Texinfo tree, after
expansion of @macro, @value and inclusion of include files is
kept. Texinfo::Convert::TexinfoMarkup is an abstract class, to be used as a
super class for modules implementing specific markup formatting functions
called by Texinfo::Convert::TexinfoMarkup.
The Texinfo Markup Language elements and attributes are not documented,
but the Texinfo XML output by the Texinfo::Convert::TexinfoXML subclass
(Texinfo::Convert::TexinfoXML) is a straightforward formatting as XML,
and is described by the Texinfo DTD. Therefore the Texinfo DTD can be
used as a description of the structure of both Texinfo XML and of the
more abstract Texinfo Markup Language.
The following methods should be implemented by the modules inheriting
from Texinfo::Convert::TexinfoMarkup:
Format the $atom symbol string in a simpler way than with an element. For example in XML the formatting of the symbol is achieved with an entity.
Format $comment_string as a comment.
Called to format the Texinfo tree $element text, which is a
reference on a hash. The $element text is in the text key.
The type key value may also be set to distinguish the type of text
(Types for text elements).
Texinfo tree elements are described in details in TEXINFO TREE.
txi_markup_element is called for the formatting of empty elements. Otherwise,
txi_markup_open_element is called when an element is opened, and
txi_markup_close_element is called when an element is closed.
$format_element is the element name, $attributes is a reference on an
array containing references on arrays of pairs, one pair for each attribute, with
the attribute name as the first item of the pair and the attribute text as the
second item of the pair.
Called to format a header at the beginning of output files.
Protect special character in text for text fragments out of text
Texinfo tree elements. For example, for spaces at end of line that
are ignorable in most output formats, for @set or @macro
arguments.
A method is available for subclasses to gather information on the formatting state:
Return 1 if in a context where spacing should be kept
and --- or '' left as is, for example in @code, @example.
Texinfo::Convert::Converter. Texinfo::Convert::TexinfoXML. The
Texinfo::Convert::TexinfoSXML is another subclass, which outputs
SXML. It is not much documented.
Copyright 2010- Free Software Foundation, Inc. See the source file for all copyright years.
This library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version.
Texinfo::Convert::TexinfoXML - Convert Texinfo tree to TexinfoXML
my $converter
= Texinfo::Convert::TexinfoXML->converter({'NUMBER_SECTIONS' => 0});
$converter->output($document);
$converter->convert($document);
$converter->convert_tree($tree);
The Texinfo Perl module main purpose is to be used in texi2any to convert
Texinfo to other formats. There is no promise of API stability.
Texinfo::Convert::TexinfoXML converts a Texinfo tree to TexinfoXML.
Initialize converter from Texinfo to TexinfoXML.
The $options hash reference holds Texinfo customization options for the converter. These options should be Texinfo customization options that can be passed to the converter. Most of the customization options are described in the Texinfo manual or in the customization API manual. Those customization options, when appropriate, override the document content.
See Texinfo::Convert::Converter for more information.
Convert a Texinfo parsed document $document and output the result in files as described in the Texinfo manual.
Convert a Texinfo parsed document $document and return the resulting output.
Convert a Texinfo tree portion $tree and return the resulting
output. This function does not try to output a full document but only
portions. For a full document use convert.
In general, this function should be called after the converter has been
associated to a document by a call to output or convert.
Copyright 2010- Free Software Foundation, Inc. See the source file for all copyright years.
This library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version.
Texinfo::Convert::Plaintext - Convert Texinfo tree to Plaintext
my $converter
= Texinfo::Convert::Plaintext->converter({'NUMBER_SECTIONS' => 0});
$converter->output($document);
$converter->convert($document);
$converter->convert_tree($tree);
The Texinfo Perl module main purpose is to be used in texi2any to convert
Texinfo to other formats. There is no promise of API stability.
Texinfo::Convert::Plaintext converts a Texinfo tree to Plaintext.
Initialize converter from Texinfo to Plaintext.
The $options hash reference holds Texinfo customization options for the converter. These options should be Texinfo customization options that can be passed to the converter. Most of the customization options are described in the Texinfo manual or in the customization API manual. Those customization options, when appropriate, override the document content.
See Texinfo::Convert::Converter for more information.
Convert a Texinfo parsed document $document and output the result in files as described in the Texinfo manual.
Convert a Texinfo parsed document $document and return the resulting output.
Convert a Texinfo tree portion $tree and return the resulting
output. This function does not try to output a full document but only
portions. For a full document use convert.
In general, this function should be called after the converter has been
associated to a document by a call to output or convert.
Copyright 2010- Free Software Foundation, Inc. See the source file for all copyright years.
This library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version.
| Jump to: | %
A B C D E F G I L M N O P R S T U V W X |
|---|
| Jump to: | %
A B C D E F G I L M N O P R S T U V W X |
|---|