#!/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
}
