3
ybW50              +   @   s|  d Z yddljZddlmZ dZW n> ek
r`   ddlmZ ddl	m
Z
 eede
jZdZY nX ydd	lmZ ddlZW n, ek
r   dd	lmZ dd
lmZ Y nX ddlZddlZddlZddlZddlmZ ddlmZ ddlmZmZmZmZ ye  W n e!k
r   e"Z Y nX dd Z#dd Z$e%dddddddddddddd d!d"d#d$gZ&G d%d& d&e'Z(G d'd( d(e(Z)dS ))z
SVG Parser.

    N)XMLSyntaxErrorT)ElementTree)expat
ParseErrorF)urlopen)parse   )apply_stylesheets)match_features)urls	rotationspop_rotationflattenc             C   s`   d}t |}t| dr| j n| j }x4|D ],}|j}t|dr,|j|r,||d |_q,W dS )zRemove the SVG namespace from ``tree`` tags.

    ``lxml.cssselect`` does not support empty/default namespaces, so remove any
    SVG namespace.

    z{http://www.w3.org/2000/svg}iter
startswithN)lenhasattrr   getiteratortagr   )treeprefix
prefix_leniteratorelementr    r   O/var/www/html/enquirykeeper_venv/lib/python3.6/site-packages/cairosvg/parser.pyremove_svg_namespaceB   s    
r   c             C   sJ   | sdS |rt jdd| } n*t jdd| } t jdd| } t jdd| } | S )z"Handle white spaces in text nodes. z[
	] z[
]	z +)resub)stringpreserver   r   r   handle_white_spacesT   s    r$   	transformZopacitystyleZviewBoxz
stop-colorzstop-opacitywidthheightfiltermaskrotatez"{http://www.w3.org/1999/xlink}hrefidxyZoverflowZclipz	clip-pathc               @   s,   e Zd ZdZdddefddZdddZdS )	Nodez0SVG node with dict-like properties and children.NFc                s  f _ d_|j_|j_|_dk	rXj fddD  |pLj__ntdd_tdd_jjj	 dkrdt
tjd	f d< jd
dd jddj  }x8|jdD ]*}|jd\}}	}
|	sq|
j |j < qW d}x.|D ]&}j|dkrjdd|< qW xFfddD D ]0}dk	rn|krnj||< n|= qFW jdkrj|dd\_ }|rfddj D _ nVj sg _ xF|D ]>}t|jtrt|r̈j jt| jdkrP qW dS ) z@Create the Node from ElementTree ``node``, with ``parent`` Node.FNc                s    g | ]}| kr|| fqS r   r   ).0a)_Node__not_inherited_attrsparentr   r   
<listcomp>x   s    z!Node.__init__.<locals>.<listcomp>urlr3   r,   z
node_%s_%x    _styler   ;r&   :fillstroke
stop-colorflood-colorlighting-colorZcurrentColorZcolorZblackc                s   g | ]} | d kr|qS )Zinheritr   )r0   k)selfr   r   r4      s    texttextPathr1   Tc                s   g | ]}t |j d qS ))r3   )r/   node)r0   child)r@   r   r   r4      s   switch)r:   r;   r<   r=   r>   )rA   rB   r1   )childrenrootr   rA   rC   updater5   r3   getattrZattribr,   randomgetrandbitspoplowersplit	partitionstripgettext_children
isinstance
basestringr
   appendr/   )r@   rC   r3   parent_childrenr5   r2   r&   ZdeclarationnameZcolonvalueZcolor_attributes	attribute_rD   r   )r2   r3   r@   r   __init__k   sV      



zNode.__init__c             C   s  g }d}| j |dk}t|j|| _|r<| r<| jjd| _t| }t|}|r\t| || | jrn| jjd}x\|D ]R}	|	jdkr|	j d}
t	|
}|r|d nd}t
|| d}|j  |j|  t|	|d	d
}d|_|j}	t|	|	_nt|	| d}|j |dk}t|	j||_|j|	|\|_}|jjd}|rNd|krNt||| |j| |	jrvttjd| d}t|	j||_|rt||| |r| r|jjd|_|jr|jjd}|j| qvW |r| r| r| jjd| _||fS )z Create children and return them.z+{http://www.w3.org/XML/1998/namespace}spacer#   r   Ztrefz"{http://www.w3.org/1999/xlink}hrefr   N)r5   r3   T)r3   rV   Ztspan)r3   r+   )rQ   r$   rA   lstripr   listr   endswithr   r   TreeclearrH   r/   xml_treer   rR   rF   rU   tailr   ZElementrstrip)r@   rC   Ztrailing_spaceZ	text_rootrF   spacer#   Zoriginal_rotater+   rD   ZhrefZ	tree_urlsr5   Z
child_treeZ
child_nodeZchild_preserveZ	anonymousr   r   r   rR      s\    




zNode.text_children)F)__name__
__module____qualname____doc__NOT_INHERITED_ATTRSr[   rR   r   r   r   r   r/   h   s   Br/   c                   s(   e Zd ZdZdd Z fddZ  ZS )r_   z	SVG tree.c       	      K   s   |j d}|rd|kr|d jdd}t|dkr<|\}}n|d d  }}|j d}|rd| rd|j}||f|kr|||f }t|j|}|j|_||_|j|_d|_|S tj	| S )	N
tree_cacher5   #r      r   r3   T)
rQ   rN   r   r5   r/   ra   r   rG   dict__new__)	clskwargsrj   Z	url_partsr5   
element_idr3   Zcached_treeZnew_treer   r   r   rn      s&    



zTree.__new__c                s  t | dddk	rdS |jdd}|jdd}|jdd}|jdd}|jdd}|jd	d}|jd
d}d}	tr~tj|d}
ntj }
|dk	rtj||
}|| _n,|dk	rtj||
j }|r|| _nt |dd| _n|dk	rd|kr|j	dd\}}	nd}	|r0|jr0|r$t
j|j|}n|	r0|j}|| _|r|dd dkrT|}nt
j
|jrlt|}n|}tjj|d j dkrtj|}tj||
j }n |}x|jr|j}qW |j}ntdt| || _t|  |	r<t|dr |j n|j }x2|D ]}|jd|	kr|| _P qW td|	 tt| j| j||| d| _ |dk	r|dk	r| || j| d f< dS )z"Create the Tree from SVG ``text``.ra   N
bytestringfile_objr5   unsafeFr3   rV   rj   )Zresolve_entitiesrW   rk   r      z:\Zsvgzz1No input. Use one of bytestring, file_obj or url.r   r,   zNo tag with id="%s" found.T)!rI   rL   HAS_LXMLr   Z	XMLParser
fromstringr5   r   ZgetrootrN   urlparseurljoinschemer   ospathsplitextrM   gzipopenr3   ra   	TypeErrorr   r	   r   r   r   rQ   superr_   r[   rG   )r@   rp   rr   rs   r5   rt   r3   rV   rj   rq   parserr   Zinput_Zroot_parentr   r   )	__class__r   r   r[      s|    






zTree.__init__)re   rf   rg   rh   rn   r[   __classcell__r   r   )r   r   r_      s   r_   )*rh   Z
lxml.etreeetreer   r   r   rv   ImportErrorZ	xml.etreeZxml.parsersr   rI   
ExpatErrorurllibr   rx   Zurllib.requestr   r    r~   rJ   os.pathr{   cssr	   featuresr
   Zsurface.helpersr   r   r   r   rT   	NameErrorstrr   r$   	frozensetri   rm   r/   r_   r   r   r   r   <module>   sF   



~