L iz.dZddlZddlZGddeZy)z:Generic visitor pattern implementation for Python objects.NceZdZdZej ddiiZedZedZ edZ edZ eifdZ d Z d Zd Zd Zd ZdZy)VisitorFNcy)NFselfobjargskwargss \/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/fontTools/misc/visitor.pyzVisitor.sc`tk7sJddjvri_fd}|S)NzSubclass Visitor instead. _visitorsc &|jdk(sJD]z\}}t|tk7r|f}t|tk(r|f}|D]F}jj |i}|D]#}||vsJd|jd|d|||<%H|y)Nvisitz Oops, class 'z' has visitor function for 'z' defined already.)__name__typetuplestrr setdefault)methodclazzesattrsclazzrattrcelf clazzes_attrss r wrapperz"Visitor._register..wrappers??g- --"/ 1=E)&jG;#%"HE$1E $ 9 9% DI %1#94$~~t54+1 $ 11 1r)r__dict__r)rrrs`` r _registerzVisitor._registers4w; ;; dmm +DN "rcTt|tk7r|f}|j|dfgS)NN)rrr!)rrs r registerzVisitor.register*s, =E !jG~~1233rcg}t|tk7r|f}t|tk(r|f}|D]}|j||f|j |Sr#)rrrappendr!)rrrrrs r register_attrzVisitor.register_attr0s] =E !jG ;# HE 1E  % 0 1~~m,,rc$|j|Sr#)r!)rrs r register_attrszVisitor.register_attrs;s~~m,,rct|}|jD]M}t|dd}||S|jD]&}|jj |d}|"|ccSO|S)Nr)rmrogetattrrget)rthing_defaulttyprbasems r _visitorsForzVisitor._visitorsFor?s|5kHHJ Dk48I    NN&&tT2=H   rcdtt|j}|j|}|j dd}|D]f}|ddk(r t ||}|j ||} | #| ||||g|i|} | dk(s| |j rO|j|||g|i|hy)aCalled to visit an object. This function loops over all non-private attributes of the objects and calls any user-registered (via ``@register_attr()`` or ``@register_attrs()``) ``visit()`` functions. The visitor will proceed to call ``self.visitAttr()``, unless there is a user-registered visit function and: * It returns ``False``; or * It returns ``None`` (or doesn't return anything) and ``visitor.defaultStop`` is ``True`` (non-default). *Nr_F)sortedvarskeysr3r-r, defaultStop visitAttr) rr r r r9rdefaultVisitorkeyvalue visitorFuncrets r visitObjectzVisitor.visitObjectOsd3inn&'%%c* "sD1 =C1v}C%E#--^r r s r r;zVisitor.visitAttrjs 5*4*6*rc>|D]}|j|g|i|y)z)Called to visit any value that is a list.NrCrr r r r>s r visitListzVisitor.visitListns) /E DJJu .t .v . /rcZ|jD]}|j|g|i|y)z/Called to visit any value that is a dictionary.N)valuesrrEs r visitDictzVisitor.visitDictss/ZZ\ /E DJJu .t .v . /rcy)zMCalled to visit any value that is not an object, list, or dictionary.Nrrs r visitLeafzVisitor.visitLeafxs rc|j|jdd}|!|||g|i|}|dk(s| |jryt|dr1t |t j s|j|g|i|yt |tr|j|g|i|yt |tr|j|g|i|y|j|g|i|y)aGThis is the main entry to the visitor. The visitor will visit object ``obj``. The visitor will first determine if there is a registered (via ``@register()``) visit function for the type of object. If there is, it will be called, and ``(visitor, obj, *args, **kwargs)`` will be passed to the user visit function. The visitor will not recurse if there is a user-registered visit function and: * It returns ``False``; or * It returns ``None`` (or doesn't return anything) and ``visitor.defaultStop`` is ``True`` (non-default) Otherwise, the visitor will proceed to dispatch to one of ``self.visitObject()``, ``self.visitList()``, ``self.visitDict()``, or ``self.visitLeaf()`` (any of which can be overriden in a subclass). NFr ) r3r-r:hasattr isinstanceenumEnumrAlistrFdictrIrK)rr r r r?r@s r rz Visitor.visit}s*'',00t<  "dC9$9&9Ce| 0@0@ 3 #JsDII,F D  S 24 26 2 T " DNN3 0 0 0 T " DNN3 0 0 0 DNN3 0 0 0r)r __module__ __qualname__r:weakref ProxyTyper classmethodr!r$r'r)r3rAr;rFrIrKrrrr rrsK D"JK I044 ----+-  =6+/ /  !1rr)__doc__rOrUobjectrrrr rZs@ W1fW1r