You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

104 lines
2.3 KiB

#!/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";
}
}