Statistiques
| Branche: | Révision :

root / gencal.sh @ e07a2c11f179b54c146d7b2cb035d8571b9c1db9

Historique | Voir | Annoter | Télécharger (4,76 ko)

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