#!perl -w
# remd: Ce script fait ressortir un texte par rapport à un autre.  alain Adelmar                *
# A l'origine, je l'ai écris pour lors de traduction, pour laisser l'original en grisé ).       *
# Il alterne en grisé ligne par ligne ou paragraphe par paragraphe le contenu de deux fichiers, *
# par defaut. Mais peut éventuellement travaillé sur un seul fichier qui aurai déjà été traité. *
# Il travaille sur plusieurs formats (txt/plain, html, etc...) et sortir en (html, txt ou sgml).*
# usage: tradup [-blmp|sHST] (premier_fichier) (segond_fichier)	                        	*
# les options de clivage:                                                                       *
# -b (bloc) clivage par bloc, paragraphe (= phrase + point + une ligne vide)                    *
# -l (ligne) clivage par ligne (retour à la ligne) (par defaut)                                 *
# -p (phrase) clivage par phrase (jusqu'au point)                                               *
# -m (mot) mot par mot                                                                          *
# les options de sortie:                                                                        *
# -H (pour html) le script créera un fichier html (original en grisé)(par defaut)               *
# -S (pour sgml)  le script créera un fichier sgml (l'original en italique)                     *
# -T (pourtexte)  le script créera un fichier texte                                             *
# l'option de travail: (pas fini)                                                               *
# -s (pour single) lorsque le fichier à déjà les deux versions                                  *
# ----------------------------------------------------------------------------------------------*
# (pour Linux et Windows ) -écirit par alain Adelmar 12.2003-14.02.2004 v1.0 Pessac Gironde fr  |
#                                                                                               | 
#************************************************************************************************
# $ID$                  revoir ne s'arrete pas

use Cwd;

$dir = cwd;

#initialisation:
$id = $f = 0;
@h = ("a", "b", "o"); 
$x = "x" x 25;
$file = "";
$frd = do('FrDate.pl');

# mettre en variable les incontournables___
$li = '<LI>';
$etiquette= '<!-- ' . "réalisé par tradup le $dt \n\técrit alain Adelmar aadelmar\@free.fr" . '-->';
$lblhtm_in = '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//FR">' . "\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 ----
while (@ARGV) {
	if ($ARGV[0] =~ /^-/) {
  		s/-//;
   	($optc="b") if /^b/;
   	($optc="m") if /^m/;
   	($optc="p") if /^p/;
   	($optc="l") if /^l/;
   	($opts="html") if /H$/;
   	($opts="sgml") if /S$/;
   	($opts="txt") if /T$/;
   	$argvs++ if /s/;
   	$file = $ARGV[1];
   	&vo;
   	$file = $ARGV[2];
		&vo;
	}
	elsif ($ARGV[0] =~ /^\/|(\w{3,11}\.\w?)/i) {
		# par defaut $optc et $opts
  	$file = $_;
  	&vo;
  	$filb = $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, @ncb) {
		push @nnc, $z;
		}
	}



# choix et ouverture de filout
print 'donner un nom au fichier a créé (exemple: /home/toto/travail.' . "$opts" . "):\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 !~ /^\//) {
	s/^\.\///;     #au cas ou il aurai entré un path relatif
	$filout = "$dir" . "\/$filout";
	}

while (-e $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 =~ /\.\w{1,3}ml$/) {
		#traitemnet par blocs (paragraphe)
		if ($opts eq "b") {
	    	#for ( $i = 0 ; $i < scalar( @contenu ) ; $i++) {
	    	foreach $l(@contenu) {
				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 ($l=~ /()[<BR\>|<P\>]()/i) {
						$pa += $1;
						push @nc, $pa;
						$pa = $2;
		    			}
			 			# si c'est la fin ou elsif ($l =~ /<\/html\/>/i) ou ($l=~/<\/body\/>) passe le prems et copie le second
		    		elsif ($l =~ /<\/body\/>|<\/html\/>/i) {
						push @nc, $pa;
						# peut etre pas obliger de recopier cette merde
			 			if ($f eq 1) {
							push  @nc, $l;
							@ncb = @nc;
							}
						else  {
							@nca =@nc;
							}
						}
					else {		
						$pa += $l;
		    			}
					}
	    		}
			# retourner pour le prochain
			}
		# traitement par defaut texte/plain et autres
		else {
	   	# 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=do('FrDate.pl');
	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 @nnc;
print FO $lblhtm_out;
close FO or die "Re_merde c\'est quoi encore $!";



sub vo {
	&verifi;
  ${$h[$f]}=$frd;
	&ouvre;
	$f++;
	}
	
sub ouvre {
	open F, "$file" or die "Ouverture de $file impossible $!";
	@contenu= <F>;
	close F || die "Fermeture de $file impossible $!";
	&traitement;
	}
	
	
END;
