o
    ‹¨Êh£  ã                   @   sä   d dl mZmZmZ d dlmZ d dlmZ zd dlm	  m
Z W n ey3   d dlm	  mZ Y nw g d¢ZzedƒZeeeƒsMedƒZeeeƒsMJ ‚W n   dZY nd	ZG d
d„ deƒZdd„ Zdd„ Zdd„ Zdd„ ZdS )é    )Úabsolute_importÚdivisionÚunicode_literals)Ú
ModuleType)Ú	text_typeN)Údefault_etreeÚMethodDispatcherÚisSurrogatePairÚsurrogatePairToCodepointÚmoduleFactoryFactoryÚsupports_lone_surrogatesz"\uD800"z	u"\uD800"FTc                   @   s"   e Zd ZdZddd„Zdd„ ZdS )	r   ap  Dict with 2 special properties:

    On initiation, keys that are lists, sets or tuples are converted to
    multiple keys so accessing any one of the items in the original
    list-like object returns the matching value

    md = MethodDispatcher({("foo", "bar"):"baz"})
    md["foo"] == "baz"

    A default value which can be set through the default attribute.
    © c                 C   sv   g }|D ]!\}}t |ttttfƒr|D ]	}| ||f¡ qq| ||f¡ qt | |¡ t| ƒt|ƒks6J ‚d | _	d S ©N)
Ú
isinstanceÚlistÚtupleÚ	frozensetÚsetÚappendÚdictÚ__init__ÚlenÚdefault)ÚselfÚitemsÚ_dictEntriesÚnameÚvalueÚitemr   r   úA/var/www/html/env/lib/python3.10/site-packages/html5lib/_utils.pyr   1   s   ÿ
zMethodDispatcher.__init__c                 C   s   t  | || j¡S r   )r   Úgetr   )r   Úkeyr   r   r   Ú__getitem__@   s   zMethodDispatcher.__getitem__N)r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r"   r   r   r   r   r   $   s    
r   c                 C   sL   t | ƒdko%t| d ƒdko%t| d ƒdko%t| d ƒdko%t| d ƒdkS )Né   r   é Ø  iÿÛ  é   é Ü  iÿß  )r   Úord)Údatar   r   r   r	   G   s   ÿÿþþr	   c                 C   s,   dt | d ƒd d  t | d ƒd  }|S )Ni   r   r(   i   r)   r*   )r+   )r,   Úchar_valr   r   r   r
   M   s   ÿr
   c                    s   i ‰‡ ‡fdd„}|S )Nc                    sÞ   t tjtdƒƒrd| j }nd| j }t| ¡ ƒ}z	ˆ| | | W S  tyn   t|ƒ}ˆ | g|¢R i |¤Ž}|j |¡ dˆvrFi ˆ|< dˆ| vrRi ˆ| |< dˆ| | vrbi ˆ| | |< |ˆ| | |< | Y S w )NÚ z_%s_factorys   _%s_factoryr   ÚargsÚkwargs)	r   r   r#   Útyper   r   ÚKeyErrorÚ__dict__Úupdate)Ú
baseModuler/   r0   r   Úkwargs_tupleÚmodÚobjs©ÚfactoryÚmoduleCacher   r   ÚmoduleFactoryY   s&   
õz+moduleFactoryFactory.<locals>.moduleFactoryr   )r:   r<   r   r9   r   r   V   s   r   c                    s   i ‰ ‡ ‡fdd„}|S )Nc                     s6   t | ƒt | ¡ ƒf}|ˆ vrˆ| i |¤Žˆ |< ˆ | S r   )r   r   )r/   r0   r!   ©ÚcacheÚfuncr   r   Úwrappedv   s   zmemoize.<locals>.wrappedr   )r?   r@   r   r=   r   Úmemoizes   s   rA   )Ú
__future__r   r   r   Útypesr   Úsixr   Úxml.etree.cElementTreeÚetreeÚcElementTreer   ÚImportErrorÚxml.etree.ElementTreeÚElementTreeÚ__all__ÚevalÚ_xr   r   r   r   r	   r
   r   rA   r   r   r   r   Ú<module>   s.    ÿ
€#	