a
    ZXh'                     @   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rddlZeeejdd  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   s   | d S N selfotherr   r   _/var/www/viveiro_mudafortebrasil/venv/lib/python3.9/site-packages/fontTools/cffLib/CFFToCFF2.py__add__   s    z_NominalWidthUsedError.__add__c                 C   s   | d S r   r   r   r   r   r   __radd__   s    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 ]}||\}}	|	  qh|g| D ]v}
|
D ]l}|j
}t| }}z|d}W n ty   Y n0 z|d	}W n ty   Y n0 g |t||d< qqd
}t }| D ]J}||\}}	|j
}|	durD||	 nt|dr^t|jdg ng }t|||d}z|| W n tyD   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< qt|dks6J ||d Y n0 |r|d d	kr|  q|rt|   d| _| jj}td|}| j D ]}|| q|| _ |d }t|dr|j}nd}tt}||_ ||_!t|dst"  }|_d|_#|j|_||j_$|j}|j%r$||j&_$n||_$t' }|(d || ||_tt)}|dur`t*D ]B}|d } | |vr`| |j+v r|j+| = t|| r`t,||  q`n|j}tt)}|D ]}|(d t-|j+ D ]0} | |j vr|j+| = t|| rt,||  q|j}t*D ]J}|d } | |vr| t-|j+ v rB|j+| = t|| rt,||  qqt.D ]P}|d } | dkr~qd| |vrd| |j+v r|j+| = t|| rdt,||  qdt/ }!| 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>/       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)"cffr8   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   	


















rK   c                 C   s4   | d j }| d= t||  td }| d< ||_ d S )NzCFF ZCFF2)rB   rK   r   )fontrB   tabler   r   r   r      s
    

c                 C   sF  | 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	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).)rP   defaultrQ   z--no-recalc-timestamprecalc_timestampstore_falsez:Don't set the output font's timestamp to the current time.)destactionrQ   F)requiredz-vz	--verbose
store_truezRun more verbosely.)rV   rQ   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	fontToolsrY   verbosequietosrO   pathisfileerrorformatoutputr   r   rS   r   loginfosave)argsr_   ra   parserZloggingGroupoptionsrY   rh   infileoutfilerL   r   r   r   r      sf    
__main__r(   )N) __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__	getLoggerrn   	Exceptionr   rK   r   r   r   r_   exitr`   r   r   r   r   <module>   s    (

 C
C