3
œ(ƒhô  ã               @   s
  d dl mZmZmZ d dlZd dlmZ d dlmZ yd dl	j
jZW n  ek
rd   d dlj
jZY nX ddddd	d
dgZejd  dko’ejd dkZy,edƒZeeeƒs¾edƒZeeeƒs¾t‚W n   dZY nX 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_literalsN)Ú
ModuleType)Ú	text_typeÚdefault_etreeÚMethodDispatcherÚisSurrogatePairÚsurrogatePairToCodepointÚmoduleFactoryFactoryÚsupports_lone_surrogatesÚPY27é   é   é   z"\uD800"z	u"\uD800"FTc               @   s$   e Zd ZdZf f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   s~   g }xN|D ]F\}}t |ttttfƒrBx*|D ]}|j||fƒ q*W q
|j||fƒ q
W tj| |ƒ t| ƒt|ƒkstt	‚d | _
d S )N)Ú
isinstanceÚlistÚtupleÚ	frozensetÚsetÚappendÚdictÚ__init__ÚlenÚAssertionErrorÚdefault)ÚselfÚitemsÚ_dictEntriesÚnameÚvalueÚitem© r"   ú5/tmp/pip-install-q3hcpn_q/html5lib/html5lib/_utils.pyr   4   s    
zMethodDispatcher.__init__c             C   s   t j| || jƒS )N)r   Úgetr   )r   Úkeyr"   r"   r#   Ú__getitem__C   s    zMethodDispatcher.__getitem__N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r&   r"   r"   r"   r#   r   '   s   c             C   sL   t | ƒdkoJt| d ƒdkoJt| d ƒdkoJt| d ƒdkoJt| d ƒdkS )Nr   r   i Ø  iÿÛ  r   i Ü  iÿß  )r   Úord)Údatar"   r"   r#   r	   J   s     c             C   s,   dt | d ƒd d  t | d ƒd  }|S )Ni   r   i Ø  i   r   i Ü  )r+   )r,   Úchar_valr"   r"   r#   r
   P   s    c                s   i ‰‡ ‡fdd„}|S )Nc                sØ   t tjtdƒƒrd| j }n
d| j }t|jƒ ƒ}yˆ| | | S  tk
rÒ   t|ƒ}ˆ | f|ž|Ž}|jj|ƒ dˆkr†i ˆ|< dˆ| krži ˆ| |< dˆ| | kr¾i ˆ| | |< |ˆ| | |< |S X d S )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#   ÚmoduleFactory\   s$    
z+moduleFactoryFactory.<locals>.moduleFactoryr"   )r9   r;   r"   )r9   r:   r#   r   Y   s    c                s   i ‰ ‡ ‡fdd„}|S )Nc                 s2   t | ƒt |jƒ ƒf}|ˆ kr*ˆ| |Žˆ |< ˆ | S )N)r   r   )r/   r0   r%   )ÚcacheÚfuncr"   r#   Úwrappedy   s    zmemoize.<locals>.wrappedr"   )r=   r>   r"   )r<   r=   r#   Úmemoizev   s    r?   )Ú
__future__r   r   r   ÚsysÚtypesr   Úsixr   Úxml.etree.cElementTreeÚetreeÚcElementTreer   ÚImportErrorÚxml.etree.ElementTreeÚElementTreeÚ__all__Úversion_infor   ÚevalÚ_xr   r   r   r   r   r	   r
   r   r?   r"   r"   r"   r#   Ú<module>   s0   

#	