
    Kwg<                     ~    d dl mZ dZdZd dlmZ d dlmZ d Z G d de      Z	d	 Z
d
 Zd Zd Zedk(  r e        yy)    )print_functionz3.3.0)USPS_4State)Barcode)asNativec                 z    t        |       }|dd |dd j                         z   }|j                  d      r|dd }|S )znormalized hexN   l)hexlowerendswith)irs     X/var/www/horilla/myenv/lib/python3.12/site-packages/reportlab/graphics/barcode/usps4s.pynhexr   
   sA    AA	"1aekkmAzz#AcrFH    c                      e Zd ZdZdZdZdZdZ	  edddd      Z	 edd	dd	
      Z
 edddd      Zd<dZd Zd Z ee      Zd Z ed e      Zd Z ed e      Zd Z ed e      Zd Z ed e      Zd Z ed e      Zd Z ed e      Zd Z ee      Zd  Z ee      Zd! Z ee      Zd" Z ee      Zd# Z ee      Zd$ Z ee      Zd%Zd&Z ed'       Z ed(       Z ed)        Z!e!jD                  d*        Z!ed+        Z#e#jD                  d,        Z#ed-        Z$e$jD                  d.        Z$ ed/       Z% ed0       Z&d1 Z' ee'      Z'd2 Z( ee(      Z(d3 Z)d4 Z*d=d5Z+d6 Z,d7 Z- ee-d8       Z-d9 Z.d>d:Z/y;)?r   zC USPS 4-State OneView (TM) barcode. All info from USPS-B-3200A
          r   )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vczc                 Z   | j                          t        |t              rt        |      n
t	        |      }|s/t        |      dv r|d d |dd  }}n;t        dt        |      z        t        |      dvrt        dt        |      z        || _        || _         | j                  di | y )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_routing_setKeywords)selfvalueroutingkwds       r   __init__zUSPS_4State.__init__?   s    

(s3E
%5z]*!&sU23Zw !^adejak!kll\)NQTU\Q]]^^ C r   c                 <    d | _         d | _        d | _        d | _        y N)_bvalue
_codewords_characters	_barcodesr1   s    r   r(   zUSPS_4State._initN   s    r   c                 :    ||    }d|d   d|z
  z  ||d   z  z   z  S )NH   r   r   r'   )kindr   sVs       r   scalezUSPS_4State.scaleT   s/    dG1Q41:a!f$%%r   c                 2    | j                          || _        y r7   )r(   r.   )r1   trackings     r   rD   zUSPS_4State.trackingY   s    

!r   c                     | j                   S r7   )r.   r<   s    r   <lambda>zUSPS_4State.<lambda>\   
    T^^ r   c                 2    | j                          || _        y r7   )r(   r/   )r1   r3   s     r   r3   zUSPS_4State.routing^   s    

r   c                     | j                   S r7   )r/   r<   s    r   rF   zUSPS_4State.<lambda>a   s
    DMM r   c                 H    d | _         t        t        d|      d      | _        y )Nr   r   )_sizedminmax
_widthSizer1   r2   s     r   	widthSizezUSPS_4State.widthSizec   s    c!El1-r   c                     | j                   S r7   )rN   r<   s    r   rF   zUSPS_4State.<lambda>f   s
    doo r   c                      d | _         || _        y r7   )rK   _heightSizerO   s     r   
heightSizezUSPS_4State.heightSizeh   s     r   c                     | j                   S r7   )rS   r<   s    r   rF   zUSPS_4State.<lambda>k   s    t'7'7 r   c                      d | _         || _        y r7   )rK   	_fontSizerO   s     r   fontSizezUSPS_4State.fontSizem   s    r   c                     | j                   S r7   )rW   r<   s    r   rF   zUSPS_4State.<lambda>p   rG   r   c                      d | _         || _        y r7   )rK   _humanReadablerO   s     r   humanReadablezUSPS_4State.humanReadabler   s    #r   c                     | j                   S r7   )r[   r<   s    r   rF   zUSPS_4State.<lambda>u   s    $*=*= r   c                    | j                   }|s| j                  }t        |      }	 |dk(  rd}nB|dk(  rt        |      dz   }n.|dk(  rt        |      dz   }n|dk(  rt        |      dz   }nt        | j
                  }|dd	 }	 |d
z  }|t        |d         z  }|dz  }|t        |d         z  }d	}dD ]L  \  }}|}	||z  }||	| }	 t        |      |k7  rt        t        |      D ]  }	|d
z  }|t        ||	         z  } N || _         |S #  t	        d|z        xY w#  t	        d|z        xY w#  t	        d|||fz        xY w)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)r8   r3   r,   r*   r-   rD   range)
r1   r2   r3   nrD   svaluer   namendjs
             r   binaryzUSPS_4State.binaryw   s    llGGAoa4ETLNETL/EUL3E$$ }}Ha]FhVAY'
VAY' Ae 
gRR!!Ag6{Bj(8"2Y 0VAY/0
g !DL5o !cfm!mnnh !]`f!fggg$%RV\]abdUe%effs$   A
D ,D :D1DD.1Ec                 T   | j                   s| j                  }t        |d      \  }}t        |d      \  }}t        |d      \  }}t        |d      \  }}t        |d      \  }}t        |d      \  }}t        |d      \  }}	t        |d      \  }}
t        |d      \  }}d|cxk  rdk  s!n J dt        t	        |            d|       t        |      | _        | j                  dz  r|dz  }|d	z  }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 z passed to _2codewords A-->   i  r   )	r9   rh   divmodr   r*   _crc11_fcstuplemap)r1   r2   r   JIHGr   Er   CBs               r   	codewordszUSPS_4State.codewords   s   
 KKE%$DAq!D>DAq!D>DAq!D>DAq!D>DAq!D>DAq!D>DAq!D>DAq!D>DAqa99dRUVYZ_V`Rabcdd9uDIyy~qCxqFA#CQq1Qq1Qq,A$BCDOr   c                 d    t        dd      | j                  _        | j                  j                  S )Nr%     )_initNof13Table	__class__table1r<   s    r   r|   zUSPS_4State.table1   s%     /$ 7~~$$$r   c                 d    t        dd      | j                  _        | j                  j                  S )Nr   N   )rz   r{   table2r<   s    r   r   zUSPS_4State.table2   s%     /" 5~~$$$r   c                 J   | j                   s| j                  }| j                  }g }|j                  }| j                  }| j
                  }t        d      D ]0  }||   }|dk  r||   }	n||dz
     }	||z	  dz  r|	 dz  }	 ||	       2 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
        r_   i  ry   r   i  )r:   rw   rm   appendr|   r   rb   rn   )
r1   rw   fcsru   aCr|   r   r   cwcs
             r   
characterszUSPS_4State.characters   s    
 I))CAB[[F[[F2Y q\t8r
Ar$wAFA:VA1  %QxDr   c                    | j                   su| j                  }g }|j                  }| j                  }| j                  D ]*  \  }}}} ||||   |z	  dz  d||   |z	  dz  z  z             , dj                  |      | _         | j                   S )zGet 4 state bar codes for current routing and tracking
        >>> print(USPS_4State('01234567094987654321','01234567891').barcodes)
        AADTFFDFTDADTAADAATFDTDDAAADDTDTTDAFADADDDTFFFDDTTTADFAAADFTDAADA
        r   r    )r;   r   r   
_bits2barstable4join)	r1   ru   rv   aB	bits2barsdcdbacabs	            r   barcodeszUSPS_4State.barcodes   s    
 ~~AABI#{{ A2b9quby!mQ2A->>?@AWWQZDN~~r   )A)   r      r`   )r   r_   r   r   )r&      r      )r%   r%   ra   r   )r   r&   r`   r   )r   r   r%   r   )r   r%   r   r   )r   r   r&   r   )ra   r`   r   r_   )r`   r&   r   ra   )r%   r   r   r   )r   r%   r   r   )r&   r_   r   r   )r   r   ra   r   )r`   ra   r   r&   )r   r`   r   ra   )ra   r   r   r   )r   r   r&   r&   )r   r_   r%   r   )r   r   r`   r   )ra   r   r   r   )r   r   r   r   )r&   r   r`   r   )r   ra   r   r   )r%   r   r   r_   )r   r   ra   r&   )r   r`   r   r   )r%   r   r&   r   )r   ra   r   r_   )r`   r   r   r%   )r   r   r%   r   )r   r   r   r&   )ra   r   r&   ra   )r   ra   r   r   )r   r   r`   r   )r%   r&   r   r   )r   r   ra   r   )r&   r%   r   r   )r`   r`   r   r   )r   r   r   r   )r   r`   r   r   )ra   r_   r`   r%   )r   r   r&   r   )r   r   r%   ra   )r   r   r   r   )r   r   r   r   )r%   r_   r`   r   )r&   r`   r   r&   )ra   r%   r   r   )r   r   r   r   )r%   r   r   r%   )r   r`   r   r_   )ra   r   r&   r   )r`   r   r   ra   )r   r   r   r&   )r%   r   r   r   )r   r%   r   r   )r&   r   r   r   )r   r`   ra   ra   )r   r   r`   r   )r   r   r   r%   )r   r   r   r   )r   r&   r&   r   )ra   r   r%   r`   )r`   r_   r   r   r   r   r   r   c                 P    | j                  d| j                  | j                        S )Nr   )rB   
dimensions
widthScaler<   s    r   rF   zUSPS_4State.<lambda>  s    

5QUQ`Q`0a r   c                 P    | j                  d| j                  | j                        S )Nr   )rB   r   heightScaler<   s    r   rF   zUSPS_4State.<lambda>  s    djjttO_O_.` r   c                     d| j                   v r| j                   d   S | j                  d| j                  | j                        S )N	_barWidthr   __dict__rB   r   r   r<   s    r   barWidthzUSPS_4State.barWidth  s8    $--'==--zz'$//$//BBr   c                 z    | j                   d   \  }}dt        t        |dz  |      |      z  | j                  d<   y )Nr   r>         R@r   r   rL   rM   r   r1   r2   rc   xs       r   r   zUSPS_4State.barWidth  s9    w'1%'Cd
1,=a(@%@k"r   c                     d| j                   v r| j                   d   S | j                  d| j                  | j                        S )N_pitchr   r   r<   s    r   r   zUSPS_4State.pitch  s8    t}}$==**zz'$//$//BBr   c                 z    | j                   d   \  }}dt        t        |dz  |      |      z  | j                  d<   y )Nr   r>   r   r   r   r   s       r   r   zUSPS_4State.pitch!  s9    w'1"$SU4Z):1%="=hr   c                     d| j                   v r| j                   d   S | j                  d| j                  | j                        | j                  d| j                  | j                        z
  S )N
_barHeightr   )r   rB   topsr   bottomsr<   s    r   	barHeightzUSPS_4State.barHeight&  sW    4==(==..zz#dii(8(89DJJs4<<X\XhXh<iiir   c                    | j                   d   d   | j                  d   d   z
  }| j                   d   d   | j                  d   d   z
  }dt        t        |dz  |      |      z  x}| j                  d<   ||z
  ||z
  z  | _        y )Nr   r   r   r>   r   r   )r   r   rL   rM   r   rT   r   s       r   r   zUSPS_4State.barHeight,  s    IIcN1S 1! 44IIcN1S 1! 44.0StA5Fq1I.IIl+ 19qs+r   c                 B    t        dt        d| j                              S Nr   r   )rL   rM   rP   r<   s    r   rF   zUSPS_4State.<lambda>3  s    s1S4>>-B'C r   c                 B    t        dt        d| j                              S r   )rL   rM   rT   r<   s    r   rF   zUSPS_4State.<lambda>4  s    Ac!DOO.D(E r   c                 :    | j                          | j                  S r7   )computeSize_widthr<   s    r   r   zUSPS_4State.width6  s    {{r   c                 :    | j                          | j                  S r7   )r   _heightr<   s    r   heightzUSPS_4State.height;  s    ||r   c                 x   t        | dd       s| j                  }| j                  }| j                  }| j                  }| j
                  }| j                  }| j                  }d|z  |z   d|z  z   | _        d|z  |z   | _	        | j                  r%| xj                  | j                  dz  |z   z  c_	        d| _        y y )NrK   r   @   g333333?T)getattrr   r   r   r   r   horizontalClearZoneverticalClearZoner   r   r\   rX   rK   )r1   wshsr   r   r   r   r   s           r   r   zUSPS_4State.computeSize@  s    tHT*B!!BI}}HJJE**C((CC%(*RX5DKS5?DL!!c 1# 55DK +r   c                 R    | j                          | j                  | j                  fS r7   )r   r   r   )r1   aWaHs      r   wrapzUSPS_4State.wrapO  s!    zz4;;&&r   c                     i }| j                   }dD ]J  }| j                  || j                  |      |z   }|| j                  || j                  |      |z   |z
  f||<   L |S )Nr   )r   rB   r   r   )r1   y0vInfor   bys         r   _getBarVInfozUSPS_4State._getBarVInfoS  sl    " 	;A

1T\\"-b0AAdii3B6::E!H	; r   c                 R   | j                          | j                  }| j                  }| j                  }|}|| j                  dz  z   }| j
                  }| j                  |      }| j                  D ]#  }||   \  }	}
| j                  ||	||
       ||z  }% | j                          y )Ng      ?)
r   r   r   r   r   r   r   r   rectdrawHumanReadable)r1   r   r   bwr   r   dwr   r   ybhbs              r   drawzUSPS_4State.draw[  s    &&$$]]##ZZ!!"% 	A1XFBIIa2b!GA	 	 r   c                     | j                   }| j                  }|xr |fxs d}dj                  |dd |dd |dd |dd  f|z         S )Nr'    r   r   r%   r   )rD   r3   r   )r1   rD   r3   s      r   r2   zUSPS_4State.valuej  s[    ==,,(wj.Bxx!Ax!}Xa^HRSMRSZZ[[r   c                 :    | j                   j                  d|      S )NrD   )r   __setitem__rO   s     r   rF   zUSPS_4State.<lambda>o  s    dmm.G.G
SX.Y r   c                     | j                   rh| j                  }| j                  }| j                  }| j                  }| j
                  d|z  z   d|z  z   }| j                  ||| j                  ||       y y )Nr   g?)r\   r   r   fontNamerX   r   annotater2   )r1   r   r   r   rX   r   s         r   r   zUSPS_4State.drawHumanReadableq  sk    **C((C}}H}}Hqu$S\1AMM#a

8H= r   c           	      <    t        j                  | |||||d       y )Nstart)anchor)r   r   )r1   r   r   textr   rX   r   s          r   r   zUSPS_4State.annotatez  s    a$xHr   N)01234567094987654321r   )r   )middle)0__name__
__module____qualname____doc__rN   rS   rW   r[   dictr   r   r   r5   r(   rB   staticmethodrD   propertyr3   rP   rT   rX   r\   rh   rw   r|   r   r   r   r   r   r   r   r   setterr   r   r   r   r   r   r   r   r   r   r2   r   r   r'   r   r   r   r      s}   JKIN	 !!!!	 "#	
4!& E" 3H=H  1':G. 5i@I! 7
CJ 3H=H$ =mLM4j fF, #I% fF% fF . *%J !HF$ !J"#ab !`aC C
 __A A C C
 \\> > j j
 , , CDJEFK UOE fF'!\
 UYZE>Ir   r   c                    t        t        |             dd }ddt        |      z
  z  |z   }d}d}t        |dd d      dz  }t        dd	      D ]"  }||z  d
z  r	|dz  |z  }n|dz  }|dz  }|dz  }$ t        ddd      D ]G  }t        |||dz    d      dz  }t        d	      D ]"  }||z  d
z  r	|dz  |z  }n|dz  }|dz  }|dz  }$ I |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   rj   r   r`   )r   r*   r,   rb   )r2   hexbytesgpr   datar   r   s          r   rl   rl   }  s    CJ#HBs8}$%h.H	B
Cx|B"D1QZ $J62+Cq&Cu
 1T!_ 8Aac?2&)q 	Ad
E!Avrk1f5LCQJD	 Jr   c                 N    d}t        d      D ]  }|dz  }|| dz  z  }| dz  }  |S )zureverse unsigned 13 bit number
    >>> print(_ru13(7936), _ru13(31), _ru13(47), _ru13(7808))
    31 7936 7808 47
    r      r   )rb   )r   r   r   s      r   _ru13r     sB    
 	
A2Y 	a	QU
	a Hr   c                 &   |dgz  }d}|dz
  }t        d      D ]]  }d}t        d      D ]  }||d|z  z  dk7  z  } || k7  r)t        |      }||k  r:||k(  r|||<   |dz  }J|||<   |dz  }|||<   |dz  }_ ||dz   k(  sJ d|dz   || fz         |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)rb   r   )	NlenTr   r	   ur   bcr   r   s	            r   rz   rz     s     	dVA	AQA4[ r 	 A1ad8a-B	 q5(!HQ3a4AaDFAAaDFAAaDFA qs8D8AaC!9DD8Hr   c                  *    dd l } | j                         S )Nr   )doctesttestmod)r   s    r   _testr     s    ??r   __main__N)
__future__r   __version____all__!reportlab.graphics.barcode.commonr   reportlab.lib.utilsr   r   r   rl   r   rz   r   r   r'   r   r   <module>r      sY    &
 5 (jI' jIX@
6 z	G r   