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