B
    Jd                  @   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                sl   g }xbD ]Z}||krq
| |  s6|tks6td| j|jksVtd|j| jf t|| j|  q
W d S )NzOops, table class not found.z!Oops, class '%s' has method '%s'.)appendr   AssertionError__name____dict__setattr)methoddoneclazz)allowDefaultclazzes F/var/www/html/venv/lib/python3.7/site-packages/fontTools/merge/base.pywrapper   s    
 
zadd_method.<locals>.wrapper)get)r   kwargsr   r   )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  }x|D ]y| }W nH tk
r   y|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||< qW ||_
|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   r       s    r   c             3   s   | ]}t | kV  qd S )N)type)r   r   )r   r   r   	<genexpr>%   s    zmergeObjects.<locals>.<genexpr>c             s   s   | ]}t | V  qd S )N)varskeys)r   tabler   r   r   r   +   s    *z*Don't know how to merge key %s of class %sc             3   s   | ]}t | tV  qd S )N)getattrr   )r   r   )keyr   r   r   7   s    )r   	__class__allr   mergeMapsetunionKeyError	Exceptionr   r   )lstlogicZreturnTableZ
returnDictZallKeysZ
mergeLogicvaluer   )r   r   r   mergeObjects   s8    

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   merge?   s    

r2   )Z#fontTools.ttLib.tables.DefaultTabler   logging	getLoggerr,   r   r*   r2   r   r   r   r   <module>   s
   
#