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