It doesn't really know XML so it is reliant on the translation files being straightforwardly formatted, but it seems to work.
104 lines
2.3 KiB
Perl
Executable File
104 lines
2.3 KiB
Perl
Executable File
#!/usr/bin/perl
|
|
|
|
sub usage {
|
|
print STDERR "Usage: findunusedtranslations values/strings.xml\n";
|
|
print STDERR "\n";
|
|
print STDERR "Will read values/strings.xml and rewrite\n";
|
|
print STDERR "values-xx/strings.xml and values-xx-rYY/strings.xml\n";
|
|
print STDERR "files to remove strings that no longer appear in the\n";
|
|
print STDERR "base strings file.\n";
|
|
|
|
exit 1;
|
|
}
|
|
|
|
if ($#ARGV != 0) {
|
|
usage();
|
|
}
|
|
|
|
unless ($ARGV[0] =~ /^(.*)\/values([^\/]*)\/(.*\.xml)/) {
|
|
print STDERR "Bad format for $ARGV[0]\n";
|
|
usage();
|
|
}
|
|
|
|
unless (-f $ARGV[0]) {
|
|
print STDERR "$0: $ARGV[0]: No such file\n";
|
|
}
|
|
|
|
$prefix = $1;
|
|
$values = $2;
|
|
$suffix = $3;
|
|
|
|
if ($values =~ /^(-mcc[^-]*)*(-mnc[^-]*)*(.*)$/) {
|
|
$pattern1 = "$prefix/values$1$2-??$3/$suffix";
|
|
$pattern2 = "$prefix/values$1$2-??-r??$3/$suffix";
|
|
} else {
|
|
$pattern1 = "$prefix/values-??$values/$suffix";
|
|
$pattern2 = "$prefix/values-??-r??$values/$suffix";
|
|
}
|
|
|
|
@matches = (glob($pattern1), glob($pattern2));
|
|
|
|
open(IN, "<$ARGV[0]");
|
|
while (<IN>) {
|
|
if (/<string [^>]*name="([^"]*)"/) {
|
|
$string{$1} = 1;
|
|
}
|
|
if (/<string-array [^>]*name="([^"]*)"/) {
|
|
$stringarray{$1} = 1;
|
|
}
|
|
if (/<plurals [^>]*name="([^"]*)"/) {
|
|
$plurals{$1} = 1;
|
|
}
|
|
}
|
|
close(IN);
|
|
|
|
for $match (@matches) {
|
|
print "Rewriting $match\n";
|
|
$suppress = 0;
|
|
$text = "";
|
|
$changes = 0;
|
|
|
|
open(IN, "<$match");
|
|
while (<IN>) {
|
|
if (/<string [^>]*name="([^"]*)"/) {
|
|
if ($string{$1} == 0) {
|
|
$suppress = 1;
|
|
$changes = 1;
|
|
}
|
|
}
|
|
if (/<string-array [^>]*name="([^"]*)"/) {
|
|
if ($stringarray{$1} == 0) {
|
|
$suppress = 1;
|
|
$changes = 1;
|
|
}
|
|
}
|
|
if (/<plurals [^>]*name="([^"]*)"/) {
|
|
if ($plurals{$1} == 0) {
|
|
$suppress = 1;
|
|
$changes = 1;
|
|
}
|
|
}
|
|
|
|
$text .= $_ unless ($suppress);
|
|
|
|
if (/<\/string/) {
|
|
$suppress = 0;
|
|
}
|
|
if (/<\/string-array/) {
|
|
$suppress = 0;
|
|
}
|
|
if (/<\/plurals/) {
|
|
$suppress = 0;
|
|
}
|
|
}
|
|
close(IN);
|
|
|
|
if ($changes) {
|
|
open(OUT, ">$match");
|
|
print OUT $text;
|
|
close(OUT);
|
|
} else {
|
|
print "(no changes)\n";
|
|
}
|
|
}
|