
    BPc                         d Z ddlZddlZddlmZmZmZ ddlmZ	  e
d          \  ZZ e
d          \  ZZZdZ	 ddlmZ n# e$ r Y nw xY w G d	 d
e          ZdS )z2
Base module for rendering barcodes for Inkscape.
    N)GroupTextElement	Rectangle)inkex_gettext      z4font-size:%dpx;text-align:center;text-anchor:middle;)Optionalc                   P    e Zd ZdZdZdZdZd Zd Zd Z	dd	Z
d
 Zd Zd Zd ZdS )Barcodez.Provide a base class for all barcode renderers   	   Nc                     t           j                            t          d                              || j        |                     dS )zCause an error to be reportedz&Error encoding '{}' as {} barcode: {}
ERROR)sysstderrwrite_formatname)selftextmsgs      ./usr/share/inkscape/extensions/barcode/Base.pyerrorzBarcode.error.   sD    
788??diQTUU	
 	
 	
 w    c                      t          d          )zn
        Replace this with the encoding function, it should return
        a string of ones and zeros
        z'You need to write an encode() function.)NotImplementedError)r   r   s     r   encodezBarcode.encode5   s    
 ""KLLLr   c                    |pi }|                     dd           | _        g | _        g | _        t	          |                     dd                    | _        t	          |                     dd                    | _        |                     dd           | _        |                     dd          | _        |                     d| j	                  | _
        |                     d	t                    | _        | j        r,t          | j                            d
                    | _        | j        st          t!          d                    d S )Ndocumentxr   yr   scale   heighttext_posz//@idz No string specified for barcode.)getr    	known_ids_extraintpos_xpos_yr   r#   default_heightr%   TEXT_POS_BOTTOMpos_textlistxpath
ValueErrorr   )r   params     r   __init__zBarcode.__init__<   s   		*d333**++
3**++
IIfd++	YYw**
ii$*=>>		*o>>= 	@!$-"5"5g">">??DNy 	DQABBCCC	D 	Dr   elementc                     d}|| j         v r#|dz  }d                    |          }|| j         v #| j                             |           |S )z%Get the next useful id (and claim it)r   r$   zbarcode{:d})r(   r   append)r   r   indexs      r   get_idzBarcode.get_idO   s\    dn$$QJE ''..D dn$$ 	d###r   c                     ddl m} | j        |d<   | j        |d<   d|d<   | j                             ||fi |                                           dS )z?Add an extra barcode along side this one, used for ean13 extrasr$   )get_barcoder%   r    Nr#   ) r;   r%   r    r)   r7   generate)r   barcodekwr;   s       r   add_extra_barcodezBarcode.add_extra_barcodeX   sm    !!!!!!{8:7;;w55"55>>@@AAAAAr   c           	      "   |                      | j                  }|dk    rdS |                     d          }t                      }|                    d|           |                    dd           |j                            | j        | j                   | j	        r|j        
                    | j	                   d}d}t	                      }|                     |          D ]}|                     t          |d                             }t          |d                   t          |d	                   z  }	|d
         rA|                    |d                    t                      }
|
                    dt!          |                     |
                    dt!          |d                              | j        t$          k    r1|
                    dt!          |d         | j        z                        |
                    dd                    ||                     |
                    d	t!          |	                     |
                    dt!          |d                              |                    |
           ||	z  }|dz  }| j        D ]}||                    |           |}t/                      }|                    dt!          t          |dz                                 |                    dt!          t1          |          | j        z   dz
                       | j        t2          k    r@|                    dt!          | j        t7          |          z   | j        z                        |                    dt8          | j        z             |                    dd           |                    dd                    |                     t!          | j                  |_        |                    |           |S )z'Generate the actual svg from the codingr   Nr>   idstylezfill: black;r$   r   widthr   topr!   r"   z
{}_bar{:d}r%   r   z	xml:spacepreservez{}_text)r   r   r9   r   set	transformadd_translater+   r,   r#   	add_scalegraphical_array	get_styler*   addr   strr/   TEXT_POS_TOP	font_sizer   r7   r)   r   minr.   r%   maxTEXT_TEMPLATE)r   stringr   r>   bar_id
bar_offsettopsdatumrC   rD   rectextra	bar_widthr   s                 r   r=   zBarcode.generatea   sv   TY''WF{{9%% ''D$G^,,,''
DJ???: 	4''
333
uu))&11 	 	ENN3uQx==11E aMMCg$7$77EW~ 
%u&&& {{c*oo...c%,//000=L00HHS#eElT^&C"D"DEEE|224@@AAA#e**---3uX#7#7888t$$$%JaKFF[ 	& 	&E u%%%	}}c#i!m,,--...c#d))dn4q899:::=O++HHS#dkCII5FGGHHH-$.8999j)))y''--...	NN	tr   c                 >    d t          j        |          D             S )z3Converts black and white markets into a space arrayc                 P    g | ]#\  }}|t          t          |                    f$S  )lenr0   ).0r!   r"   s      r   
<listcomp>z+Barcode.graphical_array.<locals>.<listcomp>   s-    FFFdaCQLL!FFFr   )	itertoolsgroupby)r   codes     r   rK   zBarcode.graphical_array   s!    FFi.?.E.EFFFFr   c                     dddd}|t           k    rt          | j                  |d<   |t          k    r/t          | j                  t          | j        dz            z   |d<   |t
          k    rd|d<   |S )	z5Returns the styles that should be applied to each barr$   r   T)rD   rE   r   r%   r   Fr   )	BLACK_BARr*   r%   TALL_BARrP   	WHITE_BAR)r   r8   results      r   rL   zBarcode.get_style   s|    Q66I"4;//F8H"4;//#dnq6H2I2IIF8I#F7Or   )r5   )__name__
__module____qualname____doc__r-   rP   r   r   r   r4   r9   r@   r=   rK   rL   r^   r   r   r   r   '   s        88NID  M M MD D D&   B B B; ; ;zG G G	 	 	 	 	r   r   )rm   rb   r   inkexr   r   r   inkex.localizationr   r   ranger.   rO   rh   rf   rg   rS   typingr	   ImportErrorobjectr   r^   r   r   <module>rt      s   &      



 / / / / / / / / / / 1 1 1 1 1 1"'%(( ,#(588  IxF	 	 	 	D	D D D D Df D D D D Ds   A A
	A
