a
    Qh$                     @  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 }|sJ |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||sq,|jjst| }	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<   $


 
