
    ^]                     8   d Z ddlmZ ddlZddlZ	 e dZ	ddZ
ddZ G d dej                        Z G d	 d
ej                        Z G d dej                        Z G d deej                        Z G d deej                         Zd Zy# eef$ r eZY w xY w)aL  Python 'hex' Codec - 2-digit hex with spaces content transfer encoding.

Encode and decode may be a bit missleading at first sight...

The textual representation is a hex dump: e.g. "40 41"
The "encoded" data of this is the binary form, e.g. b"@A"

Therefore decoding is binary to text and thus converting binary data to hex dump.

    )absolute_importN0123456789ABCDEFc           	          t        j                  | j                         D cg c]  }t        |d       c}      t	        |       fS c c}w z'40 41 42' -> b'@ab'   )serialto_bytessplitintlen)dataerrorshs      </usr/lib/python3/dist-packages/serial/tools/hexlify_codec.py
hex_encoder   &   s4    OO>ASBZ>?TKK>s   Ac                     t        dj                  d t        j                  |       D                    t	        |       fS )b'@ab' -> '40 41 42' c              3   P   K   | ]  }d j                  t        |               ywz{:02X} Nformatord.0bs     r   	<genexpr>zhex_decode.<locals>.<genexpr>-   s     UI,,SV4U   $&)unicodejoinr   	iterbytesr   )r   r   s     r   
hex_decoder"   +   s3    BGGUf>N>Nt>TUUVX[\`Xabb    c                       e Zd ZddZddZy)Codecc           	          t        j                  |j                         D cg c]  }t        |d       c}      S c c}w r   )r   r	   r
   r   )selfr   r   r   s       r   encodezCodec.encode1   s+    DJJLAqAr
ABBAs   <c                 j    t        dj                  d t        j                  |      D                    S )r   r   c              3   P   K   | ]  }d j                  t        |               ywr   r   r   s     r   r   zCodec.decode.<locals>.<genexpr>7        XAy//A7Xr   r   r    r   r!   )r'   r   r   s      r   decodezCodec.decode5   s(    rwwXAQAQRVAWXXYYr#   Nstrict)__name__
__module____qualname__r(   r-    r#   r   r%   r%   0   s    CZr#   r%   c                   2    e Zd ZdZddZd Zd Zd Zd	dZy)
IncrementalEncoderzIncremental hex encoderc                      || _         d| _        y Nr   )r   state)r'   r   s     r   __init__zIncrementalEncoder.__init__=   s    
r#   c                     d| _         y r7   r8   r'   s    r   resetzIncrementalEncoder.resetA   s	    
r#   c                     | j                   S Nr;   r<   s    r   getstatezIncrementalEncoder.getstateD   s    zzr#   c                     || _         y r?   r;   )r'   r8   s     r   setstatezIncrementalEncoder.setstateG   s	    
r#   c                    | j                   }g }|j                         D ]  }|t        v r:t        j                  |      }|r|j	                  ||dz  z          d}<d|dz  z   }E|dk(  r|r| j
                  dk(  rt        d      d}i| j
                  dk(  syt        dj                  |             || _         t        j                  |      S )	z        Incremental encode, keep track of digits and emit a byte when a pair
        of hex digits is found. The space is optional unless the error
        handling is defined to be 'strict'.
           r          r/   zodd number of hex digitsznon-hex digit found: {!r})
r8   upper	HEXDIGITSindexappendr   UnicodeErrorr   r   r	   )r'   r   finalr8   encodedczs          r   r(   zIncrementalEncoder.encodeJ   s     

 	NAI~OOA&NN1#56E!Q!V,EcT[[H4&'ABB;;(*&'B'I'I!'LMM	N 
w''r#   Nr.   F)	r0   r1   r2   __doc__r9   r=   r@   rB   r(   r3   r#   r   r5   r5   :   s    !(r#   r5   c                       e Zd ZdZddZy)IncrementalDecoderzIncremental decoderc                 j    t        dj                  d t        j                  |      D                    S )Nr   c              3   P   K   | ]  }d j                  t        |               ywr   r   r   s     r   r   z,IncrementalDecoder.decode.<locals>.<genexpr>h   r+   r   r,   )r'   r   rM   s      r   r-   zIncrementalDecoder.decodeg   s(    rwwXAQAQRVAWXXYYr#   NrQ   )r0   r1   r2   rR   r-   r3   r#   r   rT   rT   e   s    Zr#   rT   c                       e Zd ZdZy)StreamWriterz-Combination of hexlify codec and StreamWriterNr0   r1   r2   rR   r3   r#   r   rX   rX   k       7r#   rX   c                       e Zd ZdZy)StreamReaderz-Combination of hexlify codec and StreamReaderNrY   r3   r#   r   r\   r\   o   rZ   r#   r\   c            	      j    t        j                  dt        t        t        t
        t        t              S )zencodings module APIhexlify)namer(   r-   incrementalencoderincrementaldecoderstreamwriterstreamreader)codecs	CodecInfor   r"   r5   rT   rX   r\   r3   r#   r   getregentryrf   s   s*    --!!	 	r#   r.   )rR   
__future__r   rd   r   r   	NameErrorAttributeErrorstrrI   r   r"   r%   r5   rT   rX   r\   rf   r3   r#   r   <module>rk      s   
 '  
 	
L
c
ZFLL Z((22 ((VZ22 Z85&-- 885&-- 8m 	>" Gs   B 	BB