o
    h                     @   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                    s  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t}	tt}
|D ]<}|d |j}|
|_	|
D ]}||j
vrw||	v rw|	| |j
|< qe|j
 D ]}||
vr|j
|= t||rt|| q}qV| 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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   VarStorez5Variable CFF2 font cannot be converted to CFF format.Fendcharc                 S   s   g | ]	}t |jd g qS )Subrs)getattrPrivate).0fd r   n/var/www/html/construction_image-detection-poc/venv/lib/python3.10/site-packages/fontTools/cffLib/CFF2ToCFF.py
<listcomp>K       z%_convertCFF2ToCFF.<locals>.<listcomp>returnhmtxc                 S   s&   i | ]\}}||rd t | ndqS 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   r   )%majorr   topDictIndexcff2GetGlyphOrderappendhasattr
ValueErrorr   r   orderrawDictkeysdelattrFDArrayCharStringsr   r	   setCFF2r   values	decompileprogramGlobalSubrsr   listmetricsgetItemAndSelectoritemsr   defaultWidthXnominalWidthXinsert	enumeratecharsetrangelencharStrings)cffotFonttopDictDataitemtopDictopOrderkeyfdArrayrB   defaultsr,   r   privateDictcssubrSetswidthsr8   	glyphNamefdIndex	widthListbestDefaultbestNominalprivatewidthr   r$   r   _convertCFF2ToCFF   s   












rW   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 )NCFF2zCFF postg       @g      @)rC   rW   r   
formatType)fontrX   rC   tablerZ   r   r   r   r   w   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).)r`   defaultra   z--no-recalc-timestamprecalc_timestampstore_falsez:Don't set the output font's timestamp to the current time.)destactionra   F)requiredz-vz	--verbose
store_truezRun more verbosely.)rf   ra   z-qz--quietzTurn verbosity off.)configLoggerDEBUGERRORINFO)levelzNo such file '{}'Tz-CFF)	overWritesuffix)recalcTimestamprecalcBBoxesz	Saving %s)sysargvargparseArgumentParseradd_argumentadd_mutually_exclusive_group
parse_args	fontToolsri   verbosequietosr_   pathisfileerrorformatoutputr   r   rc   r   loginfosave)argsrr   rt   parserloggingGroupoptionsri   r|   infileoutfiler\   r   r   r   r      sf   
__main__)N)__doc__fontTools.ttLibr   r   fontTools.misc.cliToolsr   fontTools.cffLibr   r   r   r   r	   rV   r   collectionsr   logging__all__	getLoggerr   rW   r   r   __name__rr   exitrs   r   r   r   r   <module>   s     
`
C