1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146
|
#!/usr/bin/perl -w
#
# This script converts and updates revision comments in translations.
# It will automatically replace revision comments for 'original documents'
# with revision comments for 'translated documents'.
# This script only supports SVN style revision marks.
#
use Getopt::Std;
use File::Find;
$opt_h = $opt_u = $opt_v = 0;
getopts('huv');
# You may set this to your default language code
$lang = shift || "pl";
sub usage
{
printf <<HERE, $lang;
Usage: $0 [options] [<language>]
-h print this help message.
-u update the revision for the translated document to the revision
number in the original document (use only after having made sure
there are no changes in content for the listed documents).
-v be verbose.
Current <language> is '%s'.
HERE
exit 0;
}
sub convert
{
my ($plfname, $plrev) = (@_);
my $transtext = '';
open (FILE, "< $plfname");
while (<FILE>) {
if (/<!--\s*\$Id: \S+ (\d+) /) {
s/(<!--)(.*)(-->)/$1 original version: $plrev untranslated $3/;
}
$transtext .= $_;
}
close (FILE);
warn "Writing $plfname\n" if $opt_v;
open (FILE, "> $plfname");
print FILE $transtext;
close (FILE);
}
sub update
{
my ($plfname, $plrev, $enrev) = (@_);
my $transtext = '';
open (FILE, "< $plfname");
while (<FILE>) {
if (/<!--\s*original version/) {
s/(<!--.*\s)($plrev)(\s.*-->)/$1$enrev$3/;
}
$transtext .= $_;
}
close (FILE);
warn "Writing $plfname\n" if $opt_v;
open (FILE, "> $plfname");
print FILE $transtext;
close (FILE);
}
sub getrev
{
my ($plfname, $enfname) = (@_);
my ($plrev, $enrev) = (0, 0);
my ($notconverted, $untrans) = (0, 0);
warn "checking $plfname:\n" if $opt_v;
open FILE, $plfname or warn "$plfname: $!\n" and return;
while (<FILE>) {
if (/<!--\s*original version\D*(\d+)\s*-->/) {
$plrev = $1;
last;
}
if (/<!--\s*original version\D*(\d+)\s*untranslated\s*-->/) {
$plrev = $1;
$untrans = 1;
last;
}
# Also check for revision comments of original documents
if (/<!--\s*\$Id: \S+ (\d+) /) {
$plrev = $1;
$notconverted = 1;
$untrans = 1;
last;
}
}
warn "checking $enfname:\n" if $opt_v;
open FILE, $enfname or warn "$enfname: $!\n" and return;
while (<FILE>) {
if (/<!--\s*\$Id: \S+ (\d+) /) {
$enrev = $1;
last;
}
}
close FILE;
warn "failed to find revision for $plfname\n" unless $plrev;
warn "failed to find revision for $enfname\n" unless $enrev;
if ($notconverted) {
warn "$plfname: converting revision comment\n";
warn " document marked 'untranslated'\n";
convert($plfname, $plrev);
}
return ($plrev, $enrev, $untrans);
}
sub checkrev
{
my ($plfname, $enfname) = (@_);
my ($plrev, $enrev, $untrans) = getrev($plfname, $enfname);
$plrev and $enrev or return;
if ( "$plrev" ne "$enrev" ) {
if ($untrans) {
print "$enfname : $plrev -> $enrev (untranslated)\n";
} else {
print "$enfname : $plrev -> $enrev\n";
}
if ($opt_u) {
update($plfname, $plrev, $enrev);
print "$plfname : revision updated\n";
}
}
}
sub process
{
my $enfname = $File::Find::name;
return unless $enfname =~ m/\.xml$/;
my $plfname = $enfname;
$plfname =~ s,^en/,$lang/,;
checkrev($plfname, $enfname);
}
usage() if $opt_h;
File::Find::find({ wanted => \&process, no_chdir => 1 }, 'en');
#checkrev("build/install.$lang.xml", "build/install.en.xml");
#checkdiff("release-notes.$lang.sgml","release-notes.sgml");
#checkdiff("index.$lang.html.m4","index.en.html.m4");
#checkdiff("dselect-beginner.$lang.sgml","dselect-beginner.sgml");
|