
    ]Mh(                        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j        d          Zedgz   Zd Zd ZddZedk    r ej          e                       dS dS )    N)StringIO)Path)configLogger)addOpenTypeFeaturesFromString)FeatureLibError)Lexer)makeOutputFileName)TTFont
TTLibError)Parser)TABLES	VoltToFeazfontTools.feaLibcmapc                 x    | d         t           j        vrdS t          d | dd         D                       rdS dS )z9Check if the glyph name is valid according to FEA syntax.r   Tc              3   2   K   | ]}|t           j        vV  d S N)r   CHAR_NAME_CONTINUATION_).0cs     Z/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/fontTools/voltLib/__main__.py	<genexpr>z)invalid_fea_glyph_name.<locals>.<genexpr>   s*      
D
Da1E11
D
D
D
D
D
D       NF)r   CHAR_NAME_START_any)names    r   invalid_fea_glyph_namer      sJ    Awe,,,t

D
D48
D
D
DDD t5r   c                     d}t          |           D ];\  }}|dk    r|t          j        vr	|d|z   z  }"|t          j        vr|dz  }6||z  }<|S )zFSanitize the glyph name to ensure it is valid according to FEA syntax. r   a_)	enumerater   r   r   )r   	sanitizedir   s       r   sanitize_glyph_namer%      sq    I$  166au555q IIe333IINIIr   c           
      
   t          j        d          }|                    dddt                     |                    ddd	d
t                     |                    dddddt                     |                    dddt          dd           |                    dddd           |                    ddd           |                    ddd d!d"#           |                    d$d%d&d           |                    |           }g d'}t          |t          t          |          d(z
  |j	                           )           |j
        p't          t          |j        p|j                            }t                              d*| d+           |j        }d,}	 t!          |          }d-|v r.t#          |d-         j                            d.                    }nt                              d/           d(S n# t*          $ r Y nw xY w|7|j        st                              d0           d(S t!          |j                  }|                                }d,}t/          d1 |D                       r{g }|D ]a}	t1          |	          r;t3          |	          }	t5          |          t5          |          z  }
|	|
v r	d2|	z   }	|	|
v 	|                    |	           b|                    |           t;          |                                          }t                              d3           t?          ||          }	 |                     |j!        d45          }n# tD          $ r}}|j#        r tI          |j%        d"         d6d,          }d7| d8}|r,|\  }}}t                              | d9| d9| d:|            nt                              |           Y d,}~d(S d,}~ww xY w|j        }|j&        rp|'                    d;          }t                              d<| d+           tQ          |d=          5 }|)                    |           d,d,d,           n# 1 swxY w Y   t                              d>           	 tU          ||||j!        ?           n:# tV          $ r-}|j#        r t                              |           Y d,}~d(S d,}~ww xY w|j,        rd@D ]	}||v r||= 
|r^d"d,l-}|.                                }|/                    |           t!          |          }|                    |           g |dA         _0        |/                    |           d,S )Bz4Build 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+   r6   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              3   4   K   | ]}t          |          V  d S r   )r   )r   ns     r   r   zmain.<locals>.<genexpr>   s+      
9
9!!$$
9
9
9
9
9
9r   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)r>   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   convertrG   NotImplementedError	tracebackgetattrargsdebug_feature_filewith_suffixopenwriter   r   shipioBytesIOsave
extraNames)rc   parseroptionslevelsoutput_fontfile_or_pathrT   
glyphOrdertempGlyphOrderr@   existingdoc	converterfeaerB   messagepathlinecolumnfea_filenamefptagri   fs                            r   mainr   ,   s   $@  F 9	     >     '      0     8	     :    
 N     -	     %%G)))Fvc#f++/7?CCDEEEE. D7<87=99% %K HH4k444555=LDl##T>>#DL$5$<$<W$E$EFFLLII/0001      || 	II45551gl## ##%%JN

9
9j
9
9
999 	+ 	% 	%A%a((  '**~..Z@8mmaA 8mm!!!$$$$>***



$
$
&
&CHH)***#t$$IDQQ 
 
 
 	16!9j$77+a+++ 	!)D$II::::v::::;;;;IIgqqqqq
 =L! "..v663L333444,$$ 	HHSMMM	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 HH/000%!>		
 	
 	
 	
 	
     			!qqqqq	 | 3 	 	Cd{{I  %			JJLL		!ayy:&&&"$VIIksV    AG> >
H
H=M 
O!$A2OO!5QQQ=R 
S "SS__main__r   )!rL   loggingsysri   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   	getLoggerrU   rO   r   r%   r   __name__exit r   r   <module>r      sj     



             " " " " " " B B B B B B 2 2 2 2 2 2 ( ( ( ( ( ( 6 6 6 6 6 6 . . . . . . . . + + + + + + 9 9 9 9 9 9 9 9g*++VH$     ^ ^ ^ ^B zCHTTVV r   