]> git.sur5r.net Git - bacula/docs/blob - docs/manual-de/translate_images.pl
Add base for German manual
[bacula/docs] / docs / manual-de / translate_images.pl
1 #!/usr/bin/perl -w
2 #
3 use strict;
4
5 # Used to change the names of the image files generated by latex2html from imgxx.png
6 #  to meaningful names.  Provision is made to go either from or to the meaningful names.
7 #  The meaningful names are obtained from a file called imagename_translations, which
8 #  is generated by extensions to latex2html in the make_image_file subroutine in 
9 #  bacula.perl.
10
11 # Opens the file imagename_translations and reads the contents into a hash.
12 # The hash is creaed with the imgxx.png files as the key if processing TO
13 #  meaningful filenames, and with the meaningful filenames as the key if 
14 #  processing FROM meaningful filenames.
15 # Then opens the html file(s) indicated in the command-line arguments and
16 #  changes all image references according to the translations described in the 
17 #  above file.  Finally, it renames the image files.
18 #
19 # Original creation: 3-27-05  by Karl Cunningham.
20 #   Modified 5-21-05 to go FROM and TO meaningful filenames.
21 #
22 my $TRANSFILE = "imagename_translations";
23 my $path;
24
25 # Loads the contents of $TRANSFILE file into the hash referenced in the first 
26 #  argument. The hash is loaded to translate old to new if $direction is 0, 
27 #  otherwise it is loaded to translate new to old.  In this context, the 
28 #  'old' filename is the meaningful name, and the 'new' filename is the 
29 #  imgxx.png filename.  It is assumed that the old image is the one that
30 #  latex2html has used as the source to create the imgxx.png filename.
31 # The filename extension is taken from the file 
32 sub read_transfile {
33         my ($trans,$direction) = @_;
34
35         if (!open IN,"<$path$TRANSFILE") {
36                 print "WARNING:  Cannot open image translation file $path$TRANSFILE for reading\n";
37                 print "   Image filename translation aborted\n\n";
38                 exit 0;
39         }
40
41         while (<IN>) {
42                 chomp;
43                 my ($new,$old) = split(/\001/);
44
45                 # Old filenames will usually have a leading ./ which we don't need.
46                 $old =~ s/^\.\///;
47
48                 # The filename extension of the old filename must be made to match
49                 #  the new filename because it indicates the encoding format of the image.
50                 my ($ext) = $new =~ /(\.[^\.]*)$/;
51                 $old =~ s/\.[^\.]*$/$ext/;
52                 if ($direction == 0) {
53                         $trans->{$new} = $old;
54                 } else {
55                         $trans->{$old} = $new;
56                 }
57         }
58         close IN;
59 }
60         
61 # Translates the image names in the file given as the first argument, according to 
62 #  the translations in the hash that is given as the second argument.
63 #  The file contents are read in entirely into a string, the string is processed, and
64 #  the file contents are then written. No particular care is taken to ensure that the
65 #  file is not lost if a system failure occurs at an inopportune time.  It is assumed
66 #  that the html files being processed here can be recreated on demand.
67 #
68 # Links to other files are added to the %filelist for processing.  That way,
69 #  all linked files will be processed (assuming they are local).
70 sub translate_html {
71         my ($filename,$trans,$filelist) = @_;
72         my ($contents,$out,$this,$img,$dest);
73         my $cnt = 0;
74
75         # If the filename is an external link ignore it.  And drop any file:// from
76         #  the filename.
77         $filename =~ /^(http|ftp|mailto)\:/ and return 0;
78         $filename =~ s/^file\:\/\///;
79         # Load the contents of the html file.
80         if (!open IF,"<$path$filename") {
81                 print "WARNING:  Cannot open $path$filename for reading\n";
82                 print "  Image Filename Translation aborted\n\n";
83                 exit 0;
84         }
85
86         while (<IF>) {
87                 $contents .= $_;
88         }
89         close IF;
90
91         # Now do the translation...
92         #  First, search for an image filename.
93         while ($contents =~ /\<\s*IMG[^\>]*SRC=\"/si) {
94                 $contents = $';
95                 $out .= $` . $&;
96                 
97                 # The next thing is an image name.  Get it and translate it.
98                 $contents =~ /^(.*?)\"/s;
99                 $contents = $';
100                 $this = $&;
101                 $img = $1;
102                 # If the image is in our list of ones to be translated, do it
103                 #  and feed the result to the output.
104                 $cnt += $this =~ s/$img/$trans->{$img}/ if (defined($trans->{$img}));
105                 $out .= $this;
106         }
107         $out .= $contents;
108
109         # Now send the translated text to the html file, overwriting what's there.
110         open OF,">$path$filename" or die "Cannot open $path$filename for writing\n";
111         print OF $out;
112         close OF;
113
114         # Now look for any links to other files and add them to the list of files to do.
115         while ($out =~ /\<\s*A[^\>]*HREF=\"(.*?)\"/si) {
116                 $out = $';
117                 $dest = $1;
118                 # Drop an # and anything after it.
119                 $dest =~ s/\#.*//;
120                 $filelist->{$dest} = '' if $dest;
121         }
122         return $cnt;
123 }
124         
125 # REnames the image files spefified in the %translate hash.
126 sub rename_images {
127         my $translate = shift;
128         my ($response);
129
130         foreach (keys(%$translate)) {
131                 $response = `mv -f $path$_ $path$translate->{$_} 2>&1`;
132                 $response and print "ERROR from system    $response\n";
133         }
134 }
135
136 #################################################
137 ############# MAIN #############################
138 ################################################
139
140 # %filelist starts out with keys from the @ARGV list.  As files are processed,
141 #  any links to other files are added to the %filelist.  A hash of processed
142 #  files is kept so we don't do any twice.
143
144 # The first argument must be either --to_meaningful_names or --from_meaningful_names
145
146 my (%translate,$search_regex,%filelist,%completed,$thisfile);
147 my ($cnt,$direction);
148
149 my $arg0 = shift(@ARGV);
150 $arg0 =~ /^(--to_meaningful_names|--from_meaningful_names)$/ or
151         die "ERROR: First argument must be either \'--to_meaningful_names\' or \'--from_meaningful_names\'\n";
152
153 $direction = ($arg0 eq '--to_meaningful_names') ? 0 : 1;
154
155 (@ARGV) or die "ERROR: Filename(s) to process must be given as arguments\n";
156
157 # Use the first argument to get the path to the file of translations.
158 my $tmp = $ARGV[0];
159 ($path) = $tmp =~ /(.*\/)/;
160 $path = '' unless $path;
161
162 read_transfile(\%translate,$direction);
163
164 foreach (@ARGV) {
165         # Strip the path from the filename, and use it later on.
166         if (s/(.*\/)//) {
167                 $path = $1;
168         } else {
169                 $path = '';
170         }
171         $filelist{$_} = '';
172
173         while ($thisfile = (keys(%filelist))[0]) {
174                 $cnt += translate_html($thisfile,\%translate,\%filelist) if (!exists($completed{$thisfile}));
175                 delete($filelist{$thisfile});
176                 $completed{$thisfile} = '';
177         }
178         print "translate_images.pl: $cnt image filenames translated ",($direction)?"from":"to"," meaningful names\n";
179 }
180
181 rename_images(\%translate);