userlibandfileserver/fatfilenameconversionplugins/group/cp54936_4byte_tounicode.pl
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/userlibandfileserver/fatfilenameconversionplugins/group/cp54936_4byte_tounicode.pl Mon Oct 19 15:55:17 2009 +0100
@@ -0,0 +1,175 @@
+# Copyright (c) 2008-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 "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:
+# See line 111 of this file.
+#
+
+if (@ARGV != 1 && @ARGV != 2)
+ {
+ print <<EOD;
+Usage: perl -w cp54936_4byte.pl cp54936_4byte.txt
+EOD
+ exit(1);
+ }
+
+# Removes the extenstion from the filename
+$ARGV[0] =~ m/(.*)\..*/;
+my $root = $1;
+$root =~ m/.*[\\\/]([^\\\/]*)$/;
+my $header_to_include = $1;
+
+if (@ARGV == 2)
+ {
+ $ARGV[1] =~ m/(.*)\..*/;
+ $root = $1;
+ }
+
+open (IN, "<$ARGV[0]") or die ("Error: $ARGV[0] $!");
+
+my $lineNumber = 0;
+my $acceptLineNumber = 0;
+my %lines; # hash table of all characters in format with key=foreign(string) and value=unicode(string)
+while (!eof(IN))
+ {
+ my $line = <IN>;
+ $lineNumber++;
+ if ($line =~ /^(0[xX]8[1-4]3\d[\da-fA-F]{2}3\d)\s*(0[xX][\da-fA-F]{4}).*/)
+ {
+ # read a line like "0x81318133 0x060D"
+ $acceptLineNumber++;
+ my $foreign = $1;
+ my $unicode = $2;
+ $lines{$foreign} = $unicode;
+ }
+ else
+ {
+ #print "Ignore line: $line";
+ }
+ }
+close IN;
+print "Read $ARGV[0] done.\n";
+print "$acceptLineNumber of $lineNumber lines accepted.\n";
+
+
+# increase input cp54936 code by 1
+# param is a string like "0x81308439"
+# return a string like "0x81308530"
+sub IncreaseCP54936Code
+ {
+ my ($increaseme) = @_;
+ $increaseme =~ /0[xX]([\da-fA-F]{2})([\da-fA-F]{2})([\da-fA-F]{2})([\da-fA-F]{2})/;
+ ($b1, $b2, $b3, $b4) = (hex($1), hex($2), hex($3), hex($4));
+ $b4++;
+ if ($b4 == 0x3A)
+ {
+ $b4 = 0x30;
+ $b3++;
+ if ($b3 == 0xFF)
+ {
+ $b3 = 0x81;
+ $b2++;
+ if ($b2 == 0x3A)
+ {
+ $b2 = 0x30;
+ $b1++;
+ }
+ }
+ }
+ return sprintf("0x%02X%02X%02X%02X", $b1, $b2, $b3, $b4);
+ }
+
+# return the offset from 0x81308130 to input "0x8234A235"
+sub OffsetOfCP54936Code
+ {
+ $_[0] =~ /0[xX]([\da-fA-F]{2})([\da-fA-F]{2})([\da-fA-F]{2})([\da-fA-F]{2})/;
+ ($b1, $b2, $b3, $b4) = (hex($1), hex($2), hex($3), hex($4));
+ return ($b1-0x81)*12600 + ($b2-0x30)*1260 + ($b3-0x81)*10 + ($b4-0x30);
+ }
+
+# return the last byte of input "0x8234A235"
+sub Byte4OfCP54936Code
+ {
+ $_[0] =~ /0[xX]([\da-fA-F]{2})([\da-fA-F]{2})([\da-fA-F]{2})([\da-fA-F]{2})/;
+ return hex($4);
+ }
+
+
+print "Write to $root.cpp...\n";
+open (CPP, ">$root.cpp") or die ("Error: $ARGV[0] Can't open cpp file");
+
+print CPP <<EOD;
+// Copyright (c) 2008-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 "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:
+//
+// Auto-generated by the cp54936_4byte_tounicode.pl tool - Do not edit!!!
+//
+
+#include <e32std.h>
+#include <e32def.h>
+#include "cp54936.h"
+
+
+// mapping table of: CP54936 4-byte in-BMP ---> Unicode
+// To calculate index: index=(b1-144)*12600+(b2-48)*1260+(b3-129)*10+(b4-48), in which,
+// b1,b2,b3,b4 is byte1,2,3,4 of CP54936 code.
+// For example, CP54936 code 0x8232EA38, the index=(0x82-144)*12600+(0x32-48)*1260+(0xEA-129)*10+(0x38-48)=16178
+// So we get the Unicode 0x42AB.
+// Generated with: \"perl -w ..\\group\\cp54936_4byte_tounicode.pl cp54936_4byte.txt cp54936_4byte_tounicode.cpp\".
+
+EOD
+
+my $bytecount = 0;
+my $expect = "0x81308130";
+my $last = "0x8431A439";
+my $totalCount = OffsetOfCP54936Code($last) + 1;
+
+
+print CPP "const TUint16 KMappingTable4ByteBmp2Unicode[$totalCount] =\n\t{\n\t";
+
+my $outIndex = 0; # to wrap every 10 items
+while (OffsetOfCP54936Code($expect) <= OffsetOfCP54936Code($last))
+ {
+ if (!exists($lines{$expect}))
+ {
+ print CPP "0xFFFD, ";
+ }
+ else
+ {
+ print CPP "$lines{$expect}, ";
+ }
+ $bytecount += 2;
+ $outIndex++;
+ if ($outIndex % 10 == 0)
+ {
+ print CPP "\t// $expect\n\t";
+ }
+ # to next foreign
+ $expect = IncreaseCP54936Code($expect);
+ }
+
+print CPP "};\n";
+print CPP "// total byte count = $bytecount\n";
+print "\nTotal byte count: $bytecount.\n";
+close CPP;
+print "Done.\n";