$lm='[a-záéíóúâêôàãõçüöñ]';                      # letra minuscula
$lM='[A-ZÁÉÍÓÚÂÊÔÀÃÕÇÜÖÑ]';                      # letra Maiuscula
$l1='[A-ZÁÉÍÓÚÂÊÔÀÃÕÇÜÖÑa-záéíóúâêôàãõçüöñ0-9]'; # letra e numero
$c1='[^»a-záéíóúâêà,;?!)]';

$terminador='([.?!;:]+|<[pP]>|<br>)';
$abreviaturas='\b(Dr|eng|[A-Z])\.|\d\.\d|';

sub jj{
  my $par=shift;
  
}
  

sub separa_frases {
   my $par = shift;

#   $par=&tratar_pontuacao_interna($par);

#print "Depois de tratar_pontuacao_interna: $par\n";

# separar esta pontuação, apenas se não for dentro de aspas, ou seguida 
# por vírgulas
   $par=~s/([?!])([^»,§?!)"])/$1.$2/g; 

#print "Depois de tratar do ?!: $par";

# separar as reticências entre parenteses apenas se forem seguidas de nova 
# frase, e se não começarem uma frase elas próprias
   $par=~s/($lm)§([)»]) *($lM)/$1§$2.$3/g; 
   $par=~s/($lm\")§([)»]) *($lM)/$1§$2.$3/g; 

#print "Depois de tratar das retic. seguidas de ): $par";

# separar os pontos antes de parênteses se forem seguidos de nova frase
   $par=~s/($lm)\.([)]) *($lM)/$1 + $2.$3/g; 

# separar as reticências apenas se forem seguidas de nova frase, e se não 
# começarem uma frase elas próprias
   $par=~s/($lm)§ ($c1))/$1§.$2/g; 

#print "depois de tratar das reticencias seguidas de nova frase: $par\n";

# tratar dos dois pontos: apenas se seguido por discurso directo em maiúsculas
   $par=~s/: «($lM)/:.«$1/g;  

# tratar dos dois pontos se eles acabam o parágrafo (é preciso pôr um espaço)
        $par=~s/:\s*$/:. /;

# tratar dos pontos antes de aspas
   $par=~s/\.»([^.])/+».$1/g; 

# tratar das reticências antes de aspas
   $par=~s/§»([^.])/§».$1/g; 

# tratar das aspas quando seguidas de novas aspas
        $par=~s/»\s*«/». «/g;

# tratar de ? e ! seguidos de aspas quando seguidos de maiúscula
        $par=~s/([?!])» ($lM)/$1». $2/g;

# tratar dos pontos antes de aspas precisamente no fim
   $par=~s/\.»$/+». /g; 

# tratar das reticências e outra pontuação antes de aspas precisamente no fim
   $par=~s/([!?§])»\s*$/$1». /g;

#tratar das reticências precisamente no fim
   $par=~s/§\s*$/§. /g;

# tratar dos pontos antes de parêntesis precisamente no fim
   $par=~s/\.\)$/+\). /g;

# tratar de parágrafos que acabam em letras ou +, chamando-os fragmentos
        if ($par =~/$l1\s*\)*\s*$/) {$fragmento=1;}

# se o parágrafo acaba em "+", deve-se juntar "." outra vez.
        $par=~s/([^+])\+\s*$/$1+. /;

# se o parágrafo acaba em abreviatura (+) seguido de aspas, deve-se juntar "."
        $par=~s/([^+])\+\s*(["»])\s*$/$1+$2. /;

   @sentences=split/\./,$par;
        if (($#sentences > 0) and not $fragmento) {
           pop(@sentences);
        }

        $resultado="";
        $num_frase_no_paragrafo=0; # para saber em que frase pôr <s frag>
        foreach $frase (@sentences) {

       $frase=&recupera_ortografia_certa($frase);

# frase normal acabada por pontuação
       if ( ($frase=~/[.?!:;][»"]*\s*$/) or ($frase=~/[.?!] *\)[»"]*$/) ) { 
                $resultado.="<s> $frase </s>\n";
            }
       elsif (($fragmento) and ($num_frase_no_paragrafo == $#sentences)) {
                $resultado.="<s frag> $frase </s>\n";
                $fragmento=0;
            }
            else {
                $resultado.="<s> $frase . </s>\n";
            }
            $num_frase_no_paragrafo++;
   }

$resultado;
}
