+
    f7iz  c                   s0    R t ^ RIt^ RIt ! R R]4      tR# )z:Generic visitor pattern implementation for Python objects.Nc                   s   a  ] tR t^t o Rt]P                  RR //t]R 4       t	]R 4       t
]R 4       t]R 4       t]/ 3R l4       tR	 tR
 tR tR tR tR tRtV tR# )VisitorFNc                s    R # )F selfobjargskwargs   &&*,=/usr/lib64/python3.14/site-packages/fontTools/misc/visitor.pyZ<lambda>ZVisitor.<lambda>   s    U    c                sH   a a R S P                   9  d   / S n        V V3R lpV# )	_visitorsc                 s   < S Fe  w  r\        V4      \        8w  d   V3p\        V4      \        8X  d   V3pV F,  pSP                  P	                  V/ 4      pV F  pWV&   K	  	  K.  	  Kg  	  R # N)typetuplestrr
   Z
setdefault)Zmethodclazzesattrsclazzr
   attrcelfclazzes_attrss   &     r   wrapperZ"Visitor._register.<locals>.wrapper   sm    "/=E)&jG;#%"HE$E $ 9 9% DI %
 +1$ !& % #0 r	   )__dict__r
   )r   r   r   s   ff r   	_registerZVisitor._register   s$     dmm+DN	" r	   c                sX    \        V4      \        8w  d   V3pV P                  VR3.4      # )Nr   )r   r   r   )r   r      &&r   registerZVisitor.register*   s,    =E!jG~~1233r	   c                s    . p\        V4      \        8w  d   V3p\        V4      \        8X  d   V3pV F  pVP                  WB34       K  	  V P	                  V4      # r   )r   r   r   Zappendr   )r   r   r   r   r   s   &&&  r   register_attrZVisitor.register_attr0   sV    =E!jG;#HEE  %0 ~~m,,r	   c                s$    V P                  V4      # r   )r   )r   r   r   r   register_attrsZVisitor.register_attrs;   s    ~~m,,r	   c                s    \        V4      pV P                  4        FT  p \        V R R4      pVf    V# VP                  4        F)  pV P                  P	                  VR4      pVf   K%  Vu u # 	  KV  	  V# )r
   N)r   Zmrogetattrr
   get)r   ZthingZ_defaultZtypr
   ZbaseZms   &&&    r   _visitorsForZVisitor._visitorsFor?   sr    5kHHJDk48I   	NN&&tT2=H "  r	   c                s   \        \        V4      P                  4       4      pV P                  V4      pVP	                  RR4      pV Fv  pV^ ,          R8X  d   K  \        W4      pVP	                  Wv4      p	V	e-   V	! WWx.VO5/ VB p
V
R8X  g   V
f   V P                  '       d   K_  V P                  ! WV.VO5/ VB  Kx  	  R# )a  Called 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).
Z*NZ_F)ZsortedZvarskeysr   r   r   defaultStop	visitAttr)r   r   r   r   r   r
   ZdefaultVisitorZkeyvaluevisitorFuncrets   &&*,       r   visitObjectZVisitor.visitObjectO   s     d3inn&'%%c*	"sD1C1v}C%E#--<K&!$SI$I&I%<CKD4D4D4DNN3U<T<V< r	   c                s2    V P                   ! V.VO5/ VB  R# )z*Called to visit an attribute of an object.Nvisit)r   r   r   r"   r   r   s   &&&&*,r   r!   ZVisitor.visitAttrj   s    

5*4*6*r	   c                sD    V F  pV P                   ! V.VO5/ VB  K  	  R# )z)Called to visit any value that is a list.Nr&   r   r   r   r   r"      &&*, r   	visitListZVisitor.visitListn   s"    EJJu.t.v. r	   c                s`    VP                  4        F  pV P                  ! V.VO5/ VB  K  	  R# )z/Called to visit any value that is a dictionary.N)Zvaluesr'   r(   r)   r   	visitDictZVisitor.visitDicts   s(    ZZ\EJJu.t.v. "r	   c                s    R# )zECalled to visit any value that is not an object, list,
or dictionary.Nr   r   r   r   	visitLeafZVisitor.visitLeafx   s     	r	   c                s   V P                  V4      P                  RR4      pVe,   V! W.VO5/ VB pVR8X  g   Vf   V P                  '       d   R# \        VR4      '       d9   \	        V\
        P                  4      '       g   V P                  ! V.VO5/ VB  R# \	        V\        4      '       d   V P                  ! V.VO5/ VB  R# \	        V\        4      '       d   V P                  ! V.VO5/ VB  R# V P                  ! V.VO5/ VB  R# )a  This 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   )r   r   r    ZhasattrZ
isinstanceenumZEnumr%   Zlistr*   Zdictr+   r,   )r   r   r   r   r#   r$   s   &&*,  r   r'   ZVisitor.visit}   s    * '',00t<"d9$9&9Ce|0@0@0@3
##JsDII,F,FS24262T""NN3000T""NN3000NN3000r	   r   )Z__name__Z
__module__Z__qualname__Z__firstlineno__r    weakrefZ	ProxyTyper
   Zclassmethodr   r   r   r   r   r%   r!   r*   r+   r,   r'   Z__static_attributes__Z__classdictcell__)Z__classdict__s   @r   r    r       s     K 	D"JK	I  0 4 4
 - - - - +-  =6+/
/

!1 !1r	   r    )Z__doc__r-   r.   Zobjectr    r   r	   r   <module>r/      s    @  W1f W1r	   