1#!/usr/bin/perl -w
2
3# script kindly offered by glb (Eric Cassagnard)
4
5use HTTP::Proxy qw( :log );
6use HTTP::Proxy::BodyFilter::tags;
7use HTTP::Proxy::BodyFilter::simple;
8use HTTP::Proxy::BodyFilter::htmltext;
9use strict;
10
11my $proxy = HTTP::Proxy->new(@ARGV);
12
13my %noaccent = (
14  Agrave => 'A', Aacute => 'A', Acirc  => 'A',  Atilde => 'A',
15  Auml   => 'A', Aring  => 'A', AElig  => 'AE', Ccedil => 'C',
16  Egrave => 'E', Eacute => 'E', Ecirc  => 'E',  Euml   => 'E',
17  Igrave => 'I', Iacute => 'I', Icirc  => 'I',  Iuml   => 'I',
18  Ntilde => 'N', Ograve => 'O', Oacute => 'O',  Ocirc  => 'O',
19  Otile  => 'O', Ouml   => 'O', Oslash => 'O',  Ugrave => 'U',
20  Uacute => 'U', Ucirc  => 'U', Uuml   => 'U',  Yacute => 'Y',
21  agrave => 'a', aacute => 'a', acirc  => 'a',  atilde => 'a',
22  auml   => 'a', aring  => 'a', aelig  => 'ae', ccedil => 'c',
23  egrave => 'e', eacute => 'e', ecirc  => 'e',  euml   => 'e',
24  igrave => 'i', iacute => 'i', icirc  => 'i',  iuml   => 'i',
25  ntilde => 'n', ograve => 'o', oacute => 'o',  ocirc  => 'o',
26  otile  => 'o', ouml   => 'o', oslash => 'o',  ugrave => 'u',
27  uacute => 'u', ucirc  => 'u', uuml   => 'u',  yacute => 'y',
28  'yuml' => 'y', '�' => 'AE', '�' => 'ae',
29);
30my $re = join '|', sort keys %noaccent;
31
32my %sounds = (
33  an => 'un', An  => 'Un',  au  => 'oo',  Au => 'Oo', a    => 'e',
34  A  => 'E',  ew  => 'oo',  e   => 'e-a', e  => 'i',  E    => 'I',
35  f  => 'ff', ir  => 'ur',  ow  => 'oo',  o  => 'oo', O    => 'Oo',
36  o  => 'u',  the => 'zee', The => 'Zee', th => 't',  tion => 'shun',
37  u  => 'oo', U   => 'Oo',  v   => 'f',   V  => 'F',  w    => 'v',
38  W  => 'V' );
39my $sc = join '|', sort keys %sounds;
40
41$proxy->push_filter(
42  mime     => 'text/html',
43  response => HTTP::Proxy::BodyFilter::tags->new,
44  response => HTTP::Proxy::BodyFilter::simple->new(
45    sub { ${ $_[ 1 ] } =~ s/&($re);/$noaccent{$1}/go; }
46  ),
47  response => HTTP::Proxy::BodyFilter::htmltext->new(
48    sub {
49      tr{�������������������������������������������������������}
50        {AAAAAACEEEEIIIINOOOOOOUUUUYaaaaaaceeeeiiiinoooooouuuuyy};
51      s/($sc)/$sounds{$1}/go;
52      s/([?!]+)/$1 Bork bork bork !/go ;
53      s/(\.+)(\s|$)/$1 Bork bork bork ! /go ;
54       }
55  )
56);
57
58$proxy->start;
59
60