Subversion Repositories wimsdev

Rev

Rev 16209 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
20 reyssat 1
#! /bin/sh
2
 
16107 bpr 3
#LL="env LC_COLLATE=POSIX LANG=POSIX LC_CTYPE=fr_FR.UTF-8"
11566 bpr 4
LL="env LC_ALL=C LC_CTYPE=C LANG=C"
20 reyssat 5
thisdir=`pwd`
6
lastdir=$thisdir
16107 bpr 7
 
18226 bpr 8
if [ -z "$wims_home" ]; then wims_home=$1; fi;
20 reyssat 9
if [ -z "$wims_home" ]; then wims_home=$w_wims_home; fi
10
 
11
while [ -z "$wims_home" ] && [ "$lastdir" != "/" ]
12
do
16107 bpr 13
  wims_home=`cat $lastdir/.wimshome 2>/dev/null`
14
  lastdir=`dirname $lastdir`
20 reyssat 15
done
16
if [ -z "$wims_home" ]; then
16107 bpr 17
  echo WIMS home directory not found.
18
  exit;
20 reyssat 19
fi
20
proc=$wims_home/public_html/scripts/deduc
18226 bpr 21
test=
22
if [ ! -z "$w_wims_class" ]; then
23
  test=`echo $thisdir | grep -a '/classes/..$'`
24
fi
25
if [ ! -z "$test" ] && [ -d $wims_home/log/classes/$w_wims_class ]; then
26
  class_header=$wims_home/log/classes/$w_wims_class
27
  ntest=`awk -F'=' '$1=="sharing_exo" {print $2}' $class_header/neighbors 2>/dev/null`
28
  if [ ! -z "$ntest" ] && [ -d "$wims_home/log/classes/$ntest/src" ]; then
29
    class_header=$wims_home/log/classes/$ntest
30
  fi
31
  def=$class_header/def
32
  src=$class_header/src
33
  exindex=$class_header/Exindex
34
  extitles=$class_header/Extitles
35
  dfindex=$class_header/Dataindex
36
  exauth=$class_header/Exauthors
37
  imindex=$class_header/Imindex
38
  descindex=$class_header/Descindex
39
  obsindex=$class_header/Obsindex
40
  keywindex=$class_header/Exkeywords
41
  dickeyword=$class_header/Dickeywords
42
  tmp1=$class_header/tmp1
43
  tmp2=$class_header/tmp2
44
  imagedir=$src/images
45
  mkdir -p $def
46
else
47
  # not in a class ?
48
  class_header=
49
  def=def
50
  src=src
51
  exindex=Exindex
52
  extitles=Extitles
53
  exauth=Exauthors
54
  dfindex=Dataindex
55
  imindex=Imindex
56
  descindex=Descindex
57
  obsindex=Obsindex
58
  keywindex=Exkeywords
59
  dickeyword=Dickeywords
60
  tmp1=tmp1
61
  tmp2=tmp2
62
  imagedir=images
63
fi
20 reyssat 64
 
18226 bpr 65
if [ ! -d $def ]; then
66
  echo 1>&2 "Directory $def not found."
67
  exit;
68
fi
69
if [ ! -d $src ]; then
70
  echo 1>&2 "Directory $src not found."
71
  exit;
72
fi
20 reyssat 73
 
18226 bpr 74
deff=`cd $def; ls *.def 2>/dev/null`
20 reyssat 75
for i in $deff
76
do
16107 bpr 77
  dd=`echo $i | sed 's!\.def!.ded!g'`
18226 bpr 78
  if [ ! -f $src/$dd ]; then
79
    echo Removing $def/$i.
80
    rm -f $def/$i >/dev/null;
16107 bpr 81
  fi
20 reyssat 82
done
83
 
18226 bpr 84
# Processing ded src.
20 reyssat 85
sext=ded
18226 bpr 86
cd $src
20 reyssat 87
if [ -d cpp ]; then
16107 bpr 88
  cd cpp
89
  incf=`ls *.inc 2>/dev/null`
90
  for i in $incf
20 reyssat 91
  do
16107 bpr 92
    list=`egrep -a -l '#[[:blank:]]*include[[:blank:]]+"'$i'"' *.inc 2>/dev/null`
93
    for j in $list
94
    do
95
      if [ $i -nt $j ]; then touch $j; fi
96
    done
20 reyssat 97
  done
16107 bpr 98
  for i in $incf
20 reyssat 99
  do
16107 bpr 100
    list=`egrep -a -l '#[[:blank:]]*include[[:blank:]]+"'$i'"' *.cpp 2>/dev/null`
101
    for j in $list
102
    do
103
      if [ $i -nt $j ]; then touch $j; fi
104
    done
105
  done
106
  pref=`ls *.cpp 2>/dev/null`
107
  for i in $pref
108
  do
18226 bpr 109
    list=`$LL tr '\r' '\n' <$i | grep -a . | head -1 | grep -a target \
110
    | tr ',:;./?*#~$\\ ' '                  ' \
111
    | awk -F'=' '{print $2}'`
112
    test=`grep -a -E '^[[:blank:]]*#[[:blank:]]*include' $i \
113
    | grep -a -E -v '^[[:blank:]]*#[[:blank:]]*include[[:blank:]]*"[[:alnum:]_]+.inc"'`
16107 bpr 114
    if [ ! -z "$test" ]; then
115
      echo $i: include violation. $test
116
      list=
117
    fi
18226 bpr 118
    test=`echo $list | grep "-"`
119
    if [ ! -z "$test" ]; then
120
      echo $i: character - not allowed in target. $test
121
      list=
122
    fi
123
## perl -pi -e "s/#TARGET\s*\((\w+)\s*\)/defined TARGET_\1 /g" $i
124
    $LL tr '\r' '\n' <$i | $LL sed "s/'/\&#39;/g" | grep -a . | awk 'BEGIN {l=0}; {l++}; l>1 {print}' >cpp.tmp
16107 bpr 125
    for j in $list
126
    do
127
      if [ ! -f ../$j.$sext ] || [ $i -nt ../$j.$sext ]; then
128
        echo "Preprocessing: $i -> ../$j.$sext"
129
        cat <<@ >../$j.$sext
20 reyssat 130
%% This file is generated by preprocessor!
131
%% Do not edit it by hand.
132
%% Edit the source file cpp/$i.
133
 
134
@
18226 bpr 135
        perl -pi -e "s/#TARGET\s*\((\w+)\s*\)/defined TARGET_\1 /g" cpp.tmp
136
        cpp -P -C -nostdinc -nostdinc++ -DTARGET_$j -A"TARGET($j)" -DOEFFILE=$j cpp.tmp | \
137
        $LL sed "s/&#39;/'/g" >>../$j.$sext
16107 bpr 138
      fi
139
    done
140
    rm -f cpp.tmp
20 reyssat 141
  done
16107 bpr 142
  cd ..
20 reyssat 143
fi
144
 
145
srcf=`ls *.ded 2>/dev/null`
18226 bpr 146
cd $thisdir
20 reyssat 147
oef2wims_mdef="methods variables context environ equivalence startname goal newobject minsteps options"
148
export oef2wims_mdef
149
for i in $srcf
150
do
18226 bpr 151
  dd=`echo $i | $LL sed 's!\.ded!.def!g'`
152
  if [ ! -f $def/$dd ] || [ $src/$i -nt $def/$dd ]; then
153
    rm -f $def/$dd 2>/dev/null
154
    $wims_home/bin/oef2wims $src/$i $def/$dd
16107 bpr 155
  fi
20 reyssat 156
done
157
 
18226 bpr 158
# Processing compiled .def files.
159
cd $def
160
list=`ls *.def 2>/dev/null | $LL sed 's/\.def//g'`
161
cd $thisdir
162
if [ -f "INDEX" ]; then
163
  transl_lang=`grep -a translation_language INDEX | awk -F= '{print $2}'`;
164
  module_lang=`grep -aw ^language INDEX | awk -F= '{print $2}'`;
165
fi
166
#if [ -z "$list" ]; then exit; fi
167
titlist=
168
titlist1=
169
list1=
170
rm -f $extitles.tmp
171
rm -f $exauth $descindex $obsindex $keywindex $dickeyword
20 reyssat 172
 
173
for i in $list
174
do
18226 bpr 175
  tit=`awk -F= 'NF>=2 {print $2; exit}' $def/$i.def | $LL tr ',\11' '; '`
176
  echo "$i:$tit" >>$extitles.tmp
177
  for lang in $transl_lang ; do
178
    titl=`grep -a "title_$lang" $def/$i.def | awk -F= '{print $2}'`;
179
    echo "$i:$titl" >>"${extitles}_$lang.tmp"
180
  done
16107 bpr 181
  titlist="$titlist$tit
20 reyssat 182
"
18226 bpr 183
  titlist1="$titlist1$tit,"
184
  list1="$list1$i,"
20 reyssat 185
done
18226 bpr 186
 
187
# Processing dicsort.
188
$wims_home/bin/dicsort $extitles.tmp 1>/dev/null
189
if [ -s $extitles.tmp.sorted ]; then
190
  cat $extitles.tmp.sorted >$extitles
191
  rm -f $extitles.tmp*
192
else
193
  rm -f $extitles.tmp.sorted
194
  echo >$extitles
20 reyssat 195
fi
196
 
18226 bpr 197
# Processing trans_lang.
198
for lang in $transl_lang
199
do
200
  $wims_home/bin/dicsort "${extitles}_$lang.tmp"
201
  if [ -s "${extitles}_$lang.tmp.sorted" ]; then
202
    cat "${extitles}_$lang.tmp.sorted" > "${extitles}_$lang"
203
  else
204
    echo >"${extitles}_$lang"
205
  fi
206
done
207
rm -f *.tmp *.sorted
20 reyssat 208
 
18226 bpr 209
echo "$titlist" >$tmp1
210
echo "$list" >$tmp2
211
llist=`$LL paste $tmp1 $tmp2 | $LL sort -t '	' -f -k 1,1`
212
list1=`echo "$llist" | $LL awk -F'\11' 'length()>2 {print $2}' | $LL tr '\n' ' '`
213
list=`echo "$llist" | $LL awk -F'\11' 'length()>2 {print $2}' | $LL tr '\n' ','`
214
titlist=`echo "$llist" | $LL awk -F'\11' 'length()>2 {print $1}' | $LL tr '\n' ','`
215
 
216
rm -f $tmp1 $tmp2
217
cat >$exindex <<@
20 reyssat 218
!set exolist  =!char 1 to -2 of $list
219
!set titlelist=!char 1 to -2 of $titlist
18226 bpr 220
!set titlelist_$module_lang=!char 1 to -2 of $titlist
20 reyssat 221
!set exototal =!itemcnt \$exolist
222
 
223
@
18226 bpr 224
 
225
for lang in $transl_lang ; do
226
  for ex in $list1; do
227
    a=`grep -a title_$lang $def/$ex.def | awk -F= '{print $2}'`;
228
    if [ -z "$a" ]; then a=`grep -a "!set title" $def/$ex.def | awk -F= '{print $2}'` ; fi
229
    echo "$a">>tmp1
230
  done
231
  titlist2=`cat $tmp1 | $LL tr '\n' ','` ;
232
  rm -f $tmp1
233
  cat >>$exindex <<@
234
!set titlelist_$lang=!char 1 to -2 of $titlist2
235
@
236
done
237
 
238
## keywords:exercises
239
cd $thisdir
240
export KEYWINDEX; KEYWINDEX="$keywindex";
241
export DICKEYWORD; DICKEYWORD="$dickeyword";
242
perl <<'EOF'
243
  my %hash=();my $TEXT=''; my $hash=\%hash;
244
  my ($file)=$ENV{KEYWINDEX}; open(IN, "$file");
245
  while(<IN>) {
246
    my @a=split(":", $_); my @b=split(",", $a[1]);
247
    for my $c (@b){ chomp $c; $c=~ s/^\s+//; $c=~ s/\s+$//; $hash->{$c} .= "$a[0],";}
248
  }
249
  for my $aa (keys %hash){ chop $hash->{$aa}; $TEXT .= "$aa:$hash->{$aa}\n";};
250
  if ($TEXT) {
251
    open (OUT, ">$ENV{DICKEYWORD}"); print OUT $TEXT; close OUT;
252
  }
253
EOF
254
 
255
#### index of files in images/ "name:directory"
256
cd $thisdir
257
rm -f $imindex
258
if [ -d $imagedir ]; then
259
  images=`cd $imagedir ; find * -type f 2>/dev/null`
260
  if [ -z "$images" ]; then
261
    echo "<!-- This file is automatically generated. Do not edit! -->" >$imindex
262
    for i in $images ; do d=`dirname $i` ; file=`basename $i` ;
263
      echo "$file:$d" >> $imindex ;
264
    done;
265
  fi
266
fi
267
 
268
[ -n "$class_header" ] && exit
269
 
270
# Datafiles
271
 
272
if [ -d src/data ]; then
273
  datafiles=`cd src/data; ls *.data | sed 's/\.data$//'`
274
  rm -f $dfindex.tmp
275
  for df in $datafiles; do
276
    tit=`awk 'NF>0 {if($1 ~ /^[^.:]/) print; exit}' src/data/$df.data`
277
    author=`awk -F.author '/^.author / {print $2}' src/data/$df.data`;
278
    recordcnt=`awk '/^:/{i++}END{print i}' src/data/$df.data`
279
    [ -z "$tit" ] && tit=$df
280
      echo "$df,$tit,$author,$recordcnt" >>$dfindex.tmp
281
  done
282
  $LL sort -f -t, -k2 <$dfindex.tmp >$dfindex
283
  rm -f $dfindex.tmp
284
fi
285
 
286
# Gather content for robots.
287
 
288
outputfile=content.html
289
 
290
tit=
291
echo "<!-- This file is automatically generated. Do not edit! -->" >$outputfile
292
for f in `ls $def/*.def 2>/dev/null`; do
293
  tit=`head -1 $f | $LL cut -d= -f2`
294
  [ -z "$tit" ] && continue
295
  content=`awk 'BEGIN {a=0};
296
    NF == 0 {next};
297
    /!exit/ {a=0};
298
    /^!/ {next};
299
    a > 0 {print};
300
    /^:question/ {a=1};
301
    ' $f | $LL sed 's/\$()//g'`
302
  echo "<hr>
303
<h3>$tit</h3>
304
$content
305
" >>$outputfile
306
tit=
307
done