a
    ¦¾deÂ<  ã                   @   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   úZ/var/www/sistema_ama/venv/lib/python3.9/site-packages/reportlab/graphics/barcode/usps4s.pyÚnhex
   s    r   c                   @   sF  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&dFdG„ Z'ee'ƒZ'dHdI„ Z(ee(ƒZ(dJdK„ Z)dLdM„ Z*d\dNdO„Z+dPdQ„ Z,dRdS„ Z-ee-dTd„ ƒZ-dUdV„ Z.d]dXdY„Z/dZS )^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v rN|d d… |dd …  }}q|tdt|ƒ ƒ‚nt|ƒdvr|tdt|ƒ ƒ‚|| _|| _| j	f i |¤Ž 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0 | j}|dd	… }z4|d
9 }|t|d ƒ7 }|d9 }|t|d ƒ7 }W n   td| ƒ‚Y n0 d	}dD ]~\}}|}	||7 }||	|… }z>t|ƒ|k�r(t‚t|ƒD ]}	|d
9 }|t||	 ƒ7 }�q0W qô   td|||f ƒ‚Y qô0 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   ÚnameZndÚjr   r   r   Úbinaryw   sN    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 J 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   rR   Údivmodr	   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   rd   Ç   s    zUSPS_4State.table1c                 C   s   t ddƒ| j_| jjS )Nr   éN   )rb   rc   Útable2r6   r   r   r   rf   Ì   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  ra   r   iÿ  )r4   r`   rV   Úappendrd   rf   rN   rW   )
r-   r`   Úfcsr^   ZaCrd   rf   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   rj   rg   Ú
_bits2barsÚtable4Újoin)	r-   r^   r_   ZaBZ	bits2barsÚ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   )rv   r$   rL   r   )r   r   r#   ru   )r   r#   r   rv   )rt   rt   r$   r   )rM   rL   rv   rK   )rL   r$   rs   rM   )r#   r   r   rt   )rv   r#   r   ru   )r$   rK   r   r   )rs   r   rM   rs   )rL   rM   rt   r$   )r   rL   rv   rM   )rM   rt   r   rs   )r   r   r$   r$   )rs   rK   r#   r   )rt   r   rL   rv   )rM   r   r   rt   )rv   r   r   r   )r$   rv   rL   ru   )r   rM   rs   rs   )r#   r   rt   rK   )r   ru   rM   r$   )rs   rL   rv   r   )r#   rv   r$   rs   )rt   rM   r   rK   )rL   rt   r   r#   )rv   rt   r#   rs   )rs   r   r   r$   )rM   r   r$   rM   )r   rM   rt   rv   )r   r   rL   r   )r#   r$   rv   ru   )rt   r   rM   r   )r$   r#   rs   rt   )rL   rL   r   r   )r   rs   r   r   )r   rL   rt   r   )rM   rK   rL   r#   )rv   rs   r$   rt   )r   r   r#   rM   )r   rv   rs   ru   )rt   r   rv   r   )r#   rK   rL   r   )r$   rL   r   r$   )rM   r#   r   rt   )rs   rv   r   rs   )r#   r   rt   r#   )r   rL   r   rK   )rM   ru   r$   r   )rL   r   r   rM   )rv   rv   rs   r$   )r#   rt   r   r   )r   r#   r   r   )r$   r   rt   ru   )rv   rL   rM   rM   )rs   r   rL   rs   )rt   rs   rs   r#   )r   ru   r   r   )r   r$   r$   r   )rM   rv   r#   rL   )rL   rK   rv   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;   rx   ÚheightScaler6   r   r   r   r=     r>   c                 C   s&   d| j v r| j d S |  d| j| j¡S )NÚ	_barWidthr   ©Ú__dict__r;   rx   ry   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{   ©rx   r@   rA   r}   ©r-   r.   rO   Úxr   r   r   r~     s    c                 C   s&   d| j v 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 v r| j d S |  d| j| j¡|  d| j| j¡ S )NÚ
_barHeightr   )r}   r;   Útopsrz   Ú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‚   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)Úgetattrry   rz   r‡   r~   r   ÚhorizontalClearZoneÚverticalClearZonerŠ   r‹   rJ   rH   r?   )r-   ÚwsÚhsr‡   r~   r   r   r   r   r   r   r‰   @  s    zUSPS_4State.computeSizec                 C   s   |   ¡  | j| jfS r1   )r‰   r   rŒ   )r-   ZaWZaHr   r   r   ÚwrapO  s    zUSPS_4State.wrapc                 C   sL   i }| j }dD ]8}|  || j|¡| }||  || j|¡| | f||< q|S )Nrw   )rz   r;   r†   r…   )r-   Úy0ÚvInfor’   ÚbÚyr   r   r   Ú_getBarVInfoS  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˜   rr   ZrectÚdrawHumanReadable)r-   r   r   Zbwr‚   r”   Zdwr•   r–   ZybZhbr   r   r   Údraw[  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/   rm   )r-   r<   r/   r   r   r   r.   j  s    zUSPS_4State.valuec                 C   s   | j  d|¡S )Nr<   )r}   Ú__setitem__rC   r   r   r   r=   o  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™   q  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ž   z  s    zUSPS_4State.annotateN)r   r   )r   )rŸ   )0Ú__name__Ú
__module__Ú__qualname__Ú__doc__rB   rE   rG   rI   Údictr…   r†   rx   r0   r%   r;   Ústaticmethodr<   Úpropertyr/   rD   rF   rH   rJ   rR   r`   rd   rf   rj   rr   rl   rk   r�   r�   r~   Úsetterr   r‡   ry   rz   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#   rv   rS   r   rL   )r   r'   r)   rN   )r.   ÚhexbytesZgprh   Údatar–   r‚   r   r   r   rU   }  s(    
rU   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ÂJ 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±   )	ÚNZlenTr   r   Úuri   Zbcr–   r   r   r   r   rb   ©  s&    




"rb   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   rU   r±   rb   r¶   r£   r   r   r   r   Ú<module>   s     n 