o
    i(                     @   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.feaLibZ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   i/var/www/html/eduruby.in/lip-sync/lip-sync-env/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   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
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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      s    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)r3   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   shipioBytesIOsaveZ
extraNames)rQ   parseroptionsZlevelsZoutput_fontZfile_or_pathrD   Z
glyphOrderZtempGlyphOrderr4   existingdoc	converterZfeaer5   messagepathlinecolumnZfea_filenamefptagrV   fr   r   r   main,   s"  







"








rf   __main__r   )!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   	getLoggerrE   r?   r   r   rf   __name__exitr   r   r   r   <module>   s,    

	
 "