--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locfiles/group/switch_loc_generator.pl Tue Feb 02 01:12:20 2010 +0200
@@ -0,0 +1,294 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+#
+# ============================================================================
+# Name : loc_generator.pl
+# Part of : create loc files to \epoc32\s60\locfiles base on subfolders in the same folder
+# Origin : S60 build team,NMP
+# Created : Tue Sep 24 11:32:47 2006
+# Version : 0.2
+# Description:
+# Version 0.2 changes(VL): added "dirty hack" so that new string is added for all layers,
+# this need to be removed when S60locfiles is exporting localized .loc files to correct layers !!!
+# Also added fix to sub routine update_locs [if ($key eq "") {next}; # skip empty ones]
+
+
+use strict;
+use File::Basename; # for fileparse
+use Getopt::Long;
+use Data::Dumper; # debugging purposes
+
+#
+# Variables...
+#
+my $version = "0.2";
+my $locfile_path;
+my $loc_sc_folder = "sc";
+my $loc_01_folder = "01";
+my @generated_files;
+
+my $input;
+my $dozip;
+my $noupdatelocfiles;
+my $force_generation;
+my $show_help;
+
+my $result = GetOptions('i:s' => \$input, 'zip:s' => \$dozip, 'noUpdate' => \$noupdatelocfiles, 'force' => \$force_generation , 'h' => \$show_help);
+
+if ($show_help) {help(); die "";};
+
+if ($input && (!-d $input)){&error_msg("Invalid parameter '$input'!");}
+if ($input && $input !~ m/\\$/) {$input .= "\\";};
+
+if (!$result){&error_msg("Required Arguments are missing or wrong");}
+#
+# Hello text
+#
+hello();
+
+# paths to exported loc files
+my @exportedlocfilepaths = ("\\epoc32\\include\\platform\\loc", "\\epoc32\\include\\platform\\mw\\loc", "\\epoc32\\include\\platform\\app\\loc");
+
+if ($input) {
+ generate_locs($input);
+ if ($dozip) {zipup_genfiles($input)};
+}
+foreach $locfile_path (@exportedlocfilepaths) {
+ generate_locs($locfile_path);
+}
+
+sub zipup_genfiles {
+ my $folder = shift;
+ unlink($dozip);
+ print "zip.exe -j -m $dozip @{generated_files}\n";
+ system ("zip.exe -j -m $dozip @generated_files");
+}
+
+# generate switch loc files
+sub generate_locs {
+ my $folder = shift;
+ my @files;
+ my @languageids;
+ @generated_files=();
+
+# get language ids from folder names
+# use sc as reference
+ if (-d ${folder}.${loc_sc_folder}) {
+ opendir(SDIR, ${folder}.${loc_sc_folder}) or &error_msg("can not read ${folder}${loc_sc_folder}\n");
+ @files = grep !/^\.\.?$/ && /.loc$/i, readdir SDIR;
+ closedir(SDIR);
+
+ opendir(SDIR, $folder) or &error_msg("can not read $folder\n");
+ @languageids = grep !/^\.\.?$/ && /^\d+?$/i, readdir SDIR;
+ closedir(SDIR);
+ }
+# get language ids from zip file names.
+# use 01 as reference
+ elsif (-f "${folder}${loc_01_folder}.zip") {
+ open ZIP, "unzip -Z1 ${folder}${loc_01_folder}.zip |";
+ while (<ZIP>)
+ {
+ chomp;
+ $_ =~ s/.*\///i;
+ $_ =~ s/_${loc_01_folder}//i;
+
+ push @files ,$_;
+ }
+ close ZIP;
+
+ opendir(SDIR, $folder) or &error_msg("can not read $folder\n");
+ my @zipfiles = grep !/^\.\.?$/ && /^\d+?.zip$/i, readdir SDIR;
+ closedir(SDIR);
+ foreach (@zipfiles) {
+ $_ =~ s/.zip//i;
+ push @languageids, $_;
+ }
+ }
+
+# print Dumper( @languageids );
+
+ foreach my $loc_file (@files) {
+ $loc_file =~ s/_${loc_01_folder}//i;
+ if (!-e $folder.$loc_file || $force_generation) {
+ push @generated_files, $folder.$loc_file."\n";
+ create_include_loc($folder, $loc_file, \@languageids);
+ }
+ if (!$noupdatelocfiles) {
+ update_locs($folder, $loc_file, \@languageids);
+ }
+ }
+}
+
+# update exist localized loc files base on exported original loc.
+# create new files for all languages in case if loc is new one
+# update new defines from component exported loc to exist localized files
+sub update_locs {
+ my $loc_path = shift;
+ my $loc_file = shift;
+ my $languageids = shift;
+ my ($n, $ext) = split ('\.', $loc_file);
+
+ if (!-f "${loc_path}${loc_sc_folder}\\${loc_file}"){return;};
+
+ my %defines_orig = read_loc("${loc_path}${loc_sc_folder}\\${loc_file}");
+
+ foreach my $languageID (@$languageids) {
+ my @add;
+
+ if (!-e "${loc_path}${languageID}\\${n}_${languageID}\.${ext}") {
+ foreach my $key (keys %defines_orig) {
+ push @add, $defines_orig{$key}."\n";
+ }
+ }
+ else {
+ my %defines = read_loc("${loc_path}${languageID}\\${n}_${languageID}\.${ext}");
+ foreach my $key (keys %defines_orig) {
+ if ($key eq "") {next}; # skip empty ones
+ if (!exists $defines{$key}) {
+ push @add, $defines_orig{$key}."\n";
+ }
+ }
+
+ }
+ next if (!scalar @add);
+ # Dirty quick hack to go trough all paths in this phase also
+ foreach my $locfile_path_temp (@exportedlocfilepaths) {
+ if (!-f "${locfile_path_temp}${languageID}\\${n}_${languageID}\.${ext}"){next;};
+ print "update ${locfile_path_temp}${languageID}\\${n}_${languageID}\.${ext} \n add lines\n @{add} \n";
+ open (OUT_LOC,">>${locfile_path_temp}${languageID}\\${n}_${languageID}\.${ext}") or die "Cannot open ${locfile_path_temp}${languageID}\\${n}_${languageID}\.${ext} for reading: $!";
+ print OUT_LOC "\n";
+ print OUT_LOC @add;
+ close OUT_LOC;
+ }
+
+ }
+}
+
+# read .loc file and return defined strings
+sub read_loc {
+ my $read_loc = shift;
+ my %defines;
+
+ open (IN,"$read_loc") or die "Cannot open ${read_loc} for reading: $!";
+ my @lines=<IN>;
+ close IN;
+
+ my $open_comment = 0;
+ foreach (@lines) {
+ chomp;
+ if (m!^\s*/\*!) {
+ $open_comment=1;
+ if (m!\*/!) {
+ $open_comment=0;
+ }
+ next;
+ }
+ if (m!\*/!) {
+ $open_comment=0;
+ next;
+ }
+ next if ($open_comment);
+ next if (!m/^\s*?\#define/i);
+ my $line = $_;
+
+ $line =~ s/\"+/\"\#/;
+ $_ =~ s/\s*?\#define\s+?//i;
+ $_ =~ s/\s.*//i;
+
+ $defines{$_}=$line;
+ }
+
+ return %defines;
+}
+
+
+# create switch loc file
+sub create_include_loc {
+ my $loc_path = shift;
+ my $loc_file = shift;
+ my $languageids = shift;
+
+ my ($n, $ext) = split ('\.', $loc_file);
+ print "create file ${loc_path}${loc_file}\n";
+ open (OUT,">${loc_path}${loc_file}") or die "Cannot open ${loc_path}${loc_file} for writing: $!";
+
+# my $first = 1;
+ print OUT "\#if LANGUAGE_${loc_sc_folder}\n";
+ print OUT "\t\#include <${loc_sc_folder}\/${loc_file}\>\n";
+
+ foreach my $languageID (@$languageids) {
+# next if (!-f "${locfile_path}\\${languageID}\\${n}_${languageID}${ext}");
+# if ($first) {
+# print OUT "\#if LANGUAGE_${languageID}\n";
+# $first = 0;
+# }
+# else {
+ print OUT "\#elif LANGUAGE_${languageID}\n";
+# }
+ print OUT "\t\#include <${languageID}\/${n}_${languageID}\.${ext}\>\n";
+ }
+
+# print OUT "\#else\n";
+# print OUT "\t\#include <${loc_sc_folder}\\${loc_file}\>\n";
+ print OUT "\#endif\n";
+
+
+ close OUT;
+}
+
+sub datetime {
+ my ($sec,$min,$hour,$day,$month,$year,$wbday,$yday,$isdst)=gmtime();
+ $month++;
+ $year+=1900;
+
+ return (sprintf("%04d.%02d.%02d %02d:%02d:%02d",$year,$month,$day,$hour,$min,$sec));
+}
+
+sub hello {
+ print "This is switch_loc_generator version ${version}\n";
+ print "\n";
+}
+
+sub error_msg ($){
+ my($ErrorMsg);
+ ($ErrorMsg)=@_;
+ my $given_command=$0;
+ $given_command =~ s/.*\\(\w+\.\w+)$/$1/;
+ print "";
+ print "\n";
+ print "Error: $ErrorMsg \n\n";
+ help();
+ die "\n";
+}
+
+sub help {
+ my $given_command=$0;
+ $given_command =~ s/.*\\(\w+\.\w+)$/$1/;
+
+ print "";
+ print "\n";
+ hello();
+ print " Parameters:\n";
+ print " -i <path to localized loc zips> : custom path to generated switch loc files. Option for localisation team\n";
+ print " -zip <zip file name to zip up generated switch loc files> : path to zip up generated switch loc files. Option for localisation team\n";
+ print " -noUpdate : do not update localised loc files in epoc32 -folder\n";
+ print " -force : regenerate switch loc files even those are exists\n";
+ print " -h : print this info message\n";
+ print "Usage: \n$given_command -i <localised loc file folder>\n";
+ print "Example: \n$given_command -i \\s60\\misc\\release\\S60LocFiles\\data\n\n";
+ print "Example for localization team: \n$given_command -i ..\\data -zip ..\\data\\switch_loc.zip\n";
+ print "\n";
+
+}
\ No newline at end of file