o
    i                      @   s   d Z ddlmZmZ ddlmZ ddlmZ ddlm	Z	m
Z
mZmZmZmZ ddlmZ ddl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rqddlZe eej!dd  dS dS )zCFF2 to CFF converter.    )TTFontnewTable)makeOutputFileName)T2StackUseExtractor)TopDictIndex
buildOrderbuildDefaultstopDictOperatorsprivateDictOperatorsFDSelect   )desubroutinizeCharString)specializeProgram)optimizeWidths)defaultdictNconvertCFF2ToCFFmainzfontTools.cffLibc                    sX  d| _ td}| jD ]
}d|_|| q
|| _|d }t|dr%tdtt}||_	|j
 D ]}||vrE|j
|= t||rEt|| q1|j}|j}t|ds`t  }	|_dgt|j |	_tt}
tt}|D ]<}|d |j}||_	|D ]}||j
vr||
v r|
| |j
|< qy|j
 D ]}||vr|j
|= t||rt|| qqj| 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rB|j#d||j"  q| D ]6}||\}}|du rXd}|| j}t$t%|dg | j|d}|&|}|dkr}t'| t(|j|_qH| )  dd t*|j+D  dd
 t,t|j+D |_+ fdd|j D |_d|_-dS )am  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 CFF2 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.r   Fendcharc                 S   s   g | ]	}t |jd g qS )Subrs)getattrPrivate).0fd r   i/var/www/html/eduruby.in/lip-sync/lip-sync-env/lib/python3.10/site-packages/fontTools/cffLib/CFF2ToCFF.py
<listcomp>U       z%_convertCFF2ToCFF.<locals>.<listcomp>returnZhmtxr   )private0   c                 S   s,   i | ]\}}||rd t |d ndqS Zcid   z.notdefstrzfill)r   nnamer   r   r   
<dictcomp>   s    z%_convertCFF2ToCFF.<locals>.<dictcomp>c                 S   s&   g | ]}|rd t |d ndqS r    r"   )r   r%   r   r   r   r      s    c                    s   i | ]	\}} | |qS r   r   )r   r&   vmappingr   r   r'      r   )ZAdobeZIdentityr   ).majorr   ZtopDictIndexZcff2GetGlyphOrderappendhasattr
ValueErrorr   r	   orderZrawDictkeysdelattrZCharStringsZFDArrayr   lencharStringsZgidArrayr   r
   ZsetCFF2r   valuesZ	decompileprogramZGlobalSubrsr   listmetricsZgetItemAndSelectoritemsr   ZdefaultWidthXZnominalWidthXinsertr   r   executer   r   Zremove_unused_subroutines	enumeratecharsetrangeZROS)cffZotFontZtopDictDataitemZtopDictZopOrderkeyr3   ZfdArrayZfdSelectdefaultsr/   r   ZprivateDictcsZsubrSetswidthsr7   Z	glyphNameZfdIndexZ	widthListZbestDefaultZbestNominalr   widthZ	extractorZstackUser   r)   r   _convertCFF2ToCFF   s   


















rE   T)updatePostTablec                C   st   d| vrt d| d j}t||  | d= td }| d< ||_|r4d| v r6| d }|jdkr8d|_d S d S d S d S )NZCFF2z)Input font does not contain a CFF2 table.zCFF postg       @g      @)r.   r>   rE   r   Z
formatType)fontrF   r>   tablerG   r   r   r   r      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 CFF2 OTF font to CFF OTF fontNr   r   zfonttools cffLib.CFF2ToCFFz(Convert a non-variable CFF2 font to CFF.)descriptioninputz	INPUT.ttfzInput OTF file with CFF table.)metavarhelpz-oz--outputz
OUTPUT.ttfz3Output instance OTF file (default: INPUT-CFF2.ttf).)rL   defaultrM   z--no-recalc-timestamprecalc_timestampstore_falsez:Don't set the output font's timestamp to the current time.)destactionrM   F)requiredz-vz	--verbose
store_truezRun more verbosely.)rR   rM   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	fontToolsrU   verbosequietosrK   pathisfileerrorformatoutputr   r   rO   r   loginfosave)argsr[   r]   parserZloggingGroupoptionsrU   rd   infileoutfilerH   r   r   r   r      sf   
__main__)N)"__doc__ZfontTools.ttLibr   r   ZfontTools.misc.cliToolsr   ZfontTools.misc.psCharStringsr   ZfontTools.cffLibr   r   r   r	   r
   r   Z
transformsr   Zspecializerr   rD   r   collectionsr   logging__all__	getLoggerrj   rE   r   r   __name__r[   exitr\   r   r   r   r   <module>   s&     
x
C