
    ЦiQ$                       S SK Jr  S SKrS SKJr  S SKJrJr  S SKJ	r	J
r
JrJrJrJrJr   S SKJr  S SKJr  S SKJr  S S	KJr  S
/r\R4                  " S5      rSSS.rS\S    S3r\S 5       rSS jrSS jr S S jr!      S!S jr"S"S jr#      S#S jr$S$S jr%S%S jr&S&S jr'\" \RP                  " S5      5      S'S j5       r)g! \ a    Sr Nf = f)(    )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                4    [         R                  " U [        S9$ )N)
namespaces)r   XPath
NAMESPACES)paths    S/var/www/html/ai-image-ml/venv/lib/python3.13/site-packages/fontTools/subset/svg.pyxpathr       s     ;;t
33    c                j    [        S5      " U 5       Vs0 s H  oR                  S   U_M     sn$ s  snf )Nz//svg:*[@id]id)r   attrib)treeels     r   group_elements_by_idr#   &   s3     +0*?*EF*EBIIdOR*EFFFs   0c                   0 nU R                  S5       Hr  nUR                  S5      S:X  a7  UR                  S5      u  p4UR                  5       nUR                  5       X'   MO  UR                  5       (       d  Mf  [        SU 35      e   U$ )N;:   z Invalid CSS declaration syntax: )splitr   strip
ValueError)
style_attrresultdeclarationproperty_namevalues        r   parse_css_declarationsr0   -   s     F!'',S!Q&#.#4#4S#9 M)//1M$)KKMF!  ?}MNN - Mr   c              #    #    [        S5      n[        U /U" U 5      5       H  n[        U5      nUb  Uv   UR                  nSU;   a%  0 [	        U5      E[        UR                  S   5      EnS HP  nXT;   d  M
  XE   nUR                  S5      (       d  M&  UR                  S5      (       d  M>  USS nU(       d   eUv   MR     M     g 7f)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}##G,,1D1D"1R[F!M6 L * Es   A3C9CC-Cc                    UnU(       aW  [        5       nU H&  nX@;  a  M
  UR                  [        X   5      5        M(     X1-  nUR                  U5        UnU(       a  MV  g g N)setupdater?   )elementselement_ids	unvisited
referencedel_ids        r   closure_element_idsrI   Y   s`    
 I
"u
E$1(/BC	 
 	!
:&	 )r   c           	        U R                   R                  S5      U;   a  g[        U  Vs/ s H  n[        X!5      PM     sn5      (       a  g[	        U 5      S:X  d   eU R                  5       nUb  UR                  U 5        gs  snf )Nr   Tr   F)r    getanysubset_elementslen	getparentremove)r"   retained_idseparents       r   rM   rM   k   su     
yy}}Tl* b9bOA,b9::r7a<<\\^Fb :s   Bc                   [        U 5      n0 nUR                  5        H  u  pE[        R                  U5      nU(       d  M#  [	        UR                  S5      5      nUR                  U5      nUb  Xx:X  a  MX  SU 3n	O,SU 3n	[        S5      n
X;   a  U	 S[        U
5       3n	X;   a  M  XU'   XR                  S'   M     U$ )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^^%	LL
O	#''	2	 %YK(F
 [FaA$"81T!WI. $ u 		$) &, Mr   c                    [         U R                  ;   a=  U R                  [            nUR                  S5      (       a  [        U5      S:  a  USS  $ g )N#r'   )
XLINK_HREFr    r9   rN   )r"   hrefs     r   r7   r7      sC    RYYyy$??3CIM8Or   c                    [        S5      " U 5       H4  n[        U5      nUc   eX1;   d  M  X   nSU 3UR                  [        '   M6     g )Nz,.//svg:*[starts-with(@xlink:href, '#glyph')]rf   )r   r7   r    rg   )r   r^   r"   old_idrb   s        r   update_glyph_href_linksrk      sO    BCCH"2&!!!^F&'xLBIIj! Ir   c              #     #    [        [        [        U 5      5      5      n [        U5      =p#U H  nUS-
  U:X  a  UnM  X#4v   U=p#M     X#4v   g ! [         a     g f = f7f)Nr'   )itersortedrB   r\   StopIteration)intssorted_intsstartendvs        r   rangesru      st     vc$i()K;'' q5C<C,OEC  ,  s'   A!A $A!
AA!AA!zSVG c           
     *  ^ [         c  [        S5      eUR                  nUR                  nUR                  m/ nU R
                   GH  n[        UR                  UR                  S-   5       Vs1 s H  obU   iM	     snR                  UR                  5      nU(       d  M\  [         R                  " UR                  R                  S5      [         R                  " SSSS9S9n[        U5      n	U V
s1 s H  oU
   iM	     nn
U Vs1 s H  nSU 3iM
     nn[!        X5        [#        X5      (       d  M  UR$                  R&                  (       d  [)        UT5      n[+        X5        [         R,                  " XR$                  R.                  S	9R1                  S5      nU4S
 jU 5       n[3        U5       H-  u  nnUR5                  [7        UUUUR8                  5      5        M/     GM     X@l        [;        U R
                  5      $ s  snf s  sn
f s  snf )Nz.No module named 'lxml', required to subset SVGr'   zutf-8TF)	huge_treeremove_blank_textresolve_entities)parserrU   )pretty_printc              3  .   >#    U  H
  nTU   v   M     g 7frA    ).0ir]   s     r   	<genexpr> subset_glyphs.<locals>.<genexpr>   s     51OA&s   )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||$)#*:*:CNNQ<N$O
$OqN$O

,qxx
  	  HHOOG$??
  #' "'	
& (,/56v!1%v6,01Dqqc{D1H2s00yy$$$S/:F#C0..993G3GHOOPWX55 *JE3OOKS^^LM +U Z L]
6 71s   /H3HH)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   C	 	CC