o
    jQ$                     @  sL  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y=   dZY nw 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 Zd?ddZd@ddZ dAd d!Z!dBd&d'Z"dCd+d,Z#dDd0d1Z$dEd3d4Z%dFd6d7Z&dGd;d<Z'ee(d=dHd>d
Z)dS )I    )annotationsN)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}hrefc                 C  s   t j| tdS )N)
namespaces)r   ZXPath
NAMESPACES)path r   U/var/www/html/Deteccion_Ine/venv/lib/python3.10/site-packages/fontTools/subset/svg.pyxpath    s   r   treeetree.ElementreturnDict[str, etree.Element]c                 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$   
style_attrstrDict[str, str]c                 C  s`   i }|  dD ]&}|ddkr"| 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   r0   Iterator[str]c                 c  s    t d}t| g|| D ]E}t|}|d ur|V  |j}d|v r.i t|t|jd }dD ]!}||v rQ|| }|drQ|drQ|dd }|sNJ |V  q0q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    dictr0   
startswithendswith)r   Z!find_svg_elements_with_referencesr"   Zref_idattrsattrr/   r   r   r   iter_referenced_ids;   s*   r=   elementselement_idsSet[str]Nonec                 C  sV   |}|r)t  }|D ]}|| vrq	|t| |  q	||8 }|| |}|sd S d S N)setupdater=   )r>   r?   Z	unvisitedZ
referencedel_idr   r   r   closure_element_idsY   s   
rF   r"   retained_idsboolc                   s\   | j d v r
dS t fdd| D rdS t| dksJ |  }|d ur,||  dS )Nr   Tc                   s   g | ]}t | qS r   )subset_elements)r!   erG   r   r   
<listcomp>u       z#subset_elements.<locals>.<listcomp>r   F)r    getanylenZ	getparentremove)r"   rG   parentr   rK   r   rI   k   s   
rI   r   glyph_index_mapDict[int, int]c                 C  s   t | }i }| D ]J\}}t|}|sq
t|d}||}|d ur1||kr+q
d| }	nd| }	td}
|	|v rK|	 dt|
 }	|	|v s>|	||< |	|j	d< q
|S )Nr*   glyph.r   )
r$   itemsGID_REmatchintgrouprN   r   nextr    )r   rS   r>   id_maprE   r"   mZ	old_indexZ	new_indexnew_idnr   r   r   remap_glyph_ids~   s(   


ra   Optional[str]c                 C  s:   t | jv r| jt  }|drt|dkr|dd  S d S )N#r*   )
XLINK_HREFr    r9   rP   )r"   hrefr   r   r   r7      s
   

r7   r]   c                 C  sJ   t d| D ]}t|}|d usJ ||v r"|| }d| |jt< qd S )Nz,.//svg:*[starts-with(@xlink:href, '#glyph')]rc   )r   r7   r    rd   )r   r]   r"   Zold_idr_   r   r   r   update_glyph_href_links   s   rf   intsIterable[int]Iterator[Tuple[int, int]]c                 c  st    t tt| }zt| }}W n
 ty   Y d S w |D ]}|d |kr)|}q||fV  | }}q||fV  d S )Nr*   )itersortedrC   r\   StopIteration)rg   Zsorted_intsstartendvr   r   r   ranges   s   

rp   zSVG c              	     s>  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smt| }	t||	 t j||jjdd}
 fdd|D }t|D ]\}}|t|
|||j qq|| _t| jS )Nz.No module named 'lxml', required to subset SVGc                      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                   rq   r   r   )r!   g)rev_orig_glyph_mapr   r   ru      s    c                 S  s   h | ]}d | qS )rU   r   rr   r   r   r   ru      rM   )Zpretty_printc                 3  s    | ]} | V  qd S rB   r   rr   )rS   r   r   	<genexpr>   s    z subset_glyphs.<locals>.<genexpr>)r   ImportErrorZorig_glyph_orderZreverseOrigGlyphMaprS   ZdocListrangeZstartGlyphIDZ
endGlyphIDintersectionglyphsZ
fromstringdataencodeZ	XMLParserr$   rF   rI   optionsZretain_gidsra   rf   ZtostringZ
pretty_svgdecoderp   appendr   
compressedrH   )selfsZnew_docsdocr}   r   r>   gidsr?   r]   Znew_docZnew_gidsrm   rn   r   )rS   rt   rx   r   r      sL   







)r   r   r   r   )r%   r&   r   r'   )r   r   r   r1   )r>   r   r?   r@   r   rA   )r"   r   rG   r@   r   rH   )r   r   rS   rT   r   r'   )r"   r   r   rb   )r   r   r]   r'   r   rA   )rg   rh   r   ri   )r   rH   )*
__future__r   re	functoolsr   	itertoolsr   r   typingr   r   r   r	   r
   r   r   Zlxmlr   rz   Z	fontToolsr   ZfontTools.subset.utilr   ZfontTools.ttLib.tables.S_V_G_r   __all__compilerX   r   rd   r   r$   r0   r=   rF   rI   ra   r7   rf   rp   ZgetTableClassr   r   r   r   r   <module>   s@    $








 


