| 42 |
|
|
| 43 |
encoder => sub { $_[1] }, |
encoder => sub { $_[1] }, |
| 44 |
decoder => sub { $_[1] }, |
decoder => sub { $_[1] }, |
| 45 |
|
name_minimumizer => sub { |
| 46 |
|
shift; my $s = shift; |
| 47 |
|
return (charset => 'us-ascii') unless $s =~ /[\x1B\x0E\x0F]/; |
| 48 |
|
return (charset => 'iso-2022-jp') unless $s =~ /\x1B[^\x24\x28]|\x1B\x24[^\x40B]|\x1B\x28[^BJ]|\x0E|\x0F/; |
| 49 |
|
return (charset => 'iso-2022-jp-1') unless $s =~ /\x1B[^\x24\x28]|\x1B\x24[^\x40B\x28]|\x1B\x28[^BJ]|\x1B\x24\x28[^D]|\x0E|\x0F/; |
| 50 |
|
return (charset => 'iso-2022-jp-3-plane1') unless $s =~ /\x1B[^\x24\x28]|\x1B\x24[^B\x28]|\x1B\x28[^B]|\x1B\x24\x28[^O]|\x0E|\x0F/; |
| 51 |
|
return (charset => 'iso-2022-jp-3') unless $s =~ /\x1B[^\x24\x28]|\x1B\x24[^B\x28]|\x1B\x28[^B]|\x1B\x24\x28[^OP]|\x0E|\x0F/; |
| 52 |
|
return (charset => 'iso-2022-kr') unless $s =~ /\x1B[^\x24]|\x1B\x24[^\x29]|\x1B\x24\x29C/; |
| 53 |
|
return (charset => 'iso-2022-cn') unless $s =~ /\x1B[^\x24\x28]|\x1B\x24[^B]|\x1B\x28[^A]|\x1B\x24\x28[^GH]|\x0E|\x0F/; |
| 54 |
|
(charset => 'iso-2022-int-1'); |
| 55 |
|
}, |
| 56 |
|
|
| 57 |
mime_text => 1, |
mime_text => 1, |
| 58 |
}; |
}; |
| 64 |
decoder => sub { $_[1] }, |
decoder => sub { $_[1] }, |
| 65 |
|
|
| 66 |
mime_text => 0, |
mime_text => 0, |
| 67 |
cte_7bit_preferred => 'quoted-printable', |
cte_7bit_preferred => 'base64', |
| 68 |
}; |
}; |
| 69 |
$CHARSET{'x-unknown'} = $CHARSET{'unknown-8bit'}; |
$CHARSET{'x-unknown'} = $CHARSET{'unknown-8bit'}; |
| 70 |
|
|
| 72 |
my $name = shift; |
my $name = shift; |
| 73 |
return unless $name; ## Note: charset "0" is not supported. |
return unless $name; ## Note: charset "0" is not supported. |
| 74 |
my %definition = @_; |
my %definition = @_; |
| 75 |
|
|
| 76 |
|
$definition{preferred_name} ||= $name; |
| 77 |
if ($definition{preferred_name} ne $name |
if ($definition{preferred_name} ne $name |
| 78 |
&& ref $CHARSET{$definition{preferred_name}}) { |
&& ref $CHARSET{$definition{preferred_name}}) { |
| 79 |
## New charset is an alias of defined charset, |
## New charset is an alias of defined charset, |
| 87 |
$CHARSET{$name} = \%definition; |
$CHARSET{$name} = \%definition; |
| 88 |
|
|
| 89 |
## Set default values |
## Set default values |
| 90 |
$definition{preferred_name} ||= $name; |
#$definition{encoder} ||= sub { $_[1] }; |
| 91 |
|
#$definition{decoder} ||= sub { $_[1] }; |
|
$definition{encoder} ||= sub { $_[1] }; |
|
|
$definition{decoder} ||= sub { $_[1] }; |
|
| 92 |
|
|
| 93 |
$definition{mime_text} = 0 unless defined $definition{mime_text}; |
$definition{mime_text} = 0 unless defined $definition{mime_text}; |
| 94 |
$definition{cte_7bit_preferred} = 'base64' |
$definition{cte_7bit_preferred} = 'base64' |
| 116 |
$CHARSET{$name}->{preferred_name} || $name; |
$CHARSET{$name}->{preferred_name} || $name; |
| 117 |
} |
} |
| 118 |
|
|
| 119 |
|
sub name_minimumize ($$) { |
| 120 |
|
my ($charset, $s) = (lc shift, shift); |
| 121 |
|
if (ref $CHARSET{$charset}->{name_minimumizer}) { |
| 122 |
|
return &{$CHARSET{$charset}->{name_minimumizer}} ($charset, $s); |
| 123 |
|
} |
| 124 |
|
$charset; |
| 125 |
|
} |
| 126 |
|
|
| 127 |
=head1 LICENSE |
=head1 LICENSE |
| 128 |
|
|
| 129 |
Copyright 2002 wakaba E<lt>w@suika.fam.cxE<gt>. |
Copyright 2002 wakaba E<lt>w@suika.fam.cxE<gt>. |