package Rose::HTML::Text;
use strict;
use base 'Rose::HTML::Object';
use Rose::HTML::Util();
our $VERSION = '0.602';
__PACKAGE__->valid_html_attrs([]);
use overload
(
'""' => sub { shift->html },
'bool' => sub { 1 },
'0+' => sub { 1 },
fallback => 1,
);
# XXX: When Class::XSAccessor is installed, the (apparent) combination of
# XXX: overload and Rose::Object::MakeMethods::Generic's method creation
# XXX: for plain scalar attributes causes things to go awry and tests to
# XXX" fail (e.g., t/text.t)
# use Rose::Object::MakeMethods::Generic
# (
# { override_existing => 1 },
# scalar =>
# [
# 'html',
# ],
# );
# XXX: Do it the old-fashioned way (see comments above)
sub html
{
my($self) = shift;
return $self->{'html'} = shift if(@_);
return $self->{'html'};
}
sub html_tag { shift->html(@_) }
sub xhtml_tag { shift->xhtml(@_) }
sub xhtml { shift->html(@_) }
sub init
{
my($self) = shift;
@_ = (text => @_) if(@_ == 1);
$self->SUPER::init(@_);
}
sub text
{
my($self) = shift;
local $^W = 0; # XXX: Using a sledgehammer here due to possible stringification overloading on $_[0]
$self->html(defined $_[0] ? Rose::HTML::Util::escape_html(@_) : undef) if(@_);
return Rose::HTML::Util::unescape_html($self->html);
}
sub children
{
my($self) = shift;
Carp::croak ref($self), " objects cannot have children()" if(@_ > 1);
return wantarray ? () : [];
}
sub push_children { Carp::croak ref($_[0]), " objects cannot have children()" }
*unshift_children = \&push_children;
1;
__END__
=head1 NAME
Rose::HTML::Text - Object representation of HTML-escaped text.
=head1 SYNOPSIS
$text = Rose::HTML::Text->new('I <3 HTML');
print $text->html; # I <3 HTML
# Stringification is overloaded
print "$text" # I <3 HTML
...
=head1 DESCRIPTION
L<Rose::HTML::Text> is an object representation of and HTML-escaped text string. Stringification is L<overloaded|overload> to call the L<html|/html> method.
This class inherits from, and follows the conventions of, L<Rose::HTML::Object>. Inherited methods that are not overridden will not be documented a second time here. See the L<Rose::HTML::Object> documentation for more information.
=head1 HTML ATTRIBUTES
Valid attributes: E<lt>noneE<gt>
=head1 CONSTRUCTOR
=over 4
=item B<new [ PARAMS | TEXT ]>
This behaves like standard L<Rose::HTML::Object> L<constructor|Rose::HTML::Object/new> except that if a lone argument is passed, it is taken as the value of L<text|/text>.
=back
=head1 OBJECT METHODS
=over 4
=item B<html [HTML]>
Get or set the HTML version of the L<text|/text>.
=item B<text [TEXT]>
Get or set the text.
=item B<xhtml [XHTML]>
This is an alias for the L<html|/html> method.
=back
=head1 AUTHOR
John C. Siracusa (siracusa@gmail.com)
=head1 LICENSE
Copyright (c) 2010 by John C. Siracusa. All rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.