
    KwgE                         d Z i ddddddddd	d
dddddddddddddddddddddd Zd!Zd"Zd#d$lmZ  G d% d&e      Zy')()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                       e Zd ZdZdZd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zy)ECC200DataMatrixa  This 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                    t        j                  | g|i | d| _        d| _        d| _        d| _        d| _        d| _        | j                  | j                  dz  z
  | _        | j                  | j
                  dz  z
  | _	        y )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      b/var/www/horilla/myenv/lib/python3.12/site-packages/reportlab/graphics/barcode/ecc200datamatrix.pyr  zECC200DataMatrix.__init__a   s    .t.v. "&"2"2T5E5E5I"I"&"2"2T5E5E5I"I    c                     d| _         | j                  D ]  }t        |      dkD  sd| _          y  | j                  | _        y )Nr   r   r  )validvalueord	validated)r  cs     r  validatezECC200DataMatrix.validaten   s>    
 	(A1v|
	(
 "ZZDNr  c                 $   t        |      }g }|dk(  s|dk\  r|dk  s
|dk\  rV|dk  rQ|dk(  r|j                  |dz
         |S |dk\  r|dk  r|j                  |dz
         |S |j                  |dz
         |S |d	k\  r)|d
k  r$|j                  d	       |j                  |       |S |dk\  r|dk  s
|dk\  rL|dk  rG|j                  d       |dk\  r|dk  r|j                  |dz
         |S |j                  |dz
         |S |dk\  r,|dk  r'|j                  d       |j                  |dz
         |S |dk\  rI|dk  rD|j                  d       |j                  d       || j                  t        |dz
              z  }|S t	        d|d|d      )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  z!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t,,SS\::G  tQ?@@r  c                    g }|D ]  }|| j                  |      z  } t        |      dz  r |j                  d       t        |      dz  r g }|j                  d       t        dt        |      d      D ]L  }|||dz    }|d   dz  |d   dz  z   |d   z   dz   }|j                  |dz         |j                  |dz         N |j                  d	       t        |      | j                  kD  rt        d
      t        |      | j                  k  rp|j                  d       t        |      | j                  k  rGdt        |      dz   z  dz  dz   }|j                  d|z   d	z         t        |      | j                  k  rG|S )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_c40zECC200DataMatrix._encode_c40   s    	0At,,Q//G	0 'lQNN1 'lQ 	q#g,* 	*AAa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                     ||z  S N r  int1int2s      r  _gfsumzECC200DataMatrix._gfsum   s    d{r  c                 R    |dk(  s|dk(  ryt         t        |   t        |   z   dz     S )Nr  r   )ALOGVALLOGVALr2  s      r  
_gfproductzECC200DataMatrix._gfproduct   s/    19	F4L6$<73>??r  c                    t         |   }dg|z  }|D ]h  }| j                  ||d         }t        |dz
  dd      D ]>  }| j                  |||         ||<   |dkD  s!| j                  ||dz
     ||         ||<   @ j |j	                          |S )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   )FACTORSr5  r(  r9  reverse)r  datanum_code_words
cw_factors
code_words	data_wordtmpjs           r  _get_reed_solomon_codez'ECC200DataMatrix._get_reed_solomon_code   s    
 ^,
S>)
 	RI++iB8C>A-r26 R $Z] C
1q5$(KK
1q50A:a=$QJqMR	R 	r  c                     |j                  d      }g }t        dd      D ]  }|j                  ||z	  dz          |j                          |S )Nr  r   r   )popr(  r  r=  )r  r>  r  bitsr*  s        r  _get_next_bitszECC200DataMatrix._get_next_bits   sK    q! 	(AKK
Q'	(r  c                     |dk  r'|| j                   z  }|d| j                   dz   dz  z
  z  }|dk  r'|| j                  z  }|d| j                  dz   dz  z
  z  }|| j                  |   |<   y )Nr  r   r   )r  r  _matrix)r  rowcolbits       r  
_place_bitzECC200DataMatrix._place_bit   s    74***CA$11A5:;<C74***CA$11A5:;<C!$S#r  c                 V   | j                  |      }| j                  | j                  dz
  d|d          | j                  | j                  dz
  d|d          | j                  | j                  dz
  d|d          | j                  d| j                  dz
  |d          | j                  d| j                  dz
  |d          | j                  d| j                  dz
  |d          | j                  d| j                  dz
  |d          | j                  d| j                  dz
  |d          y )	Nr   r  rL   r   r   r   r   r	   rI  rO  r  r  r  r>  rH  s      r  _place_bit_corner_1z$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   | j                  |      }| j                  | j                  dz
  d|d          | j                  | j                  dz
  d|d          | j                  | j                  dz
  d|d          | j                  d| j                  dz
  |d          | j                  d| j                  dz
  |d          | j                  d| j                  dz
  |d          | j                  d| j                  dz
  |d          | j                  d| j                  dz
  |d          y 	Nr   r  rL   r   r   r   r   r	   rQ  rR  s      r  _place_bit_corner_2z$ECC200DataMatrix._place_bit_corner_2   rT  r  c                 V   | j                  |      }| j                  | j                  dz
  d|d          | j                  | j                  dz
  d|d          | j                  | j                  dz
  d|d          | j                  d| j                  dz
  |d          | j                  d| j                  dz
  |d          | j                  d| j                  dz
  |d          | j                  d| j                  dz
  |d          | j                  d| j                  dz
  |d          y rV  rQ  rR  s      r  _place_bit_corner_3z$ECC200DataMatrix._place_bit_corner_3   rT  r  c                 p   | j                  |      }| j                  | j                  dz
  d|d          | j                  | j                  dz
  | j                  dz
  |d          | j                  d| j                  dz
  |d          | j                  d| j                  dz
  |d          | j                  d| j                  dz
  |d          | j                  d| j                  dz
  |d          | j                  d| j                  dz
  |d          | j                  d| j                  dz
  |d          y )	Nr   r  r   rL   r   r   r   r	   rQ  rR  s      r  _place_bit_corner_4z$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                    | j                  |      }| j                  |dz
  |dz
  |d          | j                  |dz
  |dz
  |d          | j                  |dz
  |dz
  |d          | j                  |dz
  |dz
  |d          | j                  |dz
  ||d          | j                  ||dz
  |d          | j                  ||dz
  |d          | j                  |||d          y )	NrL   r  r   r   r   r   r   r	   )rI  rO  )r  r>  rL  rM  rH  s        r  _place_bit_standardz$ECC200DataMatrix._place_bit_standard  s    ""4(aq$q'2aq$q'2aq$q'2aq$q'2ad1g.S1Wd1g.S1Wd1g.S$q'*r  c                 P   | j                   }| j                  }| j                  ||      | _        d}d}	 ||k(  r|dk(  r| j	                  |       nq||dz
  k(  r|dk(  r|dz  r| j                  |       nM||dz
  k(  r|dk(  r|dz  dk(  r| j                  |       n&||dz   k(  r|dk(  r|dz  dk(  r| j                  |       	 ||k  r*|dk\  r%| j                  |   |   | j                  |||       |dz  }|dz  }|dk  s||k\  rnE|dz  }|dz  }	 |dk\  r*||k  r%| j                  |   |   | j                  |||       |dz  }|dz  }||k\  s|dk  rnE|dz  }|dz  }||k\  r||k\  rn:| j                  D ]  }t        d|      D ]  }||   	d||<      | j                  S )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_matrixrK  rS  rW  rY  r[  r]  r(  )r  r>  rowscolsrL  rM  r*  s          r  _create_matrixzECC200DataMatrix._create_matrix  s   
 &&&&00t<d{sax((."saxTAX((."saxTAX]((."saxTAX]((.:#(t||C/@/E/M,,T3<qq7cTk  1HC1HC!8d
t||C/@/E/M,,T3<qq$;#'  1HC1HCd{sd{K N << 	C1d^ q6>CF	
 ||r  c                    g }d}d}t        | j                  | j                  z        }t        | j                  | j                  z        }|| j                  k  r|| j                  k  r`||z  }||z  }||||z    }	t        dt        |	            D ]  }
|	|
   |||z    |	|
<    |j                  |	       |dz  }|| j                  k  r`d}|dz  }|| j                  k  r|S Nr  r   )intr  r
  r  r  r(  r'  r  )r  matrixregions
col_offset
row_offsetr`  ra  r_offsetc_offsetregionr*  s              r  _create_data_regionsz%ECC200DataMatrix._create_data_regionsY  s   

4**T-=-==>4**T-=-==>4+++t///%,%,h7q#f+. BA &q	(4= AF1IBv&a
 t/// J!OJ 4+++ r  c                 V    g }t        d|      D ]  }|j                  d g|z          |S )Nr  )r(  r  )r  rL  rM  rf  r*  s        r  r_  z%ECC200DataMatrix._create_empty_matrixo  s3    q# 	(AMM4&3,'	(r  c                 &   g }|D ]  }| j                  t        | j                  | j                  z        t        | j                  | j
                  z              }t        |      D ]&  \  }}t        |      D ]  \  }}|||dz      |dz   <    ( t        |      D ]`  \  }}	|dk(  rt        |	      D ]  \  }}
|dz   dz  |	|<    *|dz   t        |      k(  rt        |	      D ]
  \  }}
d|	|<    Td|	d<   |dz  |	d<   b |j                  |        |S )Nr   r  rL   r;  )	r_  re  r	  r  r  r
  	enumerater'  r  )r  rg  wrappedrl  rf  r*  r`  rD  r>  rL  rM  s              r  _wrap_data_regions_with_findersz0ECC200DataMatrix._wrap_data_regions_with_findersu  sE    	#F..D$$t'7'778D$$t'7'778F
 %V, ,4( ,GAt'+F1Q3K!$,, $F+ 	$36"+C. -3"#a%1A-Uc&k)"+C. #3!"A# CF!eCG	$ NN6"+	#. r  c                    g }t        dt        |      | j                        D ]a  }|||| j                  z    }d}|t        |d         k  s)g }|D ]
  }|||   z  } |j                  |       |dz  }|t        |d         k  r9c |S rd  )r(  r'  r
  r  )r  rg  mergedr*  r+  rD  
merged_rowrL  s           r  _merge_data_regionsz$ECC200DataMatrix._merge_data_regions  s    q#g,(8(89 	AAa 0 001EAc%(m#
  )C#a&(J)j)Q c%(m#	 r  c                    t        | d      r| j                  S | j                  | j                        }|| j	                  || j
                        z  }| j                  |      }| j                  |      }| j                  |      }| j                  |      | _        | j                  j                          | j                  S )Nr$  )hasattrr$  r.  r  rE  r  rb  rm  rr  rv  r=  )r  r$  rf  data_regionsrq  s        r  encodezECC200DataMatrix.encode  s    4#<<""4>>24..wDD$$W-00866|D//8||r  c                 |    | j                   | j                  z  | _        | j                  | j                  z  | _        y r0  )r  barWidth_heightr	  _width)r  r  s     r  computeSizezECC200DataMatrix.computeSize  s.    ''$--7&&6r  c                 "   t        | j                        D ]w  \  }}t        |      D ]d  \  }}|s	| j                  | j                  || j                  z  z   | j
                  || j                  z  z   | j                  | j                         f y y r0  )rp  r$  rectxr|  y)r  r  rL  r  r>  s        r  drawzECC200DataMatrix.draw  s|    - 	FAs$S> 4IIT]]!22T]]!22		r  N)__name__
__module____qualname____doc__r|  r  r  r  r.  r5  r9  rE  rI  rO  rS  rW  rY  r[  r]  rb  rm  r_  rr  rv  rz  r  r  r1  r  r  r  r  Z   s     HJ( D@@$	%	A	A	A	A	+9v,8 7	r  r  N)__all__r<  r8  r7  !reportlab.graphics.barcode.commonr  r  r1  r  r  <module>r     s   
'''' 7' ;	'
 ?' G'  	$'  	.'  	:'  	M'  	-'$  	H%'*  	$+'2  	J3':  	$;'D  	@E'R
,, 6cw cr  