-
Notifications
You must be signed in to change notification settings - Fork 9
/
Copy pathnib2str
executable file
·67 lines (56 loc) · 1.74 KB
/
nib2str
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
#!/usr/bin/perl
$td="/tmp/nib-$$";
system "rm -rf '$td'";
mkdir "/tmp/nib-$$" || die "cannot create temporary directory for processing";
$en=shift;
$tl=shift;
if ( $en eq '' || $tl eq '') {
print "\n Usage: $ARGV[0] <english.nib> <lang.nib>\n\n";
exit 1;
}
system "ibtool --generate-strings-file '$td/en.uni' '$en'" || die "converting en file to strings failed";
system "iconv -f utf-16 -t utf-8 '$td/en.uni' > '$td/en.txt'" || die "converting en strings to unicode failed";
system "ibtool --generate-strings-file '$td/tl.uni' '$tl'" || die "converting lang file to strings failed";
system "iconv -f utf-16 -t utf-8 '$td/tl.uni' > '$td/tl.txt'" || die "converting lang strings to unicode failed";
sub parse_text {
while (<IN>) {
#if (/\/\* Class = \"(.*?)\"; ([^ ]+) = \"(.*?)\"; ObjectId = \"(\d+)\";/) { };
chomp;
if (/^\"([a-zA-Z0-9.]+)\" = \"(.*)\";$/) {
$h{$1} = $2;
if (defined $cls) { $hc{$1} = $cls; undef $cls; }
} elsif (/^\/\* Class = \"(.*?)\"; /) {
$cls = $1;
} elsif ($_ eq '') {
undef $cls;
} else {
print STDERR "WARNING: unknown line: $_\n";
undef $cls;
}
}
}
open IN, "$td/en.txt";
parse_text;
close IN;
%ent = %h;
undef %h;
open IN, "$td/tl.txt";
parse_text;
close IN;
%tlt = %h;
undef %h;
foreach (sort { $ent{$a} cmp $ent{$b} } keys %ent) {
$tra = $tlt{$_};
$tra = $ent{$_} if ($tra eq '');
print "/* Entry = \"$_\"; Class = \"$hc{$_}\" */\n\"$ent{$_}\" = \"$tra\";\n\n";
}
foreach (keys(%tlt)) {
if (!defined $ent{$_} && $ent{$_} ne '') { ## orphan non-empty text strings
print "/* OrphanEntry = \"$_\"; Class = \"$hc{$_}\"; text = \"$ent{$_}\" */\n";
}
}
if ($ENV{KEEP} ne '') {
print STDERR "KEEP set, leaving all files in $td\n";
exit0;
}
system "rm -rf '$td'";