U
    -yagA=  ã                   @   sv   d dl mZ dZdZd dlmZ d dlmZ dd„ ZG dd	„ d	eƒZ	d
d„ Z
dd„ Zdd„ Zdd„ Zedkrreƒ  dS )é    )Úprint_functionz3.3.0)ÚUSPS_4State)ÚBarcode)ÚasNativec                 C   s>   t | ƒ}|dd… |dd…  ¡  }| d¡r:|dd… }|S )znormalized hexNé   Úléÿÿÿÿ)ÚhexÚlowerÚendswith)ÚiÚr© r   úU/var/www/html/myvenv/lib/python3.8/site-packages/reportlab/graphics/barcode/usps4s.pyÚnhex
   s
    
 r   c                   @   sZ  e Zd ZdZdZdZdZdZeddddd�Z	edd	dd	d
�Z
eddddd�Zd]dd„Zdd„ Zdd„ ZeeƒZdd„ Zedd„ eƒZdd„ Zedd„ eƒZdd „ Zed!d„ eƒZd"d#„ Zed$d„ eƒZd%d&„ Zed'd„ eƒZd(d)„ Zed*d„ eƒZd+d,„ ZeeƒZd-d.„ ZeeƒZd/d0„ ZeeƒZd1d2„ ZeeƒZd3d4„ ZeeƒZd5d6„ ZeeƒZd7Zd8Zed9d„ ƒZed:d„ ƒZ ed;d<„ ƒZ!e!j"d=d<„ ƒZ!ed>d?„ ƒZ#e#j"d@d?„ ƒZ#edAdB„ ƒZ$e$j"dCdB„ ƒZ$edDd„ ƒZ%edEd„ ƒZ&edFdG„ ƒZ'edHdI„ ƒZ(e'j"dJdG„ ƒZ'e(j"dKdI„ ƒZ(dLdM„ Z)dNdO„ Z*d^dPdQ„Z+dRdS„ Z,dTdU„ Z-ee-dVd„ ƒZ-dWdX„ Z.d_dZd[„Z/d\S )`r   zC USPS 4-State OneView (TM) barcode. All info from USPS-B-3200A
    é   é   r   )g      °?g…ëQ¸µ?)g+‡ÙÎ÷“?gÉv¾Ÿ/�?)ÚFÚTÚAÚD)g      °¿g…ëQ¸µ¿)g+‡ÙÎ÷“¿gÉv¾Ÿ/�¿)r   r   r   r   )g¸…ëQ¸Ž?gš™™™™™™?)g”ö_˜L¥?gš™™™™™©?)ç      À?r   )çyé&1¬œ?r   )ÚwidthÚpitchÚhczÚvczÚ01234567094987654321Ú c                 K   s˜   |   ¡  t|tƒrt|ƒnt|ƒ}|s`t|ƒdkrN|d d… |dd …  }}q|tdt|ƒ ƒ‚nt|ƒdkr|tdt|ƒ ƒ‚|| _|| _| j	f |Ž d S )N)é   é   é   é   r   z;value+routing length must be 20, 25, 29 or 31 digits not %d)é   é	   r   z/routing length must be 5, 9 or 11 digits not %d)
Ú_initÚ
isinstanceÚintÚstrr   ÚlenÚ
ValueErrorÚ	_trackingÚ_routingZ_setKeywords)ÚselfÚvalueÚroutingZkwdr   r   r   Ú__init__?   s    zUSPS_4State.__init__c                 C   s   d | _ d | _d | _d | _d S ©N)Ú_bvalueÚ
_codewordsÚ_charactersÚ	_barcodes©r-   r   r   r   r%   N   s    zUSPS_4State._initc                 C   s(   ||  }d|d d|  ||d    S )NéH   r   r   r   )Úkindr   ÚsÚVr   r   r   ÚscaleT   s    zUSPS_4State.scalec                 C   s   |   ¡  || _d S r1   )r%   r+   )r-   Útrackingr   r   r   r<   Y   s    zUSPS_4State.trackingc                 C   s   | j S r1   )r+   r6   r   r   r   Ú<lambda>\   ó    zUSPS_4State.<lambda>c                 C   s   |   ¡  || _d S r1   )r%   r,   )r-   r/   r   r   r   r/   ^   s    zUSPS_4State.routingc                 C   s   | j S r1   )r,   r6   r   r   r   r=   a   r>   c                 C   s   d | _ ttd|ƒdƒ| _d S )Nr   r   )Ú_sizedÚminÚmaxÚ
_widthSize©r-   r.   r   r   r   Ú	widthSizec   s    zUSPS_4State.widthSizec                 C   s   | j S r1   )rB   r6   r   r   r   r=   f   r>   c                 C   s   d | _ || _d S r1   )r?   Ú_heightSizerC   r   r   r   Ú
heightSizeh   s    zUSPS_4State.heightSizec                 C   s   | j S r1   )rE   r6   r   r   r   r=   k   r>   c                 C   s   d | _ || _d S r1   )r?   Ú	_fontSizerC   r   r   r   ÚfontSizem   s    zUSPS_4State.fontSizec                 C   s   | j S r1   )rG   r6   r   r   r   r=   p   r>   c                 C   s   d | _ || _d S r1   )r?   Ú_humanReadablerC   r   r   r   ÚhumanReadabler   s    zUSPS_4State.humanReadablec                 C   s   | j S r1   )rI   r6   r   r   r   r=   u   r>   c           
   	   C   s~  | j }|�sz| j}t|ƒ}zX|dkr*d}nF|dkr@t|ƒd }n0|dkrVt|ƒd }n|dkrlt|ƒd }nt‚W n   td| ƒ‚Y nX | j}|dd	… }z4|d
9 }|t|d ƒ7 }|d9 }|t|d ƒ7 }W n   td| ƒ‚Y nX d	}dD ]~\}}|}	||7 }||	|… }z>t|ƒ|k�r(t‚t|ƒD ]}	|d
9 }|t||	 ƒ7 }�q0W qô   td|||f ƒ‚Y qôX qô|| _ |S )aè  convert the 4 state string values to binary
        >>> print(nhex(USPS_4State('01234567094987654321','').binary))
        0x1122103b5c2004b1
        >>> print(nhex(USPS_4State('01234567094987654321','01234').binary))
        0xd138a87bab5cf3804b1
        >>> print(nhex(USPS_4State('01234567094987654321','012345678').binary))
        0x202bdc097711204d21804b1
        >>> print(nhex(USPS_4State('01234567094987654321','01234567891').binary))
        0x16907b2a24abc16a2e5c004b1
        r   r#   r   r$   i¡† r   i¡Pœ;z@Problem converting %s, routing code must be 0, 5, 9 or 11 digitsr   é
   z:Problem converting %s, barcode identifier must be 2 digits))zspecial servicesé   )zcustomer identifieré   )zsequence numberr$   z+Problem converting %s, %s must be %d digits)r2   r/   r)   r'   r*   r<   Úrange)
r-   r.   r/   Únr<   Zsvaluer   ÚnameÚndÚjr   r   r   Úbinaryw   sP     zUSPS_4State.binaryc                 C   s  | j �s| j}t|dƒ\}}t|dƒ\}}t|dƒ\}}t|dƒ\}}t|dƒ\}}t|dƒ\}}t|dƒ\}}	t|dƒ\}}
t|dƒ\}}d|  kr dksºn tdtt|ƒƒ|f ƒ‚t|ƒ| _| jd@ rÖ|d7 }|d9 }tt	t|||
|	||||||f
ƒƒ| _ | j S )	z¶convert binary value into codewords
        >>> print(USPS_4State('01234567094987654321','01234567891').codewords)
        (673, 787, 607, 1022, 861, 19, 816, 1294, 35, 602)
        i|  iU  r   i’  z.improper value %s passed to _2codewords A-->%sé   i“  r   )
r3   rS   ÚdivmodÚAssertionErrorr	   r'   Ú_crc11Ú_fcsÚtupleÚmap)r-   r.   r   ÚJÚIÚHÚGr   ÚEr   ÚCÚBr   r   r   Ú	codewords®   s$    .

 $zUSPS_4State.codewordsc                 C   s   t ddƒ| j_| jjS )Nr#   é  )Ú_initNof13TableÚ	__class__Útable1r6   r   r   r   rf   Ç   s    zUSPS_4State.table1c                 C   s   t ddƒ| j_| jjS )Nr   éN   )rd   re   Útable2r6   r   r   r   rh   Ì   s    zUSPS_4State.table2c           
      C   sŠ   | j s„| j}| j}g }|j}| j}| j}tdƒD ]H}|| }|dkrN|| }	n||d  }	||? d@ rp|	 d@ }	||	ƒ q0t|ƒ| _ | j S )zÐ convert own codewords to characters
        >>> print(' '.join(hex(c)[2:] for c in USPS_4State('01234567094987654321','01234567891').characters))
        dcb 85c 8e4 b06 6dd 1740 17c6 1200 123f 1b2b
        rK   i  rc   r   iÿ  )r4   rb   rX   Úappendrf   rh   rN   rY   )
r-   rb   Úfcsr`   ZaCrf   rh   r   ZcwÚcr   r   r   Ú
charactersÑ   s"    



zUSPS_4State.charactersc           	      C   sn   | j sh| j}g }|j}| j}| jD ]8\}}}}|||| |? d@ d|| |? d@    ƒ q"d |¡| _ | j S )z×Get 4 state bar codes for current routing and tracking
        >>> print(USPS_4State('01234567094987654321','01234567891').barcodes)
        AADTFFDFTDADTAADAATFDTDDAAADDTDTTDAFADADDDTFFFDDTTTADFAAADFTDAADA
        r   r   r   )r5   rl   ri   Ú
_bits2barsÚtable4Újoin)	r-   r`   ra   ZaBZ	bits2barsZdcÚdbÚacÚabr   r   r   Úbarcodesê   s    .zUSPS_4State.barcodes)A)é   r   é   rL   )r   rK   r   r   )r$   é   r   é   )r#   r#   rM   r   )rw   r$   rL   r   )r   r   r#   rv   )r   r#   r   rw   )ru   ru   r$   r   )rM   rL   rw   rK   )rL   r$   rt   rM   )r#   r   r   ru   )rw   r#   r   rv   )r$   rK   r   r   )rt   r   rM   rt   )rL   rM   ru   r$   )r   rL   rw   rM   )rM   ru   r   rt   )r   r   r$   r$   )rt   rK   r#   r   )ru   r   rL   rw   )rM   r   r   ru   )rw   r   r   r   )r$   rw   rL   rv   )r   rM   rt   rt   )r#   r   ru   rK   )r   rv   rM   r$   )rt   rL   rw   r   )r#   rw   r$   rt   )ru   rM   r   rK   )rL   ru   r   r#   )rw   ru   r#   rt   )rt   r   r   r$   )rM   r   r$   rM   )r   rM   ru   rw   )r   r   rL   r   )r#   r$   rw   rv   )ru   r   rM   r   )r$   r#   rt   ru   )rL   rL   r   r   )r   rt   r   r   )r   rL   ru   r   )rM   rK   rL   r#   )rw   rt   r$   ru   )r   r   r#   rM   )r   rw   rt   rv   )ru   r   rw   r   )r#   rK   rL   r   )r$   rL   r   r$   )rM   r#   r   ru   )rt   rw   r   rt   )r#   r   ru   r#   )r   rL   r   rK   )rM   rv   r$   r   )rL   r   r   rM   )rw   rw   rt   r$   )r#   ru   r   r   )r   r#   r   r   )r$   r   ru   rv   )rw   rL   rM   rM   )rt   r   rL   rt   )ru   rt   rt   r#   )r   rv   r   r   )r   r$   r$   r   )rM   rw   r#   rL   )rL   rK   rw   r   ©r   r   r   r   c                 C   s   |   d| j| j¡S )Nr   )r;   Ú
dimensionsÚ
widthScaler6   r   r   r   r=     r>   c                 C   s   |   d| j| j¡S )Nr   )r;   ry   ÚheightScaler6   r   r   r   r=     r>   c                 C   s&   d| j kr| j d S |  d| j| j¡S )NÚ	_barWidthr   ©Ú__dict__r;   ry   rz   r6   r   r   r   ÚbarWidth  s    

zUSPS_4State.barWidthc                 C   s0   | j d \}}dtt|d |ƒ|ƒ | jd< d S )Nr   r7   ç      R@r|   ©ry   r@   rA   r~   ©r-   r.   rO   Úxr   r   r   r     s    c                 C   s&   d| j kr| j d S |  d| j| j¡S )NÚ_pitchr   r}   r6   r   r   r   r     s    

zUSPS_4State.pitchc                 C   s0   | j d \}}dtt|d |ƒ|ƒ | jd< d S )Nr   r7   r€   r„   r�   r‚   r   r   r   r   !  s    c                 C   s8   d| j kr| j d S |  d| j| j¡|  d| j| j¡ S )NÚ
_barHeightr   )r~   r;   Útopsr{   Úbottomsr6   r   r   r   Ú	barHeight&  s    

zUSPS_4State.barHeightc                 C   sp   | j d d | jd d  }| j d d | jd d  }dtt|d |ƒ|ƒ  }| jd< || ||  | _d S )Nr   r   r   r7   r€   r…   )r†   r‡   r@   rA   r~   rF   r‚   r   r   r   rˆ   ,  s    "c                 C   s   t dtd| jƒƒS ©Nr   r   )r@   rA   rD   r6   r   r   r   r=   3  r>   c                 C   s   t dtd| jƒƒS r‰   )r@   rA   rF   r6   r   r   r   r=   4  r>   c                 C   s   |   ¡  | jS r1   )ÚcomputeSizeÚ_widthr6   r   r   r   r   6  s    zUSPS_4State.widthc                 C   s   |   ¡  | jS r1   )rŠ   Ú_heightr6   r   r   r   Úheight;  s    zUSPS_4State.heightc                 C   s   d S r1   r   ©r-   Úvr   r   r   r   A  s    c                 C   s   d S r1   r   rŽ   r   r   r   r�   D  s    c                 C   s‚   t | dd ƒs~| j}| j}| j}| j}| j}| j}| j}d| | d|  | _d| | | _	| j
rx|  j	| jd | 7  _	d| _d S )Nr?   r   é@   g333333ó?T)Úgetattrrz   r{   rˆ   r   r   ÚhorizontalClearZoneÚverticalClearZoner‹   rŒ   rJ   rH   r?   )r-   ÚwsÚhsrˆ   r   r   r   r   r   r   r   rŠ   H  s    zUSPS_4State.computeSizec                 C   s   |   ¡  | j| jfS r1   )rŠ   r   r�   )r-   ZaWZaHr   r   r   ÚwrapW  s    zUSPS_4State.wrapc                 C   sL   i }| j }dD ]8}|  || j|¡| }||  || j|¡| | f||< q|S )Nrx   )r{   r;   r‡   r†   )r-   Úy0ÚvInfor•   ÚbÚyr   r   r   Ú_getBarVInfo[  s    "zUSPS_4State._getBarVInfoc                 C   sx   |   ¡  | j}| j}| j}|}|| jd  }| j}|  |¡}| jD ](}|| \}	}
|  ||	||
¡ ||7 }qB|  	¡  d S )Ng      à?)
rŠ   r’   r“   r   rˆ   r   r›   rs   ÚrectÚdrawHumanReadable)r-   r   r   Úbwrƒ   r—   Zdwr˜   r™   ZybZhbr   r   r   Údrawc  s    


zUSPS_4State.drawc                 C   sP   | j }| j}|r|fpd}d |dd… |dd… |dd… |dd … f| ¡S )Nr   ú r   r   r#   r   )r<   r/   ro   )r-   r<   r/   r   r   r   r.   r  s    zUSPS_4State.valuec                 C   s   | j  d|¡S )Nr<   )r~   Ú__setitem__rC   r   r   r   r=   w  r>   c                 C   sL   | j rH| j}| j}| j}| j}| jd|  d|  }|  ||| j||¡ d S )Nr   gš™™™™™É?)rJ   r’   r“   ÚfontNamerH   rˆ   Úannotater.   )r-   r   r   r¢   rH   rš   r   r   r   r�   y  s    zUSPS_4State.drawHumanReadableÚmiddlec              	   C   s   t j| |||||dd� d S )NÚstart)Úanchor)r   r£   )r-   rƒ   rš   Útextr¢   rH   r¦   r   r   r   r£   ‚  s    zUSPS_4State.annotateN)r   r   )r   )r¤   )0Ú__name__Ú
__module__Ú__qualname__Ú__doc__rB   rE   rG   rI   Údictr†   r‡   ry   r0   r%   r;   Ústaticmethodr<   Úpropertyr/   rD   rF   rH   rJ   rS   rb   rf   rh   rl   rs   rn   rm   r’   r“   r   Úsetterr   rˆ   rz   r{   r   r�   rŠ   r–   r›   rŸ   r.   r�   r£   r   r   r   r   r      sª   üüü
5










	r   c                 C   sø   t t| ƒƒdd… }ddt|ƒ  | }d}d}t|dd… dƒd> }tdd	ƒD ]6}||A d
@ rn|d> |A }n|d> }|dM }|dK }qPtdddƒD ]^}t|||d … dƒd> }td	ƒD ]6}||A d
@ rØ|d> |A }n|d> }|dM }|dK }qºq”|S )aV  
    >>> usps = [USPS_4State('01234567094987654321',x).binary for x in ('','01234','012345678','01234567891')]
    >>> print(' '.join(nhex(x) for x in usps))
    0x1122103b5c2004b1 0xd138a87bab5cf3804b1 0x202bdc097711204d21804b1 0x16907b2a24abc16a2e5c004b1
    >>> print(' '.join(nhex(_crc11(x)) for x in usps))
    0x51 0x65 0x606 0x751
    r   NÚ0é   i5  iÿ  é   r#   rw   rT   r   rL   )r   r'   r)   rN   )r.   ZhexbytesÚgprj   Údatar™   rƒ   r   r   r   rW   …  s(    
rW   c                 C   s2   d}t dƒD ] }|dK }|| d@ O }| dL } q|S )zureverse unsigned 13 bit number
    >>> print(_ru13(7936), _ru13(31), _ru13(47), _ru13(7808))
    31 7936 7808 47
    r   é   r   )rN   )r   r   rƒ   r   r   r   Ú_ru13¥  s    
r¶   c           	      C   sÆ   |dg }d}|d }t dƒD ]€}d}t dƒD ]}||d|> @ dk7 }q.|| krRqt|ƒ}||k rdq||kr~|||< |d8 }q|||< |d7 }|||< |d7 }q||d ksÂtd|d || f ƒ‚|S )a,  create and return table of 13 bit values with N bits on
    >>> T = _initNof13Table(5,1287)
    >>> print(' '.join('T[%d]=%d' % (i, T[i]) for i in (0,1,2,3,4,1271,1272,1284,1285,1286)))
    T[0]=31 T[1]=7936 T[2]=47 T[3]=7808 T[4]=55 T[1271]=6275 T[1272]=6211 T[1284]=856 T[1285]=744 T[1286]=496
    Nr   r   i    rµ   z!u+1(%d)!=l(%d) for %d of 13 table)rN   r¶   rV   )	ÚNZlenTr   r   Úurk   Úbcr™   r   r   r   r   rd   ±  s*    
  

"rd   c                  C   s   dd l } |  ¡ S )Nr   )ÚdoctestÚtestmod)rº   r   r   r   Ú_testÌ  s    r¼   Ú__main__N)Ú
__future__r   Ú__version__Ú__all__Z!reportlab.graphics.barcode.commonr   Zreportlab.lib.utilsr   r   r   rW   r¶   rd   r¼   r¨   r   r   r   r   Ú<module>   s     v 