
    BPc                         d Z ddlZddlmZ ddlmZ  G d dej                  Zedk    r e            	                                 dS dS )z,
Save an SVG file into an html canvas file.
    N)Canvasc                   :    e Zd ZdZd Zd Zed             Zd ZdS )Html5CanvaszCreates a canvas outputc                 *   | j                                         }| j        j        }| j        j        }t          | ||          }|                     ||           |                    |                                	                    d                     d S )Nzutf-8)
documentgetrootsvgviewbox_widthviewbox_heightr   	walk_treewriteoutputencode)selfstreamsvg_rootwidthheightcanvass         ,/usr/share/inkscape/extensions/ink2canvas.pysavezHtml5Canvas.save    s|    =((**&(eV,,x(((V]]__++G4455555    c                 ,   |                                 }| j                            |          }|j        }g }|D ]}|                    |j                   |                    d          rt          j        ||          S t          j        ||          S )zReturn the gradient informationr)	get_gradient_hrefr	   getElementByIdhrefappendstylegetRadialGradientDefLinearGradientDef)r   elemurl_idgradientgstopscolorsstops          r   get_gradient_defszHtml5Canvas.get_gradient_defs(   s    ''))8**622 	& 	&DMM$*%%%%<< 	;(6:::$Xv666r   c                 P   	 | j                             d          \  }}}n# t          $ r Y dS w xY w|dk    rdS |dk    sJ t          t          |                                d          }t          |t                    rt          |t          j	                  sdS  ||| |          S )z
        Make a canvas shape object for the given node. Returns `None` if
        the node is not an SVG shape element.
        @rtype svg.AbstractShape or NoneType
        }Nz{http://www.w3.org/2000/svg)
tag	partitionAttributeErrorgetattrr	   
capitalize
isinstancetype
issubclassAbstractShape)noder   prefix_brace_commandclss         r   _shape_from_nodezHtml5Canvas._shape_from_node6   s    	'+x'9'9#'>'>$FGWW 	 	 	44	2224 #~~~~c7--//663%% 	*S#:K*L*L 	4s7D&)))s   ! 
//c                    |D ]}|                      ||          }|d}|                                r|                     |          }|                    |           	 |                                 n<# t
          $ r/}|                    dt          |          z              Y d}~d}~ww xY w|                     ||           |	                                 dS )zWalk throug the whole svg treeNz// )
r:   has_gradientr)   startdraw
ValueErrorr   strr   end)r   rootr   r5   r#   r%   errors          r   r   zHtml5Canvas.walk_treeN   s     	 	D((v66D|H  "" 811$77JJx   		   USZZ/000 NN4(((HHJJJJ	 	s   A44
B->%B((B-N)	__name__
__module____qualname____doc__r   r)   staticmethodr:   r    r   r   r   r      sb        !!6 6 67 7 7 * * \*.    r   r   __main__)
rG   inkexink2canvas_lib.svgr	   ink2canvas_lib.canvasr   OutputExtensionr   rD   runrI   r   r   <module>rP      s   &               ( ( ( ( ( (B B B B B%' B B BJ zKMM r   