#!perl -w
# remd: Ce script est fait essentielement pour la traduction, sans toucher          *
# au code source initial. Il conserve le code initial et vous presente les lignes      *
# de texte à la traduction en vous donnant l'original, et la traduction a valider ou *
# a entrer à la main.                                                                                  *
# écrit par alain Adelmar 31 Mars 2004                                                          *
# ----------------------------------------------------------------------------*
#  -écirit par alain Adelmar 12.2003-14.02.2004 v1.0 (pour env Lx et Windows)    |
#                                                                                                            |
#*************************************************************
# $ID$

use Cwd;
$dir = cwd;

local ($mod_affichage, $opd) = 1;
use FrDate;
$fd = maintenant($mod_affichage);
print "date $fd\n";
#initialisation:
$head = $end = $opts = $f = 0;
@h = ("a", "b", "o"); 
$x = "x" x 25;

#------------------hashage pour referance
@a = (a..z);
for $i(0..25) {
	$ha{$a[$i]} = $i;
	}
# mettre en variable les incontournables___
$li = '<LI>';
$etiquette= '<!-- ' . "réalisé par trad_ini le $fd \n\técrit alain Adelmar aadelmar\@free.fr" . '-->' . "\n";
$lblhtm_in = '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">' . "\n" . '<HTML>';
#$lblsgml_in = '<!doctype linuxdoc system>' . "\n\t" . '<ARTICLE>' . "\n\t";
$normal_in = '<font color="#OOOOOO">';
$grise_in = '<font color="#666666">';
$font_out = '</font>';
$lblhtm_out = '</HTML>';
#$lblsgml_out = "\n" . '</ARTICLE>';


#traiter les options & arguments ----

if ($ARGV[0] =~ /^-/) {
	$ARGV[0] =~ s/-//;
	(print "trouver optc\n" and $optc = "b") if ($ARGV[0]=~ /^b/);
	$optc = "m" if ($ARGV[0]=~ /^m/);
	$optc = "p" if ($ARGV[0]=~ /^p/);
	$optc = "l" if ($ARGV[0]=~ /^l/);
	$opts="html" if  ($ARGV[0]=~ /H$/);
	$opts="sgml" if  ($ARGV[0]=~ /S$/);
	$opts="txt" if  ($ARGV[0]=~ /T$/);
	$argvs++ if ($ARGV[0]=~ /s/);
	$file = $ARGV[1];
	&vo;
	$file = $ARGV[2];
	&vo;
}
elsif ($ARGV[0] =~ /^\w/) {
	$file = $ARGV[0];
	&vo;
	$file = $ARGV[1];
	&vo;
}
else {
	print "Usage: tradup [-blmp|sHST] (premier_fichier) (segond_fichier)\n";
	&init_file;
}


sub init_file {
	# si utilisateur n'a pas donné le nom du premier fichier en arguments (l'initial):
	print "Entrez le nom du premier fichier à traiter (original):\n";
	chomp($file = <STDIN>);
	&vo;


	#definir le mode d'affichage pour FrDate
	print "Entrez le nom du segond fichier à traiter (le modifié):\n";
	chomp($file = <STDIN>);
	&vo;
}

&melange;

sub melange {
	foreach $z(@nca, @ncf) {
		print "c est z: $z\n";
		push @nnc, $z;
	}
}



# choix et ouverture de filout
print 'donner un nom au fichier a créé (exemple: /home/toto/travail.' . "$optc" . "):\n";
chomp ($filout=<STDIN>);
# si le mecton à oublié le path, lui coller le rep courant en guise de path, ca lui fera les pieds.
if ($filout !~ /^\//) {
	$filout = "$dir" . "\/$filout";
}

while (-e $filout) {
	$filout = "$filout" . "~";
}
open FO, ">$filout" or die "Ouverture de $filout impossible $!";

sub traitement {
	#traitement des fichiers style html tml xhtml sgml htm etc...
  if ($file =~ /\.html$/) {
		#traitemnet par blocs (paragraphe)
		#dessous c'est eq qu'il faut mettre mais pour l'exemple on s'en fout
		if ($optc eq "b") {
			#for ( $i = 0 ; $i < scalar( @contenu ) ; $i++) {
			if($f == 0) {
				foreach $l(@init_file) {
					if ($head == 0) {
						if ($l =~ /<body\>/i) {
							$head++;
							push @head, $l;
							# ici on peut griser le document (dans son ensemble) b, style: if ($second) { $l= "<color font....
						}
						else {
							push @head, $l;
						}
					}
					else {
						if($end == 0) {	
							if ($l=~ /(.*?)[<BR\>|<P\>](.*?)/i) {
								chomp $l;
								$pa = "$pa" . "$1" . "$font_out\n";
								push @na, $pa;
								$pa = "$grise_in" . "$2";
							}
							elsif ($l =~ /<\/body\/>|<\/html\/>/i) {
								push @corps, $l;
								if($pa !~ /\n$/) {
									$pa = "$pa" . "$font_out\n";
								}
								else {
									push @na, $pa;
								}
								@nca = @na;
								$end++;
							}
							else {	
								push @corps, $l;
								if($pa eq "") {
									chomp $l;
									$pa = "$grise_in" . "$l";
								}
								else {
									$pa = "$pa" . "$l";
								}
							}
						}
						else {
							#---a saquer
							print "$x\n" . "@head\n" . "@nca\n" . "@ncf" . "@end";
						}
					}
				}
			}
			else {
				#----------------------------
				$end = $head = 0;
				foreach $l(@contenu) {
					if ($head == 0) {
						if ($l =~ /<body\>/i) {
							$head++;
						}
					}
					else {
						if($end == 0) {
							if ($l=~ /(.*?)[<BR\>|<P\>](.*?)/i) {
								chomp $l;
								$pf = "$pf" . "$1" . "\n";
								push @nf, $pf;
								$pf = $2;
							}
							elsif ($l =~ /<\/body\/>|<\/html\/>/i) {
								$end++;
								if($pf !~ /\n$/) {
									$pf = "$pf" . "$font_out\n";
								}
								push @nf, $pf;
								push @end, $l;
								@ncf = @nf;
							}
							else {	
								push @corps, $l;
								if($pf eq "") {
									chomp $l;
									$pf = "$l";
								}
								else {
									$pf = "$pf" . "$l";
								}
							}
						}
						else {
							push @end, $l;
						}
						#-----	
					}
				}
			}
		}
		# traitement par defaut texte/plain et autres
		else {
			print "je n'ai pas développé cette branche sorry, réessayé avec l'oiption -b\n";
			# autre option que b
		}
		#copie dans filout si acumulation dans @nwcontenu
	}
	elsif ($file =~ /\.\w{1,4}$/) {
		print "bla, bla \n";
	}
	else {
		print "bla\n";
	}
}



sub verifi {
	unless (-e $file) {
		print "please, write the right name for file\n";
		chomp ($file=<STDIN>);
	}
	$frd = datefichier($mod_affichage, $opd, $file);
	if ($frd eq "") {
		@statfilename = stat($file); 
		$frd = localtime($statfilename[8]);
	}
	$crt = "$x\n Rapport du contenu de $file : $frd \n";
	print "$crt";
}


#print FO $lblhtm_in;
print FO @head;
print FO @corps;
print FO @nnc;
print FO @end;
#print FO $lblhtm_out;
close FO or die "Re_merde c\'est quoi encore $!";

sub changement {
	my $mot =~ /[^<.*?>]/g;
	my $tag =~ /<.*?>/g;
	print "$x\nmaintenant on reconstruit avec le code initial\n";
	
	#preparation de la traduction avec fransous
	foreach $l(@contenu) {
		my $u++;
		$l =~ s/$tag//g;
		$h_l{$u} = $l;
	}
	#preparation de la traduction avec source english
	my $debut = 0;
	foreach $line(@init_file) {
		$cl++;
		$mot =~ /[^<.*?>]/g;
		if($debut ==0) {
			if ($line =~ /<BODY>/i) {
				$debut++;
			}
		}
		elsif ($fin == 0) {
			if ($line =~ /<\/body\/>|<\/html\/>/i) {
				$fin++;
			}
			else {
				@ls_m = $line =~ /$mot/ig;
				&ligne_par_ligne;
			}
		}
		else {
			#fin du document que l'on a dans @end
		}
		push @nwcontenu, $line;	
	}
	@pls=split(/\\|\//, $file_source);
	$root_filename=pop @pls;
	$filerep = "\.\/nw_$root_filename";
	if(-e $filerep) {
		$filerep = "$filerep" . "~";
	}
	open FRP, ">$filerep" or die "Ouverture de $filerep impossible $!";
	print FRP "@head";
	print FRP "@nwcontenu";
	print FRP "@end";
	close FRP or die "Fermeture de $filerep impossible $!";
}

sub traduit {
	$line=~ s/(.*?)$motangl(.*?)/$1$e$2/;
}


sub vo {
	&verifi;
	$frd=datefichier($mod_affichage, $opd, $file);
	${$h[$f]}=$frd;
	&ouvre;
	$f++;
}

sub ouvre {
	if($file =~ /^\w/) {
		$file = "$dir\/$file";
	}
	open F, "$file" or die "Ouverture de $file impossible $!";

	if($f == 0) {
		$file_source =$file;
		@init_file = <F>;
		}
	else {
		$file_trad = $file;
		@contenu = <F>;
	}
	close F || die "Fermeture de $file impossible $!";
	&traitement;
}

sub ligne_par_ligne {
	foreach $e(@ls_m) {
		$motangl = $e;
		$oldmot = $motangl;
		print "$x\nh pour aide\n$motangl\n";
		for ($i = 0; $i<6;$i++) {
			$w = ($cl - 2) + $i;
			print "$ha{$a[$i]}: $h_l{$w} \n";
		}
		$trad = <STDIN>;
		chomp $trad;
		if($trad eq "") {
			&traduit;
		}
		elsif ($trad =~ /\b\w\b/) {
			$w = ($cl -2) + $ha{$trad};
			$e = "$h_l{$w}";
			&traduit;
		}
		elsif ($trad =~ /\w+?/i) {
			$e = $trad;
			&traduit;
		}
		else {
			print "il y a une couille ligne $cl\n";
		}
	}
}



END;
