a
    ZXh(                     @   s   d dl Z d dlZd dlZd dlmZ d dlmZ d dlmZ d dl	m
Z
 d dlmZ d dlmZ d dlmZ d d	lmZmZ d d
lmZ d dlmZmZ edZedg Zdd Zdd ZdddZedkre e  dS )    N)StringIO)Path)configLogger)addOpenTypeFeaturesFromString)FeatureLibError)Lexer)makeOutputFileName)TTFont
TTLibError)Parser)TABLES	VoltToFeazfontTools.feaLibZcmapc                 C   s4   | d t jvrdS tdd | dd D r0dS dS )z9Check if the glyph name is valid according to FEA syntax.r   Tc                 s   s   | ]}|t jvV  qd S N)r   CHAR_NAME_CONTINUATION_).0c r   _/var/www/viveiro_mudafortebrasil/venv/lib/python3.9/site-packages/fontTools/voltLib/__main__.py	<genexpr>       z)invalid_fea_glyph_name.<locals>.<genexpr>   NF)r   CHAR_NAME_START_any)namer   r   r   invalid_fea_glyph_name   s
    r   c                 C   sV   d}t | D ]D\}}|dkr4|tjvr4|d| 7 }q|tjvrH|d7 }q||7 }q|S )zFSanitize the glyph name to ensure it is valid according to FEA syntax. r   a_)	enumerater   r   r   )r   Z	sanitizedir   r   r   r   sanitize_glyph_name   s    


r    c                 C   s  t jdd}|jdddtd |jddd	d
td |jdddddtd |jdddtddd |jddddd |jdddd |jddd d!d"d# |jd$d%d&dd || }g d'}t|tt|d( |j	 d) |j
ptt|jp|j}td*| d+ |j}d,}z<t|}d-|v r6t|d- jd.}ntd/ W d(S W n ty\   Y n0 |d,u r|js~td0 d(S t|j}| }d,}td1d2 |D rg }|D ]H}	t|	rt|	}	t|t|B }
|	|
v rd3|	 }	q||	 q|| t| }td4 t||}z|j |j!d5d6}W n t"y } zr|j#rT t$|j%d" d7d,}d8| d9}|r|\}}}t| d:| d:| d;|  n
t| W Y d,}~d(S d,}~0 0 |j}|j&r&|'d<}td=| d+ t(|d>}|)| W d,   n1 s0    Y  td? zt*||||j!d@ W n< t+y } z"|j#rb t| W Y d,}~d(S d,}~0 0 |j,rdAD ]}||v r||= q|rd"d,l-}|. }|/| t|}|| g |dB _0|/| d,S )Cz4Build tables from a MS VOLT project into an OTF fontz*Use fontTools to compile MS VOLT projects.)descriptioninputZINPUTz*Path to the input font/VTP file to process)metavarhelptypez-fz--fontZ
INPUT_FONTz/Path to the input font (if INPUT is a VTP file)z-oz--outputoutputZOUTPUTzPath to the output font.)destr#   r$   r%   z-tz--tablesZ	TABLE_TAG+z!Specify the table(s) to be built.)r#   choicesnargsr$   z-Fz--debug-feature-filez)Write the generated feature file to disk.
store_true)r$   actionz--shipz+Remove source VOLT tables from output font.z-vz	--verbosez?Increase the logger verbosity. Multiple -v options are allowed.countr   )r$   r,   defaultz-Tz--tracebackzshow traceback for exceptions.)WARNINGINFODEBUGr   )levelzCompiling MS VOLT to ''NTSIVzutf-8z"TSIV" table is missingzPlease provide an input fontc                 s   s   | ]}t |V  qd S r   )r   )r   nr   r   r   r      r   zmain.<locals>.<genexpr>r   zConverting VTP data to FEAT)Zignore_unsupported_settingslocation"z" is not supported:z: z.feazWriting FEA to 'wz Compiling FEA to OpenType tables)filenametables)r4   ZTSISZTSIPZTSIDpost)1argparseArgumentParseradd_argumentr   SUPPORTED_TABLES
parse_argsr   minlenverboser&   r   fontr"   loginfor	   r   datadecodeerrorr
   ZgetGlyphOrderr   r   r    setappendZsetGlyphOrderr   parser   convertr;   NotImplementedError	tracebackgetattrargsZdebug_feature_filewith_suffixopenwriter   r   ZshipioBytesIOsaveZ
extraNames)rR   parseroptionslevelsZoutput_fontZfile_or_pathrE   Z
glyphOrderZtempGlyphOrderr5   existingdoc	converterZfeaer6   messagepathlinecolumnZfea_filenamefptagrV   fr   r   r   main,   s   












"

*







rg   __main__)N)!r=   loggingsysrV   r   pathlibr   Z	fontToolsr   ZfontTools.feaLib.builderr   ZfontTools.feaLib.errorr   ZfontTools.feaLib.lexerr   ZfontTools.misc.cliToolsr   ZfontTools.ttLibr	   r
   ZfontTools.voltLib.parserr   ZfontTools.voltLib.voltToFear   r   	getLoggerrF   r@   r   r    rg   __name__exitr   r   r   r   <module>   s(   

	
 "