o
    l^Uf                     @   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r]ddlZeeejdd  dS dS )zCFF2 to CFF converter.    )TTFontnewTable)makeOutputFileName)TopDictIndex
buildOrderbuildDefaultstopDictOperatorsprivateDictOperators   )optimizeWidths)defaultdictNconvertCFF2ToCFFmainzfontTools.cffLibc                 C   sb  d| _ tddd}| jD ]}|| q|| _|d }t|dr$tdtt}||_|j	
 D ]}||vrD|j	|= t||rDt|| q0|j}|j}tt}	tt}
|D ]<}|d |j}|
|_|
D ]}||j	vrv||	v rv|	| |j	|< qd|j	
 D ]}||
vr|j	|= t||rt|| q|qU| D ]}|  |jd	 q| jgd
d |D  D ]}|D ]}|jd qqtt}|d j}|
 D ]}||\}}|dkrd}|| || d  q| D ]\}}t|\}}|| j}||_||_q|
 D ],}||\}}|dkrd}|| j}|| d }||jkr-|jd||j  q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
   NT)ZisCFF2r   ZVarStorez5Variable CFF2 font cannot be converted to CFF format.FZendcharc                 S   s   g | ]	}t |jd g qS )ZSubrs)getattrPrivate).0fd r   :lib/python3.10/site-packages/fontTools/cffLib/CFF2ToCFF.py
<listcomp>J   s    z%_convertCFF2ToCFF.<locals>.<listcomp>returnZhmtx)majorr   ZtopDictIndexappendhasattr
ValueErrorr   r   orderZrawDictkeysdelattrZFDArrayZCharStringsr   r	   ZsetCFF2r   valuesZ	decompileZprogramZGlobalSubrsr   listmetricsZgetItemAndSelectoritemsr   ZdefaultWidthXZnominalWidthXinsert)cffZotFontZtopDictDataitemZtopDictZopOrderkeyZfdArrayZcharStringsdefaultsr   r   ZprivateDictcsZsubrSetsZwidthsr    Z	glyphNameZfdIndexZ	widthListZbestDefaultZbestNominalZprivatewidthr   r   r   _convertCFF2ToCFF   s   











r)   T)updatePostTablec                C   sd   | d j }t||  | d= td }| d< ||_ |r,d| v r.| d }|jdkr0d|_d S d S d S d S )NZCFF2zCFF postg       @g      @)r#   r)   r   Z
formatType)fontr*   r#   tabler+   r   r   r   r   g   s   



c                 C   sD  | du 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	r^d n|j
rcd!nd"d# ddl}|j}|j|s||d$| |jst|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).)r0   defaultr1   z--no-recalc-timestamprecalc_timestampstore_falsez:Don't set the output font's timestamp to the current time.)destactionr1   F)requiredz-vz	--verbose
store_truezRun more verbosely.)r6   r1   z-qz--quietzTurn verbosity off.)configLoggerDEBUGZ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	fontToolsr9   verbosequietosr/   pathisfileerrorformatoutputr   r   r3   r   loginfoZsave)argsr>   r@   parserZloggingGroupoptionsr9   rG   ZinfileZoutfiler,   r   r   r   r   u   sf   
__main__)N)__doc__ZfontTools.ttLibr   r   ZfontTools.misc.cliToolsr   ZfontTools.cffLibr   r   r   r   r	   r(   r   collectionsr   Zlogging__all__Z	getLoggerrM   r)   r   r   __name__r>   exitr?   r   r   r   r   <module>   s     
P
C