chRddlZddlZddlmZmZGddejZGddejZGdd ejZGd d eejZGd d eej Z ej dZ dS)N)BASIC_CHARACTER_SETBASIC_CHARACTER_SET_EXTENSIONcheZdZdZdZdZeefdZe dZ d dZ dZ d d Z ed Zd S) Codecz5 Stateless encoder and decoder for GSM 03.38 zgsm03.38c.td|D_jtfd|Dt jj_dS)Nc@g|]\}}|tj|fS) unicodedatalookup).0keynames ]/home/jenkins/workspace/simtester-sanitize/venv/lib/python3.11/site-packages/gsm0338/codec.py z"Codec.__init__..s, _ _ _dc;%d++ , _ _ _c3`K|](\}}jdz|ztj|fV)dS)N)_Codec__ESCAPEr r )rrrselfs r z!Codec.__init__..s_CCS$=A%+k.@.F.FGCCCCCCr)dictitems _decode_mapupdatecodecsmake_encoding_map _encoding_map)rlocking_shift_decode_mapsingle_shift_decode_maps` r__init__zCodec.__init__s _ _>V>\>\>^>^ _ _ _aa  CCCC"9"?"?"A"ACCC C C D D D$5d6FGGrcj tj|S#t$rddddd}||cYSwxYw)z4unicodedata lookup function only used for Python 2.7   )z LINE FEEDz FORM FEEDzCARRIAGE RETURNESCAPE)r r KeyError)runicode_lookup_fallbacks r__unicode_lookup27zCodec.__unicode_lookup27s_ 1%d++ + 1 1 1$$#*! '' # +40 0 0 0 1s 22strictcd}d}d}t|}||kr |||z }|dz }n#t$r|tj|}t j|||dzd}||\}}t|tr%|d fd|Dz }n||z }YnwxYw||k||fS)a Encode string to byte array :param str input: string (unicode) object to convert to byte array :param str errors: defines the error handling to apply :return: returns a tuple (output object, length consumed) :rtype: (bytes,int) Nrrrzcharacter not mappedc:g|]}|Sr )_Codec__encode_character)rcrs rrz Codec.encode..@s'._._._at/F/Fq/I/I._._._r) lenr/r)r lookup_errorUnicodeEncodeErrorNAME isinstancestrjoin) rinputerrors error_handler encode_bufferpos input_length encode_error replacements ` rencodez Codec.encode)s  5zz L   1!8!8s!D!DD q 1 1 1 ($*$7$?$?M1$)UCqRhii #0=#>#> Sk3//1!SXX._._._._S^._._._%`%``MM![0M 1 L  c!!s#ABC  C cd}|j|}|dzr|t|jfz }|t|dzfz }|S)Nri)rbytesr)r character append_buffernums r__encode_characterzCodec.__encode_characterEsU  + < 5 UDM#344 4Md }--- rchd}d}d}d}d}t|}||kr |||z}|dz }||jkr|dz}(||j|z }nS#t$rF|t j|}t |j|||d} || \} }| r|| z }YnwxYw|}d}||k||fS)a  Decode byte array to string :param bytes input: byte array to convert to unicode string :param str errors: defines the error handling to apply :return: returns a tuple (output object, length consumed) :rtype: (str,int) Nrrrzinvalid sequence)r1rrr)rr2UnicodeDecodeErrorr4) rr8r9r: decode_buffer start_posnext_posrFr=r>r?s rdecodez Codec.decodeNs   5zz %% 1uX&A $-''AIC!1#!66  1 1 1 ($*$7$?$?M1$)UIxYkll (5 l(C(C% X1![0M  1!IC!%%"h&&s AAA B#"B#c tj|j|j|jt t ttS)zn encodings module API :return: CodecInfo for gsm03.38 codec :rtype: CodecInfo )rr@rNincrementalencoderincrementaldecoder streamwriter streamreader) r CodecInfor4r@rNIncrementalEncoderIncrementalDecoder StreamWriter StreamReader)clss rget_codec_infozCodec.get_codec_inforsE355<355<11%%    rN)r,)__name__ __module__ __qualname____doc__r4rrrr" staticmethod_Codec__unicode_lookup27r@r/rN classmethodrZr rrrrs DH0C)FHHHH 1 1\ 1""""8!'!'!'!'H  [   rrceZdZddZdS)rUFcNtj||j|jdSNr)rcharmap_encoder9rrr8finals rr@zIncrementalEncoder.encodes!$UDK9KLLQOOrNF)r[r\r]r@r rrrUrUs.PPPPPPrrUceZdZddZdS)rVFcNtj||j|jdSrd)rcharmap_decoder9rrfs rrNzIncrementalDecoder.decodes!$UDK9IJJ1MMrNrh)r[r\r]rNr rrrVrVs.NNNNNNrrVceZdZdZdS)rWz+ StreamWriter: for GSM 03.38 codec Nr[r\r]r^r rrrWrW DrrWceZdZdZdS)rXz+ StreamReader: for GSM 03.38 codec Nrmr rrrXrXrnrrXc||tjkrtSdS)zw Return codec info for 'gsm03.38' :param str encoding: name of the searched encoding :rtype: CodecInfo N)lowerrr4rZ)encodings r find_gsm0338rss5~~5:%%##%%%&%r) rr charsetrrrrUrVrWrXregisterrsr rrrvsV GGGGGGGGy y y y y FLy y y xPPPPP2PPPNNNNN2NNN     5&-        5&-   &&&&&r