
    Q?hE                         S r 0 SS_SS_SS_SS_S	S
_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS _rS!rS"rS#S$KJr   " S% S&\5      rg')()ECC200datamatrix   )   0      o   >      )   D            \      
   )
                  t      n   =      )                  '      <   a   x   r    ))         [   r   *         r&      d         )   r&         _   	      w   r   -         S   r   r;   )r=      r0   r#      K   B   r      r.   m      ^   r      r   Z   r?      )r   r>      r7      G   r"      r?      r)         O   l   R         r<      r   )4      X   r   rC   r#                  r   r[   rZ   r   rU   r   |   r          `   2      r   )      +   r&   rK   ra   g   rT   %         5   r@   "      y      r   r   r.         r'   ri   rJ   r"   ]   r   $   )$r$      r1               r_   f   r'   T         r]   P         r;   rL      r   !   e      r6   r9   s   ,   r   r`   ;      rF   b   Q   p   r,   )*M   rc   r         &      r)      i   z   rL   r$      r1      r   r6   r0   r7      r      r   9   rn   rZ      rO   r   6   r   r      E   rb            r   r7   r   r   )0r$      rU   r   ra       u   r      r   r   re   r   r?      W      j         v   r
   rh   rG   rj   r      rX   r'   r0   rA   r   r<   r   rR   r   rY   r      r   rM   r   r   r.   r   rO   rF   r   8   )8r   r7   r   r   r    ro   r|      r0      r   rj      r4         r      rs   r   r      r   r   r      ru      r      r      r   r   r   r      r   r            r   r$   rt   C   r   r   r[   rf   r   k   rJ   rk      .   r   )>r1   rr      rb   r      r#   r   r   r?   r      r   rQ      rh   r   r   r   r   r$   ?   r\   rW   rw   r   r      r   @   r   rK      r   r      rS   ru   3   r   r   r   (   rv   r?   ro      r   rY   rj   r   r   r   r	   rE   r      r^   V   /   r      r   )Dr|   r      Y   r]      r   r   r   r   r   rI      rs   I   rt   r.   rq   r      r   r\   r*   r   r   r   rr   r.   r   rM         rA      r)   r   r   r   r{   r   r|   r   ra   r   re   rq   r      r_   rB   r   rV   rU   r   1   r   rd   r   r   r   rQ   r)   r   r   ra   rg   rR   r<   (   ir   r   r   rL   rF   rB   rk      r   r   r   r1   rf   r   r   r   r>   r#   r   r   r   r   r         r   r
   7   r   rd   r   r      r   ra   r      r   rg   r   N   r   }      r   r   rx   rI   r<   rp   r   r:   c   r   r   r   r   r9   r)         r   r+   r   L   r|      r\   r   r&   r`   r(   rs   r   rO   r   r   h   rc   r   r   rP      rQ      ~   rN   rq   rl   r7   J      r   r   rz   r$   r   r   r   r-   r   r_   rW   r   rX   r0   r   r   re   rb   r   r   r   r2   r   r'      r   r   r.   r   r   r   r   r   r   rY   r	   r   r   r^   r   ry   ru   r6      rG   r       r   r   r   r{   r,      rh   r   r   rV   r   r   r   rJ   r   r   r   rS   r!   q   r      r   r*   r}   r   rU   r   rC   r   r   r   rt   r   r   rA   r   r4   #   r5   r      r@      r   r=   r   r   r   r   U   rj      A   rT   r   r?   r   r   r8   r   r   rR   H   r~   r   r   r]   r   r/   r   ri   r   rE   rM   {      r   r   rZ   r   r   r   r   :   r      r;   r   r   r   ro   rn   r   rD   r   r[   r   rm   F   r   rw   r"   rK   r   r3   r   r%   r   rv   r   rH   rr   r   r   r   (   r   rL   r   r   r   r   r   r   r:   rG   r   r   r   r   r   r   r   re   r   r   r]   r   r[   rS   r   rQ   r   r8   r
   r   r   r`   rr   r<   r   r/   r   r   r7   r;   rs   r   r   r   r   rV   r   r   rp   r   r   r|   r   r	   r2   r   r   r   r   r   r   r>   r   r   r   rc   r   r   r   rF   r   r   r   r   r+   r~   r   rv   r(   rR   r   r   r   r   r6   rW   r   rx   r   r   r   r   r   r5   r.   r   r   r  r   rk   r   r   r   r#   r   r3   rZ   r,   rz   r"   r   rw   r   r   r   r   r   r   r   r   r   r   rO   r   r   rf   r   rU   r   r   rm   r   r   r   r   r   rX   rY   r   r   r   rb   r0   r   r   r   rT   r   r   rJ   r   rd   r   r   r   r   r$   r   r   r   r   rD   r   rE   r?   r   rj   rn   r1   r   r   r=   r   r&   r!   r   rt   r   r   r   r   ry   r   r_   rK   r-   r   r   r   r   rg   r   r   rP   r*   ro   rl   r   rq   r   r   rI   r\   r   r   r   r   r   r   rN   r   r   r%   r'   r   r   r   r   r   r   rA   r   rh   r   r   r   r   rH   r   r}   rM   rC   ru   r)   r   r   r^   r   r   ri   r   r   r    r   r   ra   r4   r   r9   r   rB   r   r{   r@   r   r       )Barcodec                       \ rS rSrSrSrS rS rS rS r	S r
S	 rS
 rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rSrg)ECC200DataMatrixrG   zThis code only supports a Type 12 (44x44) C40 encoded data matrix.
This is the size and encoding that Royal Mail wants on all mail from October 1st 2015.
see https://bitbucket.org/rptlab/reportlab/issues/69/implementations-of-code-128-auto-and-data
r   c                    [         R                  " U /UQ70 UD6  SU l        SU l        SU l        SU l        SU l        SU l        U R                  U R                  S-  -
  U l        U R                  U R
                  S-  -
  U l	        g )Nr   rL   r   r   )
r  __init__row_modulescol_modulesrow_regionscol_regionscw_datacw_eccrow_usable_modulescol_usable_modules)selfargskwargss      ]/var/www/html/env/lib/python3.13/site-packages/reportlab/graphics/barcode/ecc200datamatrix.pyr  ECC200DataMatrix.__init__a   s    .t.v. "&"2"2T5E5E5I"I"&"2"2T5E5E5I"I    c                     SU l         U R                   H  n[        U5      S:  d  M  SU l           g    U R                  U l        g )Nr   r   r  )validvalueord	validated)r  cs     r  validateECC200DataMatrix.validaten   s9    
A1v|
 
 "ZZDNr  c                 R   [        U5      n/ nUS:X  d  US:  a  US::  d  US:  a[  US::  aU  US:X  a  UR                  US-
  5        U$ US:  a  US::  a  UR                  US-
  5        U$ UR                  US-
  5         U$ US	:  a*  US
::  a$  UR                  S	5        UR                  U5        U$ US:  a  US::  d  US:  aP  US::  aJ  UR                  S5        US:  a  US::  a  UR                  US-
  5        U$ UR                  US-
  5         U$ US:  a-  US::  a'  UR                  S5        UR                  US-
  5        U$ US:  aI  US::  aC  UR                  S5        UR                  S5        X0R                  [        US-
  5      5      -  nU$ [	        SU< SU< S35      e)Nr   r   r   r   rG   r   r   r   r  r   r   r   r+   r6   r   r   ra   rt   rL   r   r   r   zCannot encode z ())r  append_encode_c40_charchr	Exception)r  charoencodeds       r  r!  !ECC200DataMatrix._encode_c40_charw   s   I7qBw17RAGBwq2v&2 1 bQ"Wq2v&. + q2v&* ) !VRNN1NN1$ # 2g!r'qBw17NN1Bw17q2v&  q2v&  "WcNN1NN1r6"  #X!s(NN1NN2,,SS\::G  tQ?@@r  c                 (   / nU H  nX R                  U5      -  nM     [        U5      S-  (       a&  UR                  S5        [        U5      S-  (       a  M&  / nUR                  S5        [        S[        U5      S5       HL  nX%US-    nUS   S-  US   S-  -   US   -   S-   nUR                  US-  5        UR                  US-  5        MN     UR                  S	5        [        U5      U R                  :  a  [        S
5      e[        U5      U R                  :  as  UR                  S5        [        U5      U R                  :  aI  S[        U5      S-   -  S-  S-   nUR                  SU-   S	-  5        [        U5      U R                  :  a  MI  U$ )Nr   r  r   i@  r   r   rL      r   z4Too much data to fit into a data matrix of this sizerD   r   rO   )r!  lenr   ranger  r#  )	r  r  r&  r  	codewordsichunktotalrs	            r  _encode_c40ECC200DataMatrix._encode_c40   s{   A,,Q//G  'lQNN1 'lQ 	q#g,*AacNE!HtOeAhm3eAh>BEUc\*US[)	 + 	y>DLL(RSSy>DLL(S!i.4<</S^a/0C71<  #'S1 i.4<</ r  c                 
    X-  $ N r  int1int2s      r  _gfsumECC200DataMatrix._gfsum   s
    {r  c                 V    US:X  d  US:X  a  g[         [        U   [        U   -   S-     $ )Nr  r   )ALOGVALLOGVALr6  s      r  
_gfproductECC200DataMatrix._gfproduct   s/    19	F4L6$<73>??r  c                    [         U   nS/U-  nU Hg  nU R                  XTS   5      n[        US-
  SS5       H<  nU R                  XcU   5      XG'   US:  d  M!  U R                  XGS-
     XG   5      XG'   M>     Mi     UR	                  5         U$ )z
This method is basically verbatim from "huBarcode" which is BSD licensed
https://github.com/hudora/huBarcode/blob/master/hubarcode/datamatrix/reedsolomon.py
r  r   )FACTORSr9  r+  r>  reverse)r  datanum_code_words
cw_factors
code_words	data_wordtmpjs           r  _get_reed_solomon_code'ECC200DataMatrix._get_reed_solomon_code   s    
 ^,
S>)
I++iB8C>A-r26 $] C
q5$(KK
q50A:=$QJM 7  	r  c                     UR                  S5      n/ n[        SS5       H  nUR                  X$-	  S-  5        M     UR                  5         U$ )Nr  r   r   )popr+  r   rC  )r  rD  r  bitsr-  s        r  _get_next_bitsECC200DataMatrix._get_next_bits   sD    q!AKK
Q' r  c                     US:  a&  XR                   -  nUSU R                   S-   S-  -
  -  nUS:  a&  X R                  -  nUSU R                  S-   S-  -
  -  nX0R                  U   U'   g )Nr  r   r   )r  r  _matrix)r  rowcolbits       r  
_place_bitECC200DataMatrix._place_bit   s{    7***CA$11A5:;<C7***CA$11A5:;<C!$S#r  c                 V   U R                  U5      nU R                  U R                  S-
  SUS   5        U R                  U R                  S-
  SUS   5        U R                  U R                  S-
  SUS   5        U R                  SU R                  S-
  US   5        U R                  SU R                  S-
  US   5        U R                  SU R                  S-
  US   5        U R                  SU R                  S-
  US   5        U R                  SU R                  S-
  US   5        g )	Nr   r  rL   r   r   r   r   r	   rP  rW  r  r  r  rD  rO  s      r  _place_bit_corner_1$ECC200DataMatrix._place_bit_corner_1   
   ""4(//!3QQ@//!3QQ@//!3QQ@422Q6Q@422Q6Q@422Q6Q@422Q6Q@422Q6Q@r  c                 V   U R                  U5      nU R                  U R                  S-
  SUS   5        U R                  U R                  S-
  SUS   5        U R                  U R                  S-
  SUS   5        U R                  SU R                  S-
  US   5        U R                  SU R                  S-
  US   5        U R                  SU R                  S-
  US   5        U R                  SU R                  S-
  US   5        U R                  SU R                  S-
  US   5        g 	Nr   r  rL   r   r   r   r   r	   rZ  r[  s      r  _place_bit_corner_2$ECC200DataMatrix._place_bit_corner_2   r^  r  c                 V   U R                  U5      nU R                  U R                  S-
  SUS   5        U R                  U R                  S-
  SUS   5        U R                  U R                  S-
  SUS   5        U R                  SU R                  S-
  US   5        U R                  SU R                  S-
  US   5        U R                  SU R                  S-
  US   5        U R                  SU R                  S-
  US   5        U R                  SU R                  S-
  US   5        g r`  rZ  r[  s      r  _place_bit_corner_3$ECC200DataMatrix._place_bit_corner_3   r^  r  c                 p   U R                  U5      nU R                  U R                  S-
  SUS   5        U R                  U R                  S-
  U R                  S-
  US   5        U R                  SU R                  S-
  US   5        U R                  SU R                  S-
  US   5        U R                  SU R                  S-
  US   5        U R                  SU R                  S-
  US   5        U R                  SU R                  S-
  US   5        U R                  SU R                  S-
  US   5        g )	Nr   r  r   rL   r   r   r   r	   rZ  r[  s      r  _place_bit_corner_4$ECC200DataMatrix._place_bit_corner_4  s   ""4(//!3QQ@//!3T5L5Lq5PRVWXRYZ422Q6Q@422Q6Q@422Q6Q@422Q6Q@422Q6Q@422Q6Q@r  c                    U R                  U5      nU R                  US-
  US-
  US   5        U R                  US-
  US-
  US   5        U R                  US-
  US-
  US   5        U R                  US-
  US-
  US   5        U R                  US-
  X4S   5        U R                  X#S-
  US   5        U R                  X#S-
  US   5        U R                  X#US   5        g )	NrL   r  r   r   r   r   r   r	   )rP  rW  )r  rD  rT  rU  rO  s        r  _place_bit_standard$ECC200DataMatrix._place_bit_standard  s    ""4(aq$q'2aq$q'2aq$q'2aq$q'2a1g.1Wd1g.1Wd1g.$q'*r  c                 z   U R                   nU R                  nU R                  X#5      U l        SnSn XB:X  a  US:X  a  U R	                  U5        O{XBS-
  :X  a"  US:X  a  US-  (       a  U R                  U5        OQXBS-
  :X  a!  US:X  a  US-  S:X  a  U R                  U5        O(XBS-   :X  a   US:X  a  US-  S:X  a  U R                  U5         XB:  a+  US:  a%  U R                  U   U   c  U R                  XU5        US-  nUS-  nUS:  d  XS:  a  OMH  US-  nUS-  n US:  a*  XS:  a%  U R                  U   U   c  U R                  XU5        US-  nUS-  nXB:  d  US:  a  OMH  US-  nUS-  nXB:  a  XS:  a  OGML  U R                   H!  n[        SU5       H  nXF   b  M
  SXF'   M     M#     U R                  $ )z
This method is heavily influenced by "huBarcode" which is BSD licensed
https://github.com/hudora/huBarcode/blob/master/hubarcode/datamatrix/placement.py
r   r  rL   r   r   r   )
r  r  _create_empty_matrixrS  r\  ra  rd  rg  rj  r+  )r  rD  rowscolsrT  rU  r-  s          r  _create_matrixECC200DataMatrix._create_matrix  s   
 &&&&00<{sax((."saxTAX((."saxTAX]((."saxTAX]((.:#(t||C/@/E/M,,T<qq7ck  1HC1HC!8
t||C/@/E/M,,T<qq;#'  1HC1HC{s{K N <<C1d^6>CF $  
 ||r  c                    / nSnSn[        U R                  U R                  -  5      n[        U R                  U R                  -  5      nX0R                  :  a  X@R                  :  a\  X5-  nXF-  nXXW-    n	[        S[        U	5      5       H  n
X   XU-    X'   M     UR                  U	5        US-  nX@R                  :  a  M\  SnUS-  nX0R                  :  a  M  U$ Nr  r   )intr  r
  r  r  r+  r*  r   )r  matrixregions
col_offset
row_offsetrn  ro  r_offsetc_offsetregionr-  s              r  _create_data_regions%ECC200DataMatrix._create_data_regionsY  s    

4**T-=-==>4**T-=-==>+++///%,%,7q#f+.A &	(= AFI /v&a
 /// J!OJ +++ r  c                 Z    / n[        SU5       H  nUR                  S /U-  5        M     U$ )Nr  )r+  r   )r  rT  rU  ru  r-  s        r  rm  %ECC200DataMatrix._create_empty_matrixo  s.    q#AMM4&3,' r  c                 6   / nU GH  nU R                  [        U R                  U R                  -  5      [        U R                  U R
                  -  5      5      n[        U5       H&  u  pV[        U5       H  u  pxXUS-      US-   '   M     M(     [        U5       Hd  u  pYUS:X  a   [        U	5       H  u  pzUS-   S-  X'   M     M+  US-   [        U5      :X  a  [        U	5       H	  u  pzSX'   M     MW  SU	S'   US-  U	S'   Mf     UR                  U5        GM     U$ )Nr   r  rL   rA  )	rm  rt  r	  r  r  r
  	enumerater*  r   )r  rv  wrappedr{  ru  r-  rn  rJ  rD  rT  rU  s              r  _wrap_data_regions_with_finders0ECC200DataMatrix._wrap_data_regions_with_findersu  s   F..D$$t'7'778D$$t'7'778F
 %V,(GA'+1Q3K!$  / - $F+6"+C."#a%1 #1Uc&k)"+C.!" #1 CF!eCG , NN6"+ . r  c                    / n[        S[        U5      U R                  5       He  nXX0R                  -    nSnU[        US   5      :  d  M)  / nU H
  nXgU   -  nM     UR                  U5        US-  nU[        US   5      :  a  M<  Mg     U$ rs  )r+  r*  r
  r   )r  rv  mergedr-  r.  rJ  
merged_rowrT  s           r  _merge_data_regions$ECC200DataMatrix._merge_data_regions  s    q#g,(8(89Aa 0 001EAc%(m#
 Ca&(J !j)Q c%(m# : r  c                    [        U S5      (       a  U R                  $ U R                  U R                  5      nXR	                  XR
                  5      -  nU R                  U5      nU R                  U5      nU R                  U5      nU R                  U5      U l        U R                  R                  5         U R                  $ )Nr&  )hasattrr&  r1  r  rK  r  rp  r|  r  r  rC  )r  r&  ru  data_regionsr  s        r  encodeECC200DataMatrix.encode  s    4##<<""4>>2..wDD$$W-00866|D//8||r  c                 |    U R                   U R                  -  U l        U R                  U R                  -  U l        g r4  )r  barWidth_heightr	  _width)r  r  s     r  computeSizeECC200DataMatrix.computeSize  s.    ''$--7&&6r  c                 .   [        U R                  5       H|  u  p[        U5       Hh  u  p4U(       d  M  U R                  U R                  X0R                  -  -   U R
                  XR                  -  -   U R                  U R                  5        Mj     M~     g r4  )r  r&  rectxr  y)r  r  rT  r  rD  s        r  drawECC200DataMatrix.draw  sl    -FA$S>4II]]!22]]!22	 * .r  )r  rS  r  r	  r  r  r  r  r&  r  r
  r  r  r  N)__name__
__module____qualname____firstlineno____doc__r  r  r  r!  r1  r9  r>  rK  rP  rW  r\  ra  rd  rg  rj  rp  r|  rm  r  r  r  r  r  __static_attributes__r5  r  r  r  r  Z   s     HJ( D@@$	%	A	A	A	A	+9v,8 7	r  r  N)__all__rB  r=  r<  !reportlab.graphics.barcode.commonr  r  r5  r  r  <module>r     s   
'''' 7' ;	'
 ?' G'  	$'  	.'  	:'  	M'  	-'$  	H%'*  	$+'2  	J3':  	$;'D  	@E'R
,, 6cw cr  