root / gencal.sh @ ed51e0a4aa5b409312e29c1c9c8004666b2f6710
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 |