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