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