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mZmZ ddlmZ ddlZdd	gZed
ZG dd deZdd Zdd Zddd	ZedkrhddlZeeejdd  dS dS )zCFF to CFF2 converter.    )TTFontnewTable)makeOutputFileName)T2WidthExtractor)TopDictIndexFDArrayIndexFontDict
buildOrdertopDictOperatorsprivateDictOperatorstopDictOperators2privateDictOperators2)BytesIONconvertCFFToCFF2mainzfontTools.cffLibc                   @   s   e Zd Zdd Zdd ZdS )_NominalWidthUsedErrorc                 C      | N selfotherr   r   i/var/www/html/eduruby.in/lip-sync/lip-sync-env/lib/python3.10/site-packages/fontTools/cffLib/CFFToCFF2.py__add__      z_NominalWidthUsedError.__add__c                 C   r   r   r   r   r   r   r   __radd__   r   z_NominalWidthUsedError.__radd__N)__name__
__module____qualname__r   r   r   r   r   r   r      s    r   c           "   
   C   s  | j d }t|dr|jnd}|j}| j}|rdd |D nt|dr.t|jdr.|jjgng }| D ]}||\}}	|	  q4|g| D ];}
|
D ]6}|j
}t| }}z|d}W n	 tyf   Y nw z|d	}W n	 tyw   Y nw g |t||d< qKqGd
}t }| D ]}||\}}	|j
}|	dur||	 nt|drt|jdg ng }t|||d}z|| W nk ty'   t|dkr|d dv rd}|d}t|tsJ ||d}|dkr|jn|j}||7 }|dkr|n|}|| j
}||dd< t|dkr|d dv st|dks J ||d Y nw |r6|d d	kr6|  q|r>|   d| _| jj}td|}| j D ]}|| qM|| _ |d }t|drg|j}nd}tt}||_ ||_!t|dst"  }|_d|_#|j|_||j_$|j}|j%r||j&_$n||_$t' }|(d || ||_tt)}|durt*D ]!}|d } | |vr| |j+v r|j+| = t|| rt,||  qn]|j}tt)}|D ]S}|(d t-|j+ D ]} | |j vr|j+| = t|| rt,||  q|j}t*D ]%}|d } | |vr0| t-|j+ v r%|j+| = t|| r0t,||  qqt.D ](}|d } | dkrCq6| |vr]| |j+v rR|j+| = t|| r]t,||  q6t/ }!| j0|!|dd |!1d | j	|!|dd dS )a  Converts this object from CFF format to CFF2 format. This conversion
    is done 'in-place'. The conversion cannot be reversed.

    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   FDArrayNc                 S   s   g | ]	}t |jd g qS )Subrs)getattrPrivate).0fdr   r   r   
<listcomp>/   s    z%_convertCFFToCFF2.<locals>.<listcomp>r"   r    returnendcharF      )callsubrZ	callgsubrTr*   charset)ZisCFF2)2ZtopDictIndexhasattrr   ZCharStringsZGlobalSubrsr"   r    keysZgetItemAndSelectorZ	decompileprogramlenindex
ValueErrorminr   r!   r   executepop
isinstanceintZ	localBiasZ
globalBiasZremove_unused_subroutinesmajorotFontZgetGlyphOrderr   appendr	   r   ordercff2GetGlyphOrderr   stringsfdArrayZcharStringsAreIndexedZcharStringsIndexr   ZsetCFF2r   r   ZrawDictdelattrlistr
   r   compileseek)"cffr9   ZtopDictr>   ZcharStringsZglobalSubrsZ
localSubrsZ	glyphNamecsZfdIndexZsubrsZsubrr/   ijZremoveUnusedSubrsZnominalWidthXErrorZthisLocalSubrsZ	extractorZ
subrNumberopZbiasZsubrSetZsubrProgramr<   ZtopDictDataitemZprivateDictZopOrderZfontDictZprivateOpOrderentrykeyfiler   r   r   _convertCFFToCFF2!   s  
	





















rL   c                 C   s4   | d j }| d= t||  td }| d< ||_ d S )NzCFF ZCFF2)rC   rL   r   )fontrC   tabler   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 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).)rQ   defaultrR   z--no-recalc-timestamprecalc_timestampstore_falsez:Don't set the output font's timestamp to the current time.)destactionrR   F)requiredz-vz	--verbose
store_truezRun more verbosely.)rW   rR   z-qz--quietzTurn verbosity off.)configLoggerDEBUGERRORINFO)levelzNo such file '{}'Tz-CFF2)Z	overWritesuffix)ZrecalcTimestampZrecalcBBoxesz	Saving %s)sysargvargparseArgumentParseradd_argumentadd_mutually_exclusive_group
parse_argsZ	fontToolsrZ   verbosequietosrP   pathisfileerrorformatoutputr   r   rT   r   loginfosave)argsr`   rb   parserZloggingGroupoptionsrZ   ri   infileoutfilerM   r   r   r   r      sf   
__main__r)   r   ) __doc__ZfontTools.ttLibr   r   ZfontTools.misc.cliToolsr   ZfontTools.misc.psCharStringsr   ZfontTools.cffLibr   r   r   r	   r
   r   r   r   ior   logging__all__	getLoggerro   	Exceptionr   rL   r   r   r   r`   exitra   r   r   r   r   <module>   s$    (

 C
C