Home | History | Annotate | Download | only in encodings
      1 """ Python Character Mapping Codec for PalmOS 3.5.
      2 
      3 Written by Sjoerd Mullender (sjoerd (at] acm.org); based on iso8859_15.py.
      4 
      5 """#"
      6 
      7 import codecs
      8 
      9 ### Codec APIs
     10 
     11 class Codec(codecs.Codec):
     12     def encode(self,input,errors='strict'):
     13         return codecs.charmap_encode(input,errors,encoding_map)
     14 
     15     def decode(self,input,errors='strict'):
     16         return codecs.charmap_decode(input,errors,decoding_map)
     17 
     18 class IncrementalEncoder(codecs.IncrementalEncoder):
     19     def encode(self, input, final=False):
     20         return codecs.charmap_encode(input,self.errors,encoding_map)[0]
     21 
     22 class IncrementalDecoder(codecs.IncrementalDecoder):
     23     def decode(self, input, final=False):
     24         return codecs.charmap_decode(input,self.errors,decoding_map)[0]
     25 
     26 class StreamWriter(Codec,codecs.StreamWriter):
     27     pass
     28 
     29 class StreamReader(Codec,codecs.StreamReader):
     30     pass
     31 
     32 ### encodings module API
     33 
     34 def getregentry():
     35     return codecs.CodecInfo(
     36         name='palmos',
     37         encode=Codec().encode,
     38         decode=Codec().decode,
     39         incrementalencoder=IncrementalEncoder,
     40         incrementaldecoder=IncrementalDecoder,
     41         streamreader=StreamReader,
     42         streamwriter=StreamWriter,
     43     )
     44 
     45 ### Decoding Map
     46 
     47 decoding_map = codecs.make_identity_dict(range(256))
     48 
     49 # The PalmOS character set is mostly iso-8859-1 with some differences.
     50 decoding_map.update({
     51         0x0080: 0x20ac, #       EURO SIGN
     52         0x0082: 0x201a, #       SINGLE LOW-9 QUOTATION MARK
     53         0x0083: 0x0192, #       LATIN SMALL LETTER F WITH HOOK
     54         0x0084: 0x201e, #       DOUBLE LOW-9 QUOTATION MARK
     55         0x0085: 0x2026, #       HORIZONTAL ELLIPSIS
     56         0x0086: 0x2020, #       DAGGER
     57         0x0087: 0x2021, #       DOUBLE DAGGER
     58         0x0088: 0x02c6, #       MODIFIER LETTER CIRCUMFLEX ACCENT
     59         0x0089: 0x2030, #       PER MILLE SIGN
     60         0x008a: 0x0160, #       LATIN CAPITAL LETTER S WITH CARON
     61         0x008b: 0x2039, #       SINGLE LEFT-POINTING ANGLE QUOTATION MARK
     62         0x008c: 0x0152, #       LATIN CAPITAL LIGATURE OE
     63         0x008d: 0x2666, #       BLACK DIAMOND SUIT
     64         0x008e: 0x2663, #       BLACK CLUB SUIT
     65         0x008f: 0x2665, #       BLACK HEART SUIT
     66         0x0090: 0x2660, #       BLACK SPADE SUIT
     67         0x0091: 0x2018, #       LEFT SINGLE QUOTATION MARK
     68         0x0092: 0x2019, #       RIGHT SINGLE QUOTATION MARK
     69         0x0093: 0x201c, #       LEFT DOUBLE QUOTATION MARK
     70         0x0094: 0x201d, #       RIGHT DOUBLE QUOTATION MARK
     71         0x0095: 0x2022, #       BULLET
     72         0x0096: 0x2013, #       EN DASH
     73         0x0097: 0x2014, #       EM DASH
     74         0x0098: 0x02dc, #       SMALL TILDE
     75         0x0099: 0x2122, #       TRADE MARK SIGN
     76         0x009a: 0x0161, #       LATIN SMALL LETTER S WITH CARON
     77         0x009c: 0x0153, #       LATIN SMALL LIGATURE OE
     78         0x009f: 0x0178, #       LATIN CAPITAL LETTER Y WITH DIAERESIS
     79 })
     80 
     81 ### Encoding Map
     82 
     83 encoding_map = codecs.make_encoding_map(decoding_map)
     84