#
# Le hachage des libells
#
my %labels =
(  calendar  => 'Calendrier'
 , month3    => [ qw(jan fv mars avr mai juin juil aot sep oct nov dc) ]
 , week1     => [ qw(L M M J V S D) ]
 , add_days  => 'Jours complmentaires'
 , month     => [ qw(Janvier Fvrier Mars Avril Mai Juin Juillet Aot Septembre 
                 Octobre Novembre Dcembre) ]
 , title1    => "Lettres pour une anne"
 , title2    => { b => "Dbut d'anne", m => "Milieu d'anne", e => "Fin d'anne" }
 , title3    => "Nom des mois et des jours"
 , year_ttl  => "Anne"
);

#
# Formattage spcifique de la date grgorienne
# note : on n'utilise pas le quatrime paramtre d'appel.
#
$labels{format} = sub {
  my ($a, $m, $j) = @_;
  "$j $labels{month}[$m-1] $a"
};

#
# Mode d'emploi, Grgorien -> Rpublicain
#
$labels{usage1} =  <<'EOT';
<h3>Comment convertir $gr_date</h3>
<p>Regardez d'abord la premire table. L'anne grgorienne 
<strong>$y</strong> 
se trouve dans l'intervalle
<em>$begint&nbsp;-&nbsp;$end_of_interval{$begint}</em> 
et elle se termine par les deux chiffres 
<strong>$y2</strong>.
Dans la ligne et la colonne correspondantes, la case contient les trois lettres
<em>$word</em>.
<p>Regardez ensuite les trois tables suivantes. 
<strong>$labels{month}[$m-1]</strong> 
apparat dans la table
<em>$labels{title2}{$part}</em>
qui comporte en en-tte la mention
<em>$labels{year_ttl}&nbsp;-&nbsp;$offset</em>.
Vous pouvez donc en dduire tout de suite l'anne rpublicaine, qui est
<strong>$ryear</strong>.
Parmi ces trois lettres
<em>$word</em>, 
la lettre 
<em>$letter</em> 
est celle qui apparat dans la mme table. La case correspondante contient les deux formules&nbsp;:
<em>@formulas</em>. 
Choisissez celle qui convertit le jour
<strong>$d</strong>
en un nombre de 1  30. C'est--dire, jusqu'
<strong>$limit $labels{month}[$m - 1]</strong>
inclus, utilisez la premire formule
<em>$formulas[0]</em>, 
et ultrieurement, utilisez la deuxime formule
<em>$formulas[1]</em>.
Dans le cas prsent, le numro du jour grgorien est
<strong>$d</strong>, 
donc vous appliquez la formule
<em>$formula</em>, 
et vous obtenez
<strong>$abridged</strong>. 
Il ne reste plus qu' extraire le nom du jour et le nom du mois de la dernire table, ce qui donne
<strong>$rev_date</strong>.
EOT

$labels{usage2} = <<'EOT';
<h3>Comment convertir $gr_date</h3>
<p>Qu'en est-il de septembre&nbsp;? La premire tape est identique, et donne
les trois mmes lettres
<em>$word</em>.
<p>Mais
<strong>$labels{month}[8]</strong>
figure  la fois dans la table
<em>$labels{title2}{m}</em>
et dans la table
<em>$labels{title2}{e}</em>.
La premire donne deux formules pour le jour&nbsp;:
<em>$formulas[0]</em>
et 
<em>$formulas[1]</em>, 
(colonne
<em>$mletter</em>), 
ainsi que
<em>$labels{year_ttl}&nbsp;-&nbsp;1792</em>
pour l'anne. L'autre donne
<em>$formulas[2]</em>
pour le jour 
(colonne
<em>$eletter</em>), 
et 
<em>$labels{year_ttl}&nbsp;-&nbsp;1791</em>
pour l'anne.
<p>Essayez d'abord la dernire formule
<em>$formulas[2]</em>,
puis la prcdente
<em>$formulas[1]</em>, 
et enfin la premire
<em>$formulas[0]</em>, 
jusqu' obtenir un rsultat suprieur ou gal  1.
<p>Dans le cas de
<strong>$d $labels{month}[8] $y</strong>, 
il faut appliquer
<em>$formula</em>,
ainsi que la formule correspondante pour l'anne
<em>$labels{year_ttl}&nbsp;-&nbsp;$offset</em>,
ce qui donne
<strong>$abridged</strong>, 
ou mieux,
<strong>$rev_date</strong>.
EOT

#
# Mode d'emploi pour la conversion du calendrier rvolutionnaire 
# vers le calendrier grgorien.
#
$labels{usage3} = <<'EOT';
<h3>Comment convertir $title_date</h3>
<p>Commencez par la premire table. L'anne du calendrier rvolutionnaire,
<strong>$y</strong> 
se trouve dans l'intervalle
<em>$begint&nbsp;-&nbsp;$end_of_interval{$begint}</em> 
et ses deux derniers chiffres sont
<em>$y2</em>. 
Dans la ligne et la colonne correspondantes, vous trouvez les deux lettres
<em>$word</em>. 
<p>Et maintenant, reportez-vous aux deux autres tables. Le mois
<strong>$fr_month[$m-1]</strong> 
figure dans la table
<em>$labels{title2}{$part}</em>.
Des deux lettres
<em>$word</em>, 
c'est
<em>$letter</em> 
qui apparat dans cette table. La case correspondante comporte deux formules&nbsp;:
<em>@formulas</em>. 
Choisissez celle qui vous permet de convertir le numro de jour
<strong>$d</strong>
et d'obtenir une valeur compatible avec le mois grgorien rsultant. 
C'est--dire, jusqu'au
<strong>$limit $fr_month[$m - 1]</strong>, 
inclus, utilisez la premire formule
<em>$formulas[0]</em>, 
et ensuite, utilisez l'autre formule
<em>$formulas[1]</em>.
Dans le cas prsent, le numro du jour rpublicain est
<strong>$d</strong>, 
donc vous utilisez la formule 
<em>$formula</em>, 
ce qui donne
<strong>$gr_date</strong>.
EOT
$labels{usage4} = <<'EOT';
<h3>Cas particuliers</h3>
<p>Pour les
<strong>$labels{add_days}</strong>,
il y a une seule formule, ce qui est beaucoup plus simple.
<p>Pour
<strong>$fr_month[3]</strong>,
la case se scinde en deux, car il y a deux formules pour l'anne,
<em>$labels{year_ttl}&nbsp;+&nbsp;1791</em>
et
<em>$labels{year_ttl}&nbsp;+&nbsp;1792</em>.
<p><strong>$fr_month[5]</strong> 
se trouve dans les deux tables. Pour
<strong>$fr_month[5] $y</strong>,
dans la colonne
<em>$bletter</em>
vous obtenez la formule
<em>$formulas[0]</em>,
et dans la colonne
<em>$eletter</em>
vous obtenez la formule
<em>$formulas[1]</em>.
 part cela, tout le reste est identique. C'est--dire, jusqu'au
<strong>$limit $fr_month[5]</strong>
inclus, utilisez la premire formule
<em>$formulas[0]</em>, 
et ensuite, utilisez la formule
<em>$formulas[1]</em>.
Par exemple, si vous voulez convertir
<strong>$title_date</strong>, 
tant donn que le numro du jour rpublicain est
<strong>$d</strong>, 
vous devrez utiliser la formule
<em>$formula</em>, 
et vous obtiendrez
<strong>$gr_date</strong>.
EOT

\%labels;

__END__

=head1 NOM

prt_cal - Imprime le calendrier rpublicain pour une date.

g2r_table - Imprime des  tables permettant la conversion du calendrier
grgorien vers le calendrier rpublicain.

r2g_table - Imprime des  tables permettant la conversion du calendrier
rpublicain vers le calendrier grgorien.

=head1 RSUM DE C<prt_cal>

  prt_cal [--lang=I<langue>] [--kitten=I<fichier>] anne

=head1 DESCRIPTION DE C<prt_cal>

B<prt_cal> imprime le calendrier rpublicain pour l'anne transmise en
paramtre. Vous  pouvez demander  le calendrier pour  n'importe quelle
anne aprs la proclamation de la Premire Rpublique, vous n'tes pas
limits  la  priode pendant laquelle le calendrier  a rellement t
utilis.  Par exemple, vous pouvez demander le calendrier pour l'anne
210,  ce qui correspond  dans le  calendrier grgorien   fin  2001 et
dbut  2002.   La sortie  obtenue  est  un  fichier HTML.  Le  fichier
comporte de brves indications permettant de trouver la correspondance
avec le calendrier grgorien.

=head1 OPTIONS DE C<prt_cal>

=over 4

=item lang

Elle  permet  de slectionner  une  langue  pour  certaines valeurs  :
abrviation  des   jours  de  la   semaine,  ou  des  mois,   et  mode
d'emploi. Les langues disponibles sont :

=over 4

=item en

Anglais (valeur par dfaut)

=item fr

Franais

=back

=item kitten

I<kitten>  signifie I<chaton>  en anglais.   Cette option  vous permet
d'insrer  la photo de  quelques chatons  dans votre  calendrier. Vous
pouvez galement  utiliser un paysage de montagne,  mais n'essayez pas
d'afficher une quelconque photo d'un autre genre...

Vous pouvez essayer

  http://images.google.com/images?hl=en&lr=&ie=ISO-8859-1&output=search&q=kitten+basket
  http://images.google.com/images?hl=en&lr=&ie=ISO-8859-1&output=search&q=mountains

Mais surtout pas

  http://images.google.com/images?q=Delacroix+libert%C3%A9+guidant+peuple&hl=en&lr=&ie=UTF-8&output=search

=head1 PARAMTRE DE C<prt_cal>

Il faut  donner   B<prt_cal> l'anne que  l'on veut  imprimer. Donner
l'anne rpublicaine, sous forme numrique (ce qui exclut les chiffres
romains).

=head1 BUGS CONNUS

B<prt_cal> accepte  plusieurs annes, et imprime  les calendriers pour
chacune  d'entre  elles.  Mais  tous  ces  calendriers  se  retrouvent
concatns dans le mme fichier en sortie.

=head1 RSUM DE C<g2r_table> ET DE C<r2g_table>

  g2r_table [--columns=I<nombre>] [--example=I<date>] [--lang=I<langue>] [--table-workaround]

  r2g_table [--columns=I<nombre>] [--example=I<date>] [--lang=I<langue>] [--table-workaround]


=head1 DESCRIPTION DE C<g2r_table> ET DE C<r2g_table>

B<g2r_table>   permet  d'imprimer   quelques  tables,   permettant  la
conversion    du    calendrier    grgorien   vers    le    calendrier
rpublicain. Avec  ces tables, vous pouvez  convertir n'importe quelle
date postrieure  la proclamation de la Rpublique.

B<r2g_table> est  l'quivalent de B<g2r_table>, pour  la conversion en
sens inverse, du calendrier rpublicain vers le calendrier grgorien.

=head1 OPTIONS DE C<g2r_table> ET DE C<r2g_table>

=over 4

=item lang

Elle  permet  de slectionner  une  langue  pour  certaines valeurs  :
abrviation  des   jours  de  la   semaine,  ou  des  mois,   et  mode
d'emploi. Les langues disponibles sont :

=over 4

=item en

Anglais (valeur par dfaut)

=item us

Anglais, en formattant les dates  la faon amricaine (December 1, 2001).

=item fr

Franais

=back

=item columns

Nombre de colonnes   utiliser pour la premire  table. Ce nombre doit
tre un  multuple de 4, plus  1 : 5, 9,  13 ou 17.  Compte  tenu de la
quasi-priodicit des jours bissextiles,  les annes sont groupes par
4 dans la premire table.  Il faut une colonne supplmentaire pour les
titres  de  ligne.   Notez  que  vous  pouvez  spcifier  des  nombres
suprieurs   17, mais le rsultat  ne sera pas trs  agrable ni trs
joli.

=item example

Ces deux programmes fournissent un texte bref donnant les instructions
pour utiliser les tables.  Cette  option permet de choisir la date qui
sera prise en exemple dans  le texte d'instruction. La renseigner sous
forme  numrique AAAAMMJJ.  Pour  B<r2g_table>, il  s'agit d'une  date
exprime dans le calendrier rpublicain.

=item table-workaround

J'ai remarqu  que l'un des navigateurs  web que j'utilise a  du mal 
mettre en forme un texte  comportant des tables puis  l'imprimer.  Il
lui arrive d'oublier quelques lignes suivant la table.  J'ai trouv un
moyen  de contournement,  qui consiste   englober  le texte  dans une
table. Cette option active cette bidouille.

=back

=head1 AUTEUR

Jean Forget <JFORGET@cpan.org>
