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