#!/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 = 'précédant | suivant | sommaire'; $li = '
  • '; $lblhtm = '' . "\n" . ''; $lblhtmo = ''; $h_ref = '' . "$line" . '' . "\n"; $ancre_in = '

    <\/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 = ); # 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 = ; 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 =~ /^' . "$line" . '</h1>'; } 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" . '

    ' . "$line" . '

    ' . "\n"; $tt_actif_s = "$li" . '

    ' . "$line" . '

    ' . "\n"; print CT $tt_actif_tab; push @nwcontenu, $tt_actif_s; next; } else { $tt_actift_tab = "$li\t" . '

    ' . "$line" . '

    ' . "\n"; $tt_actift_s = "$li" . '

    ' . "$line" . '

    ' . "\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;