]> git.mxchange.org Git - flightgear.git/blob - scripts/perl/web/mkindex.pl
Initial revision.
[flightgear.git] / scripts / perl / web / mkindex.pl
1 #!/usr/bin/perl
2
3 #
4 # adapted from a script by Bob Hain, 11/30/99
5 #
6
7
8 #
9 # process arguments
10 #
11
12 $use_large = 1;
13 while ( $arg = shift @ARGV ) {
14     if ( $arg eq "--large" ) {
15         $use_large = 1;
16     }
17 }
18
19
20 #
21 # Generate all images
22 #
23
24 $src = "Source";
25 $ldir = "Large";
26 $sdir = "Small";
27 $mdir = "Movies";
28
29 $columns = 3;
30
31 $swidth = 170;
32 $sheight = 128;
33
34 $lwidth = 1024;
35 $lheight = 768;
36
37
38 #
39 # Make sure directories exist
40 #
41
42 if ( ! -e $ldir ) {
43     mkdir $ldir, 0755;
44 }
45
46 if ( ! -e $sdir ) {
47     mkdir $sdir, 0755;
48 }
49
50 # return 1 if file1 is newer than rile2
51 sub is_newer {
52     my($file1, $file2) = @_;
53     # print " - $file1 - $file2 - \n";
54
55     ($dev, $ino, $mode, $nlink, $uid, $gid, $rdev, $size, $atime, $mtime1, 
56      $ctime, $blksize, $blocks) = stat($file1);
57     ($dev, $ino, $mode, $nlink, $uid, $gid, $rdev, $size, $atime, $mtime2, 
58      $ctime, $blksize, $blocks) = stat($file2);
59
60     if ( $mtime1 > $mtime2 ) {
61         return 1;
62     } else {
63         return 0;
64     }
65 }
66
67
68 #
69 # Make images (both large and small)
70 #
71
72 @FILES = `ls $src/*.jpg $src/*.JPG $src/*.gif`;
73
74 foreach $file ( @FILES ) {
75     chop $file;
76     $file =~ s/$src\///;
77
78     if ( is_newer( "$src/$file", "$ldir/$file" ) || ! -e "$ldir/$file" ) {
79         print "Updating $ldir/$file\n";
80         system("cp -f $src/$file $ldir");
81         system("mogrify -geometry $lwidth" . "X" .
82                "$lheight -interlace LINE -quality 80 $ldir/$file");
83     }
84
85     if ( is_newer( "$ldir/$file", "$sdir/$file" ) || ! -e "$sdir/$file" ) {
86         print "Updating $sdir/$file\n";
87         system("cp -f $ldir/$file $sdir");
88         system("mogrify -geometry $swidth" . "X" . 
89                "$sheight -interlace LINE -quality 80 $sdir/$file");
90     }
91 }
92
93
94 #
95 # Check for large and small images to remove
96 #
97
98 @FILES = `ls $ldir`;
99 foreach $file ( @FILES ) {
100     chop($file);
101     # print "$file\n";
102     if ( ! -f "$src/$file" ) {
103         print "No matching src file - deleting large image $file ...\n";
104         unlink( "$ldir/$file" );
105     }
106 }
107
108 @FILES = `ls $sdir`;
109 foreach $file ( @FILES ) {
110     chop($file);
111     if ( ! -f "$src/$file" ) {
112         print "No matching src file - deleting small image $file ...\n";
113         unlink( "$sdir/$file" );
114     }
115 }
116
117
118 #
119 # Build image list (for next/previous/first/last links)
120 #
121
122 open( MASTER, "<master.idx" );
123
124 @imagelist = ();
125
126 while ( <MASTER> ) {
127     chop;
128     if ( m/\.jpg$/ || m/\.JPG$/ || m/\.gif$/ ) {
129         push @imagelist, $_;
130     } else {
131         # just ignore everything else
132     }
133 }
134
135 close( MASTER );
136
137
138 #
139 # Prepair $link subdirectory
140 #
141
142 $link = "Link";
143 system("rm -rf $link");
144 mkdir $link, 0755;
145
146
147 #
148 # Assemble index.html
149 #
150
151 $outfile = "index.html";
152
153 $dir = `pwd`;
154 chop($dir);
155 $title = `basename $dir`;
156 chop($title);
157
158 open( MASTER, "<master.idx" );
159 open( OUT, ">$outfile" );
160
161 $j = 1;
162 $in_table = 0;
163
164 while ( <MASTER> ) {
165     chop;
166     if ( m/^#/ ) {
167         # ignore comments
168     } elsif ( m/\.txt$/ ) {
169         # insert text
170
171         if ( $in_table ) {
172             $in_table = 0;
173             print OUT "</TR>\n";
174             print OUT "</TABLE>\n";
175         }
176
177         $file = $_;
178         open( IN, "<$src/$file" );
179         while ( <IN> ) {
180             print OUT $_;
181         }
182         close( IN );
183         print OUT "<P>\n";
184         $j = 1;
185         $in_table = 0;
186     } elsif ( m/\.jpg$/ || m/\.JPG$/ || m/\.gif$/ ) {
187         # insert image in 3 wide tables
188
189         $in_table = 1;
190         $file = $_;
191
192         $i = `basename $file`;
193         chop($i);
194
195         if ( $j == 1 ) {
196             print OUT "<!-- Begin Row -->\n";
197             print OUT "<TABLE ALIGN=CENTER>\n";
198             print OUT "<TR VALIGN=TOP>\n";
199         }
200
201         if ( $i =~ m/\.jpg$/ ) {
202             $linkname = `basename $i .jpg`;
203         } elsif ( $i =~ m/\.JPG$/ ) {
204             $linkname = `basename $i .JPG`;
205         } else {
206             $linkname = `basename $i .gif`;
207         }
208         chop($linkname);
209         # print OUT "<TD WIDTH=220 HEIGHT=160>\n";
210         print OUT "<TD WIDTH=$swidth HEIGHT=$sheight>\n";
211
212         $thumbinfo = `identify $sdir/$i`;
213         ($name, $type, $geom, $junk) = split(/\s+/, $thumbinfo, 4);
214         ($twidth, $theight) = split(/x/, $geom);
215         $theight =~ s/\+.*$//;
216
217         print OUT "<A HREF=\"$link/$linkname.html\">";
218         print OUT "<IMG WIDTH=$twidth HEIGHT=$theight SRC=\"$sdir/$i\" ALT=\"$linkname\">";
219         print OUT "</A>\n";
220
221         if ( -f "$src/$linkname.txt" ) {
222             if ( $twidth < $swidth ) {
223                 print OUT "<BR>\n";
224             }
225             print OUT "<FONT SIZE=-1 id=\"fgfs\">\n";
226             open( IN, "<$src/$linkname.txt" );
227             while ( <IN> ) {
228                 print OUT $_;
229             }
230             close( IN );
231             print OUT "</FONT>\n";
232         } else {
233             if ( $twidth < $swidth ) {
234                 print OUT "<BR>\n";
235             }
236             print OUT "<FONT SIZE=-1 id=\"fgfs\">\n";
237             print OUT "$linkname\n";
238             print OUT "</FONT>\n";
239         }
240
241         print OUT "</TD>\n";
242
243         if ( $j == $columns ) {
244             $in_table = 0;
245             print OUT "</TR>\n";
246             print OUT "</TABLE>\n";
247         }
248
249         if ( ++$j > $columns ) {
250             $j = 1;
251         }
252     } elsif ( m/\.AVI$/ || m/\.mpg$/ || m/\.mov$/ ) {
253         # insert image in 3 wide tables
254
255         $in_table = 1;
256         $file = $_;
257
258         $i = `basename $file`;
259         chop($i);
260
261         if ( $j == 1 ) {
262             print OUT "<!-- Begin Row -->\n";
263             print OUT "<TABLE ALIGN=CENTER>\n";
264             print OUT "<TR VALIGN=TOP>\n";
265         }
266
267         if ( $i =~ m/\.AVI$/ ) {
268             $linkname = `basename $i .AVI`;
269         } elsif ( $i =~ m/\.mpg$/ ) {
270             $linkname = `basename $i .mpg`;
271         } elsif ( $i =~ m/\.mov$/ ) {
272             $linkname = `basename $i .mov`;
273         } else {
274             die "unknown movie type\n";
275         }
276         chop($linkname);
277         # print OUT "<TD WIDTH=220 HEIGHT=160>\n";
278         print OUT "<TD WIDTH=$swidth HEIGHT=$sheight>\n";
279
280         $thumbinfo = `identify $mdir/$linkname.jpg`;
281         ($name, $geom, $junk) = split(/\s+/, $thumbinfo, 3);
282         ($twidth, $theight) = split(/x/, $geom);
283
284         print OUT "<A HREF=\"$mdir/$i\">";
285         print OUT "<IMG WIDTH=$twidth HEIGHT=$theight SRC=\"$mdir/$linkname.jpg\" ALT=\"$linkname\">";
286         print OUT "</A>\n";
287
288         if ( -f "$mdir/$linkname.txt" ) {
289             if ( $twidth < $swidth ) {
290                 print OUT "<BR>\n";
291             }
292             print OUT "<FONT SIZE=-1 id=\"fgfs\">\n";
293             open( IN, "<$mdir/$linkname.txt" );
294             while ( <IN> ) {
295                 print OUT $_;
296             }
297             close( IN );
298             print OUT "</FONT>\n";
299         } else {
300             if ( $twidth < $swidth ) {
301                 print OUT "<BR>\n";
302             }
303             print OUT "<FONT SIZE=-1 id=\"fgfs\">\n";
304             print OUT "$linkname\n";
305             print OUT "</FONT>\n";
306         }
307
308         print OUT "</TD>\n";
309
310         if ( $j == $columns ) {
311             $in_table = 0;
312             print OUT "</TR>\n";
313             print OUT "</TABLE>\n";
314         }
315
316         if ( ++$j > $columns ) {
317             $j = 1;
318         }
319     } else {
320         # just pass along the rest as is
321
322         $j = 1;
323
324         if ( $in_table ) {
325             $in_table = 0;
326             print OUT "</TR>\n";
327             print OUT "</TABLE>\n";
328         }
329         print OUT "$_\n";
330     }
331 }
332
333
334 #
335 # Generate Links
336 #
337
338 # @FILES = `ls $src/*.jpg $src/*.JPG $src/*.gif`;
339
340 $first = $imagelist[0];
341 if ( $first =~ m/\.jpg$/ ) {
342     # print "  ext = jpg\n";
343     $firstname = `basename $first .jpg`;
344 } elsif ( $first =~ m/\.JPG$/ ) {
345     # print "  ext = JPG\n";
346     $firstname = `basename $first .JPG`;
347 } else {
348     # print "  ext = gif\n";
349     $firstname = `basename $first .gif`;
350 }
351 chop($firstname);
352
353 $last = $imagelist[$#imagelist];
354 if ( $last =~ m/\.jpg$/ ) {
355     # print "  ext = jpg\n";
356     $lastname = `basename $last .jpg`;
357 } elsif ( $last =~ m/\.JPG$/ ) {
358     # print "  ext = JPG\n";
359     $lastname = `basename $last .JPG`;
360 } else {
361     # print "  ext = gif\n";
362     $lastname = `basename $last .gif`;
363 }
364 chop($lastname);
365
366 for ($i = 0; $i <= $#imagelist; $i++) {
367     $file = $imagelist[$i];
368     # print "'$file'\n";
369
370     if ( $i > 0 ) {
371         $prev = $imagelist[$i - 1];
372     } else {
373         $prev = "null";
374     }
375
376     if ( $i < $#imagelist ) {
377         $next = $imagelist[$i + 1];
378     } else {
379         $next = "null";
380     }
381
382     if ( $file =~ m/\.jpg$/ ) {
383         $linkname = `basename $file .jpg`;
384         $ext = "jpg";
385     } elsif ( $file =~ m/\.JPG$/ ) {
386         $linkname = `basename $file .JPG`;
387         $ext = "JPG";
388     } else {
389         $linkname = `basename $file .gif`;
390         $ext = "gif";
391     }
392     chop($linkname);
393     $nice_name = $linkname;
394     $nice_name =~ s/\_/ /g;
395
396     if ( $prev =~ m/\.jpg$/ ) {
397         # print "  ext = jpg\n";
398         $prevname = `basename $prev .jpg`;
399     } elsif ( $prev =~ m/\.JPG$/ ) {
400         # print "  ext = JPG\n";
401         $prevname = `basename $prev .JPG`;
402     } else {
403         # print "  ext = gif\n";
404         $prevname = `basename $prev .gif`;
405     }
406     chop($prevname);
407     
408     if ( $next =~ m/\.jpg$/ ) {
409         $nextname = `basename $next .jpg`;
410     } elsif ( $next =~ m/\.JPG$/ ) {
411         $nextname = `basename $next .JPG`;
412     } else {
413         $nextname = `basename $next .gif`;
414     }
415     chop($nextname);
416     
417     $outfile = "$link/$linkname.html";
418
419     open( OUT, ">$outfile" );
420     print OUT <<EOF;
421
422 <HTML>
423
424 <HEAD>
425   <TITLE>$linkname.$ext</TITLE>
426 </HEAD>
427
428 <!-- <BODY BGCOLOR="#000000" ALINK="#000000" VLINK="#000000" LINK="#000000" TEXT="#FFFFFF"> -->
429 <BODY>
430
431 <A HREF="$firstname.html">[First]</A>
432 EOF
433
434     if ( $prevname ne "null" ) {
435         print OUT "<A HREF=\"$prevname.html\">[Previous]</A>\n";
436     } else {
437         print OUT "[Previous]\n";
438     }
439
440     if ( $nextname ne "null" ) {
441         print OUT "<A HREF=\"$nextname.html\">[Next]</A>\n";
442     } else {
443         print OUT "[Next]\n";
444     }
445
446     print OUT <<EOF;
447 <A HREF="$lastname.html">[Last]</A>
448
449 <TABLE ALIGN=CENTER>
450   <TR>
451   <TD ALIGN=CENTER>
452   <FONT SIZE=+1>
453   $nice_name
454   </FONT>
455   </TD>
456   </TR>
457
458   <TR>
459   <TD ALIGN=CENTER>
460   <FONT SIZE=-1>
461 EOF
462
463     if ( -f "$src/$linkname.txt" ) {
464         # print OUT "<BR>\n";
465         open( IN, "<$src/$linkname.txt" );
466         while ( <IN> ) {
467             print OUT $_;
468         }
469         close( IN );
470     }
471
472     print OUT <<EOF;
473   </FONT>
474   </TD>
475   </TR>
476  
477 </TABLE>
478
479 Click on the image for the full size version.
480  
481 <TABLE ALIGN=CENTER>
482   <TR>
483   <TD ALIGN=CENTER>
484   <A HREF="../$src/$linkname.$ext">
485 EOF
486
487     if ( $use_large ) {
488         print OUT "  <IMG SRC=\"../$ldir/$linkname.$ext\">\n";
489     } else {
490         print OUT "  <IMG SRC=\"../$src/$linkname.$ext\">\n";
491     }
492
493     print OUT <<EOF;
494   </TD>
495   </A>
496   </TR>
497 </TABLE>
498
499 </BODY>
500 </HTML>
501 EOF
502
503     close( OUT );
504 }
505