# # 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';

Comment convertir $gr_date

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';

Comment convertir $gr_date

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';

Comment convertir $title_date

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';

Cas particuliers

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 prt_cal [--lang=I] [--kitten=I] année =head1 DESCRIPTION DE C B imprime le calendrier républicain pour l'année transmise en paramètre. Vous pouvez demander le calendrier pour n'importe quelle année après la proclamation de la Première République, vous n'êtes pas limités à la période pendant laquelle le calendrier a réellement été utilisé. Par exemple, vous pouvez demander le calendrier pour l'année 210, ce qui correspond dans le calendrier grégorien à fin 2001 et début 2002. La sortie obtenue est un fichier HTML. Le fichier comporte de brèves indications permettant de trouver la correspondance avec le calendrier grégorien. =head1 OPTIONS DE C =over 4 =item lang Elle permet de sélectionner une langue pour certaines valeurs : abréviation des jours de la semaine, ou des mois, et mode d'emploi. Les langues disponibles sont : =over 4 =item en Anglais (valeur par défaut) =item fr Français =back =item kitten I signifie I en anglais. Cette option vous permet d'insérer 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 PARAMÈTRE DE C Il faut donner à B l'année que l'on veut imprimer. Donner l'année républicaine, sous forme numérique (ce qui exclut les chiffres romains). =head1 BUGS CONNUS B accepte plusieurs années, et imprime les calendriers pour chacune d'entre elles. Mais tous ces calendriers se retrouvent concaténés dans le même fichier en sortie. =head1 RÉSUMÉ DE C ET DE C g2r_table [--columns=I] [--example=I] [--lang=I] [--table-workaround] r2g_table [--columns=I] [--example=I] [--lang=I] [--table-workaround] =head1 DESCRIPTION DE C ET DE C B permet d'imprimer quelques tables, permettant la conversion du calendrier grégorien vers le calendrier républicain. Avec ces tables, vous pouvez convertir n'importe quelle date postérieure à la proclamation de la République. B est l'équivalent de B, pour la conversion en sens inverse, du calendrier républicain vers le calendrier grégorien. =head1 OPTIONS DE C ET DE C =over 4 =item lang Elle permet de sélectionner une langue pour certaines valeurs : abréviation des jours de la semaine, ou des mois, et mode d'emploi. Les langues disponibles sont : =over 4 =item en Anglais (valeur par défaut) =item us Anglais, en formattant les dates à la façon américaine (December 1, 2001). =item fr Français =back =item columns Nombre de colonnes à utiliser pour la première table. Ce nombre doit être un multuple de 4, plus 1 : 5, 9, 13 ou 17. Compte tenu de la quasi-périodicité des jours bissextiles, les années sont groupées par 4 dans la première table. Il faut une colonne supplémentaire pour les titres de ligne. Notez que vous pouvez spécifier des nombres supérieurs à 17, mais le résultat ne sera pas très agréable ni très 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 numérique AAAAMMJJ. Pour B, il s'agit d'une date exprimée dans le calendrier républicain. =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