use warnings;
use strict;
-use IkiWiki 2.00;
-use HTML::TreeBuilder;
-use XML::Atom::Util qw(encode_xml);
+use IkiWiki 3.00;
+use HTML::Entities;
-sub import { #{{{
+sub import {
hook(type => "getsetup", id => "htmlbalance", call => \&getsetup);
hook(type => "sanitize", id => "htmlbalance", call => \&sanitize);
-} # }}}
+}
-sub getsetup () { #{{{
+sub getsetup () {
return
plugin => {
safe => 1,
rebuild => undef,
},
-} #}}}
+}
-sub sanitize (@) { #{{{
+sub sanitize (@) {
my %params=@_;
my $ret = '';
- my $tree = HTML::TreeBuilder->new_from_content($params{content});
+ eval q{use HTML::TreeBuilder};
+ error $@ if $@;
+ my $tree = HTML::TreeBuilder->new();
+ $tree->ignore_unknown(0);
+ $tree->ignore_ignorable_whitespace(0);
+ $tree->no_space_compacting(1);
+ $tree->p_strict(1);
+ $tree->store_comments(0);
+ $tree->store_declarations(0);
+ $tree->store_pis(0);
+ $tree->parse_content($params{content});
my @nodes = $tree->disembowel();
foreach my $node (@nodes) {
if (ref $node) {
- $ret .= $node->as_XML();
+ $ret .= $node->as_HTML(undef, '', {});
chomp $ret;
$node->delete();
}
else {
- $ret .= encode_xml($node);
+ $ret .= encode_entities($node);
}
}
$tree->delete();
return $ret;
-} # }}}
+}
1