a
    w=ic|                     @   s   d dl mZ d dlZ d dlmZmZmZ d dlmZm	Z	 d dl
mZ d dlZ d dlmZ d dlmZ d dlZd dlZedZeeed	 ejd
ZG dd deZg dZeddddZedkree  dS )    )ttLibN)computeMegaGlyphOrdercomputeMegaCmaprenameCFFCharStrings)layoutPreMergelayoutPostMerge)Options)Timer)reducezfontTools.mergez.timer)loggerlevelc                   @   sB   e Zd ZdZdddZdd Zdd Zd	d
 Zdd Zdd Z	dS )MergeraS  Font merger.

	This class merges multiple files into a single OpenType font, taking into
	account complexities such as OpenType layout (``GSUB``/``GPOS``) tables and
	cross-font metrics (e.g. ``hhea.ascent`` is set to the maximum value across
	all the fonts).

	If multiple glyphs map to the same Unicode value, and the glyphs are considered
	sufficiently different (that is, they differ in any of paths, widths, or
	height), then subsequent glyphs are renamed and a lookup in the ``locl``
	feature will be created to disambiguate them. For example, if the arguments
	are an Arabic font and a Latin font and both contain a set of parentheses,
	the Latin glyphs will be renamed to ``parenleft#1`` and ``parenright#1``,
	and a lookup will be inserted into the to ``locl`` feature (creating it if
	necessary) under the ``latn`` script to substitute ``parenleft`` with
	``parenleft#1`` etc.

	Restrictions:

	- All fonts must have the same units per em.
	- If duplicate glyph disambiguation takes place as described above then the
		fonts must have a ``GSUB`` table.

	Attributes:
		options: Currently unused.
	Nc                 C   s   |s
t  }|| _d S N)r   options)selfr    r   i/home/droni/.local/share/virtualenvs/DPS-5Je3_V2c/lib/python3.9/site-packages/fontTools/merge/__init__.py__init__1   s    zMerger.__init__c                 C   s<   dd |D }t ||D ]\}}||_|d d|_q|S )Nc                 S   s   g | ]}t |qS r   )r   TTFont).0fontfiler   r   r   
<listcomp>9       z%Merger._openFonts.<locals>.<listcomp>name   )zipZ_merger__fontfileZgetDebugNameZ_merger__name)r   	fontfilesfontsfontr   r   r   r   
_openFonts8   s
    zMerger._openFontsc              	      s  |  |}dd |D }t| | |d j}|  |}t||D ]*\}}|| d|v r@t| ||d  q@dd |D }dd |D | _t| | tj	|d}|| j
 |D ]}| | q|| _ttjdd	 |D t }	|	d
 |	D ]  | jjv rqtd  ~  fdd|D }
td  t }| | |
}|turr|durr|| < td  ntd  W d   q1 s0    Y  q| `| `| | |S )zMerges fonts together.

		Args:
			fontfiles: A list of file names to be merged

		Returns:
			A :class:`fontTools.ttLib.TTFont` object. Call the ``save`` method on
			this to write it out to an OTF file.
		c                 S   s   g | ]}t | qS r   )listZgetGlyphOrderr   r   r   r   r   r   M   r   z Merger.merge.<locals>.<listcomp>r   zCFF c                 S   s   g | ]}|d  qS )Zcmapr   r!   r   r   r   r   Z   r   c                 S   s   g | ]}i qS r   r   )r   _r   r   r   r   [   r   )sfntVersionc                 s   s   | ]}t | V  qd S r   )r    keysr!   r   r   r   	<genexpr>f   r   zMerger.merge.<locals>.<genexpr>Z
GlyphOrderz
merge '%s'c                    s   g | ]}|  tqS r   )getNotImplementedr!   tagr   r   r   n   r   zMerging '%s'.FzMerged '%s'.zDropped '%s'.N)r   r   r#   r   ZsetGlyphOrderr   ZduplicateGlyphsPerFontr   r   r   
glyphOrder	_preMerger   r
   setunionremover   Zdrop_tablestimerloginfoZgetTableClassmerger'   
_postMerge)r   r   r   ZglyphOrdersr#   r   r*   ZcmapsmegaZallTagstablesZclazztabler   r(   r   r2   ?   sF    







.
zMerger.mergec                    s   t jt  gdd |D R  }|D ] z|  }W nF tyx   z|d }W n& tyr   td |jjf Y n0 Y n0 |tu rq"| fdd|D }|tur"t| | q"|S )Nc                 s   s"   | ]}|t urt| V  qd S r   )r'   varsr$   r   r6   r   r   r   r%      r   z&Merger.mergeObjects.<locals>.<genexpr>*z*Don't know how to merge key %s of class %sc                 3   s   | ]}t | tV  qd S r   )getattrr'   r8   keyr   r   r%      r   )r,   r-   KeyError	Exception	__class____name__r'   setattr)r   ZreturnTableZlogicr5   ZallKeysZ
mergeLogicvaluer   r;   r   mergeObjects   s"    
zMerger.mergeObjectsc                 C   s   t | d S r   )r   r   r   r   r   r   r+      s    zMerger._preMergec                 C   s"   t | d|v r|d | d S )NzOS/2)r   ZrecalcAvgCharWidthrD   r   r   r   r3      s    zMerger._postMerge)N)
r@   
__module____qualname____doc__r   r   r2   rC   r+   r3   r   r   r   r   r      s   
Cr   )r   r   mainz%make one with everything (TOTAL TIME)c                 C   s
  ddl m} | du r"tjdd } t }|j| dgd} d}g }| D ]&}|dr`|d	d }qD|| qDt| dk rt	d
tj
d dS ||jrtjntjd |jrtjtj ndtj_t|d}||}td || W d   n1 s0    Y  dS )zMerge multiple fonts into oner   )configLoggerN   zoutput-file)Zignore_unknownz
merged.ttfz--output-file=   zusage: pyftmerge font...)file)r   T)r   zcompile and save font)	fontToolsrI   sysargvr   Z
parse_opts
startswithappendlenprintstderrverboseloggingINFOWARNINGZtimingr/   r   setLevelDEBUGdisabledr   r2   save)argsrI   r   outfiler   gZmergerr   r   r   r   rH      s.    



rH   __main__)N)rM   r   ZfontTools.merge.baseZfontTools.merge.cmapr   r   r   ZfontTools.merge.layoutr   r   ZfontTools.merge.optionsr   ZfontTools.merge.tablesZfontTools.misc.loggingToolsr	   	functoolsr
   rN   rV   	getLoggerr0   r@   rW   r/   objectr   __all__rH   exitr   r   r   r   <module>   s$   
 !