
    kfE                         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d'S )()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dS )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|R i | d| _        d| _        d| _        d| _        d| _        d| _        | j        | j        dz  z
  | _        | j        | j        dz  z
  | _	        d S )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      k/var/www/html/nettyfy-visnx/env/lib/python3.11/site-packages/reportlab/graphics/barcode/ecc200datamatrix.pyr  zECC200DataMatrix.__init__a   s    .t...v... "&"2T5E5I"I"&"2T5E5I"I    c                 z    d| _         | j        D ]}t          |          dk    r
d| _          d S  | j        | _        d S )Nr   r   r  )validvalueord	validated)r  cs     r  validatezECC200DataMatrix.validaten   sK    
 	( 	(A1vv||
  "ZDNNNr  c                    t          |          }g }|dk    s|dk    r|dk    s|dk    rf|dk    r`|dk    r|                    |dz
             n|dk    r |dk    r|                    |dz
             nl|                    |dz
             nR|d	k    r2|d
k    r,|                    d	           |                    |           n|dk    r|dk    s|dk    rY|dk    rS|                    d           |dk    r|dk    r|                    |dz
             n|                    |dz
             n|dk    r4|dk    r.|                    d           |                    |dz
             nu|dk    rY|dk    rS|                    d           |                    d           ||                     t          |dz
                      z  }nt	          d|d|d          |S )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   II77qBww177RAGGBwwq2v&&&&bQ"WWq2v&&&&q2v&&&&!VVRNN1NN12gg!r''qBww177NN1Bww177q2v&&&&q2v&&&&"WWcNN1NN1r6""""#XX!s((NN1NN2t,,SS\\:::GG)tttQQQ?@@@r  c                    g }|D ]}||                      |          z  }t          |          dz  r'|                    d           t          |          dz  'g }|                    d           t          dt          |          d          D ]b}|||dz            }|d         dz  |d         dz  z   |d         z   dz   }|                    |dz             |                    |dz             c|                    d	           t          |          | j        k    rt          d
          t          |          | j        k     r{|                    d           t          |          | j        k     rNdt          |          dz   z  dz  dz   }|                    d|z   d	z             t          |          | j        k     N|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    	0 	0At,,Q///GG'llQ 	NN1 'llQ 	 	q#g,,** 	* 	*AAacENE!HtOeAhm3eAh>BEUc\***US[))))y>>DL((RSSSy>>DL((S!!!i..4<//S^^a/0C71<  #'S111 i..4<// r  c                     ||z  S N r  int1int2s      r  _gfsumzECC200DataMatrix._gfsum   s    d{r  c                 p    |dk    s|dk    rdS t           t          |         t          |         z   dz           S )Nr  r   )ALOGVALLOGVALr2  s      r  
_gfproductzECC200DataMatrix._gfproduct   s5    199		1F4L6$<73>??r  c                 ^   t           |         }dg|z  }|D ]}|                     ||d                   }t          |dz
  dd          D ]O}|                     |||                   ||<   |dk    r(|                     ||dz
           ||                   ||<   P|                                 |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 	RI++iB88C>A-r266 R R $Z] C C
1q55$(KK
1q50A:a=$Q$QJqMR
 	r  c                     |                     d          }g }t          dd          D ]}|                    ||z	  dz             |                                 |S )Nr  r   r   )popr(  r  r=  )r  r>  r  bitsr*  s        r  _get_next_bitszECC200DataMatrix._get_next_bits   s\    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        |         |<   d S )Nr  r   r   )r  r  _matrix)r  rowcolbits       r  
_place_bitzECC200DataMatrix._place_bit   s}    774**CA$1A5:;<C774**CA$1A5:;<C!$S#r  c                    |                      |          }|                     | j        dz
  d|d                    |                     | j        dz
  d|d                    |                     | j        dz
  d|d                    |                     d| j        dz
  |d                    |                     d| j        dz
  |d                    |                     d| j        dz
  |d                    |                     d| j        dz
  |d                    |                     d| j        dz
  |d                    d S )	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2Q6Q@@@42Q6Q@@@42Q6Q@@@42Q6Q@@@42Q6Q@@@@@r  c                    |                      |          }|                     | j        dz
  d|d                    |                     | j        dz
  d|d                    |                     | j        dz
  d|d                    |                     d| j        dz
  |d                    |                     d| j        dz
  |d                    |                     d| j        dz
  |d                    |                     d| j        dz
  |d                    |                     d| j        dz
  |d                    d S 	Nr   r  rL   r   r   r   r   r	   rQ  rR  s      r  _place_bit_corner_2z$ECC200DataMatrix._place_bit_corner_2   rT  r  c                    |                      |          }|                     | j        dz
  d|d                    |                     | j        dz
  d|d                    |                     | j        dz
  d|d                    |                     d| j        dz
  |d                    |                     d| j        dz
  |d                    |                     d| j        dz
  |d                    |                     d| j        dz
  |d                    |                     d| j        dz
  |d                    d S rV  rQ  rR  s      r  _place_bit_corner_3z$ECC200DataMatrix._place_bit_corner_3   rT  r  c                    |                      |          }|                     | j        dz
  d|d                    |                     | j        dz
  | j        dz
  |d                    |                     d| j        dz
  |d                    |                     d| j        dz
  |d                    |                     d| j        dz
  |d                    |                     d| j        dz
  |d                    |                     d| j        dz
  |d                    |                     d| j        dz
  |d                    d S )	Nr   r  r   rL   r   r   r   r	   rQ  rR  s      r  _place_bit_corner_4z$ECC200DataMatrix._place_bit_corner_4  s6   ""4((/!3QQ@@@/!3T5Lq5PRVWXRYZZZ42Q6Q@@@42Q6Q@@@42Q6Q@@@42Q6Q@@@42Q6Q@@@42Q6Q@@@@@r  c                 B   |                      |          }|                     |dz
  |dz
  |d                    |                     |dz
  |dz
  |d                    |                     |dz
  |dz
  |d                    |                     |dz
  |dz
  |d                    |                     |dz
  ||d                    |                     ||dz
  |d                    |                     ||dz
  |d                    |                     |||d                    d S )	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22aq$q'222aq$q'222aq$q'222ad1g...S1Wd1g...S1Wd1g...S$q'*****r  c                    | j         }| j        }|                     ||          | _        d}d}	 ||k    r|dk    r|                     |           n||dz
  k    r!|dk    r|dz  r|                     |           n[||dz
  k    r%|dk    r|dz  dk    r|                     |           n-||dz   k    r$|dk    r|dz  dk    r|                     |           	 ||k     r0|dk    r*| j        |         |         |                     |||           |dz  }|dz  }|dk     s||k    rnN|dz  }|dz  }	 |dk    r0||k     r*| j        |         |         |                     |||           |dz  }|dz  }||k    s|dk     rnN|dz  }|dz  }||k    r||k    rnh| 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  TrL   r   Nr   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  sl   
 &&00t<<%	d{{saxx((....""saxxTAXx((....""saxxTAX]]((....""saxxTAX]]((...::#((t|C/@/E/M,,T3<<<qq77cTkk 1HC1HC!88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     rr||z  }||z  }||||z            }	t          dt          |	                    D ]}
|	|
         |||z            |	|
<   |                    |	           |dz  }|| j        k     rd}|dz  }|| j        k     |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 67q#f++.. B BA &q	(4=*@ AF1IIv&&&a
 t/// J!OJ 4+++ r  c                 b    g }t          d|          D ]}|                    d g|z             |S )Nr  )r(  r  )r  rL  rM  rf  r*  s        r  r_  z%ECC200DataMatrix._create_empty_matrixo  s>    q# 	( 	(AMM4&3,''''r  c                 @   g }|D ]}|                      t          | j        | j        z            t          | j        | j        z                      }t          |          D ]+\  }}t          |          D ]\  }}|||dz            |dz   <   ,t          |          D ]j\  }}	|dk    r!t          |	          D ]\  }}
|dz   dz  |	|<   ,|dz   t          |          k    rt          |	          D ]
\  }}
d|	|<   ]d|	d<   |dz  |	d<   k|                    |           |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  st    	# 	#F..D$t'7788D$t'7788 F
 %V,, , ,4( , ,GAt'+F1Q3K!$$, $F++ 	$ 	$366"+C.. - -3"#a%1A-Uc&kk))"+C.. # #3!"A# CF!eCGGNN6""""r  c                 :   g }t          dt          |          | j                  D ]t}|||| j        z            }d}|t          |d                   k     rEg }|D ]}|||         z  }|                    |           |dz  }|t          |d                   k     Eu|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99 	 	AAa 0001EAc%(mm##
  ) )C#a&(JJj)))Q c%(mm## r  c                    t          | d          r| j        S |                     | j                  }||                     || j                  z  }|                     |          }|                     |          }|                     |          }| 	                    |          | _        | 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24..wDDD$$W--008866|DD//88|r  c                 V    | j         | j        z  | _        | j        | j        z  | _        d S r0  )r  barWidth_heightr	  _width)r  r  s     r  computeSizezECC200DataMatrix.computeSize  s(    '$-7&6r  c                     t          | j                  D ]^\  }}t          |          D ]I\  }}|rB|                     | j        || j        z  z   | j        || j        z  z   | j        | j                   J_d S 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 J J( ( (     D  @  @ @ @  $  	% 	% 	%	A 	A 	A	A 	A 	A	A 	A 	A	A 	A 	A	+ 	+ 	+9 9 9v  ,    8     7 7 7	 	 	 	 	r  r  N)__all__r<  r8  r7  !reportlab.graphics.barcode.commonr  r  r1  r  r  <module>r     sZ   
'''' 7' ;	'
 ?' G'  	$'  	.'  	:'  	M'  	-'$  	H%'*  	$+'2  	J3':  	$;'D  	@E'R
,, 6 5 5 5 5 5c c c c cw c c c c cr  