Files
OmniLottie/lottie/parsers/svg/__pycache__/builder.cpython-310.pyc
T

170 lines
21 KiB
Plaintext
Raw Normal View History

2026-03-01 21:36:54 +08:00
o
æË£iËnã@ddlZddlZddlmZddlmZmZddlmZddl m
Z
ddl m Z dd l
mZz
dd
l mZd ZWn eyCd ZYnwGd
ddƒZGdddee jƒZddZddZdS)éN)Ú ElementTreeé)Ú
SvgHandlerÚNameModeé)Úobjects)ÚNVector)Ú restructure)ÚTransformMatrix)ÚfontTFc@s$eZdZdejfddZddZdS)Ú PrecompTimeÚpclcCs
||_dS©N)r
)Úselfr
©rú7/data/cref/Lottie-kaiyuan/lottie/parsers/svg/builder.pyÚ__init__s
zPrecompTime.__init__cCs>|}|jjr|jj |¡}|jd||j|}||jjS)Nr)r
Útime_remappingÚ get_valueÚin_pointÚ out_pointÚ
start_time)rÚtimeÚlotZremapZremapfrrrÚget_time_offsets
 zPrecompTime.get_time_offsetN)Ú__name__Ú
__module__Ú __qualname__rÚ PreCompLayerrrrrrrr s r ceZdZdZdZdZe deeef¡Zd`‡fdd„ Z e
dd „ƒZ dad d Z d
dZ
dbddZdejfddZddZddZddZddZddZd d!„Zd"d#„Zd$d%„Zeddƒfd&d'„Zdcd(d)„Zd*d+„Zd,d-„Zd.d/„Zd0d1„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_„Z7‡Z8S)dÚ
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]*$rcsntƒ ¡t d¡|_t |j¡|_|jd|jjd<tƒ|_ d|_
t j |_
||_g|_i|_i|_g|_dS)svgÚxmlnsr)ÚsuperrrÚElementr ÚdomÚns_mapÚattribÚsetÚidsÚidcrÚInkscapeÚ name_modeÚ actual_timeÚ
precomp_timesÚ _precompsÚ_assetsÚ_current_layer)rr©Ú __class__rrr(s
 
zSvgBuilder.__init__cCs.|j}|jr|jD] }| ||jd¡}q |S)Néÿÿÿÿ)r,r-rr0)rrÚpctrrrr6s

zSvgBuilder.timeÚidcCs< |jd7_d||jf}||jvrnq|j |¡|S)NTrz%s_%s)r)r(Úadd)rÚprefixr5rrrÚgen_id>s
ü zSvgBuilder.gen_idcCsJ| dd¡}|j |¡r||jvr|j |¡n| |j¡}||jd<|S) Ú_r5)ÚreplaceÚid_reÚmatchr(r6r8Útagr&)rr$ÚidnrrrÚ set_clean_idGs  
zSvgBuilder.set_clean_idNFcCstt|ddƒ}|dus|jtjkr!|r| |j¡}||jd<|SdS| ||¡}|dur1| dd¡}|r8||j|<|S)namer5ÚinkscapeÚlabel) Úgetattrr+rÚNoNamer8r>r&rAÚ qualified)rr$Z lottieobjZ
inkscape_qualÚforcer?r5r@rrrÚset_idQs  
  
zSvgBuilder.set_idÚ animationcCst|jƒ|jjd<t|jƒ|jjd<d|j|jf|jjd<d|jjd<| |j|| dd¡¡t |jd ¡|_ |j
t j krud
|jj| d d ¡<d
|jj| d d
¡<t |j| dd¡¡}d|j| d d¡<d|jd<d|jd<d|jd<d|jjd<|g|_
|jS)widthÚheightz 0 0 %s %sÚviewBoxz1.1ÚversionÚsodipodiÚdocnameÚdefsZ96rCz export-xdpiz export-ydpiÚ namedviewÚtrueZpagecheckerboardZ borderlayerz#666666Z bordercolorz#ffffffZ pagecolorzfill: none; stroke: noneÚstyle)ÚstrrKr r&rLrIrGrÚ
SubElementrQr+rr*r0)rrJrRrrrÚ
_on_animationas"  


 zSvgBuilder._on_animationcCszt |jd¡}| ¡}||jd<d|jd<t |d¡}| |j |j¡¡|jd<d|jd<t |j
 |j¡d ƒ|jd
<|S) maskr5Úalphaú mask-typeÚpathÚ#fffÚfillédú fill-opacity) rrVrQr8r&Ú _bezier_to_dÚshaperrrUÚopacity)rrXÚsvgmaskÚmask_idr[rrrÚ _mask_to_defus

 
zSvgBuilder._mask_to_defcCsVt |jd¡}|js| ¡|_|j|jd<|jjj}d}|t j
j kr$d}||jd<|S)NrXr5rYÚ luminancerZ) rrVrQÚmatte_idr8r&Ú matte_targetÚlottieÚ
matte_moderÚ MatteModeÚLuma)rÚ
layer_builderrdrkÚ mask_typerrrÚ_matte_source_to_def€s
 
 
zSvgBuilder._matte_source_to_defcCt|ƒdkr
| |d¡Stt|j|ƒƒ}t |jd¡}| ¡}||jd<|}|D]}t |d¡}d||jd<q)t |d¡}d|jd <|j jd
|jd
<|j jd |jd <d |jd
<d |jd<|S)NrrrXr5Úurl(#%s)Úrectr]r^rKrLÚy)
ÚlenrfÚlistÚmaprrVrQr8r&r )rÚmasksZmask_idsZmask_defrerqÚmidÚfullrrrÚ _on_maskss" 
  


zSvgBuilder._on_masksc C|j}|j |¡|js|j|jks|j|jkr|j ¡dS|jr'|  |¡}| 
||d¡}|j r=d|  |j ¡|j
d<n|jrU|jj}|sN| ¡}|j_d||j
d<t|tjƒrz|j t|ƒ¡|j |jg¡D]}| ||¡qk|j ¡nWt|tjƒr†d|j
d<nKt|tjƒr¢t |d¡}d|j|j|j
| dd ¡<n/t|tj ƒr¯| !||¡n"t|tj"ƒrÑt |d
¡}t#|j$ƒ|j
d <t#|j%ƒ|j
d <|j&|j
d
<|j'sß|j(j)|j
| dd¡<|j*ró| +|j*¡|j
d<| ,|j*||¡|S)NTrrrXÚ1rcÚuseúxlinkÚhrefrsrKrLr^rCrDrT)-rjr0Úappendr-rrrÚpoprirpÚgroup_from_lottierzr}r&Z matte_sourcerhr8Ú
isinstancerrr r.ÚgetÚ reference_idÚ
process_layerÚ NullLayerÚ
ImageLayerrrVr/Úimage_idrGÚ TextLayerÚ_on_text_layerÚSolidColorLayerrUrKrLÚcolorrBr2rÚ
shapegroupÚgroup_to_styleÚ
_split_stroke) rrnÚ
dom_parentrrqrhÚlayerrrsrrrÚ _on_layer sL 

           zSvgBuilder._on_layercCt |d¡}|j |j¡}|r_|j|jd<t|jƒ|jd<|j r(d|j |jd<|j
t j j
jkr6d|jd<n|j
t j j
jkrDd|jd<n
|j
t j j
jkrQd |jd<t|jƒ|jd
<|j |_ dSdS) textú font-familyú font-sizeú%s%%z line-heightÚstartz
text-alignÚcenterÚendr^)rrVÚdatarrÚ font_familyr&rUÚ font_sizeÚ line_heightÚjustifyrr—Ú TextJustifyÚLeftÚCenterÚRightÚ color_to_cssr)rrqrr—ÚdocrrrÔs    
 ózSvgBuilder._on_text_layercCs|j ¡dSr)r0r„)rZ out_layerrrrÚ
_on_layer_endæózSvgBuilder._on_layer_endcCs||j|<dSr)r.)rr5r”ÚlayersrrrÚ _on_precompézSvgBuilder._on_precompcCt|tjjƒrCt |jd¡}| ||j¡}||j |j<|j
r"|j }n|j |j }||j
| dd¡<t|jƒ|j
d<t|jƒ|j
d<dSdS)imagerrrKrL)r†rÚassetsÚImagerrVrQrAr5r/Ú is_embeddedr­Ú
image_pathr&rGrUrKrL)rÚassetÚimgZxmlidÚurlrrrÚ _on_assetìs  özSvgBuilder._on_assetcCs8|r | |j¡}n|}|dur|St|tƒr| ¡S|Sr)rrr†rÚclone)rÚpropÚdefaultÚvrrrÚ
_get_valueùs
zSvgBuilder._get_valuecCsZ| |j|¡}| ¡|jd<|jdur)|j |j¡}|dkr+t|dƒ|jd<dSdSdS)NÚ transformr_rc)Ú to_matrixrÚ to_css_2dr&rcrrU)rr$Ú auto_orientÚmatÚoprrrÚ
set_transforms
ýzSvgBuilder.set_transformcCi}|jrÌt|jtjƒrd| |j¡|d<n t|jj |j¡ƒ|d<|jj  |j¡d|d<|jj
 |j¡|d<|jj durE|jj |d<|jj tj
jkrRd|d<n|jj tj
jkr_d |d<n |jj tj
jkrkd
|d<|jjtjjkrxd|d <n|jjtjjkr…d |d <n |jjtjjkrd
|d <|jjrÌg}d}tjj}|jjD]#}||jkr²||j |j¡7}q¡|tjjkrÁ| t|ƒ¡d}|j}q¡d |¡|d<|S)NrrÚstroker_ústroke-opacityú stroke-widthzstroke-miterlimitÚroundzstroke-linecapÚbuttÚsquarezstroke-linejoinÚbevelÚmiterrr9zstroke-dasharray)r†rÚGradientStrokeÚprocess_gradientr§rrrrcrKÚ miter_limitÚline_capÚLineCapÚRoundÚButtÚSquareÚ line_joinÚLineJoinÚBevelÚMiterÚdashesÚStrokeDashTypeÚDashÚtypeÚlengthÚOffsetrƒrUÚjoin)rÚgrouprTZ dasharrayÚlastZ last_modeÚdashrrrÚ_get_group_strokesD  



 
 zSvgBuilder._get_group_strokecCsd tdd| ¡ƒ¡S);cSsd tt|ƒ¡S):)ryrU)rurrrÚ<lambda>:óz*SvgBuilder._style_to_css.<locals>.<lambda>)ryÚitems)rrTrrrÚ
_style_to_css8sþzSvgBuilder._style_to_cssc Cs|jsdS| |¡}| dd¡dks|ddkrdS|jrA|j dd¡r.|jdd7<nd|jd<|jd| |¡7<|St d¡}| |d¡t d ¡}t |ƒD]\}}||urj| 
||¡|  |¡nqUdS|  |¡|  |¡d
|jd |j| 
d d
¡<| |¡|jd<|S)NrÄrrTÚrqrr€r5rr)r‡Z stroke_abover&rr#rAÚ enumerateÚinsertÚremoverƒrG) rZ
fill_layerÚ
out_parentrTrqrÚerrrr“>s4


 
 
ý

zSvgBuilder._split_strokecCi}|jrA|jj |j¡d|d<t|jtjƒr#d| |j¡|d<n t|jj  |j¡ƒ|d<|jj
rA|jj
tj j kr=dnd|d<|j
jrId|d <| |¡S)
Nr_r`rrr^ÚevenoddÚnonzeroz fill-ruleÚnoneÚdisplay)r^rcrrr†rÚ GradientFillrËrÚ fill_ruleÚFillRuleÚEvenOddrjÚhiddenræ)rrTrrrr`s
zSvgBuilder.group_to_stylec C|j |j¡}|j |j¡}|jtjjkrAt  |j
d¡}t |dƒ|j d<t |dƒ|j d<t |dƒ|j d<t |dƒ|j d<n]|jtjj
kržt  |j
d¡}t |dƒ|j d <t |dƒ|j d
<t ||jƒ|j d <|j |j¡tjd }|j |j¡}t |dt |¡|ƒ|j d
<t |dt |¡|ƒ|j d<|j||dd}d|j d<|j |j¡D]-\}} t  |d¡}
d|d|
j d<t| ddƒ|
j d<t| ƒdkrßt | dƒ|
j d<q²|S)NZlinearGradientrÚx1rÚy1Úx2Úy2ZradialGradientÚcxÚcyÚré´ÚfxÚfyT©rHÚuserSpaceOnUseÚ
gradientUnitsÚstopršr_Úoffsetrz
stop-colorz stop-opacity)Ú start_pointrrÚ end_pointÚ
gradient_typerÚ GradientTypeÚLinearrrVrQrUr&ÚRadialrÚÚhighlight_angleÚmathÚpiÚhighlight_lengthÚcosÚsinrIÚcolorsÚstops_atr§rw) rÚgradientÚsposÚeposr$Úlr5Úoffrrrrrss6  
  zSvgBuilder.process_gradientcCsZt |d¡}|r|jtjkrd|j| dd¡<|j||dd| ||j t
|ddƒ¡|S) Nrqr•rCZ groupmodeTrF) rrVr+rr*r&rGrIrE)rrjr”r•rqrrrr…s zSvgBuilder.group_from_lottiecC| ¡rdSt|jƒdkrAt|jdtjƒrA| |jj|¡}|j||jjddd|  |¡|j
d<|  ||j j
¡| |||¡S| |j ||j¡}|  |¡|j
d<| ||¡| |||¡S)NrrTrrT)ÚemptyrwÚchildrenr†r ÚRestructuredPathMergerÚ
build_pathÚpathsrIrr&rjr“r…r•Zshapegroup_process_children)rr”r[rqrrrÚ_on_shapegroups  zSvgBuilder._on_shapegroupcCs4| |j|¡}| ||jd¡| |¡|jd<|S)NrrT)rrrIrr&)rrbrr[rrrÚ_on_merged_path«szSvgBuilder._on_merged_pathcCt|tjƒr
| ||¡}n<t|tjƒr| ||¡}n/t|tjƒr*| | ¡g|¡}nt|tj ƒr8| |g|¡}nt
rGt|t j ƒrG| 
||¡}ndS|j||ddd|jvr[d|jd<|jd| |¡7<|jrs|jdd7<|S)NTrrTzdisplay: none;)r†rÚRectÚ
build_rectÚEllipseÚ
build_ellipseÚStarrÚ to_bezierÚPathÚhas_fontr Ú FontShapeÚ
build_textrIr&r©rrbrÚsvgshaperrrÚ _on_shape²s$    

zSvgBuilder._on_shapecCt |d¡}|j |j¡}|j |j¡}t|dƒ|jd<t|dƒ|jd<t|d|ddƒ|jd<t|d|ddƒ|jd<t|j |j¡ƒ|jd <|S)
NrsrrKrrLérurvÚrx) rrVÚsizerrÚpositionrUr&Úrounded)rrbÚparentrsr0Úposrrrr"És zSvgBuilder.build_rectcCs|t |d¡}|j |j¡}|j |j¡}t|ddƒ|jd<t|ddƒ|jd<t|dƒ|jd<t|dƒ|jd<|S) NÚellipserr.r/rÚryrû)rrVr0rrr1rUr&)rrbr3r5r0r4rrrr$Ôs zSvgBuilder.build_ellipsecCsjt |d¡}d}|D]#}|j |j¡}t|tƒr|d}|js q
|r&|d7}|| |¡7}q
||j d<|S)Nr[rÚ
r\)
rrVrbrrr†rxÚverticesrar&)rÚshapesr3r[r\rbÚbezrrrrÞs 

zSvgBuilder.build_pathcCsd}|j|kr tddƒS|S)Ngà?r)r)rÚtangentZ_tangent_thresholdrrrÚ_bezier_tangentîs

zSvgBuilder._bezier_tangentc
Csdt|jdjddƒ}tdt|jƒƒD]<}|j|d}| |j|d¡|}|j|}| |j|¡|}|d|d|d|d|d|d|df7}q|jrŒ|jd}| |jd¡|}|jd}| |jd¡|}|d|d|d|d|d|d|df7}|S)NzM %s,%s rr.rzC %s,%s %s,%s %s,%s r3zC %s,%s %s,%s %s,%s Z) Útupler8Ú