a
    ¦¾deÜE  ã                   @   sR   d Z 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 ))ZECC200datamatrix)éä   é0   é   éo   é>   )é   éD   é�   é†   éð   é\   éþ   )
é   é   é¹   é¦   éß   éø   ét   éÿ   én   é=   )é¯   éŠ   éÍ   é   éÂ   é¨   é'   éõ   é<   éa   éx   )é)   é™   éž   é[   r   é*   éŽ   éÕ   r    é²   éd   éò   )éœ   r    éÀ   éü   é_   é	   é�   éw   r   é-   é   éº   éS   r   )r6   éÃ   r*   r   é¼   éK   éB   r   éñ   r(   ém   é�   é^   r   éá   r   éZ   r8   )r   r7   éô   r0   éé   éG   r   é   r8   é    r#   é‘   éý   éO   él   éR   é   é®   r5   é¬   )é4   é¾   éX   r   r<   r   é°   é   é›   éÅ   éû   r   rS   rR   é   rM   r   é|   r   éµ   é¸   é`   é2   éÁ   )éÓ   éç   é+   r    rC   rZ   ég   rL   é%   é—   éª   é5   r9   é"   éù   éy   é   r   r   r(   é�   éˆ   r!   rb   rB   r   é]   r   )$r   é   r+   éÚ   é‚   éú   é¢   rX   éf   r!   éT   é³   éÜ   rU   éP   é¶   éå   r4   rD   é   r   é!   ée   é‰   r/   r2   és   é,   r   rY   é;   é   r?   éb   éQ   ép   )*éM   r\   r{   é   é   é&   é   r#   é÷   éi   éz   rD   r   é…   r+   é   r   r/   r*   r0   é§   r‰   éÖ   r   é9   rg   rR   é   rG   r�   é6   rz   r   éÊ   éE   r[   é–   é±   éâ   rV   r0   rV   )0r   é„   rM   r   rZ   é    éu   r‡   éî   r‹   rš   r^   r   r8   éí   éW   é¿   éj   é   é“   év   r   ra   r@   rc   r   éƒ   rP   r!   r*   r:   r   r5   r
   rJ   r}   rQ   rœ   é»   r    rE   r   r“   r(   r   rG   r?   r…   )8r   r0   r   rš   r   rh   rt   éÐ   r*   é   r   rc   éæ   r-   é×   éë   r”   éŸ   é$   r   r†   éÈ   r—   r‘   r   é’   rm   éê   r™   éË   r¥   éè   r   rš   r‡   r”   éÉ   r™   r   éÏ   é¤   é   r{   r   rl   éC   rˆ   r   rS   r_   r®   ék   rB   rd   é�   é.   )>r+   rk   é©   r[   r   éÒ   r   r¡   r’   r8   r°   é½   r¶   rI   éÄ   ra   r   r‚   r	   r¦   r   é?   rT   rO   ro   rž   r   éÝ   r   é@   ér   rC   é¡   r}   r    é   rK   rm   é3   r¼   rœ   é
   é(   rn   r8   rh   é£   r„   rQ   rc   rx   rµ   r¯   é   r>   r   éà   rW   éV   é/   é   éÌ   )Drt   r   é­   éY   rU   é•   r©   é8   rÍ   ry   r    rA   éš   rª   éI   rl   r(   rj   r   é´   r­   rT   r$   r•   r   rŠ   rk   r(   r   rE   éã   éì   r:   é‹   r#   r   r’   r�   rs   r   rt   r¯   rZ   r¹   r^   rj   r   éï   rX   r;   r~   rN   rM   r   é1   r¯   r]   rº   r¾   r‘   rI   r#   r—   r¼   rZ   r`   rJ   r5   )rV   rÆ   rÃ   rÊ   r   é   r4   é   r   r   rª   r&   r   rÏ   r   r   (   iÿÿÿr   r�   r
   rD   r?   r;   rd   é   r†   r–   r‹   r+   r_   r‘   r¹   rx   r7   r   r¿   rÓ   rž   r	   r   éó   éŒ   r}   r   é7   r¡   r]   r­   rV   éÛ   r»   rZ   rÄ   éÞ   r|   r`   r   éN   rµ   é}   é‡   rŒ   r¥   rp   rA   r5   ri   rÒ   r3   éc   r   r×   rÏ   r³   r2   r#   éÔ   éÇ   r¨   r%   rÁ   éL   rt   éÙ   rT   rÊ   r    rY   r"   rª   r   rG   r   r   éh   r\   rw   rÈ   rH   é«   rI   é¥   é~   rF   rj   re   r0   éJ   é   r˜   rÅ   rr   r   rÌ   r£   rË   r'   r�   rX   rO   r·   rP   r*   r©   r   r^   r[   r±   r�   r    rØ   r´   r!   é€   rÐ   r   r(   r�   r«   r¼   rÔ   r   r   rQ   rÆ   rÀ   rƒ   rW   r½   rq   rm   r/   éÆ   r@   r   é˜   r€   r   r   rs   r&   éÑ   ra   r—   rÇ   rN   r   rÖ   r™   rB   rÕ   r‡   r‰   rK   r   éq   r¦   éÎ   rœ   r$   ru   rº   rM   r®   r<   r   r   r   rl   rˆ   r¬   r:   r{   r-   é#   r.   rÃ   é·   r9   éØ   r„   r6   ry   rÑ   r²   r   éU   rc   éö   éA   rL   r   r8   r’   r   r1   r¶   r¸   rJ   éH   rv   r§   r�   rU   rÉ   r)   rÍ   rb   rz   r>   rE   é{   é   r‚   r¯   rR   rÂ   rš   r¤   r¢   é:   r“   é”   r4   r   rŸ   r   rh   rg   rÎ   r=   r…   rS   r~   rf   éF   rŽ   ro   r   rC   r°   r,   r¾   r   r›   rn   r   rÙ   rk   rŠ   r•   r”   (   r�   rD   rx   rŒ   rŸ   r˜   r¾   rî   r3   r@   rÒ   r“   r   r�   r¿   r   rw   r^   rÓ   r¨   rU   rÞ   rS   rK   r‘   rI   rö   r1   r   r·   r   rY   rk   r5   rÍ   r)   rÑ   r¬   r0   r4   rª   rú   r   r³   rü   rN   rè   r¤   ri   rÝ   r   rt   rÎ   rÆ   rØ   r   rÏ   r‚   rÇ   r›   rˆ   r7   ré   rû   rø   r\   r   r|   r¦   r?   rÖ   rÛ   r®   r£   r%   rv   rù   rn   r"   rJ   r²   rz   r’   r   r/   rO   r�   rp   r‰   r¹   r{   r¼   rë   r.   r(   râ   rô   rÿ   rÜ   rd   rž   rä   r‹   r   rà   r,   rR   r&   rr   r   rá   ro   rç   r©   r…   r†   ræ   rð   r¥   rý   r   r¯   rG   r§   r¢   r_   rÈ   rM   r™   r­   rf   r   r    rÊ   r‡   r}   rP   rQ   rƒ   rÐ   r   r[   r*   r«   rº   rœ   rL   rò   r–   rB   r   r]   rÕ   r~   r¡   rÔ   r   rå   rÅ   rµ   rŽ   r=   rÉ   r>   r8   r÷   rc   rg   r+   r°   r�   r6   r   r    r   r¸   rl   r   rñ   r¶   rÂ   rq   rË   rX   rC   r'   r×   r€   r»   rê   r`   ró   r•   rH   r$   rh   re   r   rj   r   rŠ   rA   rT   r�   rã   rï   rÀ   r   rß   rF   r   rí   r   r!   r
   r   rõ   r´   r	   ry   r:   r—   ra   rì   rþ   rV   rÃ   rÙ   rÄ   ru   rE   r<   rm   r#   r„   r   rW   r   r½   rb   rÚ   rÁ   r   r   r   rZ   r-   rÌ   r2   rš   r;   r±   rs   r9   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
    rx   c                 O   sd   t j| g|¢R i |¤Ž d| _d| _d| _d| _d| _d| _| j| jd  | _| j| jd  | _	d S )Nr}   rD   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  úd/var/www/sistema_ama/venv/lib/python3.9/site-packages/reportlab/graphics/barcode/ecc200datamatrix.pyr  a   s    zECC200DataMatrix.__init__c                 C   s4   d| _ | jD ]}t|ƒdkrd| _  q0q| j| _d S )Nr�   r   r   )ZvalidÚvalueÚordÚ	validated)r  Úcr  r  r  Úvalidaten   s    
zECC200DataMatrix.validatec                 C   s~  t |ƒ}g }|dks4|dkr$|dks4|dkr||dkr||dkrL| |d ¡ n.|dkrl|dkrl| |d ¡ n| |d ¡ nþ|d	kr¢|d
kr¢| d	¡ | |¡ nØ|dkr²|dksÂ|dkrü|dkrü| d¡ |dkrì|dkrì| |d ¡ n| |d ¡ n~|dk�r*|dk�r*| d¡ | |d ¡ nP|dk�rj|dk�rj| d¡ | d¡ ||  t|d ƒ¡7 }ntd||f ƒ‚|S )Nr˜   r   r�   rù   r@   r¥   r}   rÂ   r   r„   ry   r¾   r%   r/   r�   r“   rZ   rl   rD   rî   r   rí   zCannot encode %s (%s))r  ÚappendÚ_encode_c40_charÚchrÚ	Exception)r  ÚcharÚoÚencodedr  r  r  r  w   s2    (
 



z!ECC200DataMatrix._encode_c40_charc           	      C   s"  g }|D ]}||   |¡7 }qt|ƒd r4| d¡ qg }| d¡ tdt|ƒdƒD ]T}|||d … }|d d |d d  |d  d }| |d ¡ | |d ¡ qR| d	¡ t|ƒ| jkrÈtd
ƒ‚t|ƒ| jk �r| d¡ t|ƒ| jk �rdt|ƒd  d d }| d| d	 ¡ qâ|S )NrÚ   r   r¦   i@  r�   rÄ   rD   é   r   z4Too much data to fit into a data matrix of this sizer=   rÎ   rG   )r  Úlenr  Úranger  r  )	r  r  r  r  Z	codewordsÚiÚchunkÚtotalÚrr  r  r  Ú_encode_c40™   s*    
$

zECC200DataMatrix._encode_c40c                 C   s   ||A S ©Nr  ©r  Zint1Zint2r  r  r  Ú_gfsum¹   s    zECC200DataMatrix._gfsumc                 C   s0   |dks|dkrdS t t| t|  d  S d S )Nr   r   )ÚALOGVALÚLOGVALr&  r  r  r  Ú
_gfproduct¼   s    zECC200DataMatrix._gfproductc                 C   s†   t | }dg| }|D ]b}|  ||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  ÚdataZnum_code_wordsZ
cw_factorsZ
code_wordsZ	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  r-  )r  r.  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 rP|| j7 }|d| jd d  7 }|| j| |< d S )Nr   rx   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   rD   rÚ   rx   rV   rÁ   rÆ   ©r4  r9  r
  r  ©r  r.  r3  r  r  r  Ú_place_bit_corner_1ç   s    
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   rD   r�   rx   rV   rÁ   rÆ   r:  r;  r  r  r  Ú_place_bit_corner_2ò   s    
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 r=  r:  r;  r  r  r  Ú_place_bit_corner_3ý   s    
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Ú   rD   rx   rV   rÁ   rÆ   r:  r;  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 )	NrD   r   r�   rÚ   rx   rV   rÁ   rÆ   )r4  r9  )r  r.  r6  r7  r3  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rf|dkrf|d rf|  |¡ nV||d kr’|dkr’|d dkr’|  |¡ n*||d kr¼|dkr¼|d dkr¼|  |¡ ||k rì|dkrì| j| | du rì|  |||¡ |d8 }|d7 }|dk �s||kr¼�qq¼|d7 }|d7 }|dk�rZ||k �rZ| j| | du �rZ|  |||¡ |d7 }|d8 }||k�s†|dk �r$�q†�q$|d7 }|d7 }||kr"||kr"�q¬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
        rx   r   rD   rŒ   Nr�   rÚ   )
r
  r  Ú_create_empty_matrixr5  r<  r>  r?  r@  rA  r  )r  r.  ÚrowsÚcolsr6  r7  r   r  r  r  Ú_create_matrix  sH      
"(
zECC200DataMatrix._create_matrixc                 C   s²   g }d}d}t | j| j ƒ}t | j| j ƒ}|| jk r®|| jk r || }|| }|||| … }	tdt|	ƒƒD ]}
|	|
 ||| … |	|
< qn| |	¡ |d7 }q6d}|d7 }q,|S ©Nr   r�   )Úintr
  r  r  r  r  r  r  )r  ÚmatrixÚregionsÚ
col_offsetÚ
row_offsetrC  rD  Zr_offsetZ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  r6  r7  rH  r   r  r  r  rB  o  s    z%ECC200DataMatrix._create_empty_matrixc                 C   sö   g }|D ]è}|   t| j| j ƒt| j| j ƒ¡}t|ƒD ].\}}t|ƒD ]\}}|||d  |d < qHq8t|ƒD ]t\}}	|dkr¤t|	ƒD ]\}}
|d d |	|< qˆqp|d t|ƒkrÐt|	ƒD ]\}}
d|	|< q¼qpd|	d< |d |	d< qp| |¡ q|S )Nr�   r   rD   r+  )	rB  rG  r  r  r  r  Ú	enumerater  r  )r  rI  ÚwrappedrL  rH  r   rC  r0  r.  r6  r7  r  r  r  Ú_wrap_data_regions_with_findersu  s(    þz0ECC200DataMatrix._wrap_data_regions_with_findersc                 C   st   g }t dt|ƒ| jƒD ]X}|||| j … }d}|t|d ƒk rg }|D ]}||| 7 }qH| |¡ |d7 }q0q|S rF  )r  r  r  r  )r  rI  Úmergedr   r!  r0  Z
merged_rowr6  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  r1  r	  rE  rM  rP  rR  r-  )r  r  rH  Zdata_regionsrO  r  r  r  Úencode   s    




zECC200DataMatrix.encodec                 G   s    | j | j | _| j| j | _d S r%  )r  ÚbarWidthZ_heightr  Ú_width)r  r  r  r  r  ÚcomputeSize°  s    zECC200DataMatrix.computeSizec                 C   sZ   t | jƒD ]J\}}t |ƒD ]8\}}|r|  | j|| j  | j|| j  | j| j¡ qq
d S r%  )rN  r  ZrectÚxrU  Úy)r  rY  r6  rX  r.  r  r  r  Údraw´  s    üzECC200DataMatrix.drawN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__rU  r  r  r  r$  r'  r*  r1  r4  r9  r<  r>  r?  r@  rA  rE  rM  rB  rP  rR  rT  rW  rZ  r  r  r  r  r  Z   s0   	" ;r  N)Ú__all__r,  r)  r(  Z!reportlab.graphics.barcode.commonr  r  r  r  r  r  Ú<module>   s*   Þ)