1f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#!/usr/bin/perl 2f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)# Copyright (c) 2001-2009 International Business Machines 3f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)# Corporation and others. All Rights Reserved. 4f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 5f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#################################################################################### 6f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)# filterRFC3454.pl: 7f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)# This tool filters the RFC-3454 txt file for StringPrep tables and creates a table 8f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)# to be used in NamePrepProfile 9f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)# 10f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)# Author: Ram Viswanadha 11f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)# 12f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#################################################################################### 13f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 14f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)use File::Find; 15f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)use File::Basename; 16f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)use IO::File; 17f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)use Cwd; 18f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)use File::Copy; 19f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)use Getopt::Long; 20f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)use File::Path; 21f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)use File::Copy; 22f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)use Time::localtime; 23f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 24f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)$icu_copyright = "#####################################################################\n# Copyright (c) %d, International Business Machines Corporation and\n# others. All Rights Reserved.\n#####################################################################\n\n"; 25f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)$copyright = "###################\n# This file was generated from RFC 3454 (http://www.ietf.org/rfc/rfc3454.txt)\n# Copyright (C) The Internet Society (2002). All Rights Reserved. \n###################\n\n"; 26f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)$warning = "###################\n# WARNING: This table is generated by filterRFC3454.pl tool with\n# options: @ARGV \n###################\n\n"; 27f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#run the program) 28f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)main(); 29f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 30f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#--------------------------------------------------------------------- 31f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)# The main program 32f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 33f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)sub main(){ 34f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) GetOptions( 35f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "--sourcedir=s" => \$sourceDir, 36f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "--destdir=s" => \$destDir, 37f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "--src-filename=s" => \$srcFileName, 38f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "--dest-filename=s" => \$destFileName, 39f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "--A1" => \$a1, 40f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "--B1" => \$b1, 41f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "--B2" => \$b2, 42f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "--B3" => \$b3, 43f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "--C11" => \$c11, 44f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "--C12" => \$c12, 45f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "--C21" => \$c21, 46f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "--C22" => \$c22, 47f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "--C3" => \$c3, 48f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "--C4" => \$c4, 49f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "--C5" => \$c5, 50f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "--C6" => \$c6, 51f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "--C7" => \$c7, 52f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "--C8" => \$c8, 53f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "--C9" => \$c9, 54f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "--iscsi" => \$writeISCSIProhibitedExtra, 55f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "--xmpp-node" => \$writeXMPPNodeProhibitedExtra, 56f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "--sasl" => \$writeSASLMap, 57f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "--ldap" => \$writeLDAPMap, 58f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "--normalize" => \$norm, 59f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "--check-bidi" => \$checkBidi, 60f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) ); 61f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) usage() unless defined $sourceDir; 62f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) usage() unless defined $destDir; 63f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) usage() unless defined $srcFileName; 64f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) usage() unless defined $destFileName; 65f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 66f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) $infile = $sourceDir."/".$srcFileName; 67f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) $inFH = IO::File->new($infile,"r") 68f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) or die "could not open the file $infile for reading: $! \n"; 69f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) $outfile = $destDir."/".$destFileName; 70f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 71f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) unlink($outfile); 72f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) $outFH = IO::File->new($outfile,"a") 73f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) or die "could not open the file $outfile for writing: $! \n"; 74f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 75f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) printf $outFH $icu_copyright, localtime->year()+1900; 76f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH $copyright; 77f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH $warning; 78f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 79f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if(defined $norm) { 80f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "\@normalize;;\n"; 81f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 82f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if(defined $checkBidi) { 83f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "\@check-bidi;;\n"; 84f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 85f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "\n"; 86f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) close($outFH); 87f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 88f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if(defined $b2 && defined $b3){ 89f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) die "ERROR: --B2 and --B3 are both specified\!\n"; 90f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 91f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 92f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) while(defined ($line=<$inFH>)){ 93f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) next unless $line=~ /Start\sTable/; 94f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if($line =~ /A.1/){ 95f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) createUnassignedTable($inFH,$outfile); 96f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 97f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if($line =~ /B.1/ && defined $b1){ 98f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) createMapToNothing($inFH,$outfile); 99f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 100f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if($line =~ /B.2/ && defined $b2){ 101f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) createCaseMapNorm($inFH,$outfile); 102f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 103f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if($line =~ /B.3/ && defined $b3){ 104f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) createCaseMapNoNorm($inFH,$outfile); 105f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 106f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if($line =~ /C.1.1/ && defined $c11 ){ 107f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) createProhibitedTable($inFH,$outfile,$line); 108f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 109f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if($line =~ /C.1.2/ && defined $c12 ){ 110f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) createProhibitedTable($inFH,$outfile,$line); 111f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 112f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if($line =~ /C.2.1/ && defined $c21 ){ 113f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) createProhibitedTable($inFH,$outfile,$line); 114f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 115f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if($line =~ /C.2.2/ && defined $c22 ){ 116f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) createProhibitedTable($inFH,$outfile,$line); 117f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 118f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if($line =~ /C.3/ && defined $c3 ){ 119f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) createProhibitedTable($inFH,$outfile,$line); 120f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 121f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if($line =~ /C.4/ && defined $c4 ){ 122f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) createProhibitedTable($inFH,$outfile,$line); 123f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 124f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if($line =~ /C.5/ && defined $c5 ){ 125f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) createProhibitedTable($inFH,$outfile,$line); 126f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 127f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if($line =~ /C.6/ && defined $c6 ){ 128f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) createProhibitedTable($inFH,$outfile,$line); 129f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 130f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if($line =~ /C.7/ && defined $c7 ){ 131f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) createProhibitedTable($inFH,$outfile,$line); 132f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 133f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if($line =~ /C.8/ && defined $c8 ){ 134f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) createProhibitedTable($inFH,$outfile,$line); 135f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 136f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if($line =~ /C.9/ && defined $c9 ){ 137f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) createProhibitedTable($inFH,$outfile,$line); 138f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 139f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 140f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if( defined $writeISCSIProhibitedExtra){ 141f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) create_iSCSIExtraProhibitedTable($inFH, $outfile); 142f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 143f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if( defined $writeXMPPNodeProhitedExtra){ 144f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) create_XMPPNodeExtraProhibitedTable($inFH, $outfile); 145f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 146f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if( defined $writeSASLMap){ 147f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) create_SASLMapTable($inFH, $outfile); 148f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 149f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if( defined $writeLDAPMap){ 150f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) create_LDAPMapTable($inFH, $outfile); 151f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 152f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) close($inFH); 153f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 154f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 155f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#----------------------------------------------------------------------- 156f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)sub readPrint{ 157f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) local ($inFH, $outFH,$comment, $table) = @_; 158f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) $count = 0; 159f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH $comment."\n"; 160f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) while(defined ($line = <$inFH>)){ 161f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) next if $line =~ /Hoffman\s\&\sBlanchet/; # ignore heading 162f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) next if $line =~ /RFC\s3454/; # ignore heading 163f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) next if $line =~ /\f/; # ignore form feed 164f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) next if $line eq "\n"; # ignore blank lines 165f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) # break if "End Table" is found 166f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if( $line =~ /End\sTable/){ 167f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "\n# Total code points $count\n\n"; 168f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) return; 169f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 170f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if($print==1){ 171f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $line; 172f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 173f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) $line =~ s/-/../; 174f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) $line =~ s/^\s+//; 175f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if($line =~ /\;/){ 176f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) }else{ 177f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) $line =~ s/$/;/; 178f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 179f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if($table =~ /A/ ){ 180f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) ($code, $noise) = split /;/ , $line; 181f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) $line = $code."; ; UNASSIGNED\n"; 182f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) }elsif ( $table =~ /B\.1/ ){ 183f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) $line =~ s/Map to nothing/MAP/; 184f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) }elsif ( $table =~ /B\.[23]/ ){ 185f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) $line =~ s/Case map/MAP/; 186f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) $line =~ s/Additional folding/MAP/; 187f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) }elsif ( $table =~ /C/ ) { 188f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) ($code, $noise) = split /;/ , $line; 189f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) $line = $code."; ; PROHIBITED\n"; 190f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 191f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if($line =~ /\.\./){ 192f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) ($code, $noise) = split /;/ , $line; 193f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) ($startStr, $endStr ) = split /\.\./, $code; 194f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) $start = atoi($startStr); 195f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) $end = atoi($endStr); 196f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) #print $start." ".$end."\n"; 197f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) while($start <= $end){ 198f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) $count++; 199f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) $start++; 200f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 201f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) }else{ 202f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) $count++; 203f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 204f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH $line; 205f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 206f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 207f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#----------------------------------------------------------------------- 208f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)sub atoi { 209f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) my $t; 210f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) foreach my $d (split(//, shift())) { 211f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) $t = $t * 16 + $d; 212f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 213f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) return $t; 214f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 215f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#----------------------------------------------------------------------- 216f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)sub createUnassignedTable{ 217f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) ($inFH,$outfile) = @_; 218f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) $outFH = IO::File->new($outfile,"a") 219f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) or die "could not open the file $outfile for writing: $! \n"; 220f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) $comment = "# This table contains code points from Table A.1 from RFC 3454\n"; 221f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) readPrint($inFH,$outFH, $comment, "A"); 222f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) close($outFH); 223f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 224f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#----------------------------------------------------------------------- 225f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)sub createMapToNothing{ 226f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) ($inFH,$outfile) = @_; 227f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) $outFH = IO::File->new($outfile,"a") 228f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) or die "could not open the file $outfile for writing: $! \n"; 229f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) $comment = "# This table contains code points from Table B.1 from RFC 3454\n"; 230f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) readPrint($inFH,$outFH,$comment, "B.1"); 231f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) close($outFH); 232f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 233f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#----------------------------------------------------------------------- 234f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)sub createCaseMapNorm{ 235f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) ($inFH,$outfile) = @_; 236f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) $outFH = IO::File->new($outfile,"a") 237f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) or die "could not open the file $outfile for writing: $! \n"; 238f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) $comment = $warning."# This table contains code points from Table B.2 from RFC 3454\n"; 239f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) readPrint($inFH,$outFH,$comment, "B.2"); 240f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) close($outFH); 241f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 242f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#----------------------------------------------------------------------- 243f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)sub createCaseMapNoNorm{ 244f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) ($inFH,$outfile) = @_; 245f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) $outFH = IO::File->new($outfile,"a") 246f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) or die "could not open the file $outfile for writing: $! \n"; 247f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) $comment = $warning."# This table contains code points from Table B.3 from RFC 3454\n"; 248f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) readPrint($inFH,$outFH,$comment, "B.3"); 249f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) close($outFH); 250f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 251f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#----------------------------------------------------------------------- 252f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)sub createProhibitedTable{ 253f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) ($inFH,$outfile,$line) = @_; 254f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) $line =~ s/Start//; 255f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) $line =~ s/-//g; 256f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) $comment = "# code points from $line"; 257f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 258f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) $outFH = IO::File->new($outfile, "a") 259f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) or die "could not open the file $outfile for writing: $! \n"; 260f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) readPrint($inFH,$outFH,$comment, "C"); 261f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) close($outFH); 262f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 263f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 264f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#----------------------------------------------------------------------- 265f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)sub create_iSCSIExtraProhibitedTable{ 266f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) ($inFH,$outfile,$line) = @_; 267f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) $comment ="# Additional prohibitions from iSCSI profile (rfc3722.txt)\n\n"; 268f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 269f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) $outFH = IO::File->new($outfile, "a") 270f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) or die "could not open the file $outfile for writing: $! \n"; 271f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH $comment; 272f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "0021..002C; ; PROHIBITED\n"; 273f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "002F; ; PROHIBITED\n"; 274f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "003B..0040; ; PROHIBITED\n"; 275f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "005B..0060; ; PROHIBITED\n"; 276f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "007B..007E; ; PROHIBITED\n"; 277f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "3002; ; PROHIBITED\n"; 278f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "\n# Total code points 30\n"; 279f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) close($outFH); 280f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 281f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#----------------------------------------------------------------------- 282f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)sub create_XMPPNodeExtraProhibitedTable{ 283f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) ($inFH,$outfile,$line) = @_; 284f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) $comment ="# Additional prohibitions from XMPP Nodeprep profile (rfc3920.txt)\n\n"; 285f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 286f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) $outFH = IO::File->new($outfile, "a") 287f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) or die "could not open the file $outfile for writing: $! \n"; 288f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH $comment; 289f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "0022; ; PROHIBITED\n"; 290f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "0026; ; PROHIBITED\n"; 291f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "0027; ; PROHIBITED\n"; 292f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "002F; ; PROHIBITED\n"; 293f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "003A; ; PROHIBITED\n"; 294f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "003C; ; PROHIBITED\n"; 295f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "003E; ; PROHIBITED\n"; 296f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "0040; ; PROHIBITED\n"; 297f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "\n# Total code points 8\n"; 298f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) close($outFH); 299f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 300f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#----------------------------------------------------------------------- 301f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)sub create_SASLMapTable{ 302f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) ($inFH,$outfile,$line) = @_; 303f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) $comment ="# Map table for SASL profile (rfc4013.txt)\n\n"; 304f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 305f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) $outFH = IO::File->new($outfile, "a") 306f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) or die "could not open the file $outfile for writing: $! \n"; 307f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH $comment; 308f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) # non-ASCII space characters [C.1.2] to SPACE 309f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "00A0; 0020; MAP\n"; 310f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "1680; 0020; MAP\n"; 311f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "2000; 0020; MAP\n"; 312f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "2001; 0020; MAP\n"; 313f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "2002; 0020; MAP\n"; 314f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "2003; 0020; MAP\n"; 315f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "2004; 0020; MAP\n"; 316f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "2005; 0020; MAP\n"; 317f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "2006; 0020; MAP\n"; 318f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "2007; 0020; MAP\n"; 319f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "2008; 0020; MAP\n"; 320f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "2009; 0020; MAP\n"; 321f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "200A; 0020; MAP\n"; 322f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "200B; 0020; MAP\n"; 323f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "202F; 0020; MAP\n"; 324f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "205F; 0020; MAP\n"; 325f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "3000; 0020; MAP\n"; 326f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 327f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) # commonly mapped to nothing characters except U+200B to nothing 328f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "00AD; ; MAP\n"; 329f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "034F; ; MAP\n"; 330f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "1806; ; MAP\n"; 331f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "180B; ; MAP\n"; 332f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "180C; ; MAP\n"; 333f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "180D; ; MAP\n"; 334f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "200C; ; MAP\n"; 335f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "200D; ; MAP\n"; 336f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "2060; ; MAP\n"; 337f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "FE00; ; MAP\n"; 338f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "FE01; ; MAP\n"; 339f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "FE02; ; MAP\n"; 340f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "FE03; ; MAP\n"; 341f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "FE04; ; MAP\n"; 342f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "FE05; ; MAP\n"; 343f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "FE06; ; MAP\n"; 344f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "FE07; ; MAP\n"; 345f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "FE08; ; MAP\n"; 346f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "FE09; ; MAP\n"; 347f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "FE0A; ; MAP\n"; 348f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "FE0B; ; MAP\n"; 349f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "FE0C; ; MAP\n"; 350f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "FE0D; ; MAP\n"; 351f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "FE0E; ; MAP\n"; 352f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "FE0F; ; MAP\n"; 353f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "FEFF; ; MAP\n"; 354f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "\n# Total code points 43\n"; 355f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) close($outFH); 356f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 357f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#----------------------------------------------------------------------- 358f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)sub create_LDAPMapTable{ 359f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) ($inFH,$outfile,$line) = @_; 360f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) $comment ="# Map table for LDAP profile (rfc4518.txt)\n\n"; 361f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 362f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) $outFH = IO::File->new($outfile, "a") 363f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) or die "could not open the file $outfile for writing: $! \n"; 364f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH $comment; 365f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 366f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) # SOFT HYPHEN (U+00AD) and MONGOLIAN TODO SOFT HYPHEN (U+1806) code 367f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) # points are mapped to nothing. COMBINING GRAPHEME JOINER (U+034F) and 368f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) # VARIATION SELECTORs (U+180B-180D, FF00-FE0F) code points are also 369f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) # mapped to nothing. The OBJECT REPLACEMENT CHARACTER (U+FFFC) is 370f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) # mapped to nothing. 371f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 372f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "00AD; ; MAP\n"; 373f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "034F; ; MAP\n"; 374f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "1806; ; MAP\n"; 375f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "180B; ; MAP\n"; 376f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "180C; ; MAP\n"; 377f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "180D; ; MAP\n"; 378f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "FE00; ; MAP\n"; 379f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "FE01; ; MAP\n"; 380f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "FE02; ; MAP\n"; 381f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "FE03; ; MAP\n"; 382f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "FE04; ; MAP\n"; 383f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "FE05; ; MAP\n"; 384f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "FE06; ; MAP\n"; 385f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "FE07; ; MAP\n"; 386f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "FE08; ; MAP\n"; 387f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "FE09; ; MAP\n"; 388f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "FE0A; ; MAP\n"; 389f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "FE0B; ; MAP\n"; 390f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "FE0C; ; MAP\n"; 391f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "FE0D; ; MAP\n"; 392f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "FE0E; ; MAP\n"; 393f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "FE0F; ; MAP\n"; 394f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "FFFC; ; MAP\n"; 395f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 396f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)# CHARACTER TABULATION (U+0009), LINE FEED (LF) (U+000A), LINE 397f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)# TABULATION (U+000B), FORM FEED (FF) (U+000C), CARRIAGE RETURN (CR) 398f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)# (U+000D), and NEXT LINE (NEL) (U+0085) are mapped to SPACE (U+0020). 399f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 400f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "0009; 0020; MAP\n"; 401f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "000A; 0020; MAP\n"; 402f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "000B; 0020; MAP\n"; 403f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "000C; 0020; MAP\n"; 404f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "000D; 0020; MAP\n"; 405f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "0085; 0020; MAP\n"; 406f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 407f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) # All other control code (e.g., Cc) points or code points with a 408f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) # control function (e.g., Cf) are mapped to nothing. The following is 409f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) # a complete list of these code points: U+0000-0008, 000E-001F, 007F- 410f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) # 0084, 0086-009F, 06DD, 070F, 180E, 200C-200F, 202A-202E, 2060-2063, 411f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) # 206A-206F, FEFF, FFF9-FFFB, 1D173-1D17A, E0001, E0020-E007F. 412f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 413f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "0000; ; MAP\n"; 414f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "0001; ; MAP\n"; 415f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "0002; ; MAP\n"; 416f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "0003; ; MAP\n"; 417f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "0004; ; MAP\n"; 418f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "0005; ; MAP\n"; 419f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "0006; ; MAP\n"; 420f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "0007; ; MAP\n"; 421f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "0008; ; MAP\n"; 422f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "000E; ; MAP\n"; 423f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "000F; ; MAP\n"; 424f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "0010; ; MAP\n"; 425f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "0011; ; MAP\n"; 426f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "0012; ; MAP\n"; 427f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "0013; ; MAP\n"; 428f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "0014; ; MAP\n"; 429f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "0015; ; MAP\n"; 430f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "0016; ; MAP\n"; 431f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "0017; ; MAP\n"; 432f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "0018; ; MAP\n"; 433f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "0019; ; MAP\n"; 434f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "001A; ; MAP\n"; 435f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "001B; ; MAP\n"; 436f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "001C; ; MAP\n"; 437f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "001D; ; MAP\n"; 438f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "001E; ; MAP\n"; 439f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "001F; ; MAP\n"; 440f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "007F; ; MAP\n"; 441f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "0080; ; MAP\n"; 442f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "0081; ; MAP\n"; 443f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "0082; ; MAP\n"; 444f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "0083; ; MAP\n"; 445f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "0084; ; MAP\n"; 446f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "0086; ; MAP\n"; 447f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "0087; ; MAP\n"; 448f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "0088; ; MAP\n"; 449f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "0089; ; MAP\n"; 450f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "008A; ; MAP\n"; 451f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "008B; ; MAP\n"; 452f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "008C; ; MAP\n"; 453f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "008D; ; MAP\n"; 454f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "008E; ; MAP\n"; 455f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "008F; ; MAP\n"; 456f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "0090; ; MAP\n"; 457f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "0091; ; MAP\n"; 458f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "0092; ; MAP\n"; 459f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "0093; ; MAP\n"; 460f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "0094; ; MAP\n"; 461f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "0095; ; MAP\n"; 462f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "0096; ; MAP\n"; 463f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "0097; ; MAP\n"; 464f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "0098; ; MAP\n"; 465f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "0099; ; MAP\n"; 466f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "009A; ; MAP\n"; 467f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "009B; ; MAP\n"; 468f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "009C; ; MAP\n"; 469f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "009D; ; MAP\n"; 470f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "009E; ; MAP\n"; 471f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "009F; ; MAP\n"; 472f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "06DD; ; MAP\n"; 473f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "070F; ; MAP\n"; 474f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "180E; ; MAP\n"; 475f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "200C; ; MAP\n"; 476f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "200D; ; MAP\n"; 477f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "200E; ; MAP\n"; 478f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "200F; ; MAP\n"; 479f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "202A; ; MAP\n"; 480f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "202B; ; MAP\n"; 481f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "202C; ; MAP\n"; 482f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "202D; ; MAP\n"; 483f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "202E; ; MAP\n"; 484f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "2060; ; MAP\n"; 485f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "2061; ; MAP\n"; 486f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "2062; ; MAP\n"; 487f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "2063; ; MAP\n"; 488f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "206A; ; MAP\n"; 489f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "206B; ; MAP\n"; 490f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "206C; ; MAP\n"; 491f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "206D; ; MAP\n"; 492f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "206E; ; MAP\n"; 493f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "206F; ; MAP\n"; 494f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "FEFF; ; MAP\n"; 495f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "FFF9; ; MAP\n"; 496f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "FFFA; ; MAP\n"; 497f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "FFFB; ; MAP\n"; 498f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "1D173; ; MAP\n"; 499f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "1D174; ; MAP\n"; 500f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "1D175; ; MAP\n"; 501f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "1D176; ; MAP\n"; 502f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "1D177; ; MAP\n"; 503f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "1D178; ; MAP\n"; 504f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "1D179; ; MAP\n"; 505f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "1D17A; ; MAP\n"; 506f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "E0001; ; MAP\n"; 507f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "E0020; ; MAP\n"; 508f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "E0021; ; MAP\n"; 509f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "E0022; ; MAP\n"; 510f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "E0023; ; MAP\n"; 511f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "E0024; ; MAP\n"; 512f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "E0025; ; MAP\n"; 513f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "E0026; ; MAP\n"; 514f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "E0027; ; MAP\n"; 515f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "E0028; ; MAP\n"; 516f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "E0029; ; MAP\n"; 517f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "E002A; ; MAP\n"; 518f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "E002B; ; MAP\n"; 519f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "E002C; ; MAP\n"; 520f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "E002D; ; MAP\n"; 521f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "E002E; ; MAP\n"; 522f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "E002F; ; MAP\n"; 523f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "E0030; ; MAP\n"; 524f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "E0031; ; MAP\n"; 525f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "E0032; ; MAP\n"; 526f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "E0033; ; MAP\n"; 527f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "E0034; ; MAP\n"; 528f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "E0035; ; MAP\n"; 529f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "E0036; ; MAP\n"; 530f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "E0037; ; MAP\n"; 531f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "E0038; ; MAP\n"; 532f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "E0039; ; MAP\n"; 533f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "E003A; ; MAP\n"; 534f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "E003B; ; MAP\n"; 535f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "E003C; ; MAP\n"; 536f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "E003D; ; MAP\n"; 537f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "E003E; ; MAP\n"; 538f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "E003F; ; MAP\n"; 539f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "E0040; ; MAP\n"; 540f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "E0041; ; MAP\n"; 541f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "E0042; ; MAP\n"; 542f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "E0043; ; MAP\n"; 543f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "E0044; ; MAP\n"; 544f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "E0045; ; MAP\n"; 545f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "E0046; ; MAP\n"; 546f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "E0047; ; MAP\n"; 547f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "E0048; ; MAP\n"; 548f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "E0049; ; MAP\n"; 549f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "E004A; ; MAP\n"; 550f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "E004B; ; MAP\n"; 551f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "E004C; ; MAP\n"; 552f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "E004D; ; MAP\n"; 553f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "E004E; ; MAP\n"; 554f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "E004F; ; MAP\n"; 555f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "E0050; ; MAP\n"; 556f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "E0051; ; MAP\n"; 557f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "E0052; ; MAP\n"; 558f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "E0053; ; MAP\n"; 559f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "E0054; ; MAP\n"; 560f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "E0055; ; MAP\n"; 561f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "E0056; ; MAP\n"; 562f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "E0057; ; MAP\n"; 563f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "E0058; ; MAP\n"; 564f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "E0059; ; MAP\n"; 565f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "E005A; ; MAP\n"; 566f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "E005B; ; MAP\n"; 567f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "E005C; ; MAP\n"; 568f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "E005D; ; MAP\n"; 569f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "E005E; ; MAP\n"; 570f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "E005F; ; MAP\n"; 571f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "E0060; ; MAP\n"; 572f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "E0061; ; MAP\n"; 573f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "E0062; ; MAP\n"; 574f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "E0063; ; MAP\n"; 575f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "E0064; ; MAP\n"; 576f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "E0065; ; MAP\n"; 577f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "E0066; ; MAP\n"; 578f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "E0067; ; MAP\n"; 579f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "E0068; ; MAP\n"; 580f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "E0069; ; MAP\n"; 581f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "E006A; ; MAP\n"; 582f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "E006B; ; MAP\n"; 583f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "E006C; ; MAP\n"; 584f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "E006D; ; MAP\n"; 585f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "E006E; ; MAP\n"; 586f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "E006F; ; MAP\n"; 587f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "E0070; ; MAP\n"; 588f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "E0071; ; MAP\n"; 589f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "E0072; ; MAP\n"; 590f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "E0073; ; MAP\n"; 591f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "E0074; ; MAP\n"; 592f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "E0075; ; MAP\n"; 593f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "E0076; ; MAP\n"; 594f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "E0077; ; MAP\n"; 595f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "E0078; ; MAP\n"; 596f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "E0079; ; MAP\n"; 597f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "E007A; ; MAP\n"; 598f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "E007B; ; MAP\n"; 599f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "E007C; ; MAP\n"; 600f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "E007D; ; MAP\n"; 601f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "E007E; ; MAP\n"; 602f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "E007F; ; MAP\n"; 603f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 604f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) # ZERO WIDTH SPACE (U+200B) is mapped to nothing. All other code 605f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) # points with Separator (space, line, or paragraph) property (e.g., Zs, 606f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) # Zl, or Zp) are mapped to SPACE (U+0020). The following is a complete 607f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) # list of these code points: U+0020, 00A0, 1680, 2000-200A, 2028-2029, 608f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) # 202F, 205F, 3000. 609f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 610f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "200B; ; MAP\n"; 611f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "00A0; 0020; MAP\n"; 612f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "1680; 0020; MAP\n"; 613f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "2000; 0020; MAP\n"; 614f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "2001; 0020; MAP\n"; 615f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "2002; 0020; MAP\n"; 616f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "2003; 0020; MAP\n"; 617f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "2004; 0020; MAP\n"; 618f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "2005; 0020; MAP\n"; 619f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "2006; 0020; MAP\n"; 620f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "2007; 0020; MAP\n"; 621f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "2008; 0020; MAP\n"; 622f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "2009; 0020; MAP\n"; 623f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "200A; 0020; MAP\n"; 624f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "2028; 0020; MAP\n"; 625f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "2029; 0020; MAP\n"; 626f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "202F; 0020; MAP\n"; 627f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "205F; 0020; MAP\n"; 628f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "3000; 0020; MAP\n"; 629f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 630f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print $outFH "\n# Total code points 238\n"; 631f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) close($outFH); 632f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 633f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#----------------------------------------------------------------------- 634f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)sub usage { 635f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) print << "END"; 636f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)Usage: 637f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)filterRFC3454.pl 638f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)Options: 639f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) --sourcedir=<directory> 640f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) --destdir=<directory> 641f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) --src-filename=<name of RFC file> 642f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) --dest-filename=<name of destination file> 643f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) --A1 Generate data for table A.1 644f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) --B1 Generate data for table B.1 645f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) --B2 Generate data for table B.2 646f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) --B3 Generate data for table B.3 647f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) --C11 Generate data for table C.1.1 648f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) --C12 Generate data for table C.1.2 649f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) --C21 Generate data for table C.2.1 650f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) --C22 Generate data for table C.2.2 651f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) --C3 Generate data for table C.3 652f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) --C4 Generate data for table C.4 653f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) --C5 Generate data for table C.5 654f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) --C6 Generate data for table C.6 655f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) --C7 Generate data for table C.7 656f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) --C8 Generate data for table C.8 657f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) --C9 Generate data for table C.9 658f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) --iscsi Generate data for iSCSI extra prohibited table 659f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) --xmpp-node Generate data for XMPP extra prohibited table 660f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) --sasl Generate data for SASL map table 661f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) --ldap Generate data for LDAP map table 662f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) --normalize Embed the normalization directive in the output file 663f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) --check-bidi Embed the check bidi directove in the output file 664f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 665f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)Note, --B2 and --B3 are mutually exclusive. 666f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 667f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)e.g.: filterRFC3454.pl --sourcedir=. --destdir=./output --src-filename=rfc3454.txt --dest-filename=NamePrepProfile.txt --A1 --B1 --B2 --C12 --C22 --C3 --C4 --C5 --C6 --C7 --C8 --C9 --normalize --check-bidi 668f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 669f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)filterRFC3454.pl filters the RFC file and creates String prep table files. 670f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)The RFC text can be downloaded from ftp://ftp.rfc-editor.org/in-notes/rfc3454.txt 671f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 672f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)END 673f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) exit(0); 674f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 675f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 676f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 677