File: hdisable

package info (click to toggle)
libhtml-parser-perl 3.83-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 944 kB
  • sloc: ansic: 7,624; perl: 1,669; makefile: 13
file content (39 lines) | stat: -rwxr-xr-x 740 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#!/usr/bin/perl

use strict;
use warnings;

use HTML::Parser ();
use HTML::Entities qw(encode_entities);

sub disable_tags_but {
    my ($text, $allowed_tags) = @_;

    my @text;
    my %allowed_tag = map { $_ => 1 } @{$allowed_tags || []};

    my $tag_h = sub {
        my ($tag, $text) = @_;
        $text = encode_entities($text, "<") unless $allowed_tag{$tag};
        push(@text, $text);
    };

    HTML::Parser->new(
        start_h   => [$tag_h, 'tagname, text'],
        end_h     => [$tag_h, 'tagname, text'],
        default_h => [\@text, '@{text}'],
    )->parse($text)->eof;

    return join("", @text);
}

#
# Test it
#
print disable_tags_but(<<EOT, [qw(a br)]) unless caller;

Test
<foo>  <a href="...">...</a>
</bar>

EOT