o
    a                      @   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 )zLReturns a decorator function that adds a new method to one or
	more classes.allowDefaultTableFc                    sh   g }D ]-}||v rq| |  s|tksJ d| j|jvs*J d|j| jf t|| j|  qd S )NzOops, table class not found.z!Oops, class '%s' has method '%s'.)appendr   __name____dict__setattr)methodZdoneclazzZallowDefaultclazzes 6/usr/lib/python3/dist-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 s*J |  j}  }i }tjt gdd | D R  }|D ]Az| }W n  tyk   z|d }W n tyh   td	 jf w Y nw |t u rqqC|fd
d| D }|t ur||< qC||_	|S )Nc                 S   s   g | ]}|t ur|qS r   )NotImplemented.0itemr   r   r   
<listcomp>       z mergeObjects.<locals>.<listcomp>c                 S   s   g | ]}|d ur|qS Nr   r   r   r   r   r       r   r   c                 3   s    | ]	}t | kV  qd S r   )typer   )r	   r   r   	<genexpr>%       zmergeObjects.<locals>.<genexpr>c                 s   s    | ]	}t | V  qd S r   )varskeysr   tabler   r   r   r   +   r   *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   7   r   )
r   	__class__allmergeMapsetunionKeyError	Exceptionr   r   )ZlstlogicZreturnTableZ
returnDictZallKeysZ
mergeLogicvaluer   )r	   r"   r   mergeObjects   sB   
r,   T)r   c                 C   sD   t | dstd| j tS | j}t|tr|| | j|S ||S )Nr%   zDon't know how to merge '%s'.)	hasattrloginfoZtableTagr   r%   
isinstancedictr,   )selfmZtablesr*   r   r   r   merge?   s   

r4   )Z#fontTools.ttLib.tables.DefaultTabler   ZloggingZ	getLoggerr.   r   r,   r4   r   r   r   r   <module>   s   

#