#!/usr/bin/perl
#CONVERTISSEUR LaTeX vers HTML utilisant tth et un programme Perl
#Auteur: Éric Guichard, 2008-2010.
#encodage latin1
#utilise tth pour convertir des fichiers .tex en html.
#Traduit en français divers intitulés (références biblio...), intègre dans l'html
#les figures, le titre, l'encodage et une table des matières
#Enlève les \pageref et donne la liste des images à intégrer.
#use strict;
#Ultimes nettoyages: adapter la taille des images (width="50%" par exemple)
#Enlever les scories du début du fichier html après le
#Liés en général à l'en-tête du doc: \divide\hh by 60, etc.
#Rappel: penser à des solutions dans le source tex du type
# %%tth:\begin{html}Put the title here\end{html}
#Seule chose à choisir?
$input=1; #0 ou 1: accepter les \input{} ou non
$f="/chemin/de/mon/fichier.tex"; #chemin/fichier.tex
($dossier, $fcourt)=($f=~/(^.*\/)(.*).tex/); #bonne formule
chdir ($dossier);
print "On travaille sur $fcourt dans $dossier\n";
#on fabrique un fichiertmp:
$fresu=$fcourt."tmp".".tex"; #fichiertmp.tex
$fresucourt=$fcourt."tmp"; #fichiertmp pour bibtex
$fresuhtml=$fresucourt.".html";
$ffinalhtml=$fcourt.".html"; #fichier.html
#pour le -Lfichiertmp
$paramtth="-L".$fresucourt;
open (F,$f);
open (G,">$fresu");
#Nettoyage du fichier
while()
{
if (/\\input{([^}]+)}/ and $input) #semble être fait par tth si chemin d'accès complet
{
$ficinuput=$1;
#print $ficinuput,"\n";
$contenuinput=`cat $ficinuput`;
$contenuinput=~s/^ *\\advance\\.*$//g; #brutal mais efficace (vire \advance\topmargin by -1 cm)
print G $contenuinput,"\n";
next;
}
#Attention à Perl: %tableau, et \texttt{\%}. Et à la doc de LaTeX
#s/%.*$//g unless $` =~/\\$/;
chop;
#encodage et titre
$encodage=$1 if ( /^\\usepackage\[([^\]]+)\]{inputenc}/ );
if (/^\\title{(.+)}/ and !defined $titre)
{$titre=$1;
$titre=~s/\\\\/ /g;
}
#tabledesmatieres
if (/\\maketitle/ and !defined $memomaketitle)
{
s/\\maketitle/\\maketitle\n\\tableofcontents\n/;
$memomaketitle++;
}
next if /^ *\\tableofcontents *$/ and $memomaketitle ;
#les pageref
s/page +\\pageref{[^}]+}//g;
s/\\newpage//g; #théoriquement inutile (éliminé par tth)
#Figures
if (/\\begin\{figure\}/)
{$figure=1; }
if (/\\end{figure}/)
{$figure=0; }
if ($figure)
{
s/\\centering//g;
if (/\\includegraphics[^\{]*\{(.*)\}/)
{
$image=$1;
$term.= "inclure l\'image $image \n";
$_="XXX".$image."XXX";
$descr{$1}="
";
}
s/(\\caption\{.*\})/\\small\n $1 \\normalsize\n/g;
}
print G;
print G "\n";
#last if /^ *\\end{document} *$/; Mauvais pour la doc de LaTeX
}
print G "\n"; #garantit le "\n" avec \end{document}
close (F);
close (G);
system("/sw/bin/pdflatex $fresu");
system("/sw/bin/bibtex $fresucourt");
system("/sw/bin/pdflatex $fresu");
system("/sw/bin/pdflatex $fresu");
system ("/usr/local/bin/tth -w2 $paramtth < $fresu > $fresuhtml");
open (G, $fresuhtml);
open (H,">$ffinalhtml");
while ()
{
if (/<\/head>/)
{$finentete=1;
}
if(/(.*)<\/title>/ and ! defined $finentete)
{s/$1/$titre/g;
}
if ($finentete)
{
s/^by -*\.*\d +cm$//g;
#print if / *`[;:!\?]*/;
s/ *`[;:!\?]*$//g;
s/> *References *>Références;
s/> *Contents *>Sommaire;
s/> *Footnotes[: ]*>Notes;
s/XXX(.*)XXX/$descr{$1}/g;
}
print H;
}
close (G);
close (H);
system ("/bin/rm $fresucourt* ");
print $term, "\n";