#!/bin/sh
annee="$1"
true=1
false=0
# permet de lancer la commande cal pour un mois et une annee precis, et de traiter le decoupage des semaines
get_month ()
{
annee="$1"
mois="$2"
numligne="0"
# execution de cal, et lecture de la sortie ligne par ligne
cal -m $mois $annee | while read ligne
do
numligne=$((numligne + 1))
# on ne tient pas compte des lignes vides retournees par cal
if test "`echo $ligne | tr -d ' '`" != ""
then
# on ne tient pas compte de la premiere ligne (mois et annee en cours) et de la deuxieme ligne (noms des jours)
if test "$numligne" -gt 2
then
# on tient compte de la premiere semaine du mois, afin de connaitre la position du premier jour
if test "$numligne" -lt 4
then
set_days $true $ligne
else
set_days $false $ligne
fi
fi
fi
done
}
# permet de decouper une semaine (une ligne retournee par cal) en jours
set_days ()
{
nb_jours=`expr $# - 1`
is_first_line=$1
# on identifie le nombre de jours du mois en cours compris dans la semaine que l'on traite
case $nb_jours in
1) # cette semaine ne comprend qu'un jour du mois en cours, le premier ou le dernier jour du mois
if test "$is_first_line" = "$true"
then
set_day 7 $2
else
set_day 1 $2
fi
;;
2) # cette semaine comprend deux jours du mois en cours, les deux premiers ou les deux derniers
if test "$is_first_line" = "$true"
then
set_day 6 $2
set_day 7 $3
else
set_day 1 $2
set_day 2 $3
fi
;;
3) # cette semaine comprend trois jours du mois en cours, les trois premiers ou les trois derniers
if test "$is_first_line" = "$true"
then
set_day 5 $2
set_day 6 $3
set_day 7 $4
else
set_day 1 $2
set_day 2 $3
set_day 3 $4
fi
;;
4) # cette semaine comprend quatre jours du mois en cours, les quatre premiers ou les quatre derniers
if test "$is_first_line" = "$true"
then
set_day 4 $2
set_day 5 $3
set_day 6 $4
set_day 7 $5
else
set_day 1 $2
set_day 2 $3
set_day 3 $4
set_day 4 $5
fi
;;
5) # cette semaine comprend cinq jours du mois en cours, les cinq premiers ou les cinq derniers
if test "$is_first_line" = "$true"
then
set_day 3 $2
set_day 4 $3
set_day 5 $4
set_day 6 $5
set_day 7 $6
else
set_day 1 $2
set_day 2 $3
set_day 3 $4
set_day 4 $5
set_day 5 $6
fi
;;
6) # cette semaine comprend six jours du mois en cours, les six premiers ou les six derniers
if test "$is_first_line" = "$true"
then
set_day 2 $2
set_day 3 $3
set_day 4 $4
set_day 5 $5
set_day 6 $6
set_day 7 $7
else
set_day 1 $2
set_day 2 $3
set_day 3 $4
set_day 4 $5
set_day 5 $6
set_day 6 $7
fi
;;
7) # cette semaine est pleine, donc on sait que le premier numero correspondra au lundi
set_day 1 $2
set_day 2 $3
set_day 3 $4
set_day 4 $5
set_day 5 $6
set_day 6 $7
set_day 7 $8
;;
*)
echo "Un probleme a du survenir..."
exit 1
;;
esac
}
# permet de recopier en sortie la correspondance entre le jour et son numero dans le mois
set_day ()
{
echo " <jour nom=\"$1\" numero=\"$2\"/>"
}
# lance le traitement pour le calendrier d'une annee, mois par mois
make_calendrier ()
{
echo "<annee numero=\"$annee\">"
echo " <mois numero=\"1\">"
get_month $annee 1
echo " </mois>"
echo " <mois numero=\"2\">"
get_month $annee 2
echo " </mois>"
echo " <mois numero=\"3\">"
get_month $annee 3
echo " </mois>"
echo " <mois numero=\"4\">"
get_month $annee 4
echo " </mois>"
echo " <mois numero=\"5\">"
get_month $annee 5
echo " </mois>"
echo " <mois numero=\"6\">"
get_month $annee 6
echo " </mois>"
echo " <mois numero=\"7\">"
get_month $annee 7
echo " </mois>"
echo " <mois numero=\"8\">"
get_month $annee 8
echo " </mois>"
echo " <mois numero=\"9\">"
get_month $annee 9
echo " </mois>"
echo " <mois numero=\"10\">"
get_month $annee 10
echo " </mois>"
echo " <mois numero=\"11\">"
get_month $annee 11
echo " </mois>"
echo " <mois numero=\"12\">"
get_month $annee 12
echo " </mois>"
echo "</annee>"
}
echo "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>"
echo "<!--?xml-stylesheet href=\"calendrier.xsl\" type=\"text/xsl\"?-->"
echo "<calendrier>"
echo "<noms_jours>"
echo " <nom numero=\"1\" lang=\"fr\">lundi</nom>"
echo " <nom numero=\"2\" lang=\"fr\">mardi</nom>"
echo " <nom numero=\"3\" lang=\"fr\">mercredi</nom>"
echo " <nom numero=\"4\" lang=\"fr\">jeudi</nom>"
echo " <nom numero=\"5\" lang=\"fr\">vendredi</nom>"
echo " <nom numero=\"6\" lang=\"fr\">samedi</nom>"
echo " <nom numero=\"7\" lang=\"fr\">dimanche</nom>"
echo " <nom numero=\"1\" lang=\"it\">lunedì</nom>"
echo " <nom numero=\"2\" lang=\"it\">martedì</nom>"
echo " <nom numero=\"3\" lang=\"it\">mercoledì</nom>"
echo " <nom numero=\"4\" lang=\"it\">giovedì</nom>"
echo " <nom numero=\"5\" lang=\"it\">venerdì</nom>"
echo " <nom numero=\"6\" lang=\"it\">sabato</nom>"
echo " <nom numero=\"7\" lang=\"it\">domenica</nom>"
echo " <nom numero=\"1\" lang=\"en\">monday</nom>"
echo " <nom numero=\"2\" lang=\"en\">tuesday</nom>"
echo " <nom numero=\"3\" lang=\"en\">wednesday</nom>"
echo " <nom numero=\"4\" lang=\"en\">thursday</nom>"
echo " <nom numero=\"5\" lang=\"en\">friday</nom>"
echo " <nom numero=\"6\" lang=\"en\">saturday</nom>"
echo " <nom numero=\"7\" lang=\"en\">sunday</nom>"
echo " <nom numero=\"1\" lang=\"de\">montag</nom>"
echo " <nom numero=\"2\" lang=\"de\">dienstag</nom>"
echo " <nom numero=\"3\" lang=\"de\">mittwoch</nom>"
echo " <nom numero=\"4\" lang=\"de\">donnerstag</nom>"
echo " <nom numero=\"5\" lang=\"de\">freitag</nom>"
echo " <nom numero=\"6\" lang=\"de\">samstag</nom>"
echo " <nom numero=\"7\" lang=\"de\">sonntag</nom>"
echo " <nom numero=\"1\" lang=\"es\">lunes</nom>"
echo " <nom numero=\"2\" lang=\"es\">martes</nom>"
echo " <nom numero=\"3\" lang=\"es\">miércoles</nom>"
echo " <nom numero=\"4\" lang=\"es\">jueves</nom>"
echo " <nom numero=\"5\" lang=\"es\">viernes</nom>"
echo " <nom numero=\"6\" lang=\"es\">sábado</nom>"
echo " <nom numero=\"7\" lang=\"es\">domingo</nom>"
echo "</noms_jours>"
echo "<noms_mois>"
echo " <nom numero=\"1\" lang=\"fr\">janvier</nom>"
echo " <nom numero=\"2\" lang=\"fr\">février</nom>"
echo " <nom numero=\"3\" lang=\"fr\">mars</nom>"
echo " <nom numero=\"4\" lang=\"fr\">avril</nom>"
echo " <nom numero=\"5\" lang=\"fr\">mai</nom>"
echo " <nom numero=\"6\" lang=\"fr\">juin</nom>"
echo " <nom numero=\"7\" lang=\"fr\">juillet</nom>"
echo " <nom numero=\"8\" lang=\"fr\">août</nom>"
echo " <nom numero=\"9\" lang=\"fr\">septembre</nom>"
echo " <nom numero=\"10\" lang=\"fr\">octobre</nom>"
echo " <nom numero=\"11\" lang=\"fr\">novembre</nom>"
echo " <nom numero=\"12\" lang=\"fr\">décembre</nom>"
echo " <nom numero=\"1\" lang=\"en\">january</nom>"
echo " <nom numero=\"2\" lang=\"en\">february</nom>"
echo " <nom numero=\"3\" lang=\"en\">march</nom>"
echo " <nom numero=\"4\" lang=\"en\">april</nom>"
echo " <nom numero=\"5\" lang=\"en\">may</nom>"
echo " <nom numero=\"6\" lang=\"en\">june</nom>"
echo " <nom numero=\"7\" lang=\"en\">july</nom>"
echo " <nom numero=\"8\" lang=\"en\">august</nom>"
echo " <nom numero=\"9\" lang=\"en\">september</nom>"
echo " <nom numero=\"10\" lang=\"en\">october</nom>"
echo " <nom numero=\"11\" lang=\"en\">november</nom>"
echo " <nom numero=\"12\" lang=\"en\">december</nom>"
echo " <nom numero=\"1\" lang=\"es\">enero</nom>"
echo " <nom numero=\"2\" lang=\"es\">febrero</nom>"
echo " <nom numero=\"3\" lang=\"es\">marzo</nom>"
echo " <nom numero=\"4\" lang=\"es\">abril</nom>"
echo " <nom numero=\"5\" lang=\"es\">mayo</nom>"
echo " <nom numero=\"6\" lang=\"es\">junio</nom>"
echo " <nom numero=\"7\" lang=\"es\">julio</nom>"
echo " <nom numero=\"8\" lang=\"es\">agosto</nom>"
echo " <nom numero=\"9\" lang=\"es\">septiembre</nom>"
echo " <nom numero=\"10\" lang=\"es\">octubre</nom>"
echo " <nom numero=\"11\" lang=\"es\">noviembre</nom>"
echo " <nom numero=\"12\" lang=\"es\">diciembre</nom>"
echo " <nom numero=\"1\" lang=\"de\">januar</nom>"
echo " <nom numero=\"2\" lang=\"de\">februar</nom>"
echo " <nom numero=\"3\" lang=\"de\">märz</nom>"
echo " <nom numero=\"4\" lang=\"de\">april</nom>"
echo " <nom numero=\"5\" lang=\"de\">mai</nom>"
echo " <nom numero=\"6\" lang=\"de\">juni</nom>"
echo " <nom numero=\"7\" lang=\"de\">juli</nom>"
echo " <nom numero=\"8\" lang=\"de\">august</nom>"
echo " <nom numero=\"9\" lang=\"de\">september</nom>"
echo " <nom numero=\"10\" lang=\"de\">oktober</nom>"
echo " <nom numero=\"11\" lang=\"de\">november</nom>"
echo " <nom numero=\"12\" lang=\"de\">dezember</nom>"
echo " <nom numero=\"1\" lang=\"it\">gennaio</nom>"
echo " <nom numero=\"2\" lang=\"it\">febbraio</nom>"
echo " <nom numero=\"3\" lang=\"it\">marzo</nom>"
echo " <nom numero=\"4\" lang=\"it\">aprile</nom>"
echo " <nom numero=\"5\" lang=\"it\">maggio</nom>"
echo " <nom numero=\"6\" lang=\"it\">giugno</nom>"
echo " <nom numero=\"7\" lang=\"it\">luglio</nom>"
echo " <nom numero=\"8\" lang=\"it\">agosto</nom>"
echo " <nom numero=\"9\" lang=\"it\">settembre</nom>"
echo " <nom numero=\"10\" lang=\"it\">ottobre</nom>"
echo " <nom numero=\"11\" lang=\"it\">novembre</nom>"
echo " <nom numero=\"12\" lang=\"it\">dicembre</nom>"
echo "</noms_mois>"
# lance le traitement du calendrier de chaque annee passee en parametre du script
for annee in $@
do
make_calendrier $annee
done
echo "</calendrier>"
exit 0