""" Python Character Mapping Codec for EBCDIC-AT-DE Written by Michael Stroeder . $Id: ebcdicatde.py,v 1.2 2008/12/04 16:15:23 michael Exp $ License: Public domain without any warranty! See also: http://www.ietf.org/rfc/rfc1345.txt """ 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 codecs.CodecInfo( name='ebcdic-at-de', encode=Codec().encode, decode=Codec().decode, streamreader=StreamReader, streamwriter=StreamWriter, ) def getaliases(): return ('ebcdic-at-de','ebcdicatde','ebcdic_at_de') def codec_search_function(encoding): if encoding in getaliases(): return getregentry() return None codecs.register(codec_search_function) ### Decoding Map decoding_map = { 0x0000: 0x0000, # NULL (NUL) 0x0001: 0x0001, # START OF HEADING (SOH) 0x0002: 0x0002, # START OF TEXT (STX) 0x0003: 0x0003, # END OF TEXT (ETX) 0x0004: 0x0004, # END OF TRANSMISSION (EOT) 0x0005: 0x0005, # ENQUIRY (ENQ) 0x0006: 0x0006, # ACKNOWLEDGE (ACK) 0x0007: 0x0007, # BELL (BEL) 0x0008: 0x0008, # BACKSPACE (BS) 0x0009: 0x0009, # CHARACTER TABULATION (HT) 0x000a: 0x000a, # LINE FEED (LF) 0x000b: 0x000b, # LINE TABULATION (VT) 0x000c: 0x000c, # FORM FEED (FF) 0x000d: 0x000d, # CARRIAGE RETURN (CR) 0x000e: 0x000e, # SHIFT OUT (SO) 0x000f: 0x000f, # SHIFT IN (SI) 0x0010: 0x0010, # DATALINK ESCAPE (DLE) 0x0011: 0x0011, # DEVICE CONTROL ONE (DC1) 0x0012: 0x0012, # DEVICE CONTROL TWO (DC2) 0x0013: 0x0013, # DEVICE CONTROL THREE (DC3) 0x0014: 0x0014, # DEVICE CONTROL FOUR (DC4) 0x0015: 0x0015, # NEGATIVE ACKNOWLEDGE (NAK) 0x0016: 0x0016, # SYNCRONOUS IDLE (SYN) 0x0017: 0x0017, # END OF TRANSMISSION BLOCK (ETB) 0x0018: 0x0018, # CANCEL (CAN) 0x0019: 0x0019, # END OF MEDIUM (EM) 0x001a: 0x001a, # SUBSTITUTE (SUB) 0x001b: 0x001b, # ESCAPE (ESC) 0x001c: 0x001c, # FILE SEPARATOR (IS4) 0x001d: 0x001d, # GROUP SEPARATOR (IS3) 0x001e: 0x001e, # RECORD SEPARATOR (IS2) 0x001f: 0x001f, # UNIT SEPARATOR (IS1) 0x0040: 0x0020, # SPACE 0x004a: 0x00c4, # LATIN CAPITAL LETTER A WITH DIAERESIS 0x004b: 0x002e, # FULL STOP 0x004c: 0x003c, # LESS-THAN SIGN 0x004d: 0x0028, # LEFT PARENTHESIS 0x004e: 0x002b, # PLUS SIGN 0x004f: 0x0021, # EXCLAMATION MARK 0x0050: 0x0026, # AMPERSAND 0x005a: 0x00dc, # LATIN CAPITAL LETTER U WITH DIAERESIS 0x005b: 0x0024, # DOLLAR SIGN 0x005c: 0x002a, # ASTERISK 0x005d: 0x0029, # RIGHT PARENTHESIS 0x005e: 0x003b, # SEMICOLON 0x0060: 0x002d, # HYPHEN-MINUS 0x0061: 0x005c, # REVERSE SOLIDUS 0x006a: 0x00f6, # LATIN SMALL LETTER O WITH DIAERESIS 0x006b: 0x002c, # COMMA 0x006c: 0x0025, # PERCENT SIGN 0x006d: 0x005f, # LOW LINE 0x006e: 0x232a, # RIGHT-POINTING ANGLE BRACKET 0x006f: 0x003f, # QUESTION MARK 0x0079: 0x0060, # GRAVE ACCENT 0x007a: 0x003a, # COLON 0x007b: 0x0023, # NUMBER SIGN 0x007c: 0x00a7, # SECTION SIGN 0x007d: 0x0027, # APOSTROPHE 0x007e: 0x003d, # EQUALS SIGN 0x007f: 0x0022, # QUOTATION MARK 0x0081: 0x0061, # LATIN SMALL LETTER A 0x0082: 0x0062, # LATIN SMALL LETTER B 0x0083: 0x0063, # LATIN SMALL LETTER C 0x0084: 0x0064, # LATIN SMALL LETTER D 0x0085: 0x0065, # LATIN SMALL LETTER E 0x0086: 0x0066, # LATIN SMALL LETTER F 0x0087: 0x0067, # LATIN SMALL LETTER G 0x0088: 0x0068, # LATIN SMALL LETTER H 0x0089: 0x0069, # LATIN SMALL LETTER I 0x0091: 0x006a, # LATIN SMALL LETTER J 0x0092: 0x006b, # LATIN SMALL LETTER K 0x0093: 0x006c, # LATIN SMALL LETTER L 0x0094: 0x006d, # LATIN SMALL LETTER M 0x0095: 0x006e, # LATIN SMALL LETTER N 0x0096: 0x006f, # LATIN SMALL LETTER O 0x0097: 0x0070, # LATIN SMALL LETTER P 0x0098: 0x0071, # LATIN SMALL LETTER Q 0x0099: 0x0072, # LATIN SMALL LETTER R 0x00a1: 0x00df, # LATIN SMALL LETTER SHARP S (German) 0x00a2: 0x0073, # LATIN SMALL LETTER S 0x00a3: 0x0074, # LATIN SMALL LETTER T 0x00a4: 0x0075, # LATIN SMALL LETTER U 0x00a5: 0x0076, # LATIN SMALL LETTER V 0x00a6: 0x0077, # LATIN SMALL LETTER W 0x00a7: 0x0078, # LATIN SMALL LETTER X 0x00a8: 0x0079, # LATIN SMALL LETTER Y 0x00a9: 0x007a, # LATIN SMALL LETTER Z 0x00c0: 0x00e4, # LATIN SMALL LETTER A WITH DIAERESIS 0x00c1: 0x0041, # LATIN CAPITAL LETTER A 0x00c2: 0x0042, # LATIN CAPITAL LETTER B 0x00c3: 0x0043, # LATIN CAPITAL LETTER C 0x00c4: 0x0044, # LATIN CAPITAL LETTER D 0x00c5: 0x0045, # LATIN CAPITAL LETTER E 0x00c6: 0x0046, # LATIN CAPITAL LETTER F 0x00c7: 0x0047, # LATIN CAPITAL LETTER G 0x00c8: 0x0048, # LATIN CAPITAL LETTER H 0x00c9: 0x0049, # LATIN CAPITAL LETTER I 0x00d0: 0x00fc, # LATIN SMALL LETTER U WITH DIAERESIS 0x00d1: 0x004a, # LATIN CAPITAL LETTER J 0x00d2: 0x004b, # LATIN CAPITAL LETTER K 0x00d3: 0x004c, # LATIN CAPITAL LETTER L 0x00d4: 0x004d, # LATIN CAPITAL LETTER M 0x00d5: 0x004e, # LATIN CAPITAL LETTER N 0x00d6: 0x004f, # LATIN CAPITAL LETTER O 0x00d7: 0x0050, # LATIN CAPITAL LETTER P 0x00d8: 0x0051, # LATIN CAPITAL LETTER Q 0x00d9: 0x0052, # LATIN CAPITAL LETTER R 0x00e0: 0x00d6, # LATIN CAPITAL LETTER O WITH DIAERESIS 0x00e2: 0x0053, # LATIN CAPITAL LETTER S 0x00e3: 0x0054, # LATIN CAPITAL LETTER T 0x00e4: 0x0055, # LATIN CAPITAL LETTER U 0x00e5: 0x0056, # LATIN CAPITAL LETTER V 0x00e6: 0x0057, # LATIN CAPITAL LETTER W 0x00e7: 0x0058, # LATIN CAPITAL LETTER X 0x00e8: 0x0059, # LATIN CAPITAL LETTER Y 0x00e9: 0x005a, # LATIN CAPITAL LETTER Z 0x00f0: 0x0030, # DIGIT ZERO 0x00f1: 0x0031, # DIGIT ONE 0x00f2: 0x0032, # DIGIT TWO 0x00f3: 0x0033, # DIGIT THREE 0x00f4: 0x0034, # DIGIT FOUR 0x00f5: 0x0035, # DIGIT FIVE 0x00f6: 0x0036, # DIGIT SIX 0x00f7: 0x0037, # DIGIT SEVEN 0x00f8: 0x0038, # DIGIT EIGHT 0x00f9: 0x0039, # DIGIT NINE 0x00ff: 0x007f, # DELETE (DEL) 0x00c1: 0x0041, # LATIN CAPITAL LETTER A } ### Encoding Map encoding_map = {} for k,v in decoding_map.items(): encoding_map[v] = k codecs.register(getregentry)