
    ]Mh4c                         d dl mc 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e
          Z G d de
          Z G 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                       e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z d Z!d  Z"d! Z#d"S )#Parserc                    t          j                    | _        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paths     X/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/fontTools/voltLib/parser.py__init__zParser.__init__   s    LNN	)++"}}#!mm#2>/t/$(!    c                    t          |d          r&t          |dd           }|                                }n>|}t          |d          5 }|                                }d d d            n# 1 swxY w Y   t	          ||          | _        d S )Nreadnamer)hasattrgetattrr4   r   r   lexer_)r.   file_or_pathfilenamedatafs        r0   r,   zParser.make_lexer_$   s    <(( 	 |VT::H$$&&DD#HlC((  Avvxx                             D(++s   	A**A.1A.c           	         | j         j        }| j        |                                  | j        t
                                          v r>t          | t
          | j                           }|                     |                       ne| 	                    d          rnVt          dd                    t          t
                                                              z   | j                  | j        | j         S )NENDz	Expected z, )r    
statementsr)   r-   
cur_token_PARSE_FUNCSkeysr8   appendis_cur_keyword_r   joinsortedcur_token_location_)r.   r@   funcs      r0   parsezParser.parse.   s    Y)
#/!!!+"2"2"4"444t[%ABB!!$$&&))))%%e,, "$))F;3C3C3E3E,F,F"G"GG,   #/ yr2   c                    |                      d          sJ | j        }|                                 }|                     d           |                                 }|dk     rt          d| j                  d }| j        dk    rL|                     d           |                                 g}|d         dk     rt          d| j                  n4| j        dk    r)|                     d           |                                 }d }| j        dk    r/|                     d           |                                 }|d	v sJ d }| j        d
k    r)|                     d
           |                                 }|                     d           | j	        
                    |          t          d||fz  |          t          j        ||||||          }| 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)rE   rH   expect_string_expect_keyword_expect_number_r   r*   parse_unicode_values_expect_name_r"   resolver   GlyphDefinitiondefine)r.   rW   r5   gidgunicodegtype
components	def_glyphs           r0   r   zParser.parse_def_glyph_>   s   ##K00000+""$$T"""!!##77143KLLLy((  +++++--.H{Q"#:D<TUUU 00  1111133Hv%%  (((%%''EEEEEE
|++  ...,,..J[)))<%%15sCX   '#x
X
 
 
	 	D),,,r2   c                    |                      d          sJ | j        }|                                 }d }| j        dk    r|                                 }|                     d           | j                            |          t          d|z  |          t          j
        |||          }| j                            ||           |S )Nr   ENUM	END_GROUPzBGlyph group "%s" already defined, group names are case insensitiverV   )rE   rH   rX   r*   parse_enum_rY   r$   r]   r   r   GroupDefinitionr_   )r.   rW   r5   enum	def_groups        r0   r   zParser.parse_def_group_c   s    ##K00000+""$$v%%##%%D[)))<%%1359:  
 'dXFFF	D),,,r2   c                    |                      d          sJ | j        }d }| j        dk    r)|                     d           |                                 }|                     d           |                                 }| j                            |          t          d|z  |          | j        	                                 g }| j        dk    r| 
                                 |                                 }|                     d           | j                            |j                  t          d|j        d|d	|          | j                            |j        |           |                    |           | j        dk    |                     d           | j                                         t!          j        ||||
          }| j                            ||           |S )Nr   NAMETAGz=Script "%s" already defined, script tags are case insensitive
END_SCRIPTEND_LANGSYSz
Language "z" already defined in script "z%", language tags are case insensitiverV   )rE   rH   r*   rY   rX   r&   r]   r   r'   enter_scoper-   parse_langsys_tagr_   rD   
exit_scoper   ScriptDefinition)r.   rW   r5   rs   langslang
def_scripts          r0   r   zParser.parse_def_script_u   s   ##L11111+v%%  (((&&((DU###!!##=  %%13589  
 	!!!,..!!!&&((D  ///{""48,,8"l<@HHHcccK  
 Ktx...LL ,.. 	\***   )$UXNNN
S*---r2   c                    |                      d          sJ | j        }d }| j        dk    r)|                     d           |                                 }|                     d           |                                 }g }| j        dk    r]|                                  |                                 }|                     d           |                    |           | j        dk    ]t          j	        ||||          }|S )NDEF_LANGSYSrm   rn   rp   END_FEATURErV   )
rE   rH   r*   rY   rX   r-   parse_feature_rD   r   LangSysDefinition)r.   rW   r5   rs   featuresfeaturedef_langsyss          r0   rr   zParser.parse_langsys_   s   ##M22222+v%%  (((&&((DU###!!##-//!!!))++G  ///OOG$$$	 -//
 +D#x(SSSr2   c                    |                      d          sJ | j        }|                     d           |                                 }|                     d           |                                 }g }| j        dk    rI|                     d           |                                 }|                    |           | j        dk    It          j        ||||          }|S )NDEF_FEATURErm   rn   r{   LOOKUPrV   )rE   rH   rY   rX   r*   rD   r   FeatureDefinition)r.   rW   r5   rs   lookupslookupr   s          r0   r|   zParser.parse_feature_   s    ##M22222+V$$$""$$U###!!##-//  ***((**FNN6"""	 -//
 'c7XNNNr2   c                 x   |                      d          sJ | j        }|                                 }|d                                         st	          d|z  |          | j                            |          t	          d|z  |          d}| j        dk    r|                                  n!| j        dk    r|                                  d}d}d }| j        d	k    r|                                  | j        d
k    r)|                                  |                                 }n| j        dk    r|                                  n| j        dk    r|                                  d}nc| j	        t          j        k    r|                                 }n9t	          d| j	        z  |          | 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 |                                 }
d }d }|
dk    r|                     |          }n.|
dk    r|                                 }nt	          d|
z  |          t%          j        ||||||||	|||          }| 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 %srV   )rE   rH   rX   isalphar   r(   r]   r*   r-   r)   r   STRINGrY   r\   replaceparse_context_parse_substitution_parse_position_r   LookupDefinitionr_   )r.   rW   r5   process_baseprocess_marksmark_glyph_set	directionreversalcommentscontextas_pos_or_subsubpos
def_lookups                 r0   r	   zParser.parse_def_lookup_   s   ##L11111+""$$Aw   	;dBH   =  &&246:;  
 ~--!!!!,,!!! L..!!!#333##%%%!%!4!4!6!6!U**##%%%%!V++##%%% %&%,66 $ 3 3 5 5" $ 57  
 --!!!!M	{**  ---))++I....z))  ,,,Hz))  ,,,**,,44UDAAH"BBB))++G "BBB))++---**844CCm++&&((CCDV   )
 
 

 	T:...r2   c                    | j         }g }| j        dv rd }d }|                                 }| j        dk    rg }g }| j        dv rb|                                 }|                                 }|dk    r|                    |           n|                    |           | j        dv b|                     d           t          j        ||||          }|                    |           n|                     d           | j        dv |S )Nr   END_CONTEXT)LEFTRIGHTr   rV   )rH   r*   r\   parse_coverage_rD   rY   r   ContextDefinition)	r.   rW   contextssidecoverageex_or_inleftrightr   s	            r0   r   zParser.parse_context_  s<   +"BBBDH((**H=00&*;;;,,..D#3355Hv~~H----X... &*;;; $$]333/dEH   (((($$]333+ "BBB, r2   c                    |                      d          sJ | j        }g }g }| j        dk    rt          d|          | j        dk    r|                     d           |                    |                                            |                     d           |                    |                                            |                     d           | j        dk    |                     d           t          d |D                       }t          d |D                       }|d	k    r|d	k    rt          d
|          t          t          t          |          t          |                              }|d	k    r|d	k    rd |D             }t          t          |                    t          |          k    rt          j        ||          }	nu|rt          j        ||          }	n\t          j        ||          }	nE|d	k    r|d	k    rt          j        ||          }	n"|d	k    r|d	k    rt          j        ||          }	|	S )Nr   SUBzExpected SUBWITHEND_SUBEND_SUBSTITUTIONc                 ,    g | ]}t          |          S  len.0covs     r0   
<listcomp>z.Parser.parse_substitution_.<locals>.<listcomp>:  s    ///Cs3xx///r2   c                 ,    g | ]}t          |          S r   r   r   s     r0   r   z.Parser.parse_substitution_.<locals>.<listcomp>;  s    111SC111r2      zInvalid substitution typec                 @    g | ]}|D ]}|                                 S r   )glyphSet)r   r   xs      r0   r   z.Parser.parse_substitution_.<locals>.<listcomp>E  s-    ???s3??aajjll????r2   rV   )rE   rH   r*   r   rY   rD   r   maxdictziptupler   setr   SubstitutionAlternateDefinition+SubstitutionReverseChainingSingleDefinitionSubstitutionSingleDefinitionSubstitutionMultipleDefinitionSubstitutionLigatureDefinition)
r.   r   rW   srcdestmax_srcmax_destmappingglyphsr   s
             r0   r   zParser.parse_substitution_,  sk   ##$566666+u$$~x888%''  '''JJt++--...  (((KK,,..///  +++ %'' 	/000//3///0011D11122 Q;;8a<<:HEEEs5::uT{{3344a<<HMM @?c???F3v;;3v;;..9'HUUU W I(  CC :7XVVVCC\\hll4WxPPPCCq[[X]]4WxPPPC
r2   c                    |                      d          sJ | j        }|                                 }|dvrt          d|          |dk    r|                                 }nP|dk    r|                                 }n5|dk    r|                                 }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)	rE   rH   r\   r   parse_attach_parse_attach_cursive_parse_adjust_pair_parse_adjust_single_rY   )r.   rW   pos_typepositions       r0   r   zParser.parse_position_W  s    ##M22222+$$&&WWWMx   x))++HH)))1133HH&&..00HH((0022H^,,,r2   c                    |                      d          sJ | j        }|                                 }g }|                     d           | j        dk    rt|                                 }|                     d           |                     d           |                                 }|                    ||f           | j        dk    t|                     d           t          j        |||          }|S )Nr   TO
END_ATTACHATANCHORrV   )	rE   rH   r   rY   r*   rX   rD   r   PositionAttachDefinition)r.   rW   r   coverage_tor   anchor_namer   s          r0   r   zParser.parse_attach_j  s
   ##H-----+''))T""",..&&((C  &&&  ***--//K[1222 ,.. 	\***/kH
 
 
 r2   c                    |                      d          sJ | j        }g }g }| j        dk    rG|                     d           |                    |                                            | j        dk    G| j        dk    rG|                     d           |                    |                                            | j        dk    G|                     d           t          j        |||          }|S )Nr   ENTEREXITr   rV   )rE   rH   r*   rY   rD   r   r   PositionAttachCursiveDefinition)r.   rW   coverages_exitcoverages_enterr   s        r0   r   zParser.parse_attach_cursive_|  s   ##$455555+'))  (((!!$"6"6"8"8999 ')) ,..  )))""4#7#7#9#9::: ,.. 	\***6Oh
 
 
 r2   c                    |                      d          sJ | j        }g }g }i }| j        dk    rH|                                  |                                 }|                    |           | j        dk    H| j        dk    rH|                                  |                                 }|                    |           | j        dk    H| j        dk    ry|                                 }|                                 }|                     d           |                                 }	|                                 }
|	|
f|||f<   | j        dk    y|                     d           t          j
        ||||          }|S )Nr   FIRSTSECOND
END_ADJUSTBYrV   )rE   rH   r*   r-   r   rD   rZ   rY   
parse_pos_r   PositionAdjustPairDefinition)r.   rW   coverages_1coverages_2adjust_pair
coverage_1
coverage_2id_1id_2pos_1pos_2r   s               r0   r   zParser.parse_adjust_pair_  s   ##M22222+'))!!!--//Jz*** ')) (**!!!--//Jz*** (** ,..&&((D&&((D  &&&OO%%EOO%%E).Kt% ,.. 	\***3kH
 
 
 r2   c                 p   |                      d          sJ | j        }g }| j        dk    r_|                                 }|                     d           |                                 }|                    ||f           | j        dk    _|                     d           t          j        ||          }|S )Nr   r   r   rV   )	rE   rH   r*   r   rY   r   rD   r   PositionAdjustSingleDefinition)r.   rW   adjust_single	coveragesr   r   s         r0   r   zParser.parse_adjust_single_  s    ##O44444+,..,,..I  &&&//##C  )S!1222	 ,..
 	\***5mhWWWr2   c           	      l   |                      d          sJ | j        }|                                 }|                     d           |                                 }|                     d           |                                 }|                     d           |                                 }|| j        v r@| j        |                             |          }||j        |k    rt          d|z  |          | j
        dk    rd}|                                  nd}|                     d	           |                                 }|                     d
           t          j        |||||||          }|| j        vrt                      | j        |<   | j        |                             ||           |S )Nr   ONGLYPHrS   z>Anchor "%s" already defined, anchor names are case insensitiveLOCKEDTFr   
END_ANCHORrV   )rE   rH   rX   rY   rZ   r\   r%   r]   	componentr   r*   r-   r   r   AnchorDefinitionr#   r_   )	r.   rW   r5   r`   
glyph_namer  anchorlockedr   s	            r0   r
   zParser.parse_def_anchor_  s   ##L11111+""$$T"""!!##W%%%&&((
[)))''))	&&]:.66t<<F!f&6)&C&C"8:>?  
 x''F!!!!FT"""oo\***%#z9fcH
 
 
 T]**(3DM*%j!((v666r2   c                     |                                   |                     d          sJ |                                 }|                     d           |                                 }||fS )N	ADJUST_BYr   )r-   rE   rZ   rY   )r.   
adjustmentsizes      r0   parse_adjust_by_zParser.parse_adjust_by_  so    ##K00000((**
T"""""$$4r2   c                 H   |                                   | j        }|                     d          s
J |            d }d }d }i }i }i }| j        dk    rZ|                                   |                                 }| j        dk    r'|                                 \  }}	|||	<   | j        dk    '| j        dk    rZ|                                   |                                 }| j        dk    r'|                                 \  }}	|||	<   | j        dk    '| j        dk    rZ|                                   |                                 }| j        dk    r'|                                 \  }}	|||	<   | j        dk    '|                     d           t          j        ||||||          S )NPOSADVr  DXDYEND_POS)	r-   rH   rE   r*   rZ   r  rY   r   Pos)
r.   rW   advdxdyadv_adjust_bydx_adjust_bydy_adjust_byr  r  s
             r0   r   zParser.parse_pos_  s   +##E**44H444u$$!!!%%''C"k11#'#8#8#:#: 
D&0d# "k11 t##!!!$$&&B"k11#'#8#8#:#: 
D%/T" "k11 t##!!!$$&&B"k11#'#8#8#:#: 
D%/T" "k11 	Y'''wsBM<NNNr2   c                     | j         }	 |                                                     d          }d |D             }n/# t          $ r"}t	          t          |          |          d }~ww xY w|g k    r|nd S )N,c                 J    g | ] }|d k    t          |dd         d          !S )    N   )int)r   unis     r0   r   z0Parser.parse_unicode_values_.<locals>.<listcomp>  s0    VVV3CSUIIc#abb'2..IIIr2   )rH   rX   split
ValueErrorr   str)r.   rW   unicode_valueserrs       r0   r[   zParser.parse_unicode_values_   s    +	3!002288==NVV.VVVNN 	3 	3 	3s3xx222	3!/2!5!5~~4?s   3= 
A)A$$A)c                     |                      d           | j        }t          j        |                                 |          }|                      d           |S )Nrf   rV   END_ENUM)rY   rH   r   Enumr   )r.   rW   rj   s      r0   rh   zParser.parse_enum_	  sW    V$$$+x,,..BBBZ(((r2   c                 P   g }| j         }| j        dv r| j        dk    r+|                                 }|                    |           nE| j        dk    rS|                     d           |                                 }|                    t          j        ||                     n| j        dk    rT|                     d           |                                 }|                    t          j        || |                     n| j        dk    r}|                     d           |                                 }|                     d           |                                 }|                    t          j	        ||| |                     | j        dv t          |          S )N)r
  GROUPRANGErf   rf   r
  rV   r5  r6  r   )rH   r*   rh   rD   rY   rX   r   	GlyphName	GroupNameRanger   )r.   r   rW   rj   r5   startends          r0   r   zParser.parse_coverage_  s   +"EEE6))''))%%%%!W,,$$W---**,,dX F F FGGGG!W,,$$W---**,,dD8 L L LMMMM!W,,$$W---++--$$T***))++	%dX N N NOOO# "EEE$ Xr2   c                 6    | j                             |          S N)r$   r]   )r.   
group_names     r0   resolve_groupzParser.resolve_group'  s    |##J///r2   c                 8    | j                             ||          S r=  )r"   range)r.   r:  r;  s      r0   glyph_rangezParser.glyph_range*  s    |!!%---r2   c                 x    | j         }| j        }|                                 }t          j        |||          }|S NrV   rH   rA   rZ   r   SettingDefinition)r.   rW   	ppem_namevaluesettings        r0   r   zParser.parse_ppem_-  s>    +O	##%%'	58LLLr2   c                 T    | j         }| j        }d}t          j        |||          }|S )NTrV   )rH   rA   r   rF  r.   rW   r5   rH  rI  s        r0   r   zParser.parse_noarg_option_4  s2    +'ehGGGr2   c                     | j         }| j        }|                                 |                                 |                                 f}t          j        |||          }|S rD  rE  rK  s        r0   r   zParser.parse_cmap_format;  s]    +$$&&(;(;(=(=t?R?R?T?TU'ehGGGr2   c                 >    | j         t          j        u o
| j        |k    S r=  )cur_token_type_r   rm   rA   )r.   ks     r0   rE   zParser.is_cur_keyword_B  s    $
2NA9MNr2   c                     |                                   | j        t          j        urt	          d| j                  | j        S )NzExpected a string)r-   rN  r   r   r   rH   rA   r.   s    r0   rX   zParser.expect_string_E  @    u|332D4LMMMr2   c                     |                                   | j        t          j        u r| j        |k    r| j        S t          d|z  | j                  )NzExpected "%s"r-   rN  r   rm   rA   r   rH   )r.   keywords     r0   rY   zParser.expect_keyword_K  sP    5:--$/W2L2L?"?W4d6NOOOr2   c                     |                                   | j        t          j        u r| j        S t          d| j                  )NzExpected a namerT  rQ  s    r0   r\   zParser.expect_name_Q  s@    5:--?",d.FGGGr2   c                     |                                   | j        t          j        urt	          d| j                  | j        S )NzExpected a number)r-   rN  r   NUMBERr   rH   rA   rQ  s    r0   rZ   zParser.expect_number_W  rR  r2   c                 "   | j         | j        | j        c| _        | _        | _        	 |                     d          rt          | j        	                                \  | _         | _        | _        d S # t          $ r d\  | _         | _        Y d S w xY w)Nr?   r   )
r)   r*   r+   rN  rA   rH   rE   StopIterationr9   nextrQ  s    r0   r-   zParser.advance_lexer_]  s    !% 	Hdot/G
		C##E** $##
   ""	% ))) 	C 	C 	C6B3D!4#3#3#3#3	Cs   AA1 1BBN)$__name__
__module____qualname__r1   r,   rJ   r   r   r   rr   r|   r	   r   r   r   r   r   r   r   r
   r  r   r[   rh   r   r?  rB  r   r   r   rE   rX   rY   r\   rZ   r-   r   r2   r0   r   r      s          , , ,   # # #J  $! ! !F  $   U U Un  6) ) )V  &  $  "  6  ! ! !F     O O O@@ @ @    .0 0 0. . .      O O O  P P PH H H  C C C C Cr2   r   c                   .    e Zd Zd Zd Zd Zd ZddZdS )	r#   c                     i g| _         d S r=  scopes_rQ  s    r0   r1   zSymbolTable.__init__p      tr2   c                 :    | j                             i            d S r=  rb  rD   rQ  s    r0   rq   zSymbolTable.enter_scopes      Br2   c                 8    | j                                          d S r=  )rb  poprQ  s    r0   rt   zSymbolTable.exit_scopev  s    r2   c                 &    || j         d         |<   d S )Nra  )r.   r5   items      r0   r_   zSymbolTable.definey  s    !%Rr2   Tc                     t          | j                  D ]}|                    |          }|r|c S |r9|D ]6}|                                |                                k    r
||         c S 7d S r=  )reversedrb  getlower)r.   r5   case_insensitivescoperk  keys         r0   r]   zSymbolTable.resolve|  s    dl++ 	 	E99T??D  	& & &99;;$**,,.. :%%% /tr2   N)T)r\  r]  r^  r1   rq   rt   r_   r]   r   r2   r0   r#   r#   o  sd                 & & &	 	 	 	 	 	r2   r#   c                   (    e Zd Zd Zd ZddZd ZdS )r!   c                     i g| _         d S r=  ra  rQ  s    r0   r1   zOrderedSymbolTable.__init__  rc  r2   c                 :    | j                             i            d S r=  re  rQ  s    r0   rq   zOrderedSymbolTable.enter_scope  rf  r2   Fc                 @    t                               | ||           d S )N)rp  )r#   r]   )r.   r5   rp  s      r0   r]   zOrderedSymbolTable.resolve  s$    D$9IJJJJJr2   c                 p   t          | j                  D ]}||v r||v rt          |                                                              |          }t          |                                                              |          }t          |                                          ||dz            c S d S )Nr   )rm  rb  listrC   index)r.   r:  r;  rq  	start_idxend_idxs         r0   rA  zOrderedSymbolTable.range  s    dl++ 	C 	CE~~#,, ..44U;;	uzz||,,22377EJJLL)))gk*ABBBBtr2   N)F)r\  r]  r^  r1   rq   r]   rA  r   r2   r0   r!   r!     sY               K K K K    r2   r!   )fontTools.voltLib.astvoltLibr   fontTools.voltLib.lexerr   fontTools.voltLib.errorr   ior   rB   objectr   r#   r!   r   r2   r0   <module>r     s!   # # # # # # # # # ) ) ) ) ) ) 0 0 0 0 0 0       $#%%%&&$9"7&.  V	C V	C V	C V	C V	CV V	C V	C V	Cr    &   2         r2   