a
    —Æàg‡'  ã                   @   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rÌd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   úS/var/www/sistema_ama/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…< q–qŽd
}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ƒ�sÌJ |ƒ‚| d¡}|dk�ræ|jn|j}||7 }|dk�r|n|}|| j
}||dd…< �qŽt|ƒ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ƒ�s¦t"ƒ  }|_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|| ƒ�rÔt,|| ƒ �qÔ|j}t*D ]J}|d } | |v�r| t-|j+ ¡ ƒv �rB|j+| = t|| ƒ�rt,|| ƒ �q�q¸t.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	r¼d n|j
rÆd!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