#!/usr/bin/perl
$filea = '/Dokumenty/Hanka/VSE_NA_DIPLOMKU/ocislovane/czpanorEU.txt';
$fileb = '/Dokumenty/Hanka/VSE_NA_DIPLOMKU/ocislovane/itpanorEU.txt';
$filec = '/Dokumenty/Hanka/VSE_NA_DIPLOMKU/po/new.txt';
$filed = '/Dokumenty/Hanka/VSE_NA_DIPLOMKU/slovniky/novitc.txt';
$filee = '/Dokumenty/Hanka/VSE_NA_DIPLOMKU/po/nenalezene.txt';

open(INFO, $filea);    # otevøení souboru  
@lines = <INFO>;    # nactení obsahu souboru do pole
$celk=substr(@lines[$#lines],2);
$celk= int $celk;
close(INFO);      # uzavøení souboru   

sub riempi_m
{ while (0==0)
  { $cojevpoli=pop(@matrice);         #vyprazdneni pole
    last if (!$cojevpoli);  
	}
	if (@_[0] ne '')
	{ push (@matrice, @_[0]); 
	}
  while ($prvek=<ITAL>)         #naplneni pole jednou vetou
  { $x=substr($prvek,2); 
    $x=int $x;  
    if (($x==($numb))||($x==0))               
	  {  push (@matrice, $prvek); 
    }  
    else 
    {  return $prvek; 
       last;
    }  
	}
}

sub napln_p
{ while (0==0)
  { $cojevpoli=pop(@pole); 
     last if (!$cojevpoli);         #vyprazdneni pole
	}
  if (@_[0] ne '')
	{ push (@pole, @_[0]); 
	}
  while ($prvek=<CZE>)             #naplneni pole jednou vetou
  { $x=substr($prvek,2);
    $x=int $x;    	  
    if (($x==$numb)||($x==0))                
	  {  push (@pole, $prvek); 
    }  
    else 
    {  return $prvek; 
       print "provadi se veta $numb\n";
       last;
    }   
	}
}

sub dotaz_slovnik
{  $apom=@_[1];
   $variant=0;
   open(SLOVNIK, $filed);      # otevrení slovniku
   while ($slovnik = <SLOVNIK>)
   {  $c=0;
      @hesla = split (/\s/, $slovnik);       #co radek,to: ceske slovo // it.slova /c
      @hesla[0]=~ tr/a-z/A-Z/;
      if (@_[0] eq @hesla[0])  
      {  $variant=1;
         while (@hesla[++$c] !~ /\\\\/) 
         { } 
         do
		     {  @hesla[++$c] =~ tr/a-z/A-Z/;    #italske ekvivalenty ze slovniku         
			      if ((length(@hesla[$c]))>2)     #vylouceni clenu a predlozek
			      {  foreach $phrasi (@matrice)
              {  if ($phrasi =~ ($zacatek.@hesla[$c].$apom))
                 {    print NEW @polozka[0];
		                  print NEW "\t";
		                  print NEW @polozka[1]; 
		                  print NEW "\t";		                
		                  @elem = split (/\s/, $phrasi);
		                  print NEW @elem[0];
		                  print NEW "\t";
		                  print NEW "@elem[1]";
		                  print NEW "\n";
                    close (SLOVNIK);      #uzavreni slovniku 
                    return 0;
                 }
              }
            }
         }
         while (@hesla[$c+1] =~ /\\c/);
      }
      if ((@_[0] ne @hesla[0])&&($variant==1))
      {  print NENAL "@polozka[0]\t@polozka[1]\t@polozka[2]\t@polozka[3]\n";
         close (SLOVNIK);      #uzavreni slovniku  
         return 0;
      }  
    }   
   if ($variant==0)
   {  print NENAL "@polozka[0]\t@polozka[1]\t@polozka[2]\t@polozka[3]\n";
      close (SLOVNIK);      #uzavreni slovniku  
      return 0;
   }    
}

open(CZE, $filea);            # otevøení souboru pro vstup
open(ITAL, $fileb);            # otevøení souboru pro vstup
open(NEW, ">>$filec");      # otevøení souboru pro vystup
open(NENAL, ">>$filee");      # otevøení souboru pro vstup

$numb=0;
@pole[0]='';
@matrice[0]='';
$sub = '#S';
$ver = '#V';
$adj = '#A';
$zbytek='';
$resto='';
while ($numb<$celk)
{ ++$numb;
  $zzbytek=&napln_p($zbytek);
  $rresto=&riempi_m($resto);
  print "Jsou automaticky propojovana slova z $numb.vety.\n";
  foreach $veta (@pole)
  {  @polozka = split (/\s/, $veta); 
     $lemma= @polozka[$#polozka];
     $lemma =~ tr/a-z/A-Z/;                           #lemma do kapitalek 
     if ((@polozka[($#polozka-1)]) =~ /k1/) 
     {  &dotaz_slovnik($lemma, $sub); 
        $lemma='';
     } 
  }
  foreach $veta (@pole)
  {  @polozka = split (/\s/, $veta); 
     $lemma= @polozka[$#polozka];
     $lemma =~ tr/a-z/A-Z/;                           #lemma do kapitalek
     if ((@polozka[($#polozka-1)]) =~ /k5/) 
     { # if ($lemma !~ /[AVERE,ESSERE]/)
        #{ print "slovesa ano\n";
          &dotaz_slovnik($lemma, $ver);
       # }
        $lemma='';
     } 
  }
   foreach $veta (@pole)
  {  @polozka = split (/\s/, $veta); 
     $lemma= @polozka[$#polozka];
     $lemma =~ tr/a-z/A-Z/;                           #lemma do kapitalek
     if ((@polozka[($#polozka-1)]) =~ /k2/) 
     {  &dotaz_slovnik($lemma, $adj); 
        $lemma='';
     } 
  }
  $resto=$rresto;
  $zbytek=$zzbytek;
}

close (NEW);
close (NENAL);
close (CZE);
close (ITAL);

print "konec\n";

open(NEW, ">>$filec");      # otevøení souboru pro vystup
open(NENAL, $filee);      # otevøení souboru pro vstup
open(ITAL, $fileb);            # otevøení souboru pro vstup

$numb=0;
$resto='';

while ($numb<=$celk)               #probiha tolikrat,kolik je vet v ital.casti
{ $uloz='';
  if ($nenal=<NENAL>)
  {  
  $cech=substr($nenal,2);          #zjisti cislo vety nenalelezeneho slova
  $cech= int $cech;
  print "$cech\n";
  while ($cech>$numb)              #naplneni 1 italskou vetou (podle numb) 
  { $numb++;
    $rresto=&riempi_m($resto); 
    $resto=$rresto;
  }                  
  print "$nenal\n";                  #na obrazovku nabidne nenalezene slovo
  chop ($nenal);
  @nen = split (/\s/, $nenal);
  $zapis=0;                    
  foreach $line (@matrice)         #na obrazovku nabidne prislusnou vetu
  { @sl = split (/\s/, $line);
    print "@sl[0] @sl[1]\n";
  }
  $h=0;
  while (0==0) 
  { print "zadejte kod italskeho slova, ktere mam propojit nebo enter.\n";
    $uloz=<>;      
    if ($uloz=='')
    {  if ($h==1)
       {  print "jojo";
          print NEW "\n";
       }
       last;
    }
    chop($uloz);
    foreach $line (@matrice)                
    { @sl = split (/\s/, $line);
      $pom=substr(@sl[0],2);                 
 #     chop($pom);chop($pom);
      if ($uloz eq $pom)               #zapise do souboru nove propojene ces-it. spojeni
      { $h=1;
        if ($zapis==0)
        { print NEW "$nen[0]\t"; 
          print NEW "$nen[1]\t"; 
          $zapis=1;
        }
        print NEW @sl[0];
        print NEW "\t";
        print NEW @sl[1];
        print NEW "\t";
        last;
      }
    }
  }
}
else
{ last;}
}


close (ITAL);
close (NEW);
close (NENAL);

$_=<>;
