#!/usr/bin/perl
# ************************************************************************
#      for Linux and UNIX-Like |   made by alain Adelmar                 *
# remd: petit logiciel de traduction de mot simple anglais->français     *
# et vice verca ainsi qu'une option edit pour etoffer le dico.           *
# Cette version peut aussi traduit un mot (anglais) en tant qu'argument  *
# et repond sur une ligne. expl: taf append => continuer                 *
# son fichier resource : dico_uk-fr (dico perso de quelques kilos)       *
# Ce script tourne trop bien. Pour updater les dico_uk-fr => updico.pl   *
# Ce script tourne sur tout environement (Linux - Windows - etc) à la    *
# condition que dico_uk-fr soit installé dans (le répértoire courant) ou *
# les paths suivants: /home/common/bin ou ./bin pour Linux               *
# ou définissez votre propre path ligne 38                               *
# Requis le module Datefr.pm sinon mettre lignes 20 et 21 en commentaires*
# alain adelmar 06/Juillet/2002~09/Mai/2006.       version: 2.04         *
#*************************************************************************
#system("clear");


#use Datefr;
#our $opt = 3;
#our $mod_affichage = 5;
#our $fd = maintenant($mod_affichage);



use Cwd;
my $dir = getcwd;

if ($ENV{"MACHTYPE"}=~ /[msys|cygwin|gnu]$/) {
  $gnus++;
  print "this is a real gnu OS, congratulation\n";
}
elsif ($ENV{"PATH"}=~ /^\//) {
  $gnus++;
  print "this is a real gnu OS, congratulation\n";
}

@gnul = ("\\", "\/");

# @ds = split(/$gnul[$gnus]/, $d);
# $ds = pop @ds;
$pref = '/home/common/bin/dico_uk-fr';
if(-e $pref) {
  $dico = $pref;
}
else {
  $pref = "$dir" . "$gnul[gnus]" . "dico_uk-fr";
  if (-e $pref) {
    $dico = $pref;
  }
  else {
    die "erreur de path, il est impossible a taf de trouver dico_uk-fr\nsolution: modifier la ligne 53 de taf ou\ntrouver le et copier le au bon endroit $!";
  }
}
# donc entrer ici la valeur de $dico (expl: $dico = "\.\/dico_uk-fr";)
# sinon placer le ou vous voulez en definissant un path correct dans la ligne suivante
# $dico = "remplacer_cette_phrase_par_un_path";
$x = "x*" x 28;
$donc = "\n\tdonc\n";

# 1er partie avec argument qui ne traite qu'un seul mot sur une ligne.
if($ARGV[0] ne "") {
  if ($ARGV[0] eq "-v") {
    print "\ntaf vers: 1.05\n";
    exec 'quoi taf';
    die "$x\n";
  }
  elsif ($ARGV[0] =~ /^\"|\"$/) {
    s/^\"()\"$/$1/;
    $mota = $1;
  }
  else {
    $mota = $ARGV[0];
  }
  $argv = 1;
  &lire_dico;
  &anglais_francais;
}
else {
  print "\n$x\nVersion longue de taf (sans argument =  accés au menu) *\nA noter: Vous auriez pu entrer un mot a traduire en    *\nguise d'argument, pensez y la prochaine fois.          *\n                  _  alain Adelmar  _                  *\n$x\n";
  $argv = 0;
}
# 2eme partie la commande sans argument qui ouvre le menu.

print "Bienvenu sur le petit traducteur taf                   *\n                    aadelmar\@free.fr                   *\n$x\n";
MENU:
print " _ Anglais-francais(1)\n _ Francais-anlais(2)\n _ Ajouter quelques lignes au dico(3)  \.\.\.  reponse: ";  
$trad = <STDIN>;
chomp $trad; 

&lire_dico;

#menu possible de l'application**************************
if ($trad <= 1) {
  print "$donc---- Anglais-francais ----\n\n";
  $trad = "af";
  &le_mot($mota);
  &anglais_francais;
}
elsif ($trad == 2) {
  print "$donc---- Francais-anglais ----\n";
  $trad = "fa";
  &le_mot($mota);
  &francais_anglais($trad);
}
elsif ($trad >= 3) {
  print "$donc---- Ajout au Dico perso ----\n";
  print "Les lignes que vous ajoutez à votre dico personnel\ndoivent être écritent:\nmot_anglais,mot_français1,mot_francais2,mot_français3|exemple_angl = en_francais\n";
  print "(ne laisser pas d'espace entre les mots, juste une virgule)\n";
  print "on y va? (o/n)\t";
  $trad = "ed";
  chomp ($repon = <STDIN>);
  &oui_non($repon);
  &edition;
}
  
print "\n$x\n";
print "tchao !!!\n$x\n";


sub anglais_francais {
  while ($mota ne "quitte"){
    foreach $ligne(@traduction) {
      chomp($ligne);
      # laisser comme ca car plus complet
      if ($ligne =~ /^$mota/) {
	($line, $exemple)= split(/\|/, $ligne);
	($angl, $fr, $fr1, $fr2, $fr3) =split(/,/, $line);
	print "$angl = $fr\t$fr1\n";
	if ($fr2 ne "") {
	  print "$angl = $fr2\t$fr3\n";
	}
	if ($exemple ne "") {
	  print "exemple: $exemple\n";
	}
      }
    }
    if ($argv == 0) {
      &choix;
    }
    else { die "$x\n(Pas d'autre mot pour $mota) $!"}
  }
  # print "tchao !!!\n";
}

sub francais_anglais($trad) {
  while ($mota ne "quitte"){
    foreach $ligne(@traduction) {
      ($line, $exemple)= split(/\|/, $ligne);
      ($angl, $fr, $fr1, $fr2, $fr3) =split(/,/, $line);
      if ($fr =~ /^$mota/) {
	print "$fr = $angl\n";
      }
      if ($fr1 =~ /^$mota/) {
	print "$fr1 = $angl\n"; 
      }
      if ($fr2 =~ /^$mota/) {
	print "$fr2 = $angl\n";
      }
      if ($fr3 =~ /^$mota/) {
	print "$fr3 = $angl\n";
      }
    }
    &choix;
  }
  # print "tchao !!!\n$x\n";
}

sub edition {
  while(! oui_non($repon)) {
  LABEL:print "\nEntrez votre ligne\n";
    chomp ($ligne_in = <STDIN>);
    ($linei, $exemplei)= split(/\|/, $ligne_in);
    ($angli, $fri, $fr1i, $fr2i, $fr3i) =split(/,/, $linei);
    foreach $ligne(@traduction) {
      ($line, $exemple)= split(/\|/, $ligne);
      ($angl, $fr, $fr1, $fr2, $fr3) =split(/,/, $line);
      if ($angl eq $angli|| $fr eq $fri ) {
	print "cette ligne présente des similitudes avec la ligne:\n";
	print "$angl = $fr\t$fr1\t$fr2\t$fr3\t$exemple\n";
	print "voulez vous quand même entrer votre ligne dans le dico?\n";
	$resp = <STDIN>;
	chomp $resp;
	if ($resp =~ /^n/i) {
	  print "elle ne sera donc pas intégré à votre dico\n";
	  goto LABELMENU;
	}
      }
    }
    $ligne_in = "$ligne_in" . "\n";
    push @traduction, $ligne_in;
    print "on continu? (o/n):\t";
    chomp($repon = <STDIN>);   
  }
  open(D, ">$dico") or die "Ouverture de dico impossible $!";
  print D @traduction;
  close D or die "fermeture impossible $!";
  print "Vos lignes ont été rajouté au dictionnaire de traduction $dico\n";
  &choix;
}	 

sub choix {
  print "---------- (quitte) quitte, (menu) menu ou un autre mot:\n";
   $mota= <STDIN>;
   chomp $mota;
   if ($mota eq "menu") {
      goto MENU;
    }
 }

sub le_mot($mota) {
  print "entrer votre mot pour le traduire ou (menu) menu ou (quitte) quitter)\n";
  chomp ($mota = <STDIN>);
}

sub oui_non($repon) {
  my ($repon) = @_;
  $repon =~ tr/A-Z/a-z/;
  if ($repon =~ /^o|y/) {
    return 0;
  }
  elsif  ($repon =~ /^n/) {
    return 1;
  }
  else {
    print "\a";
    print "Veuillez repondre par Oui ou par non\n";
    chomp ($repon = <STDIN>);
    &oui_non($repon);
  }
}

sub lire_dico {
  #lecture du dico******************************************
  open DATA, "$dico" or die "Ouverture de dico impossible $!";
  @traduction = <DATA>;
  close DATA || die "fermeture impossible $!";
}

END;
