
    Q?hA=                         S SK Jr  SrSrS SKJr  S SKJr  S r " S S\5      r	S	 r
S
 rS rS r\S:X  a  \" 5         gg)    )print_functionz3.3.0)USPS_4State)Barcode)asNativec                     [        U 5      nUSS USS R                  5       -   nUR                  S5      (       a  USS nU$ )znormalized hexN   l)hexlowerendswith)irs     S/var/www/html/env/lib/python3.13/site-packages/reportlab/graphics/barcode/usps4s.pynhexr   
   sC    AA	"1aekkmAzz#AcrFH    c                   @   \ rS rSrSrSrSrSrSr \	" SSSSS9r
\	" S	S
S	S
S9r\	" SSSSS9rS@S jrS rS r\" \5      rS r\" S \5      rS r\" S \5      rS r\" S \5      rS r\" S \5      rS r\" S \5      rS r\" S \5      rS  r\" \5      rS! r\" \5      rS" r\" \5      rS# r\" \5      rS$ r\" \5      rS% r\" \5      rS&rS'r\" S( 5      r \" S) 5      r!\S* 5       r"\"RF                  S+ 5       r"\S, 5       r$\$RF                  S- 5       r$\S. 5       r%\%RF                  S/ 5       r%\" S0 5      r&\" S1 5      r'\S2 5       r(\S3 5       r)\(RF                  S4 5       r(\)RF                  S5 5       r)S6 r*S7 r+SAS8 jr,S9 r-S: r.\" \.S; 5      r.S< r/SBS= jr0S>r1g?)Cr      zBUSPS 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                 p   U R                  5         [        U[        5      (       a  [        U5      O
[	        U5      nU(       d0  [        U5      S;   a
  US S USS  p!O=[        S[        U5      -  5      e[        U5      S;  a  [        S[        U5      -  5      eXl        X l        U R                  " S0 UD6  g )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__USPS_4State.__init__?   s    

(s33E
%5z]*!&sU23Zw !^adejak!kll\)NQTU\Q]]^^ C r   c                 <    S U l         S U l        S U l        S U l        g N)_bvalue
_codewords_characters	_barcodesr2   s    r   r)   USPS_4State._initN   s    r   c                 6    X   nSUS   SU-
  -  X#S   -  -   -  $ )NH   r   r   r(   )kindr   sVs       r   scaleUSPS_4State.scaleT   s+    G1Q41:a!f$%%r   c                 0    U R                  5         Xl        g r9   )r)   r/   )r2   trackings     r   rH   USPS_4State.trackingY   s    

!r   c                     U R                   $ r9   )r/   r>   s    r   <lambda>USPS_4State.<lambda>\       T^^r   c                 0    U R                  5         Xl        g r9   )r)   r0   )r2   r4   s     r   r4   USPS_4State.routing^   s    

r   c                     U R                   $ r9   )r0   r>   s    r   rK   rL   a   s    DMMr   c                 H    S U l         [        [        SU5      S5      U l        g )Nr   r   )_sizedminmax
_widthSizer2   r3   s     r   	widthSizeUSPS_4State.widthSizec   s    c!El1-r   c                     U R                   $ r9   )rU   r>   s    r   rK   rL   f   s    door   c                     S U l         Xl        g r9   )rR   _heightSizerV   s     r   
heightSizeUSPS_4State.heightSizeh   s     r   c                     U R                   $ r9   )r[   r>   s    r   rK   rL   k   s
    t'7'7r   c                     S U l         Xl        g r9   )rR   	_fontSizerV   s     r   fontSizeUSPS_4State.fontSizem   s    r   c                     U R                   $ r9   )r`   r>   s    r   rK   rL   p   rM   r   c                     S U l         Xl        g r9   )rR   _humanReadablerV   s     r   humanReadableUSPS_4State.humanReadabler   s    #r   c                     U R                   $ r9   )re   r>   s    r   rK   rL   u   s
    $*=*=r   c                    U R                   nU(       d  U R                  n[        U5      n US:X  a  SnOEUS:X  a  [        U5      S-   nO0US:X  a  [        U5      S-   nOUS:X  a  [        U5      S-   nO[        eU R
                  nUSS	 n US
-  nU[        US   5      -  nUS-  nU[        US   5      -  nS	nS HL  u  pxUn	Xh-  nXIU n [        U5      U:w  a  [        e[        U5       H  n	US
-  nU[        XY   5      -  nM     MN     Xl         U$ !   [	        SU-  5      e= f!   [	        SU-  5      e= f!   [	        SXWU4-  5      e= f)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)r:   r4   r-   r+   r.   rH   range)
r2   r3   r4   nrH   svaluer   namendjs
             r   binary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!Ag6{Bj(8"2YVY/ ' f !L5o !cfm!mnnh !]`f!fggg$%RV\bdUe%effs:   D D 
D D 4D ,D' <D:D$'D7:Ec                 T   U R                   (       Gd  U R                  n[        US5      u  p#[        US5      u  p$[        US5      u  p%[        US5      u  p&[        US5      u  p'[        US5      u  p([        US5      u  p)[        US5      u  p*[        US5      u  p+SUs=::  a  S::  d#  O   S[        [	        U5      5      < SU< 35       e[        U5      U l        U R                  S-  (       a  US-  nUS	-  n[        [        [        X+XXXeXC4
5      5      U l         U R                   $ )
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   )	r;   rs   divmodr   r+   _crc11_fcstuplemap)r2   r3   r   JIHGr   Er   CBs               r   	codewordsUSPS_4State.codewords   s   
 KKE%$DA!D>DA!D>DA!D>DA!D>DA!D>DA!D>DA!D>DA!D>DAa99dRUVYZ_V`Rabcdd9uDIyy~qCxqFA#CQQQ,A$BCDOr   c                 d    [        SS5      U R                  l        U R                  R                  $ )Nr&     )_initNof13Table	__class__table1r>   s    r   r   USPS_4State.table1   s%     /$ 7~~$$$r   c                 d    [        SS5      U R                  l        U R                  R                  $ )Nr   N   )r   r   table2r>   s    r   r   USPS_4State.table2   s%     /" 5~~$$$r   c                 \   U R                   (       d  U R                  nU R                  n/ nUR                  nU R                  nU R
                  n[        S5       H3  nX   nUS::  a  XX   n	OXhS-
     n	X'-	  S-  (       a  U	) S-  n	U" U	5        M5     [        U5      U l         U R                   $ )zconvert 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
rj   i  r   r   i  )r<   r   ry   appendr   r   rm   rz   )
r2   r   fcsr   aCr   r   r   cwcs
             r   
charactersUSPS_4State.characters   s    
 I))CAB[[F[[F2Y\t8
A$wAFA:VA1   %QxDr   c                 "   U R                   (       ds  U R                  n/ nUR                  nU R                  nU R                   H'  u  pVpxU" XAU   U-	  S-  SX   U-	  S-  -  -      5        M)     SR                  U5      U l         U R                   $ )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)	r2   r   r   aB	bits2barsdcdbacabs	            r   barcodesUSPS_4State.barcodes   s    
 ~~AABI#{{b9uby!mQA->>?@  +WWQZDN~~r   )A)   r      rk   )r   rj   r   r   )r'      r      )r&   r&   rl   r   )r   r'   rk   r   )r   r   r&   r   )r   r&   r   r   )r   r   r'   r   )rl   rk   r   rj   )rk   r'   r   rl   )r&   r   r   r   )r   r&   r   r   )r'   rj   r   r   )r   r   rl   r   )rk   rl   r   r'   )r   rk   r   rl   )rl   r   r   r   )r   r   r'   r'   )r   rj   r&   r   )r   r   rk   r   )rl   r   r   r   )r   r   r   r   )r'   r   rk   r   )r   rl   r   r   )r&   r   r   rj   )r   r   rl   r'   )r   rk   r   r   )r&   r   r'   r   )r   rl   r   rj   )rk   r   r   r&   )r   r   r&   r   )r   r   r   r'   )rl   r   r'   rl   )r   rl   r   r   )r   r   rk   r   )r&   r'   r   r   )r   r   rl   r   )r'   r&   r   r   )rk   rk   r   r   )r   r   r   r   )r   rk   r   r   )rl   rj   rk   r&   )r   r   r'   r   )r   r   r&   rl   )r   r   r   r   )r   r   r   r   )r&   rj   rk   r   )r'   rk   r   r'   )rl   r&   r   r   )r   r   r   r   )r&   r   r   r&   )r   rk   r   rj   )rl   r   r'   r   )rk   r   r   rl   )r   r   r   r'   )r&   r   r   r   )r   r&   r   r   )r'   r   r   r   )r   rk   rl   rl   )r   r   rk   r   )r   r   r   r&   )r   r   r   r   )r   r'   r'   r   )rl   r   r&   rk   )rk   rj   r   r   r   r   r   r   c                 P    U R                  SU R                  U R                  5      $ )Nr   )rE   
dimensions
widthScaler>   s    r   rK   rL     s    

5QUQ`Q`0ar   c                 P    U R                  SU R                  U R                  5      $ )Nr    )rE   r   heightScaler>   s    r   rK   rL     s    djjttO_O_.`r   c                     SU R                   ;   a  U R                   S   $ U R                  SU R                  U R                  5      $ )N	_barWidthr   __dict__rE   r   r   r>   s    r   barWidthUSPS_4State.barWidth  s8    $--'==--zz'$//$//BBr   c                 x    U R                   S   u  p#S[        [        US-  U5      U5      -  U R                  S'   g )Nr   rA         R@r   r   rS   rT   r   r2   r3   rn   xs       r   r   r     s7    w'%'Cd
1,=a(@%@k"r   c                     SU R                   ;   a  U R                   S   $ U R                  SU R                  U R                  5      $ )N_pitchr   r   r>   s    r   r   USPS_4State.pitch  s8    t}}$==**zz'$//$//BBr   c                 x    U R                   S   u  p#S[        [        US-  U5      U5      -  U R                  S'   g )Nr   rA   r   r   r   r   s       r   r   r   !  s7    w'"$SU4Z):1%="=hr   c                     SU R                   ;   a  U R                   S   $ U R                  SU R                  U R                  5      U R                  SU R                  U R                  5      -
  $ )N
_barHeightr   )r   rE   topsr   bottomsr>   s    r   	barHeightUSPS_4State.barHeight&  sW    4==(==..zz#dii(8(89DJJs4<<X\XhXh<iiir   c                    U R                   S   S   U R                  S   S   -
  nU R                   S   S   U R                  S   S   -
  nS[        [        US-  U5      U5      -  =oR                  S'   X-
  X2-
  -  U l        g )Nr   r   r   rA   r   r   )r   r   rS   rT   r   r\   r   s       r   r   r   ,  s    IIcN1S 1! 44IIcN1S 1! 44.0StA5Fq1I.IIl+ 9qs+r   c                 B    [        S[        SU R                  5      5      $ Nr   r   )rS   rT   rW   r>   s    r   rK   rL   3  s    s1S4>>-B'Cr   c                 B    [        S[        SU R                  5      5      $ r   )rS   rT   r\   r>   s    r   rK   rL   4  s    Ac!DOO.D(Er   c                 :    U R                  5         U R                  $ r9   )computeSize_widthr>   s    r   r   USPS_4State.width6  s    {{r   c                 :    U R                  5         U R                  $ r9   )r   _heightr>   s    r   heightUSPS_4State.height;  s    ||r   c                     g r9   r(   r2   vs     r   r   r   A      r   c                     g r9   r(   r   s     r   r   r   D  r   r   c                    [        U SS 5      (       d  U R                  nU R                  nU R                  nU R                  nU R
                  nU R                  nU R                  nSU-  U-   SU-  -   U l        SU-  U-   U l	        U R                  (       a%  U =R                  U R                  S-  U-   -  sl	        SU l        g g )NrR   r   @   g333333?T)getattrr   r   r   r   r   horizontalClearZoneverticalClearZoner   r   rf   ra   rR   )r2   wshsr   r   r   r   r    s           r   r   USPS_4State.computeSizeH  s    tHT**B!!BI}}HJJE**C((CC%(*RX5DKS5?DL!!c 1# 55DK +r   c                 R    U R                  5         U R                  U R                  4$ r9   )r   r   r   )r2   aWaHs      r   wrapUSPS_4State.wrapW  s!    zz4;;&&r   c                     0 nU R                   nS HG  nU R                  X@R                  U5      U-   nXPR                  X@R                  U5      U-   U-
  4X$'   MI     U$ )Nr   )r   rE   r   r   )r2   y0vInfor   bys         r   _getBarVInfoUSPS_4State._getBarVInfo[  s_    "A

1\\"-b0AAii3B6::EH # r   c                 J   U R                  5         U R                  nU R                  nU R                  nUnX R                  S-  -   nU R
                  nU R                  U5      nU R                   H  nXx   u  pU R                  XIX:5        XF-  nM!     U R                  5         g )Ng      ?)
r   r   r   r   r   r   r   r   rectdrawHumanReadable)r2   r   r    bwr   r   dwr   r   ybhbs              r   drawUSPS_4State.drawc  s    &&$$]]##ZZ!!"%AXFBIIa2!GA  	 r   c                     U R                   nU R                  nU=(       a    U4=(       d    SnSR                  USS USS USS USS  4U-   5      $ )Nr(    r   r   r&   r   )rH   r4   r   )r2   rH   r4   s      r   r3   USPS_4State.valuer  s[    ==,,(wj.Bxx!Ax!}Xa^HRSMRSZZ[[r   c                 :    U R                   R                  SU5      $ )NrH   )r   __setitem__rV   s     r   rK   rL   w  s    dmm.G.G
SX.Yr   c                     U R                   (       af  U R                  nU R                  nU R                  nU R                  nU R
                  SU-  -   SU-  -   nU R                  XU R                  X45        g g )Nr   g?)rf   r   r   fontNamera   r   annotater3   )r2   r   r    r   ra   r   s         r   r   USPS_4State.drawHumanReadabley  sg    **C((C}}H}}Hqu$S\1AMM#

8= r   c           
      2    [         R                  " XX#XESS9  g )Nstart)anchor)r   r   )r2   r   r   textr   ra   r   s          r   r   USPS_4State.annotate  s    xHr   )r=   r:   r<   r;   ry   r`   r   r[   re   r0   rR   r/   r   rU   r\   N)01234567094987654321r   )r   )middle)2__name__
__module____qualname____firstlineno____doc__rU   r[   r`   re   dictr   r   r   r6   r)   rE   staticmethodrH   propertyr4   rW   r\   ra   rf   rs   r   r   r   r   r   r   r   r   r   r   setterr   r   r   r   r   r   r   r   r   r   r3   r   r   __static_attributes__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   
 \\ ]] '!\
 UYZE>Ir   r   c                    [        [        U 5      5      SS nSS[        U5      -
  -  U-   nSnSn[        USS S5      S-  n[        SS	5       H'  nX4-  S
-  (       a	  US-  U-  nOUS-  nUS-  nUS-  nM)     [        SSS5       HM  n[        XUS-    S5      S-  n[        S	5       H'  nX4-  S
-  (       a	  US-  U-  nOUS-  nUS-  nUS-  nM)     MO     U$ )a>  
>>> 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   rv   r   rk   )r   r+   r-   rm   )r3   hexbytesgpr   datar   r   s          r   rx   rx     s    CJ#HBs8}$%h.H	B
Cx|B"D1QZJ62+Cq&Cu
  1T!_8ac?2&)qA
E!Avrk1f5LCQJD   Jr   c                 P    Sn[        S5       H  nUS-  nXS-  -  nU S-  n M     U$ )zireverse unsigned 13 bit number
>>> print(_ru13(7936), _ru13(31), _ru13(47), _ru13(7808))
31 7936 7808 47
r      r   )rm   )r   r   r   s      r   _ru13r    s;    
 	
A2Y	a	U
	a  Hr   c                 *   US/-  nSnUS-
  n[        S5       H_  nSn[        S5       H  nXeSU-  -  S:g  -  nM     X`:w  a  M+  [        U5      nX:  a  M=  X:X  a  XRU'   US-  nMM  XRU'   US-  nXU'   US-  nMa     X4S-   :X  d   SUS-   X04-  5       eU$ )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)rm   r  )	NlenTr   r	   ur   bcr   r   s	            r   r   r     s     	dVA	AQA4[rAad8a-B 5(!H34aDFAaDFAaDFA  s8D8AaC9DD8Hr   c                  *    SS K n U R                  5       $ )Nr   )doctesttestmod)r  s    r   _testr    s    ??r   __main__N)
__future__r   __version____all__!reportlab.graphics.barcode.commonr   reportlab.lib.utilsr   r   r   rx   r  r   r  r  r(   r   r   <module>r$     sY    &
 5 (rI' rIh@
6 z	G r   