Coverage for /pythoncovmergedfiles/medio/medio/usr/local/lib/python3.11/site-packages/webencodings/custom.py: 89%
Shortcuts on this page
r m x toggle line displays
j k next/prev highlighted chunk
0 (zero) top of page
1 (one) first highlighted chunk
Shortcuts on this page
r m x toggle line displays
j k next/prev highlighted chunk
0 (zero) top of page
1 (one) first highlighted chunk
1"""
3 webencodings.custom
4 ~~~~~~~~~~~~~~~~~~~
6 An implementation of custom "replacement" and "x-user-defined" encodings.
8 :copyright: Copyright 2012 by Simon Sapin
9 :license: BSD, see LICENSE for details.
11"""
13import codecs
15# Abstract and common classes
17class Codec(codecs.Codec):
18 encoding_table = None
19 decoding_table = None
21 def encode(self, input, errors='strict'):
22 return codecs.charmap_encode(input, errors, self.encoding_table)
24 def decode(self, input, errors='strict'):
25 return codecs.charmap_decode(input, errors, self.decoding_table)
28class IncrementalEncoder(codecs.IncrementalEncoder):
29 encoding_table = None
31 def encode(self, input, final=False):
32 return codecs.charmap_encode(input, self.errors, self.encoding_table)[0]
35class IncrementalDecoder(codecs.IncrementalDecoder):
36 decoding_table = None
38 def decode(self, input, final=False):
39 return codecs.charmap_decode(input, self.errors, self.decoding_table)[0]
42class StreamWriter(Codec, codecs.StreamWriter):
43 pass
46class StreamReader(Codec, codecs.StreamReader):
47 pass
50# "x-user-defined" encoding
52user_decoding_table = ''.join(chr(c if c < 128 else c + 0xF700) for c in range(256))
53user_encoding_table = codecs.charmap_build(user_decoding_table)
55class UserCodec(Codec):
56 decoding_table = user_decoding_table
57 encoding_table = user_encoding_table
59class UserIncrementalEncoder(IncrementalEncoder):
60 encoding_table = user_encoding_table
62class UserIncrementalDecoder(IncrementalDecoder):
63 decoding_table = user_decoding_table
65user_codec_info = codecs.CodecInfo(
66 name='x-user-defined',
67 encode=UserCodec().encode,
68 decode=UserCodec().decode,
69 incrementalencoder=UserIncrementalEncoder,
70 incrementaldecoder=UserIncrementalDecoder,
71 streamreader=StreamReader,
72 streamwriter=StreamWriter,
73)
76# "replacement" encoding
78class ReplacementCodec(Codec):
79 decoding_table = encoding_table = ''
81class ReplacementIncrementalEncoder(IncrementalEncoder):
82 encoding_table = ''
84class ReplacementIncrementalDecoder(IncrementalDecoder):
85 decoding_table = ''
87replacement_codec_info = codecs.CodecInfo(
88 name='replacement',
89 encode=ReplacementCodec().encode,
90 decode=ReplacementCodec().decode,
91 incrementalencoder=ReplacementIncrementalEncoder,
92 incrementaldecoder=ReplacementIncrementalDecoder,
93 streamreader=StreamReader,
94 streamwriter=StreamWriter,
95)