@node Texinfo@asis{::}Report
@chapter Texinfo::Report

@node Texinfo@asis{::}Report NAME
@section Texinfo::Report NAME

Texinfo::Report - Error storing for Texinfo modules

@node Texinfo@asis{::}Report SYNOPSIS
@section Texinfo::Report SYNOPSIS

@verbatim
  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'};
  }
@end verbatim

@node Texinfo@asis{::}Report NOTES
@section Texinfo::Report NOTES

The Texinfo Perl module main purpose is to be used in @code{texi2any} to convert
Texinfo to other formats.  There is no promise of API stability.

@node Texinfo@asis{::}Report DESCRIPTION
@section Texinfo::Report DESCRIPTION

The @code{Texinfo::Report} module helps with error handling.  It is
used by the Texinfo modules @ref{Texinfo@asis{::}Parser NAME,, Texinfo::Parser} and
@ref{Texinfo@asis{::}Convert@asis{::}Converter NAME,, Texinfo::Convert::Converter}.  To use this module, either create
a new @code{Texinfo::Report} object or initialize another object
such as to be able to call @code{Texinfo::Report} methods.  In any
case, @code{Texinfo::Report::new()} is called to setup the module.

Besides the @code{new} method, @code{errors} is used for reporting errors, and the
other methods to store errors (and warnings).

@node Texinfo@asis{::}Report METHODS
@section Texinfo::Report METHODS

No method is exported in the default case.

The @code{new} method initializes @code{Texinfo::Report} related fields.
The errors collected are available through the @code{errors} method, the other
methods allow registering errors and warnings.

@table @asis
@item my $registrar = Texinfo::Report::new()
@anchor{Texinfo@asis{::}Report my $registrar = Texinfo@asis{::}Report@asis{::}new()}

@item $converter->Texinfo::Report::new()
@anchor{Texinfo@asis{::}Report $converter->Texinfo@asis{::}Report@asis{::}new()}
@cindex @code{Texinfo::Report::new}

If called without argument, a @code{Texinfo::Report} object is initialized and
returned.  This is how the module is used in the Texinfo Parsers, as
a separate object.

If called on a @code{$converter}, the @code{$converter} is initialized itself
such as to be able to call @code{Texinfo::Report} methods.  It is how it is
used in the Converters.

@item ($error_warnings_list, $error_count) = errors($registrar)
@anchor{Texinfo@asis{::}Report ($error_warnings_list@comma{} $error_count) = errors($registrar)}
@cindex @code{errors}

This function returns as @emph{$error_count} the count of errors since
calling @code{new}.  The @emph{$error_warnings_list} is an array of hash references
one for each error, warning or error line continuation.  Each of these has
the following keys:

@table @asis
@item type
@anchor{Texinfo@asis{::}Report type}

May be @code{warning}, or @code{error}.

@item text
@anchor{Texinfo@asis{::}Report text}

The text of the error.

@item error_line
@anchor{Texinfo@asis{::}Report error_line}

The text of the error formatted with the file name, line number and macro
name, as needed.

@item line_nr
@anchor{Texinfo@asis{::}Report line_nr}

The line number of the error or warning.

@item file_name
@anchor{Texinfo@asis{::}Report file_name}

The file name where the error or warning occurs.

@item macro
@anchor{Texinfo@asis{::}Report macro}

The user macro name that is expanded at the location of
the error or warning.

@end table

@item $registrar->line_warn($text, $configuration_information, $error_location_info)
@anchor{Texinfo@asis{::}Report $registrar->line_warn($text@comma{} $configuration_information@comma{} $error_location_info)}

@item $registrar->line_error($text, $configuration_information, $error_location_info)
@anchor{Texinfo@asis{::}Report $registrar->line_error($text@comma{} $configuration_information@comma{} $error_location_info)}
@cindex @code{line_warn}
@cindex @code{line_error}

Register a warning or an error.  The @emph{$text} is the text of the
error or warning.  The @emph{$configuration_information} object gives
some information that can modify the messages or their delivery.
The optional @emph{$error_location_info} holds the information on the error or
warning location.  The @emph{$error_location_info} reference on hash may be
obtained from Texinfo elements @emph{source_info} keys.   It may also
be setup to point to a file name, using the @code{file_name} key and
to a line number, using the @code{line_nr} key.  The @code{file_name} key value
should be a binary string.

The @emph{source_info} key of Texinfo tree elements is described
in more details in @ref{Texinfo@asis{::}Parser source_info}.

@item $registrar->document_warn($configuration_information, $text)
@anchor{Texinfo@asis{::}Report $registrar->document_warn($configuration_information@comma{} $text)}

@item $registrar->document_error($configuration_information, $text)
@anchor{Texinfo@asis{::}Report $registrar->document_error($configuration_information@comma{} $text)}
@cindex @code{document_warn}
@cindex @code{document_error}

Register a document-wide error or warning.  @emph{$text} is the error or
warning message.  The @emph{$configuration_information} object gives
some information that can modify the messages or their delivery.

@end table

@node Texinfo@asis{::}Report AUTHOR
@section Texinfo::Report AUTHOR

Patrice Dumas, <pertusus@@free.fr>

@node Texinfo@asis{::}Report COPYRIGHT AND LICENSE
@section Texinfo::Report 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.

