
    Mcg$                       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      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)	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                8    t        j                  | t              S )N)
namespaces)r   XPath
NAMESPACES)paths    O/var/www/html/bid-api/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$   '   s8     +@%*?*EF*EBBIIdOR*E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_declarationsr1   .   s     F!'',S!Q&#.#4#4S#9 M5)//1M$)KKMF=! ?}MNN - 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!   dictr1   
startswithendswith)r"   !find_svg_elements_with_referencesr#   ref_idattrsattrr0   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 * E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_idsrJ   Z   sd    
 I
"u
EH$1(5/BC	 
 	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   rN   rN   l   st     
yy}}Tl* b9bOA|,b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grouprL   r   nextr!   )r   glyph_index_maprE   id_maprI   r#   m	old_index	new_indexnew_idns              r   remap_glyph_idsre      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!   r:   rO   )r#   hrefs     r   r8   r8      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')]rg   )r   r8   r!   rh   )r   r_   r#   old_idrc   s        r   update_glyph_href_linksrl      sU    CeBCCH"2&!!!VF^F&'xLBIIj! Ir   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sortedrC   r]   StopIteration)intssorted_intsstartendvs        r   rangesrv      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)parserrV   )pretty_printc              3  (   K   | ]	  }|     y wrB    ).0ir^   s     r   	<genexpr>z subset_glyphs.<locals>.<genexpr>   s     51OA&s   )r   ImportErrororig_glyph_orderreverseOrigGlyphMapr^   docListrangestartGlyphID
endGlyphIDintersectionglyphs
fromstringdataencode	XMLParserr$   rJ   rN   optionsretain_gidsre   rl   tostring
pretty_svgdecoderv   appendr   
compressedbool)selfsglyph_orderrev_orig_glyph_mapnew_docsdocr   r   r   rE   ggidsrF   r_   new_docnew_gidsrs   rt   r^   s                     @r   r   r      s   }JKK //K)*)>)>&'&7&7O"$H||$)#*:*:CNNQ<N$O
$OqKN$O

,qxx
  	  HHOOG$??
  #' "'	
& (,/56v!"1%v6,01Dqqc{D1Hk2sK0yy$$$S/:F#C0..1993G3GHOOPWX55 *JE3OOKS^^LM +U 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])rE   r   rF   Set[str]r   None)r#   r   rR   r   r   r   )r   r   r^   zDict[int, int]r   r   )r#   r   r   zOptional[str])r   r   r_   r   r   r   )rq   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__compilerY   r   rh   r   r$   r1   r@   rJ   rN   re   r8   rl   rv   getTableClassr   r~   r   r   <module>r      s&   " 	  " G G G  - 5 
 
O	$ (+
 *W%&f-
 44 4
G!<&5=	$&	)7@1   U  (); *;q   Es   C CC