1
2require 5;
3## This module is to be use()'d only by Pod::Simple::Transcode
4
5package Pod::Simple::TranscodeDumb;
6use strict;
7use vars qw($VERSION %Supported);
8$VERSION = '3.35';
9# This module basically pretends it knows how to transcode, except
10#  only for null-transcodings!  We use this when Encode isn't
11#  available.
12
13%Supported = (
14  'ascii'       => 1,
15  'ascii-ctrl'  => 1,
16  'iso-8859-1'  => 1,
17  'cp1252'      => 1,
18  'null'        => 1,
19  'latin1'      => 1,
20  'latin-1'     => 1,
21  %Supported,
22);
23
24sub is_dumb  {1}
25sub is_smart {0}
26
27sub all_encodings {
28  return sort keys %Supported;
29}
30
31sub encoding_is_available {
32  return exists $Supported{lc $_[1]};
33}
34
35sub encmodver {
36  return __PACKAGE__ . " v" .($VERSION || '?');
37}
38
39sub make_transcoder {
40    my ($e) = $_[1];
41    die "WHAT ENCODING!?!?" unless $e;
42    # No-op for all but CP1252.
43    return sub {;} if $e !~ /^cp-?1252$/i;
44
45    # Replace CP1252 nerbles with their ASCII equivalents.
46    return sub {
47        # Copied from Encode::ZapCP1252.
48        my %ascii_for = (
49            # http://en.wikipedia.org/wiki/Windows-1252
50            "\x80" => 'e',    # EURO SIGN
51            "\x82" => ',',    # SINGLE LOW-9 QUOTATION MARK
52            "\x83" => 'f',    # LATIN SMALL LETTER F WITH HOOK
53            "\x84" => ',,',   # DOUBLE LOW-9 QUOTATION MARK
54            "\x85" => '...',  # HORIZONTAL ELLIPSIS
55            "\x86" => '+',    # DAGGER
56            "\x87" => '++',   # DOUBLE DAGGER
57            "\x88" => '^',    # MODIFIER LETTER CIRCUMFLEX ACCENT
58            "\x89" => '%',    # PER MILLE SIGN
59            "\x8a" => 'S',    # LATIN CAPITAL LETTER S WITH CARON
60            "\x8b" => '<',    # SINGLE LEFT-POINTING ANGLE QUOTATION MARK
61            "\x8c" => 'OE',   # LATIN CAPITAL LIGATURE OE
62            "\x8e" => 'Z',    # LATIN CAPITAL LETTER Z WITH CARON
63            "\x91" => "'",    # LEFT SINGLE QUOTATION MARK
64            "\x92" => "'",    # RIGHT SINGLE QUOTATION MARK
65            "\x93" => '"',    # LEFT DOUBLE QUOTATION MARK
66            "\x94" => '"',    # RIGHT DOUBLE QUOTATION MARK
67            "\x95" => '*',    # BULLET
68            "\x96" => '-',    # EN DASH
69            "\x97" => '--',   # EM DASH
70            "\x98" => '~',    # SMALL TILDE
71            "\x99" => '(tm)', # TRADE MARK SIGN
72            "\x9a" => 's',    # LATIN SMALL LETTER S WITH CARON
73            "\x9b" => '>',    # SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
74            "\x9c" => 'oe',   # LATIN SMALL LIGATURE OE
75            "\x9e" => 'z',    # LATIN SMALL LETTER Z WITH CARON
76            "\x9f" => 'Y',    # LATIN CAPITAL LETTER Y WITH DIAERESIS
77        );
78
79        s{([\x80-\x9f])}{$ascii_for{$1} || $1}emxsg for @_;
80  };
81}
82
83
841;
85
86
87