a
    èÝEbŸ#  ã                   @  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	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.d/œd0d1„Z#ddd"d2œd3d4„Z$d5d6d7œd8d9„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Ú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   úT/home/ja/django-apps/lartica_env/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%   ÚresultZdeclarationZproperty_nameÚvaluer   r   r   Úparse_css_declarations-   s    r.   zIterator[str]c                 c  s¤   t dƒ}t| g|| ƒƒD ]†}t|ƒ}|d ur2|V  |j}d|v rVi |¥t|jd ƒ¥}dD ]B}||v rZ|| }| d¡rZ| d¡rZ|dd… }|s–J ‚|V  qZq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   r.   Ú
startswithÚendswith)r   Z!find_svg_elements_with_referencesr    Zref_idÚattrsÚattrr-   r   r   r   Úiter_referenced_ids;   s"    ÿr9   zSet[str]ÚNone)ÚelementsÚelement_idsr   c                 C  sP   |}|rLt ƒ }|D ] }|| vr q| t| | ƒ¡ q||8 }| |¡ |}qd S ©N)ÚsetÚupdater9   )r;   r<   Z	unvisitedZ
referencedÚel_idr   r   r   Úclosure_element_idsY   s    
rA   Ú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©rC   r   r   Ú
<listcomp>u   r"   z#subset_elements.<locals>.<listcomp>r   F)r   ÚgetÚanyÚlenZ	getparentÚremove)r    rC   Úparentr   rF   r   rD   k   s    
rD   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ÚgrouprH   r   Únextr   )r   rM   r;   Úid_mapr@   r    ÚmZ	old_indexZ	new_indexÚnew_idÚnr   r   r   Úremap_glyph_ids~   s&    


rZ   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   r5   rJ   )r    Úhrefr   r   r   r4   ž   s
    

r4   )r   rV   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')]r[   )r   r4   r   r\   )r   rV   r    Zold_idrX   r   r   r   Úupdate_glyph_href_links¦   s    r^   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Úsortedr>   rU   ÚStopIteration)r_   Zsorted_intsÚstartÚendÚvr   r   r   Úranges°   s    

rf   zSVG )r   c                   s8  t d u rtdƒ‚|j‰|j‰|j‰ g }| jD ]ú\}}}‡fdd„t||d ƒD ƒ |j¡}|s`q,t j	| 
d¡t j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 ]\}}| |||f¡ �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>Ï   r"   z subset_glyphs.<locals>.<setcomp>r(   zutf-8T)Z	huge_treeZremove_blank_text)Úparserc                   s   h | ]}ˆ | ’qS r   r   )r   Úg)Úrev_orig_glyph_mapr   r   rj   å   r"   c                 S  s   h | ]}d |› �’qS )rN   r   rg   r   r   r   rj   æ   r"   )Zpretty_printc                 3  s   | ]}ˆ | V  qd S r=   r   rg   )rM   r   r   Ú	<genexpr>ò   r"   z subset_glyphs.<locals>.<genexpr>)r   ÚModuleNotFoundErrorZorig_glyph_orderZreverseOrigGlyphMaprM   ZdocListÚrangeÚintersectionÚglyphsÚ
fromstringÚencodeÚ	XMLParserr#   rA   rD   ÚoptionsZretain_gidsrZ   r^   ÚtostringZ
pretty_svgÚdecoderf   ÚappendrB   )ÚselfÚsZnew_docsÚdocrc   rd   rr   r   r;   Úgidsr<   rV   Znew_docZnew_gidsr   )rM   ri   rm   r   r   À   s@    $øü



)(Ú
__future__r   ÚreÚ	functoolsr   Ú	itertoolsr   r   Útypingr   r   r   r	   r
   r   r   Úlxmlr   ro   Z	fontToolsr   ZfontTools.subset.utilr   Ú__all__ÚcompilerQ   r   r\   r   r#   r.   r9   rA   rD   rZ   r4   r^   rf   ZgetTableClassr   r   r   r   r   Ú<module>   s:   $

þ
 
