Data-ICal
view release on metacpan or search on metacpan
lib/Data/ICal/Property.pm view on Meta::CPAN
Gets the value of this property, converted from the encoding specified
in its encoding parameter. (That is, C<value> will return the encoded
version; this will apply the encoding.) If the encoding is not
specified or recognized, just returns the raw value.
=cut
sub decoded_value {
my $self = shift;
my $value = $self->value;
my $encoding = uc( $self->parameters->{'ENCODING'} || "" );
if ( $ENCODINGS{$encoding} ) {
return $ENCODINGS{$encoding}{'decode'}->($value);
} else {
return $value;
}
}
=head2 encode $encoding
Calls C<decoded_value> to get the current decoded value, then encodes
it in C<$encoding>, sets the value to that, and sets the encoding
parameter to C<$encoding>. (C<$encoding> is first converted to upper
case.)
If C<$encoding> is undef, deletes the encoding parameter and sets the
value to the decoded value. Does nothing if the encoding is not
recognized.
=cut
sub encode {
my $self = shift;
my $encoding = uc shift;
my $decoded_value = $self->decoded_value;
if ( not defined $encoding ) {
$self->value($decoded_value);
delete $self->parameters->{'ENCODING'};
} elsif ( $ENCODINGS{$encoding} ) {
$self->value( $ENCODINGS{$encoding}{'encode'}->($decoded_value) );
$self->parameters->{'ENCODING'} = $encoding;
}
return $self;
}
=head2 as_string ARGS
Returns the property formatted as a string (including trailing
newline).
Takes named arguments:
=over
=item fold
Defaults to true. pass in a false value if you need to generate
non-rfc-compliant calendars.
=item crlf
Defaults to C<\x0d\x0a>, per RFC 2445 spec. This option is primarily
for backwards compatibility with version of this module prior to 0.16,
which used C<\x0a>.
=back
=cut
sub as_string {
my $self = shift;
my %args = (
fold => 1,
crlf => Data::ICal::Entry->CRLF,
@_
);
my $string
= uc( $self->key )
. $self->_parameters_as_string . ":"
. $self->_value_as_string( $self->key )
. $args{crlf};
# Assumption: the only place in an iCalendar that needs folding are property
# lines
if ( $args{'fold'} ) {
return $self->_fold( $string, $args{crlf} );
}
return $string;
}
=begin private
=head2 _value_as_string
Returns the property's value as a string. Comma and semicolon are not
escaped when the value is recur type (the key is rrule).
Values are quoted according the iCal spec, unless this is in vCal 1.0
mode.
=end private
=cut
sub _value_as_string {
my $self = shift;
my $key = shift;
my $value = defined( $self->value() ) ? $self->value() : '';
unless ( $self->vcal10 ) {
$value =~ s/\\/\\\\/gs;
$value =~ s/;/\\;/gs unless lc($key) eq 'rrule' || lc($key) eq 'geo';
$value =~ s/,/\\,/gs unless lc($key) eq 'rrule';
$value =~ s/\x0d?\x0a/\\n/gs;
}
return $value;
( run in 4.150 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )