)EjM%ddlmZddlZddlmZddlmZmZddlm Z m Z m Z m Z m Z mZmZ ddlmZn #e$rdZYnwxYwddlmZddlmZdd lmZd gZejd Zd d dZdeddZedZd5dZd6dZ d7dZ!d8d"Z"d9d&Z#d:d*Z$d;d,Z%dd4Z)dS)?) annotationsN)cache)chaincount)DictIterableIteratorListOptionalSetTuple)etree)ttLib) _add_method) SVGDocument subset_glyphsz ^glyph(\d+)$zhttp://www.w3.org/2000/svgzhttp://www.w3.org/1999/xlink)svgxlink{rz}hrefc8tj|tS)N) namespaces)rXPath NAMESPACES)paths FC:\PYTHON\MyICR_Suite\python\Lib\site-packages\fontTools/subset/svg.pyxpathr s ;t 3 3 33tree etree.ElementreturnDict[str, etree.Element]cFdtd|DS)Nc*i|]}|jd|S)id)attrib).0els r z(group_elements_by_id..*s F F FBBIdOR F F Frz //svg:*[@id])r)rs rgroup_elements_by_idr)&s, G F*?%*?*?*E*E F F FFr style_attrstrDict[str, str]c@i}|dD]}|ddkrD|d\}}|}|||<_|rtd||S)N;:z Invalid CSS declaration syntax: )splitrstrip ValueError)r*result declaration property_namevalues rparse_css_declarationsr8-sF!'',,OO   S ! !Q & &#.#4#4S#9#9 M5)//11M$)KKMMF= ! !     OM MMNN N O Mr Iterator[str]c#Ktd}t|g||D]}t|}||V|j}d|vr+it |t |jd}dD]J}||vrD||}|dr'|dr|dd}|sJ|VKdS)Nz.//svg:*[ starts-with(@xlink:href, '#') or starts-with(@fill, 'url(#') or starts-with(@clip-path, 'url(#') or contains(@style, ':url(#') ]style)fillz clip-pathzurl(#))rrhref_local_targetr%dictr8 startswithendswith)r!find_svg_elements_with_referencesr'ref_idattrsattrr7s riter_referenced_idsrH;s ). ))%TF==dCCDD!!"2&&  LLL  e  QtE{{Q&z#subset_elements..us# 9 9 9OA| , , 9 9 9rrF)r%getanylen getparentremove)r'rUparents ` rrZrZks y}}Tl**t 9 9 9 9b 9 9 9::t r77a<<<< \\^^F  b 5rrglyph_index_mapDict[int, int]ct|}i}|D]\}}t|}|s"t |d}||}| ||krbd|} n0d|} td} | |vr| dt| } | |v| ||<| |j d<|S)Nr0glyph.r$) r)itemsGID_REmatchintgroupr]rnextr%) rrcrIid_maprSr'm old_index new_indexnew_idns rremap_glyph_idsrt~s $C((H F^^%%!! r LL     OO #'' 22  I%%(Y((FF ![[FaAH$$"..T!WW..H$$u   $ Mr Optional[str]ct|jvrD|jt}|drt|dkr |ddSdS)N#r0) XLINK_HREFr%rBr_)r'hrefs rr@r@sORYy$ ??3   CIIMM8O 4rrnctd|D]3}t|}|J||vr||}d||jt<4dS)Nz,.//svg:*[starts-with(@xlink:href, '#glyph')]rw)rr@r%rx)rrnr'old_idrrs rupdate_glyph_href_linksr|snCeBCCCHH11"2&&!!! V  F^F$0LLBIj ! 11rints Iterable[int]Iterator[Tuple[int, int]]c#Kttt|} t|x}}n#t$rYdSwxYw|D]}|dz |kr|}||fV|x}}||fVdS)Nr0)itersortedrOrm StopIteration)r} sorted_intsstartendvs rrangesrsvc$ii(())K;'''   q5C<<CC#,   OECC #,s? A  A zSVG c ttd|j|j|jg}|jD]}fdt |j|jdzD |j }|sGtj |j dtjddd}t|}fd |D}d |D}t!||t#||s|jjs t)|} t+|| tj||jj d} fd |D} t3| D]/\} } |t7| | | |j0||_t;|jS) Nz.No module named 'lxml', required to subset SVGc h|] }| SrYrY)r&i glyph_orders r z subset_glyphs..s*    KN   rr0zutf-8TF) huge_treeremove_blank_textresolve_entities)parserc h|] }| SrYrY)r&grev_orig_glyph_maps rrz subset_glyphs..s666!"1%666rch|]}d|S)rfrY)r&rs rrz subset_glyphs..s111q{q{{111r) pretty_printc3(K|] }|V dSrNrY)r&rrcs r z subset_glyphs..s(551OA&555555r)r ImportErrororig_glyph_orderreverseOrigGlyphMaprcdocListrange startGlyphID endGlyphID intersectionglyphs fromstringdataencode XMLParserr)rTrZoptions retain_gidsrtr|tostring pretty_svgdecoderappendr compressedrV)selfsnew_docsdocrrrIgidsrJrnnew_docnew_gidsrrrcrrs @@@rrrs" }JKKK/K)*)>&'&7O"$H|+N+N    $)#*:CNQrsW"""""" """"""""GGGGGGGGGGGGGGGGGG EEE ------555555   O $ $ ( + .*W% - - - 444 GGGG    !!!!<$&@1111       U  ( ());;;*);;;s 3==