o
    Ü&ìVÜE  ã                   @   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  ú]/var/www/html/env/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 r˜d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r‰nq`|d7 }|d7 }	 |dkr«||k r«| j| | du r«|  |||¡ |d7 }|d8 }||ks»|dk r¼nq“|d7 }|d7 }||krÎ||krÎnq| jD ]}t	d|ƒD ]}|| du råd||< qÙqÒ| 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   ÿþýüûúù	÷õóñîëçã"Þ)