o
    _h(                     @   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roe e  dS dS )    N)StringIO)Path)configLogger)addOpenTypeFeaturesFromString)FeatureLibError)Lexer)makeOutputFileName)TTFont
TTLibError)Parser)TABLES	VoltToFeazfontTools.feaLibcmapc                 C   s4   | d t jvr	dS tdd | dd D rd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   N/var/www/html/myenv/lib/python3.10/site-packages/fontTools/voltLib/__main__.py	<genexpr>   s    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kr|tjvr|d| 7 }q|tjvr$|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   	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
pwtt|jpu|j}td*| d+ |j}d,}zt|}d-|v rt|d- jd.}ntd/ W d(S W n	 ty   Y nw |d,u r|jstd0 d(S t|j}| }d,}td1d2 |D rg }|D ]#}	t|	rt|	}	t|t|B }
|	|
v rd3|	 }	|	|
v s||	 q|| t| }td4 t||}z
|j |j!d5d6}W nF t"y\ } z9|j#r$ t$|j%d" d7d,}d8| d9}|rL|\}}}t| d:| d:| d;|  nt| W Y d,}~d(S d,}~ww |j}|j&r|'d<}td=| d+ t(|d>}|)| W d,   n	1 sw   Y  td? zt*||||j!d@ W n t+y } z|j#r t| W Y d,}~d(S d,}~ww |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inputINPUTz*Path to the input font/VTP file to process)metavarhelptypez-fz--font
INPUT_FONTz/Path to the input font (if INPUT is a VTP file)z-oz--outputoutputOUTPUTzPath to the output font.)destr%   r&   r'   z-tz--tables	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&   r1   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      s    zmain.<locals>.<genexpr>r   zConverting VTP data to FEAT)ignore_unsupported_settingslocation"z" is not supported:z: z.feazWriting FEA to 'wz Compiling FEA to OpenType tables)filenametables)r9   TSISTSIPTSIDpost)1argparseArgumentParseradd_argumentr   SUPPORTED_TABLES
parse_argsr   minlenverboser)   r   fontr#   loginfor	   r   datadecodeerrorr
   getGlyphOrderr   r   r!   setappendsetGlyphOrderr   parser   convertrA   NotImplementedError	tracebackgetattrargsdebug_feature_filewith_suffixopenwriter   r   shipioBytesIOsave
extraNames)r]   parseroptionslevelsoutput_fontfile_or_pathrN   
glyphOrdertempGlyphOrderr:   existingdoc	converterfeaer<   messagepathlinecolumnfea_filenamefptagrc   fr   r   r   main,   s"  







"








r{   __main__r   )!rF   loggingsysrc   r   pathlibr   	fontToolsr   fontTools.feaLib.builderr   fontTools.feaLib.errorr   fontTools.feaLib.lexerr   fontTools.misc.cliToolsr   fontTools.ttLibr	   r
   fontTools.voltLib.parserr   fontTools.voltLib.voltToFear   r   	getLoggerrO   rI   r   r!   r{   __name__exitr   r   r   r   <module>   s,    

	
 "