U
    »mœd $  ã                   @  s–  d dl mZ d dlZd dlmZ d dlmZmZ d dlm	Z	m
Z
mZmZmZmZmZ zd dlmZ W n ek
r|   dZY nX d dlmZ d dlmZ d d	lmZ d
gZe d¡ZdddœZded › d�Zedd�dd„ ƒZdddœdd„Zdddœdd„Z dddœd d!„Z!dd"d#d$œd%d&„Z"dd"d'd(œd)d*„Z#dd+dd,œd-d.„Z$dd/d0œd1d2„Z%ddd#d3œd4d5„Z&d6d7d8œd9d:„Z'ee (d;¡ƒd'd<œd=d
„ƒZ)dS )>é    )ÚannotationsN)Ú	lru_cache)ÚchainÚcount)ÚDictÚIterableÚIteratorÚListÚOptionalÚSetÚTuple)Úetree)ÚttLib)Ú_add_method)ÚSVGDocumentÚsubset_glyphsz^glyph(\d+)$zhttp://www.w3.org/2000/svgzhttp://www.w3.org/1999/xlink)ÚsvgÚxlinkÚ{r   z}href)Úmaxsizec                 C  s   t j| td�S )N)Ú
namespaces)r   ZXPathÚ
NAMESPACES)Úpath© r   úM/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/fontTools/subset/svg.pyÚxpath!   s    r   zetree.ElementzDict[str, etree.Element])ÚtreeÚreturnc                 C  s   dd„ t dƒ| ƒD ƒS )Nc                 S  s   i | ]}|j d  |“qS )Úid)Úattrib)Ú.0Úelr   r   r   Ú
<dictcomp>+   s      z(group_elements_by_id.<locals>.<dictcomp>z//svg:*[@id])r   )r   r   r   r   Úgroup_elements_by_id'   s    r#   ÚstrzDict[str, str])Ú
style_attrr   c                 C  s`   i }|   d¡D ]L}| d¡dkrD|  d¡\}}| ¡ }| ¡ ||< q| ¡ rtd|› �ƒ‚q|S )Nú;ú:é   z Invalid CSS declaration syntax: )Úsplitr   ÚstripÚ
ValueError)r%   ÚresultZdeclarationZproperty_nameÚvaluer   r   r   Úparse_css_declarations.   s    r.   zIterator[str]c                 c  s¤   t dƒ}t| g|| ƒƒD ]†}t|ƒ}|d k	r2|V  |j}d|krVt|ƒt|jd ƒ–}dD ]B}||krZ|| }| d¡rZ| d¡rZ|dd… }|s–t‚|V  qZqd S )NzŠ.//svg:*[ starts-with(@xlink:href, '#') or starts-with(@fill, 'url(#') or starts-with(@clip-path, 'url(#') or contains(@style, ':url(#') ]Ústyle)Úfillz	clip-pathzurl(#ú)é   éÿÿÿÿ)	r   r   Úhref_local_targetr   Údictr.   Ú
startswithÚendswithÚAssertionError)r   Z!find_svg_elements_with_referencesr!   Zref_idÚattrsÚattrr-   r   r   r   Úiter_referenced_ids<   s"    ÿr;   zSet[str]ÚNone)ÚelementsÚelement_idsr   c                 C  sP   |}|rLt ƒ }|D ] }|| kr q| t| | ƒ¡ q||8 }| |¡ |}qd S ©N)ÚsetÚupdater;   )r=   r>   Z	unvisitedZ
referencedÚel_idr   r   r   Úclosure_element_idsZ   s    
rC   Úbool)r!   Úretained_idsr   c                   s\   | j  d¡ˆ krdS t‡ fdd„| D ƒƒr.dS t| ƒdks>t‚|  ¡ }|d k	rX| | ¡ dS )Nr   Tc                   s   g | ]}t |ˆ ƒ‘qS r   )Úsubset_elements)r    Úe©rE   r   r   Ú
<listcomp>v   s     z#subset_elements.<locals>.<listcomp>r   F)r   ÚgetÚanyÚlenr8   Z	getparentÚremove)r!   rE   Úparentr   rH   r   rF   l   s    
rF   zDict[int, int])r   Úglyph_index_mapr   c                 C  s¨   t | ƒ}i }| ¡ D ]Ž\}}t |¡}|s,qt| d¡ƒ}| |¡}|d k	rb||krVqd|› �}	n.d|› �}	tdƒ}
|	|kr�|	› dt|
ƒ› �}	qt|	||< |	|j	d< q|S )Nr(   ÚglyphÚ.r   )
r#   ÚitemsÚGID_REÚmatchÚintÚgrouprJ   r   Únextr   )r   rO   r=   Úid_maprB   r!   ÚmZ	old_indexZ	new_indexÚnew_idÚnr   r   r   Úremap_glyph_ids   s&    


r\   zOptional[str])r!   r   c                 C  s:   t | jkr6| jt  }| d¡r6t|ƒdkr6|dd … S d S )Nú#r(   )Ú
XLINK_HREFr   r6   rL   )r!   Úhrefr   r   r   r4   Ÿ   s
    

r4   )r   rX   r   c                 C  sJ   t dƒ| ƒD ]8}t|ƒ}|d k	s$t‚||kr|| }d|› �|jt< qd S )Nz,.//svg:*[starts-with(@xlink:href, '#glyph')]r]   )r   r4   r8   r   r^   )r   rX   r!   Zold_idrZ   r   r   r   Úupdate_glyph_href_links§   s    r`   zIterable[int]zIterator[Tuple[int, int]])Úintsr   c                 c  st   t tt| ƒƒƒ}zt|ƒ }}W n tk
r6   Y d S X |D ](}|d |krR|}q<||fV  | }}q<||fV  d S )Nr(   )ÚiterÚsortedr@   rW   ÚStopIteration)ra   Zsorted_intsÚstartÚendÚvr   r   r   Úranges±   s    

rh   zSVG )r   c              	     s@  t d krtdƒ‚|j‰|j‰|j‰ g }| jD �] }‡fdd„t|j|jd ƒD ƒ 	|j
¡}|s`q,t j|j d¡t jddd�d�}t|ƒ}‡fd	d„|D ƒ}d
d„ |D ƒ}t||ƒ t||ƒs¾q,|jjsÚt|ˆ ƒ}	t||	ƒ t j||jjd� d¡}
‡ fdd„|D ƒ}t|ƒD ] \}}| t|
|||jƒ¡ �qq,|| _t| jƒS )Nz.No module named 'lxml', required to subset SVGc                   s   h | ]}ˆ | ’qS r   r   ©r    Úi)Úglyph_orderr   r   Ú	<setcomp>Ð   s    z subset_glyphs.<locals>.<setcomp>r(   zutf-8T)Z	huge_treeZremove_blank_text)Úparserc                   s   h | ]}ˆ | ’qS r   r   )r    Úg)Úrev_orig_glyph_mapr   r   rl   è   s     c                 S  s   h | ]}d |› �’qS )rP   r   ri   r   r   r   rl   é   s     )Zpretty_printc                 3  s   | ]}ˆ | V  qd S r?   r   ri   )rO   r   r   Ú	<genexpr>õ   s     z subset_glyphs.<locals>.<genexpr>)r   ÚImportErrorZorig_glyph_orderZreverseOrigGlyphMaprO   ZdocListÚrangeZstartGlyphIDZ
endGlyphIDÚintersectionÚglyphsÚ
fromstringÚdataÚencodeZ	XMLParserr#   rC   rF   ÚoptionsZretain_gidsr\   r`   ÚtostringZ
pretty_svgÚdecoderh   Úappendr   Ú
compressedrD   )ÚselfÚsZnew_docsÚdocrt   r   r=   Zgidsr>   rX   Znew_docZnew_gidsre   rf   r   )rO   rk   ro   r   r   Á   sH    
ÿþ
øü



)*Ú
__future__r   ÚreÚ	functoolsr   Ú	itertoolsr   r   Útypingr   r   r   r	   r
   r   r   Zlxmlr   rq   Z	fontToolsr   ZfontTools.subset.utilr   ZfontTools.ttLib.tables.S_V_G_r   Ú__all__ÚcompilerS   r   r^   r   r#   r.   r;   rC   rF   r\   r4   r`   rh   ZgetTableClassr   r   r   r   r   Ú<module>   s<   $

þ
 
