#!/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 <body>
#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}<title>Put the title here</title>\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(<F>)
	{
	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}="<img src=\"".$image."\"  ALT=\"$image\" align=middle >";
			}	
		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 (<G>)
	{
	if (/<\/head>/)
		{$finentete=1;
		}		
	if(/<title>(.*)<\/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";

