File: String.pm

package info (click to toggle)
libmail-message-perl 3.019-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 1,620 kB
  • sloc: perl: 10,810; makefile: 4
file content (109 lines) | stat: -rw-r--r-- 2,553 bytes parent folder | download
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
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
# 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::Body::String;{
our $VERSION = '3.019';
}

use base 'Mail::Message::Body';

use strict;
use warnings;

use Carp;
use Mail::Box::FastScalar ();

#--------------------

# The scalar is stored as reference to avoid a copy during creation of
# a string object.

sub _data_from_filename(@)
{	my ($self, $filename) = @_;

	delete $self->{MMBS_nrlines};
	open my $in, '<:raw', $filename
		or $self->log(ERROR => "Unable to read file $filename for message body scalar: $!"), return;

	my @lines = $in->getlines;
	$in->close;

	$self->{MMBS_nrlines} = @lines;
	$self->{MMBS_scalar}  = join '', @lines;
	$self;
}

sub _data_from_filehandle(@)
{	my ($self, $fh) = @_;
	if(ref $fh eq 'Mail::Box::FastScalar')
	{	my $lines = $fh->getlines;
		$self->{MMBS_nrlines} = @$lines;
		$self->{MMBS_scalar}  = join '', @$lines;
	}
	else
	{	my @lines = $fh->getlines;
		$self->{MMBS_nrlines} = @lines;
		$self->{MMBS_scalar}  = join '', @lines;
	}
	$self;
}

sub _data_from_lines(@)
{	my ($self, $lines) = @_;
	$self->{MMBS_nrlines} = @$lines unless @$lines==1;
	$self->{MMBS_scalar}  = @$lines==1 ? shift @$lines : join('', @$lines);
	$self;
}

sub clone()
{	my $self = shift;
	(ref $self)->new(data => $self->string, based_on => $self);
}

sub nrLines()
{	my $self = shift;
	return $self->{MMBS_nrlines} if defined $self->{MMBS_nrlines};

	my $lines = $self->{MMBS_scalar} =~ tr/\n/\n/;
	$lines++ if $self->{MMBS_scalar} !~ m/\n\z/;
	$self->{MMBS_nrlines} = $lines;
}

sub size()   { length $_[0]->{MMBS_scalar} }
sub string() { $_[0]->{MMBS_scalar} }

sub lines()
{	my @lines = split /^/, shift->{MMBS_scalar};
	wantarray ? @lines : \@lines;
}

sub file() { Mail::Box::FastScalar->new(\shift->{MMBS_scalar}) }

sub print(;$)
{	my $self = shift;
	my $fh   = shift || select;
	$fh->print($self->{MMBS_scalar});
	$self;
}

sub read($$;$@)
{	my ($self, $parser, $head, $bodytype) = splice @_, 0, 4;
	delete $self->{MMBS_nrlines};

	(my $begin, my $end, $self->{MMBS_scalar}) = $parser->bodyAsString(@_);
	$self->fileLocation($begin, $end);

	$self;
}

sub endsOnNewline() { $_[0]->{MMBS_scalar} =~ m/\A\z|\n\z/ }

1;