o
    tBh#                     @  sF  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	gZed
ZdddZded  dZedd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)	lru_cache)chaincount)DictIterableIteratorListOptionalSetTuple)etree)ttLib)_add_method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   XPath
NAMESPACES)path r   k/var/www/html/riverr-enterprise-integrations-main/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&   resultdeclarationproperty_namevaluer   r   r   parse_css_declarations-   s   r3   Iterator[str]c                 c  s    t d}t| g|| D ]C}t|}|d ur|V  |j}d|v r,i |t|jd }dD ]!}||v rO|| }|drO|drO|dd }|sLJ |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!   r3   
startswithendswith)r   !find_svg_elements_with_referencesr#   ref_idattrsattrr2   r   r   r   iter_referenced_ids;   s*   rA   elementselement_idsSet[str]Nonec                 C  sV   |}|r)t  }|D ]}|| vrq	|t| |  q	||8 }|| |}|sd S d S N)setupdaterA   )rB   rC   	unvisited
referencedel_idr   r   r   closure_element_idsY   s   
rL   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rM   r   r   
<listcomp>u       z#subset_elements.<locals>.<listcomp>r   F)r!   getanylen	getparentremove)r#   rM   parentr   rQ   r   rO   k   s   
rO   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grouprT   r   nextr!   )r   rZ   rB   id_maprK   r#   m	old_index	new_indexnew_idnr   r   r   remap_glyph_ids~   s(   


rj   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;   rV   )r#   hrefr   r   r   r:      s
   

r:   rd   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')]rl   )r   r:   r!   rm   )r   rd   r#   old_idrh   r   r   r   update_glyph_href_links   s   rp   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sortedrG   rc   StopIteration)rq   sorted_intsstartendvr   r   r   ranges   s   

r{   zSVG c                   s6  t d u rtd|j|j|j g }| jD ]|\}}}fddt||d D |j}|s0qt j	|
dt jdddd}t|}fd	d|D }	d
d |	D }
t||
 t||
s^q|jjslt| }t|| t j||jjdd} fdd|	D }t|D ]\}}||||f qq|| _t| jS )Nz.No module named 'lxml', required to subset SVGc                      h | ]} | qS r   r   r"   i)glyph_orderr   r   	<setcomp>       z subset_glyphs.<locals>.<setcomp>r+   zutf-8T)	huge_treeremove_blank_text)parserc                   r|   r   r   )r"   g)rev_orig_glyph_mapr   r   r      r   c                 S  s   h | ]}d | qS )r\   r   r}   r   r   r   r      rS   )pretty_printc                 3  s    | ]} | V  qd S rF   r   r}   )rZ   r   r   	<genexpr>   s    z subset_glyphs.<locals>.<genexpr>)r   ModuleNotFoundErrororig_glyph_orderreverseOrigGlyphMaprZ   docListrangeintersectionglyphs
fromstringencode	XMLParserr%   rL   rO   optionsretain_gidsrj   rp   tostring
pretty_svgdecoder{   appendrN   )selfsnew_docsdocrx   ry   r   r   rB   gidsrC   rd   new_docnew_gidsr   )rZ   r   r   r   r      sB   $




)r   r   r   r   )r&   r'   r   r(   )r   r   r   r4   )rB   r   rC   rD   r   rE   )r#   r   rM   rD   r   rN   )r   r   rZ   r[   r   r(   )r#   r   r   rk   )r   r   rd   r(   r   rE   )rq   rr   r   rs   )r   rN   )(
__future__r   re	functoolsr   	itertoolsr   r   typingr   r   r   r	   r
   r   r   lxmlr   r   	fontToolsr   fontTools.subset.utilr   __all__compiler_   r   rm   r   r%   r3   rA   rL   rO   rj   r:   rp   r{   getTableClassr   r   r   r   r   <module>   s>    $








 


