[Bast-commits] r6051 - ironman/plagger/lib/Plagger
penfold at dev.catalyst.perl.org
penfold at dev.catalyst.perl.org
Thu Apr 30 16:02:54 GMT 2009
Author: penfold
Date: 2009-04-30 17:02:54 +0100 (Thu, 30 Apr 2009)
New Revision: 6051
Added:
ironman/plagger/lib/Plagger/Text.pm
Log:
Add truncate_html method
Added: ironman/plagger/lib/Plagger/Text.pm
===================================================================
--- ironman/plagger/lib/Plagger/Text.pm (rev 0)
+++ ironman/plagger/lib/Plagger/Text.pm 2009-04-30 16:02:54 UTC (rev 6051)
@@ -0,0 +1,83 @@
+package Plagger::Text;
+use strict;
+use base qw( Class::Accessor::Fast );
+__PACKAGE__->mk_accessors(qw( type data ));
+
+use overload q("") => sub { $_[0]->data }, fallback => 1;
+
+use HTML::Tagset;
+use Plagger::Util;
+use HTML::Truncate;
+
+sub new {
+ my($class, %param) = @_;
+ bless {%param}, $class;
+}
+
+sub new_from_text {
+ my($class, $text) = @_;
+
+ return unless defined $text;
+ utf8::decode($text) unless utf8::is_utf8($text);
+
+ my @tags = $text =~ m!<(\w+)\s?/?>!g;
+ my @unknown = grep !$HTML::Tagset::isKnown{$_}, @tags;
+ my $type;
+ if (@unknown > @tags / 2) {
+ $type = 'text';
+ } elsif (@tags || $text =~ m!&(?:amp|gt|lt|quot);!) {
+ $type = 'html';
+ } else {
+ $type = 'text';
+ }
+
+ bless { type => $type, data => $text }, $class;
+}
+
+sub is_html {
+ my $self = shift;
+ $self->type eq 'html';
+}
+
+sub is_text {
+ my $self = shift;
+ $self->type eq 'text';
+}
+
+sub html {
+ my $self = shift;
+ if ($self->is_html) {
+ return $self->data;
+ } else {
+ Plagger::Util::encode_xml($self->data);
+ }
+}
+
+sub plaintext {
+ my $self = shift;
+ if ($self->is_html) {
+ return Plagger::Util::strip_html($self->data);
+ } else {
+ return $self->data;
+ }
+}
+
+sub unicode { $_[0]->data }
+sub utf8 { Encode::encode_utf8($_[0]->data) }
+sub encode { Encode::encode($_[1], $_[0]->data) }
+
+sub truncate_html {
+ my $self = shift;
+ my $length = shift || 300;
+
+ my $html_truncate = HTML::Truncate->new();
+ $html_truncate->chars($length);
+ return $html_truncate->truncate($self->html);
+}
+
+sub serialize {
+ my $self = shift;
+ $self->data;
+}
+
+1;
More information about the Bast-commits
mailing list