#!/usr/bin/perl

# Occidental (Windows Latin 1)

use fusionne_lib;

if ($#ARGV == 0)
{
	$fichierModele = shift @ARGV;
	litModele ($fichierModele);

	$listeGabarits{'table_prologue'} =~ s/#modele#/$fichierModele/;
	print $listeGabarits{'table_prologue'};

	foreach $fiche (@listeFiches)
	{
		if (open (FICHE, "fiches/$fiche"))
		{
			undef %donneesFiche;

			while (<FICHE>)
			{
				chomp;
		
				if (/\A#(.+)#\Z/)
				{
					chomp ($donneesFiche{$variable});
					$variable = $1;
				}
				else
				{
					if (/\A\s*\Z/)
					{
						$donneesFiche{$variable} .= '<p>';
					}
					else
					{
						s/\r/\n/gs;
						$donneesFiche{$variable} .= isolatin2html ($_)."\n";
					}
				}
			}
			close (FICHE);
		
			if ($donneesFiche{'declinaisons'} and $donneesFiche{'reference'} and $donneesFiche{'titre'})
			{
				foreach $declinaison (split ("\n", $donneesFiche{'declinaisons'}))
				{
					$instance = $listeGabarits{'ligne'};
					%valeurs = %donneesFiche;
					$codeDeclinaison = condense ($declinaison);
					$valeurs{'reference'} =~ s/XXX/$codeDeclinaison/;
					$valeurs{'reference'} = presenteISBN ($valeurs{'reference'});
					$valeurs{'image'} =~ s/XXX/$codeDeclinaison/;
					$valeurs{'image'} =~ s/\.([^.]+)\Z/_vignette.$1/;
					$valeurs{'couleur'} =~ s/XXX/$codeDeclinaison/;
#					$valeurs{'domaine'} =~ s/XXX/$codeDeclinaison/;
					$valeurs{'repartition'} = determineFichierRepartition ($valeurs{'repartition'});

					if ($valeurs{'extrait'} ne '')
					{
						($valeurs{'extrait_fichier'}, $valeurs{'extrait_commentaire'}) = split (':', $valeurs{'extrait'}, 2);
						$valeurs{'extrait_format'} = $valeurs{'extrait_fichier'};
						$valeurs{'extrait_format'} =~ s/\A.+\.([^.]+)\Z/\U$1\E/;
						
					}
					else
					{
						$instance =~ s/<!-- extrait_debut .* extrait_fin -->//;
					}
					foreach (keys %valeurs)
					{
						$instance =~ s/#$_#/$valeurs{$_}/g;
					}
					$instance =~ s/XXX/$declinaison/g;
		
					if ($instance !~ /#([a-z_]+)#/i)
					{
						print $instance;
						$nombreFiches++;
						warn "$valeurs{'reference'}\n";
					}
					else
					{
						die "Champ(s) non renseigne(s), le premier est $1\n";
					}
				}
			}
			else
			{
				die "Reference et/ou declinaison introuvable(s) dans le fichier de donnees\n";
			}
		}
		else
		{
			die "Erreur d'ouverture de la fiche $fiche\n";
		}
	}
	print "</table>\n";
	warn "La nouvelle liste comprend $nombreFiches fiche(s)\n";
}
else
{
	die "Usage : $0 fichier_modele > liste.htm\n";
}

sub litModele
{
	local ($fichier) = @_;
#	local ($baliseCourante, $baliseRencontree, $entre, @pileBalises, $destination, @listeFiches, %listeGabarits);
	local ($baliseCourante, $baliseRencontree, $entre, @pileBalises);

        if (open (FICHIER, $fichier))
        {
                while (<FICHIER>)
                {
			chomp;
			next if (/\A\s*\Z/);

			if (/-- ([\w]+)_(debut|fin) --/i)
			{
				$baliseRencontree = $1;
				$entre = (lc ($2) eq 'debut') ? 1 : 0;
#				$entre ? push (@pileBalises, $baliseCourante = $baliseRencontree) : ($baliseCourante = pop (@pileBalises)); # ???
				
				push (@pileBalises, $baliseRencontree) if $entre;
				$baliseCourante = pop (@pileBalises);
			}
			else
			{
				if ($baliseCourante)
				{
					if ($baliseCourante eq 'META')
					{
#						if ($destination)
#						{
#							$destination = $_;
#						}
#						else
#						{
							push (@listeFiches, $_);
#						}
					}
					else
					{
						$listeGabarits{$baliseCourante} .= "$_\n";
					}
				}
			}
		}
                close (FICHIER);
        }
        else
        {
                die "Fichier $fichier introuvable. Traitement interrompu\n";
        }
#        return ($destination, @listeFiches, %listeGabarits);
}
