e99ec255 |
1 | #!/usr/bin/perl |
2 | # Censor filter. |
3 | # Copyright 2002 by Joey Hess under the terms of the GNU GPL. |
4 | |
5 | # Yes, this program is self-modifying code, if you want it to be. |
6 | if (exists $ENV{ADD_WORD}) { |
7 | open(IN, $0) || die "cannot read myself"; |
8 | @lines=<IN>; |
9 | close IN; |
10 | open OUT, ">$0" || die "cannot write myself"; |
11 | for (@lines) { |
12 | print OUT $_; |
13 | if (/^__DATA__\n$/) { |
14 | open(DATAOUT, "|sort|uniq|column >> $0"); |
15 | $ENV{ADD_WORD} =~ y/n-za-m/a-z/; |
16 | print DATAOUT "$ENV{ADD_WORD}\n"; |
17 | print DATAOUT join("\n", |
18 | map { chomp; split ' ', $_ } <DATA>); |
19 | close DATAOUT; |
20 | exit; |
21 | } |
22 | } |
23 | } |
24 | |
25 | $censored = join("|", reverse sort { $a cmp $b } |
26 | grep { length $_ } |
27 | map { chomp; y/a-z/n-za-m/; split ' ', $_ } <DATA>); |
28 | |
29 | while (<>) { |
30 | s/\b($censored)ed/CENSORED/ig; # don't say "CENSOREDed" |
31 | s/\b($censored)/CENSORED/ig; |
32 | print $_; |
33 | } |
34 | |
35 | __DATA__ |
36 | ahqr enaql grng pbzrvat t\f+fcbg |
37 | anxrq encr guebng pbzvat tebva |
38 | avccyr erne gvg pebgpu ubbgre |
39 | bcravat fangpu gvggl penc ubeal |
40 | beny fchax gvggvr penpx ubyr |
41 | betl fcrez hgrehf pernz uhzc |
42 | betnfz fcuvapgre ihyin phag unaqwbo |
43 | certanag fghq intvan phz urnq |
44 | cevpx fgnss ivetva phzzvat wvfz |
45 | chff fhpx ivoengbe pnzr xabo |
46 | chffl fjnyybj jbzo preivk xvff |
47 | chffvrf fperj jrg pureel ybir |
48 | chovp frk juber pyvg ybire |
49 | chqraqhz frkhny kkk pyvgbehf ybirq |
50 | chzc frrq nany pyvggl ybnq |
51 | cnagvrf frzra nerbyn pyvznk ynovn |
52 | crargengr funsg nff qevyyrq ynvq |
53 | crargengrq funt nffubyr qrsybjre yrfovna |
54 | cravf funttvat obbo qvpx yvcf |
55 | crgre fuvg oernfg qvyqb znfgheong |
56 | crpxre fyhg ohgg rebgvp znfgheongr |
57 | cunyyhf fyhggvfu ohggbpx rerpgvba znfgheongvat |
58 | cvff fyvg onyy rkcbfrq znzznel |
59 | ebfrohq gbathr ovgpu shpx znzznevrf |
60 | ebq gbby oybj snpvny |
61 | ehg gjng pbpx t-fcbg |