HEX
Server: Apache
System: Linux opal14.opalstack.com 3.10.0-1160.108.1.el7.x86_64 #1 SMP Thu Jan 25 16:17:31 UTC 2024 x86_64
User: curbgloabal_opal (1234)
PHP: 8.1.29
Disabled: exec,passthru,shell_exec,system
Upload Files
File: //usr/share/inkscape/extensions/synfig_output.pyc
�
��Yc@s�dZddlZddlZddlZddlmZddlZddlmZmZm	Z	m
Z
ddlZddlZddl
Z
ddlZddlmZmZmZddlZdefd��YZdefd	��YZed
ddgdd
dggd�Zd
d�Zd�Zd�Zd�Zdefd��YZe dkr�ye�Z!e!j"de#�Wnek
r�Z!e
e!�nXndS(s
synfig_output.py
An Inkscape extension for exporting Synfig files (.sif)

Copyright (C) 2011 Nikita Kitaev

This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
i����N(tdeepcopy(tNSStaddNStetreeterrormsg(t
SynfigPreptMalformedSVGErrort
get_dimensiontUnsupportedExceptioncBseZdZRS(sbWhen part of an element is not supported, this exception is raised to invalidate the whole element(t__name__t
__module__t__doc__(((s//usr/share/inkscape/extensions/synfig_output.pyR$stSynfigDocumentcBs<eZdZdddd�Zd�Zd�Zd�Zd�Zd	�Zd
�Z	d�Z
d�Zd
�Ze
ee�Ze
e	e
�Ze
ee�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd3edd�Zd�Zd�Zdd3d�Ziid3edd�Z dd3e!d�Z"iie!d�Z#dd�Z$d �Z%d!d"d"gd"d!d"gggd#d$d%�Z&d!d"d"gd"d!d"gggd#d$d&�Z'd'�Z(d(�Z)d)e!d*�Z*e!d+�Z+d,e!d-�Z,e!d.�Z-e!d/�Z.e!d0�Z/d1e!d2�Z0RS(4sGA synfig document, with commands for adding layers and layer parametersiisSynfig Animation 1cCs?tjd|||f�|_|j�i|_i|_dS(Ns�
<canvas
    version="0.5"
    width="%f"
    height="%f"
    xres="2834.645752"
    yres="2834.645752"
    view-box="0 0 0 0"
    >
  <name>%s</name>
</canvas>
(Rt
fromstringtroot_canvast_update_viewboxt	gradientstfilters(tselftwidththeighttname((s//usr/share/inkscape/extensions/synfig_output.pyt__init__*s

	cCs|jS(N(R(R((s//usr/share/inkscape/extensions/synfig_output.pytget_root_canvasAscCs
|jj�S(N(Rtgetroottree(R((s//usr/share/inkscape/extensions/synfig_output.pyt
get_root_treeDscCsgd|jdtj|jdtj|jdtj|jdtjf}|jjd|�dS(s5Update the viewbox to match document width and heights%f %f %f %fg@sview-boxN(RtsiftkuxRRtset(Rtattr_viewbox((s//usr/share/inkscape/extensions/synfig_output.pyRGscCst|jjdd��S(NRt0(tfloatRtget(R((s//usr/share/inkscape/extensions/synfig_output.pyt	get_widthQscCs'|jjdt|��|j�dS(NR(RRtstrR(Rtvalue((s//usr/share/inkscape/extensions/synfig_output.pyt	set_widthTscCst|jjdd��S(NRR(RRR (R((s//usr/share/inkscape/extensions/synfig_output.pyt
get_heightXscCs'|jjdt|��|j�dS(NR(RRR"R(RR#((s//usr/share/inkscape/extensions/synfig_output.pyt
set_height[scCs|jjdd�S(NRt(RR (R((s//usr/share/inkscape/extensions/synfig_output.pytget_name_scCs!|jjd|�|j�dS(NR(RRR(RR#((s//usr/share/inkscape/extensions/synfig_output.pytset_namebscCs
tj�jS(sGenerate a new GUID(tuuidtuuid4thex(R((s//usr/share/inkscape/extensions/synfig_output.pytnew_guidlscCs|tjS(s)Convert distance from SVG to Synfig units(RR(Rtdistance((s//usr/share/inkscape/extensions/synfig_output.pytdistance_svg2sifrscCs|tjS(s)Convert distance from Synfig to SVG units(RR(RR.((s//usr/share/inkscape/extensions/synfig_output.pytdistance_sif2svgvscCsa|d}|j|d}||jd8}||jd8}|tj:}|tj:}||gS(s-Convert SVG coordinate [x, y] to Synfig unitsiig@(RRRR(Rtvectortxty((s//usr/share/inkscape/extensions/synfig_output.pytcoor_svg2sifzs


cCsv|dtj|jd}|dtj|jd}|j|}|j||g�|ksltd��||gS(s-Convert Synfig coordinate [x, y] to SVG unitsig@is&sif to svg coordinate conversion error(RRRRR4tAssertionError(RR1R2R3((s//usr/share/inkscape/extensions/synfig_output.pytcoor_sif2svg�s

'cCs�t|�tkr�t|�dkr�t|d�tksPt|d�tkr�t|d�tks|t|d�tkr�|j|�}|d|d<|d|d<dSq�nx0|D](}t|�tkr�|j|�q�q�WdS(sAScan a list for coordinate pairs and convert them to Synfig unitsiiiN(ttypetlisttlentintRR4tlist_coor_svg2sif(Rtltl_sifR2((s//usr/share/inkscape/extensions/synfig_output.pyR;�s$,,

cCs�t|�tkr�t|�dkr�t|d�tksPt|d�tkr�t|d�tks|t|d�tkr�|j|�}|d|d<|d|d<dSq�nx0|D](}t|�tkr�|j|�q�q�WdS(s>Scan a list for coordinate pairs and convert them to SVG unitsiiiN(R7R8R9R:RR6tlist_coor_sif2svg(RR<R=R2((s//usr/share/inkscape/extensions/synfig_output.pyR>�s$,,

cCs|j|d�dS(s3Convert a BLine from SVG to Synfig coordinate unitstpointsN(R;(Rtb((s//usr/share/inkscape/extensions/synfig_output.pytbline_coor_svg2sif�scCs|j|d�dS(s3Convert a BLine from Synfig to SVG coordinate unitsR?N(R>(RR@((s//usr/share/inkscape/extensions/synfig_output.pytbline_coor_sif2svg�stautocCs�|d	kr!|jjd�}ntj|d�}|jd|�|jd|�|rl|jdd�n|jdd�|dkr�tj|�}nt|�t	kr�t
|�}n|jd|�|S(
sBuild an empty layertlayerR7tdesctactivettruetfalseRCtversionN(tNoneRtmakeelementRt
SubElementRRtdefaultLayerVersionR7RR"(Rt
layer_typeREtcanvasRFRIRD((s//usr/share/inkscape/extensions/synfig_output.pytbuild_layer�scCs(tjtj||d||d�S(s.Calculate radius of a tangent given two pointsi(Rt
tangent_scaletmathtsqrt(Rtp1xtp1ytp2xtp2y((s//usr/share/inkscape/extensions/synfig_output.pyt_calc_radius�scCs�||}||}|dkrI|dkrItjtj||�}nV|dkr~|dkr~tjtj||�}n!|dkr�|dkr�tj||�}n�|dkr�|dkr�dtjtj||�}n�|dkr|dkrdtjd}n�|dkr9|dkr9tjd}nf|dkrZ|dkrZd}nE|dkr{|dkr{d}n$|dkr�|dkr�tj}n|dtjS(s:Calculate angle (in radians) of a tangent given two pointsiii����i�(RRtpitatan(RRTRURVRWtdxtdytag((s//usr/share/inkscape/extensions/synfig_output.pyt_calc_angle�s*

!		c/Cs	|d5kr!|jjd�}ntj|d�}|jd|�|dkr�|d5k	r|jd�}tj||�}q�tjd5||�}n|dkr�tj|d�}|jdt	t
|���n|dkrtj|d�}|jdt	t|���n�|dkr�tj|d�}tj|d	�}	t	t
|d
��|	_tj|d�}
t	t
|d��|
_nL|d
krmtj|d
�}tj|d�}t	t
|d
��|_tj|d�}t	t
|d��|_tj|d�}
t	t
|d��|
_tj|d�}t
|�dkrat	t
|d��nd|_ng|dkr�tj|d�}xF|j�D]}tj|d
�}|jdt	t
|���||}tj|d�}t	t
|d
��|_tj|d�}t	t
|d��|_tj|d�}
t	t
|d��|
_tj|d�}t
|�dkr�t	t
|d��nd|_q�Wn3|dkr�tj|d�}|r�|jdd�q�|jdd�n�|dkr�tj|d�}t|�tkr2|jdd|�q�t|�t
kr[|jdd|�q�t|�t	kr�|jd|�q�nQ|dkrYtj|d�}|jdd�|dtkr�|jdd�n|jdd�x�|d D]c}t
|dd
�}	t
|dd�}
t
|d
d
�}t
|d
d�}t
|dd
�}t
|dd�}|j|	|
||�}|j|	|
||�}|j|	|
||�}|j|	|
||�d!}|dr�d}nd}tj|d"�}tj|d#�}|jdd�tj|d$�}tj|d�}t	|	�tj|d	�_t	|
�tj|d�_tj|d%�} tj| d�jdd�tj|d&�}!tj|!d�jdd'�tj|d(�}"tj|"d�jd|�tj|d)�}#tj|d*�}$tj|#d+�}%|%jdd�tj|$d+�}&|&jdd�tj|%d,�}'tj|&d,�}(tj|'d�})tj|(d�}*|)jdt	|��|*jdt	|��tj|%d-�}+tj|&d-�},tj|+d.�}-tj|,d.�}.|-jdt	|��|.jdt	|��q�Wn{|d/kr�tj|d/�}|jd0d1�|jd2d1�|d5k	r�x|D]}|j|�q�Wq�n
td3|�|r�|jd4|�n|jd4|j��|S(6sAdd a parameter node to a layertparamRRCR7trealR#tintegerR1R2iR3itcolortrtgR@itais1.0tgradienttpostboolRGRHttimes%dss%fstblinetbline_pointtloopR?g�f@tentryt	compositetpointRtorigins0.5tsplittt1tt2tradial_compositetradiustthetatangleROtxress10.0tyressUnsupported param type %stguidN(RJRRKRRLRR Rt	paramTypeR"RR:ttextR9tkeysR7tTrueRXR^tappendR5R-(/RRDRR#t
param_typeRzR_RNtelR2R3RcRdR@ReRgRbtctvertexttg1xttg1yttg2xttg2yt
tg1_radiust	tg1_anglet
tg2_radiust	tg2_angleRqRmRnRoR1RRptsplit_elRrRstt1_rctt2_rctt1_rtt2_rt	t1_radiust	t2_radiustt1_ttt2_ttt1_anglett2_angle((s//usr/share/inkscape/extensions/synfig_output.pytbuild_param�s�4
8
	

cCs�|j|||||�}tj|�}	x�|	j�D]�}
|	|
d}|
|j�krj||
}n|	|
d}|
|j�kr�||
}
nd}
|dk	r7|j||
||d|
�q7q7W|S(sbCreate a new layer

        Keyword arguments:
        layer_type -- layer type string used internally by Synfig
        desc -- layer description
        params -- a dictionary of parameter names and their values
        guids -- a dictionary of parameter types and their guids (optional)
        active -- set to False to create a hidden layer
        iiRzN(RPRtdefaultLayerParamsR}RJR�(RRNREtparamstguidsRORFRIRDtdefault_layer_paramst
param_nameR�tparam_valuet
param_guid((s//usr/share/inkscape/extensions/synfig_output.pytcreate_layer�s


#cCs|rtd�n|jd�}|s3td��|dkrTtj||�}ng}x9|j�D]+}	|	jd�|krg|j|	�qgqgWt|�dkr�|j|||||�nMt|�dkr�td�n/|jd	||||�}
|j	|d|
�d	S(
sSet a layer parameter

        Keyword arguments:
        layer -- the layer to set the parameter for
        name -- parameter name
        value -- parameter value
        param_type -- parameter type (default "auto")
        guid -- guid of the parameter value
        s,Modifying linked parameters is not supportedR7sLayer does not have a typeRCRiis,Found multiple parameters with the same nameN(
R5R RR{titerchildrenRR9R�RJtreplace(RRDRR#R�Rzt
modify_linkedRNtexistingR_t	new_param((s//usr/share/inkscape/extensions/synfig_output.pyt	set_param�s 
c	Cstxm|j�D]_}||j�krO|j||||d||d|�q
|j||||d|�q
WdS(s�Set layer parameters

        Keyword arguments:
        layer -- the layer to set the parameter for
        params -- a dictionary of parameter names and their values
        guids -- a dictionary of parameter types and their guids (optional)
        RzR�N(R}R�(RRDR�R�R�R�((s//usr/share/inkscape/extensions/synfig_output.pyt
set_params�s*cCs�|jd�}|s!td��|dkrBtj||�}nx�|j�D]s}|jd�|krO|dkr�t|djdd��S|d	kr�t|djd	d��Std
�qOqOWdS(s�Get the value of a layer parameter

        Keyword arguments:
        layer -- the layer to get the parameter from
        name -- param name
        param_type -- parameter type (default "auto")

        NOT FULLY IMPLEMENTED
        R7sLayer does not have a typeRCRR`iR#RRas2Getting this type of parameter not yet implementedN(R R5RR{R�RR:t	Exception(RRDRR�RNR_((s//usr/share/inkscape/extensions/synfig_output.pyt	get_param�s
cCs||j|<dS(sRegister a filterN(R(Rt	filter_idtf((s//usr/share/inkscape/extensions/synfig_output.pyt
add_filtersg�?gR'tpadc	Cs�idd6|d6|d6|d6|d6}|gkrR||d<|j�|d<n"|d	krk||d
<n	td�||j|<dS(
s%Register a linear gradient definitiontlinearR7tp1tp2tmtxtspreadMethodtstopst
stops_guidR'tlinks#Gradient has neither stops nor linkN(R-RR(	Rtgradient_idR�R�R�R�R�t
spread_methodRf((s//usr/share/inkscape/extensions/synfig_output.pytadd_linear_gradients


	c	
Cs�idd6|d6|d6|d6|d6|d6}	|gkrY||	d<|j�|	d	<n"|d
krr||	d<n	td�|	|j|<d
S(s%Register a radial gradient definitiontradialR7tcenterRutfocusR�R�R�R�R'R�s#Gradient has neither stops nor linkN(R-RR(
RR�R�RuR�R�R�R�R�Rf((s//usr/share/inkscape/extensions/synfig_output.pytadd_radial_gradients


	cCs�||jj�krdS|j|}d|j�ksH|ddkrL|S|d|jj�krqtd�n|j|d�}|d|d<|d|d<|d=||j|<|S(sd
        Return a gradient with a given id

        Linear gradient format:
        {
        "type"      : "linear",
        "p1"        : [x, y],
        "p2"        : [x, y],
        "mtx"       : mtx,
        "stops"     : color stops,
        "stops_guid": color stops guid,
        "spreadMethod": "pad", "reflect", or "repeat"
        }

        Radial gradient format:
        {
        "type"      : "radial",
        "center"    : [x, y],
        "radius"    : r,
        "focus"     : [x, y],
        "mtx"       : mtx,
        "stops"     : color stops,
        "stops_guid": color stops guid,
        "spreadMethod": "pad", "reflect", or "repeat"
        }

        Color stops format
        {
        0.0         : color ([r,g,b,a] or [r,g,b]) at start,
        [a number]  : color at that position,
        1.0         : color at end
        }
        R�R'sLinked gradient ID not foundR�R�N(RR}RJRtget_gradient(RR�Rftlinked_gradient((s//usr/share/inkscape/extensions/synfig_output.pyR�+s#
"
cCs|j�}|ddkr)t|d<n|ddkrFt|d<i}x]|dD]Q}|d|}|dkr�|||d<qT|||d<||d|d<qTW||d<|d	d
kr|ddd|d
d|dd|ddd|d
d|ddg|d
<n|d	dkrFd|d|d<qFn|d|d<|d	d
kr�|j|d�|d<|j|d
�|d
<n|d	dkr�|j|d�|d<|j|d�|d<nd	dddddg}x*|D]"}||j�kr�||=q�q�W|S(sDTransform gradient to a list of parameters to pass to a Synfig layerR�trepeatRltreflectR�g�?g@iR7R�R�iR�R�RuRfR�R�R�R�(tcopyR~R4R/R}(RRfRdt	new_stopsRgtvaltremoved_attribsR2((s//usr/share/inkscape/extensions/synfig_output.pytgradient_to_paramsfsF


'4	
tBlurcCs\|jd|ditjdd6||gd6�}|rD||gS|j||g�SdS(s!Gaussian blur the given layers by the given x and y amounts

        Keyword arguments:
        layers -- list of layers
        x -- x-amount of blur
        y -- x-amount of blur
        is_end -- set to True if layers are at the end of a canvas

        Returns: list of layers
        tblurR�tstraighttblend_methodtsizeN(R�Rt
blend_methodstop_encapsulate(RtlayersR2R3Rtis_endR�((s//usr/share/inkscape/extensions/synfig_output.pytop_blur�scCsu|gkr|S|dkr |S|j|g�}|j|ddtjd�||}|rd|S|j|�SdS(s=Apply a color overlay to the given layers

        Should be used to apply a gradient or pattern to a shape

        Keyword arguments:
        layers -- list of layers
        overlay -- color layer to apply
        is_end -- set to True if layers are at the end of a canvas

        Returns: list of layers
        iR�s
straight ontoN(RJR�R�RR�(RR�toverlayR�toverlay_enctret((s//usr/share/inkscape/extensions/synfig_output.pytop_color�s
s
Inline CanvascCs6|gkr|S|jd|di|d6�}|gS(sEncapsulate the given layers

        Keyword arguments:
        layers -- list of layers
        name -- Name of the PasteCanvas layer that is created
        is_end -- set to True if layers are at the end of a canvas

        Returns: list of one layer
        tPasteCanvasR�RO(R�(RR�RR�RD((s//usr/share/inkscape/extensions/synfig_output.pyR��scCs�xI|D]A}|j|d�tjdkr|j|j|�||�SqWx7|D]/}|j|d�}|j|d||�qSW|S(scIncrease the opacity of the given layers by a certain amount

        Keyword arguments:
        layers -- list of layers
        opacity -- the opacity to apply (float between 0.0 to 1.0)
        name -- name of the Transform layer that is added
        is_end -- set to True if layers are at the end of a canvas

        Returns: list of layers
        R�Rntamount(R�RR�top_fadeR�R�(RR�topacityR�RDR�((s//usr/share/inkscape/extensions/synfig_output.pyR��s
 
cCsw||jj�kr%td|�ny9|j||||�}t|�tksYt�|SWntk
rr|SXdS(s�Apply a filter to the given layers

        Keyword arguments:
        layers -- list of layers
        filter_id -- id of the filter
        is_end -- set to True if layers are at the end of a canvas

        Returns: list of layers
        sFilter %s not foundN(RR}RR7R8R5R(RR�R�R�R�((s//usr/share/inkscape/extensions/synfig_output.pyt	op_filter�s

cCs�|gkr|S|dkr |S|d}t|�dksX|j|dd�dkrn|j|�d}nt|�}|j|dtj|�|gS(s[Set the blend method of the given group of layers

        If more than one layer is supplied, they will be encapsulated.

        Keyword arguments:
        layers -- list of layers
        blend_method -- blend method to give the layers
        is_end -- set to True if layers are at the end of a canvas

        Returns: list of layers
        RniiR�g�?R�(R9R�R�RR�RR�(RR�R�R�RD((s//usr/share/inkscape/extensions/synfig_output.pytop_set_blends
.t	TransformcCsm|gkr|S|d
ks@|dddgdddggkrD|Sddg}ddg}ddg}ddg}ddg}	ddg}
tj||�tj||�tj||	�tj||
�|jd|di|j|�d6|j|�d6|j|�d	6|j|�d
6|j|	�d6|j|
�d6�}|rU||gS|j||g�Sd
S(s:Apply a matrix transformation to the given layers

        Keyword arguments:
        layers -- list of layers
        mtx -- transformation matrix
        name -- name of the Transform layer that is added
        is_end -- set to True if layers are at the end of a canvas

        Returns: list of layers
        g�?gidi�twarpR�tsrc_tltsrc_brtdest_tltdest_trtdest_brtdest_blN(RJtsimpletransformtapplyTransformToPointR�R4R�(RR�R�RR�R�R�R�R�R�R�R�((s//usr/share/inkscape/extensions/synfig_output.pytop_transform,s00N(1R	R
RRRRRR!R$R%R&R(R)tpropertyRRRR-R/R0R4R6R;R>RARBRJR~RPRXR^R�R�tFalseR�R�R�R�R�R�R�R�R�R�R�R�R�R�R�(((s//usr/share/inkscape/extensions/synfig_output.pyR(sV			
																	�!	--	;	>g�?gcCs�|s
gStj|�}|dkr.d}n|}x$tt|��D]}|d7}qGWg}g}g}g}	t}
xl|D]d}|\}}
|dkr�|gkr�td||f�q�|dkrY|r�|ddj|	|||
g�n|jidd6td6gd6�|
}|
}|
}	|d	d
krFtnt}
|d}q�|dkr�|ddj|	|||
g�|
}|
}	|d	d
kr�tnt}
|d}q�|d
kr3|ddj|	||
d |
g�|
d}|
dd!}	|d	d
kr tnt}
|d}q�|dkr|}|
d	d!}|
dd!}|d	}dd|d	dd|d	}dd|d	dd|d	}|d	}|d}dd|ddd|d}dd|ddd|d}|d}|ddj|	||g||g|
g�||g}||g}	|d	d
krltnt}
|d}q�|dkr*t	j
||
�}|	|d	d	<|dd}|dd	}	|d	d
kr�tnt}
|d}x�|d D](}|jt�|ddj|�q�Wq�|dkr�t|dd�d	krw|ddj|	||tg�nJ||kr�|	|ddd	d	<n$|ddj|	|||
g�g}g}	t}
t|dd<q�q�W|r|ddj|	|||
g�n|dddgdddggkr�x\|D]Q}xH|dD]<}x3|D]+}t|�tkr^t
j||�q^q^WqQWq@Wn|S(s
    Convert a path to a BLine List

    bline_list format:

    Vertex:
    [[tg1x, tg1y], [x,y], [tg2x, tg2y], split = T/F]
    Vertex list:
    [ vertex, vertex, vertex, ...]
    Bline:
    {
    "points"    : vertex_list,
    "loop"      : True / False
    }
    R'R�tMs5Bad path data: path doesn't start with moveto, %s, %si����R?t	nodetypesRlitzitLtCii����itQg�?ig@tAtZgN(t
simplepatht	parsePathRJtrangeR9R~RRR�tcubicsuperpatht	ArcToPathR7RhR�R�(tpath_dR�R�tpathtntt_t
bline_listtsubpathstarttlasttlastctrlt	lastsplittstcmdR�tq0tq1tq2tx0tx1tx2tx3ty0ty1ty2ty3tarcpR�RjR�tpt((s//usr/share/inkscape/extensions/synfig_output.pytpath_to_bline_list[s�	
'"
$
'





""

""
.


'$'$

"tstylecCsw|j|�}|dkriStg|jd�D]:}t|�r2g|jd�D]}|j�^qT^q2�SdS(Nt;t:(R RJtdictRqR9tstrip(tnodetstyle_attribR�tiR2((s//usr/share/inkscape/extensions/synfig_output.pyt
extract_style�scGs�||j�krH||dkr2ddddgStj||�}nd}t|ddtj�t|ddtj�t|ddtj�dg}x?|D]7}||j�kr�|dt||�|d<q�q�W|S(	Ntnoneiig�o@ig�?i(iii(R}tsimplestylet
parseColortpowRtgammaR(Rtcolor_attribtopacity_attribsR�RbR�((s//usr/share/inkscape/extensions/synfig_output.pyt
extract_color�sN
#cGsDd}x7|D]/}||j�kr
|t||�}q
q
W|S(Ng�?(R}R(RRR�R�((s//usr/share/inkscape/extensions/synfig_output.pytextract_opacitys

cCs�||j�kr%t||�}nd}|dd|dd|dd|dd}tjt|��}||tjS(Nii(R}RRRRStabsRR(Rtwidth_attribR�Rtarea_scale_factortlinear_scale_factor((s//usr/share/inkscape/extensions/synfig_output.pyt
extract_width
s2tSynfigExportcBsYeZd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
RS(	cCstj|�dS(N(RR(R((s//usr/share/inkscape/extensions/synfig_output.pyRscCs'tj|�|jj�}t|jdd��}t|jdd��}|jddt�}t|�dkr�|dj	}n|jt
d	d
�d�}t|||�}g}x*|j�D]}||j
||�7}q�W|j�}	x|D]}
|	j|
�q�W|j�jtj�dS(NRiRis	svg:titlet
namespacesiitdocnametsodipodisSynfig Animation 1(RteffecttdocumenttgetrootRR txpathRR9R|RRR�tconvert_nodeRRRtwritetsyststdout(RtsvgRRttitleRtdR�RRRD((s//usr/share/inkscape/extensions/synfig_output.pyR's 

c	Cs\|jtdd�krgS|jtdd�krH|j||�gS|jtdd�krdgS|jtdd�tdd�tdd�td	d�gkr�gSg}|jtdd�kr@x$|D]}||j||�7}q�W|jtd
d��dkr�|jtd
d�d�}|j|d|�}q�n�|jtdd�ksp|jtdd�kr�xT|D]}||j||�7}qwWn-|jtd	d�kr�|j||�}nt|�}d|j�kr(|dj	d�r(|ddj
d�d}|j||�}nt|d�}|dkrX|j
||�}n|S(s.Convert an SVG node to a list of Synfig layerst	namedviewR&tdefsR/tmetadataRdRetswitchR�t	groupmodetinkscapeRDtlabels
Inline CanvasRtfilterturlit)iR�g�?(ttagRt
parse_defsR+R R�tconvert_pathRR}t
startswithRqR�RR�(	RRR1R�tsubnodeRRR�R�((s//usr/share/inkscape/extensions/synfig_output.pyR+5sD

%cCs�x�|j�D]�}|jtdd�kr>|j||�q
|jtdd�kri|j||�q
|jtdd�kr
|j||�q
q
WdS(NtlinearGradientR/tradialGradientR9(R�R<Rtparse_gradienttparse_filter(RRR1tchild((s//usr/share/inkscape/extensions/synfig_output.pyR=bsc
Cs�|jtdd�kr_|jdtt|���}t|jdd��}t|jdd��}t|jdd��}t|jdd��}tj|jd	��}|jtd
d�d�d
}	|jdd�}
|	dkr.|j||�}|j	|||g||g|d|d|
�q�|j	|||g||g|d|	d|
�n}|jtdd�kr�|jdtt|���}t|jdd��}t|jdd��}
t|jdd��}t|jdd��}t|jdd��}tj|jd	��}|jtd
d�d�d
}	|jdd�}
|	dkr�|j||�}|j
|||
g|||g|d|d|
�q�|j
|||
g|||g|d|	d|
�ndS(NRAR/tidRs0.0RRRtgradientTransformthreftxlinkt#iR�R�R'R�R�R�RBtcxtcyRctfxtfy(R<RR R"RFRR�tparseTransformtparse_stopsR�R�(RRR1R�RRRRR�R�R�R�RKRLRcRMRN((s//usr/share/inkscape/extensions/synfig_output.pyRCks6114cCs|i}xo|j�D]a}|jtdd�krkt|jd��}t|�}t|dd�||<qtd�qW|S(NtstopR/toffsets
stop-colorsstop-opacitysChild of gradient is not a stop(R�R<RRR RRR(RRR1R�RQRRR((s//usr/share/inkscape/extensions/synfig_output.pyRP�s
csD�jdtt����}t�fd�}|j||�dS(NRFcs�i|d6|d6}|}x��j�D]r}|jd�|krLt�n||jd�}g}|jtdd�kr?|jdd�}|jdd�j�}t|d	�}	t	|�d
kr�t|d
�}
n|	}
|	d	kr|
d	kr|}qk|j
|	�}	|j
|
�}
|j||	|
dt�}n,|jtdd�kre|jd
d�}|dkr~d}n]|dkr�d}nH|dkr�d}n3|dkr�d}n|dkr�d}n	t
d�|jd�dkrt}|j||�|j|d�}qk|jd�|kr9t�qk||jd�}
|
|j||�}nt�|jd�r�|||jd�<n||d<q(Wt	|d�d
kr�|r�|j|d�S|dSdS(Nt
SourceGraphictintfeGaussianBlurR/tstdDeviationRt,t iiR�tfeBlendtmodetnormalRntmultiplytscreentdarkentlightentbrightensInvalid blend methodtin2tBackgroundImagetbehindtresult(RJR�R RR<RR�RqRR9R/R�R~RR�R�R�(R1R�R�trefstencapsulate_resultREtl_intl_outtstd_devR2R3RZR�tl_in2(R(s//usr/share/inkscape/extensions/synfig_output.pyt
the_filter�s^

								%	(R R"RFR�R�(RRR1R�Rk((Rs//usr/share/inkscape/extensions/synfig_output.pyRD�sHc
	Csrg}|jdtt|���}t|�}tj|jd��}t|jd�|jtdd��|�}x�|D]�}|j|�|j	�}	|j
dd�dkr�|djd	�r�d
d
d
dg}
nt|dd�}
|j
d
|i|d6|
d6|j
dd�dkr(dnd
d6di|	d6�}|djd	�r�|j|ddjd�d
||�d
}|j|gd|�d
}|j|gt|d��d
}n|j|�n|j
dd�dkr||djd	�rd
d
d
dg}
nt|dd�}
|j
d|i|d6|
d6t|d|�d6|j
dd�dkrttntd6|j
d d!�d!kr�tntd"6|j
d d!�d!kr�tntd#6di|	d6�}|djd	�rZ|j|ddjd�d
||�d
}|j|gd|�d
}|j|gt|d��d
}n|j|�q|q|W|S($s3Convert an SVG path node to a list of Synfig layersRFt	transformR1R�R&tfills#000000RR:iisfill-opacitytregionRjRbs	fill-ruletnonzerotevenoddt
winding_styleR�iR;R�tstrokesstroke-opacitytoutlinesstroke-widthRsstroke-linejointmitertsharp_cuspssstroke-linecaptbuttsround_tip[0]sround_tip[1](R R"RFRR�RORRRAR-t
setdefaultR?RR�tconvert_urlRqR�R�RRR"R~R�(
RRR1R�tnode_idRR�tblinesRjt
bline_guidRbRDtcolor_layer((s//usr/share/inkscape/extensions/synfig_output.pyR>�sT-

(
.%%%(
.%cCs�|j|�}|d
kr"d
gS|ddkrd|jd||j|�di|dd6�}n|ddkr�|jd||j|�di|dd6�}n|j|gtj||d	��S(sIReturn a list Synfig layers that represent the gradient with the given idR7R�tlinear_gradientR�R�RfR�tradial_gradientR�N(R�RJR�R�R�R�tcomposeTransform(Rturl_idR�R1RfRD((s//usr/share/inkscape/extensions/synfig_output.pyRx)s(R	R
RR'R+R=RCRPRDR>Rx(((s//usr/share/inkscape/extensions/synfig_output.pyR#s			-			#		O	@t__main__toutput($RR-RRR*R�RtinkexRRRRR�RR�R�tsynfig_prepareRRRtsynfig_fileformatRR�RtobjectRRJRRRRR"R#R	tetaffectR�(((s//usr/share/inkscape/extensions/synfig_output.pyt<module>s8"$���6'�			
�'