Qgoda

 view release on metacpan or  search on metacpan

lib/Qgoda/Processor/HTMLFilter.pm  view on Meta::CPAN


    bless $self, $class;
}

sub process {
    my ($self, $content, $asset) = @_;

    my $output = '';
    
    my $handler = sub {
        my ($event, $text, $tagname, $attr, $attrseq, $is_cdata) = @_;

        my $chunk;
        if ('start_document' eq $event || 'end_document' eq $event) {
            $chunk = $output;
            $output = '';
        } else {
            $chunk = $text;
        }

        foreach my $plug_in (@{$self->{__handlers}->{$event}}) {
            $chunk = $plug_in->$event(
                $chunk,
                event => $event,
                text => $text,
                output => \$output,
                text => $text,
                tagname => $tagname,
                attr => $attr,
                attrseq => $attrseq,
                is_cdata => $is_cdata,
                asset => $asset,
            );
        }

        $output .= $chunk;
    };

    my $parser = HTML::Parser->new(
        comment_h => [$handler, 'event, text'],
        declaration_h => [$handler, 'event, text'],
        start_h => [$handler, 'event, text, tagname, attr, attrseq, is_cdata'],
        end_h => [$handler, 'event, text, tagname'],
        process_h => [$handler, 'event, text'],
        text_h => [$handler, 'event, text'],
        start_document_h => [$handler, 'event'],
    );
    $parser->empty_element_tags(1);
    $parser->parse($content);

    # FIXME! Why can that handler not be registered like the others?
    $handler->('end_document', $output);



( run in 0.630 second using v1.01-cache-2.11-cpan-454fe037f31 )