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 is an object representation of and HTML-escaped text string. Stringification is L to call the L method. This class inherits from, and follows the conventions of, L. Inherited methods that are not overridden will not be documented a second time here. See the L documentation for more information. =head1 HTML ATTRIBUTES Valid attributes: EnoneE =head1 CONSTRUCTOR =over 4 =item B This behaves like standard L L except that if a lone argument is passed, it is taken as the value of L. =back =head1 OBJECT METHODS =over 4 =item B Get or set the HTML version of the L. =item B Get or set the text. =item B This is an alias for the L 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.