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