HTML::Feature でフィルタを作ってみた

Filter::Louを参考に作ってみた。

utf8::encode($str);

がないとどうもいかないようだった。

package Plagger::Plugin::Filter::HTMLFeature;
use strict;
use base qw( Plagger::Plugin );

use utf8;
use HTML::Feature;

sub register {
    my ($self, $context) = @_;
    $context->register_hook(
        $self,
        'plugin.init'        => \&init_htmlfeature,
        'update.entry.fixup' => \&filter,
    );
}

sub init_htmlfeature {
    my ($self, $context, $args) = @_;
    
    $context->log(debug => "initializing HTML::Feature");
    $self->{htmlfeature} = HTML::Feature->new;
}

sub filter {
    my ($self, $context, $args) = @_;
    my $entry = $args->{entry};
    my $_s = $entry->body;
    utf8::encode($_s);
    my $_r = $self->{htmlfeature}->parse_html($_s);

    $entry->body( $_r->element->as_HTML );
}

1;