--- /dev/null
+#! /usr/bin/perl
+#
+# Copyright 2002 by Bill Huang
+#
+# $Id: UCS_to_GB18030.pl,v 1.1 2002/06/13 08:28:55 ishii Exp $
+#
+# Generate UTF-8 <--> GB18030 code conversion tables from
+# map files provided by Unicode organization.
+# Unfortunately it is prohibited by the organization
+# to distribute the map files. So if you try to use this script,
+# you have to obtain ISO10646-GB18030.TXT from
+# the organization's ftp site.
+#
+# ISO10646-GB18030.TXT format:
+# GB18030 code in hex
+# UCS-2 code in hex
+# # and Unicode name (not used in this script)
+
+require "ucs2utf.pl";
+
+# first generate UTF-8 --> GB18030 table
+
+$in_file = "ISO10646-GB18030.TXT";
+
+open( FILE, $in_file ) || die( "cannot open $in_file" );
+
+while( <FILE> ){
+ chop;
+ if( /^#/ ){
+ next;
+ }
+ ( $u, $c, $rest ) = split;
+ $utf = hex($u);
+ $code = hex($c);
+ $count++;
+ $array{ $utf } = ($code);
+}
+close( FILE );
+
+#
+# first, generate UTF8 --> GB18030 table
+#
+
+$file = "utf8_to_gb18030.map";
+open( FILE, "> $file" ) || die( "cannot open $file" );
+print FILE "static pg_utf_to_local ULmapGB18030[ $count ] = {\n";
+
+for $index ( sort {$a <=> $b} keys( %array ) ){
+ $code = $array{ $index };
+ $count--;
+ if( $count == 0 ){
+ printf FILE " {0x%04x, 0x%04x}\n", $index, $code;
+ } else {
+ printf FILE " {0x%04x, 0x%04x},\n", $index, $code;
+ }
+}
+
+print FILE "};\n";
+close(FILE);
+
+#
+# then generate GB18030 --> UTF8 table
+#
+reset 'array';
+
+open( FILE, $in_file ) || die( "cannot open $in_file" );
+
+while( <FILE> ){
+ chop;
+ if( /^#/ ){
+ next;
+ }
+ ( $u, $c, $rest ) = split;
+ $utf = hex($u);
+ $code = hex($c);
+ $count++;
+ $array{ $code } = $utf;
+}
+close( FILE );
+
+$file = "gb18030_to_utf8.map";
+open( FILE, "> $file" ) || die( "cannot open $file" );
+print FILE "static pg_local_to_utf LUmapGB18030[ $count ] = {\n";
+for $index ( sort {$a <=> $b} keys( %array ) ){
+ $utf = $array{ $index };
+ $count--;
+ if( $count == 0 ){
+ printf FILE " {0x%04x, 0x%04x}\n", $index, $utf;
+ } else {
+ printf FILE " {0x%04x, 0x%04x},\n", $index, $utf;
+ }
+}
+
+print FILE "};\n";
+close(FILE);