U
    #vh                     @   s   d Z ddlmZmZ ddlmZ ddlmZmZm	Z	m
Z
mZ ddlmZ ddlmZ ddlZd	d
gZedZdd Zdddd	Zddd
ZedkrddlZeeejdd  dS )zCFF2 to CFF converter.    )TTFontnewTable)makeOutputFileName)TopDictIndex
buildOrderbuildDefaultstopDictOperatorsprivateDictOperators   )optimizeWidths)defaultdictNconvertCFF2ToCFFmainzfontTools.cffLibc                    s  d| _ td}| jD ]}d|_|| q|| _|d }t|drJtdtt}||_	|j
 D ](}||krb|j
|= t||rbt|| qb|j}|j}tt}	tt}
|D ]x}|d |j}|
|_	|
D ]$}||j
kr||	kr|	| |j
|< q|j
 D ](}||
kr|j
|= t||rt|| qq| D ]}|  |jd q.| jgdd	 |D  D ]}|D ]}|jd
 qhq`tt}|d j}| D ]8}||\}}|dkrd}|| || d  q| D ],\}}t|\}}|| j}||_||_q| D ]X}||\}}|dkr2d}|| j}|| d }||jkr|jd||j  qdd t |j!D  dd	 t"t#|j!D |_! fdd|j$ D |_$dS )al  Converts this object from CFF2 format to CFF format. This conversion
    is done 'in-place'. The conversion cannot be reversed.

    The CFF2 font cannot be variable. (TODO Accept those and convert to the
    default instance?)

    This assumes a decompiled CFF table. (i.e. that the object has been
    filled via :meth:`decompile` and e.g. not loaded from XML.)r
   Nr   ZVarStorez5Variable CFF2 font cannot be converted to CFF format.Fendcharc                 S   s   g | ]}t |jd g qS )ZSubrs)getattrPrivate).0fd r   >/tmp/pip-unpacked-wheel-1ufboor8/fontTools/cffLib/CFF2ToCFF.py
<listcomp>K   s    z%_convertCFF2ToCFF.<locals>.<listcomp>returnZhmtxc                 S   s&   i | ]\}}||rd t | ndqS Zcidz.notdefstr)r   nnamer   r   r   
<dictcomp>g   s    z%_convertCFF2ToCFF.<locals>.<dictcomp>c                 S   s    g | ]}|rd t | ndqS r   r   )r   r   r   r   r   r   k   s    c                    s   i | ]\}} | |qS r   r   )r   r   vmappingr   r   r   n   s     )%majorr   ZtopDictIndexZcff2GetGlyphOrderappendhasattr
ValueErrorr   r   orderZrawDictkeysdelattrZFDArrayZCharStringsr   r	   ZsetCFF2r   valuesZ	decompileprogramZGlobalSubrsr   listmetricsZgetItemAndSelectoritemsr   ZdefaultWidthXZnominalWidthXinsert	enumeratecharsetrangelencharStrings)cffZotFontZtopDictDataitemZtopDictZopOrderkeyZfdArrayr2   defaultsr%   r   ZprivateDictcsZsubrSetsZwidthsr+   Z	glyphNameZfdIndexZ	widthListZbestDefaultZbestNominalprivatewidthr   r   r   _convertCFF2ToCFF   s    












r:   T)updatePostTablec                C   sX   | d j }t||  | d= td }| d< ||_ |rTd| krT| d }|jdkrTd|_d S )NZCFF2zCFF postg       @g      @)r3   r:   r   Z
formatType)fontr;   r3   tabler<   r   r   r   r   w   s    


c                 C   sF  | dkrddl }|jdd } ddl}|jddd}|jddd	d
 |jdddddd |jddddd |jdd}|jddddd |jddddd || }ddlm} ||j	rd n|j
rd!nd"d# ddl}|j}|j|s|d$| |jst|d%d&d'n|j}	t||jdd(}
t|
 td)|	 |
|	 dS )*z%Convert CFF OTF font to CFF2 OTF fontNr   r
   zfonttools cffLib.CFFToCFF2zUpgrade a CFF font to CFF2.)descriptioninputz	INPUT.ttfzInput OTF file with CFF table.)metavarhelpz-oz--outputz
OUTPUT.ttfz3Output instance OTF file (default: INPUT-CFF2.ttf).)rA   defaultrB   z--no-recalc-timestamprecalc_timestampstore_falsez:Don't set the output font's timestamp to the current time.)destactionrB   F)requiredz-vz	--verbose
store_truezRun more verbosely.)rG   rB   z-qz--quietzTurn verbosity off.)configLoggerDEBUGERRORINFO)levelzNo such file '{}'Tz-CFF)Z	overWritesuffix)ZrecalcTimestampZrecalcBBoxesz	Saving %s)sysargvargparseArgumentParseradd_argumentadd_mutually_exclusive_group
parse_argsZ	fontToolsrJ   verbosequietosr@   pathisfileerrorformatoutputr   r   rD   r   loginfosave)argsrP   rR   parserZloggingGroupoptionsrJ   rY   infileoutfiler=   r   r   r   r      sv            
__main__)N)__doc__ZfontTools.ttLibr   r   ZfontTools.misc.cliToolsr   ZfontTools.cffLibr   r   r   r   r	   r9   r   collectionsr   logging__all__	getLoggerr_   r:   r   r   __name__rP   exitrQ   r   r   r   r   <module>   s   
`
C