187 lines
3.0 KiB
Perl
187 lines
3.0 KiB
Perl
package MIME::Parser::Results;
|
|
|
|
=head1 NAME
|
|
|
|
MIME::Parser::Results - results of the last entity parsed
|
|
|
|
|
|
=head1 SYNOPSIS
|
|
|
|
Before reading further, you should see L<MIME::Parser> to make sure that
|
|
you understand where this module fits into the grand scheme of things.
|
|
Go on, do it now. I'll wait.
|
|
|
|
Ready? Ok...
|
|
|
|
### Do parse, get results:
|
|
my $entity = eval { $parser->parse(\*STDIN); };
|
|
my $results = $parser->results;
|
|
|
|
### Get all messages logged:
|
|
@msgs = $results->msgs;
|
|
|
|
### Get messages of specific types (also tests if there were problems):
|
|
$had_errors = $results->errors;
|
|
$had_warnings = $results->warnings;
|
|
|
|
### Get outermost header:
|
|
$top_head = $results->top_head;
|
|
|
|
|
|
=head1 DESCRIPTION
|
|
|
|
Results from the last MIME::Parser parse.
|
|
|
|
|
|
=head1 PUBLIC INTERFACE
|
|
|
|
=over 4
|
|
|
|
=cut
|
|
|
|
use strict;
|
|
|
|
### Kit modules:
|
|
use MIME::Tools qw(:msgs);
|
|
|
|
|
|
#------------------------------
|
|
|
|
=item new
|
|
|
|
I<Constructor.>
|
|
|
|
=cut
|
|
|
|
sub new {
|
|
bless {
|
|
MPI_ID => 'MIME-parser',
|
|
MPI_Msgs => [],
|
|
MPI_Level => 0,
|
|
MPI_TopHead => undef,
|
|
}, shift;
|
|
}
|
|
|
|
#------------------------------
|
|
|
|
=item msgs
|
|
|
|
I<Instance method.>
|
|
Return all messages that we logged, in order.
|
|
Every message is a string beginning with its type followed by C<": ">;
|
|
the current types are C<debug>, C<warning>, and C<error>.
|
|
|
|
=cut
|
|
|
|
sub msgs {
|
|
@{shift->{MPI_Msgs}};
|
|
}
|
|
|
|
#------------------------------
|
|
|
|
=item errors
|
|
|
|
I<Instance method.>
|
|
Return all error messages that we logged, in order.
|
|
A convenience front-end onto msgs().
|
|
|
|
=cut
|
|
|
|
sub errors {
|
|
grep /^error: /, @{shift->{MPI_Msgs}};
|
|
}
|
|
|
|
#------------------------------
|
|
|
|
=item warnings
|
|
|
|
I<Instance method.>
|
|
Return all warning messages that we logged, in order.
|
|
A convenience front-end onto msgs().
|
|
|
|
=cut
|
|
|
|
sub warnings {
|
|
grep /^warning: /, @{shift->{MPI_Msgs}};
|
|
}
|
|
|
|
#------------------------------
|
|
|
|
=item top_head
|
|
|
|
I<Instance method.>
|
|
Return the topmost header, if we were able to read it.
|
|
This may be useful if the parse fails.
|
|
|
|
=cut
|
|
|
|
sub top_head {
|
|
my ($self, $head) = @_;
|
|
$self->{MPI_TopHead} = $head if @_ > 1;
|
|
$self->{MPI_TopHead};
|
|
}
|
|
|
|
|
|
|
|
|
|
#------------------------------
|
|
#
|
|
# PRIVATE: FOR USE DURING PARSING ONLY!
|
|
#
|
|
|
|
#------------------------------
|
|
#
|
|
# msg TYPE, MESSAGE...
|
|
#
|
|
# Take a message.
|
|
#
|
|
sub msg {
|
|
my $self = shift;
|
|
my $type = shift;
|
|
my @args = map { defined($_) ? $_ : '<<undef>>' } @_;
|
|
|
|
push @{$self->{MPI_Msgs}}, ($type.": ".join('', @args)."\n");
|
|
}
|
|
|
|
#------------------------------
|
|
#
|
|
# level [+1|-1]
|
|
#
|
|
# Return current parsing level.
|
|
#
|
|
sub level {
|
|
my ($self, $lvl) = @_;
|
|
$self->{MPI_Level} += $lvl if @_ > 1;
|
|
$self->{MPI_Level};
|
|
}
|
|
|
|
#------------------------------
|
|
#
|
|
# indent
|
|
#
|
|
# Return indent for current parsing level.
|
|
#
|
|
sub indent {
|
|
my ($self) = @_;
|
|
' ' x $self->{MPI_Level};
|
|
}
|
|
|
|
=back
|
|
|
|
=cut
|
|
|
|
1;
|
|
__END__
|
|
|
|
=head1 SEE ALSO
|
|
|
|
L<MIME::Tools>, L<MIME::Parser>
|
|
|
|
=head1 AUTHOR
|
|
|
|
Eryq (F<eryq@zeegee.com>), ZeeGee Software Inc (F<http://www.zeegee.com>).
|
|
|
|
All rights reserved. This program is free software; you can redistribute
|
|
it and/or modify it under the same terms as Perl itself.
|
|
|