1: 2eval 'exec perl -wS $0 ${1+"$@"}' 3 if 0; 4 5#************************************************************** 6# 7# Licensed to the Apache Software Foundation (ASF) under one 8# or more contributor license agreements. See the NOTICE file 9# distributed with this work for additional information 10# regarding copyright ownership. The ASF licenses this file 11# to you under the Apache License, Version 2.0 (the 12# "License"); you may not use this file except in compliance 13# with the License. You may obtain a copy of the License at 14# 15# http://www.apache.org/licenses/LICENSE-2.0 16# 17# Unless required by applicable law or agreed to in writing, 18# software distributed under the License is distributed on an 19# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 20# KIND, either express or implied. See the License for the 21# specific language governing permissions and limitations 22# under the License. 23# 24#************************************************************** 25 26 27 28use warnings; 29use strict 'vars'; 30 31my $my_lang = 'en-US'; 32my $plist = 'Info.plist'; 33my $lines = 0; 34 35while ($_ = $ARGV[0], /^-/) { 36 shift; 37 last if /^--$/; 38 if (/^-l/) { 39 $my_lang = $ARGV[0]; 40 shift; 41 } elsif (/^-p/) { 42 $plist = $ARGV[0]; 43 shift; 44 } 45} 46 47# open input file (Info.plist) 48unless (open(SOURCE, $plist)) { 49 print STDERR "Can't open $plist file: $!\n"; 50 return; 51} 52 53# XML::Parser not installed by default on MacOS X 54my (%documents,$key,$icon,$name); 55 56$name = ""; 57 58while (<SOURCE>) { 59 if ( /<\/dict>/ ) { 60 $documents{$icon} = $name if length $name > 0; 61 $key = $icon = $name = ""; 62 } elsif ( /<key>(.*)<\/key>/ ) { 63 $key = $1; 64 } elsif ( /<string>(.*)<\/string>/ ) { 65 if ( $key eq 'CFBundleTypeIconFile' ) { 66 $icon = $1; 67 $icon =~ s/\.icns$//; 68 } elsif ( $key eq 'CFBundleTypeName' ) { 69 $name = $1; 70 } 71 } 72} 73 74close (SOURCE); 75 76print_lang($my_lang); 77print_lang('en-US') unless $lines > 0; 78 79sub print_lang 80{ 81 my ($this_lang) = @_; 82 83 # open input file (documents.ulf) 84 unless (open(SOURCE, $ARGV[0])) { 85 print STDERR "Can't open $ARGV[0] file: $!\n"; 86 return; 87 } 88 89 my $last_section; 90 91 while (<SOURCE>) { 92 93 if ( /\[(.*)\]/ ) { 94 $last_section = $1; 95 } else { 96 # split locale = "value" into 2 strings 97 my ($lang, $value) = split ' = '; 98 99 if ( $lang ne $_ && $lang eq $this_lang && exists $documents{$last_section} ) { 100 # replacing product variable doesn't work inside zip files and also not for UTF-16 101 next if /%PRODUCTNAME/; 102 s/$lang/"$documents{$last_section}"/; 103 s/\n/;\n/; 104 print; 105 $lines += 1; 106 } 107 } 108 } 109 110 close (SOURCE); 111} 112