a
    —ÆàgÈ  ã                   @   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 )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ƒrJtdƒ‚ttƒ}||_	|j
 ¡ D ](}||vrb|j
|= t||ƒrbt||ƒ qb|j}|j}ttƒ}	ttƒ}
|D ]x}| d¡ |j}|
|_	|
D ]$}||j
vrÊ||	v rÊ|	| |j
|< qÊ|j
 ¡ D ](}||
vrú|j
|= t||ƒrút||ƒ qúq¬| ¡ D ]}| ¡  |j d¡ �q.| jgdd	„ |D ƒ D ]}|D ]}|j d
¡ �qh�q`ttƒ}|d j}| ¡ D ]8}| |¡\}}|dk�rºd}||  || d ¡ �qš| ¡ D ],\}}t|ƒ\}}|| j}||_||_�qÜ| ¡ D ]X}| |¡\}}|dk�r2d}|| 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   ZVarStorez5Variable CFF2 font cannot be converted to CFF format.FÚendcharc                 S   s   g | ]}t |jd g ƒ‘qS )ZSubrs)ÚgetattrÚPrivate)Ú.0Úfd© r   úS/var/www/sistema_ama/venv/lib/python3.9/site-packages/fontTools/cffLib/CFF2ToCFF.pyÚ
<listcomp>K   s   z%_convertCFF2ToCFF.<locals>.<listcomp>ÚreturnZhmtxc                 S   s&   i | ]\}}||rd t |ƒ nd“qS ©Z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   s   )%Úmajorr   ZtopDictIndexZcff2GetGlyphOrderÚappendÚhasattrÚ
ValueErrorr   r   ÚorderZrawDictÚkeysÚdelattrZFDArrayZCharStringsr   r	   ZsetCFF2r   ÚvaluesZ	decompileÚprogramZGlobalSubrsr   ÚlistÚmetricsZgetItemAndSelectorÚitemsr   ZdefaultWidthXZnominalWidthXÚinsertÚ	enumerateÚcharsetÚrangeÚlenÚcharStrings)ÚcffZotFontZtopDictDataÚitemZtopDictZopOrderÚkeyZfdArrayr2   Údefaultsr%   r   ZprivateDictÚcsZsubrSetsZwidthsr+   Z	glyphNameZfdIndexZ	widthListZbestDefaultZbestNominalÚprivateÚwidthr   r   r   Ú_convertCFF2ToCFF   sŠ    





ÿ





þÿ
ÿr:   T)ÚupdatePostTablec                C   sX   | d j }t|| ƒ | d= tdƒ }| d< ||_ |rTd| v rT| d }|jdkrTd|_d S )NZCFF2zCFF Úpostg       @g      @)r3   r:   r   Z
formatType)Úfontr;   r3   Útabler<   r   r   r   r   w   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).)rA   ÚdefaultrB   z--no-recalc-timestampÚrecalc_timestampÚstore_falsez:Don't set the output font's timestamp to the current time.)ÚdestÚactionrB   F)Úrequiredz-vz	--verboseÚ
store_truezRun more verbosely.)rG   rB   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	fontToolsrJ   ÚverboseÚquietÚosr@   ÚpathÚisfileÚerrorÚformatÚoutputr   r   rD   r   ÚlogÚinfoÚsave)ÚargsrP   rR   ÚparserZloggingGroupÚoptionsrJ   rY   ÚinfileÚoutfiler=   r   r   r   r   …   sf    þÿûüÿÿ
ÿÿýþÚ__main__)N)Ú__doc__ZfontTools.ttLibr   r   ZfontTools.misc.cliToolsr   ZfontTools.cffLibr   r   r   r   r	   r9   r   Úcollectionsr   ÚloggingÚ__all__Ú	getLoggerr_   r:   r   r   Ú__name__rP   ÚexitrQ   r   r   r   r   Ú<module>   s   
`
C