diff options
Diffstat (limited to 'XPath/Literal.pm')
-rw-r--r-- | XPath/Literal.pm | 99 |
1 files changed, 99 insertions, 0 deletions
diff --git a/XPath/Literal.pm b/XPath/Literal.pm new file mode 100644 index 0000000..5dfee18 --- /dev/null +++ b/XPath/Literal.pm @@ -0,0 +1,99 @@ +# $Id: Literal.pm,v 1.11 2001/03/16 11:10:08 matt Exp $ + +package XML::XPath::Literal; +use XML::XPath::Boolean; +use XML::XPath::Number; +use strict; + +use overload + '""' => \&value, + 'cmp' => \&cmp; + +sub new { + my $class = shift; + my ($string) = @_; + +# $string =~ s/"/"/g; +# $string =~ s/'/'/g; + + bless \$string, $class; +} + +sub as_string { + my $self = shift; + my $string = $$self; + $string =~ s/'/'/g; + return "'$string'"; +} + +sub as_xml { + my $self = shift; + my $string = $$self; + return "<Literal>$string</Literal>\n"; +} + +sub value { + my $self = shift; + $$self; +} + +sub cmp { + my $self = shift; + my ($cmp, $swap) = @_; + if ($swap) { + return $cmp cmp $$self; + } + return $$self cmp $cmp; +} + +sub evaluate { + my $self = shift; + $self; +} + +sub to_boolean { + my $self = shift; + return (length($$self) > 0) ? XML::XPath::Boolean->True : XML::XPath::Boolean->False; +} + +sub to_number { return XML::XPath::Number->new($_[0]->value); } +sub to_literal { return $_[0]; } + +sub string_value { return $_[0]->value; } + +1; +__END__ + +=head1 NAME + +XML::XPath::Literal - Simple string values. + +=head1 DESCRIPTION + +In XPath terms a Literal is what we know as a string. + +=head1 API + +=head2 new($string) + +Create a new Literal object with the value in $string. Note that " and +' will be converted to " and ' respectively. That is not part of the XPath +specification, but I consider it useful. Note though that you have to go +to extraordinary lengths in an XML template file (be it XSLT or whatever) to +make use of this: + + <xsl:value-of select=""I'm feeling &quot;sad&quot;""/> + +Which produces a Literal of: + + I'm feeling "sad" + +=head2 value() + +Also overloaded as stringification, simply returns the literal string value. + +=head2 cmp($literal) + +Returns the equivalent of perl's cmp operator against the given $literal. + +=cut |