o
    âi4c  ã                   @   sˆ   d dl m  mZ d dlmZ d dlmZ d dlmZ ddddd	d
d
d
dddddœZ	G dd„ de
ƒZG dd„ de
ƒZG dd„ deƒZdS )é    N)ÚLexer)ÚVoltLibError)ÚopenÚparse_def_glyph_Úparse_def_group_Úparse_def_script_Úparse_def_lookup_Úparse_def_anchor_Úparse_ppem_Úparse_noarg_option_Úparse_cmap_format)Ú	DEF_GLYPHÚ	DEF_GROUPÚ
DEF_SCRIPTÚ
DEF_LOOKUPÚ
DEF_ANCHORZ	GRID_PPEMZPRESENTATION_PPEMZPPOSITIONING_PPEMZCOMPILER_USEEXTENSIONLOOKUPSZCOMPILER_USEPAIRPOSFORMAT2ZCMAP_FORMATZDO_NOT_TOUCH_CMAPc                   @   s  e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Zd!d"„ Zd#d$„ Zd%d&„ Zd'd(„ Zd)d*„ Zd+d,„ Zd-d.„ Zd/d0„ Zd1d2„ Zd3d4„ Zd5d6„ Zd7d8„ Zd9d:„ Zd;d<„ Z d=d>„ Z!d?d@„ Z"dAdB„ Z#dCS )DÚParserc                 C   s`   t  ¡ | _tƒ | _tƒ | _i | _tƒ | _tƒ | _	tƒ | _
d\| _| _d | _|  |¡ |  ¡  d S )N©NN)ÚastZVoltFileÚdoc_ÚOrderedSymbolTableÚglyphs_ÚSymbolTableÚgroups_Úanchors_Úscripts_Úlangs_Úlookups_Únext_token_type_Únext_token_Únext_token_location_Úmake_lexer_Úadvance_lexer_)ÚselfÚpath© r%   úg/var/www/html/eduruby.in/lip-sync/lip-sync-env/lib/python3.10/site-packages/fontTools/voltLib/parser.pyÚ__init__   s   

zParser.__init__c                 C   sf   t |dƒrt|dd ƒ}| ¡ }n|}t|dƒ}| ¡ }W d   ƒ n1 s&w   Y  t||ƒ| _d S )NÚreadÚnameÚr)ÚhasattrÚgetattrr(   r   r   Úlexer_)r#   Zfile_or_pathÚfilenameÚdataÚfr%   r%   r&   r!   $   s   


ÿzParser.make_lexer_c                 C   s†   | j j}| jd ur@|  ¡  | jt ¡ v r#t| t| j ƒ}| |ƒ ¡ n|  	d¡r,	 | j S t
dd tt ¡ ƒ¡ | jƒ‚| jd us	| j S )NÚENDz	Expected z, )r   Ú
statementsr   r"   Ú
cur_token_ÚPARSE_FUNCSÚkeysr,   ÚappendÚis_cur_keyword_r   ÚjoinÚsortedÚcur_token_location_)r#   r2   Úfuncr%   r%   r&   Úparse.   s   

üþ
øzParser.parsec                 C   s:  |   d¡sJ ‚| j}|  ¡ }|  d¡ |  ¡ }|dk r!td| jƒ‚d }| jdkr?|  d¡ |  ¡ g}|d dk r>td| jƒ‚n| jdkrM|  d¡ |  ¡ }d }| jdkrc|  d¡ |  ¡ }|d	v scJ ‚d }| jd
krs|  d
¡ |  ¡ }|  d¡ | j	 
|¡d ur‰td||f |ƒ‚tj||||||d}| j	 ||¡ |S )Nr   ÚIDr   zInvalid glyph IDÚUNICODEzInvalid glyph UNICODEZUNICODEVALUESZTYPE)ZBASEZLIGATUREÚMARKÚ	COMPONENTZ
COMPONENTSZ	END_GLYPHz#Glyph "%s" (gid %i) already defined©Úlocation)r7   r:   Úexpect_string_Úexpect_keyword_Úexpect_number_r   r   Úparse_unicode_values_Úexpect_name_r   Úresolver   ZGlyphDefinitionÚdefine)r#   rB   r)   ÚgidZgunicodeÚgtypeÚ
componentsZ	def_glyphr%   r%   r&   r   >   sH   



ÿ






ÿÿzParser.parse_def_glyph_c                 C   s|   |   d¡sJ ‚| j}|  ¡ }d }| jdkr|  ¡ }|  d¡ | j |¡d ur-td| |ƒ‚t	j
|||d}| j ||¡ |S )Nr   ÚENUMZ	END_GROUPzBGlyph group "%s" already defined, group names are case insensitiverA   )r7   r:   rC   r   Úparse_enum_rD   r   rH   r   r   ZGroupDefinitionrI   )r#   rB   r)   ÚenumZ	def_groupr%   r%   r&   r   c   s"   

ÿýzParser.parse_def_group_c                 C   s  |   d¡sJ ‚| j}d }| jdkr|  d¡ |  ¡ }|  d¡ |  ¡ }| j |¡d ur2td| |ƒ‚| j 	¡  g }| jdkrp|  
¡  |  ¡ }|  d¡ | j |j¡d ur^td|j|f |ƒ‚| j |j|¡ | |¡ | jdks>|  d¡ | j ¡  tj||||d}| j ||¡ |S )	Nr   ÚNAMEÚTAGz=Script "%s" already defined, script tags are case insensitiveZ
END_SCRIPTÚEND_LANGSYSzPLanguage "%s" already defined in script "%s", language tags are case insensitiverA   )r7   r:   r   rD   rC   r   rH   r   r   Úenter_scoper"   Úparse_langsys_ÚtagrI   r6   Ú
exit_scoper   ZScriptDefinition)r#   rB   r)   rU   ZlangsÚlangZ
def_scriptr%   r%   r&   r   u   sH   


ÿý


ÿý

õ

zParser.parse_def_script_c                 C   s˜   |   d¡sJ ‚| j}d }| jdkr|  d¡ |  ¡ }|  d¡ |  ¡ }g }| jdkrA|  ¡  |  ¡ }|  d¡ | |¡ | jdks*tj	||||d}|S )NZDEF_LANGSYSrP   rQ   rR   ÚEND_FEATURErA   )
r7   r:   r   rD   rC   r"   Úparse_feature_r6   r   ZLangSysDefinition)r#   rB   r)   rU   ÚfeaturesÚfeatureZdef_langsysr%   r%   r&   rT   ˜   s"   






üzParser.parse_langsys_c                 C   s‚   |   d¡sJ ‚| j}|  d¡ |  ¡ }|  d¡ |  ¡ }g }| jdkr6|  d¡ |  ¡ }| |¡ | jdks#tj||||d}|S )NZDEF_FEATURErP   rQ   rX   ZLOOKUPrA   )r7   r:   rD   rC   r   r6   r   ZFeatureDefinition)r#   rB   r)   rU   ÚlookupsÚlookupr[   r%   r%   r&   rY   ª   s   





üzParser.parse_feature_c                 C   s&  |   d¡sJ ‚| j}|  ¡ }|d  ¡ std| |ƒ‚| j |¡d ur*td| |ƒ‚d}| jdkr6|  ¡  n| jdkrA|  ¡  d}d}d }| jd	kr…|  ¡  | jd
kr\|  ¡  |  ¡ }n4| jdkrf|  ¡  n*| jdkrr|  ¡  d}n| j	t
jkr}|  ¡ }ntd| j	 |ƒ‚| jdkr|  ¡  d}d }| jdkr¦|  d¡ |  ¡ }|dv s¦J ‚d }| jdkr´|  d¡ d}d }| jdkrÈ|  d¡ |  ¡  dd¡}g }	| jdv rØ|  ¡ }	| jdv sÏ|  ¡ }
d }d }|
dkrê|  |¡}n|
dkró|  ¡ }ntd|
 |ƒ‚tj||||||||	|||d}| j ||¡ |S )Nr   r   z)Lookup name "%s" must start with a letterz>Lookup "%s" already defined, lookup names are case insensitiveTZPROCESS_BASEZ	SKIP_BASEFZPROCESS_MARKSZMARK_GLYPH_SETÚALLÚNONEz3Expected ALL, NONE, MARK_GLYPH_SET or an ID. Got %sZ
SKIP_MARKSZ	DIRECTION)ZLTRZRTLZREVERSALZCOMMENTSz\nÚ
©ZEXCEPT_CONTEXTZ
IN_CONTEXTÚAS_SUBSTITUTIONÚAS_POSITIONz/Expected AS_SUBSTITUTION or AS_POSITION. Got %srA   )r7   r:   rC   Úisalphar   r   rH   r   r"   r   r   ÚSTRINGrD   rG   ÚreplaceÚparse_context_Úparse_substitution_Úparse_position_r   ZLookupDefinitionrI   )r#   rB   r)   Zprocess_baseZprocess_marksZmark_glyph_setÚ	directionÚreversalÚcommentsÚcontextZas_pos_or_subÚsubÚposZ
def_lookupr%   r%   r&   r   º   s¬   ÿÿý









ÿý








ÿ
þõzParser.parse_def_lookup_c           	      C   s¸   | j }g }| jdv rZd }d }|  ¡ }| jdkrPg }g }| jdv r<|  ¡ }|  ¡ }|dkr2| |¡ n| |¡ | jdv s |  d¡ tj||||d}| |¡ n|  d¡ | jdv s
|S )Nra   ZEND_CONTEXT)ÚLEFTÚRIGHTrp   rA   )r:   r   rG   Úparse_coverage_r6   rD   r   ZContextDefinition)	r#   rB   ZcontextsZsideÚcoverageZex_or_inÚleftÚrightrm   r%   r%   r&   rg     s0   




ú
ÿ

ëzParser.parse_context_c           
      C   sŒ  |   d¡sJ ‚| j}g }g }| jdkrtd|ƒ‚| jdkr?|  d¡ | |  ¡ ¡ |  d¡ | |  ¡ ¡ |  d¡ | jdks|  d¡ tdd„ |D ƒƒ}td	d„ |D ƒƒ}|d
krc|d
krctd|ƒ‚tt	t
|ƒt
|ƒƒƒ}|d
kr¤|d
kr¤dd„ |D ƒ}tt|ƒƒt|ƒkrtj||d}	|	S |r›tj||d}	|	S tj||d}	|	S |d
krµ|d
krµtj||d}	|	S |d
krÄ|d
krÄtj||d}	|	S )Nrb   ZSUBzExpected SUBZWITHZEND_SUBZEND_SUBSTITUTIONc                 S   ó   g | ]}t |ƒ‘qS r%   ©Úlen©Ú.0Úcovr%   r%   r&   Ú
<listcomp>:  ó    z.Parser.parse_substitution_.<locals>.<listcomp>c                 S   rv   r%   rw   ry   r%   r%   r&   r|   ;  r}   é   zInvalid substitution typec                 S   s   g | ]}|D ]}|  ¡ ‘qqS r%   )ZglyphSet)rz   r{   Úxr%   r%   r&   r|   E  s    rA   )r7   r:   r   r   rD   r6   rr   ÚmaxÚdictÚzipÚtuplerx   Úsetr   ZSubstitutionAlternateDefinitionZ+SubstitutionReverseChainingSingleDefinitionZSubstitutionSingleDefinitionZSubstitutionMultipleDefinitionZSubstitutionLigatureDefinition)
r#   rk   rB   ÚsrcÚdestZmax_srcZmax_destÚmappingZglyphsrn   r%   r%   r&   rh   ,  sJ   






û

ôÿ	ûüþzParser.parse_substitution_c                 C   s‚   |   d¡sJ ‚| j}|  ¡ }|dvrtd|ƒ‚|dkr |  ¡ }n|dkr)|  ¡ }n|dkr2|  ¡ }n|dkr:|  ¡ }|  d¡ |S )	Nrc   )ÚATTACHÚATTACH_CURSIVEÚADJUST_PAIRÚADJUST_SINGLEz;Expected ATTACH, ATTACH_CURSIVE, ADJUST_PAIR, ADJUST_SINGLErˆ   r‰   rŠ   r‹   ZEND_POSITION)	r7   r:   rG   r   Úparse_attach_Úparse_attach_cursive_Úparse_adjust_pair_Úparse_adjust_single_rD   )r#   rB   Zpos_typeÚpositionr%   r%   r&   ri   W  s"   ÿ



zParser.parse_position_c                 C   sŽ   |   d¡sJ ‚| j}|  ¡ }g }|  d¡ | jdkr8|  ¡ }|  d¡ |  d¡ |  ¡ }| ||f¡ | jdks|  d¡ tj|||d}|S )Nrˆ   ÚTOÚ
END_ATTACHÚATZANCHORrA   )	r7   r:   rr   rD   r   rC   r6   r   ZPositionAttachDefinition)r#   rB   rs   Zcoverage_tor{   Zanchor_namer   r%   r%   r&   rŒ   j  s"   




û
ÿzParser.parse_attach_c                 C   s’   |   d¡sJ ‚| j}g }g }| jdkr$|  d¡ | |  ¡ ¡ | jdks| jdkr:|  d¡ | |  ¡ ¡ | jdks)|  d¡ tj|||d}|S )Nr‰   ZENTERZEXITr’   rA   )r7   r:   r   rD   r6   rr   r   ZPositionAttachCursiveDefinition)r#   rB   Zcoverages_exitZcoverages_enterr   r%   r%   r&   r   |  s"   


þ


þ
ÿzParser.parse_attach_cursive_c                 C   sê   |   d¡sJ ‚| j}g }g }i }| jdkr'|  ¡  |  ¡ }| |¡ | jdks| jdkr>|  ¡  |  ¡ }| |¡ | jdks,| jdkre|  ¡ }|  ¡ }|  d¡ |  ¡ }	|  ¡ }
|	|
f|||f< | jdksC|  d¡ t	j
||||d}|S )NrŠ   ZFIRSTZSECONDÚ
END_ADJUSTÚBYrA   )r7   r:   r   r"   rr   r6   rE   rD   Ú
parse_pos_r   ZPositionAdjustPairDefinition)r#   rB   Zcoverages_1Zcoverages_2Zadjust_pairZ
coverage_1Z
coverage_2Zid_1Zid_2Zpos_1Zpos_2r   r%   r%   r&   rŽ     s8   


ý


ý


ú
ÿzParser.parse_adjust_pair_c                 C   sp   |   d¡sJ ‚| j}g }| jdkr*|  ¡ }|  d¡ |  ¡ }| ||f¡ | jdks|  d¡ tj||d}|S )Nr‹   r”   r•   rA   )	r7   r:   r   rr   rD   r–   r6   r   ZPositionAdjustSingleDefinition)r#   rB   Zadjust_singleZ	coveragesro   r   r%   r%   r&   r   ¨  s   


ü
zParser.parse_adjust_single_c           	   	   C   s  |   d¡sJ ‚| j}|  ¡ }|  d¡ |  ¡ }|  d¡ |  ¡ }|  d¡ |  ¡ }|| jv rF| j|  |¡}|d urF|j|krFt	d| |ƒ‚| j
dkrRd}|  ¡  nd}|  d	¡ |  ¡ }|  d
¡ tj|||||||d}|| jvrytƒ | j|< | j|  ||¡ |S )Nr   ÚONÚGLYPHr@   z>Anchor "%s" already defined, anchor names are case insensitiveÚLOCKEDTFr“   Z
END_ANCHORrA   )r7   r:   rC   rD   rE   rG   r   rH   Ú	componentr   r   r"   r–   r   ZAnchorDefinitionr   rI   )	r#   rB   r)   rJ   Z
glyph_namerš   ÚanchorÚlockedro   r%   r%   r&   r	   µ  s@   



ÿý



ÿ
zParser.parse_def_anchor_c                 C   s8   |   ¡  |  d¡sJ ‚|  ¡ }|  d¡ |  ¡ }||fS )NÚ	ADJUST_BYr“   )r"   r7   rE   rD   )r#   Ú
adjustmentÚsizer%   r%   r&   Úparse_adjust_by_Ø  s   
zParser.parse_adjust_by_c           
      C   s  |   ¡  | j}|  d¡sJ |ƒ‚d }d }d }i }i }i }| jdkr=|   ¡  |  ¡ }| jdkr=|  ¡ \}}	|||	< | jdks.| jdkr^|   ¡  |  ¡ }| jdkr^|  ¡ \}}	|||	< | jdksO| jdkr|   ¡  |  ¡ }| jdkr|  ¡ \}}	|||	< | jdksp|  d¡ t ||||||¡S )NZPOSZADVr   ZDXZDYZEND_POS)	r"   r:   r7   r   rE   r    rD   r   ÚPos)
r#   rB   ZadvZdxZdyZadv_adjust_byZdx_adjust_byZdy_adjust_byrž   rŸ   r%   r%   r&   r–   à  s@   


þ


þ


þ
zParser.parse_pos_c              
   C   s^   | j }z|  ¡  d¡}dd„ |D ƒ}W n ty& } ztt|ƒ|ƒ‚d }~ww |g kr-|S d S )Nú,c                 S   s&   g | ]}|d krt |dd… dƒ‘qS )Ú é   Né   )Úint)rz   Úunir%   r%   r&   r|     s   & z0Parser.parse_unicode_values_.<locals>.<listcomp>)r:   rC   ÚsplitÚ
ValueErrorr   Ústr)r#   rB   Zunicode_valuesÚerrr%   r%   r&   rF      s   €ÿzParser.parse_unicode_values_c                 C   s0   |   d¡ | j}tj|  ¡ |d}|   d¡ |S )NrM   rA   ZEND_ENUM)rD   r:   r   ÚEnumrr   )r#   rB   rO   r%   r%   r&   rN   	  s
   

zParser.parse_enum_c                 C   sð   g }| j }| jdv rt| jdkr|  ¡ }| |¡ nV| jdkr2|  d¡ |  ¡ }| tj||d¡ n=| jdkrL|  d¡ |  ¡ }| tj|| |d¡ n#| jdkro|  d¡ |  ¡ }|  d¡ |  ¡ }| tj	||| |d¡ | jdv s
t
|ƒS )N)r˜   ÚGROUPÚRANGErM   rM   r˜   rA   r­   r®   r‘   )r:   r   rN   r6   rD   rC   r   Z	GlyphNameZ	GroupNameÚRangerƒ   )r#   rs   rB   rO   r)   ÚstartÚendr%   r%   r&   rr     s,   









ïzParser.parse_coverage_c                 C   s   | j  |¡S ©N)r   rH   )r#   Ú
group_namer%   r%   r&   Úresolve_group'  ó   zParser.resolve_groupc                 C   s   | j  ||¡S r²   )r   Úrange)r#   r°   r±   r%   r%   r&   Úglyph_range*  ó   zParser.glyph_rangec                 C   s(   | j }| j}|  ¡ }tj|||d}|S ©NrA   ©r:   r3   rE   r   ÚSettingDefinition)r#   rB   Z	ppem_nameÚvalueÚsettingr%   r%   r&   r
   -  s
   zParser.parse_ppem_c                 C   s$   | j }| j}d}tj|||d}|S )NTrA   )r:   r3   r   r»   ©r#   rB   r)   r¼   r½   r%   r%   r&   r   4  s
   zParser.parse_noarg_option_c                 C   s6   | j }| j}|  ¡ |  ¡ |  ¡ f}tj|||d}|S r¹   rº   r¾   r%   r%   r&   r   ;  s
   zParser.parse_cmap_formatc                 C   s   | j tju o
| j|kS r²   )Úcur_token_type_r   rP   r3   )r#   Úkr%   r%   r&   r7   B  s   zParser.is_cur_keyword_c                 C   ó&   |   ¡  | jtjurtd| jƒ‚| jS )NzExpected a string)r"   r¿   r   re   r   r:   r3   ©r#   r%   r%   r&   rC   E  ó   zParser.expect_string_c                 C   s4   |   ¡  | jtju r| j|kr| jS td| | jƒ‚)NzExpected "%s"©r"   r¿   r   rP   r3   r   r:   )r#   Úkeywordr%   r%   r&   rD   K  s   zParser.expect_keyword_c                 C   s&   |   ¡  | jtju r| jS td| jƒ‚)NzExpected a namerÄ   rÂ   r%   r%   r&   rG   Q  s   zParser.expect_name_c                 C   rÁ   )NzExpected a number)r"   r¿   r   ÚNUMBERr   r:   r3   rÂ   r%   r%   r&   rE   W  rÃ   zParser.expect_number_c                 C   sh   | j | j| j| _| _| _z|  d¡rt‚| j 	¡ \| _ | _| _W d S  ty3   d\| _ | _Y d S w )Nr1   r   )
r   r   r    r¿   r3   r:   r7   ÚStopIterationr-   ÚnextrÂ   r%   r%   r&   r"   ]  s   ý
ü
ÿzParser.advance_lexer_N)$Ú__name__Ú
__module__Ú__qualname__r'   r!   r<   r   r   r   rT   rY   r   rg   rh   ri   rŒ   r   rŽ   r   r	   r    r–   rF   rN   rr   r´   r·   r
   r   r   r7   rC   rD   rG   rE   r"   r%   r%   r%   r&   r      sD    
%#W+# 	r   c                   @   s6   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zdd
d„ZdS )r   c                 C   ó   i g| _ d S r²   ©Úscopes_rÂ   r%   r%   r&   r'   p  rµ   zSymbolTable.__init__c                 C   ó   | j  i ¡ d S r²   ©rÎ   r6   rÂ   r%   r%   r&   rS   s  ó   zSymbolTable.enter_scopec                 C   s   | j  ¡  d S r²   )rÎ   ÚpoprÂ   r%   r%   r&   rV   v  r¸   zSymbolTable.exit_scopec                 C   s   || j d |< d S )NéÿÿÿÿrÍ   )r#   r)   Úitemr%   r%   r&   rI   y  s   zSymbolTable.defineTc                 C   sT   t | jƒD ]}| |¡}|r|  S q|r(|D ]}| ¡ | ¡ kr'||   S qd S r²   )ÚreversedrÎ   ÚgetÚlower)r#   r)   Úcase_insensitiveÚscoperÔ   Úkeyr%   r%   r&   rH   |  s   
ÿÿzSymbolTable.resolveN)T)rÉ   rÊ   rË   r'   rS   rV   rI   rH   r%   r%   r%   r&   r   o  s    r   c                   @   s.   e Zd Zdd„ Zdd„ Zddd„Zdd	„ Zd
S )r   c                 C   rÌ   r²   rÍ   rÂ   r%   r%   r&   r'   ‰  rµ   zOrderedSymbolTable.__init__c                 C   rÏ   r²   rÐ   rÂ   r%   r%   r&   rS   Œ  rÑ   zOrderedSymbolTable.enter_scopeFc                 C   s   t j| ||d d S )N)rØ   )r   rH   )r#   r)   rØ   r%   r%   r&   rH     s   zOrderedSymbolTable.resolvec                 C   sd   t | jƒD ]*}||v r/||v r/t| ¡ ƒ |¡}t| ¡ ƒ |¡}t| ¡ ƒ||d …   S qd S )Nr~   )rÕ   rÎ   Úlistr5   Úindex)r#   r°   r±   rÙ   Z	start_idxZend_idxr%   r%   r&   r¶   ’  s   €zOrderedSymbolTable.rangeN)F)rÉ   rÊ   rË   r'   rS   rH   r¶   r%   r%   r%   r&   r   ˆ  s
    
r   )ZfontTools.voltLib.astZvoltLibr   ZfontTools.voltLib.lexerr   ZfontTools.voltLib.errorr   Úior   r4   Úobjectr   r   r   r%   r%   r%   r&   Ú<module>   s0    ô    ]