Upgrade to Encode 1.33, from Dan Kogai.
[p5sagit/p5-mst-13.2.git] / ext / Encode / Encode.pm
index caada11..b1e54e8 100644 (file)
@@ -1,6 +1,6 @@
 package Encode;
 use strict;
-our $VERSION = do { my @r = (q$Revision: 1.30 $ =~ /\d+/g); sprintf "%d."."%02d" x $#r, @r };
+our $VERSION = do { my @r = (q$Revision: 1.33 $ =~ /\d+/g); sprintf "%d."."%02d" x $#r, @r };
 our $DEBUG = 0;
 
 require DynaLoader;
@@ -10,25 +10,26 @@ our @ISA = qw(Exporter DynaLoader);
 
 # Public, encouraged API is exported by default
 our @EXPORT = qw (
-  encode
   decode
-  encode_utf8
   decode_utf8
-  find_encoding
+  encode
+  encode_utf8
   encodings
+  find_encoding
 );
 
 our @EXPORT_OK =
     qw(
+       _utf8_off
+       _utf8_on
        define_encoding
        from_to
-       is_utf8
-       is_8bit
        is_16bit
-       utf8_upgrade
+       is_8bit
+       is_utf8
+       resolve_alias
        utf8_downgrade
-       _utf8_on
-       _utf8_off
+       utf8_upgrade
       );
 
 bootstrap Encode ();
@@ -43,92 +44,7 @@ use Encode::Alias;
 
 # Make a %Encoding package variable to allow a certain amount of cheating
 our %Encoding;
-our %ExtModule;
-
-my @codepages = qw(
-                    37  424  437  500  737  775  850  852  855 
-                   856  857  860  861  862  863  864  865  866 
-                   869  874  875  932  936  949  950 1006 1026 
-                  1047 1250 1251 1252 1253 1254 1255 1256 1257
-                  1258
-                  );
-
-my @macintosh = qw(
-                  CentralEurRoman  Croatian  Cyrillic   Greek
-                  Iceland          Roman     Rumanian   Sami
-                  Thai             Turkish   Ukrainian
-                  );
-
-for my $k (2..11,13..16){
-    $ExtModule{"iso-8859-$k"} = 'Encode::Byte';
-}
-
-for my $k (@codepages){
-    $ExtModule{"cp$k"} = 'Encode::Byte';
-}
-
-for my $k (@macintosh)
-{
-    $ExtModule{"mac$k"} = 'Encode::Byte';
-}
-
-for my $k (qw(UCS-2BE UCS-2LE UTF-16 UTF-16BE UTF-16LE
-             UTF-32 UTF-32BE UTF-32LE)){
-    $ExtModule{$k} = 'Encode::Unicode';
-}
-
-%ExtModule =
-    (%ExtModule,
-     'koi8-r'           => 'Encode::Byte',
-     'posix-bc'         => 'Encode::EBCDIC',
-     cp37               => 'Encode::EBCDIC',
-     cp1026             => 'Encode::EBCDIC',
-     cp1047             => 'Encode::EBCDIC',
-     cp500              => 'Encode::EBCDIC',
-     cp875              => 'Encode::EBCDIC',
-     dingbats           => 'Encode::Symbol',
-     macDingbats        => 'Encode::Symbol',
-     macSymbol          => 'Encode::Symbol',
-     symbol             => 'Encode::Symbol',
-     viscii             => 'Encode::Byte',
-);
-
-unless ($ON_EBCDIC) { # CJK added to autoload unless EBCDIC env
-%ExtModule =
-    (%ExtModule,
-
-     'cp936'           => 'Encode::CN',
-     'euc-cn'           => 'Encode::CN',
-     'gb12345-raw'     => 'Encode::CN',
-     'gb2312-raw'      => 'Encode::CN',
-     'gbk'             => 'Encode::CN',
-     'iso-ir-165'      => 'Encode::CN',
-
-     '7bit-jis'         => 'Encode::JP',
-     'cp932'           => 'Encode::JP',
-     'euc-jp'          => 'Encode::JP',
-     'iso-2022-jp'     => 'Encode::JP',
-     'iso-2022-jp-1'   => 'Encode::JP',
-     'jis0201-raw'      => 'Encode::JP',
-     'jis0208-raw'      => 'Encode::JP',
-     'jis0212-raw'      => 'Encode::JP',
-     'macJapanese'      => 'Encode::JP',
-     'shiftjis'                => 'Encode::JP',
-
-     'cp949'           => 'Encode::KR',
-     'euc-kr'          => 'Encode::KR',
-     'ksc5601'         => 'Encode::KR',
-     'macKorean'        => 'Encode::KR',
-
-     'big5'            => 'Encode::TW',
-     'big5-hkscs'      => 'Encode::TW',
-     'cp950'           => 'Encode::TW',
-
-     'big5plus'        => 'Encode::HanExtra',
-     'euc-tw'          => 'Encode::HanExtra',
-     'gb18030'         => 'Encode::HanExtra',
-    );
-}
+use Encode::Config;
 
 sub encodings
 {
@@ -142,7 +58,8 @@ sub encodings
     }
     my %modules = map {$_ => 1} @modules;
     return
-       sort grep {!/^(?:Internal|Unicode)$/o} keys %Encoding;
+       sort { lc $a cmp lc $b }
+             grep {!/^(?:Internal|Unicode)$/o} keys %Encoding;
 }
 
 sub define_encoding
@@ -201,6 +118,12 @@ sub find_encoding
     return __PACKAGE__->getEncoding($name,$skip_external);
 }
 
+sub resolve_alias {
+    my $obj = find_encoding(shift);
+    defined $obj and return $obj->name;
+    return;
+}
+
 sub encode
 {
     my ($name,$string,$check) = @_;
@@ -528,6 +451,17 @@ After that, newName can be used as an alias for ENCODING.
 ENCODING may be either the name of an encoding or an
 I<encoding object>
 
+But before you do so, make sure the alias is nonexistent with
+C<resolve_alias()>, which returns the canonical name thereof.
+i.e.
+
+  Encode::resolve_alias("latin1") eq "iso-8859-1" # true
+  Encode::resolve_alias("iso-8859-12")   # false; nonexistent
+  Encode::resolve_alias($name) eq $name  # true if $name is canonical
+
+This resolve_alias() does not need C<use Encode::Alias> and is 
+exported via C<use encode qw(resolve_alias)>.
+
 See L<Encode::Alias> on details.
 
 =head1 Encoding and IO