#!/usr/local/bin/perl -s use Fcntl; require POSIX; &POSIX::setlocale("LC_CTYPE","iso_8859_1"); # carregar o dicionário (todo em minúsculas) # regras com sequencias de nao mais que 3 palavras # %dict = split (/[=\n]/, `cat dict2`); # word definition: $w='\w+(?:-\w+)*'; while (<>) { s/=/@@/g; # para guardar os '=' $_ = '=' . $_ ; # poe um = no inicio da linha. # "=" define a posicao actual na tradução while(/=/){ if (/=($w $w $w)(\s*)/ and defined $dict{lc($1)}) { #regra de 3 palav s/=($w $w $w)(\s*)/traduz($1,$2)/e} elsif(/=($w $w)(\s*)/ and defined $dict{lc($1)}) { #regra de 2 palav s/=($w $w)(\s*)/traduz($1,$2)/e} elsif(/=($w)(\s*)/ and defined $dict{lc($1)}) { #regra de 1 palav s/=($w)(\s*)/traduz($1,$2)/e} elsif(/=($w)(\s*)/) { # palavra desconhecida s/=($w)(\s*)/+$1$2=/} else { s/=\s*$//; # chegou-se ao fim da linha s/=([^\w])/$1=/;} # avancar outros caracteres } s/@@/=/g; # volta a por os = print; } sub traduz{ my ($a,$s)= @_ ; if (defined $dict{$a}) {$dict{$a}."$s="} # =gato -> cat = elsif (defined $dict{lcfirst($a)}) {ucfirst($dict{lcfirst($a)})."$s="} # =Gato -> Cat = elsif (defined $dict{lc($a)}) {uc($dict{lc($a)})."$s="} # =GATO -> CAT = else {"=$a$s"} # =ggg -> =ggg }