diff -r 000000000000 -r 6d65d5acee06 locfiles/group/switch_loc_generator.pl --- /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 () + { + 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=; + 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 : custom path to generated switch loc files. Option for localisation team\n"; + print " -zip : 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 \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