
    BPc~D                        d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlmZm	Z	 d dl
Z
e
j        Ze
j        Ze
j        Ze
j        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#d Z$d Z% G d dej&                  Z'e(dk    r e'            )                                 dS dS )    N)Vector2dload_svgc                 Z   t           j                            t           j                            t          j                    t           j                            t                                        }t           j                            ||           }t          |          }|                                }|	                    d          }|dS t          |                    d                    }t          |                    d                    }|j                                        ||fS )z(Loads a super-path from a given SVG filezsvg:pathNNr   r   widthheight)ospathnormpathjoingetcwddirname__file__r   getrootfindonefloatget	to_arrays)filenamebasefullpathtreerootelemr   r   s           5/usr/share/inkscape/extensions/render_alphabetsoup.py	load_pathr   *   s    7BGLLbgooh6O6OPPQQD w||D(++HHD<<>>D<<
##D|z$((7##$$E488H%%&&F	     c                 (    | |d S | |S || S | |z   S N )pathApathBs     r   combinePathsr#   >   s.    }t		u}r   c                    g }|                                  }|                    d|d         dd          g           | r|                                  }|d         }|dk    rN|                    |d         |d         dd         |d         d d         z   |d         dd          z   g           n+|                    |d         |d         dd          g           |}| |S )NM   r   C      )popappend)cnclastthiscmds        r   reverseComponentr2   I   s    	B5577DIIsDGBCCL!"""
 uuww1g#::IItAwQ!tAwrr{ :T!WRSS\ IJKKKKIItAwQ-...   Ir   c                     g }g }| D ]^}|\  }}|dk    r<|                     t          |                     |                    dg g           g }I|                    |           _|S )NZ)extendr2   r,   )sprp	componentpr1   paramss         r   reversePathr;   X   s    	BI    V#::II&y11222IIsBi   IIQIr   c                 ^    |                      dd           |                     |d           d S )Nr&   r   scale	translate)r9   r   s     r   _lr_cbrA   f   s-    GGBNNNKKqr   c                 ^    |                      dd           |                     d|           d S )Nr&   r=   r   r>   )r9   r   s     r   _tp_cbrC   k   s-    GGArNNNKK6r   c                    t          j        |           } |||           | d d = t                      }t                      }t                      }t          |          D ]r\  }}|dk    r|                    ||          }g }	|                    |||          D ]}
|}|
}|	                    |
           |                     |j        |	g           sd S Nr   )	inkexPathr   	enumerate	end_pointcontrol_pointsr5   r,   letter)r6   cbparamr9   prev	prev_prevfirstisegcpscps              r   fliprU   p   s    
2ABq%LLL
111::D

IJJEA,, % %366MM%..E$$UD)<< 	 	BIDJJrNNNN
		3:s#$$$$% %r   c                 .    t          | t          |          S r   )rU   rA   )r6   r   s     r   flipLeftRightrW      s    FE"""r   c                 .    t          | t          |          S r   )rU   rC   )r6   r   s     r   flipTopBottomrY      s    FF###r   c                     ||z  d| z  |z  z
  }|dk    rt          j        |          }nt          j        |          }| |z   d| z  z  | |z
  d| z  z  fS )N      @r   r)   )mathsqrtcmath)abr-   detsdets        r   solveQuadraticrc      sf    
a%#'A+
C
axxy~~z#BI!a% A29Q"777r   c                 &    | dk    r| dz  S |  dz   S )Nr   gUUUUUU?r    )xs    r   cbrtrf      s&    AvvY")$%%r   c                    | dk    r_d|t          |           z  |t          |           z  |t          |           z  f\  } }}}|dz  }|d|dz  z  z
  |||z  z
  d|dz  z  z   }}t          d||dz  dz             \  }}t          |t                    rqt	          j        |j        dz  |j        dz  z             }	t	          j        |j        |j                  }
dt          |	          z  t	          j
        |
dz            z  }nt          |          t          |          z   }t          d|||dz  z             \  }}t          |t                    r||z
  gS ||z
  ||z
  ||z
  gS |dk    rQ||z  d|z  |z  z
  }|dk    r<| t	          j        |          z   d|z  z  | t	          j        |          z
  d|z  z  gS n|dk    r| |z  gS g S )Nr   r&   g      @   r)   r[   g       @)r   rc   
isinstancecomplexr\   r]   realimagatan2rf   cos)r_   r`   r-   dtr9   quvrwy1y2y3ra   s                  r   findRealRootsry      s   AvvE!HHa%((lAaL@
1aG1q!t8|QQYQT11aq3w1n$5661a!! 	#	!&!)afai/00A
1616**AT!WWtxC000BBa477"B2q2q5y11Bb'"" 	F8OQQQ''	
a!ecAgk!!88dinn$q1dinn$q1  
 
aQxIr   c                    | }|d         dk    r4t          ||           t          |          }|                    d           |}|d         dk    r4t          ||           t          |          }|                    d           |S )Nr   -|)rY   r;   r+   rW   )imager   r   stacktbimagelrimages         r   mxfmr      s    GQx3gv&&&g&&		!GQx3gu%%%g&&		!Nr   c                 |    t          dt          |                    D ]}||         | |         d         k    r dS dS )Nr   r&   )rangelen)rulenodesrQ   s      r   compareruler      sG    1c%jj!!  8tAwqz!!111r   c                     t           |          d         }t          |          }|D ]+}t          |          }||k    rt          ||          r|c S ,d S )Nr&   )syntaxr   r   )stater   rulesetnodelenr   rulelens         r   findruler      s^    UmAG%jjG  d))w[u%=%=KKK
Fr   c                 "   | g}t          t          |                    dk    r|S |                    d           t          j        dt          t          |          d                   dz
            }t          |          d         |         D ]q}|dk    rit          |d                   }|D ]}|                    |           |d         r|                    d           |d         r|                    d           r|                    d           |S )	Nr&   [r   rh   r{   r*   r|   ])r   r   r,   randomrandintgenerate)r   r~   r
   symbolsubstackelts         r   r   r      s   GE
6%=QS~F5M!$%%)
 
 UmA&t, 	& 	&F{{#F1I..# & &CLL%%%%!9 &LL%%%!9 &LL%%% 	Sr   c                    |                      d          }t          t          t          |         d         z             \  }}}| d         dk    rAt	          t          |                   dk    r|||fS t          |          }t          |          S |                      d           g }g }| d         dk    rk| d         }t          |           \  }	}}|	r@t          |	|||           }
|                    |
||g           |                    |           ndS | d         dk    kt          ||          }t          dt	          |                    D ]}||         \  }}}|rv||         d         t          z  }||         d         t          z  }t          j        |                              ||                                          }t!          ||          }|                      d           |||fS )Nr   r   r&   r   r   r)   )r+   r   fontr   r   r   drawr   r,   r   r   unitsrF   rG   r@   r   r#   )r~   r   r}   r   r   r   imagesr   newstatenewimagetfimager   rQ   currimgdxdys                   r   r   r      s   IIaLLE %TF5M!,<%<==E5&Qx3ve}""%''H>>! 			!Ah#ooQxH&*5kk#HeV "eVU  wv6777X&&&& "z Ah#oo u%%q#f++&& 		5 		5A%+AY"GUF 5!WQZ%'!WQZ%' :g..88R@@KKMM$UG44		!eV##r   c                    t          |           \  }}}t          j        |                                          }t          j        |                              |j        j         d                                          }t          j        |                              |t          z  |t          z                                            }||j
        |j        fS rE   )r   rF   rG   bounding_boxr@   re   minimumr   r?   r   r   r   )r~   zoomr}   r   r   bboxs         r   draw_crop_scaler   #  s    ;;E5&:e))++DZ(($&.!<<GGIIEZ$$TE\4%<@@KKMME$*dk))r   c           	         g }d }t          dt          |                     D ]}| |         }|t          v r|dk    r;|| |dz
           k    r,|                    |t          |          dz
                      Ut          |         t	          j        dt          t          |                   dz
                                         d          }|                    t          ||                     |dk    r|                    d           t          j	        
                    d                    |                     |S )Nr   r&   . zbad character "{}"
)r   r   alphabetr,   r   r   splitr   sysstderrwriteformat)tokensr   	imagelistr~   rQ   chars         r   randomize_input_stringr   +  s2    IE1c&kk"" B Bay8Aq1u%%  3u::>!:;;;; N1s8D>':':Q'>@@%**    !=!=>>>>S[[S!!!!J3::4@@AAAAr   c                    g }| D ]}|dk    r|                     d           t          j        d|          rt          d          }nft          j        d|          rt          d          }nAt          j                            d                    |                     t          d          }|                     t          ||                     |S )Nr   z[a-z]lcz[A-Z]UCzbad character"{}"
start)	r,   rematchr   r   r   r   r   r   )r   r   r   r   r~   s        r   generate_random_stringr   F  s     I ; ;3;;S!!!!x&& * '4(( * 
  !6!=!=d!C!CDDD ))_UD99::::r   c                 H   g }g }d}t          dd|z            D ]}d|z  |dz   z  |z  }d }d }	| D ]\  }
}|
dk    r|d d          }|d d          }!|
dk    r|d         |cxk    r|d         k    sn |d         |cxk    r|d         k    r|n ny|d         |d         k    r	|d         }nH|d         |d         z
  |d         |d         z
  z  }|d         ||d         z  z
  }|dk    r	||z
  |z  }nd }|r|||k     r|}|	||	k    r|}	|d d          }|d d          }|
d	k    r|r|d d          \  }}|d d          \  }}}}}}||z
  }d
|z  d|z  z   }d|z  d|z  z
  d|z  z   }| d|z  z   d|z  z
  |z   }t          ||||          }|D ]h}d|cxk    rdk    rYn | d|z  z   d|z  z
  |z   |dz  z  d|z  d|z  z
  d|z  z   |dz  z  z   d
|z  d|z  z   |z  z   |z   }|||k     r|}|	||	k    r|}	i|dd          }|dd         }|
dk    r|dd          }|dd         }|
dk    r|dd          }|dd         }|1|	/|                    |           |                    ||	z
             Z|                    |           |                    |           ||fS )N   r            ?g      ?r%   Lr&   r(   rh      r)   r'   r*   QA)r   ry   r,   )r}   r   r   leftright
resolutionrQ   yxminxmaxr1   r:   r/   lastctrlre   r_   r`   bx0by0bx1by1bx2by2bx3by3ro   r-   tsrp   s                                r   optikernr   Z  s   DEJ1b:o&& K  K *C(4/  =	' =	'KCczzaaay!!!!9Gq----F1I----6!93L3L3L3LT!W3L3L3L3L3LayDG++"1I#AYa0VAYa5HI Ga$q'k166!"Q!AA $A %<1t88#$D<1t88#$Daaay!!!!9 )#AAAwHC39!!!90Cc3SaAS1s7*AC!c')AG3Aq3wS036A&q!Q22B ) );;;;Q;;;;;"%C!c'!9C!?AqD I#$s7QW#4q3w#>1a4"H!I#%8a#g#5":!; #&!&   $|q4xx'(#|q4xx'(bcc{!!A#;bcc{!!A#;bcc{!!A#; 0KKLL    KKLL;r   c                 p   g }|}| D ]M}|dk    r||t           j        z  z   }|\  }}}||z   |z   }|                    t          |||                     Nd }|}	t	          dt          |                    D ]>}
| |
         dk    r3|	|t           j        z  z   }	|                     |
           | |
         dk    3| |
         \  }}}|
dk    rd}n|g }t	          dt          ||
         d                             D ]A}|                    ||
         d         |         ||
dz
           d         |         z              Bt          |          }|	|z
  }	t          j	        |          }t          j        |                              |	d                                          }t          ||          }|	|z   |z   }	@|S )Nr   r   r&   )render_alphabetsoup_configspacer,   r   r   r   r+   mincopydeepcopyrF   rG   r@   r   r#   )r   r   kernlistlengthentryr}   r   r   	workspacepositionrQ   kernkerncomparej	thisimages                  r   layoutstringr     s    HF  C<<t&@&FFGFF#( E5&e^d*FOOt,,    IH1c(mm$$ + +lc!!4*D*J#JKHMM! lc!!  )|uf 66DDK1c(1+a.1122 N N""8A;q>!#4xAq7I!7L#LMMMM{##Dd?M%((	Z	**44XqAALLNN	 I66	e#d*r   c                 j   g }d}|t          |           k     r| |         }|dz  }|dk    r`d}|t          |           k     r3| |         }|dk    rn$|dz  }|dk    rn||z  }|t          |           k     3|r|                    |           n|                    |           |t          |           k     |S )z_Tokenize the string, looking for LaTeX style, multi-character tokens in the string, like \yogh.r   r&   \ r   )r   r,   )textr   rQ   r-   rp   s        r   tokenizer     s    F	A
c$ii--G	Q99Ac$ii--G99Q88Q c$ii--  !a   MM!! c$ii--" Mr   c                       e Zd Zd Zd ZdS )AlphabetSoupc                     |                     dddd           |                     ddt          dd	
           |                     ddt          j        dd
           d S )Nz-tz--textInkscapezThe text for alphabet soup)defaulthelpz-zz--zoomg       @zThe zoom on the output)typer   r   z-rz--randomizeFz!Generate random (unreadable) text)add_argumentr   rF   Boolean)selfparss     r   add_argumentszAlphabetSoup.add_arguments  s    (J5Q 	 	
 	
 	
 	(:R 	 	
 	
 	
 	4 	 	
 	
 	
 	
 	
r   c                 2   | j                             t          | j        j                  dz             }| j        j        rt          | j        j        |          }n)t          | j        j                  }t          ||          }t          ||          }|rddd}t          j        t          t          j        |                    t          t          j        |                              }| j                                         }|                    |           |                                e| j                                         j        t          j        g dg dg          z  j        }|xj        t          j        |           z  c_        d S d S d S )Npxnonez#000000)strokefill)stylero   )r           r   )r   r   r   )svgunittouustroptionsr   	randomizer   r   r   r   r   rF   PathElementStylerG   get_current_layerr,   	getparent	transform	Transformmatrix)	r   r   r   r   r}   snewlayermats	            r   effectzAlphabetSoup.effect  sq   x  T\%6!7!7$!>??<! 	=.t|/@$GGIIdl/00F.vt<<IY-- 	7!955A##ek!nn*=*=UZPUEVEVAWAWXXXCH..00ELL   ,H..00:o&HIIJ  %/#"6"6!66	7 	7 -,r   N)__name__
__module____qualname__r   r  r    r   r   r   r     s2        
 
 
7 7 7 7 7r   r   __main__)*r^   r   r\   r	   r   r   r   rF   r   r   r   r   r   r   r   r   r#   r2   r;   rA   rC   rU   rW   rY   rc   rf   ry   r   r   r   r   r   r   r   r   r   r   r   EffectExtensionr   r  runr    r   r   <module>r     sS  .    				  				 



  $ $ $ $ $ $ $ $ ! ! ! !	#	*%."(!&  (        
  
% % %,# # #$ $ $8 8 8& & &  <        0*$ *$ *$Z* * *  6  (R R Rj' ' 'T  0)7 )7 )7 )7 )75( )7 )7 )7X zLNN r   