o
    {gs                  	   @   sZ  d dl Z d dlZd dlmZ ddlmZmZ ddlmZ ddl	m
Z
 ddlmZ dd	lmZ dd
lmZ ddlmZmZ z
ddlmZ dZW n eyQ   dZY nw i dddddddddddddddddddddddd d!d d"d d#d$d%d&d'd&d&d&d(d(d)d)d)d*ZG d+d, d,ZG d-d. d.eejZd/d0 Zd3d1d2ZdS )4    N)ElementTree   )
SvgHandlerNameMode   )objects)NVector)restructure)TransformMatrix)glaxnimate_helpers)Color	ColorMode)fontTFThind   Hairline
ExtraLight   
UltraLightLighti,  Regular  NormalPlainStandardRomanMediumi  SemiBoldiX  DemiDemiBoldBoldi  Extrai   	ExtraBoldi  i  )Ultra	UltraBoldBlackHeavy
ExtraBlack
UltraBlack
UltraHeavyc                   @   s$   e Zd ZdejfddZdd ZdS )PrecompTimepclc                 C   s
   || _ d S N)r+   )selfr+    r.   w/var/www/bot.gig.net.ua/public_html/telegram/P1/HellBot/venv/lib/python3.10/site-packages/lottie/parsers/svg/builder.py__init__"   s   
zPrecompTime.__init__c                 C   s>   |}| j jr| j j|}|jd|  |j|  }|| j j S )Nr   )r+   time_remapping	get_valuein_point	out_point
start_time)r-   timelotremapremapfr.   r.   r/   get_time_offset%   s
   zPrecompTime.get_time_offsetN)__name__
__module____qualname__r   PreCompLayerr0   r:   r.   r.   r.   r/   r*   !   s    r*   c                       s  e Zd ZdZdZdZedeeef Zdb fdd	Z	e
dd	 ZdcddZdd ZddddZdejfddZdd Zdd Zdd Zdd Zdd Zd d! Zd"d# Zd$d% Zd&d' Zeddfd(d)Zded*d+Zd,d- Zd.d/ Zd0d1 Z d2d3 Z!d4d5 Z"d6d7 Z#d8d9 Z$d:d; Z%d<d= Z&d>d? Z'd@dA Z(dBdC Z)dDdE Z*dFdG Z+dHdI Z,dJdK Z-dLdM Z.dNdO Z/dPdQ Z0dRdS Z1dTdU Z2dVdW Z3dXdY Z4dZd[ Z5d\d] Z6d^d_ Z7d`da Z8  Z9S )f
SvgBuilderTz:_A-Za-z\xC0-\xD6\xD8-\xF6\xF8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\U00010000-\U000EFFFFz#-.0-9\xB7\u0300-\u036F\u203F-\u2040z^[%s][%s%s]*$r   c                    st   t    td| _t| j| _| jd | jjd< t | _	d| _
tj| _|| _g | _i | _i | _i | _g | _d S )Nsvgxmlnsr   )superr0   r   Elementr@   domns_mapattribsetidsidcr   Inkscape	name_modeactual_timeprecomp_times	_precomps_assets_fonts_current_layer)r-   r6   	__class__r.   r/   r0   8   s   

zSvgBuilder.__init__c                 C   s.   | j }| jr| jD ]}||| jd }q	|S )N)rL   rM   r:   rQ   )r-   r6   pctr.   r.   r/   r6   G   s
   
zSvgBuilder.timeidc                 C   s<   	 |  j d7  _ d|| j f }|| jvrnq| j| |S )NTr   z%s_%s)rI   rH   add)r-   prefixrV   r.   r.   r/   gen_idO   s   
zSvgBuilder.gen_idc                 C   sJ   | dd}| j|r|| jvr| j| n| |j}||jd< |S )N _rV   )replaceid_rematchrH   rW   rY   tagrF   )r-   rD   nidnr.   r.   r/   set_clean_idX   s   
zSvgBuilder.set_clean_idNFc                 C   st   t |dd }|d u s| jtjkr!|r| |j}||jd< |S d S | ||}|d u r1| dd}|r8||j|< |S )NnamerV   inkscapelabel)	getattrrK   r   NoNamerY   r_   rF   rb   	qualified)r-   rD   	lottieobjinkscape_qualforcer`   rV   ra   r.   r.   r/   set_idb   s   

zSvgBuilder.set_id	animationc                 C   s  t |j| jjd< t |j| jjd< d|j|jf | jjd< d| jjd< | | j|| dd t| jd	| _	| j
tjkrud
| jj| dd< d
| jj| dd< t| j| dd}d|j| dd< d|jd< d|jd< d|jd< d| jjd< |g| _| jS )Nwidthheightz	0 0 %s %sviewBoxz1.1versionsodipodidocnamedefs96rd   zexport-xdpizexport-ydpi	namedviewtruepagecheckerboardborderlayerz#666666bordercolorz#ffffff	pagecolorzfill: none; stroke: nonestyle)strrn   r@   rF   ro   rl   rh   r   
SubElementrt   rK   r   rJ   rQ   )r-   rm   rv   r.   r.   r/   _on_animationr   s"   


zSvgBuilder._on_animationc                 C   sz   t | jd}|  }||jd< d|jd< t |d}| |j| j|jd< d|jd< t	|j
| jd	 |jd
< |S )NmaskrV   alpha	mask-typepathd#ffffillr   fill-opacity)r   r~   rt   rY   rF   _bezier_to_dshaper2   r6   r}   opacity)r-   r   svgmaskmask_idr   r.   r.   r/   _mask_to_def   s   


zSvgBuilder._mask_to_defc                 C   sV   t | jd}|js|  |_|j|jd< |jjj}d}|t	j
jkr$d}||jd< |S )Nr   rV   r   	luminancer   )r   r~   rt   matte_idrY   rF   matte_targetlottie
matte_moder   	MatteModeLuma)r-   layer_builderr   r   	mask_typer.   r.   r/   _matte_source_to_def   s   


zSvgBuilder._matte_source_to_defc                 C   s   t |dkr| |d S tt| j|}t| jd}|  }||jd< |}|D ]}t|d}d| |jd< q)t|d}d|jd	< | j	jd
 |jd
< | j	jd |jd< d|jd< d|jd< |S )Nr   r   r   rV   gurl(#%s)rectr   r   rn   ro   0xy)
lenr   listmapr   r~   rt   rY   rF   r@   )r-   masksmask_idsmask_defr   r   midfullr.   r.   r/   	_on_masks   s"   



zSvgBuilder._on_masksc           	      C   s  |j }| j| | js|j| jks|j| jk r| j  d S |jr'| 	|}| 
||d}|jr=d| |j |jd< n|jrU|jj}|sN|   }|j_d| |jd< t|tjrz| jt| | j|jg D ]}| || qk| j  nYt|tjrd|jd< nMt|tjrt|d}d| j|j  |j| dd	< n1t|tj r| !|| n$t|tj"rt|d
}t#|j$|jd< t#|j%|jd< t&|j'|jd< |j(s|j)j*|j| dd< |j+r| ,|j+|jd< | -|j+|| |S )NTr   r   1r   use#xlinkhrefr   rn   ro   r   rd   re   r|   ).r   rQ   appendrM   r3   r6   r4   popr   r   group_from_lottier   r   rF   matte_sourcer   rY   
isinstancer   r>   r*   rN   getreference_idprocess_layer	NullLayer
ImageLayerr   r~   rO   image_idrh   	TextLayer_on_text_layerSolidColorLayerr}   rn   ro   color_to_csscolorrc   rS   r;   
shapegroupgroup_to_style_split_stroke)	r-   r   
dom_parentr7   r   r   layerr   r   r.   r.   r/   	_on_layer   sL   

 zSvgBuilder._on_layerc                 C   s&   |j tt|jdd| j|j< d S )Nr   )font-familyfont-weight)font_familyr}   _supported_font_weightsr   
font_stylerP   rc   )r-   r   r.   r.   r/   _on_font   s   zSvgBuilder._on_fontc                 C   s   t |d}|j| j}|re|j| j|j	i  t
|j|jd< |jr.d|j |jd< |jtjjjkr<d|jd< n|jtjjjkrJd|jd< n|jtjjjkrWd|jd< t|j|jd	< |j|_d S d S )
Ntext	font-size%s%%zline-heightstartztext-anchormiddleendr   )r   r~   datar2   r6   rF   updaterP   r   r   r}   	font_sizeline_heightjustifyr   r   TextJustifyLeftCenterRightr   r   )r-   r   r7   r   docr.   r.   r/   r      s    
zSvgBuilder._on_text_layerc                 C   s   | j   d S r,   )rQ   r   )r-   	out_layerr.   r.   r/   _on_layer_end      zSvgBuilder._on_layer_endc                 C   s   || j |< d S r,   )rN   )r-   rV   r   layersr.   r.   r/   _on_precomp   r   zSvgBuilder._on_precompc                 C   s   t |tjjrCt| jd}| ||j}|| j	|j< |j
r"|j}n|j|j }||j| dd< t|j|jd< t|j|jd< d S d S )Nimager   r   rn   ro   )r   r   assetsImager   r~   rt   rb   rV   rO   is_embedded	file_namer   rF   rh   r}   rn   ro   )r-   assetimgxmlidurlr.   r.   r/   	_on_asset  s   zSvgBuilder._on_assetc                 C   s8   |r	| | j}n|}|d u r|S t|tr| S |S r,   )r2   r6   r   r   clone)r-   propdefaultvr.   r.   r/   
_get_value  s   
zSvgBuilder._get_valuec                 C   sb   |sd S | | j|}| |jd< |jd ur-|j| j}|dkr/t|d |jd< d S d S d S )N	transformr   r   )	to_matrixr6   	to_css_2drF   r   r2   r}   )r-   rD   r   auto_orientmatopr.   r.   r/   set_transform  s   
zSvgBuilder.set_transformc                 C   s  i }|j rt|j tjrd| |j  |d< nt|j j| j|d< |j j	| jd |d< |j j
| j|d< |j jd urE|j j|d< |j jtjjkrRd|d< n|j jtjjkr_d	|d< n|j jtjjkrkd
|d< |j jtjjkrxd|d< n|j jtjjkrd|d< n|j jtjjkrd|d< |j jrg }d}tjj}|j jD ]#}||jkr||j| j7 }q|tjjkr|t| d}|j}qd||d< |S )Nr   stroker   stroke-opacitystroke-widthzstroke-miterlimitroundzstroke-linecapbuttsquarezstroke-linejoinbevelmiterr   rZ   zstroke-dasharray)r   r   r   GradientStrokeprocess_gradientr   r   r2   r6   r   rn   miter_limitline_capLineCapRoundButtSquare	line_joinLineJoinBevelMiterdashesStrokeDashTypeDashtypelengthOffsetr   r}   join)r-   groupr|   	dasharraylast	last_modedashr.   r.   r/   _get_group_stroke(  sD   




zSvgBuilder._get_group_strokec                 C   s   d tdd | S )N;c                 S   s   d tt| S )N:)r  r   r}   )r   r.   r.   r/   <lambda>T      z*SvgBuilder._style_to_css.<locals>.<lambda>)r  r   items)r-   r|   r.   r.   r/   _style_to_cssR  s   zSvgBuilder._style_to_cssc           	      C   s  |j sd S | |}|dddks|d dkrd S |jrA|jddr.|jd  d7  < nd|jd< |jd  | |7  < |S td}| |d td	}t	|D ]\}}||u rj|
|| ||  nqUd S || || d
|jd  |j| dd< | ||jd< |S )Nr   r   r   r|    r  r   r   r   r   rV   r   r   )r   r  r   stroke_aboverF   r  r   rC   rb   	enumerateinsertremover   rh   )	r-   r  
fill_layer
out_parentr|   r   r   ier.   r.   r/   r   X  s4   






zSvgBuilder._split_strokec                 C   s   i }|j rA|j j| jd |d< t|j tjr#d| |j  |d< nt|j j	| j|d< |j j
rA|j j
tjjkr=dnd|d< |jjrId|d	< | |S )
Nr   r   r   r   evenoddnonzeroz	fill-rulenonedisplay)r   r   r2   r6   r   r   GradientFillr   r   r   	fill_ruleFillRuleEvenOddr   hiddenr  )r-   r  r|   r.   r.   r/   r   z  s   
zSvgBuilder.group_to_stylec                 C   s  |j | j}|j| j}|jtjjkrAt	| j
d}t|d |jd< t|d |jd< t|d |jd< t|d |jd< n]|jtjjkrt	| j
d}t|d |jd	< t|d |jd
< t|| j|jd< |j| jtj d }|j| j}t|d t||  |jd< t|d t||  |jd< | j||dd}d|jd< |j| jD ]-\}}	t	|d}
d|d  |
jd< t|	d d |
jd< t|	dkrt|	d |
jd< q|S )NlinearGradientr   x1r   y1x2y2radialGradientcxcyr   fxfyTrk   userSpaceOnUsegradientUnitsstopr   r   offsetr   z
stop-colorzstop-opacity)start_pointr2   r6   	end_pointgradient_typer   GradientTypeLinearr   r~   rt   r}   rF   Radialr  highlight_anglemathpihighlight_lengthcossinrl   colorsstops_atr   r   )r-   gradientsposeposrD   alrV   offr   r;  r.   r.   r/   r     s6     
zSvgBuilder.process_gradientc                 C   sZ   t |d}|r| jtjkrd|j| dd< | j||dd | ||j	t
|dd |S )	Nr   r   rd   	groupmodeTr8  r   F)r   r~   rK   r   rJ   rF   rh   rl   r   r   rf   )r-   r   r   r   r   r.   r.   r/   r     s   zSvgBuilder.group_from_lottiec                 C   s   |  rd S t|jdkrAt|jd tjrA| |jj|}| j||jjd dd | 	||j
d< | ||jj | |||S | |j||j}| 	||j
d< | || | |||S )Nr   r   Tr8  r|   )emptyr   childrenr   r	   RestructuredPathMerger
build_pathpathsrl   r   rF   r   r   r   r   r   r   shapegroup_process_children)r-   r  r   r   r   r.   r.   r/   _on_shapegroup  s    zSvgBuilder._on_shapegroupc                 C   s4   |  |j|}| ||jd  | ||jd< |S )Nr   r|   )rU  rV  rl   r   rF   )r-   r   r   r   r   r.   r.   r/   _on_merged_path  s   zSvgBuilder._on_merged_pathc                 C   s   t |tjr| ||}n<t |tjr| ||}n/t |tjr*| | g|}nt |tj	r8| |g|}nt
rGt |tjrG| ||}nd S | j||dd d|jvr[d|jd< |jd  | |7  < |jrs|jd  d7  < |S )NTr8  r|   r  zdisplay: none;)r   r   Rect
build_rectEllipsebuild_ellipseStarrU  	to_bezierPathhas_fontr   	FontShape
build_textrl   rF   r   r+  r-   r   r   r   svgshaper.   r.   r/   	_on_shape  s$   

zSvgBuilder._on_shapec                 C   s   t |d}|j| j}|j| j}t|d |jd< t|d |jd< t|d |d d  |jd< t|d |d d  |jd< t|j| j|jd	< |S )
Nr   r   rn   r   ro      r   r   rx)	r   r~   sizer2   r6   positionr}   rF   rounded)r-   r   parentr   ri  posr.   r.   r/   r[    s   zSvgBuilder.build_rectc                 C   s|   t |d}|j| j}|j| j}t|d d |jd< t|d d |jd< t|d |jd< t|d |jd< |S )	Nellipser   rg  rh  r   ryr2  r3  )r   r~   ri  r2   r6   rj  r}   rF   )r-   r   rl  rn  ri  rm  r.   r.   r/   r]    s   zSvgBuilder.build_ellipsec                 C   sj   t |d}d}|D ]#}|j| j}t|tr|d }|js q
|r&|d7 }|| |7 }q
||j	d< |S )Nr   r  r   
r   )
r   r~   r   r2   r6   r   r   verticesr   rF   )r-   shapesrl  r   r   r   bezr.   r.   r/   rU    s   

zSvgBuilder.build_pathc                 C   s   d}|j |k rtddS |S )Ng      ?r   )r  r   )r-   tangent_tangent_thresholdr.   r.   r/   _bezier_tangent  s   

zSvgBuilder._bezier_tangentc              
   C   s  dt |jd jd d  }tdt|jD ]<}|j|d  }| |j|d  | }|j| }| |j| | }|d|d |d |d |d |d |d f 7 }q|jr|jd }| |jd | }|jd }| |jd | }|d|d |d |d |d |d |d f 7 }|S )NzM %s,%s r   rg  r   zC %s,%s %s,%s %s,%s rT   zC %s,%s %s,%s %s,%s Z)	tuplerq  
componentsranger   rv  out_tangentsin_tangentsclosed)r-   rs  r   r!  qfromh1qtoh2r.   r.   r/   r     s,   



zSvgBuilder._bezier_to_dc                 C   s   t |jtjr| |j|j||}|S t |jtjr&| |j|j||}|S t |jtjr9| 	|j|j||}|S | 
|j||S r,   )r   r   r   Repeaterbuild_repeaterchildRoundedCornersbuild_rouded_cornersTrimbuild_trim_pathshapegroup_process_childrd  r.   r.   r/   _on_shape_modifier(  s   zSvgBuilder._on_shape_modifierc                 C   s  |  |||}|sd S tt|j| j}|dkrd S || t|d}| 	|d t
|d D ]}t|d}	d|jd  |	j| dd< q3t|d}
|
| t }|jj| j}|jj| j}|jj| j}|jj| j}|jj| j}t
|d d	d	D ]4}||d  }|| |d|   |j_| || | |j j|7  _|j j|7  _|j j|7  _q|S )
Nr   r   repeaterr   r   rV   r   r   rT   )r  intr   copiesr2   r6   r  r   r~   rb   ry  rF   rh   r   r   	Transformr   start_opacityend_opacityrj  rotationanchor_pointr   valuer   )r-   r   r  r   r   originalncopiesr   copyr   orig_wrapperr   soeorj  r  r  r!  ofr.   r.   r/   r  3  s8   

zSvgBuilder.build_repeaterc                 C   s"   |j | j}| |||| j|S r,   )radiusr2   r6   _modifier_process_build_rouded_corners_shape)r-   r   r  r   r   round_amountr.   r.   r/   r  X  s   zSvgBuilder.build_rouded_cornersc                 C   s@   t |tjs	|gS | }|j| j|}|j| |gS r,   )	r   r   Shaper_  r   r2   r6   rk  clear_animation)r-   r   r  r   bezierr.   r.   r/   r  \  s   z&SvgBuilder._build_rouded_corners_shapec              
   C   s   t dtd|j| jd }t dtd|j| jd }|j| jd d }i }d}	|jtj	j
krXtt| |D ]}
|
 j| j}| }||	|f||
< |	|7 }	q=| |||| j|| || ||	S )Nr   r   r   ih  )maxminr   r2   r6   r   r<  multipler   TrimMultipleShapesIndividuallyreversedr   _modifier_foreach_shaper_  r   rough_lengthr  _build_trim_path_shape)r-   r   r  r   r   r   r   r<  	multidatar  	visishapers  local_lengthr.   r.   r/   r  d  s   

zSvgBuilder.build_trim_pathc                 c   sp    t |tjr|jD ]}| |D ]}|V  qq
d S t |tjr+|jD ]}|V  q#d S t |tjr6|V  d S d S r,   )	r   r	   RestructuredShapeGrouprS  r  rT  rV  r   r  )r-   r   r  chshpr.   r.   r/   r  x  s   


z"SvgBuilder._modifier_foreach_shapec                    s.   j | |g|R  } fdd|D S )Nc                    s   g | ]	} | qS r.   )r  ).0chr   r-   r   r.   r/   
<listcomp>  s    z0SvgBuilder._modifier_process.<locals>.<listcomp>)_modifier_process_child)r-   r  r   r   callbackargsrS  r.   r  r/   r    s   zSvgBuilder._modifier_processc                 C   s    || | | }t dtd|S )Nr   r   )r  r  )r-   tlocal_startr  total_lengthgtr.   r.   r/   _trim_offlocal  s   zSvgBuilder._trim_offlocalc                 C   sf  t |tjs	|gS |r|| \}}}|dkrL| ||||}	| |d |||}
g }|	dk r:|t||	d |
dkrJ|t|d|
 |S | ||||}	| ||||}
|
dksd|	dkrfg S |	dkrt|
dkrtt|gS ||	|
}t|gS | }|j	| j
}|dkr||d}|d|d }t|t|gS |||}t|gS )Nr   r   )r   r   r  r  r   r`  segmentr_  r   r2   r6   )r-   r   r   r   r  r  r  r  r  lstartlendoutsegr   bez1bez2r.   r.   r/   r    s:   z!SvgBuilder._build_trim_path_shapec                 G   s8   g }|j D ]}|| j||||g|R   q||_ d S r,   )rS  extendr  )r-   r   r   r  r  rS  r   r.   r.   r/   _modifier_process_children  s   
 
z%SvgBuilder._modifier_process_childrenc                 G   s~   t |tjr| j|||g|R   |gS t |tjr7g }|jD ]}|||g|R   q||_|r5|gS g S ||g|R  S r,   )r   r	   r  r  rT  rV  r  )r-   r   r   r   r  r  rV  r  r.   r.   r/   r    s   
z"SvgBuilder._modifier_process_childc                 C   s   t r
t|tjr
dS dS )NTF)ra  r   r   rb  )r-   r   r.   r.   r/   _custom_object_supported  s   z#SvgBuilder._custom_object_supportedc                 C   s   t |d}d|jv r|jd |jd< d|jv r"t|j |jd< t|jdd}|dkr9|dk r9d	|jd
< n	|dkrBd|jd
< t|j|jd< d|jd< |j	j
}t|j|jd< t|j|jd< |j|_|S )Nr   familyr   weightr   slantr   n   italicz
font-styleobliquer   prezwhite-spacer   r   )r   r~   queryrF   r}   weight_to_cssr  r   ri  r|   rj  r   r   r   )r-   r   rl  r   r  rm  r.   r.   r/   rc    s"   



zSvgBuilder.build_text)r   )rV   )NFF):r;   r<   r=   merge_paths	namestartnamenostartrecompiler]   r0   propertyr6   rY   rb   rl   r   	Animationr   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r   r   r   r   rX  rY  rf  r[  r]  rU  rv  r   r  r  r  r  r  r  r  r  r  r  r  r  rc  __classcell__r.   r.   rR   r/   r?   .   sf    

	

4
*" 
%#r?   c                 C   s@   t | tr| jtjkr| tj} dttdd | d d  S )Nzrgb(%s, %s, %s)c                 S   s   t t| d S )N   )r  r   )cr.   r.   r/   r    r  zcolor_to_css.<locals>.<lambda>r   )r   r   moder   RGB	convertedrw  r   )r   r.   r.   r/   r     s   r   c                 C   sf   |rt | d}tt|dS t jr't | d}tt|dS t|}||  |j	S )Nr@   utf8)
r   convertr   
fromstringdecodehas_glaxnimate	serializer?   processrD   )rm   r6   animatedr   builderr.   r.   r/   to_svg  s   
r  r  )r  rD  	xml.etreer   handlerr   r   r  r   nvectorr   utilsr	   utils.transformr
   parsersr   utils.colorr   r   r   ra  ImportErrorr   r*   AbstractBuilderr?   r   r  r.   r.   r.   r/   <module>   s         7