Statistiques
| Branche: | Révision :

root / gencal.sh @ e07a2c11f179b54c146d7b2cb035d8571b9c1db9

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

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