diff options
Diffstat (limited to 'scripts/rev-update')
-rwxr-xr-x | scripts/rev-update | 136 |
1 files changed, 136 insertions, 0 deletions
diff --git a/scripts/rev-update b/scripts/rev-update new file mode 100755 index 000000000..8d1d16f8b --- /dev/null +++ b/scripts/rev-update @@ -0,0 +1,136 @@ +#!/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'. +# When called with "-u" option, it will also update the revision for the +# translated document to the revision number in the original document. +# This script only supports SVN style revision marks. + +# Note: only use the "-u" option after you have made sure there are no +# changes in content for the listed documents. + +# SYNOPSIS: +# ./rev-update [-u] [-v] [lang] +# +# (uses $lang set below if lang is not given on commandline) + +use Getopt::Std; +use File::Find; +$opt_u = $opt_v = 0; +getopts('uvV'); +# You may set this to your default language code +$lang = shift || "pl"; + +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); +} +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"); |