U
    »mœdU	  ã                   @   sF   d dl mZ d dlZe d¡Zdd„ Zdd„ Zeedd	�d
d„ ƒZdS )é    )ÚDefaultTableNzfontTools.mergec                     s   |  dd¡‰ ‡ ‡fdd„}|S )zOReturns a decorator function that adds a new method to one or
    more classes.ÚallowDefaultTableFc                    sh   g }ˆD ]Z}||krq|  |¡ ˆ s4|tks4tdƒ‚| j|jksTtd|j| jf ƒ‚t|| j| ƒ qd S )NzOops, table class not found.z!Oops, class '%s' has method '%s'.)Úappendr   ÚAssertionErrorÚ__name__Ú__dict__Úsetattr)ÚmethodÚdoneÚclazz©ZallowDefaultÚclazzes© úM/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/fontTools/merge/base.pyÚwrapper   s    

ÿþzadd_method.<locals>.wrapper)Úget)r   Úkwargsr   r   r   r   Ú
add_method   s    r   c                    s  dd„ | D ƒ} | st S dd„ | D ƒ} | s,d S | d j‰ t‡ fdd„| D ƒƒsTt| ƒ‚ˆ j}ˆ ƒ }i }tjtƒ fdd„ | D ƒžŽ }|D ]Š‰z|ˆ }W nH tk
rÜ   z|d }W n& tk
rÖ   td	ˆˆ j	f ƒ‚Y nX Y nX |t krèq„|‡fd
d„| D ƒƒ}|t k	r„||ˆ< q„||_
|S )Nc                 S   s   g | ]}|t k	r|‘qS r   )ÚNotImplemented©Ú.0Úitemr   r   r   Ú
<listcomp>"   s      z mergeObjects.<locals>.<listcomp>c                 S   s   g | ]}|d k	r|‘qS ©Nr   r   r   r   r   r   %   s      r   c                 3   s   | ]}t |ƒˆ kV  qd S r   )Útyper   )r   r   r   Ú	<genexpr>*   s     zmergeObjects.<locals>.<genexpr>c                 s   s   | ]}t |ƒ ¡ V  qd S r   )ÚvarsÚkeys©r   Útabler   r   r   r   0   s     Ú*z*Don't know how to merge key %s of class %sc                 3   s   | ]}t |ˆ tƒV  qd S r   )Úgetattrr   r   )Úkeyr   r   r   =   s     )r   Ú	__class__Úallr   ÚmergeMapÚsetÚunionÚKeyErrorÚ	Exceptionr   r   )ÚlstÚlogicZreturnTableZ
returnDictZallKeysZ
mergeLogicÚvaluer   )r   r"   r   ÚmergeObjects!   s:    
ÿ
r-   T)r   c                 C   sH   t | dƒst d| j¡ tS | j}t|tƒr<| | | j|¡S ||ƒS d S )Nr%   zDon't know how to merge '%s'.)	ÚhasattrÚlogÚinfoZtableTagr   r%   Ú
isinstanceÚdictr-   )ÚselfÚmZtablesr+   r   r   r   ÚmergeF   s    

r5   )Z#fontTools.ttLib.tables.DefaultTabler   ÚloggingÚ	getLoggerr/   r   r-   r5   r   r   r   r   Ú<module>   s   
%
