summaryrefslogtreecommitdiff
path: root/Master/tlpkg/tlperl/lib/Pod/Simple/TranscodeDumb.pm
blob: 80b828a753fa26ecade0e13ab75a9a31f6c819e1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86

require 5;
## This module is to be use()'d only by Pod::Simple::Transcode

package Pod::Simple::TranscodeDumb;
use strict;
use vars qw($VERSION %Supported);
$VERSION = '3.32';
# This module basically pretends it knows how to transcode, except
#  only for null-transcodings!  We use this when Encode isn't
#  available.

%Supported = (
  'ascii'       => 1,
  'ascii-ctrl'  => 1,
  'iso-8859-1'  => 1,
  'cp1252'      => 1,
  'null'        => 1,
  'latin1'      => 1,
  'latin-1'     => 1,
  %Supported,
);

sub is_dumb  {1}
sub is_smart {0}

sub all_encodings {
  return sort keys %Supported;
}

sub encoding_is_available {
  return exists $Supported{lc $_[1]};
}

sub encmodver {
  return __PACKAGE__ . " v" .($VERSION || '?');
}

sub make_transcoder {
    my ($e) = $_[1];
    die "WHAT ENCODING!?!?" unless $e;
    # No-op for all but CP1252.
    return sub {;} if $e !~ /^cp-?1252$/i;

    # Replace CP1252 nerbles with their ASCII equivalents.
    return sub {
        # Copied from Encode::ZapCP1252.
        my %ascii_for = (
            # http://en.wikipedia.org/wiki/Windows-1252
            "\x80" => 'e',    # EURO SIGN
            "\x82" => ',',    # SINGLE LOW-9 QUOTATION MARK
            "\x83" => 'f',    # LATIN SMALL LETTER F WITH HOOK
            "\x84" => ',,',   # DOUBLE LOW-9 QUOTATION MARK
            "\x85" => '...',  # HORIZONTAL ELLIPSIS
            "\x86" => '+',    # DAGGER
            "\x87" => '++',   # DOUBLE DAGGER
            "\x88" => '^',    # MODIFIER LETTER CIRCUMFLEX ACCENT
            "\x89" => '%',    # PER MILLE SIGN
            "\x8a" => 'S',    # LATIN CAPITAL LETTER S WITH CARON
            "\x8b" => '<',    # SINGLE LEFT-POINTING ANGLE QUOTATION MARK
            "\x8c" => 'OE',   # LATIN CAPITAL LIGATURE OE
            "\x8e" => 'Z',    # LATIN CAPITAL LETTER Z WITH CARON
            "\x91" => "'",    # LEFT SINGLE QUOTATION MARK
            "\x92" => "'",    # RIGHT SINGLE QUOTATION MARK
            "\x93" => '"',    # LEFT DOUBLE QUOTATION MARK
            "\x94" => '"',    # RIGHT DOUBLE QUOTATION MARK
            "\x95" => '*',    # BULLET
            "\x96" => '-',    # EN DASH
            "\x97" => '--',   # EM DASH
            "\x98" => '~',    # SMALL TILDE
            "\x99" => '(tm)', # TRADE MARK SIGN
            "\x9a" => 's',    # LATIN SMALL LETTER S WITH CARON
            "\x9b" => '>',    # SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
            "\x9c" => 'oe',   # LATIN SMALL LIGATURE OE
            "\x9e" => 'z',    # LATIN SMALL LETTER Z WITH CARON
            "\x9f" => 'Y',    # LATIN CAPITAL LETTER Y WITH DIAERESIS
        );

        s{([\x80-\x9f])}{$ascii_for{$1} || $1}emxsg for @_;
  };
}


1;