# # Le hachage des libellés # my %labels = ( calendar => 'Calendrier' , month3 => [ qw(jan fév mars avr mai juin juil août sep oct nov déc) ] , week1 => [ qw(L M M J V S D) ] , add_days => 'Jours complémentaires' , month => [ qw(Janvier Février Mars Avril Mai Juin Juillet Août Septembre Octobre Novembre Décembre) ] , title1 => "Lettres pour une année" , title2 => { b => "Début d'année", m => "Milieu d'année", e => "Fin d'année" } , title3 => "Nom des mois et des jours" , year_ttl => "Année" ); # # Formattage spécifique de la date grégorienne # note : on n'utilise pas le quatrième paramètre d'appel. # $labels{format} = sub { my ($a, $m, $j) = @_; "$j $labels{month}[$m-1] $a" }; # # Mode d'emploi, Grégorien -> Républicain # $labels{usage1} = <<'EOT';
Regardez d'abord la première table. L'année grégorienne $y se trouve dans l'intervalle $begint - $end_of_interval{$begint} et elle se termine par les deux chiffres $y2. Dans la ligne et la colonne correspondantes, la case contient les trois lettres $word.
Regardez ensuite les trois tables suivantes. $labels{month}[$m-1] apparaît dans la table $labels{title2}{$part} qui comporte en en-tête la mention $labels{year_ttl} - $offset. Vous pouvez donc en déduire tout de suite l'année républicaine, qui est $ryear. Parmi ces trois lettres $word, la lettre $letter est celle qui apparaît dans la même table. La case correspondante contient les deux formules : @formulas. Choisissez celle qui convertit le jour $d en un nombre de 1 à 30. C'est-à-dire, jusqu'à $limit $labels{month}[$m - 1] inclus, utilisez la première formule $formulas[0], et ultérieurement, utilisez la deuxième formule $formulas[1]. Dans le cas présent, le numéro du jour grégorien est $d, donc vous appliquez la formule $formula, et vous obtenez $abridged. Il ne reste plus qu'à extraire le nom du jour et le nom du mois de la dernière table, ce qui donne $rev_date. EOT $labels{usage2} = <<'EOT';
Qu'en est-il de septembre ? La première étape est identique, et donne les trois mêmes lettres $word.
Mais $labels{month}[8] figure à la fois dans la table $labels{title2}{m} et dans la table $labels{title2}{e}. La première donne deux formules pour le jour : $formulas[0] et $formulas[1], (colonne $mletter), ainsi que $labels{year_ttl} - 1792 pour l'année. L'autre donne $formulas[2] pour le jour (colonne $eletter), et $labels{year_ttl} - 1791 pour l'année.
Essayez d'abord la dernière formule $formulas[2], puis la précédente $formulas[1], et enfin la première $formulas[0], jusqu'à obtenir un résultat supérieur ou égal à 1.
Dans le cas de $d $labels{month}[8] $y, il faut appliquer $formula, ainsi que la formule correspondante pour l'année $labels{year_ttl} - $offset, ce qui donne $abridged, ou mieux, $rev_date. EOT # # Mode d'emploi pour la conversion du calendrier révolutionnaire # vers le calendrier grégorien. # $labels{usage3} = <<'EOT';
Commencez par la première table. L'année du calendrier révolutionnaire, $y se trouve dans l'intervalle $begint - $end_of_interval{$begint} et ses deux derniers chiffres sont $y2. Dans la ligne et la colonne correspondantes, vous trouvez les deux lettres $word.
Et maintenant, reportez-vous aux deux autres tables. Le mois $fr_month[$m-1] figure dans la table $labels{title2}{$part}. Des deux lettres $word, c'est $letter qui apparaît dans cette table. La case correspondante comporte deux formules : @formulas. Choisissez celle qui vous permet de convertir le numéro de jour $d et d'obtenir une valeur compatible avec le mois grégorien résultant. C'est-à-dire, jusqu'au $limit $fr_month[$m - 1], inclus, utilisez la première formule $formulas[0], et ensuite, utilisez l'autre formule $formulas[1]. Dans le cas présent, le numéro du jour républicain est $d, donc vous utilisez la formule $formula, ce qui donne $gr_date. EOT $labels{usage4} = <<'EOT';
Pour les $labels{add_days}, il y a une seule formule, ce qui est beaucoup plus simple.
Pour $fr_month[3], la case se scinde en deux, car il y a deux formules pour l'année, $labels{year_ttl} + 1791 et $labels{year_ttl} + 1792.
$fr_month[5]
se trouve dans les deux tables. Pour
$fr_month[5] $y,
dans la colonne
$bletter
vous obtenez la formule
$formulas[0],
et dans la colonne
$eletter
vous obtenez la formule
$formulas[1].
À part cela, tout le reste est identique. C'est-à-dire, jusqu'au
$limit $fr_month[5]
inclus, utilisez la première formule
$formulas[0],
et ensuite, utilisez la formule
$formulas[1].
Par exemple, si vous voulez convertir
$title_date,
étant donné que le numéro du jour républicain est
$d,
vous devrez utiliser la formule
$formula,
et vous obtiendrez
$gr_date.
EOT
\%labels;
__END__
=head1 NOM
prt_cal - Imprime le calendrier républicain pour une date.
g2r_table - Imprime des tables permettant la conversion du calendrier
grégorien vers le calendrier républicain.
r2g_table - Imprime des tables permettant la conversion du calendrier
républicain vers le calendrier grégorien.
=head1 RÉSUMÉ DE C