o
    vhA=                     @   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   _/var/www/html/hyperkenya/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+?gv/?)FTAD)g      gQ)g+gv/)r   r   r   r   )gQ?g?)g_L?g?)      ?r   )y&1?r   )widthpitchhczvcz)gx&?gq=
ףp?)g/$?{Gz?)gx&gq=
ףp)g/$g{Gz)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 )NH   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rtt|D ]}	|d
9 }|t||	 7 }qW 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   iP;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 )	zconvert 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 )zGet 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 
