#!/usr/bin/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$

use Cwd;

$dir = cwd;

#initialisation:
$id = 0;
$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];
    &verifi;
    $fila=$file;
    $frda=$frd;
    $file = $ARGV[2];
    &verifi;
    $filb = $file;
  $frdb=$frd;
}
elsif ($ARGV[0] =~ /^\/|(\w{3,11}\.\w?)/i) {
  $fila = $_;
  &verifi;
  $fila = $file;
  $frda=$frd;
  $filb = $ARGV[1];
  &verifi;
  $filb = $file;
  $frdb=$frd;
}
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>);
&verifi;
$fila=$file;
$frda=$frd;

$frd{$fila}=$frd;

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

# ouverture $fila et stockage contenua
open FA, "$fila" or die "Ouverture de $fila impossible $!";
@contenu= <FA>;
close FA || die "Fermeture de $fila impossible $!";
&traitement;

#ouverture de $filb et stockage contenub
open FB, "$filb" or die "Ouverture de $filb impossible $!";
@contenu= <FB>;
close FB || die "Fermeture de $filb impossible $!";
&traitement;

# 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 ($fila =~ /\.\w{1,3}ml$/) {
	#traitemnet par blocs (paragraphe)
	if ($opts eq "b") {
	    #for ( $i = 0 ; $i < scalar( @contenua ) ; $i++) {
	    foreach $l(@contenua) {
		if ($debut_h == 0) {
		    next if ($first >= 1);
		    if ($l =~ /<body\>/i) {
			$debut_h++;
			push @debuth, $l;
			}
		}
		else {
		    if ($l=~ /()[<BR\>|<P\>]()/i) {
			$pa += $1;
			push @nca, $pa;
			$pa = $2;
		    }
		    else {
			$pa += $l;
		    }
		}
	    
	    }
	# traitement par defaut texte/plain et autres
	else {
	    
	}
	#copie dans filout si acumulation dans @nwcontenu
	
    }
    if ($optc eq "b")  {
	foreach $l(@contenua) {
	    if($l =~ /\.\n$/) 
		
#-----------------------------------------------------continuer ici moi je vais jouer


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;
print FO @contenu;
print FO $lblhtmo;
close FO or die "Re_merde c\'est quoi encore $!";

# definir le fichier tmp en lui donnant un nom, un num et un rep (/tmp/tmp/):
($filetmp, $ext) = split(/\./, $filename);
#($lbl, $id) = split(/_/, $filetmp);
$ftmp = "$filetmp" . "\.html";
$fulltmp = "$rep" . "\/" . "$ftmp";

while (-e $fulltmp) {
#  $id++;
  donne_un_nom($ftmp);
  $fulltmp = "$rep" . "\/" . "$ftmp";
}
$tmpdir = "\./tmp";
if (!(-d $tmpdir)) {
  mkdir $tmpdir;
}

$filetmp = "$tmpdir" . "\/" . "$copieID";




print CT "\n\n";
print CT @nwcontenu;
print CT $lblhtmo;
close CT or die "ca couince avec le temporaire $!";


# routine pour donner un nom qui ne detruira pas les autres copies ou l'original
sub donne_un_nom($copieID) {
  my ($copieID) = @_;
  
  $id++;
  $copieID = "$filename" . "_$id" . "\.html";
  #($copie, $ext) = split(/\./, $copieID);
#  ($lbl, $id) = split(/_/, $copie);
  return $copieID;
}

END;
