1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92
|
# This code is part of Perl distribution Mail-Message version 3.019.
# The POD got stripped from this file by OODoc version 3.05.
# For contributors see file ChangeLog.
# This software is copyright (c) 2001-2025 by Mark Overmeer.
# This is free software; you can redistribute it and/or modify it under
# the same terms as the Perl 5 programming language system itself.
# SPDX-License-Identifier: Artistic-1.0-Perl OR GPL-1.0-or-later
package Mail::Message::Field::Fast;{
our $VERSION = '3.019';
}
use base 'Mail::Message::Field';
use strict;
use warnings;
use Scalar::Util qw/blessed/;
#--------------------
#
# The DATA is stored as: [ NAME, FOLDED-BODY ]
# The body is kept in a folded fashion, where each line starts with
# a single blank.
sub new($;$@)
{ my $class = shift;
my ($name, $body) = $class->consume(@_==1 ? (shift) : (shift, shift));
defined $body or return ();
my $self = bless +[$name, $body], $class;
# Attributes
$self->comment(shift) if @_==1; # one attribute line
$self->attribute(shift, shift) while @_ > 1; # attribute pairs
$self;
}
sub clone()
{ my $self = shift;
bless +[ @$self ], ref $self;
}
sub length()
{ my $self = shift;
length($self->[0]) + 1 + length($self->[1]);
}
sub name() { lc shift->[0] }
sub Name() { $_[0]->[0] }
sub folded()
{ my $self = shift;
wantarray or return $self->[0] .':'. $self->[1];
my @lines = $self->foldedBody;
my $first = $self->[0]. ':'. shift @lines;
($first, @lines);
}
sub unfoldedBody($;@)
{ my $self = shift;
$self->[1] = $self->fold($self->[0], @_)
if @_;
$self->unfold($self->[1]);
}
sub foldedBody($)
{ my ($self, $body) = @_;
if(@_==2) { $self->[1] = $body }
else { $body = $self->[1] }
wantarray ? (split m/^/, $body) : $body;
}
# For performance reasons only
sub print(;$)
{ my $self = shift;
my $fh = shift || select;
$fh->print($self->[0].':'.$self->[1]);
$self;
}
1;
|