précédant | suivant | sommaire

Document texte avec chapitre numéroté => Html



Ce script tente de transformer tout document ayant des chapitres numérotés en document HTML avec une premiere page index.html qui regroupera tout les liens vers les autres pages du document, (liens dynamiques ayant pour légendes la teneur de la phrase suivant le chiffre.
Je ne l'ai pas fini mais pour le moment il me sert car fait plus des trois quart du travail.
alain Adelmar aadelmar@wanadoo.fr


#!/usr/bin/perl -w
# remd: transformer un texte avec des chapitres numerotés en fichier html avec des liens
# (pour Linux ) - alain Adelmar 18.03.2001.
# initialisation:
$id = 0;
$x = "x" x 25;

# 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\>";
 

LABEL_TOP:print "Entrez le nom du fichier à traiter:\n";
chomp($file = <STDIN>);

# sortir le path du filename
$road66 = $filename = $file;
$road66 =~ s/()\/\w+\.\w{3,4}$/$1/i;
$filename =~ s/^.+\/\b()/$1/;
 

if (-e $file) {
  $df = localtime(-C $file);
  $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 $!";

# faire copie pour éviter dégas (la copie doit avoir un nom propre et/ou un numero particulier)
$copieID = "copie_" . "$file" . "_$id" . "\.html";
($copie, $ext) = split(/\./, $copieID);
($lbl, $id) = split(/_/, $copie);

while (-e donne_un_nom($copieID)) {
  $id++;
  donne_un_nom($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/):
($copie, $ext) = split(/\./, $copieID);
($lbl, $id) = split(/_/, $copie);

while (-e donne_un_nom($copieID)) {
  $id++;
  donne_un_nom($copieID);
}
$filetmp = '/tmp/tmp/' . "$copieID";

open CT, ">$filetmp" or die "Ouverture de $filetmp impossible $!";
print COPF $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 <= 0) {
      $tt_actif_tab = "$li" . '<H3><A NAME="' . "tab_" . "$nump" . '"></A><H REF="' . "s_" . "$nump" . '">' . "$line" . '</H></H3>' . "\n";
      $tt_actif_s = "$li" . '<H3><A NAME="' . "s_" . "$nump" . '"></A><H REF="' . "tab_" . "$nump" . '">' . "$line" . '</H></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><H REF="' . "s_" . "$nump" . "$nums" . '">' . "$line" . '</H></H3>' . "\n";
      $tt_actift_s = "$li" . '<H3><A NAME="' . "s_" . "$nump" . "$nums" . '"></A><H REF="' . "tab_" . "$nump" . "$nums" . '">' . "$line" . '</H></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) = @_;
 
  $copieID = "copie_" . "$file" . "_$id" . "\.log";
  ($copie, $ext) = split(/\./, $copieID);
  ($lbl, $id) = split(/_/, $copie);
  return $copieID;
}

END;



précédant | suivant | sommaire