diff -r 044383f39525 -r be27ed110b50 imgtools/imaker/buildrom_plugins/localise_all_resources.pm --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/imgtools/imaker/buildrom_plugins/localise_all_resources.pm Wed Oct 28 14:39:48 2009 +0000 @@ -0,0 +1,477 @@ +# +# 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 the License "Symbian Foundation License v1.0" +# which accompanies this distribution, and is available +# at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +# +# Initial Contributors: +# Nokia Corporation - initial contribution. +# +# Contributors: +# +# Description: +# Adds a LOCALISE macro that enables configuration of localised files. +# The localised language selection is done with a ADD_LANGUAGE macro. +# + + + +############################################################################### +# +# Syntax: LOCALISE +# type=LOCALISE(source, target[, languages]) +# source => the source file. The section that needs to be localised should be marked with ??. +# target => the target file. The section that needs to be localised should be marked with ??. +# languages => a space delimited list of language codes +# +# Syntax: ADD_LANGUAGE +# ADD_LANGUAGE lang +# +# Example: +# Add languages +# ADD_LANGUAGE 01 +# ADD_LANGUAGE 02 +# ADD_LANGUAGE 03 +# +# Use Case 1: +# Localises a App resoure file. +# data=LOCALISE(APP_RESOURCE_DIR\App.r??, RESOURCE_DIR\app.r??) +# Output: +# data=APP_RESOURCE_DIR\App.r01 RESOURCE_DIR\app.r01 +# data=APP_RESOURCE_DIR\App.r02 RESOURCE_DIR\app.r02 +# data=APP_RESOURCE_DIR\App.r03 RESOURCE_DIR\app.r03 +# +# Use Case 2: +# Localise all resource files under a section +# ADD_LANGUAGE 01 +# ADD_LANGUAGE 02 +# ADD_LANGUAGE 03 +# +# LOCALISE_ALL_RESOURCES_BEGIN +# // All resource files will be localised +# data=APP_RESOURCE_DIR\App.rsc RESOURCE_DIR\app.rsc +# data=APP_RESOURCE_DIR\App2.rsc RESOURCE_DIR\app2.rsc +# LOCALISE_ALL_RESOURCES_END +# Output: +# data=APP_RESOURCE_DIR\App.r01 RESOURCE_DIR\app.r01 +# data=APP_RESOURCE_DIR\App.r02 RESOURCE_DIR\app.r02 +# data=APP_RESOURCE_DIR\App.r03 RESOURCE_DIR\app.r03 +# data=APP_RESOURCE_DIR\App.r01 RESOURCE_DIR\app.r01 +# data=APP_RESOURCE_DIR\App.r02 RESOURCE_DIR\app.r02 +# data=APP_RESOURCE_DIR\App.r03 RESOURCE_DIR\app.r03 +# +############################################################################### + +# +# Version 4 +# Path corrections to widget support. +# +# Version 3 +# Support for Idle widgets. +# +# Version 2 +# Localises also *.hlp to *.h%s. +# +# Version 1 +# Initial version. + + +package localise_all_resources; +use strict; + +BEGIN + { + use Exporter (); + our ( $VERSION, @ISA, @EXPORT ); + # set the version for version checking + $VERSION = 1.00; + + @ISA = qw( Exporter ); + @EXPORT = qw( &localise_all_resources_info + &do_localise_all_resources_extension + &is_localise_all_resources_begin + &is_localise_all_resources_end + &is_resource_entry + &is_help_entry_xhtml + &is_help_entry_hlp + &is_dtd_entry + &is_active_idle_entry + &is_elocl_entry + &get_type_from_entry + &get_source_from_entry + &get_target_from_entry + &create_localise_entry_from_resource + &create_localise_entry_from_help + &create_localise_entry_from_dtd + &create_localise_entry_from_active_idle + &create_localise_entry_from_elocl + ); + } + +my %localise_all_resources_infostruct = + ( + name => "localise_all_resources", + invocation => "InvocationPoint1", + single => "localise_all_resources::do_localise_all_resources_extension" + ); + +my $line; +my @newobydata; +my %languages; +my $verbose=0; +my $errors=0; +my $localise_all_resource=0; + +sub localise_all_resources_info + { + return \%localise_all_resources_infostruct; + } + +# Entry point for the plugi +sub do_localise_all_resources_extension +{ + print "========================== Begin localise_all_resources =======================\n" if $verbose; + my $obydata = shift; + + undef @newobydata; + foreach $line (@{$obydata}) + { + # Ignore REM statements, to avoid processing "REM __SCALABLE_IMAGE( ... )" + if ($line =~ /^\s*REM/i) + { + push @newobydata, $line; + next; + } + # LOCALISE_ALL_RESOURCES_BEGIN + if (is_localise_all_resources_begin($line)) + { + $localise_all_resource = 1; + push @newobydata, "REM handled $line"; + next; + } + # LOCALISE_ALL_RESOURCES_END + if (is_localise_all_resources_end($line)) + { + $localise_all_resource = 0; + push @newobydata, "REM handled $line"; + next; + } + if ( $localise_all_resource ) + { + # localise all rsc files inside the localise_all_resources section + # resource files .rsc + if ( is_resource_entry($line) ) + { + # match data/file=foobar.rsc resource/foobar.rsc + $line = create_localise_entry_from_resource($line); + push @newobydata, "$line\n"; + next; + } + # help files .hlp + if ( is_help_entry_hlp($line) ) + { + # match data/file=foobar.rsc resource/foobar.rsc + $line = create_localise_entry_from_help_hlp($line); + push @newobydata, "$line\n"; + next; + } + # localise the .dtd files that have \\01\\ in their source target path + if ( is_dtd_entry($line) ) + { + # match data/file=foobar.rsc resource/foobar.rsc + $line = create_localisable_path($line); + $line = create_localise_entry_from_dtd($line); + push @newobydata, "$line\n"; + next; + } + # localise the active idle .o0001 files + if ( is_active_idle_entry($line) ) + { + # match data/file=foobar.rsc resource/foobar.rsc + $line = create_localisable_path($line); + $line = create_localise_entry_from_active_idle($line); + push @newobydata, "$line\n"; + next; + } + # localise the elocl file + if ( is_elocl_entry($line) ) + { + # match data/file=foobar.rsc resource/foobar.rsc + $line = create_localise_entry_from_elocl($line); + push @newobydata, "$line\n"; + next; + } + + } + # Default case + push @newobydata, $line; + } + @{$obydata} = @newobydata; + print "========================== End localise_all_resources =======================\n" if $verbose; + #Stop image creation in error case + #exit(1) if ($errors); +} + +# trim(string) +# Removes spaces from both ends of the string. +# Returns a trimmed string. +sub trim($) +{ + my $string = shift; + $string =~ s/^\s+//; + $string =~ s/\s+$//; + return $string; +} + +# match LOCALISE_ALL_RESOURCE_BEGIN +sub is_localise_all_resources_begin($) +{ + my $entry = shift; + if ( $entry =~ m/^\s*LOCALISE_ALL_RESOURCES_BEGIN\s*$/i ) + { + return 1; + } + return 0; +} + +# match LOCALISE_ALL_RESOURCE_END +sub is_localise_all_resources_end($) +{ + my $entry = shift; + if ( $entry =~ m/^\s*LOCALISE_ALL_RESOURCES_END\s*$/i ) + { + return 1; + } + return 0; +} +# +# match data=foobar.rsc resource/foobar.rsc +sub is_resource_entry($) +{ + my $entry = shift; + my $type = get_type_from_entry($entry); + my $source = get_source_from_entry($entry); + my $target = get_target_from_entry($entry); + if ($source =~ m/\.rsc[\"|\']?$/i && + $target =~ m/\.rsc[\"|\']?$/i ) + { + return 1; + } + return 0; +} + +# +# match +sub is_help_entry_xhtml($) +{ + my $entry = shift; + my $type = get_type_from_entry($entry); + my $source = get_source_from_entry($entry); + my $target = get_target_from_entry($entry); + if ($source =~ m/\\01\\/i && + $target =~ m/\\01\\/i ) + { + return 1; + } + return 0; +} + +# match data=foobar.hlp resource/foobar.hlp +sub is_help_entry_hlp($) +{ + my $entry = shift; + my $type = get_type_from_entry($entry); + my $source = get_source_from_entry($entry); + my $target = get_target_from_entry($entry); + if ($source =~ m/\.hlp[\"|\']?$/i && + $target =~ m/\.hlp[\"|\']?$/i ) + { + return 1; + } + return 0; +} + +# +# match data=DATAZ_\\resource\\xhtml\\01\\0x01000000\\contents.zip RESOURCE_FILES_DIR\\xhtml\\01\\0x01000000\\contents.zip +sub is_dtd_entry($) +{ + my $entry = shift; + my $type = get_type_from_entry($entry); + my $source = get_source_from_entry($entry); + my $target = get_target_from_entry($entry); + if (($source =~ m/\\01\\.*\.dtd/i && + $target =~ m/\\01\\.*\.dtd/i ) || + ($source =~ m/\\00\\.*\.dtd/i && + $target =~ m/\\00\\.*\.dtd/i )) + { + return 1; + } + return 0; +} + +# +# match data=DATAZ_\\resource\\xhtml\\01\\0x01000000\\contents.zip RESOURCE_FILES_DIR\\xhtml\\01\\0x01000000\\contents.zip +sub is_active_idle_entry($) +{ + my $entry = shift; + my $type = get_type_from_entry($entry); + my $source = get_source_from_entry($entry); + my $target = get_target_from_entry($entry); + if (($source =~ m/\.o0001/i && + $target =~ m/\.o0001/i ) || + ($source =~ m/\.o0000/i && + $target =~ m/\.o0000/i )) + { + return 1; + } + return 0; +} + +# +# +sub is_elocl_entry($) +{ + my $entry = shift; + my $type = get_type_from_entry($entry); + my $source = get_source_from_entry($entry); + my $target = get_target_from_entry($entry); + if ($source =~ m/elocl\.dll/i && + $target =~ m/elocl\.loc/i ) + { + return 1; + } + return 0; +} + +# get the type from an iby entry +sub get_type_from_entry($) +{ + my $entry = shift; + if ( $entry =~ m/^\s*(\S+)\s*=\s*(\S+)\s+(\S+)\s*/i ) + { + return $1; + } + return ""; +} +# get the source file from an iby entry +sub get_source_from_entry($) +{ + my $entry = shift; + if ( $entry =~ m/^\s*(\S+)\s*=\s*(\S+)\s+(\S+)\s*/i ) + { + return $2; + } + return ""; +} +# get the target file from an iby entry +sub get_target_from_entry($) +{ + my $entry = shift; + if ( $entry =~ m/^\s*(\S+)\s*=\s*(\S+)\s+(\S+)\s*/i ) + { + return $3; + } + return ""; +} + +# create localise entry from resource entry +sub create_localise_entry_from_resource($) +{ + my $entry = shift; + my $type = get_type_from_entry($entry); + my $source = get_source_from_entry($entry); + my $target = get_target_from_entry($entry); + #convert the .rsc to .r%02d + $source =~ s/\.rsc/\.r%s/i; + $target =~ s/\.rsc/\.r%s/i; + #print "create_localise_entry_from_resource: $source\n"; + return "$type=LOCALISE($source, $target)"; +} + +# create localise entry from resource entry +sub create_localise_entry_from_help($) +{ + my $entry = shift; + my $type = get_type_from_entry($entry); + my $source = get_source_from_entry($entry); + my $target = get_target_from_entry($entry); + #convert the \\01\\ to \\%02d\\ + $source =~ s/\\01\\/\\%02d\\/i; + $target =~ s/\\01\\/\\%02d\\/i; + #print "create_localise_entry_from_resource: $source\n"; + return "$type=LOCALISE($source, $target)"; +} + +# create localise entry from help entry hlp +sub create_localise_entry_from_help_hlp($) +{ + my $entry = shift; + my $type = get_type_from_entry($entry); + my $source = get_source_from_entry($entry); + my $target = get_target_from_entry($entry); + #convert the .hlp to .h%02d + $source =~ s/\.hlp/\.h%s/i; + $target =~ s/\.hlp/\.h%s/i; + #print "create_localise_entry_from_resource: $source\n"; + return "$type=LOCALISE($source, $target)"; +} + +# create localise entry from resource entry +sub create_localise_entry_from_dtd($) +{ + my $entry = shift; + my $type = get_type_from_entry($entry); + my $source = get_source_from_entry($entry); + my $target = get_target_from_entry($entry); + #convert the \\01\\ to \\%02d\\ +# $source =~ s/\\01\\/\\%02d\\/i; +# $target =~ s/\\01\\/\\%02d\\/i; +# $source =~ s/\\00\\/\\%02d\\/i; +# $target =~ s/\\00\\/\\%02d\\/i; +# #print "create_localise_entry_from_resource: $source\n"; + return "$type=LOCALISE($source, $target)"; +} + +# create localise entry from resource entry +sub create_localise_entry_from_active_idle($) +{ + my $entry = shift; + my $type = get_type_from_entry($entry); + my $source = get_source_from_entry($entry); + my $target = get_target_from_entry($entry); + #convert the \\0001\\ to \\%04d\\ + $source =~ s/o0001/o%04d/i; + $target =~ s/o0001/o%04d/i; + $source =~ s/o0000/o%04d/i; + $target =~ s/o0000/o%04d/i; + #print "create_localise_entry_from_resource: $source\n"; + return "$type=LOCALISE($source, $target)"; +} + +sub create_localise_entry_from_elocl($) +{ + my $entry = shift; + my $type = get_type_from_entry($entry); + my $source = get_source_from_entry($entry); + my $target = get_target_from_entry($entry); + #convert the \\0001\\ to \\%04d\\ + $source =~ s/\.dll/\.%02d/i; + $target =~ s/\.loc/\.%02d/i; + #print "create_localise_entry_from_resource: $source $target\n"; + return "$type=LOCALISE($source, $target)"; +} + +# create localisable path from /00/ or /01/ paths +sub create_localisable_path($) +{ + my $entry = shift; + + $entry =~ s/\\01\\/\\%02d\\/ig; + $entry =~ s/\\00\\/\\%02d\\/ig; + + #print "create_localise_entry_from_resource: $source\n"; + return $entry; +} +1; # Return a true value from the file \ No newline at end of file