a
    ¥Q•h¨$  ã                   @  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yz   dZY n0 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/var/www/sistema_ama/venv/lib/python3.9/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>+   ó    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&   ÚresultÚdeclarationÚproperty_nameÚvaluer   r   r   Úparse_css_declarations.   s    r1   zIterator[str]c                 c  s¨   t dƒ}t| g|| ƒƒD ]Š}t|ƒ}|d ur2|V  |j}d|v rZi t|ƒ¥t|jd ƒ¥}dD ]B}||v r^|| }| d¡r^| d¡r^|dd… }|sšJ ‚|V  q^q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   Údictr1   Ú
startswithÚendswith)r   Z!find_svg_elements_with_referencesr!   Zref_idÚattrsÚattrr0   r   r   r   Úiter_referenced_ids<   s"    ÿr=   zSet[str]ÚNone)ÚelementsÚelement_idsr   c                 C  sP   |}|rLt ƒ }|D ] }|| vr q| t| | ƒ¡ q||8 }| |¡ |}qd S ©N)ÚsetÚupdater=   )r?   r@   Z	unvisitedZ
referencedÚel_idr   r   r   Úclosure_element_idsZ   s    
rE   Úbool)r!   Úretained_idsr   c                   s\   | j  d¡ˆ v rdS t‡ fdd„| D ƒƒr.dS t| ƒdks>J ‚|  ¡ }|d urX| | ¡ dS )Nr   Tc                   s   g | ]}t |ˆ ƒ‘qS r   )Úsubset_elements)r    Úe©rG   r   r   Ú
<listcomp>v   r#   z#subset_elements.<locals>.<listcomp>r   F)r   ÚgetÚanyÚlenZ	getparentÚremove)r!   rG   Úparentr   rJ   r   rH   l   s    
rH   zDict[int, int])r   Úglyph_index_mapr   c                 C  s¨   t | ƒ}i }| ¡ D ]Ž\}}t |¡}|s,qt| d¡ƒ}| |¡}|d urb||krVqd|› �}	n.d|› �}	tdƒ}
|	|v r�|	› dt|
ƒ› �}	qt|	||< |	|j	d< q|S )Nr)   ÚglyphÚ.r   )
r$   ÚitemsÚGID_REÚmatchÚintÚgrouprL   r   Únextr   )r   rQ   r?   Úid_maprD   r!   ÚmÚ	old_indexÚ	new_indexÚnew_idÚnr   r   r   Úremap_glyph_ids   s&    


r`   zOptional[str])r!   r   c                 C  s:   t | jv r6| jt  }| d¡r6t|ƒdkr6|dd … S d S )Nú#r)   )Ú
XLINK_HREFr   r9   rN   )r!   Úhrefr   r   r   r7   Ÿ   s
    

r7   )r   rZ   r   c                 C  sJ   t dƒ| ƒD ]8}t|ƒ}|d us$J ‚||v r|| }d|› �|jt< qd S )Nz,.//svg:*[starts-with(@xlink:href, '#glyph')]ra   )r   r7   r   rb   )r   rZ   r!   Zold_idr^   r   r   r   Úupdate_glyph_href_links§   s    rd   zIterable[int]zIterator[Tuple[int, int]])Úintsr   c                 c  sr   t tt| ƒƒƒ}zt|ƒ }}W n ty4   Y d S 0 |D ](}|d |krP|}q:||fV  | }}q:||fV  d S )Nr)   )ÚiterÚsortedrB   rY   ÚStopIteration)re   Zsorted_intsÚstartÚendÚvr   r   r   Úranges±   s    

rl   zSVG )r   c              	     sB  t d u 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�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-8TF)Z	huge_treeZremove_blank_textZresolve_entities)Úparserc                   s   h | ]}ˆ | ’qS r   r   )r    Úg)Úrev_orig_glyph_mapr   r   rp   ê   r#   c                 S  s   h | ]}d |› �’qS )rR   r   rm   r   r   r   rp   ë   r#   )Zpretty_printc                 3  s   | ]}ˆ | V  qd S rA   r   rm   )rQ   r   r   Ú	<genexpr>÷   r#   z subset_glyphs.<locals>.<genexpr>)r   ÚImportErrorÚorig_glyph_orderÚreverseOrigGlyphMaprQ   ZdocListÚrangeZstartGlyphIDZ
endGlyphIDÚintersectionÚglyphsÚ
fromstringÚdataÚencodeÚ	XMLParserr$   rE   rH   ÚoptionsÚretain_gidsr`   rd   ÚtostringÚ
pretty_svgÚdecoderl   Úappendr   Ú
compressedrF   )ÚselfÚsZnew_docsÚdocrz   r   r?   Úgidsr@   rZ   Znew_docZnew_gidsri   rj   r   )rQ   ro   rs   r   r   Á   sJ    
ÿþ
õü



)*Ú
__future__r   ÚreÚ	functoolsr   Ú	itertoolsr   r   Útypingr   r   r   r	   r
   r   r   Úlxmlr   ru   Ú	fontToolsr   ÚfontTools.subset.utilr   ZfontTools.ttLib.tables.S_V_G_r   Ú__all__ÚcompilerU   r   rb   r   r$   r1   r=   rE   rH   r`   r7   rd   rl   ÚgetTableClassr   r   r   r   r   Ú<module>   s<   $

þ
 
