#!/usr/bin/perl -w
# remd: Transforme un fichier texte en fichier html.  v2.2  alain Adelmar *
# Il créra un index en transformant les chapitres numerotés en liens      *
# dynamiques appellant les sections transformés en pages et sous-sections *
# en chapitres ((option -n)par defaut). Grâce au jeu d'options il pourra  *
# le faire à partir de texte ne comprenant que des titres et sous-titres  *
# défini par des lignes vides et tabulations (option -t) ou des textes ne *
# comprenant que des titres en Maj (style page de man en text/plain) (-m) *
# Il accépte aussi le nom du fichier à traiter en tant qu'argument        *
# usage: txt2html [-mnt] filename...                                      *
# options:                                                                *
# -m    chapitres et sous-chapitres définis par des MAJUSCULES.           *
# -n    chapitres et sous-chapitres définis par des numeros (par défaut). *
# -t    chapitres et sous-chapitres définis par des tabulations.          *
#   --------------------------------------------------------------        *
# ( Linux & UNIX-Like ) - écrit par alain Adelmar 18.03.2001~ 11.12.2003  *
#**************************************************************************
# $ID$
# voir le nom de fichier pour les liens entre XWindow et copie_xwind
use Cwd;

$dir = cwd;

$id = 0;
$x = "x" x 25;

#traiter les options & arguments ----
if (defined $ARGV[0]) {
  foreach $_ (@ARGV) {
    ($arg = $_ and &traite_mode($arg)) if /^-\w/;
    #($ma_date = $ma_date_h) if /^--h/;
    if ($_ =~ /\w{3,}.*?$/) {
      $filename = $_;
      $argv++;
      &ouvrir($filename);
    } 
  }
}
else {
  print "Usage:\ttxt2html [-mnt] [nom_de_fichier]\n";
  $argv = 0;
  $filename ="";
  &ouvrir($filename);
}

$bienvenu = "$x\tx $dt x\n$x\nBienvenu sur l'éditeur alEd de Jago\n   editeur alain A_d_e_l_m_a_r\nTaper Ctr-D pour sortir\n\n$x\n\n";    

# mettre en variable les incontournables___
$p_s_s = '<A HREF="lien_ici">pr&eacute;c&eacute;dant</A> | <A HREF="lien_ici">suivant</A> | <A HREF="index.html">sommaire</A>';
$li = '<LI>';
$lblhtm = '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">' . "\n" . '<HTML>';

$lblhtmo = '</HTML>';
$h_ref = '<H REF="' . "s" . "$numbrut" . '">' . "$line" . '</H></H3>' . "\n"; 
$ancre_in = '<H3><A NAME="' . "s" . "$numbrut" . "\><\/A\>";

#--------------------------------------------------------------------------
#------- format de date pour file (normal = aaammjj | complet = aaammjj:%%%)

@lsjour = qw(
	     Dimanche
	     Lundi
	     Mardi
	     Mercredi
	     Jeudi
	     Vendredi
	     Samedi
	     );

for $i(0 ..6) {
  $fj{$i} = $lsjour[$i];
}

$min =(localtime(time()))[1];
$h =(localtime(time()))[2];
$an =(localtime(time()))[5];
$sjour =(localtime(time()))[6];
$fjour = $fj{$sjour};
$datos = localtime (time);
@lstnow = localtime (time());
$j = $lstnow[3];
$m = $lstnow[4]+1;
if ($min <= 9) {
  $min = "0" . $min;
}
if ($h <= 9) {
  $h= "0" . $h;
}
if ($j <= 9) {
  $j= "0" . $j;
}
if ($m <= 9) {
  $m = "0" . $m;
}
if ($an >= 100) {
  $an=~ s/1()/20/;
}
else {
  $an= "1" . $an;
}
#----------- pour centieme de journée exp: 25 = 25% de journée ou 25 quart d'heures (99 = 1440min = 24h)
$tmp_h2m = ($h * 60) + $min;

# ---- pour $qdh (quantité de jour exprimé de 01~99) ------
$qdh = int ($tmp_h2m/14.5); # pour avoir le centieme de journée sur 2chiffres de 01 à 99
if ($qdh <= 9) {
  $qdh = "0" . "$qdh";
}

# ---------- pour $qdh (quantité de jour exprimé de 01~99) ------- uncomment

if ($qdh <= 9) {
  $qdh = "0" . "$qdh";
}
# ---------- pour $qdm (quantité de jour exprimé de 001~999)------ 

$qdm = int ($tmp_h2m/1.44); # pour avoir le milliéme de journée sur 3chiffres de 1 à 999
if ($qdm <= 9) {
  $qdm = "00" . "$qdm";
}
elsif ($qdm <= 99) {
  $qdm = "0" . "$qdm";
}

#---------------------------------------------------------------------------------
$ma_date_v = "$fjour  $j\/" . "$m\/" . "$an" . ":" . "$h" . ":$min"; # Mercredi 30/07/2003 17:30
$ma_date = "$an" . "$m" . "$j" . ":" . "$qdh";                       # 20030730:72
$ma_date_h = "$an" . "$m" . "$j" . ":" . "$qdm";                       # 20030730:726
$dt = $ma_date_v;

#print "ma_date = $ma_date | ma_date_v = $ma_date_v | qdh = $qdh | dt = $dt\n";

#&verifj;

sub ouverture($filename) {
  if ($argv == 0) {
    
    # si utilisateur n'a pas demandé de nom de fichier en arguments 
    print "Entrez le nom du fichier à traiter:\n";
    chomp($file = <STDIN>);

# sortir le path du fichier ouvert
@rep = split(/\//, $file);
$filename = pop @rep;           # nom du fichier seul
$rep = join('/', @rep);   # rep de travail
#------------------------------------

if (-e $file) {
  @statfilename = stat($file); 
  $df = localtime($statfilename[8]);
  $crt = "$x\n Rapport du contenu de $file : $df \n";
  print "$crt";
}
else {
  print "Erreur, le fichier $file n\'existe pas\n";
  goto LABEL_TOP;
}

# lit le fichier et met son contenu dans une variable liste
open F, "$file" or die "Ouverture de $file impossible $!";
@contenu = <F>;
close F or die "Fermeture impossible: $file $!";

# fait une copie pour pouvoir travailler sans faire de dégas (la copie doit avoir un nom propre et/ou un numero particulier)
$copieID = "copie_" . "$filename" . "_$id" . "\.html";
$full_copieID ="$rep" . "\/" . "$copieID"; 
#($copie, $ext) = split(/\./, $copieID);
#($lbl, $id) = split(/_/, $copie);

while (-e $full_copieID) {
  #$id++;
  donne_un_nom($copieID);
  $copieID = "copie_" . "$copieID";
  $full_copieID ="$rep" . "\/" . "$copieID"; 
}

open COPF, ">$copieID" or die "Ouverture de $copieID impossible: $!";
print COPF $lblhtm;
print COPF @contenu;
print COPF $lblhtmo;
close COPF 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";



open CT, ">$filetmp" or die "Ouverture de $filetmp impossible $!";
print CT $lblhtm;
foreach $line(@contenu) {
  next if ($line =~ /^</);
  if ($line =~ /^sommaire\s/i) {
    $line = '<h1><title>' . "$line" . '</h1></title>';
  }
  elsif ($line=~ /^\d{1,2}\.\d{1,2}\s/) {
    $lignetitre = $line;	# au cas  ou pourra remplacer la merde plus bas
    ($numbrut, $ttchap) = split(/\s/, $line, 1);
    ($nump, $nums)= split(/\./, $numbrut);
    $i++;	#numero me servant au classement
    if ($nums ne 0) {
      $tt_actif_tab = "$li" . '<H3><A NAME="' . "tab_" . "$nump" . '"></A><A HREF="' . "\.\/$ftmp" . "#s_" . "$nump" . '">' . "$line" . '</A></H3>' . "\n";
      $tt_actif_s = "$li" . '<H3><A NAME="' . "s_" . "$nump" . '"></A><A HREF="' . "\.\/$ftmp" . "#tab_" . "$nump" . '">' . "$line" . '</A></H3>' . "\n";		       
      print CT $tt_actif_tab;
      push @nwcontenu, $tt_actif_s;
      next;
    }
    else {
      $tt_actift_tab = "$li\t" . '<H3><A NAME="' . "tab_" . "$nump" . "$nums" . '"></A><A HREF="' . "\.\/$ftmp" . "#s_" . "$nump" . "$nums" . '">' . "$line" . '</A></H3>' . "\n";
      $tt_actift_s = "$li" . '<H3><A NAME="' . "s_" . "$nump" . "$nums" . '"></A><A HREF="' . "\.\/$ftmp" . "#tab_" . "$nump" . "$nums" . '">' . "$line" . '</A></H3>' . "\n";
      print CT $tt_actift_tab;
      push @nwcontenu, $tt_actift_s;
      next;
    }  
  }
  else {
    push @nwcontenu, $line;
  }
}

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;
