o
    i$                     @  sR  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dd Zd@ddZdAddZ dBd!d"Z!dCd'd(Z"dDd,d-Z#dEd1d2Z$dFd4d5Z%dGd7d8Z&dHd<d=Z'ee(d>dId?d
Z)dS )J    )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   c/var/www/html/eduruby.in/lip-sync/lip-sync-env/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   r1   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!   dictr1   
startswithendswith)r   Z!find_svg_elements_with_referencesr#   Zref_idattrsattrr0   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_idsZ   s   
rG   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rH   r   r   
<listcomp>v       z#subset_elements.<locals>.<listcomp>r   F)r!   getanylenZ	getparentremove)r#   rH   parentr   rL   r   rJ   l   s   
rJ   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grouprO   r   nextr!   )r   rT   r?   id_maprF   r#   mZ	old_indexZ	new_indexnew_idnr   r   r   remap_glyph_ids   s(   


rb   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!   r:   rQ   )r#   hrefr   r   r   r8      s
   

r8   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')]rd   )r   r8   r!   re   )r   r^   r#   Zold_idr`   r   r   r   update_glyph_href_links   s   rg   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sortedrD   r]   StopIteration)rh   Zsorted_intsstartendvr   r   r   ranges   s   

rq   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                   rr   r   r   )r"   g)rev_orig_glyph_mapr   r   rv      s    c                 S  s   h | ]}d | qS )rV   r   rs   r   r   r   rv      rN   )Zpretty_printc                 3  s    | ]} | V  qd S rC   r   rs   )rT   r   r   	<genexpr>   s    z subset_glyphs.<locals>.<genexpr>)r   ImportErrorZorig_glyph_orderZreverseOrigGlyphMaprT   ZdocListrangeZstartGlyphIDZ
endGlyphIDintersectionglyphsZ
fromstringdataencodeZ	XMLParserr%   rG   rJ   optionsZretain_gidsrb   rg   ZtostringZ
pretty_svgdecoderq   appendr   
compressedrI   )selfsZnew_docsdocr~   r   r?   gidsr@   r^   Znew_docZnew_gidsrn   ro   r   )rT   ru   ry   r   r      sL   







)r   r   r   r   )r&   r'   r   r(   )r   r   r   r2   )r?   r   r@   rA   r   rB   )r#   r   rH   rA   r   rI   )r   r   rT   rU   r   r(   )r#   r   r   rc   )r   r   r^   r(   r   rB   )rh   ri   r   rj   )r   rI   )*
__future__r   re	functoolsr   	itertoolsr   r   typingr   r   r   r	   r
   r   r   Zlxmlr   r{   Z	fontToolsr   ZfontTools.subset.utilr   ZfontTools.ttLib.tables.S_V_G_r   __all__compilerY   r   re   r   r%   r1   r>   rG   rJ   rb   r8   rg   rq   ZgetTableClassr   r   r   r   r   <module>   s@    $








 


