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
|
#!/usr/bin/perl -w
# This script checks if the translations of the documents are up to date.
# When called with "-d" option, it also prints what has changed in the
# original since last translation.
# If the "-r" option is used with the "-d" option, the diff will be taken
# against the revision number specified with the -r option instead of
# the latest revision of the English original.
# When called with "-s" option, it also shows all files that are marked
# untranslated.
# SYNOPSIS:
# ./doc-check [-d] [-r <revision>] [-s] [-v] [-V] [lang]
#
# (uses $lang set below if lang is not given on commandline)
use Getopt::Std;
use File::Find;
$opt_d = $opt_r = $opt_s = $opt_v = $opt_V = 0;
getopts('r:dsvV');
# You may set this to your default language code
$lang = shift || "pl";
if ($opt_r and $opt_r !~ /[0-9]+/) {
warn "Please enter a revision number for parameter -r.\n";
exit 1
}
sub checkdiff
{
my ($plfname, $enfname) = (@_);
my ($plrev, $enrev, $untrans) = getrev($plfname, $enfname);
$plrev and $enrev or return;
if ( "$plrev" ne "$enrev" ) {
if ($opt_d and $opt_r and $opt_r < $enrev) {
$enrev = $opt_r;
}
if ($untrans) {
print "$enfname : $plrev -> $enrev (untranslated)\n";
} else {
print "$enfname : $plrev -> $enrev\n";
}
if ($opt_d) {
my $s = "svn diff -r $plrev:$enrev $enfname";
warn "running $s:\n" if ($opt_V);
system($s);
}
} else {
if ($untrans && $opt_s) {
print "$plfname: untranslated\n";
}
}
}
sub getrev
{
my ($plfname, $enfname) = (@_);
my ($plrev, $enrev, $untrans, $notconverted) = (0, 0, 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;
}
# Also support CVS style revision comments (depreciated)
if (/<!--\s*original document: en\/\S+, revision ([\d\.]+)\s*-->/) {
$plrev = $1;
last;
}
}
warn "checking $enfname:\n" if $opt_v;
open FILE, $enfname or warn "$enfname: $!\n" and return;
while (<FILE>) {
if (/\$Id: \S+ (\d+) /) {
$enrev = $1;
last;
}
# Also support CVS style revision comments (depreciated)
if (/\$Revision: (\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: contains revision comment for original document\n";
warn " use 'rev-update' to convert\n";
}
return ($plrev, $enrev, $untrans);
}
sub process
{
my $enfname = $File::Find::name;
return unless $enfname =~ m/\.xml$/;
my $plfname = $enfname;
$plfname =~ s,^en/,$lang/,;
checkdiff($plfname, $enfname);
}
File::Find::find({ wanted => \&process, no_chdir => 1 }, 'en');
#checkdiff("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");
|