
    BPc                        d Z ddlmZ ddlmZ ddlZddlmZmZmZm	Z	 ddl
mZ  G d de          Z G d	 d
e          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Ze                                  G d de          Z G d d e          Z G d! d"e          Z G d# d$e          Z G d% d&ej                  Z e!d'k    r e             "                                 dS dS )(z 
Provide the QR Code rendering.
    )print_function)productN)Group	RectangleUsePathElement)inkex_gettextc                       e Zd Zd ZdS )QRLengthErrorc                     || _         d S N)message)selfr   s     7/usr/share/inkscape/extensions/render_barcode_qrcode.py__init__zQRLengthError.__init__$   s        N)__name__
__module____qualname__r    r   r   r   r   #   s#            r   r   c                       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ed             Zed             Zed             ZdS )QRCode      c                 L    d| _         || _        g | _        g | _        d| _        d S )N   r   )
typeNumbererrorCorrectLevel
qrDataListmodulesmoduleCount)r   
corrections     r   r   zQRCode.__init__,   s-    !+r   c                     | j         S r   r   r   s    r   getTypeNumberzQRCode.getTypeNumber3   
    r   c                     || _         d S r   r$   )r   r   s     r   setTypeNumberzQRCode.setTypeNumber6   s    $r   c                     g | _         d S r   r   r%   s    r   	clearDatazQRCode.clearData9   s    r   c                 :    | j                             |           d S r   )r   append)r   datas     r   addDatazQRCode.addData<   s    t$$$$$r   c                 *    t          | j                  S r   )lenr   r%   s    r   getDataCountzQRCode.getDataCount?   s    4?###r   c                     | j         |         S r   r+   r   indexs     r   getDatazQRCode.getDataB   s    u%%r   c                 R    | j         |         |         | j         |         |         ndS NF)r    )r   rowcols      r   isDarkzQRCode.isDarkE   s+    )-c):3)?)Kt|C %%QVVr   c                     | j         S r   r!   r%   s    r   getModuleCountzQRCode.getModuleCountH   s    r   c                 V    |                      d|                                            d S r9   )_make_getBestMaskPatternr%   s    r   makezQRCode.makeK   s(    

5$224455555r   c                     d}d}t          d          D ]B}|                     d|           t                              |           }|dk    s||k    r|}|}C|S )Nr      T)rangerA   QRUtilgetLostPoint)r   minLostPointpatterni	lostPoints        r   rB   zQRCode._getBestMaskPatternN   sk    q 	 	AJJtQ++D11IAvv	11(r   c                 X     j         dz  dz    _         fdt           j                  D              _                             dd                                 j        dz
  d                                d j        dz
                                                                                                      ||            j         dk    r                     |           t          
                     j          j         j                  }                     ||           d S )N   r   c                 &    g | ]}d gj         z  S r   r>   .0rK   r   s     r   
<listcomp>z QRCode._make.<locals>.<listcomp>\   s#    SSSa!11SSSr   r      )r   r!   rF   r    _setupPositionProbePattern_setupPositionAdjustPattern_setupTimingPattern_setupTypeInfo_setupTypeNumberr   _createDatar   r   _mapData)r   testmaskPatternr/   s   `   r   rA   zQRCode._makeY   s)   ?Q.3SSSS5AQ;R;RSSS''1---''(81(<a@@@''4+;a+?@@@((***  """D+...?a!!$'''!!OT3T_
 
 	dK(((((r   c                    t          t          | j                            }d t          | j        dz
  dd          D             }t                              |          }d}d}|D ]}|                                 |D ]}	t          d          D ]v}
| j        |	         ||
z
           ^d}|t          |          k     r||         |z	  dz  dk    } ||	||
z
            r| }|| j        |	         ||
z
  <   |dz  }|dk    r|dz  }d}wd S )	Nc                 (    g | ]}|d k    r|dz
  n|S )   r   r   )rQ   r;   s     r   rR   z#QRCode._mapData.<locals>.<listcomp>s   s5     
 
 
-0saxxC!GGS
 
 
r   r   r   rS      F)listrF   r!   rG   getMaskFunctionreverser    r2   )r   r/   r\   rowscolsmaskFunc	byteIndexbitIndexr;   r:   cdarks               r   rZ   zQRCode._mapDatap   sZ   E$*++,,
 
49$:JQ:NPQSU4V4V
 
 
 ))+66	 	) 	)CLLNNN ) )q ) )A|C(q19$$s4yy00%))_%@A$E!#KD#8Cq11 ,'+8D59S)#'2 A#r>>%NI'(H))	) 	)r   c                 <   t                               | j                  }|D ]y}|D ]t}| j        |         |         t	          dd          D ]M}t	          dd          D ]:}|dk    p|dk    p|dk    p|dk    p|dk    o|dk    | j        ||z            ||z   <   ;Nuzd S )Nr`      ra   r   )rG   getPatternPositionr   r    rF   )r   posr:   r;   rrk   s         r   rU   z"QRCode._setupPositionAdjustPattern   s    ''88 	 	C  <$S)5r1  A"2q\\  G 3 Av3 Bw3  !Av3 !"Q 116 S1W-cAg66	 	r   c                    t          dd          D ]}t          dd          D ]}||z   dk    s%| j        ||z   k    s||z   dk    s| j        ||z   k    r1d|cxk    odk    nc r|dk    pA|dk    p;d|cxk    odk    nc o|dk    p|dk    pd|cxk    odk    nc od|cxk    odk    nc | j        ||z            ||z   <   d S )Nrb   rE   r   r_   ra   rN   rF   r!   r    )r   r:   r;   rq   rk   s        r   rT   z!QRCode._setupPositionProbePattern   s(   r1 	 	A2q\\  !GrMM'3722Qw"}}'3722![[[[q[[[[7a1f&6Q 5Q!:a)9165Q!3Q! S1W%cAg..	 	r   c                    t          d| j        dz
            D ]-}| j        |         d         |dz  dk    | j        |         d<   .t          d| j        dz
            D ]-}| j        d         |         |dz  dk    | j        d         |<   .d S )NrE   r_   ra   r   rs   )r   rq   rk   s      r   rV   zQRCode._setupTimingPattern   s    q$*Q.// 	, 	,A|Aq!-!"Q!DLOAq$*Q.// 	, 	,A|Aq!-!"Q!DLOA	, 	,r   c                 P   t                               | j                  }t          d          D ]3}| o||z	  dz  dk    | j        |dz           |dz  | j        z   dz
  dz
  <   4t          d          D ]3}| o||z	  dz  dk    | j        |dz  | j        z   dz
  dz
           |dz  <   4d S )N   r   rn   rE   )rG   getBCHTypeNumberr   rF   r    r!   )r   r[   bitsrK   s       r   rX   zQRCode._setupTypeNumber   s    &&t77r 	 	A3tqyAo!3 La Q)9!9A!=!ABB r 	 	A3tqyAo!3 LQ!11A59:16BB	 	r   c                 R   | j         dz  |z  }t                              |          }t          d          D ]]}| o||z	  dz  dk    }|dk     r|| j        |         d<   (|dk     r|| j        |dz            d<   B|| j        | j        dz
  |z            d<   ^t          d          D ]i}| o||z	  dz  dk    }|dk     r|| j        d         | j        |z
  dz
  <   3|dk     r|| j        d         d|z
  dz
  dz   <   S|| j        d         d|z
  dz
  <   j| | j        | j        dz
           d<   d S )Nrn      r   r_   rE   	   )r   rG   getBCHTypeInforF   r    r!   )r   r[   r\   r/   rx   rK   mods          r   rW   zQRCode._setupTypeInfo   sv   &!+{:$$T** r 	A 	AA(5aA5C1uu%(Q""Q),QU#A&&=@T-2Q67:: r 	2 	2A(5aA5C1uu<?Q 01 4q 899Q25QQ
Q//.1QQ
++ 59T%)*1---r   c                 6   t                               | |          }t                      }|D ]z}|                    |                                d           |                    |                                |                    |                      |                    |           {t          d |D                       }|                                |dz  k    r+t          d|                                d|dz  d          |                                dz   |dz  k    r|                    dd           |                                dz  dk    r1|                    dd	           |                                dz  dk    1	 |                                |dz  k    rn]|                    t          j        d           |                                |dz  k    rn!|                    t          j        d           yt                              ||          S )
NrN   c              3   >   K   | ]}|                                 V  d S r   )r3   rQ   rsBlocks     r   	<genexpr>z%QRCode._createData.<locals>.<genexpr>   s.      LLW1133LLLLLLr   rE   zcode length overflow. (>)r   Fr   )RSBlockgetRSBlocks	BitBufferputgetMode	getLengthgetLengthInBitswritesumr   r   PAD0PAD1_createBytes)r   r   	dataArrayrsBlocksbufferr/   totalDataCounts          r   rY   zQRCode._createData   s    &&z3DEE 	 	DJJt||~~q)))JJt~~'')=)=j)I)IJJJJJvLL8LLLLL!!##nq&888-))++++^a-?-?-?A   !!##a'>A+===JJq! $$&&*a//JJua    $$&&*a//	'%%''>A+===JJv{A&&&%%''>A+===JJv{A&&&	' ""68444r   c                    d}d}d}d gt          |          z  }d gt          |          z  }t          t          |                    D ]}||                                         }||                                         |z
  }	t	          ||          }t	          ||	          }dg|z  ||<   t          t          ||                             D ]+}
d|                                 |
|z            z  ||         |
<   ,||z  }t                              |	          }t          ||         |	                                dz
            }|
                    |          }dg|	                                dz
  z  ||<   t          t          ||                             D ]U}
|
|	                                z   t          ||                   z
  }|dk    r|                    |          nd||         |
<   Vt          d |D                       }dg|z  }d}t          |          D ]P}
t          t          |                    D ]1}|
t          ||                   k     r||         |
         ||<   |dz  }2Qt          |          D ]P}
t          t          |                    D ]1}|
t          ||                   k     r||         |
         ||<   |dz  }2Q|S )Nr      r   c              3   >   K   | ]}|                                 V  d S r   )getTotalCountr   s     r   r   z&QRCode._createBytes.<locals>.<genexpr>&  s.      MMW2244MMMMMMr   )r2   rF   r3   r   max	getBufferrG   getErrorCorrectPolynomial
Polynomialr   r}   getr   )r   r   offset
maxDcCount
maxEcCountdcdataecdatarq   dcCountecCountrK   rsPolyrawPolymodPolymodIndextotalCodeCountr/   r6   s                     r   r   zQRCode._createBytes  s    

#h--'#h--'s8}}%% 	M 	MAqk..00Gqk//11G;GZ11JZ11JgF1I3vay>>** E E#f&6&6&8&8V&DDq	!gF55g>>F F,<,<,>,>,BCCGkk&))Gv//11A56F1I3vay>>** M Mw00222S^^C8@Aw{{84441q	!M MMHMMMMMs^#z"" 	 	A3x==))  s6!9~~%%"()A,DKQJE
 z"" 	 	A3x==))  s6!9~~%%"()A,DKQJE
 r   c                    t          |          }|                    |            d}d}||z
  dk    r}d|z  |z   dz  }|                    |           	 |                                 |}n<# t          $ r/ |dk    r!t          j        t          d                    |dz   }Y nw xY w||z
  dk    }|                    |           |                                 |S )Nr"   r   (   r   rn   rN   z/The string is too large to represent as QR code)r   r0   r)   rC   r   inkexAbortExtension_)r/   r   qrlvrvmids         r   getMinimumQRCodezQRCode.getMinimumQRCode:  s
   0111


42gkkr6B;1$CS!!!				  !   "99.KLL   1W 2gkk 	
				s   A+ +6B$#B$N)r   r   r   r   r   r   r&   r)   r,   r0   r3   r7   r<   r?   rC   rB   rA   rZ   rU   rT   rV   rX   rW   staticmethodrY   r   r   r   r   r   r   r   (   s       DD    % % %  % % %$ $ $& & &W W W     6 6 6	 	 	) ) ).) ) ):      , , ,	 	 	9 9 98 $5 $5 \$5L 2 2 \2h   \  r   r   c                       e Zd ZdZdZdZdZdS )Moder   ra   rN   rE   N)r   r   r   MODE_NUMBERMODE_ALPHA_NUMMODE_8BIT_BYTE
MODE_KANJIr   r   r   r   r   S  s"        KNNJJJr   r   c                   .    e Zd ZdZdZdZdZdZdZdZ	dZ
d	S )
MaskPatternr   r   ra   rn   rN      r_   rS   N)r   r   r   
PATTERN000
PATTERN001
PATTERN010
PATTERN011
PATTERN100
PATTERN101
PATTERN110
PATTERN111r   r   r   r   r   Z  s6        JJJJJJJJJJr   r   c                      e Zd Zed             Zg g ddgddgddgddgddgg dg d	g d
g dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg d g d!g d"g d#g d$g d%g d&g d'g d(g d)Zed*             Zed+             Zed,             Zd-Z	d.Z
d/Zed0             Zed1             Zed2             Zd3S )4rG   c                 ,    t           j        | dz
           S Nr   )rG   PATTERN_POSITION_TABLEr$   s    r   ro   zQRUtil.getPatternPositionf  s    ,Z!^<<r   r_   rv            "   )r_   r   &   )r_      *   )r_   r   .   )r_      2   )r_   r   6   )r_       :   )r_   r   >   )r_   r   r   B   )r_   r   0   F   )r_   r   r   J   )r_   r   r   N   )r_   r   8   R   )r_   r   r   V   )r_   r   r   Z   )r_   r   r   H   ^   )r_   r   r   r   b   )r_   r   r   r   f   )r_   r   r   P   j   )r_   r   r   T   n   )r_   r   r   r   r   )r_   r   r   r   v   )r_   r   r   r   r   z   )r_   r   r   r   r   ~   )r_   r   4   r   h      )r_   r   r   r   l      )r_   r   <   r   p      )r_   r   r   r   r      )r_   r   r   r   r      )r_   r   r   r   r   r      )r_   r   r   L   r         )r_   r   r   r   r         )r_   r   r   r   r         )r_   r   r   r   r   r      )r_   r   r   r   r   r      c           	          t          dg          }t          |           D ]>}|                    t          dt                              |          g                    }?|S r   )r   rF   multiplyQRMathgexp)errorCorrectLengtharK   s      r   r   z QRUtil.getErrorCorrectPolynomial  sV    sOO)** 	< 	<A

:q&++a..&9::;;AAr   c                     t           j        d t           j        d t           j        d t           j        d t           j        d t           j        d t           j        d t           j        d i|          S )	Nc                     | |z   dz  dk    S Nra   r   r   rK   js     r   <lambda>z(QRUtil.getMaskFunction.<locals>.<lambda>      !a%11A r   c                     | dz  dk    S r
  r   r  s     r   r  z(QRUtil.getMaskFunction.<locals>.<lambda>      Q! r   c                     |dz  dk    S Nrn   r   r   r  s     r   r  z(QRUtil.getMaskFunction.<locals>.<lambda>  r  r   c                     | |z   dz  dk    S r  r   r  s     r   r  z(QRUtil.getMaskFunction.<locals>.<lambda>  r  r   c                 &    | dz  |dz  z   dz  dk    S Nra   rn   r   r   r  s     r   r  z(QRUtil.getMaskFunction.<locals>.<lambda>  s    !q&16/Q1F!1K r   c                 ,    | |z  dz  | |z  dz  z   dk    S r  r   r  s     r   r  z(QRUtil.getMaskFunction.<locals>.<lambda>  s     !a%1A{1Ja1O r   c                 2    | |z  dz  | |z  dz  z   dz  dk    S r  r   r  s     r   r  z(QRUtil.getMaskFunction.<locals>.<lambda>  &    1q5A+Q!2Kq1PTU1U r   c                 2    | |z  dz  | |z   dz  z   dz  dk    S )Nrn   ra   r   r   r  s     r   r  z(QRUtil.getMaskFunction.<locals>.<lambda>  r  r   )	r   r   r   r   r   r   r   r   r   )r\   s    r   rd   zQRUtil.getMaskFunction  sx     "$A$A"$;$;"$;$;"$A$A"$K$K"$O$O"$U$U"$U$U	
 	 		r   c           
      `   |                                  }d}t          |          D ]}t          |          D ]}d}|                     ||          }t          dd          D ]m}||z   dk     s	|||z   k    rt          dd          D ]G}||z   dk     s	|||z   k    r|dk    r|dk    r"||                     ||z   ||z             k    r|dz  }Hn|dk    r|d|z   dz
  z  }t          |dz
            D ]}t          |dz
            D ]}d}	|                     ||          r|	dz  }	|                     |dz   |          r|	dz  }	|                     ||dz             r|	dz  }	|                     |dz   |dz             r|	dz  }	|	dk    s|	dk    r|dz  }t          |          D ]}t          |dz
            D ]}|                     ||          r|                     ||dz             s|                     ||dz             ri|                     ||dz             rP|                     ||dz             r7|                     ||dz             s|                     ||dz             r|d	z  }t          |          D ]}t          |dz
            D ]}|                     ||          r|                     |dz   |          s|                     |dz   |          ri|                     |dz   |          rP|                     |dz   |          r7|                     |dz   |          s|                     |dz   |          r|d	z  }d}
t          |          D ]/}t          |          D ]}|                     ||          r|
dz  }
0t          d
|
z  |z  |z  dz
            dz  }||dz  z  }|S )Nr   rb   ra   r   r   rn   rN   r_   r   d   r   
   )r?   rF   r<   abs)qrcoder!   rL   r:   r;   	sameCountrl   rq   rk   count	darkCountratios               r   rH   zQRUtil.getLostPoint  s    ++--	 %% 	3 	3C[)) 3 3	}}S#..r1 	+ 	+AQw{{kS1W&<&< "2q\\ + +7Q;;+q*@*@$66a1ff$6==q#'#B#BBB%NI+ q==Y!22I3" q)) 	# 	#C[1_-- # #==c** QJE==q#.. QJE==cAg.. QJE==q#'22 QJEA::!NI# %% 	$ 	$C[1_-- 
$ 
$MM#s++	$"MM#sQw77	$ c3733	$ c3733		$
 c3733	$ #MM#sQw77	$ c3733	$ OI
$ %% 	$ 	$C[1_-- 
$ 
$MM#s++	$"MM#'377	$ cAgs33	$ cAgs33		$
 cAgs33	$ #MM#'377	$ cAgs33	$ OI
$ 	%% 	# 	#C[)) # #==c** #NI# C)O{2kABFGG1LURZ	r   i7  i%  iT  c                    | dz  }t                               |          t                               t           j                  z
  dk    r|t           j        t                               |          t                               t           j                  z
  z  z  }t                               |          t                               t           j                  z
  dk    | dz  |z  t           j        z  S )Nr  r   )rG   getBCHDigitG15G15_MASKr/   ds     r   r|   zQRUtil.getBCHTypeInfo  s    BJ  ##f&8&8&D&DDII 2 21 5 58J8J6:8V8V VWWA   ##f&8&8&D&DDIIq FO33r   c                    | dz  }t                               |          t                               t           j                  z
  dk    r|t           j        t                               |          t                               t           j                  z
  z  z  }t                               |          t                               t           j                  z
  dk    | dz  |z  S )N   r   )rG   r$  G18r'  s     r   rw   zQRUtil.getBCHTypeNumber  s    BJ  ##f&8&8&D&DDII 2 21 5 58J8J6:8V8V VWWA   ##f&8&8&D&DDII
ar   c                 6    d}| dk    r|dz  }| dz  } | dk    |S Nr   r   r   )r/   digits     r   r$  zQRUtil.getBCHDigit  s4    aiiQJEQJD aii r   N)r   r   r   r   ro   r   r   rd   rH   r%  r+  r&  r|   rw   r$  r   r   r   rG   rG   e  sV       = = \=)
)	
B) 
B) 
B	)
 
B) 
B) 	) 	) 	) 	) 	) 	) 	) 	) 	)  	!)" 	#)$ 	%)& 	')( 	))* 	+), 	-). 	/)0 	1)2 	3)4 	5)6 	7)8 	!  9): 	"!!;)< 	"!!=)> 	"!!?)@ 	"!!A)B 	"!!C)D 	"!!E)F 	'&&G)H 	'&&I)J 	'&&K)L 	'&&M)N 	'&&O)P 	'&&Q)V   \ 
 
 \
 K K \KZ VC	  GH4 4 \4     \    \  r   rG   c                   2    e Zd Zd Zd Zd Zd Zd Zd ZdS )QRDatac                 "    || _         || _        d S r   )_moder/   )r   moder/   s      r   r   zQRData.__init__  s    
			r   c                     | j         S r   )r2  r%   s    r   r   zQRData.getMode   s
    zr   c                     | j         S r   )r/   r%   s    r   r7   zQRData.getData#  s
    yr   c                 *    t          | j                  S r   )r2   r/   r%   s    r   r   zQRData.getLength&  s    49~~r   c                     d S r   r   )r   r   s     r   r   zQRData.write*  s    r   c                    d|cxk    rdk     r@n n=t           j        dt           j        dt           j        dt           j        di| j                 S |dk     r=t           j        dt           j        dt           j        dt           j        di| j                 S |d	k     r=t           j        d
t           j        dt           j        dt           j        di| j                 S t          d|z            )Nr   r  r{   rE      r*        )         ztype:%s)r   r   r   r   r   r2  	Exception)r   types     r   r   zQRData.getLengthInBits-  s    >>>>r>>>>> "#Q#Q	
 j  BYY "#R#R	
 j  BYY "#R#R	
 j  I,---r   N)	r   r   r   r   r   r7   r   r   r   r   r   r   r0  r0    sn                  . . . . .r   r0  c                   $     e Zd Z fdZd Z xZS )
QR8BitBytec                    t          t          |                               t          j        |           t          |t                    r|                    dd          }t          |t                    st          d          d S )NasciiignorezData must be in bytes!)
superrB  r   r   r   
isinstancestrencodebytes
ValueErrorr   r/   	__class__s     r   r   zQR8BitByte.__init__K  sv    j$(()<dCCCdC   	2;;w11D$&& 	75666	7 	7r   c                 `    | j         D ]%}|                    t          |          d           &d S )NrE   )r/   r   ord)r   r   r(  s      r   r   zQR8BitByte.writeR  s:     	" 	"AJJs1vvq!!!!	" 	"r   r   r   r   r   r   __classcell__rM  s   @r   rB  rB  J  sG        7 7 7 7 7" " " " " " "r   rB  c                   :     e Zd Z fdZd Zed             Z xZS )
QRAlphaNumc                 n    t          t          |                               t          j        |           d S r   )rF  rT  r   r   r   rL  s     r   r   zQRAlphaNum.__init__X  s,    j$(()<dCCCCCr   c                    d}|dz   t          | j                  k     r|                    t                              | j        |                   dz  t                              | j        |dz                      z   d           |dz  }|dz   t          | j                  k     |t          | j                  k     r;|                    t                              | j        |                   d           d S d S )Nr   r   -   r:  ra   r_   )r2   r/   r   rT  _getCode)r   r   rK   s      r   r   zQRAlphaNum.write[  s    !ec$)nn$$JJ##DIaL11B6%%diA&6778  
 FA !ec$)nn$$ s49~~JJz**49Q<88!<<<<< r   c           
         d| k    r%| dk    rt          |           t          d          z
  S d| k    r(| dk    r"t          |           t          d          z
  dz   S dddd	d
ddddd	}| |                                v r||          S t          j        t	          d                              | |                                                    )N09AZr  $   %   r   '   r   r<  r   +   ,   )	 $%*+-./:zLWrong symbol '{}' in alphanumeric representation: Should be [A-Z, 0-9] or {})rO  keysr   r   r   format)rk   dcts     r   rX  zQRAlphaNum._getCodeg  s    !88Sq66CHH$$AXX!s((q66CHH$r)) 
 
C CHHJJ1v*f fQ

++  r   )r   r   r   r   r   r   rX  rQ  rR  s   @r   rT  rT  W  sg        D D D D D
= 
= 
=   \    r   rT  c                   $     e Zd Z fdZd Z xZS )QRNumberc                 n    t          t          |                               t          j        |           d S r   )rF  rp  r   r   r   rL  s     r   r   zQRNumber.__init__  s,    h&&t'7>>>>>r   c                    d}	 |dz   t          | j                  k     rUt          | j        ||dz                      }|                    |d           |dz  }|dz   t          | j                  k     U|t          | j                  k     rQt          | j                  |z
  dk    rdnd}|                    t          | j        |d                    |           d S d S #  t	          d                    | j                            xY w)	Nr   ra   rn   r  r   rN   rS   z%The string '{}' is not a valid number)r2   r/   intr   rK  rm  )r   r   rK   numlns        r   r   zQRNumber.write  s   
	Xa%#di..(($)AAI.//

3###Q a%#di..((
 3ty>>!!di..1,11QQq

3ty}--r22222 "!	XDKKDIVVWWWs   CC )DrP  rR  s   @r   rp  rp    sN        ? ? ? ? ?X X X X X X Xr   rp  c                        e Zd Z fdZ xZS )QRKanjic                     t          t          |                               t          j        |           t          d          )Nz Class QRKanji is not implemented)rF  rw  r   r   r   RuntimeErrorrL  s     r   r   zQRKanji.__init__  s4    gt%%dot<<<=>>>r   )r   r   r   r   rQ  rR  s   @r   rw  rw    s8        ? ? ? ? ? ? ? ? ?r   rw  c                   X    e Zd ZdZdZed             Zed             Zed             ZdS )r  Nc                     dgdz  t           _        t          d          D ]q} | dk     rd| z  nVt           j        | dz
           t           j        | dz
           z  t           j        | dz
           z  t           j        | dz
           z  t           j        | <   rdgdz  t           _        t          d          D ]!} | t           j        t           j        |          <   "d S )	Nr      rE   r   rN   r   r_   r   )r  	EXP_TABLErF   	LOG_TABLE)rK   s    r   _initzQRMath._init  s     39s 	 	A q55 Q%a!e,"1q5)*"1q5)* "1q5)* Q 39s 	6 	6A45FV-a011	6 	6r   c                 V    | dk     rt          d| z            t          j        |          S )Nr   zlog(%s))r?  r  r~  ns    r   glogzQRMath.glog  s+    q55IM***""r   c                 j    | dk     r| dz  } | dk     | dk    r| dz  } | dk    t           j        |          S )Nr   r   r|  )r  r}  r  s    r   r  zQRMath.gexp  sJ    !eeHA !ee3hhHA 3hh""r   )	r   r   r   r}  r~  r   r  r  r  r   r   r   r  r    sm        II6 6 \6" # # \#
 # # \# # #r   r  c                   :    e Zd Zd
dZd Zd Zd Zd Zd Zd Z	d	S )r   r   c                     d}t          |          }||k     r#||         dk    r|dz  }||k     r||         dk    ||d          dg|z  z   | _        d S r-  r2   rt  )r   rt  shiftr   lengths        r   r   zPolynomial.__init__  si    Svoo#f+"2"2aKF voo#f+"2"2vww<1#+-r   c                     | j         |         S r   )rt  r5   s     r   r   zPolynomial.get  s    xr   c                 *    t          | j                  S r   r  r%   s    r   r   zPolynomial.getLength  s    48}}r   c                      d                      fdt                                                     D                       S )N,c                 T    g | ]$}t                              |                    %S r   )rH  r   rP   s     r   rR   z'Polynomial.__repr__.<locals>.<listcomp>  s+    KKKaTXXa[[))KKKr   joinrF   r   r%   s   `r   __repr__zPolynomial.__repr__  s<    xxKKKK59I9I3J3JKKKLLLr   c                      d                      fdt                                                     D                       S )Nr  c           	          g | ]<}t          t                                                  |                              =S r   )rH  r  r  r   rP   s     r   rR   z*Polynomial.toLogString.<locals>.<listcomp>  s7    LLLqSTXXa[[))**LLLr   r  r%   s   `r   toLogStringzPolynomial.toLogString  sB    xxLLLLE$..:J:J4K4KLLL
 
 	
r   c                    dg|                                  |                                 z   dz
  z  }t          |                                            D ]}t          |                                           D ]}|||z   xx         t                              t                              |                     |                    t                              |                    |                    z             z  cc<   t          |          S r-  )r   rF   r  r  r  r   r   )r   ert  rK   r  s        r   r  zPolynomial.multiply  s    cT^^%%59:t~~''(( 	 	A1;;==))  AE


fkkKK,,v{{15588/D/DD  



 #r   c                 l   |                                  |                                 z
  dk     r| S t                              |                     d                    t                              |                    d                    z
  }| j        d d          }t          |                                           D ]X}||xx         t                              t                              |                    |                    |z             z  cc<   Yt          |                              |          S Nr   )	r   r  r  r   rt  rF   r  r   r}   )r   r  r"  rt  rK   s        r   r}   zPolynomial.mod  s    >>akkmm+a//KDHHQKK((6;;quuQxx+@+@@hqqqkq{{}}%% 	A 	AAFFFfkk&++aeeAhh"7"7%"?@@@FFFF#""1%%%r   N)r   )
r   r   r   r   r   r   r  r  r  r}   r   r   r   r   r     s        . . . .    M M M
 
 

  & & & & &r   r   c                   V   e Zd Zg g dg dg dg dg dg dg dg dg d	g d
g dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg d g d!g d"g d#g d$g d%g d&g d'g d(g d)g d*g d+g d,g d-g d.g d/g d0g d1g d2g d3g d4g d5g d6g d7g d8g d9g d:g d;g d<g d=g d>g d?g d@g dAg dBg dCg dDg dEg dFg dGg dHg dIg dJg dKg dLg dMg dNg dOg dPg dQg dRg dSg dTg dUg dVg dWg dXg dYg dZg d[g d\g d]g d^g d_g d`g dag dbg dcg ddg deg dfg dgg dhg dig djg dkg dlg dmg dng dog dpg dqg drg dsg dtg dug dvg dwg dxg dyg dzg d{g d|g d}g d~g dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dZd Zd Zd Zd Zed             Z	ed             Z
dS )r   )r   r      )r   r   r;  )r   r   r>  )r   r   r{   )r   rb  r   )r   rb  r   )r   rb  r   )r   rb  r;  )r   r   7   )r   r   rb  )ra   #   r   )ra   r  r>  )r   r  r   )ra   r   r   )ra   r   r   )rN      r{   )r   r   r   )ra   C   ra  )ra   !   rz   ra   r   r;  )ra   r  r:  ra   r   r*  )ra   r   D   )rN   ra  r9  )rN   ra  r  )rN   ra  rz   )ra   r   r   )rN   1      )ra   r   r=  rN   r  rz   )rN   r`  r>  r   r   r=  )ra   y   a   )ra   r   r   ra   =   r`  )rN   r   rv   ra   r<  r  )rN   r   r=  ra   r<  rz   )ra   r   t   )rn   r   r^  ra   ;   r_  )rN   r^  r;  rN   r_  r   )rN   r^  r*  rN   r_  r>  )ra   r   r  ra   W   E   )rN   r  ra  r   r   rb  )r_   ra  r  ra   rb     )r_   ra  rz   ra   rb  r;  )rN   e   Q   )r   r   r   rN   r  3   )rN   r   r   rN   r     )rn   r^  r*  rE   r_  r>  )ra   r  \   ra   u   ]   )r_   r   r^  ra   r  r_  )rN   r   r  r_   /      )rS   r   r=  rN   ra  rz   )rN      k   )rE   r  r_  r   r   r   )rE   rb  r  rN   rW  r  )r*  r  r:  rN   r   r*  )rn      s   r   r   r  )rN   @   r   r   A   r<  )r:  r^  r;  r   r_  r   )r:  r^  r*  r   r_  r>  )r   m   r  r   r   X   )r   r  r<  r   r   r   )r   r   r   rS   r  r  )r:  r^  r*  rS   r_  r>  )r   r   r   r   {   c   )rS   I   rW  rn   r   r   )rz   ra  r  ra   rb  r  )rn   rW  rz   r>  r   r;  )r      r  r   r   r   )r  r   r   r   K   r  )r   r   r   rz   r  r  )ra   r   r=  r   ra  rz   )r   r   x   r      r  )r{   r  ra  rN   r   rb  )r   r   r   r   r  r  )ra   r   r=  r  ra  rz   )rn      q   rN   r   r   )rn   r   rb  r:  G   rW  )r   r  r  rN   r   r   )r{   r`  r>  r;  r   r=  )rn   r  r  r   r   r   )rn   r  r<  r>  r  r   )rz   r   r   r   r  r  )rz   ra  rz   r  rb  r;  )rN      r  rN   r  r  )r   r  r   )r   r   r   r_   r  r  )r  r   r;  r_   r  r   )ra      o   rS      r   )r   r   r   )rS   r   r   r;  r  r  )r   r_  r>  )rN   r  r  r      r   )rN   r  r  r=  r   r   )r:  r   r   r=  r  r  )r;  rW  rz   r=  r   r;  )r_      r  rN      r   )r_   r  rW  r=  r   r   )r:  r   r   r;  r  r  )r   r   r;  ra   r  r   )rE   r   r   rN   r  r  )rE   r  r  r>  r   r   )rS   r   r   r   r  r  )r   rW  rz   r>  r   r;  )r  r   r   ra      r  )r  r   r   rN   r  r  )r   r   r   r_   r  r  )r  r   r;  rN   r  r   )rE   r  r   rN      r  )r   r  rW  rn   r   r   )rE   5   r  r   r   r   )r*  rW  rz   r   r   r;  )rn   r  r  r  r  r   )rn   r  rW  r  r   r   )rN   r   r   r  r  r  )r:  rW  rz   r  r   r;  )rS   r   r  rS   r  r  )r  r  rW  rS   r   r   )r   r  r  r_  r   r   )r  rW  rz   r   r   r;  )r   r  r  r  r   r  )r  r  r  r  r   r   )rz   r   r   r  r  r  )r  rW  rz   r  r   r;  )r>  r  r  rn   r   r  )ra   r   r      r  r  )r   r   r   r   r  r  )r  rW  rz   r   r   r;  )r   r  r  )r  r   r   r  r  r  )r  r   r   r  r  r  )r  rW  rz   r  r   r;  )r   r  r  r   r   r  )r=  r   r   r  r  r  )r  r   r   r  r  r  )r:  rW  rz   r   r   r;  )r>  r  r  r_   r   r  )r=  r   r   r  r  r  )rb  r   r   rS   r  r  )r  r   r;  r   r  r   )r*  r  r  rS   r  r   )r*  r  r  r   r   r   )r`  r   r   r=  r  r  )r   rW  rz   r<  r   r;  )r_   r  r  r=  r  r   )r_   r  r  r   r   r   )r   r   r   r  r  r  )ra   rW  rz   r  r   r;  )r   r  r   rN   r  r  )r  r   r   r=  r  r  )r  r   r   r  r  r  )r   rW  rz   r   r   r;  )rN   r  r   rv   r  r  )r>  r   r   r   r  r  )r   r   r   r=  r  r  )r   rW  rz   r   r   r;  )r  r  r  rN   r  r   )r   r  r  rS   r   r   )ra  r   r   r   r  r  )r  rW  rz   r  r   r;  )r  r  r   r_      w   )rv   r  r  r  r   r   )r   r   r   r   r  r  )r  rW  rz   r  r   r;  c                 "    || _         || _        d S r   
totalCount	dataCount)r   r  r  s      r   r   zRSBlock.__init__  s    $"r   c                     | j         S r   )r  r%   s    r   r3   zRSBlock.getDataCount  s
    ~r   c                     | j         S r   )r  r%   s    r   r   zRSBlock.getTotalCount  r'   r   c                 (    d| j         d| j        dS )Nz(total=z,data=r   r  r%   s    r   r  zRSBlock.__repr__  s     '+GGr   c                 
   t                               | |          }t          |          dz  }g }t          |          D ]C}||dz  dz            }||dz  dz            }||dz  dz            }|t          ||          g|z  z  }D|S )Nrn   r   r   ra   )r   getRsBlockTabler2   rF   )	r   r   r   r  rc   rK   r   r  r  s	            r   r   zRSBlock.getRSBlocks  s    ))*6GHHW"v 	= 	=AAEAI&E Q+JA	*IWZ334u<<DDr   c                     t           j        | dz
  dz  dz            t           j        | dz
  dz  dz            t           j        | dz
  dz  dz            t           j        | dz
  dz  dz            d|         S )Nr   rN   r   ra   rn   )r   r   rn   ra   )r   RS_BLOCK_TABLE)r   r   s     r   r  zRSBlock.getRsBlockTable  s     %zA~&:Q&>?%zA~&:Q&>?%zA~&:Q&>?%zA~&:Q&>?	
 

  	r   N)r   r   r   r  r   r3   r   r  r   r   r  r   r   r   r   r     s       M 	M 	M 	M 	

M 	M 	M 	M 	M  	!M" 	#M$ 	%M& 	'M* 	+M, 	-M. 	/M0 	

1M4 	5M6 	7M8 	9M: 	;M> 	?M@ 	AMB 	CMD 	EMH 	IMJ 	KML 	MMN 	OMR 	SMT 	UMV 	WMX 	YM\ 	]M^ 	_M` 	aMb 	cMf 	gMh 	iMj 	kMl 	mMp 	qMr 	sMt 	uMv 	wMz 	!  {M| 	}M~ 	M@ 	AMD 	EMF 	GMH 	IMJ 	 KMN 	#""OMP 	QMR 	 SMT 	 UMX 	!  YMZ 	[M\ 	]M^ 	 _Mb 	!  cMd 	eMf 	 gMh 	 iMl 	#""mMn 	 oMp 	 qMr 	 sMv 	#""wMx 	yMz 	 {M| 	 }M@ 	#""AMB 	 CMD 	 EMF 	 GMJ 	#""KML 	 MMN 	 OMP 	!  QMT 	#""UMV 	WMX 	 YMZ 	 [M^ 	#""_M` 	aMb 	 cMd 	eMh 	#""iMj 	 kMl 	!  mMn 	!  oMr 	#""sMt 	 uMv 	!  wMx 	 yM| 	#""}M~ 	 M@ 	 AMB 	!  CMF 	$##GMH 	 IMJ 	 KML 	 MMP 	#""QMR 	 SMT 	 UMV 	!  WMZ 	$##[M\ 	 ]M^ 	 _M` 	!  aMd 	#""eMf 	 gMh 	 iMj 	!  kMn 	$##oMp 	!  qMr 	!  sMt 	!  uMx 	$##yMz 	 {M| 	 }M~ 	!  MB 	CMD 	!  EMF 	!  GMH 	!  IML 	$##MMN 	!  OMP 	!  QMR 	!  SMV 	$##WMX 	!  YMZ 	 [M\ 	 ]M` 	$##aMb 	!  cMd 	!  eMf 	!  gMj 	$##kMl 	 mMn 	!  oMp 	 qMt 	$##uMv 	!  wMx 	!  yMz 	!  {M~ 	$##M@ 	!  AMB 	!  CMD 	!  EMH 	$##IMJ 	 KML 	!  MMN 	!  OMR 	$##SMT 	!  UMV 	!  WMX 	!  YMN^# # #    H H H 	 	 \	   \  r   r   c                   :    e Zd Zd
dZd Zd Zd Zd Zd Zd Z	d	S )r   r   c                 B    || _         dg| j         z  | _        d| _        d S r  )
inclementsr   r  )r   r  s     r   r   zBitBuffer.__init__  s$    $cDO+r   c                     | j         S r   r   r%   s    r   r   zBitBuffer.getBuffer  
    {r   c                     | j         S r   )r  r%   s    r   r   zBitBuffer.getLengthInBits  r  r   c                 B    | j         |dz           d|dz  z
  z	  dz  dk    S )NrE   rS   r   r  r5   s     r   r   zBitBuffer.get  s*    UaZ(Q];q@QFFr   c                     | j         t          | j                  dz  k    r| xj        dg| j        z  z  c_        |r(| j        | j         dz  xx         d| j         dz  z	  z  cc<   | xj         dz  c_         d S )NrE   r   r   r   )r  r2   r   r  )r   bits     r   putBitzBitBuffer.putBit  s    ;#dk**Q...KKA300KK 	GKq()))TdkAo-FF)))qr   c                 t    t          |          D ]'}|                     |||z
  dz
  z	  dz  dk               (d S r   )rF   r  )r   rt  r  rK   s       r   r   zBitBuffer.put  sM    v 	> 	>AKK#&1*q.1Q61<====	> 	>r   c                      d                      fdt                                                     D                       S )N c              3   J   K   | ]}                     |          rd ndV  dS )1rZ  N)r   rP   s     r   r   z%BitBuffer.__repr__.<locals>.<genexpr>  sG       
 
,-488A;;'CCC
 
 
 
 
 
r   )r  rF   r   r%   s   `r   r  zBitBuffer.__repr__  sS    ww 
 
 
 
16t7K7K7M7M1N1N
 
 
 
 
 	
r   N)r   )
r   r   r   r   r   r   r   r  r   r  r   r   r   r   r     s           
    G G G  > > >
 
 
 
 
r   r   c                   j    e Zd ZdZd Zd Zd Zd Zd Ze	d             Z
e	d             Zd	 ZddZdS )
GridDrawerz Mechanism to draw grids of boxesc                 0    || _         || _        d | _        d S r   )invert_codesmoothFactorgrid)r   r  smooth_factors      r   r   zGridDrawer.__init__  s    &)			r   c                 l    t          d |D                       dk    rt          d          || _        d S )Nc                 ,    h | ]}t          |          S r   )r2   )rQ   gs     r   	<setcomp>z&GridDrawer.set_grid.<locals>.<setcomp>
  s    %%%1A%%%r   r   zThe array is not rectangular)r2   r?  r  )r   r  s     r   set_gridzGridDrawer.set_grid	  s>    %%%%%&&!++:;;;DIIIr   c                 <    | j         t          | j                   ndS r  )r  r2   r%   s    r   	row_countzGridDrawer.row_count  s    !%!6s49~~~A=r   c                 j    |                                  dk    rt          | j        d                   ndS r  )r  r2   r  r%   s    r   	col_countzGridDrawer.col_count  s/    $(NN$4$4q$8$8s49Q<   a?r   c                     |dk    o9d|cxk    o|                                  k     nc o||                                 k     }|sdn| j        |         |         | j        k    S )Nr   F)r  r  r  r  )r   r;   r:   insides       r   r<   zGridDrawer.isDark  sl    Ta39999)9)99999TcDNNDTDT>T"Ouu	#s(;t?O(OOr   c                     ddddd}| d         || d                  d         z   | d         || d                  d         z   fS )	N)r   r   )r   rb   )rb   r   )r   r   )r   r   ra   rn   r   ra   r   r   )xyddms     r   moveByDirectionzGridDrawer.moveByDirection  sH    GF;;1v3q6
1%s1v3q6
1'===r   c                     g } t          t          d          d          D ]h}|                     g            t          d          D ]A}|d|z
           dk    r0|d|dz
  dz  z
           dk    r| d                             |           Bi| S )Nra   rN   )repeatrn   r   r   rb   )r   rF   r.   )resultcfgr(  s      r   makeDirectionsTablezGridDrawer.makeDirectionsTable  s    588A... 	) 	)CMM"1XX ) )q1u:??s1A{?';q'@'@2J%%a((() r   c                 J   |                                  }g }t          |                                 dz             D ]}t          |                                 dz             D ]}|                     |dz
  |dz
            rdnd|                     |dz
  |dz
            rdndz   |                     |dz
  |dz
            rdndz   |                     |dz
  |dz
            rdndz   }||         D ]2}|                    |||t          ||                   dk    f           3|S )Nr   r   ra   rN   rE   )r  rF   r  r  r<   r.   r2   )r   dirTabler  r:   r;   indxr(  s          r   createVertexesForAdvDrawerz%GridDrawer.createVertexesForAdvDrawer(  sb   ++--))A-.. 
	J 
	JCT^^--122 	J 	J![[q#'::ATT#{{37C!G<<Ctt!E#{{37C!G<<Ctt!E  ${{37C!G<<Ctt!E  "$ J JAMM3QHTN0C0Ca0G"HIIIIJ	J r         ?c                    |                      |          }|| j        z  dz  }d|z
  }|d         |z  |d         |z  z   |d         |z  |d         |z  z   f|d         |z  |d         |z  z   |d         |z  |d         |z  z   ffS )Ng       @r  r   r   )r  r  )r   vextraSmoothFactorvnscsc1s         r   getSmoothPositionzGridDrawer.getSmoothPosition:  s    !!!$$!22S8Bh!s
RURZ'1bebj)@AaD2I1#aD2I1#D
 
 	
r   N)r  )r   r   r   __doc__r   r  r  r  r<   r   r  r  r  r  r   r   r   r  r    s        **  
  > > >@ @ @P P P > > \>   \  $
 
 
 
 
 
r   r  c                   Z    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S )QrCodezGenerate QR Code Extensionc                    |                     dd           |                     dt          d           |                     dt          d           |                     dt          d           |                     d	d
           |                     dt          d           |                     dt          j        d           |                     ddg d           |                     ddg d           |                     ddddg           |                     dt          d           |                     dd           |                     dd           d S )Nz--textzhttps://inkscape.org)defaultz--typenumberr   )r@  r  z--correctionlevelz--qrmodez
--encodinglatin_1z--modulesizeg      @z--invertfalsez
--drawtypesmooth)r  
pathpreset	selectionsymbol)r  choicesz--smoothnessneutral)r!  greedyproudz
--pathtypesimplecirclez--smoothvalg?z
--symbolidr  z	--groupid)add_argumentrs  floatr   Boolean)r   parss     r   add_argumentszQrCode.add_argumentsG  s   (,BCCC.sA>>>-CCCC*3:::,	:::.ucBBB*5='JJJCCC 	 	
 	
 	

 	I7U7U7U 	 	
 	
 	
 	,8XBVWWW-eSAAA,333+r22222r   c                    | j                             d          }| j        }|j        s!t	          j        t          d                    |j        dk    r,|j        dk    r!t	          j        t          d                    t          |j                  }t          t          t          t          g|j                 } |t          |j        |j                                      d                    }t%                      }|                    dd|z              |j        r|                    d	|j                   | j         j        j        \  }}|j                            ||           |r|j                            |           |j        d
k    r!t6                              ||j                  }	net7          |j                  }	|	                    t?          |j                             |	                     |           |	!                                 |j"        | _#        |j$        | _%        d| _&        tO          |j$        |j(                  | _)        | j)        *                    |	j+                   | ,                    ||j                   |S )N1pxzPlease enter an input textr  r  zPlease enter symbol idr  zinkscape:labelz	QR Code: idr   r   rN   )-svgunittouuoptionstextr   r   r   drawtypesymbolidrH  rB  rp  rT  rw  qrmoderJ  encodingdecoder   setgroupid	namedviewcenter	transformadd_translate	add_scale
typenumberr   r   correctionlevelr)   rs  r0   rC   
modulesizeboxsizeinvertr  marginr  	smoothvaldrawr  r    
render_svg)
r   scaleopttext_strcmode	text_datagrppos_xpos_ycodes
             r   generatezQrCode.generate\  s,   !!%((lx 	D&q)E'F'FGGG\X%%#,"*<*<&q)A'B'BCCC sx==Xz7;CJGE%#,77>>yIIJJ	gg +"8999; 	'GGD#+&&&x)0u##E5111 	+M##E*** >Q**9c6IJJDD S%8999Ds3>22333LL###IIKKK~:sz3=99		4<(((S\***
r   c           	         | j                                         d}t                    dk    r't                    dz
  }|}g }i }t                    D ]4\  }}|                    |d         g                               |           5	 |                    |           | j                             |                   fd|d                  D             }	t          |	          dk    st          |	          dk    r't          dt          t                    z   dz             t          |	          dk    r	|	d         }
nۉ|	d                  d         |	d                  d         h|         d         dz
  d	z  |         d         dz   d	z  hk    rGt          d
t          |	d                            z   t          |	d                            z             |dk    |	d                  d         |         d         dz   d	z  k    k    r|	d         n|	d         }
|
|k    rn|
}| j         
                    |d                            \  }}|d|                     |d         |d                   z  z  }t          t          |                    D ]}||                  }||dz   t          |          z                    }|d         |d         k    rG|dk    s	|d         sd}| j         
                    |          \  }}| j         
                    ||          \  }}| j         
                    ||          \  }}| j         
                    |          \  }}|d|                     |d         |d                   z  z  }|d|                     |d         |d                   |                     |d         |d                   z   |                     |d         |d                   z   z  z  }d|d|                     |d         |d                   z  z  }|dz  }t          |d          D ]}|= t                    dk    't                      }|                    d|           |S )Nr  r   r   Tc                 D    g | ]}|         d          d          k    |S )r   r   )rQ   rK   nextPosvertss     r   rR   z%QrCode.render_adv.<locals>.<listcomp>  s0    VVVQE!HQK7ST:<U<Uq<U<U<Ur   ra   zVertex z has no connectionsrN   zBad next vertex directions r  M %f,%f r  rn   g=]?zL %f,%f zC %f,%f %f,%f %f,%f zz )re   r(  )rE  r  r2   	enumerate
setdefaultr.   r  r?  rH  next_cr  get_svg_posrF   sortedr   r7  )r   r"  	qrPathStrvertsIndexStartvertsIndexCurringIndexescirK   r  nextIndexesvertsIndexNextposStartr   rivcr  exbsbp1bp2bfpathrS  rT  s                         @@r   
render_advzQrCode.render_adv  s   	4466	%jj1nn!%jj1nO+MKB!%(( 2 21adB''..q1111!/""=111)33E-4HIIVVVVV"WQZ.VVV{##q((C,<,<q,@,@#IF$;>S$STTT%%**%0^NNk!n-a0%A2G2JK}-a0149}-a0149P   (9!%A"7889!%A"7889   #cM!+a.1!4 %m 4Q 7! ;q@A  $A )^ # "_44 .C!/F )55eKN6KLLKHad&6&6x{HQK&P&PPPIC,,-- Q Q;r?+;Q#k2B2B'BCDa5BqE>>#be - $	 ; ;B ? ?2!%!<!<R!D!D3!%!<!<R!D!DQ $	 ; ;B ? ?A!Z$2B2B2a5"Q%2P2P%PP	!%; ,,SVSV<<"..s1vs1v>>?"..r!ube<<=& 		 "Z$2B2B2a5"Q%2P2P%PP	I K666  !HHO %jj1nnR }}i   r   c                 \   t          | j                                                  D ]}t          | j                                                  D ][}| j                            ||          r>|                     ||          \  }}t          j        ||| j        | j                  c c S \d S r   )	rF   rE  r  r  r<   rY  r   newrA  )r   r:   r;   xys        r   render_obsoletezQrCode.render_obsolete  s    ,,..// 	K 	KCTY002233 K K9##C-- K++C55DAq$=At|T\JJJJJJJKK	K 	Kr   c                    |                      |          }d}t          | j                                                  D ]o}t          | j                                                  D ]F}| j                            ||          r)|                     ||          \  }}|d||fz  |z   dz   z  }Gpt                      }|                    d|           |S )Nr  rU  z z r(  )	get_icon_path_strrF   rE  r  r  r<   rY  r   r7  )	r   pointStr
singlePathpathStrr:   r;   rn  ro  rj  s	            r   render_pathzQrCode.render_path  s    ++H55
,,..// 	H 	HCTY002233 H H9##C-- H++C55DAqzQF2Z?%GGGH
 }}gr   c                    t          | j        j                  dk    r;| j        j                                                                        | j        _        n!t          j        t          d                    | 
                                S )Nr   z!Please select an element to clone)r2   r.  r  firstget_idr0  r3  r   r   r   render_symbolr%   s    r   render_selectionzQrCode.render_selection  sp    tx!""Q&&$(H$6$<$<$>$>$E$E$G$GDL!!&q)L'M'MNNN!!###r   c           
      4   | j                             | j        j                  }|>t	          j        t          d                              | j        j                            |j        	                                }t	          j
        t          | j                  |j        z  t          | j                  |j        z  f          }t                      }t!          | j                                                  D ]}t!          | j                                                  D ]q}| j                            ||          rT|                     ||          \  }}|                    t/          j        |||j        z  ||j        z  |                     r|S )NzCan't find symbol {})rG  )r;  )r.  getElementByIdr0  r3  r   r   r   rm  rj  bounding_box	Transformr'  rA  widthheightr   rF   rE  r  r  r<   rY  r.   r   rm  r  r(  )	r   r  bboxr;  r  r:   r;   rn  ro  s	            r   rz  zQrCode.render_symbol  s   (()>??>&())001FGG   {''))Odl##dj0dl##dk1
 
 
	 ,,..// 	 	CTY002233  9##C-- 
++C55DAqMM"	O	O&/	    	 r   c                 z    | j         j        dk    r|                     d          S d}|                     |          S )Nr$  zh 1 v 1 h -1zm 0.5,0.5 c 0.2761423745,0 0.5,0.2238576255 0.5,0.5 c 0,0.2761423745 -0.2238576255,0.5 -0.5,0.5 c -0.2761423745,0 -0.5,-0.2238576255 -0.5,-0.5 c 0,-0.2761423745 0.2238576255,-0.5 0.5,-0.5)r0  pathtyperv  )r   ss     r   render_pathpresetzQrCode.render_pathpreset  sF    < H,,##N333?  ##A&&&r   c                 L    |                      | j        j        d                   S r  )rk  r0  
smoothnessr%   s    r   r  zQrCode.<lambda>  s    1H1K!L!L r   c                 T   t          | d| | j                  }|t          d|z             | j                                        d| j        z  z   | j        z  }| j                                        d| j        z  z   | j        z  }|                    t          j
        dd||                    }d|j        d<   | j        rdnd	|j        d
<   |                    t                                }d|j        d<   | j        rd	nd|j        d
<   |                     |                       dS )zRender to svgrender_NzUnknown draw type: ra   r   nonestrokeblackwhitefill)getattrrp  r?  rE  r  rC  rA  r  addr   rm  styler  r   )r   rL  r2  drawercanvas_widthcanvas_heightrectqrgs           r   rF  zQrCode.render_svg  s    333T5IJJ>1H<===	++--DK?4<O,,..T[@DLP wwy}Q<GGHH%
8(,(8EWWg
6ggegg$	('+'7DGGW	&r   c                 J    || j         z   | j        z  || j         z   | j        z  fS r   )rC  rA  )r   r;   r:   s      r   rY  zQrCode.get_svg_pos2  s)    dk!T\1C$+4E3UUUr   c                 Z   d}d}|D ]i}|                                 s|dk    s|dk    r||z  }(t          |          dk    r)|t          t          |          | j        z            z  }d}||z  }jt          |          dk    r'|t          t          |          | j        z            z  }|S )Nr  rh  ri  r   )isdigitr2   rH  r'  rA  )r   rs  r  	digBufferrk   s        r   rr  zQrCode.get_icon_path_str5  s    	 	 	Ayy{{ a3hh!s((Q		y>>A%%c%	"2"2T\"ABBBF "I!y>>Ac%	**T\9:::Fr   N)r   r   r   r  r*  rP  rk  rp  rv  r{  rz  r  render_smoothrF  rY  rr  r   r   r   r  r  D  s        $$3 3 3*) ) )VO O ObK K K  $ $ $  :' ' ' MLM  &V V V    r   r  __main__)#r  
__future__r   	itertoolsr   r   r   r   r   r   inkex.localizationr	   r   r?  r   objectr   r   r   rG   r0  rB  rT  rp  rw  r  r  r   r   r   r  GenerateExtensionr  r   runr   r   r   <module>r     s  ,  & % % % % %        4 4 4 4 4 4 4 4 4 4 4 4 1 1 1 1 1 1    I   
h h h h hV h h hV	    6       &   s s s s sV s s sl,. ,. ,. ,. ,.V ,. ,. ,.^
" 
" 
" 
" 
" 
" 
" 
") ) ) ) ) ) ) )XX X X X Xv X X X&? ? ? ? ?f ? ? ?"# "# "# "# "#V "# "# "#L && && && && && && && &&Rp p p p pf p p pf
 
 
 
 
 
 
 
@@
 @
 @
 @
 @
 @
 @
 @
F@ @ @ @ @U$ @ @ @F z
FHHLLNNNNN r   