source: webkit/trunk/Source/WebCore/Scripts/LocalizableStrings.pm

Last change on this file was 235190, checked in by [email protected], 7 years ago

Move files in WebCore project to match Xcode folder structure
<https://webkit.org/b/188851>

Reviewed by Tim Horton.

Source/WebCore:

  • Scripts/LocalizableStrings.pm: Renamed from Source/WebCore/LocalizableStrings.pm.
  • Scripts/extract-localizable-strings.pl: Renamed from Source/WebCore/extract-localizable-strings.pl.
  • WebCore.xcodeproj/project.pbxproj: Update to match new location of files.
  • platform/audio/cocoa/WebAudioBufferList.cpp: Renamed from Source/WebCore/platform/audio/WebAudioBufferList.cpp.
  • platform/audio/cocoa/WebAudioBufferList.h: Renamed from Source/WebCore/platform/audio/WebAudioBufferList.h.
  • platform/graphics/avfoundation/objc/MediaSampleAVFObjC.h: Renamed from Source/WebCore/platform/graphics/avfoundation/MediaSampleAVFObjC.h.
  • platform/ios/wak/WAKViewInternal.h: Renamed from Source/WebCore/platform/WAKViewInternal.h. Also fix 3 webkit-style warnings.

Tools:

  • Scripts/extract-localizable-strings:
  • Scripts/update-webkit-localizable-strings:
  • Update to match new location of extract-localizable-strings.pl.
  • Property svn:executable set to *
File size: 6.5 KB
Line 
1# Copyright (C) 2006, 2007, 2009, 2010, 2013, 2015 Apple Inc. All rights reserved.
2#
3# Redistribution and use in source and binary forms, with or without
4# modification, are permitted provided that the following conditions
5# are met:
6# 1. Redistributions of source code must retain the above copyright
7# notice, this list of conditions and the following disclaimer.
8# 2. Redistributions in binary form must reproduce the above copyright
9# notice, this list of conditions and the following disclaimer in the
10# documentation and/or other materials provided with the distribution.
11#
12# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
13# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
14# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
15# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
16# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
17# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
18# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
19# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
20# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
21# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
22# THE POSSIBILITY OF SUCH DAMAGE.
23
24use strict;
25
26my $treatWarningsAsErrors = 0;
27
28sub setTreatWarningsAsErrors($)
29{
30 ($treatWarningsAsErrors) = @_;
31}
32
33my $sawError = 0;
34
35sub sawError()
36{
37 return $sawError;
38}
39
40sub emitError($$$)
41{
42 my ($file, $line, $message) = @_;
43 print "$file:$line: $message\n";
44 $sawError = 1;
45}
46
47sub emitWarning($$$)
48{
49 my ($file, $line, $message) = @_;
50 my $prefix = $treatWarningsAsErrors ? "" : "warning: ";
51 print "$file:$line: $prefix$message\n";
52 $sawError = 1 if $treatWarningsAsErrors;
53}
54
55# Unescapes C language hexadecimal escape sequences.
56sub unescapeHexSequence($)
57{
58 my ($originalStr) = @_;
59
60 my $escapedStr = $originalStr;
61 my $unescapedStr = "";
62
63 for (;;) {
64 if ($escapedStr =~ s-^\\x([[:xdigit:]]+)--) {
65 if (256 <= hex($1)) {
66 print "Hexadecimal escape sequence out of range: \\x$1\n";
67 return undef;
68 }
69 $unescapedStr .= pack("H*", $1);
70 } elsif ($escapedStr =~ s-^(.)--) {
71 $unescapedStr .= $1;
72 } else {
73 return $unescapedStr;
74 }
75 }
76}
77
78my $keyCollisionCount = 0;
79
80sub keyCollisionCount()
81{
82 return $keyCollisionCount;
83}
84
85my $localizedCount = 0;
86
87sub localizedCount()
88{
89 return $localizedCount;
90}
91
92my %stringByKey;
93my %commentByKey;
94my %fileByKey;
95my %lineByKey;
96
97sub HandleUIString
98{
99 my ($string, $key, $comment, $file, $line) = @_;
100
101 $localizedCount++;
102
103 my $bad = 0;
104 $string = unescapeHexSequence($string);
105 if (!defined($string)) {
106 print "$file:$line: string has an illegal hexadecimal escape sequence\n";
107 $bad = 1;
108 }
109 $key = unescapeHexSequence($key);
110 if (!defined($key)) {
111 print "$file:$line: key has an illegal hexadecimal escape sequence\n";
112 $bad = 1;
113 }
114 $comment = unescapeHexSequence($comment);
115 if (!defined($comment)) {
116 print "$file:$line: comment has an illegal hexadecimal escape sequence\n";
117 $bad = 1;
118 }
119 if (grep { $_ == 0xFFFD } unpack "U*", $string) {
120 print "$file:$line: string for translation has illegal UTF-8 -- most likely a problem with the Text Encoding of the source file\n";
121 $bad = 1;
122 }
123 if ($string ne $key && grep { $_ == 0xFFFD } unpack "U*", $key) {
124 print "$file:$line: key has illegal UTF-8 -- most likely a problem with the Text Encoding of the source file\n";
125 $bad = 1;
126 }
127 if (grep { $_ == 0xFFFD } unpack "U*", $comment) {
128 print "$file:$line: comment for translation has illegal UTF-8 -- most likely a problem with the Text Encoding of the source file\n";
129 $bad = 1;
130 }
131 if ($bad) {
132 $sawError = 1;
133 return;
134 }
135
136 if ($stringByKey{$key} && $stringByKey{$key} ne $string) {
137 emitWarning($file, $line, "encountered the same key, \"$key\", twice, with different strings");
138 emitWarning($fileByKey{$key}, $lineByKey{$key}, "previous occurrence");
139 $keyCollisionCount++;
140 return;
141 }
142 if ($commentByKey{$key} && $commentByKey{$key} ne $comment) {
143 emitWarning($file, $line, "encountered the same key, \"$key\", twice, with different comments");
144 emitWarning($fileByKey{$key}, $lineByKey{$key}, "previous occurrence");
145 $keyCollisionCount++;
146 return;
147 }
148
149 $fileByKey{$key} = $file;
150 $lineByKey{$key} = $line;
151 $stringByKey{$key} = $string;
152 $commentByKey{$key} = $comment;
153}
154
155sub writeStringsFile($)
156{
157 my ($file) = @_;
158
159 my $localizedStrings = "";
160
161 for my $key (sort keys %commentByKey) {
162 $localizedStrings .= "/* $commentByKey{$key} */\n\"$key\" = \"$stringByKey{$key}\";\n\n";
163 }
164
165 # Write out the strings file as UTF-8
166 open STRINGS, ">", $file or die;
167 print STRINGS $localizedStrings;
168 close STRINGS;
169}
170
171sub verifyStringsFile($)
172{
173 my ($file) = @_;
174
175 open STRINGS, $file or die;
176
177 my $lastComment;
178 my $line;
179 my $sawError;
180
181 while (<STRINGS>) {
182 chomp;
183
184 next if (/^\s*$/);
185
186 if (/^\/\* (.*) \*\/$/) {
187 $lastComment = $1;
188 } elsif (/^"((?:[^\\]|\\[^"])*)"\s*=\s*"((?:[^\\]|\\[^"])*)";$/) #
189 {
190 my $string = delete $stringByKey{$1};
191 if (!defined $string) {
192 print "$file:$.: unused key \"$1\"\n";
193 $sawError = 1;
194 } else {
195 if (!($string eq $2)) {
196 print "$file:$.: unexpected value \"$2\" for key \"$1\"\n";
197 print "$fileByKey{$1}:$lineByKey{$1}: expected value \"$string\" defined here\n";
198 $sawError = 1;
199 }
200 if (!($lastComment eq $commentByKey{$1})) {
201 print "$file:$.: unexpected comment /* $lastComment */ for key \"$1\"\n";
202 print "$fileByKey{$1}:$lineByKey{$1}: expected comment /* $commentByKey{$1} */ defined here\n";
203 $sawError = 1;
204 }
205 }
206 } else {
207 print "$file:$.: line with unexpected format: $_\n";
208 $sawError = 1;
209 }
210 }
211
212 for my $missing (keys %stringByKey) {
213 print "$fileByKey{$missing}:$lineByKey{$missing}: missing key \"$missing\"\n";
214 $sawError = 1;
215 }
216
217 if ($sawError) {
218 print "\n$file:0: file is not up to date.\n";
219 exit 1;
220 }
221}
222
2231;
Note: See TracBrowser for help on using the repository browser.