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