###############################################################################
#Value.pm
#Last Change: 2006-11-01
#Copyright (c) 2006 Marc-Seabstian "Maluku" Lucksch
#Version 0.28
####################
#This file is part of the sofu.pm project, a parser library for an all-purpose
#ASCII file format. More information can be found on the project web site
#
#sofu.pm is published under the terms of the MIT license, which basically means
#"Do with it whatever you want". For more information, see the license.txt
#file that should be enclosed with libsofu distributions. A copy of the license
#is (at the time of this writing) also available at
###############################################################################
=head1 NAME
Data::Sofu::Value - A Sofu Value
=head1 DESCRIPTION
Provides a interface similar to the original SofuD (sofu.sf.net)
=head1 Synopsis
require Data::Sofu::Value;
my $v = Data::Sofu::Value->new();
$v->set("Hello World");
=head1 SYNTAX
This Module is pure OO, exports nothing
=cut
use strict;
require Data::Sofu;
our @ISA = qw/Data::Sofu::Object/;
our $VERSION="0.29";
=head1 METHODS
Also look at C<Data::Sofu::Object> for methods, cause Value inherits from it
=head2 new([DATA])
Creates a new C<Data::Sofu::Value> and returns it
Converts DATA to a string if DATA is given.
$val = Data::Sofu::Value->new("Hello World");
=cut
sub new {
my $self={};
bless $self,shift;
$$self{Value}=undef;
$$self{Value}="".shift if @_;
if (@_) {
return Data::Sofu::List->new($$self{Value},@_);
}
return $self if defined $$self{Value};
return Data::Sofu::Undefined->new();
}
=head2 set(DATA)
Sets the contents of this Value (replaces the old contents).
Note: DATA will be converted to a string.
$v->set("Foobar");
=cut
sub set {
my $self=shift;
$$self{Value}="".shift;
}
=head2 asValue()
Returns itself, used to make sure this Value is really a Value (Data::Sofu::Map and Data::Sofu::List will die if called with this method)
=cut
sub asValue {
return shift;
}
=head2 asScalar()
Perl only
Returns this Value as a perl Scalar (same as toString)
=cut
sub asScalar {
my $self=shift;
return $$self{Value};
}
=head2 toString()
Returns this as a string
=cut
sub toString {
my $self=shift;
return $$self{Value};
}
=head2 C<toUTF16()>, C<toUTF8()>, toUTF32()
Not working in Perl (cause there is no wchar, char, dchar stuff going on, if you need to convert strings use "Encode")
They just return the same as toString()
=cut
#TODO
sub toUTF16 {
my $self=shift;
return $$self{Value};
}
sub toUTF8 {
my $self=shift;
return $$self{Value};
}
sub toUTF32 {
my $self=shift;
return $$self{Value};
}
#/TODO
=head2 toInt()
Return the Value as an Integer
$v->toInt() === int $v->toString();
=cut
sub toInt {
my $self=shift;
return int $$self{Value};
}
=head2 toFloat()
Return the Value as a Float
$v->toFloat() === $v->toString()+0;
=cut
sub toFloat {
my $self=shift;
return $$self{Value}+0;
}
=head2 toLong()
Return the Value as a Long
$v->toLong() === int $v->toString();
=cut
sub toLong {
my $self=shift;
return int $$self{Value};
}
=head2 toDouble()
Return the Value as a Double
$v->toDouble() === $v->toString()+0;
=cut
sub toDouble {
my $self=shift;
return $$self{Value}+0;
}
=head2 isValue()
Returns 1
=cut
sub isValue {
return 1
}
#=head2 string()
#Same as Data::Sofu::Object::string(), but skips the Reference building.
#=cut
#sub string { #No References for Values at this time (just remove this function to enable them
# my $self=shift;
# return $self->stringify(@_);
#}
=head2 C<stringify(LEVEL,TREE)>
Returns a string representation of this Value.
LEVEL and TREE are ignored...
=cut
sub stringify {
my $self=shift;
my $level=shift;
my $tree=shift;
return "Value = ".Data::Sofu::Sofuescape($$self{Value}).$self->stringComment()."\n" unless $level;
return Data::Sofu::Sofuescape($$self{Value}).$self->stringComment()."\n";
}
=head2 C<binarify(TREE,BINARY DRIVER)>
Returns the binary version of this Value using the BINARY DRIVER. Don't call this one, use binaryPack instead.
=cut
sub binarify {
my $self=shift;
my $tree=shift;
my $bin=shift;
my $str=$bin->packType(1);
$str.=$self->packComment($bin);
$str.=$bin->packText($$self{Value});
return $str;
}
=head1 BUGS
most of the methods do the same, because perl does the converting for you.
=head1 SEE ALSO
L<Data::Sofu>, L<Data::Sofu::Binary>, L<Data::Sofu::Object>, L<Data::Sofu::Map>, L<Data::Sofu::Value>, L<Data::Sofu::Undefined>, L<http://sofu.sf.net>
=cut
1;