U
    DvfU	                     @   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 8/tmp/pip-unpacked-wheel-qlge9rch/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rq|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   
%
