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