
    CPcM                         d Z ddlZddlmZmZmZmZmZmZmZm	Z	m
Z
mZ  G d dej                  Zedk    r e                                             dS dS )z
see #inkscape on Freenode and
https://github.com/nikitakit/svg2sif/blob/master/synfig_prepare.py#L370
for an example how to do the transform of parent to children.
    N)
GroupAnchorSwitch	NamedViewDefsMetadataForeignObjectClipPathUseSvgDocumentElementc                   H    e Zd Zd Zed             Zd Zd Zd Zd Z	d Z
dS )	UngroupDeepc                     |                     dt          dd           |                     dt          dd           |                     dt          dd	           d S )
Nz--startdepthr   zstarting depth for ungrouping)typedefaulthelpz
--maxdepthi  zmaximum ungrouping depthz--keepdepthz'levels of ungrouping to leave untouched)add_argumentint)selfparss     ./usr/share/inkscape/extensions/ungroup_deep.pyadd_argumentszUngroupDeep.add_arguments   s    a6U 	 	
 	
 	
 	sE8R 	 	
 	
 	
 	:	 	 	
 	
 	
 	
 	
    c                 $   | j         }i }dg}|D ]&}||                                v r||         ||<   ||= '|                                }|                    |           |}ddg}|D ]7}|                     |          r |                     |          ||<   | j        |= 8t          | t          t          t          t          f          r-|s"d|                                 v r
| j        d= dS dS || _         dS |                    |           || _         dS )zPropagate style and transform to remove inheritance
        Originally from
        https://github.com/nikitakit/svg2sif/blob/master/synfig_prepare.py#L370
        filterfillstrokestyleN)r   keyscopyupdategetattrib
isinstancer   r   r   r   )	noder   
this_styleremaining_stylenon_propagatedkeyparent_style_copystyle_attribsr#   s	            r   _merge_stylezUngroupDeep._merge_style'   sK    Z
 #! 	$ 	$Cjoo'''''1#$sO "JJLL  ,,,&
  *# 	( 	(Fxx (%)XXf%5%5
6"K'd/GHH 	$" -diikk))G,,, *) -


 o... $DJJJr   c                 ~   |r7|dk    r2|j         }|r| j        j                            t	          d                    }|                    d           | j                            |dd                   }|                                D ]+}|                    t          j	        |dd                     ,d|
                    d	          z   d
z   }|
                    d          }|r9| j                            |dd                   }|
                    d          }|9|                    d|           d S d S d S )NnoneuserSpaceOnUse)clipPathUnitsclipPath   r   zurl(#id)	clip-path)	transformsvgdefsaddr
   set_random_idgetElementByIditerchildrenr   newr"   set)r   r%   clippathurlnode_transformnew_clippathclippathchildnode_clippathurls           r   _merge_clippathzUngroupDeep._merge_clippathV   sd    	/;&00!^N E
  $x}00+;<<<    **:666822;qt3DEE%2244 ; ;E $$SWUAq%9%9:::: &(8(8(>(>>D  $xx44" 9x../?"/EFF#'88K#8#8  # 9 HH[+.....1	/ 	/00r   c                 "   |                                 }t          |                              |          }|j        }|j        }|                    d          }t          t          |                    D ]}t          |t          j	                  s||j        z  |_        |                    d          | 
                    ||           |                     ||           |                    ||           |                    |           d S )Nr6   r   )	getparentlistindexr   r7   r"   reversedr$   inkexBaseElementr,   rF   insertremove)r   r%   node_parent
node_index
node_stylerA   rE   rD   s           r   _ungroupzUngroupDeep._ungroupr   s   nn&&+&&,,T22
Z
88K00d4jj)) 	2 	2EeU%677 ,u>EOxx  ,!!%444  (8999z511114     r   c                     t          |t                    rJ|                                6|| j        j        k    r&| j        j        |cxk    r| j        j        k    rn ndS dS )NTF)r$   r   rH   options	keepdepth
startdepthmaxdepth)r   r%   depthheights       r   _want_ungroupzUngroupDeep._want_ungroup   sj    tU##	  ,///'5IIIIDL4IIIIII4ur   c                 l   |ddd id dg}|r&|d         }|d         }|d         }|d         }|t          |t          t          t          t          f          r|                                 t          |t                    rt          |          sd|d<   n|dz  }|                                D ]}|	                    |||d d           nb| 
                    |||          r|                     |           |dz  }|d	         }|d         }|||k     r||d<   |                                 |$d S d S )
Nr   rZ   )r%   rY   prevrZ   r3   r%   rY      )r%   r]   rY   rZ   r]   )r$   r   r   r   r	   popr   rI   r=   appendr[   rS   )	r   r%   qcurrentrY   rZ   rD   previousprev_heights	            r   _deep_ungroupzUngroupDeep._deep_ungroup   s   
 Q40@DQQR +	eG6?DG$EX&F ~dYh$NOO EEGGG "$.. d4jj ()GH%% QJE!%!2!2!4!4  (-(/).*.	     %%dE6:: (MM$''' !"6?&x0&+*>*>)/HX& W  +	 +	 +	 +	 +	r   c                     | j         j        r8| j         j                                        D ]}|                     |           d S | j                                        D ]}|                     |           d S )N)r8   	selectionvaluesre   documentgetroot)r   r%   s     r   effectzUngroupDeep.effect   s    8 	)*1133 ) )""4(((() ) --// ) )""4(((() )r   N)__name__
__module____qualname__r   staticmethodr,   rF   rS   r[   re   rk    r   r   r   r      s        
 
 
 ,$ ,$ \,$\/ / /8! ! !&  2 2 2h) ) ) ) )r   r   __main__)__doc__rL   r   r   r   r   r   r   r	   r
   r   r   EffectExtensionr   rl   runrp   r   r   <module>ru      s                            q) q) q) q) q)%' q) q) q)h zKMM r   