#!/usr/bin/perl ###################################################################### # FAQ2HTML : translate archived Usenet articles (FAQ) in HTML # # (C)opyright Sylvain Niervèze , 1998 # Modifications by Raphael Giromini , 2000 # Modifications by Benjamin Lerman 2000 # # You can redistribute this program under the same terms as Perl itself, # and you should send back to me improvements that you may add to it. # # This program uses the MailTools CPAN module. ###################################################################### use strict; use Mail::Internet; use Mail::Header; use File::Basename; use File::Path; use Data::Dumper; # Where the Usenet articles are located my $localdir="/var/www/www.usenet-fr.news.eu.org/raph/faq/fr"; # Where the HTML files will be stored my $htmldir="/var/www/www.usenet-fr.news.eu.org/htdocs/fr.usenet.reponses"; # Where the HTML files will be stored in web space # (relative to the "fr.usenet.reponses" directory ) # This is only used for the index my $webdir=""; # Regexp specifying the filenames of articles which are not translated my $donttranslate="(latex|\"|\/mini-faq\/|\/minis-faq\/|\/mini-faqs\/|\/informatique\/travail-sur-ecran)"; # Regexp specifying the filenames or directories which do not appear # in the index my $dontdisplay='^/chartes$'; # Footer my $footer="
\n
Traduit en HTML par faq2html.pl le ".localtime()." pour le site Web Usenet-FR.
\n"; my $footeridx="
\n
Index généré par faq2html.pl le ".localtime()." pour le site Web Usenet-FR.
\n"; ######## THERE IS NOTHING TO MODIFY BELOW ############# rmtree($htmldir); listerep($localdir); # Index : # { repertoire => ( { url => '...' , # sujet => '...', # auteur => '...' }, # { url => '...' , # sujet => '...', # auteur => '...' } ) # rep2 => ( ... ) } my %index; makeindex(); sub makeindex { open (SOMM,">$htmldir/index.html") or die "$0: impossible d'ecrire sommaire.html: $!\n"; print SOMM < Archives de fr.usenet.reponses

Sommaire des FAQ publiées dans Usenet-FR

Archives de fr.usenet.reponses


Les documents cités ci-dessous sont publiés périodiquement dans fr.usenet.reponses. Ils sont également disponibles sous leur forme originale par FTP sur ftp://ftp.asynchrone.net/pub/faq/fr/.

La liste des conseils d'utilisation et chartes (contenu du répertoire « chartes ») est consultable sur la page de la Liste des groupes fr.*.

En sélectionnant un document ci-dessous, vous pouvez consulter l'article transformé en HTML.

EOF foreach my $repertoire (sort keys %index) { next if ($repertoire =~ $dontdisplay); print SOMM "

Repertoire $repertoire

\n"; print SOMM "
    \n"; foreach my $elem (sort { $a->{'filename'} cmp $b->{'filename'}} @{$index{$repertoire}}) { my $url=$elem->{'filename'}; $url=~ s/^\///; print SOMM "
  • $elem->{'sujet'} - "; $elem->{'auteur'} = &code_caracteres(&code_accent($elem->{'auteur'})); print SOMM "",$elem->{'auteur'},"
  • \n"; } print SOMM "
\n"; } print SOMM $footeridx; print SOMM <
Valid HTML 4.01! [Powered by Apache] Valid CSS!
EOF close (SOMM); } sub listerep { my $repertoire=shift; opendir (DIR,$repertoire) or die "$0: opendir impossible sur $repertoire: $!\n"; my @dir=grep !/^$repertoire\/\.\.?$/, map "$repertoire\/$_", readdir(DIR); foreach my $entree (@dir) { if (-f $entree) { if ($entree !~ $donttranslate) { print "$entree\n"; cvthtml($entree); } } elsif (-d $entree) { listerep("$entree"); } else { die "-> $entree\n"; } } closedir DIR; } sub cvthtml { my $file=shift; open (ARTICLE,$file) or die "$0: impossible de lire $file : $!\n"; my $article=new Mail::Internet(\*ARTICLE); close (ARTICLE); my $from=$article->head->get('From'); chomp($from); my $subject=$article->head->get('Subject'); chomp($subject); my @body=@{$article->body}; my $is_charte=0; my $A_N; my $sh1; FIND_AN: for(my $i=0; $i $relativefile, 'sujet' => $subject, 'auteur' => $from, 'url' => $urlfile }; push @{$index{$relativedir}},$elem; $from = &code_accent($from); $from = &code_caracteres($from); my $htmlfile=$file; $htmlfile=~ s#$localdir#$htmldir#; if (! -d dirname($htmlfile)) { mkpath (dirname($htmlfile),0,0755) or die "$0: mkpath $htmlfile : $!\n"; } open (HTMLFILE,">$htmlfile.html") or die "$0: Impossible d'ecrire dans $htmlfile : $!\n"; print HTMLFILE < $subject EOF if($is_charte) { print HTMLFILE < EOF } else { print HTMLFILE < EOF } print HTMLFILE < EOF if($is_charte) { print HTMLFILE< EOF } print HTMLFILE<

$subject

$from


EOF
  foreach my $line (@body) {
    $line = &code_caracteres($line);
    if ($line =~ /((ftp|http):\/\/[a-zA-Z0-9\.\-\+\/\\\~\?\=\_]+)/) {
      my $anchor=$1;
      $anchor=~ s/\.$//;
      $line=~ s/$anchor/\$anchor\<\/a\>/;
    }
    print HTMLFILE "$line";
  }

  print HTMLFILE "
\n"; if($is_charte) { print HTMLFILE <
EOF } else { print HTMLFILE < EOF } print HTMLFILE <
Valid HTML 4.01! [Powered by Apache] Valid CSS!
EOF close (HTMLFILE); } sub code_accent { my $line = shift; $line =~ s/é/é/g; $line =~ s/É/É/g; $line =~ s/ë/ë/g; $line =~ s/Ë/Ë/g; $line =~ s/è/è/g; $line =~ s/È/È/g; $line =~ s/ê/ê/g; $line =~ s/Ê/Ê/g; $line =~ s/á/á/g; $line =~ s/Á/Á/g; $line =~ s/ä/ä/g; $line =~ s/Ä/Ä/g; $line =~ s/à/à/g; $line =~ s/À/À/g; $line =~ s/â/â/g; $line =~ s/Â/Â/g; $line =~ s/í/í/g; $line =~ s/Í/Í/g; $line =~ s/ï/ï/g; $line =~ s/Ï/Ï/g; $line =~ s/ì/ì/g; $line =~ s/Ì/Ì/g; $line =~ s/î/î/g; $line =~ s/Î/Î/g; $line =~ s/ó/ó/g; $line =~ s/Ó/Ó/g; $line =~ s/ö/ö/g; $line =~ s/Ö/Ö/g; $line =~ s/ò/ò/g; $line =~ s/Ò/Ò/g; $line =~ s/ô/ô/g; $line =~ s/Ô/Ô/g; $line =~ s/ú/ú/g; $line =~ s/Ú/Ú/g; $line =~ s/ü/ü/g; $line =~ s/Ü/Ü/g; $line =~ s/ù/ù/g; $line =~ s/Ù/Ù/g; $line =~ s/û/û/g; $line =~ s/Û/Û/g; $line =~ s/ç/ç/g; $line =~ s/Ç/Ç/g; return $line; } sub code_caracteres { my $line = shift; $line =~ s/\&/&/g; $line =~ s/«/«/g; $line =~ s/»/»/g; $line =~ s/\/>/g; return $line; }