Ë
    ÚÍ:jz  ã                   ó.   — d Z ddlZddlZ G d„ de«      Zy)z:Generic visitor pattern implementation for Python objects.é    Nc                   óª   — e Zd ZdZej
                  dd„ iiZed„ «       Zed„ «       Z	ed„ «       Z
ed„ «       Zei fd„«       Zd	„ Zd
„ Zd„ Zd„ Zd„ Zd„ Zy)ÚVisitorFNc                  ó   — y)NF© ©ÚselfÚobjÚargsÚkwargss       úk/home/mcse/projects/srt_converter/srt-converter-venv/lib/python3.12/site-packages/fontTools/misc/visitor.pyú<lambda>zVisitor.<lambda>   s   � ó    c                 ó`   ‡ ‡— ‰ t         k7  sJ d«       ‚d‰ j                  vri ‰ _        ˆ ˆfd„}|S )NzSubclass Visitor instead.Ú	_visitorsc           	      ó&  •— | j                   dk(  sJ ‚‰D ]z  \  }}t        |«      t        k7  r|f}t        |«      t        k(  r|f}|D ]F  }‰j                  j                  |i «      }|D ]#  }||vsJ d|j                   ›d|›d�«       ‚| ||<   Œ% ŒH Œ| y )NÚvisitzOops, class 'z' has visitor function for 'z' defined already.)Ú__name__ÚtypeÚtupleÚstrr   Ú
setdefault)ÚmethodÚclazzesÚattrsÚclazzr   ÚattrÚcelfÚclazzes_attrss         €€r   Úwrapperz"Visitor._register.<locals>.wrapper   sµ   ø€ Ø—?‘? gÒ-Ð-Ð-Ø"/ò 1‘�˜Ü˜“=¤EÒ)Ø&˜j�GÜ˜“;¤#Ò%Ø"˜H�EØ$ò 1�EØ $§¡× 9Ñ 9¸%ÀÓ D�IØ %ò 1˜Ø#¨9Ñ4ñ à$Ÿ~›~ªtð5óÐ4ð +1˜	 $šñ1ñ1ð1ð r   )r   Ú__dict__r   )r   r   r   s   `` r   Ú	_registerzVisitor._register   s4   ù€ à”wŠÐ;Ð ;Ó;ˆØ˜dŸm™mÑ+ØˆDŒNõ	ð" ˆr   c                 óT   — t        |«      t        k7  r|f}| j                  |dfg«      S )N©N)r   r   r!   )r   r   s     r   ÚregisterzVisitor.register*   s,   € ä�‹=œEÒ!Ø�jˆGØ�~‰~ ¨Ð1Ð2Ó3Ð3r   c                 ó°   — g }t        |«      t        k7  r|f}t        |«      t        k(  r|f}|D ]  }|j                  ||f«       Œ | j	                  |«      S r#   )r   r   r   Úappendr!   )r   r   r   r   r   s        r   Úregister_attrzVisitor.register_attr0   s]   € àˆÜ�‹=œEÒ!Ø�jˆGÜ�‹;œ#ÒØ�HˆEØò 	1ˆEØ× Ñ  %¨ Õ0ð	1à�~‰~˜mÓ,Ð,r   c                 ó$   — | j                  |«      S r#   )r!   )r   r   s     r   Úregister_attrszVisitor.register_attrs;   s   € à�~‰~˜mÓ,Ð,r   c                 óÜ   — t        |«      }| j                  «       D ]M  } t        | dd «      }|€ |S |j                  «       D ]&  }| j                  j	                  |d «      }|€Œ"|c c S  ŒO |S )Nr   )r   ÚmroÚgetattrr   Úget)r   ÚthingÚ_defaultÚtypr   ÚbaseÚms          r   Ú_visitorsForzVisitor._visitorsFor?   s|   € ä�5‹kˆà—H‘H“Jò 	ˆDÜ  k°4Ó8ˆIØÐ Øð ˆð Ÿ™›	ò �Ø—N‘N×&Ñ& t¨TÓ2�Ø‘=Ø”Hñð	ð ˆr   c                 ód  — t        t        |«      j                  «       «      }| j                  |«      }|j	                  dd«      }|D ]f  }|d   dk(  rŒt        ||«      }|j	                  ||«      }	|	�# |	| |||g|¢­i |¤Ž}
|
dk(  s|
€| j                  rŒO | j                  |||g|¢­i |¤Ž Œh y)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).
        Ú*Nr   Ú_F)ÚsortedÚvarsÚkeysr3   r-   r,   ÚdefaultStopÚ	visitAttr)r   r	   r
   r   r9   r   ÚdefaultVisitorÚkeyÚvalueÚvisitorFuncÚrets              r   ÚvisitObjectzVisitor.visitObjectO   sÄ   € ô ”d˜3“i—n‘nÓ&Ó'ˆØ×%Ñ% cÓ*ˆ	Ø"Ÿ™ s¨DÓ1ˆØò 		=ˆCØ�1‰v˜Š}ØÜ˜C Ó%ˆEØ#Ÿ-™-¨¨^Ó<ˆKØÐ&Ù! $¨¨S°%ÐI¸$ÒIÀ&ÑI�Ø˜%’< C K°D×4DÒ4DØØˆD�N‰N˜3  UÐ<¨TÒ<°VÓ<ñ		=r   c                 ó0   —  | j                   |g|¢­i |¤Ž y)z*Called to visit an attribute of an object.N©r   )r   r	   r   r>   r
   r   s         r   r;   zVisitor.visitAttrj   s   € àˆ�
‰
�5Ð*˜4Ò* 6Ó*r   c                 ó>   — |D ]  } | j                   |g|¢­i |¤Ž Œ y)z)Called to visit any value that is a list.NrC   ©r   r	   r
   r   r>   s        r   Ú	visitListzVisitor.visitListn   s)   € àò 	/ˆEØˆD�J‰J�uÐ.˜tÒ. vÓ.ñ	/r   c                 óZ   — |j                  «       D ]  } | j                  |g|¢­i |¤Ž Œ y)z/Called to visit any value that is a dictionary.N)Úvaluesr   rE   s        r   Ú	visitDictzVisitor.visitDicts   s/   € à—Z‘Z“\ò 	/ˆEØˆD�J‰J�uÐ.˜tÒ. vÓ.ñ	/r   c                  ó   — y)zMCalled to visit any value that is not an object, list,
        or dictionary.Nr   r   s       r   Ú	visitLeafzVisitor.visitLeafx   s   € ð 	r   c                 óÎ  — | j                  |«      j                  dd«      }|�! || |g|¢­i |¤Ž}|dk(  s|€| j                  ryt        |d«      r1t	        |t
        j                  «      s | j                  |g|¢­i |¤Ž yt	        |t        «      r | j                  |g|¢­i |¤Ž yt	        |t        «      r | j                  |g|¢­i |¤Ž y | j                  |g|¢­i |¤Ž y)aG  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    )r3   r-   r:   ÚhasattrÚ
isinstanceÚenumÚEnumrA   ÚlistrF   ÚdictrI   rK   )r   r	   r
   r   r?   r@   s         r   r   zVisitor.visit}   sà   € ð* ×'Ñ'¨Ó,×0Ñ0°°tÓ<ˆØÐ"Ù˜d CÐ9¨$Ò9°&Ñ9ˆCØ�eŠ|  °×0@Ò0@ØÜ�3˜
Ô#¬J°s¼D¿I¹IÔ,FØˆD×Ñ˜SÐ2 4Ò2¨6Ó2Ü˜œTÔ"ØˆD�N‰N˜3Ð0 Ò0¨Ó0Ü˜œTÔ"ØˆD�N‰N˜3Ð0 Ò0¨Ó0àˆD�N‰N˜3Ð0 Ò0¨Ó0r   )r   Ú
__module__Ú__qualname__r:   ÚweakrefÚ	ProxyTyper   Úclassmethodr!   r$   r'   r)   r3   rA   r;   rF   rI   rK   r   r   r   r   r   r      s¦   „ Ø€Kð 	×Ñ˜DÑ"JÐKð	€Ið ñó ðð0 ñ4ó ð4ð
 ñ-ó ð-ð ñ-ó ð-ð Ø+-ò ó ðò=ò6+ò/ò
/ò
ó
!1r   r   )Ú__doc__rO   rU   Úobjectr   r   r   r   ú<module>rZ      s   ðÙ @ã Û ôW1ˆfõ W1r   