#!/usr/bin/perl

# Occidental (Windows Latin 1)

use fusionne_lib;

if ($#ARGV > 0)
{
	$fichierModele = shift @ARGV;
	$modele = litFichier ($fichierModele);

	if ($modele =~ /<!-- extrait_ligne_debut -->(.*)<!-- extrait_ligne_fin -->/s)
	{
		$modeleLigneExtrait = $1;
		$modele =~ s/<!-- extrait_ligne_debut -->\Q$modeleLigneExtrait\E<!-- extrait_ligne_fin -->/<!-- lignes_extraits -->/s;
	}
	foreach $fichierDonnees (@ARGV)
	{
		if (open (DONNEES, $fichierDonnees))
		{
			undef %donneesModele;
			$donneesModele{'modele'} = $fichierModele;

			while (<DONNEES>)
			{
				chomp;
				s/\r\Z//;
		
				if (/\A#(.+)#\Z/)
				{
					chomp ($donneesModele{$variable});
					$variable = $1;
					$dansListe = 0;
				}
				else
				{
					if (/\A\s*\Z/)
					{
						$donneesModele{$variable} .= '<p>';
					}
					else
					{
						s/\r/\n/gs;
# PARTIE AJOUTEE !!!
						if ($variable eq 'description')
						{
							if (/\A\* / and not $dansListe)
							{
								$donneesModele{$variable} .= '<ul>';
								$dansListe = 1;
							}
							else
							{
								if ($dansListe and not /\A\* /)
								{
									$donneesModele{$variable} .= '</ul>';
									$dansListe = 0;
								}
							}
						}
# FIN DE PARTIE AJOUTEE
						$donneesModele{$variable} .= isolatin2html ($_)."\n";
					}
				}
			}
			close (DONNEES);
		
			if ($donneesModele{'declinaisons'} and $donneesModele{'reference'} and $donneesModele{'titre'})
			{
				foreach $declinaison (split ("\n", $donneesModele{'declinaisons'}))
				{
					$instance = $modele;
					%valeurs = %donneesModele;
					$codeDeclinaison = condense ($declinaison);
					$valeurs{'reference'} =~ s/XXX/$codeDeclinaison/;
					$valeurs{'reference'} = presenteISBN ($valeurs{'reference'});
					$valeurs{'image'} =~ s/XXX/$codeDeclinaison/;
					$valeurs{'couleur'} =~ s/XXX/$codeDeclinaison/;
#					$valeurs{'domaine'} =~ s/XXX/$codeDeclinaison/;
					$valeurs{'repartition'} = determineFichierRepartition ($valeurs{'repartition'});

					$valeurs{'duree'} =~ s/!!([a-z]+)!!/$valeurs{$1}/i;

					while ($valeurs{'tarif'} =~ /!!.*[a-z].*!!/i)
					{
						$valeurs{'tarif'} =~ s/!!(.*?)([a-z]+)(.*?)!!/!!$1$valeurs{$2}$3!!/gi;
					}
					$valeurs{'tarif'} =~ s/!!(.*)!!/eval($1)/eg;

					if ($valeurs{'extrait'} ne '')
					{
						if ($modeleLigneExtrait ne '')
						{
							undef $extraits;
							$nombreExtraits = 0;

							foreach (split ("\n", $valeurs{'extrait'}))
							{
								($extrait_fichier, $extrait_commentaire) = split (':', $_, 2);
								$extrait_format = $extrait_fichier;
								$extrait_format =~ s/\A.+\.([^.]+)\Z/\U$1\E/;
								$instanceLigneExtrait = $modeleLigneExtrait;
								$instanceLigneExtrait =~ s/#extrait_fichier#/$extrait_fichier/g;
								$instanceLigneExtrait =~ s/#extrait_commentaire#/$extrait_commentaire/g;
								$instanceLigneExtrait =~ s/#extrait_format#/$extrait_format/g;
								$extraits .= "$instanceLigneExtrait\n";
								$nombreExtraits++;
							}
							if ($nombreExtraits > 1)
							{
								$instance =~ s/<b>Extrait</<b>Extraits</;
							}
							$instance =~ s/<!-- lignes_extraits -->/$extraits/s;
						}
						else
						{
							($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 -->/<br>/s;
					}
					foreach (keys %valeurs)
					{
						$instance =~ s/#$_#/$valeurs{$_}/g;
					}
					$instance =~ s/XXX/$declinaison/g;
		
					if ($instance !~ /#([a-z_]+)#/i)
					{
						if (open (FICHE, ">$valeurs{'reference'}.htm"))
						{
							print FICHE $instance;
							close (FICHE);
							$nombreFiches++;
							print "$valeurs{'reference'}\n";
						}
						else
						{
							die "Erreur de creation du fichier $ (source $fichierDonnees)\n";
						}
					}
					else
					{
						die "Champ(s) non renseigne(s), le premier est $1 (source $fichierDonnees)\n";
					}
				}
			}
			else
			{
				die "Reference et/ou declinaison introuvable(s) dans le fichier de donnees (source $fichierDonnees)\n";
			}
		}
		else
		{
			die "Erreur d'ouverture du fichier de donnees (source $fichierDonnees)\n";
		}
	}
	print "$nombreFiches fiche(s) generee(s) avec succes\n";
}
else
{
	die "Usage : $0 fichier_modele fichier_donnees [fichier_donnees ...]\n";
}
