""" Python Character Mapping Codec generated from '8859-3.TXT' with gencodec.py.

Written by Marc-Andre Lemburg (mal@lemburg.com).

(c) Copyright CNRI, All Rights Reserved. NO WARRANTY.
(c) Copyright 2000 Guido van Rossum.

"""#"

import codecs

### Codec APIs

class Codec(codecs.Codec):

    def encode(self,input,errors='strict'):

        return codecs.charmap_encode(input,errors,encoding_map)

    def decode(self,input,errors='strict'):

        return codecs.charmap_decode(input,errors,decoding_map)

class StreamWriter(Codec,codecs.StreamWriter):
    pass

class StreamReader(Codec,codecs.StreamReader):
    pass

### encodings module API

def getregentry():

    return (Codec().encode,Codec().decode,StreamReader,StreamWriter)

### Decoding Map

decoding_map = codecs.make_identity_dict(range(256))
decoding_map.update({
        0x00a1: 0x0126, #       LATIN CAPITAL LETTER H WITH STROKE
        0x00a2: 0x02d8, #       BREVE
        0x00a5: None,
        0x00a6: 0x0124, #       LATIN CAPITAL LETTER H WITH CIRCUMFLEX
        0x00a9: 0x0130, #       LATIN CAPITAL LETTER I WITH DOT ABOVE
        0x00aa: 0x015e, #       LATIN CAPITAL LETTER S WITH CEDILLA
        0x00ab: 0x011e, #       LATIN CAPITAL LETTER G WITH BREVE
        0x00ac: 0x0134, #       LATIN CAPITAL LETTER J WITH CIRCUMFLEX
        0x00ae: None,
        0x00af: 0x017b, #       LATIN CAPITAL LETTER Z WITH DOT ABOVE
        0x00b1: 0x0127, #       LATIN SMALL LETTER H WITH STROKE
        0x00b6: 0x0125, #       LATIN SMALL LETTER H WITH CIRCUMFLEX
        0x00b9: 0x0131, #       LATIN SMALL LETTER DOTLESS I
        0x00ba: 0x015f, #       LATIN SMALL LETTER S WITH CEDILLA
        0x00bb: 0x011f, #       LATIN SMALL LETTER G WITH BREVE
        0x00bc: 0x0135, #       LATIN SMALL LETTER J WITH CIRCUMFLEX
        0x00be: None,
        0x00bf: 0x017c, #       LATIN SMALL LETTER Z WITH DOT ABOVE
        0x00c3: None,
        0x00c5: 0x010a, #       LATIN CAPITAL LETTER C WITH DOT ABOVE
        0x00c6: 0x0108, #       LATIN CAPITAL LETTER C WITH CIRCUMFLEX
        0x00d0: None,
        0x00d5: 0x0120, #       LATIN CAPITAL LETTER G WITH DOT ABOVE
        0x00d8: 0x011c, #       LATIN CAPITAL LETTER G WITH CIRCUMFLEX
        0x00dd: 0x016c, #       LATIN CAPITAL LETTER U WITH BREVE
        0x00de: 0x015c, #       LATIN CAPITAL LETTER S WITH CIRCUMFLEX
        0x00e3: None,
        0x00e5: 0x010b, #       LATIN SMALL LETTER C WITH DOT ABOVE
        0x00e6: 0x0109, #       LATIN SMALL LETTER C WITH CIRCUMFLEX
        0x00f0: None,
        0x00f5: 0x0121, #       LATIN SMALL LETTER G WITH DOT ABOVE
        0x00f8: 0x011d, #       LATIN SMALL LETTER G WITH CIRCUMFLEX
        0x00fd: 0x016d, #       LATIN SMALL LETTER U WITH BREVE
        0x00fe: 0x015d, #       LATIN SMALL LETTER S WITH CIRCUMFLEX
        0x00ff: 0x02d9, #       DOT ABOVE
})

### Encoding Map

encoding_map = codecs.make_encoding_map(decoding_map)
