
    V/iQ$                       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 	 d dlmZ d dlmZ d dlmZ d d	lmZ d
gZ ej4                  d      ZdddZded    dZed        ZddZddZ d dZ!	 	 	 	 	 	 d!dZ"d"dZ#	 	 	 	 	 	 d#dZ$d$dZ%d%dZ&d&dZ' e ejP                  d            d'd       Z)y# e$ r dZY w xY w)(    )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                8    t        j                  | t              S )N)
namespaces)r   XPath
NAMESPACES)paths    J/srv/sistema/bot/venv/lib/python3.12/site-packages/fontTools/subset/svg.pyxpathr       s     ;;t
33    c                f     t        d      |       D ci c]  }|j                  d   | c}S c c}w )Nz//svg:*[@id]id)r   attrib)treeels     r   group_elements_by_idr#   &   s2     +@%*?*EFBBIIdORFFFs   .c                
   i }| j                  d      D ]l  }|j                  d      dk(  r8|j                  d      \  }}|j                         }|j                         ||<   O|j                         s`t        d|        |S )N;:   z Invalid CSS declaration syntax: )splitr   strip
ValueError)
style_attrresultdeclarationproperty_namevalues        r   parse_css_declarationsr0   -   s     F!'', OS!Q&#.#4#4S#9 M5)//1M$)KKMF=! ?}MNNO Mr   c              #  b  K   t        d      }t        | g ||             D ]  }t        |      }|| |j                  }d|v r%i t	        |      t        |j                  d         }dD ]=  }||v s||   }|j                  d      s|j                  d      s1|dd }|sJ | ?  y w)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!   !find_svg_elements_with_referencesr"   ref_idattrsattrr/   s          r   iter_referenced_idsr?   ;   s     
 ).	)% TF=dCD !"2&L		eQtE{Q&<RYYw=O&PQE) 	!Du}d##G,1D"1R[F!M6 L	!!s   A1B/4B/B/B/c                    |}|rOt               }|D ]$  }|| vr|j                  t        | |                & ||z  }|j                  |       |}|rNy y N)setupdater?   )elementselement_ids	unvisited
referencedel_ids        r   closure_element_idsrI   Y   sk    
 I
"u
 	DEH$1(5/BC		D
 	k!
:&	 r   c           	         | j                   j                  d      |v ryt        | D cg c]  }t        ||       c}      ryt	        |       dk(  sJ | j                         }||j                  |        yc c}w )Nr   Tr   F)r    getanysubset_elementslen	getparentremove)r"   retained_idseparents       r   rM   rM   k   sp     
yy}}Tl* b9OA|,9:r7a<<\\^Fb :s   A7c                l   t        |       }i }|j                         D ]  \  }}t        j                  |      }|st	        |j                  d            }|j                  |      }|||k(  rQd| }	n)d| }	t        d      }
|	|v r|	 dt        |
       }	|	|v r|	||<   |	|j                  d<    |S )Nr'   glyph.r   )
r#   itemsGID_REmatchintgrouprK   r   nextr    )r   glyph_index_maprD   id_maprH   r"   m	old_index	new_indexnew_idns              r   remap_glyph_idsrd   ~   s    
 $C(HF^^% !	rLL
O	#''	2	 I%YK(F
 [FaAH$"81T!WI. H$ u 		$)!, Mr   c                    t         | j                  v r7| j                  t            }|j                  d      rt        |      dkD  r|dd  S y )N#r'   )
XLINK_HREFr    r9   rN   )r"   hrefs     r   r7   r7      s@    RYYyy$??3CIM8Or   c                     t        d      |       D ]1  }t        |      }|J ||v s||   }d| |j                  t        <   3 y )Nz,.//svg:*[starts-with(@xlink:href, '#glyph')]rf   )r   r7   r    rg   )r   r^   r"   old_idrb   s        r   update_glyph_href_linksrk      sY    CeBCCH 1"2&!!!VF^F&'xLBIIj!1r   c              #     K   t        t        t        |                   }	 t        |      x}}|D ]  }|dz
  |k(  r|}||f |x}} ||f y # t        $ r Y y w xY ww)Nr'   )itersortedrB   r\   StopIteration)intssorted_intsstartendvs        r   rangesru      s     vc$i()K;''  q5C<C#,OEC #,  s'   A A #A 	AA AA zSVG c           
        t         t        d      |j                  }|j                  }|j                  g }| j
                  D ]  }t        |j                  |j                  dz         D ch c]  }||   	 c}j                  |j                        }|sTt        j                  |j                  j                  d      t        j                  ddd            }t        |      }	|D 
ch c]  }
||
   	 }}
|D ch c]  }d| 	 }}t!        |	|       t#        ||      s|j$                  j&                  st)        |      }t+        ||       t        j,                  ||j$                  j.                  	      j1                  d      }fd
|D        }t3        |      D ],  \  }}|j5                  t7        ||||j8                               .  || _        t;        | j
                        S c c}w c c}
w c c}w )Nz.No module named 'lxml', required to subset SVGr'   zutf-8TF)	huge_treeremove_blank_textresolve_entities)parserrU   )pretty_printc              3  (   K   | ]	  }|     y wrA    ).0ir]   s     r   	<genexpr>z subset_glyphs.<locals>.<genexpr>   s     51OA&5s   )r   ImportErrororig_glyph_orderreverseOrigGlyphMapr]   docListrangestartGlyphID
endGlyphIDintersectionglyphs
fromstringdataencode	XMLParserr#   rI   rM   optionsretain_gidsrd   rk   tostring
pretty_svgdecoderu   appendr   
compressedbool)selfsglyph_orderrev_orig_glyph_mapnew_docsdocr   r   r   rD   ggidsrE   r^   new_docnew_gidsrr   rs   r]   s                     @r   r   r      s   }JKK //K)*)>)>&'&7&7O"$H|| +N$)#*:*:CNNQ<N$O
 KN

,qxx
  	  HHOOG$??
  #' "'	
& (,/56!"1%66,01qqc{11Hk2sK0yy$$$S/:F#C0..1993G3GHOOPWX55 * 	NJE3OOKS^^LM	NU+NZ DL]
6 71s   .G3.G8 G=)r!   etree.ElementreturnDict[str, etree.Element])r+   strr   Dict[str, str])r!   r   r   zIterator[str])rD   r   rE   Set[str]r   None)r"   r   rQ   r   r   r   )r   r   r]   zDict[int, int]r   r   )r"   r   r   zOptional[str])r   r   r^   r   r   r   )rp   zIterable[int]r   zIterator[Tuple[int, int]])r   r   )*
__future__r   re	functoolsr   	itertoolsr   r   typingr   r   r	   r
   r   r   r   lxmlr   r   	fontToolsr   fontTools.subset.utilr   fontTools.ttLib.tables.S_V_G_r   __all__compilerX   r   rg   r   r#   r0   r?   rI   rM   rd   r7   rk   ru   getTableClassr   r}   r   r   <module>r      s!   " 	  " G G G  - 5 
 
O	$ (+
 *W%&f-
 4 4
G!<&5=	$&	)7@1   U  (); *;o   Es   B? ?C	C	