U
    »mœdq  ã                
   @   sð   d Z ddlZddlZG dd„ dejƒZdedƒedƒedƒed	ƒed
ƒedƒedƒdœfdedƒed	ƒed
ƒedƒedƒdœfded	ƒedƒedƒed
ƒedƒedƒdœfdedƒed	ƒed
ƒedƒedƒdœfdœZi Zdd„ Ze 	e¡ dS )z¸Extend the Python codecs module with a few encodings that are used in OpenType (name table)
but missing from Python.  See https://github.com/fonttools/fonttools/issues/236 for details.é    Nc                   @   s8   e Zd Zdd„ Zdd„ Zddd„Zddd	„Zd
d„ ZdS )ÚExtendCodecc                 C   sh   || _ || _|| _dd„ | ¡ D ƒ| _tdd„ | ¡ D ƒƒ| _tj	| j | j
| jd�| _t || j¡ d S )Nc                 S   s   i | ]\}}||“qS © r   )Ú.0ÚkÚvr   r   úS/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/fontTools/encodings/codecs.pyÚ
<dictcomp>   s      z(ExtendCodec.__init__.<locals>.<dictcomp>c                 s   s   | ]}t |ƒV  qd S ©N)Úlen)r   r   r   r   r   Ú	<genexpr>   s     z'ExtendCodec.__init__.<locals>.<genexpr>)ÚnameÚencodeÚdecode)r   Úbase_encodingÚmappingÚitemsÚreverseÚmaxÚvaluesÚmax_lenÚcodecsÚ	CodecInfor   r   ÚinfoÚregister_errorÚerror)Úselfr   r   r   r   r   r   Ú__init__	   s      ÿzExtendCodec.__init__c              
   C   sª   t  |¡}t|ƒ}|ƒ }|r¢z"||| j| jd�}	||	7 }W q¢W q |k
rž }
 zB|||d |
j… | j| jƒ7 }||
ƒ\}}||7 }||d … }W 5 d }
~
X Y qX q||fS )N)Úerrors)r   Úlookup_errorr
   r   r   Ústart)r   ZmapperÚoutput_typeÚexc_typeÚinputr   Zbase_error_handlerÚlengthÚoutÚpartÚeÚreplacementÚposr   r   r   Ú_map   s    
 zExtendCodec._mapÚstrictc                 C   s   |   tjtt||¡S r	   )r)   r   r   ÚbytesÚUnicodeEncodeError©r   r"   r   r   r   r   r   &   s    zExtendCodec.encodec                 C   s   |   tjtt||¡S r	   )r)   r   r   ÚstrÚUnicodeDecodeErrorr-   r   r   r   r   )   s    zExtendCodec.decodec                 C   s¼   t |tƒrTt|jd |jd ƒD ]0}|j|j|… }|| jkr | j| |f  S q nXt |tƒr¬t|jd |j| j d ƒD ]0}|j|j|… }|| j	krz| j	| |f  S qz| j
|_|‚d S )Né   )Ú
isinstancer/   Úranger   ÚendÚobjectr   r,   r   r   r   Úencoding)r   r&   r3   Úsr   r   r   r   ,   s    


 
zExtendCodec.errorN)r*   )r*   )Ú__name__Ú
__module__Ú__qualname__r   r)   r   r   r   r   r   r   r   r      s
   

r   Ú	shift_jisé|   é~   é\   é    é©   i"!  i&   )ó   üó   ~ó   €ó    ó   ýó   þó   ÿÚbig5)rB   rC   rD   rE   rF   Úeuc_kri©   i   )rB   ó   �ó   ‚ó   ƒrE   rF   Úgb2312éü   )Zx_mac_japanese_ttxZx_mac_trad_chinese_ttxZx_mac_korean_ttxZx_mac_simp_chinese_ttxc              	   C   sž   t  | ¡} | tkrš| tkr�t|  \}}| dd … dks:t‚| d d… |g}|D ]@}zt |¡ W n tk
rx   Y qNY nX t| ||ƒt| <  q�qNt|  j	S d S )NéüÿÿÿZ_ttx)
Ú	encodingsÚnormalize_encodingÚ_extended_encodingsÚ_cacheÚAssertionErrorr   ÚlookupÚLookupErrorr   r   )r   r   r   Zbase_encodingsr   r   r   Úsearch_functionl   s    
	

rV   )
Ú__doc__r   rO   ÚCodecr   ÚchrrQ   rR   rV   Úregisterr   r   r   r   Ú<module>   sT   5ùþûþúþûþÞ.