o
    ¼ÇhTa  ã                   @   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_ANCHORÚ	GRID_PPEMÚPRESENTATION_PPEMÚPPOSITIONING_PPEMÚCOMPILER_USEEXTENSIONLOOKUPSÚCOMPILER_USEPAIRPOSFORMAT2ÚCMAP_FORMATÚ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)ÚastÚ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-   úl/var/www/html/construction_image-detection-poc/venv/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Úgetattrr0   r   r   Úlexer_)r+   Ú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Úkeysr4   ÚappendÚis_cur_keyword_r   ÚjoinÚsortedÚcur_token_location_)r+   r;   Ú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 UNICODEÚUNICODEVALUESÚTYPE)ÚBASEÚLIGATUREÚMARKÚ	COMPONENTÚ
COMPONENTSÚ	END_GLYPHz#Glyph "%s" (gid %i) already defined©Úlocation)r@   rC   Úexpect_string_Úexpect_keyword_Úexpect_number_r   r'   Úparse_unicode_values_Úexpect_name_r   Úresolver   ÚGlyphDefinitionÚdefine)r+   rQ   r1   ÚgidÚgunicodeÚgtypeÚ
componentsÚ	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   ÚENUMÚ	END_GROUPzBGlyph group "%s" already defined, group names are case insensitiverP   )r@   rC   rR   r'   Úparse_enum_rS   r!   rW   r   r   ÚGroupDefinitionrY   )r+   rQ   r1   ÚenumÚ	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 insensitiveÚ
END_SCRIPTÚEND_LANGSYSzPLanguage "%s" already defined in script "%s", language tags are case insensitiverP   )r@   rC   r'   rS   rR   r#   rW   r   r$   Úenter_scoper*   Úparse_langsys_ÚtagrY   r?   Ú
exit_scoper   ÚScriptDefinition)r+   rQ   r1   rk   ÚlangsÚlangÚ
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 )NÚDEF_LANGSYSre   rf   rh   ÚEND_FEATURErP   )
r@   rC   r'   rS   rR   r*   Úparse_feature_r?   r   ÚLangSysDefinition)r+   rQ   r1   rk   ÚfeaturesÚfeatureÚdef_langsysr-   r-   r.   rj   ˜   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 )NÚDEF_FEATUREre   rf   rr   ÚLOOKUPrP   )r@   rC   rS   rR   r'   r?   r   ÚFeatureDefinition)r+   rQ   r1   rk   ÚlookupsÚlookuprv   r-   r-   r.   rs   ª   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 insensitiveTÚPROCESS_BASEÚ	SKIP_BASEFÚPROCESS_MARKSÚMARK_GLYPH_SETÚALLÚNONEz3Expected ALL, NONE, MARK_GLYPH_SET or an ID. Got %sÚ
SKIP_MARKSÚ	DIRECTION)ÚLTRÚRTLÚREVERSALÚCOMMENTSz\nÚ
©ÚEXCEPT_CONTEXTÚ
IN_CONTEXTÚAS_SUBSTITUTIONÚAS_POSITIONz/Expected AS_SUBSTITUTION or AS_POSITION. Got %srP   )r@   rC   rR   Úisalphar   r%   rW   r'   r*   r&   r   ÚSTRINGrS   rV   ÚreplaceÚparse_context_Úparse_substitution_Úparse_position_r   ÚLookupDefinitionrY   )r+   rQ   r1   Úprocess_baseÚprocess_marksÚmark_glyph_setÚ	directionÚreversalÚcommentsÚcontextÚas_pos_or_subÚsubÚposÚ
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 )NrŠ   ÚEND_CONTEXT)ÚLEFTÚRIGHTr¢   rP   )rC   r'   rV   Úparse_coverage_r?   rS   r   ÚContextDefinition)	r+   rQ   ÚcontextsÚsideÚcoverageÚex_or_inÚleftÚrightrœ   r-   r-   r.   r’     s0   




ú
ÿ

ëzParser.parse_context_c           	      C   sl  |   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r^|d
ksh|rm|d
ksh|d
krmtd|ƒ‚tt	t
|ƒt
|ƒƒƒ}|d
kr”|d
kr”|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 )Nr   ÚSUBzExpected SUBÚWITHÚEND_SUBÚEND_SUBSTITUTIONc                 S   ó   g | ]}t |ƒ‘qS r-   ©Úlen©Ú.0Úcovr-   r-   r.   Ú
<listcomp>:  ó    z.Parser.parse_substitution_.<locals>.<listcomp>c                 S   r°   r-   r±   r³   r-   r-   r.   r¶   ;  r·   é   zInvalid substitution typerP   )r@   rC   r'   r   rS   r?   r¤   ÚmaxÚdictÚzipÚtupler   Ú+SubstitutionReverseChainingSingleDefinitionÚSubstitutionSingleDefinitionÚSubstitutionMultipleDefinitionÚSubstitutionLigatureDefinition)	r+   rš   rQ   ÚsrcÚdestÚmax_srcÚmax_destÚmappingrž   r-   r-   r.   r“   ,  sH   






û
ÿ
ÿ	ûüþ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 )	NrŽ   )ÚATTACHÚATTACH_CURSIVEÚADJUST_PAIRÚADJUST_SINGLEz;Expected ATTACH, ATTACH_CURSIVE, ADJUST_PAIR, ADJUST_SINGLErÆ   rÇ   rÈ   rÉ   ÚEND_POSITION)	r@   rC   rV   r   Úparse_attach_Úparse_attach_cursive_Úparse_adjust_pair_Úparse_adjust_single_rS   )r+   rQ   Úpos_typeÚpositionr-   r-   r.   r”   O  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ÚATÚANCHORrP   )	r@   rC   r¤   rS   r'   rR   r?   r   ÚPositionAttachDefinition)r+   rQ   r¨   Úcoverage_torµ   Úanchor_namerÐ   r-   r-   r.   rË   b  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Ç   ÚENTERÚEXITrÒ   rP   )r@   rC   r'   rS   r?   r¤   r   ÚPositionAttachCursiveDefinition)r+   rQ   Úcoverages_exitÚcoverages_enterrÐ   r-   r-   r.   rÌ   t  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È   ÚFIRSTÚSECONDÚ
END_ADJUSTÚBYrP   )r@   rC   r'   r*   r¤   r?   rT   rS   Ú
parse_pos_r   ÚPositionAdjustPairDefinition)r+   rQ   Úcoverages_1Úcoverages_2Úadjust_pairÚ
coverage_1Ú
coverage_2Úid_1Úid_2Úpos_1Ú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à   rP   )	r@   rC   r'   r¤   rS   rá   r?   r   ÚPositionAdjustSingleDefinition)r+   rQ   Úadjust_singleÚ	coveragesrŸ   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ÚGLYPHrM   z>Anchor "%s" already defined, anchor names are case insensitiveÚLOCKEDTFrÓ   Ú
END_ANCHORrP   )r@   rC   rR   rS   rT   rV   r"   rW   Ú	componentr   r'   r*   rá   r   ÚAnchorDefinitionr    rY   )	r+   rQ   r1   rZ   Ú
glyph_nameró   ÚanchorÚlockedrŸ   r-   r-   r.   r	   ­  s@   



ÿý



ÿ
zParser.parse_def_anchor_c                 C   s8   |   ¡  |  d¡sJ ‚|  ¡ }|  d¡ |  ¡ }||fS )NÚ	ADJUST_BYrÓ   )r*   r@   rT   rS   )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 )NÚPOSÚADVrø   ÚDXÚDYÚEND_POS)	r*   rC   r@   r'   rT   rû   rS   r   ÚPos)
r+   rQ   ÚadvÚdxÚdyÚadv_adjust_byÚdx_adjust_byÚ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)r´   Úunir-   r-   r.   r¶   ü  s   & z0Parser.parse_unicode_values_.<locals>.<listcomp>)rC   rR   ÚsplitÚ
ValueErrorr   Ústr)r+   rQ   Úunicode_valuesÚerrr-   r-   r.   rU   ø  s   €ÿzParser.parse_unicode_values_c                 C   s0   |   d¡ | j}tj|  ¡ |d}|   d¡ |S )Nr_   rP   ÚEND_ENUM)rS   rC   r   ÚEnumr¤   )r+   rQ   rc   r-   r-   r.   ra     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ÚRANGEr_   r_   rð   rP   r  r  rÑ   )rC   r'   ra   r?   rS   rR   r   Ú	GlyphNameÚ	GroupNameÚRanger¼   )r+   r¨   rQ   rc   r1   ÚstartÚendr-   r-   r.   r¤     s,   









ïzParser.parse_coverage_c                 C   s   | j  |¡S ©N)r!   rW   )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 ©NrP   ©rC   r<   rT   r   ÚSettingDefinition)r+   rQ   Ú	ppem_nameÚvalueÚsettingr-   r-   r.   r
   %  s
   zParser.parse_ppem_c                 C   s$   | j }| j}d}tj|||d}|S )NTrP   )rC   r<   r   r%  ©r+   rQ   r1   r'  r(  r-   r-   r.   r   ,  s
   zParser.parse_noarg_option_c                 C   s6   | j }| j}|  ¡ |  ¡ |  ¡ f}tj|||d}|S r#  r$  r)  r-   r-   r.   r   3  s
   zParser.parse_cmap_formatc                 C   s   | j tju o
| j|kS r  )Úcur_token_type_r   re   r<   )r+   Úkr-   r-   r.   r@   :  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   r   r   rC   r<   ©r+   r-   r-   r.   rR   =  ó   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   re   r<   r   rC   )r+   Úkeywordr-   r-   r.   rS   C  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.   rV   I  s   zParser.expect_name_c                 C   r,  )NzExpected a number)r*   r*  r   ÚNUMBERr   rC   r<   r-  r-   r-   r.   rT   O  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 )Nr:   r   )
r&   r'   r(   r*  r<   rC   r@   ÚStopIterationr5   Únextr-  r-   r-   r.   r*   U  s   ý
ü
ÿzParser.advance_lexer_N)$Ú__name__Ú
__module__Ú__qualname__r/   r)   rE   r   r   r   rj   rs   r   r’   r“   r”   rË   rÌ   rÍ   rÎ   r	   rû   rá   rU   ra   r¤   r  r!  r
   r   r   r@   rR   rS   rV   rT   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/   h  r  zSymbolTable.__init__c                 C   ó   | j  i ¡ d S r  ©r9  r?   r-  r-   r-   r.   ri   k  ó   zSymbolTable.enter_scopec                 C   s   | j  ¡  d S r  )r9  Úpopr-  r-   r-   r.   rl   n  r"  zSymbolTable.exit_scopec                 C   s   || j d |< d S )Néÿÿÿÿr8  )r+   r1   Úitemr-   r-   r.   rY   q  s   zSymbolTable.defineTc                 C   sT   t | jƒD ]}| |¡}|r|  S q|r(|D ]}| ¡ | ¡ kr'||   S qd S r  )Úreversedr9  ÚgetÚlower)r+   r1   Úcase_insensitiveÚscoper?  Úkeyr-   r-   r.   rW   t  s   
ÿÿzSymbolTable.resolveN)T)r4  r5  r6  r/   ri   rl   rY   rW   r-   r-   r-   r.   r    g  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   r7  r  r8  r-  r-   r-   r.   r/     r  zOrderedSymbolTable.__init__c                 C   r:  r  r;  r-  r-   r-   r.   ri   „  r<  zOrderedSymbolTable.enter_scopeFc                 C   s   t j| ||d d S )N)rC  )r    rW   )r+   r1   rC  r-   r-   r.   rW   ‡  s   zOrderedSymbolTable.resolvec                 C   sd   t | jƒD ]*}||v r/||v r/t| ¡ ƒ |¡}t| ¡ ƒ |¡}t| ¡ ƒ||d …   S qd S )Nr¸   )r@  r9  Úlistr>   Úindex)r+   r  r  rD  Ú	start_idxÚend_idxr-   r-   r.   r   Š  s   €zOrderedSymbolTable.rangeN)F)r4  r5  r6  r/   ri   rW   r   r-   r-   r-   r.   r   €  s
    
r   )ÚfontTools.voltLib.astÚvoltLibr   ÚfontTools.voltLib.lexerr   ÚfontTools.voltLib.errorr   Úior   r=   Úobjectr   r    r   r-   r-   r-   r.   Ú<module>   s0    ô    U