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