Calculer un calendrier est assez simple à partir du moment où l'on a l'algorithme de conversion.

Nous prendrons l'exemple d'un calendrier maya, l'un des plus étranges. Le plus simple à mettre en place est toutefois le calendrier compte long qui fait beaucoup parler de lui actuellement car un cycle va bientôt s'achever.

Il y aurait plusieurs façon d'aborder le problème. nous étudierons ici une façon fondée sur un calcul en shell et un affichage avec du XSL. Il serait toutefois possible de réaliser un affichage complet uniquement à partir de XSL.

Tous les exemples utilisés sont disponibles ici.

shell

Pour afficher le calendrier compte long, il faut d'abord connaître la méthode de calcul. celui-ci se fonde sur le nombre de jours juliens de la date en question. la première étape sera donc de convertir une date du calendrier grégorien en un jour julien.

Pour cette opération, rien ne vaut le processeur bc. Construisons la bibliothèque nécessaire aux opérations :

/* Conversion d'une date julienne en date du calendrier maya (compte long) */
/* take integer part */
define int(x) {
    auto old_scale   /* variables global by default */
    old_scale=scale  /* scale is global */
    scale=0; ret=x/1
    scale=old_scale
    return ret
}

/* smallest integer >= arg */
define ceil(x) {
    auto intx
    intx=int(x)
    if (intx

Nous disposons de plusieurs fonctions :

Il ne reste plus qu'à construire un script qui permettra d'utiliser ces fonctions et de générer du xml :

#!/bin/sh
# Affichage du calendier maya
echo "Content-type: application/xml; charset=utf-8"
echo

annee=$(date +'%Y')
mois=$(date +'%m')
jour=$(date +'%d')

baktum=$( echo "baktum(${annee},${mois},${jour})" | bc maya.bc)
katum=$( echo "katum(${annee},${mois},${jour})" | bc maya.bc)
tun=$( echo "tun(${annee},${mois},${jour})" | bc maya.bc)
uinal=$( echo "uinal(${annee},${mois},${jour})" | bc maya.bc)
kin=$( echo "kin(${annee},${mois},${jour})" | bc maya.bc)

# affichage du calendrier en xml
echo '<?xml version="1.0" encoding="UTF-8"?>'
echo '<?xml-stylesheet type="text/xsl" href="maya.xsl"?>'
echo '<CompteLong>'
echo "<baktum>${baktum}</baktum>"
echo "<katum>${katum}</katum>"
echo "<tun>${tun}</tun>"
echo "<uinal>${uinal}</uinal>"
echo "<kin>${kin}</kin>"
echo '</CompteLong>'

exit 0

XSL

Il ne reste plus qu'à construire l'affichage avec une feuille de style qui va récupérer les informations et les afficher dans un tableau, en remplaçant les nom des cycles par de jolies petites images.

L'utilisation de cette feuille de style passe par l'appel du script, placé dans le répertoire cgi du serveur web (apache, etc.) :

http://mon_serveur_web/cgi-bin/maya.sh

la démonstration ici.