blob: 878681e3872e7d1efd5da2a81a2058b8fcfbecf5 [file] [log] [blame]
Eric Fischer50283d72009-06-24 15:51:25 -07001#!/usr/bin/perl
2
3sub usage {
4 print STDERR "Usage: findunusedtranslations values/strings.xml\n";
5 print STDERR "\n";
6 print STDERR "Will read values/strings.xml and rewrite\n";
7 print STDERR "values-xx/strings.xml and values-xx-rYY/strings.xml\n";
8 print STDERR "files to remove strings that no longer appear in the\n";
9 print STDERR "base strings file.\n";
10
11 exit 1;
12}
13
14if ($#ARGV != 0) {
15 usage();
16}
17
18unless ($ARGV[0] =~ /^(.*)\/values([^\/]*)\/(.*\.xml)/) {
19 print STDERR "Bad format for $ARGV[0]\n";
20 usage();
21}
22
23unless (-f $ARGV[0]) {
24 print STDERR "$0: $ARGV[0]: No such file\n";
25}
26
27$prefix = $1;
28$values = $2;
29$suffix = $3;
30
31if ($values =~ /^(-mcc[^-]*)*(-mnc[^-]*)*(.*)$/) {
32 $pattern1 = "$prefix/values$1$2-??$3/$suffix";
33 $pattern2 = "$prefix/values$1$2-??-r??$3/$suffix";
34} else {
35 $pattern1 = "$prefix/values-??$values/$suffix";
36 $pattern2 = "$prefix/values-??-r??$values/$suffix";
37}
38
39@matches = (glob($pattern1), glob($pattern2));
40
41open(IN, "<$ARGV[0]");
42while (<IN>) {
43 if (/<string [^>]*name="([^"]*)"/) {
44 $string{$1} = 1;
45 }
46 if (/<string-array [^>]*name="([^"]*)"/) {
47 $stringarray{$1} = 1;
48 }
49 if (/<plurals [^>]*name="([^"]*)"/) {
50 $plurals{$1} = 1;
51 }
52}
53close(IN);
54
55for $match (@matches) {
56 print "Rewriting $match\n";
57 $suppress = 0;
58 $text = "";
59 $changes = 0;
60
61 open(IN, "<$match");
62 while (<IN>) {
63 if (/<string [^>]*name="([^"]*)"/) {
64 if ($string{$1} == 0) {
65 $suppress = 1;
66 $changes = 1;
67 }
68 }
69 if (/<string-array [^>]*name="([^"]*)"/) {
70 if ($stringarray{$1} == 0) {
71 $suppress = 1;
72 $changes = 1;
73 }
74 }
75 if (/<plurals [^>]*name="([^"]*)"/) {
76 if ($plurals{$1} == 0) {
77 $suppress = 1;
78 $changes = 1;
79 }
80 }
81
82 $text .= $_ unless ($suppress);
83
84 if (/<\/string/) {
85 $suppress = 0;
86 }
87 if (/<\/string-array/) {
88 $suppress = 0;
89 }
90 if (/<\/plurals/) {
91 $suppress = 0;
92 }
93 }
94 close(IN);
95
96 if ($changes) {
97 open(OUT, ">$match");
98 print OUT $text;
99 close(OUT);
100 } else {
101 print "(no changes)\n";
102 }
103}