xref: /aoo4110/main/i18npool/source/isolang/langid.pl (revision b1cdbd2c)
1*b1cdbd2cSJim Jagielski: # -*- perl -*-  vim: ft=perl
2*b1cdbd2cSJim Jagielskieval 'exec perl -w -S $0 ${1+"$@"}'
3*b1cdbd2cSJim Jagielskiif 0;
4*b1cdbd2cSJim Jagielski#**************************************************************
5*b1cdbd2cSJim Jagielski#
6*b1cdbd2cSJim Jagielski#  Licensed to the Apache Software Foundation (ASF) under one
7*b1cdbd2cSJim Jagielski#  or more contributor license agreements.  See the NOTICE file
8*b1cdbd2cSJim Jagielski#  distributed with this work for additional information
9*b1cdbd2cSJim Jagielski#  regarding copyright ownership.  The ASF licenses this file
10*b1cdbd2cSJim Jagielski#  to you under the Apache License, Version 2.0 (the
11*b1cdbd2cSJim Jagielski#  "License"); you may not use this file except in compliance
12*b1cdbd2cSJim Jagielski#  with the License.  You may obtain a copy of the License at
13*b1cdbd2cSJim Jagielski#
14*b1cdbd2cSJim Jagielski#    http://www.apache.org/licenses/LICENSE-2.0
15*b1cdbd2cSJim Jagielski#
16*b1cdbd2cSJim Jagielski#  Unless required by applicable law or agreed to in writing,
17*b1cdbd2cSJim Jagielski#  software distributed under the License is distributed on an
18*b1cdbd2cSJim Jagielski#  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
19*b1cdbd2cSJim Jagielski#  KIND, either express or implied.  See the License for the
20*b1cdbd2cSJim Jagielski#  specific language governing permissions and limitations
21*b1cdbd2cSJim Jagielski#  under the License.
22*b1cdbd2cSJim Jagielski#
23*b1cdbd2cSJim Jagielski#**************************************************************
24*b1cdbd2cSJim Jagielski
25*b1cdbd2cSJim Jagielski
26*b1cdbd2cSJim Jagielski
27*b1cdbd2cSJim Jagielski# See Usage() below or invoke without arguments for short instructions.
28*b1cdbd2cSJim Jagielski# For long instructions use the source, Luke ;-)
29*b1cdbd2cSJim Jagielski
30*b1cdbd2cSJim Jagielskiuse strict;
31*b1cdbd2cSJim Jagielski
32*b1cdbd2cSJim Jagielskisub Usage()
33*b1cdbd2cSJim Jagielski{
34*b1cdbd2cSJim Jagielski    print STDERR
35*b1cdbd2cSJim Jagielski        "\n",
36*b1cdbd2cSJim Jagielski        "langid - a hackish utility to lookup lang.h language defines and LangIDs,\n",
37*b1cdbd2cSJim Jagielski        "isolang.cxx ISO639/ISO3166 mapping, locale data files, langtab.src language\n",
38*b1cdbd2cSJim Jagielski        "listbox entries, postset.mk, file_ooo.scp registry name, globals.pm and\n",
39*b1cdbd2cSJim Jagielski        "msi-encodinglist.txt\n\n",
40*b1cdbd2cSJim Jagielski
41*b1cdbd2cSJim Jagielski        "Usage: $0 [--single] {language string} | {LangID} | {primarylanguage sublanguage} | {language-country}\n\n",
42*b1cdbd2cSJim Jagielski
43*b1cdbd2cSJim Jagielski        "A language string will be used as a generic string match in all searched files.\n",
44*b1cdbd2cSJim Jagielski        "You may enclose the language string in word delimiters,\n",
45*b1cdbd2cSJim Jagielski        "e.g. \\blanguage_german\\b for a specific match.\n",
46*b1cdbd2cSJim Jagielski        "If the language string expression matches more than one define,\n",
47*b1cdbd2cSJim Jagielski        "e.g. as in 'german', all matching defines will be processed.\n",
48*b1cdbd2cSJim Jagielski        "If the language string does not match a define or an identifier in\n",
49*b1cdbd2cSJim Jagielski        "langtab.src, a generic string match of the listbox entries will be tried.\n\n",
50*b1cdbd2cSJim Jagielski
51*b1cdbd2cSJim Jagielski        "Numeric values of LangID,primarylanguage,sublanguage can be given\n",
52*b1cdbd2cSJim Jagielski        "decimal, hexagesimal (leading 0x), octal (leading 0) or binary (leading 0b).\n",
53*b1cdbd2cSJim Jagielski        "The exact language_define of an exact match will be used in remaining lookups.\n\n",
54*b1cdbd2cSJim Jagielski
55*b1cdbd2cSJim Jagielski        "A language-country pair will lookup a xx-YY mapping from isolang.cxx,\n",
56*b1cdbd2cSJim Jagielski        "for example: 'en-US' or 'de-' or '-CH',\n",
57*b1cdbd2cSJim Jagielski        "xx and YY can be given case insensitive, will be lowered-uppered internally,\n",
58*b1cdbd2cSJim Jagielski        "and xx and YY themselfs may be regular expressions.\n",
59*b1cdbd2cSJim Jagielski        "Also here a list of matches will be processed.\n\n",
60*b1cdbd2cSJim Jagielski
61*b1cdbd2cSJim Jagielski        "If option --single is given, only the first match will be processed.\n\n";
62*b1cdbd2cSJim Jagielski}
63*b1cdbd2cSJim Jagielski
64*b1cdbd2cSJim Jagielskimy $SOLARVERSION = $ENV{"SOLARVERSION"};
65*b1cdbd2cSJim Jagielskimy $INPATH       = $ENV{"INPATH"};
66*b1cdbd2cSJim Jagielskimy $SRC_ROOT     = $ENV{"SRC_ROOT"};
67*b1cdbd2cSJim Jagielskimy $UPDMINOREXT  = $ENV{"UPDMINOREXT"};
68*b1cdbd2cSJim Jagielskiif (!defined($SOLARVERSION) || !defined($INPATH) || !defined($SRC_ROOT))
69*b1cdbd2cSJim Jagielski{
70*b1cdbd2cSJim Jagielski    print "\nNeed \$SOLARVERSION, \$INPATH and \$SRC_ROOT, please set your OOo environment!\n";
71*b1cdbd2cSJim Jagielski    Usage();
72*b1cdbd2cSJim Jagielski    exit 1;
73*b1cdbd2cSJim Jagielski}
74*b1cdbd2cSJim Jagielskiif (!defined($UPDMINOREXT)) {
75*b1cdbd2cSJim Jagielski    $UPDMINOREXT  = '';
76*b1cdbd2cSJim Jagielski}
77*b1cdbd2cSJim Jagielskimy $SOLENVINC = "$SOLARVERSION/$INPATH/inc$UPDMINOREXT";
78*b1cdbd2cSJim Jagielski
79*b1cdbd2cSJim Jagielskimy $LANGUAGE_MASK_PRIMARY = 0x03ff;
80*b1cdbd2cSJim Jagielski
81*b1cdbd2cSJim Jagielskisub getPrimaryLanguage($)
82*b1cdbd2cSJim Jagielski{
83*b1cdbd2cSJim Jagielski    my($lcid) = @_;
84*b1cdbd2cSJim Jagielski    return $lcid & $LANGUAGE_MASK_PRIMARY;
85*b1cdbd2cSJim Jagielski}
86*b1cdbd2cSJim Jagielski
87*b1cdbd2cSJim Jagielskisub getSubLanguage($)
88*b1cdbd2cSJim Jagielski{
89*b1cdbd2cSJim Jagielski    my($lcid) = @_;
90*b1cdbd2cSJim Jagielski    return $lcid >> 10;
91*b1cdbd2cSJim Jagielski}
92*b1cdbd2cSJim Jagielski
93*b1cdbd2cSJim Jagielskisub makeLangID($$)
94*b1cdbd2cSJim Jagielski{
95*b1cdbd2cSJim Jagielski    my( $sub, $pri) = @_;
96*b1cdbd2cSJim Jagielski    return ($sub << 10) | $pri;
97*b1cdbd2cSJim Jagielski}
98*b1cdbd2cSJim Jagielski
99*b1cdbd2cSJim Jagielski
100*b1cdbd2cSJim Jagielskisub grepFile($$$$@)
101*b1cdbd2cSJim Jagielski{
102*b1cdbd2cSJim Jagielski    my( $regex, $path, $module, $name, @addregex) = @_;
103*b1cdbd2cSJim Jagielski    my @result;
104*b1cdbd2cSJim Jagielski    my $found = 0;
105*b1cdbd2cSJim Jagielski    my $areopen = 0;
106*b1cdbd2cSJim Jagielski    my $arecloser = '';
107*b1cdbd2cSJim Jagielski    my $file;
108*b1cdbd2cSJim Jagielski    # Try module under current working directory first to catch local
109*b1cdbd2cSJim Jagielski    # modifications. A Not yet delivered lang.h is a special case.
110*b1cdbd2cSJim Jagielski    if ("$path/$module/$name" eq "$SOLENVINC/i18npool/lang.h") {
111*b1cdbd2cSJim Jagielski        $file = "./$module/inc/i18npool/lang.h"; }
112*b1cdbd2cSJim Jagielski    else {
113*b1cdbd2cSJim Jagielski        $file = "./$module/$name"; }
114*b1cdbd2cSJim Jagielski    if (!($found = open( IN, $file)))
115*b1cdbd2cSJim Jagielski    {
116*b1cdbd2cSJim Jagielski        # Then with the given path.
117*b1cdbd2cSJim Jagielski        $file = "$path/$module/$name";
118*b1cdbd2cSJim Jagielski        if (!($found = open( IN, $file)))
119*b1cdbd2cSJim Jagielski        {
120*b1cdbd2cSJim Jagielski            print "No $file\n";
121*b1cdbd2cSJim Jagielski            $file = "$path/$module.lnk/$name";
122*b1cdbd2cSJim Jagielski            if (!($found = open( IN, $file))) {
123*b1cdbd2cSJim Jagielski                print "No $file.\n";
124*b1cdbd2cSJim Jagielski                $file = "$path/$module.link/$name";
125*b1cdbd2cSJim Jagielski                if (!($found = open( IN, $file))) {
126*b1cdbd2cSJim Jagielski                    print "No $file either.\n"; }
127*b1cdbd2cSJim Jagielski            }
128*b1cdbd2cSJim Jagielski        }
129*b1cdbd2cSJim Jagielski    }
130*b1cdbd2cSJim Jagielski    if ($found)
131*b1cdbd2cSJim Jagielski    {
132*b1cdbd2cSJim Jagielski        $found = 0;
133*b1cdbd2cSJim Jagielski        while (my $line = <IN>)
134*b1cdbd2cSJim Jagielski        {
135*b1cdbd2cSJim Jagielski            if ($line =~ /$regex/)
136*b1cdbd2cSJim Jagielski            {
137*b1cdbd2cSJim Jagielski                if (!$found)
138*b1cdbd2cSJim Jagielski                {
139*b1cdbd2cSJim Jagielski                    $found = 1;
140*b1cdbd2cSJim Jagielski                    print "$file:\n";
141*b1cdbd2cSJim Jagielski                }
142*b1cdbd2cSJim Jagielski                chomp( $line);
143*b1cdbd2cSJim Jagielski                print "$line\n";
144*b1cdbd2cSJim Jagielski                push( @result, $line);
145*b1cdbd2cSJim Jagielski            }
146*b1cdbd2cSJim Jagielski            elsif (@addregex)
147*b1cdbd2cSJim Jagielski            {
148*b1cdbd2cSJim Jagielski                # By convention first element is opener, second element is closer.
149*b1cdbd2cSJim Jagielski                if (!$areopen)
150*b1cdbd2cSJim Jagielski                {
151*b1cdbd2cSJim Jagielski                    if ($line =~ /$addregex[0]/)
152*b1cdbd2cSJim Jagielski                    {
153*b1cdbd2cSJim Jagielski                        $areopen = 1;
154*b1cdbd2cSJim Jagielski                        $arecloser = $addregex[1];
155*b1cdbd2cSJim Jagielski                    }
156*b1cdbd2cSJim Jagielski                }
157*b1cdbd2cSJim Jagielski                if ($areopen)
158*b1cdbd2cSJim Jagielski                {
159*b1cdbd2cSJim Jagielski                    for (my $i = 2; $i < @addregex; ++$i)
160*b1cdbd2cSJim Jagielski                    {
161*b1cdbd2cSJim Jagielski                        if ($line =~ /$addregex[$i]/)
162*b1cdbd2cSJim Jagielski                        {
163*b1cdbd2cSJim Jagielski                            if (!$found)
164*b1cdbd2cSJim Jagielski                            {
165*b1cdbd2cSJim Jagielski                                $found = 1;
166*b1cdbd2cSJim Jagielski                                print "$file:\n";
167*b1cdbd2cSJim Jagielski                            }
168*b1cdbd2cSJim Jagielski                            chomp( $line);
169*b1cdbd2cSJim Jagielski                            print "$line\n";
170*b1cdbd2cSJim Jagielski                            push( @result, $line);
171*b1cdbd2cSJim Jagielski                        }
172*b1cdbd2cSJim Jagielski                    }
173*b1cdbd2cSJim Jagielski                    if ($line =~ /$arecloser/)
174*b1cdbd2cSJim Jagielski                    {
175*b1cdbd2cSJim Jagielski                        $areopen = 0;
176*b1cdbd2cSJim Jagielski                    }
177*b1cdbd2cSJim Jagielski                }
178*b1cdbd2cSJim Jagielski            }
179*b1cdbd2cSJim Jagielski        }
180*b1cdbd2cSJim Jagielski        close( IN);
181*b1cdbd2cSJim Jagielski    }
182*b1cdbd2cSJim Jagielski    if (!$found) {
183*b1cdbd2cSJim Jagielski        print "Not found in $file\n";
184*b1cdbd2cSJim Jagielski        #print "Not found in $file for $regex @addregex\n";
185*b1cdbd2cSJim Jagielski    }
186*b1cdbd2cSJim Jagielski    return @result;
187*b1cdbd2cSJim Jagielski}
188*b1cdbd2cSJim Jagielski
189*b1cdbd2cSJim Jagielski
190*b1cdbd2cSJim Jagielskisub main()
191*b1cdbd2cSJim Jagielski{
192*b1cdbd2cSJim Jagielski    my( $lcid, @parts, $grepdef, $options, $single);
193*b1cdbd2cSJim Jagielski    $grepdef = 0;
194*b1cdbd2cSJim Jagielski    $single = 0;
195*b1cdbd2cSJim Jagielski    for ($options = 0; $options < @ARGV && $ARGV[$options] =~ /^--/; ++$options)
196*b1cdbd2cSJim Jagielski    {
197*b1cdbd2cSJim Jagielski        if ($ARGV[$options] eq '--single') { $single = 1; }
198*b1cdbd2cSJim Jagielski        else { print "Unknown option: $ARGV[$options]\n"; }
199*b1cdbd2cSJim Jagielski    }
200*b1cdbd2cSJim Jagielski    if (@ARGV == 1 + $options)
201*b1cdbd2cSJim Jagielski    {
202*b1cdbd2cSJim Jagielski        # 0x hex, 0b bin, 0 oct
203*b1cdbd2cSJim Jagielski        if ($ARGV[$options] =~ /^0/) {
204*b1cdbd2cSJim Jagielski            $lcid = oct( $ARGV[0]); }
205*b1cdbd2cSJim Jagielski        elsif ($ARGV[$options] =~ /^[0-9]/) {
206*b1cdbd2cSJim Jagielski            $lcid = $ARGV[$options]; }
207*b1cdbd2cSJim Jagielski        else
208*b1cdbd2cSJim Jagielski        {
209*b1cdbd2cSJim Jagielski            $grepdef = $ARGV[$options];
210*b1cdbd2cSJim Jagielski            $lcid = 0;
211*b1cdbd2cSJim Jagielski        }
212*b1cdbd2cSJim Jagielski        $parts[0] = getPrimaryLanguage( $lcid);
213*b1cdbd2cSJim Jagielski        $parts[1] = getSubLanguage( $lcid);
214*b1cdbd2cSJim Jagielski    }
215*b1cdbd2cSJim Jagielski    elsif (@ARGV == 2 + $options)
216*b1cdbd2cSJim Jagielski    {
217*b1cdbd2cSJim Jagielski        for (my $i = $options; $i < 2 + $options; ++$i)
218*b1cdbd2cSJim Jagielski        {
219*b1cdbd2cSJim Jagielski            if ($ARGV[$i] =~ /^0/) {
220*b1cdbd2cSJim Jagielski                $parts[$i] = oct( $ARGV[$i]); }
221*b1cdbd2cSJim Jagielski            else {
222*b1cdbd2cSJim Jagielski                $parts[$i] = $ARGV[$i]; }
223*b1cdbd2cSJim Jagielski        }
224*b1cdbd2cSJim Jagielski        $lcid = makeLangID( $parts[1], $parts[0]);
225*b1cdbd2cSJim Jagielski    }
226*b1cdbd2cSJim Jagielski    else
227*b1cdbd2cSJim Jagielski    {
228*b1cdbd2cSJim Jagielski        Usage();
229*b1cdbd2cSJim Jagielski        return 1;
230*b1cdbd2cSJim Jagielski    }
231*b1cdbd2cSJim Jagielski    my $modifier = "(?i)";
232*b1cdbd2cSJim Jagielski    my (@resultlist, @greplist, $result);
233*b1cdbd2cSJim Jagielski    # If no string was given on the command line, but value(s) were, lookup the
234*b1cdbd2cSJim Jagielski    # LangID value to obtain the define identifier.
235*b1cdbd2cSJim Jagielski    if ($grepdef)
236*b1cdbd2cSJim Jagielski    {
237*b1cdbd2cSJim Jagielski        # #define LANGUAGE_AFRIKAANS                  0x0436
238*b1cdbd2cSJim Jagielski        @resultlist = grepFile(
239*b1cdbd2cSJim Jagielski            $modifier . '^\s*#\s*define\s+[A-Z_]*' . $grepdef,
240*b1cdbd2cSJim Jagielski            $SOLENVINC, "i18npool", "lang.h", ());
241*b1cdbd2cSJim Jagielski    }
242*b1cdbd2cSJim Jagielski    else
243*b1cdbd2cSJim Jagielski    {
244*b1cdbd2cSJim Jagielski        printf( "LangID: 0x%04X (dec %d), primary: 0x%03x, sub 0x%02x\n", $lcid,
245*b1cdbd2cSJim Jagielski                $lcid, $parts[0], $parts[1]);
246*b1cdbd2cSJim Jagielski        my $buf = sprintf( "0x%04X", $lcid);
247*b1cdbd2cSJim Jagielski        @resultlist = grepFile(
248*b1cdbd2cSJim Jagielski            '^\s*#\s*define\s+\w+\s+' . $buf,
249*b1cdbd2cSJim Jagielski            $SOLENVINC, "i18npool", "lang.h", ());
250*b1cdbd2cSJim Jagielski    }
251*b1cdbd2cSJim Jagielski    for $result (@resultlist)
252*b1cdbd2cSJim Jagielski    {
253*b1cdbd2cSJim Jagielski        # #define LANGUAGE_AFRIKAANS                  0x0436
254*b1cdbd2cSJim Jagielski        if ($result =~ /^\s*#\s*define\s+(\w+)\s+(0x[0-9a-fA-F]+)/)
255*b1cdbd2cSJim Jagielski        {
256*b1cdbd2cSJim Jagielski            push( @greplist, '\b' . $1 . '\b');
257*b1cdbd2cSJim Jagielski            $modifier = "";     # complete identifier now case sensitive
258*b1cdbd2cSJim Jagielski            if ($single) {
259*b1cdbd2cSJim Jagielski                last; }
260*b1cdbd2cSJim Jagielski        }
261*b1cdbd2cSJim Jagielski    }
262*b1cdbd2cSJim Jagielski    # If the string given is of the form xx-yy lookup a language,country pair
263*b1cdbd2cSJim Jagielski    # to obtain the define identifier. xx and yy themselfs may be regexps.
264*b1cdbd2cSJim Jagielski    # xx- is a short form for 'xx-.*' and -yy a short form for '.*-yy'
265*b1cdbd2cSJim Jagielski    if ($grepdef =~ /^(.*)-$/) {
266*b1cdbd2cSJim Jagielski        $grepdef = $1 . "-.*"; }
267*b1cdbd2cSJim Jagielski    if ($grepdef =~ /^-(.*)$/) {
268*b1cdbd2cSJim Jagielski        $grepdef = ".*-" . $1; }
269*b1cdbd2cSJim Jagielski    if ($grepdef =~ /^(.*)-(.*)$/)
270*b1cdbd2cSJim Jagielski    {
271*b1cdbd2cSJim Jagielski        my $lang = $1;
272*b1cdbd2cSJim Jagielski        my $coun = $2;
273*b1cdbd2cSJim Jagielski        $lang = lc($lang);
274*b1cdbd2cSJim Jagielski        $coun = uc($coun);
275*b1cdbd2cSJim Jagielski        #     { LANGUAGE_AFRIKAANS,                   "af", "ZA" },
276*b1cdbd2cSJim Jagielski        @resultlist = grepFile(
277*b1cdbd2cSJim Jagielski            '^\s*\{\s*\w+\s*,\s*\"' . $lang . '\"\s*,\s*\"'  . $coun . '\"\s*\}\s*,',
278*b1cdbd2cSJim Jagielski            "$SRC_ROOT", "i18npool", "source/isolang/isolang.cxx", ());
279*b1cdbd2cSJim Jagielski        for $result (@resultlist)
280*b1cdbd2cSJim Jagielski        {
281*b1cdbd2cSJim Jagielski            if ($result =~ /^\s*\{\s*(\w+)\s*,\s*\"\w+\"\s*,\s*\"(\w+)?\"\s*\}\s*,/)
282*b1cdbd2cSJim Jagielski            {
283*b1cdbd2cSJim Jagielski                push( @greplist, '\b' . $1 . '\b');
284*b1cdbd2cSJim Jagielski                $modifier = "";     # complete identifier now case sensitive
285*b1cdbd2cSJim Jagielski                if ($single) {
286*b1cdbd2cSJim Jagielski                    last; }
287*b1cdbd2cSJim Jagielski            }
288*b1cdbd2cSJim Jagielski        }
289*b1cdbd2cSJim Jagielski        $grepdef = 0;
290*b1cdbd2cSJim Jagielski    }
291*b1cdbd2cSJim Jagielski    if (!@greplist && $grepdef) {
292*b1cdbd2cSJim Jagielski        push( @greplist, $grepdef); }
293*b1cdbd2cSJim Jagielski    for $grepdef (@greplist)
294*b1cdbd2cSJim Jagielski    {
295*b1cdbd2cSJim Jagielski        print "\nUsing: " . $grepdef . "\n";
296*b1cdbd2cSJim Jagielski
297*b1cdbd2cSJim Jagielski        # Decimal LCID, was needed for Langpack.ulf but isn't used anymore,
298*b1cdbd2cSJim Jagielski        # keep just in case we'd need it again.
299*b1cdbd2cSJim Jagielski        # #define LANGUAGE_AFRIKAANS                  0x0436
300*b1cdbd2cSJim Jagielski        @resultlist = grepFile(
301*b1cdbd2cSJim Jagielski            $modifier . '^\s*#\s*define\s+[A-Z_]*' . $grepdef,
302*b1cdbd2cSJim Jagielski            $SOLENVINC, "i18npool", "lang.h", ());
303*b1cdbd2cSJim Jagielski        my @lcidlist;
304*b1cdbd2cSJim Jagielski        for $result (@resultlist)
305*b1cdbd2cSJim Jagielski        {
306*b1cdbd2cSJim Jagielski            # #define LANGUAGE_AFRIKAANS                  0x0436
307*b1cdbd2cSJim Jagielski            if ($result =~ /^\s*#\s*define\s+(\w+)\s+(0x[0-9a-fA-F]+)/)
308*b1cdbd2cSJim Jagielski            {
309*b1cdbd2cSJim Jagielski                push( @lcidlist, oct( $2));
310*b1cdbd2cSJim Jagielski            }
311*b1cdbd2cSJim Jagielski        }
312*b1cdbd2cSJim Jagielski
313*b1cdbd2cSJim Jagielski        #     { LANGUAGE_AFRIKAANS,                   "af", "ZA" },
314*b1cdbd2cSJim Jagielski        @resultlist = grepFile(
315*b1cdbd2cSJim Jagielski            $modifier . '^\s*\{\s*.*' . $grepdef . '.*\s*,\s*\".*\"\s*,\s*\".*\"\s*\}\s*,',
316*b1cdbd2cSJim Jagielski            "$SRC_ROOT", "i18npool", "source/isolang/isolang.cxx", ());
317*b1cdbd2cSJim Jagielski
318*b1cdbd2cSJim Jagielski        my @langcoungreplist;
319*b1cdbd2cSJim Jagielski        for $result (@resultlist)
320*b1cdbd2cSJim Jagielski        {
321*b1cdbd2cSJim Jagielski            if ($result =~ /^\s*\{\s*\w+\s*,\s*\"(\w+)\"\s*,\s*\"(\w+)?\"\s*\}\s*,/)
322*b1cdbd2cSJim Jagielski            {
323*b1cdbd2cSJim Jagielski                my $lang = $1;
324*b1cdbd2cSJim Jagielski                my $coun = $2;
325*b1cdbd2cSJim Jagielski                my $loca;
326*b1cdbd2cSJim Jagielski                if ($coun)
327*b1cdbd2cSJim Jagielski                {
328*b1cdbd2cSJim Jagielski                    $loca = $lang . "_" . $coun;
329*b1cdbd2cSJim Jagielski                    push( @langcoungreplist, '\b' . $lang . '\b(-' . $coun . ')?');
330*b1cdbd2cSJim Jagielski                }
331*b1cdbd2cSJim Jagielski                else
332*b1cdbd2cSJim Jagielski                {
333*b1cdbd2cSJim Jagielski                    $loca = $lang;
334*b1cdbd2cSJim Jagielski                    $coun = "";
335*b1cdbd2cSJim Jagielski                    push( @langcoungreplist, '\b' . $lang . '\b');
336*b1cdbd2cSJim Jagielski                }
337*b1cdbd2cSJim Jagielski                my $file = "$SRC_ROOT/i18npool/source/localedata/data/$loca.xml";
338*b1cdbd2cSJim Jagielski                my $found;
339*b1cdbd2cSJim Jagielski                if (!($found = open( LD, $file)))
340*b1cdbd2cSJim Jagielski                {
341*b1cdbd2cSJim Jagielski                    $file = "$SRC_ROOT/i18npool.lnk/source/localedata/data/$loca.xml";
342*b1cdbd2cSJim Jagielski                    if (!($found = open( LD, $file)))
343*b1cdbd2cSJim Jagielski                    {
344*b1cdbd2cSJim Jagielski                        $file = "$SRC_ROOT/i18npool.link/source/localedata/data/$loca.xml";
345*b1cdbd2cSJim Jagielski                        $found = open( LD, $file);
346*b1cdbd2cSJim Jagielski                    }
347*b1cdbd2cSJim Jagielski                }
348*b1cdbd2cSJim Jagielski                if ($found)
349*b1cdbd2cSJim Jagielski                {
350*b1cdbd2cSJim Jagielski                    print "Found $file:\n";
351*b1cdbd2cSJim Jagielski                    my $on = 0;
352*b1cdbd2cSJim Jagielski                    while (my $line = <LD>)
353*b1cdbd2cSJim Jagielski                    {
354*b1cdbd2cSJim Jagielski                        if ($line =~ /<(Language|Country)>/) {
355*b1cdbd2cSJim Jagielski                            $on = 1; }
356*b1cdbd2cSJim Jagielski                        if ($on) {
357*b1cdbd2cSJim Jagielski                            print $line; }
358*b1cdbd2cSJim Jagielski                        if ($line =~ /<\/(Language|Country)>/) {
359*b1cdbd2cSJim Jagielski                            $on = 0; }
360*b1cdbd2cSJim Jagielski                    }
361*b1cdbd2cSJim Jagielski                    close( LD);
362*b1cdbd2cSJim Jagielski                }
363*b1cdbd2cSJim Jagielski                else {
364*b1cdbd2cSJim Jagielski                    print "No $SRC_ROOT/i18npool/source/localedata/data/$loca.xml\n"; }
365*b1cdbd2cSJim Jagielski            }
366*b1cdbd2cSJim Jagielski        }
367*b1cdbd2cSJim Jagielski
368*b1cdbd2cSJim Jagielski        #         case LANGUAGE_ARABIC:
369*b1cdbd2cSJim Jagielski        grepFile(
370*b1cdbd2cSJim Jagielski            $modifier . '^\s*case\s*.*' . $grepdef . '.*\s*:',
371*b1cdbd2cSJim Jagielski            "$SRC_ROOT", "i18npool", "source/isolang/mslangid.cxx", ());
372*b1cdbd2cSJim Jagielski
373*b1cdbd2cSJim Jagielski        # With CWS 'langstatusbar' the language listbox resource file gets a new location.
374*b1cdbd2cSJim Jagielski        my $module = "svx";
375*b1cdbd2cSJim Jagielski        my $name = "source/dialog/langtab.src";
376*b1cdbd2cSJim Jagielski        if (!(-e "$SRC_ROOT/$module/$name")) {
377*b1cdbd2cSJim Jagielski            $module = "svtools";
378*b1cdbd2cSJim Jagielski            $name = "source/misc/langtab.src";
379*b1cdbd2cSJim Jagielski        }
380*b1cdbd2cSJim Jagielski        #         < "Afrikaans" ; LANGUAGE_AFRIKAANS ; > ;
381*b1cdbd2cSJim Jagielski        # lookup define
382*b1cdbd2cSJim Jagielski        @resultlist = grepFile(
383*b1cdbd2cSJim Jagielski            $modifier . '^\s*<\s*\".*\"\s*;\s*.*' . $grepdef . '.*\s*;\s*>\s*;',
384*b1cdbd2cSJim Jagielski            "$SRC_ROOT", $module, $name, ());
385*b1cdbd2cSJim Jagielski        # lookup string
386*b1cdbd2cSJim Jagielski        if (!@resultlist) {
387*b1cdbd2cSJim Jagielski            grepFile(
388*b1cdbd2cSJim Jagielski                $modifier . '^\s*<\s*\".*' . $grepdef . '.*\"\s*;\s*.*\s*;\s*>\s*;',
389*b1cdbd2cSJim Jagielski                "$SRC_ROOT", $module, $name, ()); }
390*b1cdbd2cSJim Jagielski
391*b1cdbd2cSJim Jagielski        for my $langcoun (@langcoungreplist)
392*b1cdbd2cSJim Jagielski        {
393*b1cdbd2cSJim Jagielski            # Name (xxx) = "/registry/spool/org/openoffice/Office/Common-ctl.xcu";
394*b1cdbd2cSJim Jagielski            grepFile(
395*b1cdbd2cSJim Jagielski                '^\s*Name\s*\(' . $langcoun . '\)\s*=',
396*b1cdbd2cSJim Jagielski                "$SRC_ROOT", "scp2", "source/ooo/file_ooo.scp", ());
397*b1cdbd2cSJim Jagielski
398*b1cdbd2cSJim Jagielski            # completelangiso=af ar as-IN ... zu
399*b1cdbd2cSJim Jagielski            grepFile(
400*b1cdbd2cSJim Jagielski                '^\s*completelangiso\s*=\s*(\s*([a-z]{2,3})(-[A-Z][A-Z])?)*' . $langcoun . '',
401*b1cdbd2cSJim Jagielski                "$SRC_ROOT", "solenv", "inc/postset.mk",
402*b1cdbd2cSJim Jagielski                # needs a duplicated pair of backslashes to produce a literal \\
403*b1cdbd2cSJim Jagielski                ('^\s*completelangiso\s*=', '^\s*$', '^\s*' . $langcoun . '\s*\\\\*$'));
404*b1cdbd2cSJim Jagielski
405*b1cdbd2cSJim Jagielski            # @noMSLocaleLangs = ( "br", "bs", ... )
406*b1cdbd2cSJim Jagielski            grepFile(
407*b1cdbd2cSJim Jagielski                '^\s*@noMSLocaleLangs\s*=\s*\(\s*(\s*"([a-z]{2,3})(-[A-Z][A-Z])?"\s*,?)*' . $langcoun . '',
408*b1cdbd2cSJim Jagielski                "$SRC_ROOT", "solenv", "bin/modules/installer/globals.pm",
409*b1cdbd2cSJim Jagielski                ('^\s*@noMSLocaleLangs\s*=', '\)\s*$', '"' . $langcoun . '"'));
410*b1cdbd2cSJim Jagielski
411*b1cdbd2cSJim Jagielski            # af    1252  1078   # Afrikaans
412*b1cdbd2cSJim Jagielski            grepFile(
413*b1cdbd2cSJim Jagielski                '^\s*' . $langcoun . '',
414*b1cdbd2cSJim Jagielski                "$SRC_ROOT", "setup_native", "source/win32/msi-encodinglist.txt", ());
415*b1cdbd2cSJim Jagielski        }
416*b1cdbd2cSJim Jagielski    }
417*b1cdbd2cSJim Jagielski    return 0;
418*b1cdbd2cSJim Jagielski}
419*b1cdbd2cSJim Jagielski
420*b1cdbd2cSJim Jagielskimain();
421