o
    vhE                     @   s   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& d&eZd'S )()ECC200datamatrix   )   0      o   >      )   D            \      
   )
                  t      n   =      )                  '      <   a   x   r   ))         [   r   *         r%      d         )   r%         _   	      w   r   -         S   r   r:   )r<      r/   r"      K   B   r      r-   m      ^   r      r   Z   r>      )r   r=      r6      G   r!      r>      r(         O   l   R         r;      r   )4      X   r   rB   r"                  r   rZ   rY   r   rT   r   |   r         `   2      r   )      +   r%   rJ   r`   g   rS   %         5   r?   "      y      r   r   r-         r&   rh   rI   r!   ]   r   $   )$r#      r0               r^   f   r&   T         r\   P         r:   rK      r
   !   e      r5   r8   s   ,   r   r_   ;      rE   b   Q   p   r+   )*M   rb   r         &      r(      i   z   rK   r#      r0      r   r5   r/   r6      r      r   9   rm   rY      rN   r   6   r   r      E   ra            r   r6   r   r   )0r#      rT   r   r`       u   r      r   r   rd   r   r>      W      j         v   r	   rg   rF   ri   r      rW   r&   r/   r@   r   r;   r   rQ   r   rX   r      r   rL   r   r   r-   r   rN   rE   r   8   )8r   r6   r   r   r   rn   r{      r/      r   ri      r3         r      rr   r   r      r   r   r      rt      r      r      r   r   r   r      r   r            r   r#   rs   C   r   r   rZ   re   r   k   rI   rj      .   r   )>r0   rq      ra   r      r"   r   r   r>   r      r   rP      rg   r   r   r   r   r#   ?   r[   rV   rv   r   r      r   @   r   rJ      r   r      rR   rt   3   r   r   r   (   ru   r>   rn      r   rX   ri   r   r   r   r   rD   r      r]   V   /   r      r
   )Dr{   r      Y   r\      r   r   r   r   r   rH      rr   I   rs   r-   rp   r      r   r[   r)   r   r
   r   rq   r-   r   rL         r@      r(   r   r   r   rz   r   r{   r   r`   r   rd   rp   r      r^   rA   r   rU   rT   r   1   r   rc   r   r   r   rP   r(   r   r   r`   rf   rQ   r;   (   ir   r   r   rK   rE   rA   rj      r   r   r   r0   re   r   r   r   r=   r"   r   r   r   r   r         r   r	   7   r   rc   r   r      r   r`   r      r   rf   r   N   r   }      r   r   rw   rH   r;   ro   r   r9   c   r   r   r   r   r8   r(         r   r*   r   L   r{      r[   r   r%   r_   r'   rr   r   rN   r   r   h   rb   r~   r   rO      rP      ~   rM   rp   rk   r6   J      r   r   ry   r#   r   r   r   r,   r   r^   rV   r   rW   r/   r   r   rd   ra   r   r   r   r1   r   r&      r   r   r-   r   r   r   r   r   r   rX   r   r   r   r]   r   rx   rt   r5      rF   r      r   r   r   rz   r+      rg   r   r   rU   r   r   r   rI   r   r   r   rR   r    q   r      r   r)   r|   r   rT   r   rB   r   r   r   rs   r   r   r@   r   r3   #   r4   r      r?      r   r<   r   r   r   r   U   ri      A   rS   r   r>   r   r   r7   r   r   rQ   H   r}   r   r   r\   r   r.   r   rh   r   rD   rL   {      r   r   rY   r   r   r   r   :   r      r:   r   r   r
   rn   rm   r   rC   r   rZ   r   rl   F   r   rv   r!   rJ   r   r2   r   r$   r   ru   r   rG   rq   r   r   r   (   r   rK   r   r   r   r   r   r   r9   rF   r   r   r   r   r   r   r~   rd   r   r   r\   r   rZ   rR   r   rP   r   r7   r	   r   r   r_   rq   r;   r   r.   r   r   r6   r:   rr   r   r   r   r   rU   r   r   ro   r   r   r{   r   r   r1   r   r   r   r   r   r   r=   r   r   r   rb   r   r   r   rE   r   r   r   r   r*   r}   r   ru   r'   rQ   r   r   r   r   r5   rV   r   rw   r   r   r   r   r   r4   r-   r   r   r   r   rj   r   r   r   r"   r   r2   rY   r+   ry   r!   r   rv   r   r   r   r   r   r   r   r   r   r   rN   r   r   re   r   rT   r   r   rl   r   r   r   r   r   rW   rX   r   r   r   ra   r/   r   r   r   rS   r   r   rI   r   rc   r   r   r   r   r#   r   r   r   r   rC   r   rD   r>   r   ri   rm   r0   r   r   r<   r   r%   r    r   rs   r   r   r   r   rx   r   r^   rJ   r,   r   r   r   r   rf   r   r   rO   r)   rn   rk   r
   rp   r   r   rH   r[   r   r   r   r   r   r   rM   r   r   r$   r&   r   r   r   r   r   r   r@   r   rg   r   r   r   r   rG   r   r|   rL   rB   rt   r(   r   r   r]   r   r   rh   r   r   r   r   r   r`   r3   r   r8   r   rA   r   rz   r?   r   r       )Barcodec                   @   s   e Zd ZdZdZdd Zdd Zdd Zd	d
 Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& Zd'd( Zd)d* Zd+d, Zd-d. Zd/S )0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                 O   sd   t j| g|R i | d| _d| _d| _d| _d| _d| _| j| jd  | _| j| jd  | _	d S )Nr   rK   r   r   )
r  __init__row_modulescol_modulesrow_regionscol_regionscw_datacw_eccrow_usable_modulescol_usable_modules)selfargskwargs r  i/var/www/html/hyperkenya/venv/lib/python3.10/site-packages/reportlab/graphics/barcode/ecc200datamatrix.pyr  a   s   zECC200DataMatrix.__init__c                 C   s6   d| _ | jD ]}t|dkrd| _  d S q| j| _d S )Nr   r   r  )validvalueord	validated)r  cr  r  r  validaten   s   
zECC200DataMatrix.validatec                 C   s  t |}g }|dks|dkr|dks|dkrA|dkrA|dkr'||d  |S |dkr8|dkr8||d  |S ||d  |S |d	krU|d
krU|d	 || |S |dkr]|dkse|dkr|dkr|d |dkr{|dkr{||d  |S ||d  |S |dkr|dkr|d ||d  |S |dkr|dkr|d |d || t|d 7 }|S td||f )Nr   r   r   r   rF   r   r   r   r  r   r   r   r*   r5   r   r   r`   rs   rK   r   r   r   zCannot encode %s (%s))r  append_encode_c40_charchr	Exception)r  charoencodedr  r  r  r  w   s@   (

 

	

z!ECC200DataMatrix._encode_c40_charc           	      C   s4  g }|D ]	}||  |7 }qt|d r|d t|d sg }|d tdt|dD ]*}|||d  }|d d |d d  |d  d }||d  ||d  q.|d	 t|| jkritd
t|| jk r|d t|| jk rdt|d  d d }|d| d	  t|| jk s||S )Nr   r  r   i@  r   r   rK      r   z4Too much data to fit into a data matrix of this sizerC   r   rN   )r  lenr  ranger	  r  )	r  r  r  r  	codewordsichunktotalrr  r  r  _encode_c40   s.   

$

zECC200DataMatrix._encode_c40c                 C   s   ||A S Nr  r  int1int2r  r  r  _gfsum   s   zECC200DataMatrix._gfsumc                 C   s,   |dks|dkr
dS t t| t|  d  S )Nr  r   )ALOGVALLOGVALr)  r  r  r  
_gfproduct   s   zECC200DataMatrix._gfproductc                 C   s   t | }dg| }|D ]1}| ||d }t|d ddD ]}| ||| ||< |dkr;| ||d  || ||< qq|  |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   )FACTORSr,  r!  r/  reverse)r  datanum_code_words
cw_factors
code_words	data_wordtmpjr  r  r  _get_reed_solomon_code   s   
z'ECC200DataMatrix._get_reed_solomon_codec                 C   s<   | d}g }tddD ]}|||? d@  q|  |S )Nr  r   r   )popr!  r  r2  )r  r3  r  bitsr#  r  r  r  _get_next_bits   s   
zECC200DataMatrix._get_next_bitsc                 C   sb   |dk r|| j 7 }|d| j d d  7 }|dk r(|| j7 }|d| jd d  7 }|| j| |< d S )Nr  r   r   )r  r  _matrix)r  rowcolbitr  r  r  
_place_bit   s   

zECC200DataMatrix._place_bitc                 C   s   |  |}| | jd d|d  | | jd d|d  | | jd d|d  | d| jd |d  | d| jd |d  | d| jd |d  | d| jd |d  | d| jd |d  d S )	Nr   r  rK   r   r   r   r   r   r=  rB  r  r  r  r3  r<  r  r  r  _place_bit_corner_1      
z$ECC200DataMatrix._place_bit_corner_1c                 C   s   |  |}| | jd d|d  | | jd d|d  | | jd d|d  | d| jd |d  | d| jd |d  | d| jd |d  | d| jd |d  | d| jd |d  d S 	Nr   r  rK   r   r   r   r   r   rC  rD  r  r  r  _place_bit_corner_2   rF  z$ECC200DataMatrix._place_bit_corner_2c                 C   s   |  |}| | jd d|d  | | jd d|d  | | jd d|d  | d| jd |d  | d| jd |d  | d| jd |d  | d| jd |d  | d| jd |d  d S rG  rC  rD  r  r  r  _place_bit_corner_3   rF  z$ECC200DataMatrix._place_bit_corner_3c                 C   s   |  |}| | jd d|d  | | jd | jd |d  | d| jd |d  | d| jd |d  | d| jd |d  | d| jd |d  | d| jd |d  | d| jd |d  d S )	Nr   r  r   rK   r   r   r   r   rC  rD  r  r  r  _place_bit_corner_4  s   
z$ECC200DataMatrix._place_bit_corner_4c                 C   s   |  |}| |d |d |d  | |d |d |d  | |d |d |d  | |d |d |d  | |d ||d  | ||d |d  | ||d |d  | |||d  d S )	NrK   r  r   r   r   r   r   r   )r=  rB  )r  r3  r?  r@  r<  r  r  r  _place_bit_standard  s   
z$ECC200DataMatrix._place_bit_standardc                 C   s  | j }| j}| ||| _d}d}	 ||kr |dkr | | n?||d kr4|dkr4|d r4| | n+||d krJ|dkrJ|d dkrJ| | n||d kr_|dkr_|d dkr_| | 	 ||k rx|dkrx| j| | du rx| ||| |d8 }|d7 }|dk s||krnq`|d7 }|d7 }	 |dkr||k r| j| | du r| ||| |d7 }|d8 }||ks|dk rnq|d7 }|d7 }||kr||krnq| jD ]}t	d|D ]}|| du rd||< qq| 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  TrK   r   Nr   r   )
r  r  _create_empty_matrixr>  rE  rH  rI  rJ  rK  r!  )r  r3  rowscolsr?  r@  r#  r  r  r  _create_matrix  sX     
"
"

'zECC200DataMatrix._create_matrixc                 C   s   g }d}d}t | j| j }t | j| j }|| jk r_|| jk rT|| }|| }||||  }	tdt|	D ]}
|	|
 |||  |	|
< q7||	 |d7 }|| jk s d}|d7 }|| jk s|S Nr  r   )intr  r  r  r  r!  r   r  )r  matrixregions
col_offset
row_offsetrM  rN  r_offsetc_offsetregionr#  r  r  r  _create_data_regionsY  s&   




z%ECC200DataMatrix._create_data_regionsc                 C   s(   g }t d|D ]
}|d g|  q|S )Nr  )r!  r  )r  r?  r@  rR  r#  r  r  r  rL  o  s   z%ECC200DataMatrix._create_empty_matrixc                 C   s   g }|D ]t}|  t| j| j t| j| j }t|D ]\}}t|D ]\}}|||d  |d < q$qt|D ]:\}}	|dkrRt|	D ]\}}
|d d |	|< qDq8|d t|krht|	D ]\}}
d|	|< q^q8d|	d< |d |	d< q8|| q|S )Nr   r  rK   r0  )	rL  rQ  r  r  r  r  	enumerater   r  )r  rS  wrappedrX  rR  r#  rM  r9  r3  r?  r@  r  r  r  _wrap_data_regions_with_findersu  s.   
z0ECC200DataMatrix._wrap_data_regions_with_findersc                 C   s   g }t dt|| jD ]3}|||| j  }d}|t|d k r>g }|D ]}||| 7 }q$|| |d7 }|t|d k s q|S rP  )r!  r   r  r  )r  rS  mergedr#  r$  r9  
merged_rowr?  r  r  r  _merge_data_regions  s   
z$ECC200DataMatrix._merge_data_regionsc                 C   sh   t | dr| jS | | j}|| || j7 }| |}| |}| |}| 	|| _| j
  | jS )Nr  )hasattrr  r'  r  r:  r
  rO  rY  r\  r_  r2  )r  r  rR  data_regionsr[  r  r  r  encode  s   




zECC200DataMatrix.encodec                 G   s    | j | j | _| j| j | _d S r(  )r  barWidth_heightr  _width)r  r  r  r  r  computeSize  s   zECC200DataMatrix.computeSizec                 C   sZ   t | jD ]%\}}t |D ]\}}|r)| | j|| j  | j|| j  | j| j qqd S r(  )rZ  r  rectxrc  y)r  ri  r?  rh  r3  r  r  r  draw  s   zECC200DataMatrix.drawN)__name__
__module____qualname____doc__rc  r  r  r  r'  r,  r/  r:  r=  rB  rE  rH  rI  rJ  rK  rO  rY  rL  r\  r_  rb  rf  rj  r  r  r  r  r  Z   s2    	" ;r  N)__all__r1  r.  r-  !reportlab.graphics.barcode.commonr  r  r  r  r  r  <module>   sL   	")