Révision 420a543d
| /dev/null | ||
|---|---|---|
| 1 |
#!/bin/bash |
|
| 2 |
# |
|
| 3 |
# Calendar generation script Copyright (C) 2004 by Romuald DELAVERGNE |
|
| 4 |
# It can be redistributed under the terms of the GNU General Public License. |
|
| 5 |
# |
|
| 6 |
|
|
| 7 |
# Pâques a lieu le 1er dimanche qui suit la pleine lune qui suit ou qui a lieu le jour de l'équinoxe du printemps (21 mars) |
|
| 8 |
function getPaquesDay() {
|
|
| 9 |
local b c d e f g h |
|
| 10 |
local jour mois year=$1 |
|
| 11 |
|
|
| 12 |
b=$((year-1900)) |
|
| 13 |
c=$((year % 19)) |
|
| 14 |
d=$(((7*$c+1)/19)) |
|
| 15 |
e=$(((11*$c+4-$d) % 29)) |
|
| 16 |
f=$((b/4)) |
|
| 17 |
g=$(((b+$f+31-$e) % 7)) |
|
| 18 |
h=$((25-$e-$g)) |
|
| 19 |
if [ $h -gt 0 ]; then |
|
| 20 |
jour=$h |
|
| 21 |
mois=4 |
|
| 22 |
else |
|
| 23 |
jour=$((h+31)) |
|
| 24 |
mois=3 |
|
| 25 |
fi |
|
| 26 |
echo "$jour $mois" |
|
| 27 |
} |
|
| 28 |
|
|
| 29 |
lstJours=(none dimanche lundi mardi mercredi jeudi vendredi samedi) |
|
| 30 |
lstMois=(none janvier février mars avril mai juin juillet août septembre octobre novembre décembre) |
|
| 31 |
lstFeries=(jourDeLAn rameaux paques lundiDePaques feteDuTravail victoire1945 ascension pentecote lundiDePentecote feteNationale assomption toussaint armistice1918 noel) |
|
| 32 |
output=/tmp/calendrier.html |
|
| 33 |
year=${1:-`date +%Y`}
|
|
| 34 |
|
|
| 35 |
# Jours fériés fixes |
|
| 36 |
jourDeLAn=(1 1 "jour de l'an") |
|
| 37 |
feteDuTravail=(1 5 "fête du travail") |
|
| 38 |
victoire1945=(8 5 "victoire 1945") |
|
| 39 |
feteNationale=(14 7 "fête Nationale") |
|
| 40 |
assomption=(15 8 "l'Assomption") |
|
| 41 |
toussaint=(1 11 "la Toussaint") |
|
| 42 |
armistice1918=(11 11 "armistice 1918") |
|
| 43 |
noel=(25 12 "Noël") |
|
| 44 |
# Pâques et ses dépendances |
|
| 45 |
paques=(`getPaquesDay $year` "Pâques") |
|
| 46 |
rameaux[0]=`LANG=C date --date "${paques[1]}/${paques[0]}/$year 7 days ago" +%-d`
|
|
| 47 |
rameaux[1]=`LANG=C date --date "${paques[1]}/${paques[0]}/$year 7 days ago" +%-m`
|
|
| 48 |
rameaux[2]="les Rameaux" |
|
| 49 |
lundiDePaques[0]=`LANG=C date --date "${paques[1]}/${paques[0]}/$year 1 day" +%-d`
|
|
| 50 |
lundiDePaques[1]=`LANG=C date --date "${paques[1]}/${paques[0]}/$year 1 day" +%-m`
|
|
| 51 |
lundiDePaques[2]="lundi de Pâques" |
|
| 52 |
ascension[0]=`LANG=C date --date "${paques[1]}/${paques[0]}/$year 39 days" +%-d`
|
|
| 53 |
ascension[1]=`LANG=C date --date "${paques[1]}/${paques[0]}/$year 39 days" +%-m`
|
|
| 54 |
ascension[2]="l'Ascension" |
|
| 55 |
pentecote[0]=`LANG=C date --date "${paques[1]}/${paques[0]}/$year 49 days" +%-d`
|
|
| 56 |
pentecote[1]=`LANG=C date --date "${paques[1]}/${paques[0]}/$year 49 days" +%-m`
|
|
| 57 |
pentecote[2]="la Pentecôte" |
|
| 58 |
lundiDePentecote[0]=`LANG=C date --date "${paques[1]}/${paques[0]}/$year 50 days" +%-d`
|
|
| 59 |
lundiDePentecote[1]=`LANG=C date --date "${paques[1]}/${paques[0]}/$year 50 days" +%-m`
|
|
| 60 |
lundiDePentecote[2]="lundi de Pentecôte" |
|
| 61 |
|
|
| 62 |
function firstDay() {
|
|
| 63 |
local month what line days nb |
|
| 64 |
|
|
| 65 |
month=`LANG=C cal $1 $year` |
|
| 66 |
what="" |
|
| 67 |
echo -e "$month" | while read line; do |
|
| 68 |
case "$what" in |
|
| 69 |
"") what="month";; |
|
| 70 |
"month") what="days";; |
|
| 71 |
"days") what="week1";; |
|
| 72 |
"week1") what="week";; |
|
| 73 |
esac |
|
| 74 |
if [ "$what" = "week1" ]; then |
|
| 75 |
days=($line) |
|
| 76 |
nb=${#days[@]}
|
|
| 77 |
echo "$((8-$nb))" |
|
| 78 |
exit |
|
| 79 |
fi |
|
| 80 |
done |
|
| 81 |
} |
|
| 82 |
|
|
| 83 |
function lastDay() {
|
|
| 84 |
local month nb |
|
| 85 |
|
|
| 86 |
month=(`LANG=C cal $1 $year`) |
|
| 87 |
nb=${#month[@]}
|
|
| 88 |
echo "${month[$((nb-1))]}"
|
|
| 89 |
} |
|
| 90 |
|
|
| 91 |
cat > $output << EOF |
|
| 92 |
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" |
|
| 93 |
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> |
|
| 94 |
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr"> |
|
| 95 |
<head> |
|
| 96 |
<meta http-equiv="Content-Type" content="text/HTML; charset=iso-8859-1" /> |
|
| 97 |
<meta http-equiv="Content-style-type" content="text/css" /> |
|
| 98 |
<meta http-equiv="Content-language" content="fr" /> |
|
| 99 |
<title>Calendrier $year</title> |
|
| 100 |
<link rel="stylesheet" type="text/css" href="calendrier.css" media="screen" title="Normal" /> |
|
| 101 |
<link rel="stylesheet" type="text/css" href="calendrier.css" media="print" title="Normal" /> |
|
| 102 |
</head> |
|
| 103 |
|
|
| 104 |
<body> |
|
| 105 |
EOF |
|
| 106 |
|
|
| 107 |
for s in 1 2; do |
|
| 108 |
echo " <table>" >> $output |
|
| 109 |
for j in `seq 0 31`; do |
|
| 110 |
[ $j -eq 0 ] && echo " <tr id=\"semestre$s\">" >> $output || echo " <tr class=\"jour$j\">" >> $output |
|
| 111 |
for m in `seq $((s*6-5)) $((s*6))`; do |
|
| 112 |
if [ $j -eq 0 ]; then |
|
| 113 |
echo " <th id=\"mois$m\">${lstMois[$m]}</th>" >> $output
|
|
| 114 |
jour[$m]=`firstDay $m` |
|
| 115 |
lstLast[$m]=`lastDay $m` |
|
| 116 |
else |
|
| 117 |
currentDay=${jour[$m]}
|
|
| 118 |
name=${lstJours[$currentDay]}
|
|
| 119 |
last=${lstLast[$m]}
|
|
| 120 |
if [ $j -le $last ]; then |
|
| 121 |
classFerie="" |
|
| 122 |
for f in ${lstFeries[*]}; do
|
|
| 123 |
eval jourFerie='${'$f'[0]}'
|
|
| 124 |
eval moisFerie='${'$f'[1]}'
|
|
| 125 |
eval libelleFerie='${'$f'[2]}'
|
|
| 126 |
if [ "$j" = "$jourFerie" -a "$m" = "$moisFerie" ]; then |
|
| 127 |
classFerie=" class=\"ferie\" class=\"$f\" title=\"$libelleFerie\"" |
|
| 128 |
break |
|
| 129 |
fi |
|
| 130 |
done |
|
| 131 |
echo " <td$classFerie class=\"$name\"><span class=\"nom-jour\">${name:0:3}</span><span class=\"num-jour\">$j</span></td>" >> $output
|
|
| 132 |
[ ${jour[$m]} = 7 ] && jour[$m]=1 || jour[$m]=$((jour[$m]+1))
|
|
| 133 |
else |
|
| 134 |
if [ $last -eq 30 ]; then |
|
| 135 |
echo " <td></td>" >> $output |
|
| 136 |
else |
|
| 137 |
[ $j -eq $((last+1)) ] && echo " <td rowspan="$((31-last))"></td>" >> $output |
|
| 138 |
fi |
|
| 139 |
fi |
|
| 140 |
fi |
|
| 141 |
done |
|
| 142 |
echo " </tr>" >> $output |
|
| 143 |
done |
|
| 144 |
echo " </table>" >> $output |
|
| 145 |
echo " <br>" >> $output |
|
| 146 |
done |
|
| 147 |
|
|
| 148 |
cat >> $output << EOF |
|
| 149 |
</body> |
|
| 150 |
</html> |
|
| 151 |
EOF |
|
| 152 |
|
|
| 153 |
exit 0 |
|
Formats disponibles : Unified diff