=head1 NAME

Texinfo::Commands - Classification of commands

=head1 SYNOPSIS

  use Texinfo::Commands;
  if ($Texinfo::Commands::accent_commands{$a_command}) {
    print STDERR "$a_command is an accent command\n";
  }

=head1 NOTES

The Texinfo Perl module main purpose is to be used in C<texi2any> to convert
Texinfo to other formats.  There is no promise of API stability.

=head1 DESCRIPTION

Texinfo::Commands holds a few hashes with information on @-commands
and hashes classifying Texinfo @-commands.

=head1 @-COMMAND INFORMATION

Hashes are defined as C<our> variables, and are therefore available
outside of the module.

=over

=item %index_names
X<C<%index_names>>

Hash describing the default Texinfo indices.  The format of this hash is
described in L<< C<Texinfo::Parser::indices_information>|Texinfo::Parser/$indices_information = $parser->indices_information() >>.

=back

=head1 @-COMMAND CLASSES

Hashes are defined as C<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:

=over

=item %accent_commands
X<C<%accent_commands>>

Accent @-commands taking an argument, like C<@'> or C<@ringaccent>,
including C<@dotless> and C<@tieaccent>.

=item %block_commands
X<C<%block_commands>>

Commands delimiting a block with a closing C<@end>.  The values are:

=over

=item I<conditional>

C<@if*> commands;

=item I<def>

Definition commands like C<@deffn>;

=item I<float>

C<@float>;

=item I<format_raw>

raw output format commands such as C<@html> or C<@info>;

=item I<item_container>

commands  with C<@item> containing
any content, C<@itemize> and C<@enumerate>;

=item I<item_line>

commands like C<@table> in which the C<@item> argument is on its line;

=item I<menu>

menu @-commands, C<@menu>, C<@detailmenu>
and C<@direntry>;

=item I<math>

Math block commands, like C<@displaymath>.

=item I<multitable>

C<@multitable>;

=item I<other>

The remaining block commands.

=item I<preformatted>

Commands whose content should not be filled, like C<@example> or C<@display>.

=item I<quotation>

Commands like C<@quotation>.

=item I<raw>

@-commands that have no expansion
of @-commands in their bodies (C<@macro>, C<@verbatim> and C<@ignore>);

=item I<region>

Commands delimiting a region of the document out of the main processing:
C<@titlepage>, C<@copying>, C<@documentdescription>.

=back

=item %blockitem_commands
X<C<%blockitem_commands>>

Block commands containing C<@item> with possible content before an C<@item>,
like C<@itemize>, C<@table> or C<@multitable>.

=item %brace_code_commands
X<C<%brace_code_commands>>

Brace commands that have their argument in code style, like
C<@code>.

=item %brace_commands
X<C<%brace_commands>>

The commands that take braces. Value is I<noarg> for brace commands without
argument such as C<@AA>, C<@TeX>, or C<@equiv>.  Other values include
I<accent>, I<arguments>, I<context> and other values.

=item %close_paragraph_commands
X<C<%close_paragraph_commands>>

Commands that stop a paragraph.  Root commands are not specified here,
but they also close paragraphs.

=item %commands_args_number
X<C<%commands_args_number>>

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 C<@example> which has an unlimited (variadic) number of arguments, 1
for C<@quotation>, 2 for C<@float>, 1 for most brace commands, 2 for C<@email>
and C<@abbr>, 5 for C<@image> and C<@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).

=item %contain_basic_inline_commands
X<C<%contain_basic_inline_commands>>

Commands containing simple text only, much like paragraph text, but
without C<@ref>, C<@footnote>, C<@titlefont>, C<@anchor> nor C<@verb>.

=item %contain_plain_text_commands
X<C<%contain_plain_text>>

Commands accepting only plain text with accent, symbol and glyph
commands.

=item %def_commands
X<C<%def_commands>>

Definition commands.

=item %default_index_commands
X<C<%default_index_commands>>

Index entry commands corresponding to default indices. For example
C<@cindex>.

=item %explained_commands
X<C<%explained_commands>>

@-commands whose second argument explain first argument and further
@-command call without first argument, as C<@abbr> and C<@acronym>.

=item %formattable_line_commands
X<C<%formattable_line_commands>>

Line commands which may be formatted as text, but that require constructing
some replacement text, for example C<@printindex>, C<@need> or
C<@verbatiminclude>.  C<@contents> and C<@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.

=item %formatted_nobrace_commands
X<C<%formatted_nobrace_commands>>

Commands not taking brace formatted as text or with text in the main
document body, corresponding to symbol commands such as C<@@> or C<@:> and
commands such as C<@item>.  @-commands appearing only in headers are not
in this hash, but in in C<%in_heading_spec_commands>.

=item %formatted_line_commands
X<C<%formatted_line_commands>>

Line commands which arguments may be formatted as text, such as
C<@center>, C<@author>, C<@item>, C<@node>, C<@chapter> and other.
Index commands may be formatted as text too, but they may be added
with C<@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.

=item %heading_spec_commands
X<C<%heading_spec_commands>>

@-commands used to specify custom headings, like C<@everyheading>.

=item %in_heading_spec_commands
X<C<%in_heading_spec_commands>>

Special @-commands appearing in custom headings, such as C<@thischapter>,
C<@thistitle> or C<@|>.

=item %in_index_commands

@-commands only valid in index entries, such as C<@sortas> or C<@subentry>.

=item %inline_conditional_commands

=item %inline_format_commands
X<C<%inline_conditional_commands>>
X<C<%inline_format_commands>>

Inline conditional commands, like C<@inlineifclear>, and inline format
commands like C<@inlineraw> and C<@inlinefmt>.

=item %letter_no_arg_commands
X<C<%letter_no_arg_commands>>

@-commands with braces but no argument corresponding to letters,
like C<@AA{}> or C<@ss{}> or C<@o{}>.

=item %math_commands
X<C<%math_commands>>

@-commands which contains math, like C<@math> or C<@displaymath>.

=item %line_commands
X<C<%line_commands>>

Commands that do not take braces, take arguments on the command line and are
not block commands either, like C<@node>, C<@chapter>, C<@cindex>, C<@deffnx>,
C<@end>, C<@footnotestyle>, C<@set>, C<@settitle>, C<@itemx>,
C<@definfoenclose>, C<@comment> and many others.

Note that C<@item> is in C<%line_commands> for its role in C<@table> and
similar @-commands.

=item %no_paragraph_commands
X<C<%no_paragraph_commands>>

Commands that do not start a paragraph.

=item %nobrace_commands
X<C<%nobrace_commands>>

Command that do not take braces, do not have argument on their line and
are not block commands either.  The value is I<symbol> for single character
non-alphabetical @-commands such as C<@@>, C<@ > or C<@:>.  Other commands in that hash
include C<@indent>, C<@tab> or C<@thissection>.

Note that C<@item> is in C<%nobrace_commands> for its role in C<@multitable>,
C<@itemize> and C<@enumerate>.

=item %non_formatted_block_commands
X<C<%non_formatted_block_commands>>

Block commands not formatted as text, such as C<@ignore> or C<@macro>.

=item %preamble_commands
X<C<%preamble_commands>>

@-commands that do not stop the preamble.

=item %preformatted_commands

=item %preformatted_code_commands
X<C<%preformatted_commands>>
X<C<%preformatted_code_commands>>

I<%preformatted_commands> is for commands whose content should not
be filled, like C<@example> or C<@display>.  If the command is meant
for code, it is also in I<%preformatted_code_commands>, like C<@example>.

=item %ref_commands
X<C<%ref_commands>>

Cross reference @-command referencing nodes, like C<@xref> or C<@link>.

=item %root_commands
X<C<%root_commands>>

Commands that are at the root of a Texinfo document, namely
C<@node> and sectioning commands, except heading commands
like C<@heading>.

=item %sectioning_heading_commands
X<C<%sectioning_heading_commands>>

All the sectioning and heading commands.

=item %variadic_commands
X<C<%variadic_commands>>

Commands with unlimited arguments, like C<@example>.

=back

=head1 SEE ALSO

L<Texinfo::Parser>.

=head1 AUTHOR

Patrice Dumas, E<lt>pertusus@free.frE<gt>

=head1 COPYRIGHT AND LICENSE

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.

=cut
