o
    à’OjA=  ã                   @   sz   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r;eƒ  dS 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   úg/var/www/html/pharmsmart-cdr-gen/venv/lib/python3.10/site-packages/reportlab/graphics/barcode/usps4s.pyÚnhex
   s   r   c                   @   s\  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ddd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/d0„ Zed1d"„ eƒZd2d3„ ZeeƒZd4d5„ ZeeƒZd6d7„ ZeeƒZd8d9„ ZeeƒZd:d;„ ZeeƒZd<d=„ ZeeƒZd>Zd?Zed@d"„ ƒZedAd"„ ƒZ edBdC„ ƒZ!e!j"dDdC„ ƒZ!edEdF„ ƒZ#e#j"dGdF„ ƒZ#edHdI„ ƒZ$e$j"dJdI„ ƒZ$edKd"„ ƒZ%edLd"„ ƒZ&edMdN„ ƒZ'edOdP„ ƒZ(e'j"dQdN„ ƒZ'e(j"dRdP„ ƒZ(dSdT„ Z)dUdV„ Z*dedWdX„Z+dYdZ„ Z,d[d\„ Z-ee-d]d"„ ƒZ-d^d_„ Z.dfdadb„Z/dcS )gr   zC USPS 4-State OneView (TM) barcode. All info from USPS-B-3200A
    é   é   r   T)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)gôýÔxé&±?gq=
×£p½?)g/Ý$�•?ç{®Gáz¤?)gôýÔxé&±¿gq=
×£p½¿)g/Ý$�•¿g{®Gáz¤¿)r   r   r   r   )r   r   Ú01234567094987654321Ú c                 K   sš   |   ¡  t|tƒrt|ƒnt|ƒ}|s/t|ƒdv r'|d d… |dd … }}ntdt|ƒ ƒ‚t|ƒdvr=tdt|ƒ ƒ‚|| _|| _| j	d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 %dr   )
Ú_initÚ
isinstanceÚintÚstrr   ÚlenÚ
ValueErrorÚ	_trackingÚ_routingÚ_setKeywords)ÚselfÚvalueÚroutingÚ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   ó   |   ¡  || _d S r4   )r&   r,   )r/   Útrackingr   r   r   r@   Y   ó   
zUSPS_4State.trackingc                 C   ó   | j S r4   )r,   r9   r   r   r   Ú<lambda>\   ó    zUSPS_4State.<lambda>c                 C   r?   r4   )r&   r-   )r/   r1   r   r   r   r1   ^   rA   zUSPS_4State.routingc                 C   rB   r4   )r-   r9   r   r   r   rC   a   rD   c                 C   s   d | _ ttd|ƒdƒ| _d S )Nr   r   )Ú_sizedÚminÚmaxÚ
_widthSize©r/   r0   r   r   r   Ú	widthSizec   s   zUSPS_4State.widthSizec                 C   rB   r4   )rH   r9   r   r   r   rC   f   rD   c                 C   ó   d | _ || _d S r4   )rE   Ú_heightSizerI   r   r   r   Ú
heightSizeh   ó   
zUSPS_4State.heightSizec                 C   rB   r4   )rL   r9   r   r   r   rC   k   rD   c                 C   rK   r4   )rE   Ú	_fontSizerI   r   r   r   ÚfontSizem   rN   zUSPS_4State.fontSizec                 C   rB   r4   )rO   r9   r   r   r   rC   p   rD   c                 C   rK   r4   )rE   Ú_humanReadablerI   r   r   r   ÚhumanReadabler   rN   zUSPS_4State.humanReadablec                 C   rB   r4   )rQ   r9   r   r   r   rC   u   rD   c           
   	   C   sd  | j }|s°| j}t|ƒ}z,|dkrd}n#|dkrt|ƒd }n|dkr*t|ƒd }n|dkr5t|ƒd }nt‚W n	   td| ƒ‚| j}|dd	… }z|d
9 }|t|d ƒ7 }|d9 }|t|d ƒ7 }W n	   td| ƒ‚d	}dD ]9\}}|}	||7 }||	|… }zt|ƒ|krŒt‚t|ƒD ]}	|d
9 }|t||	 ƒ7 }q�W qs   td|||f ƒ‚|| _ |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)r5   r1   r*   r(   r+   r@   Úrange)
r/   r0   r1   Únr@   Úsvaluer   ÚnameÚndÚjr   r   r   Úbinaryw   sR   €þ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rOdks\n J dtt|ƒƒ|f ƒ‚t|ƒ| _| jd@ rj|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   )	r6   r\   Údivmodr	   r(   Ú_crc11Ú_fcsÚtupleÚmap)r/   r0   r   ÚJÚIÚHÚGr   ÚEr   ÚCÚBr   r   r   Ú	codewords®   s"   .
$zUSPS_4State.codewordsc                 C   ó   t ddƒ| j_| jjS )Nr$   é  )Ú_initNof13TableÚ	__class__Útable1r9   r   r   r   ro   Ç   ó   zUSPS_4State.table1c                 C   rk   )Nr   éN   )rm   rn   Útable2r9   r   r   r   rr   Ì   rp   zUSPS_4State.table2c           
      C   sŠ   | j sB| j}| j}g }|j}| j}| j}tdƒD ]$}|| }|dkr'|| }	n||d  }	||? d@ r8|	 d@ }	||	ƒ qt|ƒ| _ | 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
        rS   i  rl   r   iÿ  )r7   rj   r`   Úappendro   rr   rV   ra   )
r/   rj   Úfcsrh   ÚaCro   rr   r   ÚcwÚcr   r   r   Ú
charactersÑ   s"   



zUSPS_4State.charactersc           	      C   sn   | j s4| j}g }|j}| j}| jD ]\}}}}|||| |? 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   )r8   rx   rs   Ú
_bits2barsÚtable4Újoin)	r/   rh   ri   ÚaBÚ	bits2barsÚdcÚdbÚacÚabr   r   r   Úbarcodesê   s   .zUSPS_4State.barcodes)A)é   r   é   rT   )r   rS   r   r   )r%   é   r   é   )r$   r$   rU   r   )r†   r%   rT   r   )r   r   r$   r…   )r   r$   r   r†   )r„   r„   r%   r   )rU   rT   r†   rS   )rT   r%   rƒ   rU   )r$   r   r   r„   )r†   r$   r   r…   )r%   rS   r   r   )rƒ   r   rU   rƒ   )rT   rU   r„   r%   )r   rT   r†   rU   )rU   r„   r   rƒ   )r   r   r%   r%   )rƒ   rS   r$   r   )r„   r   rT   r†   )rU   r   r   r„   )r†   r   r   r   )r%   r†   rT   r…   )r   rU   rƒ   rƒ   )r$   r   r„   rS   )r   r…   rU   r%   )rƒ   rT   r†   r   )r$   r†   r%   rƒ   )r„   rU   r   rS   )rT   r„   r   r$   )r†   r„   r$   rƒ   )rƒ   r   r   r%   )rU   r   r%   rU   )r   rU   r„   r†   )r   r   rT   r   )r$   r%   r†   r…   )r„   r   rU   r   )r%   r$   rƒ   r„   )rT   rT   r   r   )r   rƒ   r   r   )r   rT   r„   r   )rU   rS   rT   r$   )r†   rƒ   r%   r„   )r   r   r$   rU   )r   r†   rƒ   r…   )r„   r   r†   r   )r$   rS   rT   r   )r%   rT   r   r%   )rU   r$   r   r„   )rƒ   r†   r   rƒ   )r$   r   r„   r$   )r   rT   r   rS   )rU   r…   r%   r   )rT   r   r   rU   )r†   r†   rƒ   r%   )r$   r„   r   r   )r   r$   r   r   )r%   r   r„   r…   )r†   rT   rU   rU   )rƒ   r   rT   rƒ   )r„   rƒ   rƒ   r$   )r   r…   r   r   )r   r%   r%   r   )rU   r†   r$   rT   )rT   rS   r†   r   ©r   r   r   r   c                 C   ó   |   d| j| j¡S )Nr   )r>   Ú
dimensionsÚ
widthScaler9   r   r   r   rC     ó    c                 C   rˆ   )Nr   )r>   r‰   ÚheightScaler9   r   r   r   rC     r‹   c                 C   ó&   d| j v r
| j d S |  d| j| j¡S )NÚ	_barWidthr   ©Ú__dict__r>   r‰   rŠ   r9   r   r   r   ÚbarWidth  ó   

zUSPS_4State.barWidthc                 C   ó0   | j d \}}dtt|d |ƒ|ƒ | jd< d S )Nr   r:   ç      R@rŽ   ©r‰   rF   rG   r�   ©r/   r0   rW   Úxr   r   r   r‘     ó   "c                 C   r�   )NÚ_pitchr   r�   r9   r   r   r   r     r’   zUSPS_4State.pitchc                 C   r“   )Nr   r:   r”   r™   r•   r–   r   r   r   r   !  r˜   c                 C   s8   d| j v r
| j d S |  d| j| j¡|  d| j| j¡ S )NÚ
_barHeightr   )r�   r>   ÚtopsrŒ   Úbottomsr9   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   r:   r”   rš   )r›   rœ   rF   rG   r�   rM   r–   r   r   r   r�   ,  s   "c                 C   ó   t dtd| jƒƒS ©Nr   r   )rF   rG   rJ   r9   r   r   r   rC   3  r‹   c                 C   rž   rŸ   )rF   rG   rM   r9   r   r   r   rC   4  r‹   c                 C   ó   |   ¡  | jS r4   )ÚcomputeSizeÚ_widthr9   r   r   r   r   6  ó   zUSPS_4State.widthc                 C   r    r4   )r¡   Ú_heightr9   r   r   r   Úheight;  r£   zUSPS_4State.heightc                 C   ó   d S r4   r   ©r/   Úvr   r   r   r   A  ó   c                 C   r¦   r4   r   r§   r   r   r   r¥   D  r©   c                 C   s†   t | dd ƒsA| j}| j}| j}| j}| j}| j}| j}d| | d|  | _d| | | _	| j
r<|  j	| jd | 7  _	d| _d S d S )NrE   r   é@   g333333ó?T)ÚgetattrrŠ   rŒ   r�   r‘   r   ÚhorizontalClearZoneÚverticalClearZoner¢   r¤   rR   rP   rE   )r/   ÚwsÚhsr�   r‘   r   r   r   r   r   r   r¡   H  s   
ôzUSPS_4State.computeSizec                 C   s   |   ¡  | j| jfS r4   )r¡   r   r¥   )r/   ÚaWÚaHr   r   r   ÚwrapW  s   zUSPS_4State.wrapc                 C   sL   i }| j }dD ]}|  || j|¡| }||  || j|¡| | f||< q|S )Nr‡   )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 }q!|  	¡  d S )Ng      à?)
r¡   r¬   r­   r‘   r�   r   r·   r‚   ÚrectÚdrawHumanReadable)r/   r   r   Úbwr—   r³   Údwr´   rµ   ÚybÚ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@   r1   r{   )r/   r@   r1   r   r   r   r0   r  s   6zUSPS_4State.valuec                 C   s   | j  d|¡S )Nr@   )r�   Ú__setitem__rI   r   r   r   rC   w  s    c                 C   sP   | j r&| j}| j}| j}| j}| jd|  d|  }|  ||| j||¡ d S d S )Nr   gš™™™™™É?)rR   r¬   r­   ÚfontNamerP   r�   Úannotater0   )r/   r   r   rÁ   rP   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Á   rP   rÅ   r   r   r   rÂ   ‚  s   zUSPS_4State.annotateN)r   r   )r   )rÃ   )0Ú__name__Ú
__module__Ú__qualname__Ú__doc__rH   rL   rO   rQ   Údictr›   rœ   r‰   r3   r&   r>   Ústaticmethodr@   Úpropertyr1   rJ   rM   rP   rR   r\   rj   ro   rr   rx   r‚   rz   ry   r¬   r­   r‘   Úsetterr   r�   rŠ   rŒ   r   r¥   r¡   r²   r·   r¾   r0   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 ]}||A d
@ r7|d> |A }n|d> }|dM }|dK }q(tdddƒD ]/}t|||d … dƒd> }td	ƒD ]}||A d
@ rl|d> |A }n|d> }|dM }|dK }q]qJ|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$   r†   r]   r   rT   )r   r(   r*   rV   )r0   ÚhexbytesÚgprt   Údatarµ   r—   r   r   r   r_   …  s*   

úr_   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   )rV   )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r)qt|ƒ}||k r2q||kr?|||< |d8 }q|||< |d7 }|||< |d7 }q||d ksaJ 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)rV   rÖ   )	ÚNÚlenTr   r   Úurw   Úbcrµ   r   r   r   r   rm   ±  s&   




"rm   c                  C   s   dd l } |  ¡ S )Nr   )ÚdoctestÚtestmod)rÛ   r   r   r   Ú_testÌ  s   rÝ   Ú__main__N)Ú
__future__r   Ú__version__Ú__all__Ú!reportlab.graphics.barcode.commonr   Úreportlab.lib.utilsr   r   r   r_   rÖ   rm   rÝ   rÇ   r   r   r   r   Ú<module>   s      v 
ÿ