§
    ¢”j†† ã                   óÔ   — d dl mZ d dlmZmZmZ d dlmZ d dlm	Z	 d dl
mZmZmZ d dlmc mZ d dlZd dlZd dlZ ej        e¦  «        Z G d„ de¦  «        Z G d	„ d
e¦  «        ZdS )é    )ÚFeatureLibError)ÚLexerÚIncludingLexerÚNonIncludingLexer)ÚVariableScalar)ÚgetEncoding)ÚbytechrÚtobytesÚtostrNc                   óþ  — e Zd ZdZi ZeZd„  edd¦  «        D ¦   «         Zd„  edd¦  «        D ¦   «         Z	 dmd
„Z	d„ Z
d„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zdnd„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-d0„ Z.d1„ Z/d2„ Z0d3„ Z1d4„ Z2d5„ Z3e4d6„ ¦   «         Z5e4d7„ ¦   «         Z6d8„ Z7d9„ Z8d:„ Z9d;„ Z:d<„ Z;d=„ Z<d>„ Z=d?„ Z>d@„ Z?dA„ Z@dB„ ZAdC„ ZBdD„ ZCdE„ ZDdF„ ZEdG„ ZFdH„ ZGdndI„ZHdJ„ ZIdK„ ZJdL„ ZKdM„ ZLdN„ ZMdO„ ZNdP„ ZO	 dodQ„ZPdR„ ZQdS„ ZRdT„ ZSdU„ ZTdV„ ZUdW„ ZVdX„ ZWdY„ ZXdZ„ ZYd[„ ZZd\„ Z[d]„ Z\d^„ Z]dnd_„Z^d`„ Z_da„ Z`db„ Zadc„ Zbdd„ Zcde„ Zddf„ Zedg„ Zfdh„ Zgdndi„Zhe4dj„ ¦   «         Zidk„ Zjdl„ Zkd	S )pÚParsera
  Initializes a Parser object.

    Example:

        .. code:: python

            from fontTools.feaLib.parser import Parser
            parser = Parser(file, font.getReverseGlyphMap())
            parsetree = parser.parse()

    Note: the ``glyphNames`` iterable serves a double role to help distinguish
    glyph names from ranges in the presence of hyphens and to ensure that glyph
    names referenced in a feature file are actually part of a font's glyph set.
    If the iterable is left empty, no glyph name in glyph set checking takes
    place, and all glyph tokens containing hyphens are treated as literal glyph
    names, not as ranges. (Adding a space around the hyphen can, in any case,
    help to disambiguate ranges from glyph names containing hyphens.)

    By default, the parser will follow ``include()`` statements in the feature
    file. To turn this off, pass ``followIncludes=False``. Pass a directory string as
    ``includeDir`` to explicitly declare a directory to search included feature files
    in.
    c                 ó   — h | ]}d |z  ’ŒS )zss%02d© ©Ú.0Úis     úf/var/www/finuniver-perm.ru/html/portfolio/venv/lib/python3.11/site-packages/fontTools/feaLib/parser.pyú	<setcomp>zParser.<setcomp>*   ó   € Ð>Ð>Ð>¨�x !‘|Ð>Ð>Ð>ó    é   é   c                 ó   — h | ]}d |z  ’ŒS )zcv%02dr   r   s     r   r   zParser.<setcomp>+   r   r   éd   r   TNc           	      óê  — d|v r8ddl m}  |dd¦  «         |rt          d¦  «        ‚|                     d¦  «        }|rGt          dt	          |¦  «        dk    rdnd	›d
d                     d„ |D ¦   «         ¦  «        ›�¦  «        ‚t          |¦  «        | _        | j         	                    ¦   «         | _
        t          ¦   «         | _        t          ¦   «         | _        t          ¦   «         | _        t          ¦   «         | _        | j        | j        h| _        d\  | _        | _        g | _        d | _        |rt*          nt,          } |||¬¦  «        | _        i | _        |                      d¬¦  «         d S )NÚglyphMapr   )ÚdeprecateArgumentz#use 'glyphNames' (iterable) insteadz?'glyphNames' and (deprecated) 'glyphMap' are mutually exclusivezunsupported keyword argumentr   Ú Úsz: z, c              3   ó4   K  — | ]}t          |¦  «        V — Œd S ©N)Úrepr)r   Úks     r   ú	<genexpr>z"Parser.__init__.<locals>.<genexpr><   s(   è è € Ð=VÐ=VÈ!½dÀ1¹g¼gÐ=VÐ=VÐ=VÐ=VÐ=VÐ=Vr   ©NN)Ú
includeDirT©Úcomments)ÚfontTools.misc.loggingToolsr   Ú	TypeErrorÚpopÚlenÚjoinÚsetÚglyphNames_ÚastÚFeatureFileÚdoc_ÚSymbolTableÚanchors_Úglyphclasses_Úlookups_Úvaluerecords_Úsymbol_tables_Únext_token_type_Únext_token_Úcur_comments_Únext_token_location_r   r   Úlexer_ÚmissingÚadvance_lexer_)ÚselfÚfeaturefileÚ
glyphNamesÚfollowIncludesr&   Úkwargsr   Ú
lexerClasss           r   Ú__init__zParser.__init__-   s’  € ð ˜ÐÐØEÐEÐEÐEÐEÐEàÐ˜jÐ*OÑPÔPÐPØð ÝØXñô ð ð  Ÿš JÑ/Ô/ˆJØð 	Ý�)å˜V™œ¨Ò)Ð)�2�2¨sÐ2Ð2°D·I²IÐ=VÐ=VÈvÐ=VÑ=VÔ=VÑ4VÔ4VÐ4VðXñô ð õ
 ˜z™?œ?ˆÔØ”H×(Ò(Ñ*Ô*ˆŒ	Ý#™œˆŒÝ(™]œ]ˆÔÝ#™œˆŒÝ(™]œ]ˆÔØ#œ}¨dÔ.@ÐAˆÔØ2>Ñ/ˆÔ˜tÔ/ØˆÔØ$(ˆÔ!Ø'5ÐL•^�^Õ;Lˆ
Ø �j ¸ÐDÑDÔDˆŒØˆŒØ×Ò TÐÑ*Ô*Ð*Ð*Ð*r   c                 óè  — | j         j        }| j        €| j        �r|                      d¬¦  «         | j        t          j        u r;|                     | j	         
                    | j        | j        ¬¦  «        ¦  «         �n�|                      d¦  «        r)|                     |                      ¦   «         ¦  «         �nO| j        t          j        u r)|                     |                      ¦   «         ¦  «         �n|                      d¦  «        r)|                     |                      ¦   «         ¦  «         �nÕ|                      d¦  «        r)|                     |                      ¦   «         ¦  «         �n—|                      d¦  «        r)|                     |                      ¦   «         ¦  «         �nY|                      d	¦  «        r+|                     |                      d
¬¦  «        ¦  «         �n|                      d¦  «        r)|                     |                      ¦   «         ¦  «         �nÛ|                      d¦  «        r)|                     |                      ¦   «         ¦  «         �n�|                      d¦  «        r)|                     |                      ¦   «         ¦  «         �n_|                      d¦  «        r+|                     |                      d¬¦  «        ¦  «         �n|                      d¦  «        r(|                     |                      ¦   «         ¦  «         nâ|                      d¦  «        r*|                     |                      d
¬¦  «        ¦  «         n£| j        t          j        u r=| j        | j        v r/|                      | j        | j                 | ¦  «        ¦  «         nS| j        t          j        u r| j        dk    r�ŒÍt;          d                     | j        | j        ¦  «        | j        ¦  «        ‚| j        �­ù| j        �°| j        rId„ | j                              ¦   «         D ¦   «         }t;          dd !                    |¦  «        z   d¦  «        ‚| j         S )z»Parse the file, and return a :class:`fontTools.feaLib.ast.FeatureFile`
        object representing the root of the abstract syntax tree containing the
        parsed contents of the file.NTr'   ©ÚlocationÚinclude©ÚanonÚ	anonymousÚ	anchorDefÚlanguagesystemÚlookupF©ÚverticalÚ	markClassÚfeatureÚconditionsetÚ	variation)rV   ÚtableÚvalueRecordDefú;zbExpected feature, languagesystem, lookup, markClass, table, or glyph class definition, got {} "{}"c                 ó&   — g | ]\  }}d |›d|›d�‘ŒS )ú z (first found at ú)r   )r   ÚnameÚlocs      r   ú
<listcomp>z Parser.parse.<locals>.<listcomp>‚   s;   € ð ð ð á�D˜#˜#ð .2¨T¨T°3°3°3Ð7ðð ð r   zMThe following glyph names are referenced but are missing from the glyph set:
ú
)"r2   Ú
statementsr9   r;   r?   Úcur_token_type_r   ÚCOMMENTÚappendr0   ÚCommentÚ
cur_token_Úcur_token_location_Úis_cur_keyword_Úparse_include_Ú
GLYPHCLASSÚparse_glyphclass_definition_Úparse_anonymous_Úparse_anchordef_Úparse_languagesystem_Úparse_lookup_Úparse_markClass_Úparse_feature_block_Úparse_conditionset_Úparse_table_Úparse_valuerecord_definition_ÚNAMEÚ
extensionsÚSYMBOLr   Úformatr>   Úitemsr-   )r@   ra   Úerrors      r   ÚparsezParser.parseN   sf  € ð ”YÔ)ˆ
ØÔ#Ð/°4Ô3EÑ/Ø×Ò¨ÐÑ.Ô.Ð.ØÔ#¥u¤}Ð4Ð4Ø×!Ò!Ø”H×$Ò$ T¤_¸tÔ?WÐ$ÑXÔXñô ð ñ ð ×%Ò% iÑ0Ô0ð &Ø×!Ò! $×"5Ò"5Ñ"7Ô"7Ñ8Ô8Ð8Ñ8ØÔ%­Ô)9Ð9Ð9Ø×!Ò! $×"CÒ"CÑ"EÔ"EÑFÔFÐFÑFØ×%Ò%Ð&;Ñ<Ô<ð "Ø×!Ò! $×"7Ò"7Ñ"9Ô"9Ñ:Ô:Ð:Ñ:Ø×%Ò% kÑ2Ô2ð  Ø×!Ò! $×"7Ò"7Ñ"9Ô"9Ñ:Ô:Ð:Ñ:Ø×%Ò%Ð&6Ñ7Ô7ð Ø×!Ò! $×"<Ò"<Ñ">Ô">Ñ?Ô?Ð?Ñ?Ø×%Ò% hÑ/Ô/ð Ø×!Ò! $×"4Ò"4¸eÐ"4Ñ"DÔ"DÑEÔEÐEÑEØ×%Ò% kÑ2Ô2ð Ø×!Ò! $×"7Ò"7Ñ"9Ô"9Ñ:Ô:Ð:Ñ:Ø×%Ò% iÑ0Ô0ð Ø×!Ò! $×";Ò";Ñ"=Ô"=Ñ>Ô>Ð>Ñ>Ø×%Ò% nÑ5Ô5ð Ø×!Ò! $×":Ò":Ñ"<Ô"<Ñ=Ô=Ð=Ñ=Ø×%Ò% kÑ2Ô2ð Ø×!Ò! $×";Ò";ÀdÐ";Ñ"KÔ"KÑLÔLÐLÑLØ×%Ò% gÑ.Ô.ð Ø×!Ò! $×"3Ò"3Ñ"5Ô"5Ñ6Ô6Ð6Ð6Ø×%Ò%Ð&6Ñ7Ô7ð Ø×!Ò! $×"DÒ"DÈeÐ"DÑ"TÔ"TÑUÔUÐUÐUàÔ$­¬
Ð2Ð2Ø”O t¤Ð6Ð6à×!Ò!Ð"B $¤/°$´/Ô"BÀ4Ñ"HÔ"HÑIÔIÐIÐIØÔ%­¬Ð5Ð5¸$¼/ÈSÒ:PÐ:PÙå%ðDßDJÂFØÔ,¨d¬oñEô Eð Ô,ñô ð ðM Ô#Ñ/°4Ô3EÑ/ð\ Œ<ð 		ðð à!%¤×!3Ò!3Ñ!5Ô!5ðñ ô ˆEõ "ðØ"&§)¢)¨EÑ"2Ô"2ñ4àñô ð ð
 ŒyÐr   c           	      ó¸  — |                       d¦  «         |                      d¦  «         | j        }| j        dk    r,|                      d¦  «         |                       d¦  «         d S | j        t
          j        k    r�|                      ¦   «         }| j         	                    |¦  «        }|€t          d|z  | j        ¦  «        ‚|                       d¦  «         | j                             |j        |j        ||j        d d |¬¦  «        S |                      d¬¦  «        |                      d¬¦  «        }}d }| j        d	k    r)|                      d	¦  «         |                      ¦   «         }| j        dk    r)|                      ¦   «         }|                      ¦   «         }nd
\  }}|                       d¦  «         | j                             ||d ||||¬¦  «        S )Nú<ÚanchorÚNULLú>zUnknown anchor "%s")r]   ÚcontourpointÚxDeviceTableÚyDeviceTablerI   T©Úvariabler�   r%   )Úexpect_symbol_Úexpect_keyword_rg   r:   r9   r   ru   Úexpect_name_r4   Úresolver   r0   ÚAnchorÚxÚyr�   Úexpect_number_Úparse_device_)	r@   rI   r]   Ú	anchordefr‹   rŒ   r�   r‚   rƒ   s	            r   Úparse_anchor_zParser.parse_anchor_�   s  € ð 	×Ò˜CÑ Ô Ð Ø×Ò˜XÑ&Ô&Ð&ØÔ+ˆàÔ˜vÒ%Ð%Ø× Ò  Ñ(Ô(Ð(Ø×Ò Ñ$Ô$Ð$Ø�4àÔ ¥E¤JÒ.Ð.Ø×$Ò$Ñ&Ô&ˆDØœ×-Ò-¨dÑ3Ô3ˆIØÐ Ý%Ø)¨DÑ0°$Ô2Jñô ð ð ×Ò Ñ$Ô$Ð$Ø”8—?’?Ø”Ø”ØØ&Ô3Ø!Ø!Ø!ð #ñ ô ð ð ×"Ò"¨DÐ"Ñ1Ô1°4×3FÒ3FÐPTÐ3FÑ3UÔ3Uˆ1ˆàˆØÔ˜~Ò-Ð-Ø× Ò  Ñ0Ô0Ð0Ø×.Ò.Ñ0Ô0ˆLàÔ˜sÒ"Ð"Ø×-Ò-Ñ/Ô/ˆLØ×-Ò-Ñ/Ô/ˆLˆLà)3Ñ&ˆL˜,à×Ò˜CÑ Ô Ð ØŒx�ŠØØØØ%Ø%Ø%Øð ñ 
ô 
ð 	
r   c                 óú   — g }| j         dk    rm|                      ¦   «         }|€| j         dk    rŒ-|                      d¦  «         |                      ¦   «         }|                     ||f¦  «         | j         dk    °m|S )Nr}   Úmark)r:   r�   r‡   Úexpect_markClass_reference_rd   )r@   ÚanchorMarksr~   rS   s       r   Úparse_anchor_marks_zParser.parse_anchor_marks_Ã   s‘   € àˆØÔ #Ò%Ð%Ø×'Ò'Ñ)Ô)ˆFØˆ~ $Ô"2°fÒ"<Ð"<ØØ× Ò  Ñ(Ô(Ð(Ø×8Ò8Ñ:Ô:ˆIØ×Ò ¨	Ð2Ñ3Ô3Ð3ð Ô #Ò%Ð%ð Ðr   c                 óÄ  — |                       d¦  «        sJ ‚| j        }|                      ¦   «         |                      ¦   «         }}d }| j        dk    r)|                      d¦  «         |                      ¦   «         }|                      ¦   «         }|                      d¦  «         | j                             |||||¬¦  «        }| j	         
                    ||¦  «         |S )NrN   r�   rY   )r�   rI   )rh   rg   r�   r:   r‡   rˆ   r†   r0   ÚAnchorDefinitionr4   Údefine)r@   rI   r‹   rŒ   r�   r]   r�   s          r   rm   zParser.parse_anchordef_Ï   sé   € à×#Ò# KÑ0Ô0Ð0Ð0Ð0ØÔ+ˆØ×"Ò"Ñ$Ô$ d×&9Ò&9Ñ&;Ô&;ˆ1ˆØˆØÔ˜~Ò-Ð-Ø× Ò  Ñ0Ô0Ð0Ø×.Ò.Ñ0Ô0ˆLØ× Ò Ñ"Ô"ˆØ×Ò˜CÑ Ô Ð Ø”H×-Ò-Ø�!�Q \¸Hð .ñ 
ô 
ˆ	ð 	Œ×Ò˜T 9Ñ-Ô-Ð-ØÐr   c                 ó’  — |                       d¦  «        sJ ‚|                      ¦   «         }| j                             |¦  «        \  }}}|                      ¦   «          |                      d¦  «         |                      ¦   «         }||k    s
J d¦   «         ‚|                      d¦  «         | j                             |||¬¦  «        S )NrK   Ú}z-bad splitting in Lexer.scan_anonymous_block()rY   rH   )rh   Úexpect_tag_r=   Úscan_anonymous_blockr?   r†   r0   ÚAnonymousBlock)r@   ÚtagÚ_ÚcontentrI   Úend_tags         r   rl   zParser.parse_anonymous_à   sÆ   € à×#Ò#Ð$9Ñ:Ô:Ð:Ð:Ð:Ø×ÒÑ Ô ˆØ#œ{×?Ò?ÀÑDÔDÑˆˆ7�HØ×ÒÑÔÐØ×Ò˜CÑ Ô Ð Ø×"Ò"Ñ$Ô$ˆØ�gŠ~ˆ~ˆ~ÐN‰~Œ~ˆ~Ø×Ò˜CÑ Ô Ð ØŒx×&Ò& s¨G¸hÐ&ÑGÔGÐGr   c                 ór  — |                       d¦  «        sJ ‚| j        }|                      d¬¦  «        }|                      ¦   «         h}| j        dk    r2|                     |                      ¦   «         ¦  «         | j        dk    °2|                      d¦  «         | j                             |||¬¦  «        S )NÚAttachT©Úaccept_glyphnamerY   rH   )	rh   rg   Úparse_glyphclass_r�   r:   Úaddr†   r0   ÚAttachStatement)r@   rI   ÚglyphsÚcontourPointss       r   Úparse_attach_zParser.parse_attach_ì   s½   € à×#Ò# HÑ-Ô-Ð-Ð-Ð-ØÔ+ˆØ×'Ò'¸Ð'Ñ>Ô>ˆØ×,Ò,Ñ.Ô.Ð/ˆØÔ #Ò%Ð%Ø×Ò˜d×1Ò1Ñ3Ô3Ñ4Ô4Ð4ð Ô #Ò%Ð%à×Ò˜CÑ Ô Ð ØŒx×'Ò'¨°ÈÐ'ÑQÔQÐQr   c                 ón   — | j         dv sJ ‚|                      ¦   «          |                      d|¬¦  «        S )N>   ÚenumÚ	enumerateT©Ú
enumeratedrR   )rf   r?   Úparse_position_)r@   rR   s     r   Úparse_enumerate_zParser.parse_enumerate_÷   sA   € àŒÐ"7Ð7Ð7Ð7Ð7Ø×ÒÑÔÐØ×#Ò#¨t¸hÐ#ÑGÔGÐGr   c                 óD  — |                       d¦  «        sJ ‚| j        }| j        dk    r|                      d¬¦  «        }nd }|                      d¦  «         | j        dk    r|                      d¬¦  «        }nd }|                      d¦  «         | j        dk    r|                      d¬¦  «        }nd }|                      d¦  «         | j        dk    r|                      d¬¦  «        }nd }|                      d¦  «         | j                             |||||¬¦  «        S )NÚGlyphClassDefú,Fr¤   rY   rH   )rh   rg   r:   r¦   r†   r0   ÚGlyphClassDefStatement)r@   rI   Ú
baseGlyphsÚligatureGlyphsÚ
markGlyphsÚcomponentGlyphss         r   Úparse_GlyphClassDef_zParser.parse_GlyphClassDef_ý   sJ  € à×#Ò# OÑ4Ô4Ð4Ð4Ð4ØÔ+ˆØÔ˜sÒ"Ð"Ø×/Ò/ÀÐ/ÑGÔGˆJˆJàˆJØ×Ò˜CÑ Ô Ð ØÔ˜sÒ"Ð"Ø!×3Ò3ÀUÐ3ÑKÔKˆNˆNà!ˆNØ×Ò˜CÑ Ô Ð ØÔ˜sÒ"Ð"Ø×/Ò/ÀÐ/ÑGÔGˆJˆJàˆJØ×Ò˜CÑ Ô Ð ØÔ˜sÒ"Ð"Ø"×4Ò4ÀeÐ4ÑLÔLˆOˆOà"ˆOØ×Ò˜CÑ Ô Ð ØŒx×.Ò.Ø˜
 N°OÈhð /ñ 
ô 
ð 	
r   c                 ó  — | j         | j        }}|                      d¦  «         |                      d¬¦  «        }|                      d¦  «         | j                             |||¬¦  «        }| j                             ||¦  «         |S )Nú=Fr¤   rY   rH   )rg   rf   r†   r¦   r0   ÚGlyphClassDefinitionr5   r˜   )r@   rI   r]   r©   Ú
glyphclasss        r   rk   z#Parser.parse_glyphclass_definition_  s‰   € àÔ1°4´?�$ˆØ×Ò˜CÑ Ô Ð Ø×'Ò'¸Ð'Ñ?Ô?ˆØ×Ò˜CÑ Ô Ð Ø”X×2Ò2°4¸È(Ð2ÑSÔSˆ
ØÔ×!Ò! $¨
Ñ3Ô3Ð3ØÐr   c                 ó0  — |                      d¦  «        }g }t          t          |¦  «        ¦  «        D ]e}d                     |d|…         ¦  «        d                     ||d …         ¦  «        }}|| j        v r || j        v r|                     ||f¦  «         Œft          |¦  «        dk    r|d         \  }}||fS t          |¦  «        dk    rt          d|z  |¦  «        ‚d                     d„ |D ¦   «         ¦  «        }t          d|›d|›d	�|¦  «        ‚)
Nú-r   r   zU"%s" is not a glyph in the font, and it can not be split into a range of known glyphsz or c                 ó&   — g | ]\  }}d |›d|›d �‘ŒS )ú"z - r   )r   r   Úls      r   r_   z-Parser.split_glyph_range_.<locals>.<listcomp>F  s+   € Ð!MÐ!MÐ!M¹4¸1¸a¸a°°°°A°A°AÐ"6Ð!MÐ!MÐ!Mr   zAmbiguous glyph range "z"; please use z to clarify what you mean)ÚsplitÚranger,   r-   r/   rd   r   )	r@   r]   rI   ÚpartsÚ	solutionsr   ÚstartÚlimitÚrangess	            r   Úsplit_glyph_range_zParser.split_glyph_range_#  sA  € ð& —
’
˜3‘”ˆØˆ	Ý•s˜5‘z”zÑ"Ô"ð 	1ð 	1ˆAØŸ8š8 E¨!¨A¨#¤JÑ/Ô/°·²¸%ÀÀÀ¼)Ñ1DÔ1D�5ˆEØ˜Ô(Ð(Ð(¨U°dÔ6FÐ-FÐ-FØ× Ò  %¨ Ñ0Ô0Ð0øÝˆy‰>Œ>˜QÒÐØ$ Qœ<‰LˆE�5Ø˜%�<ÐÝ�‰^Œ^˜qÒ Ð Ý!ð/Ø15ñ6àñô ð ð —[’[Ð!MÐ!MÀ9Ð!MÑ!MÔ!MÑNÔNˆFÝ!�/à<@¸D¸DÀ&À&À&ðJàñô ð r   Fc           	      óz
  — |rª| j         t          j        t          j        fv r‹|r?| j        dk    r4|                      ¦   «          | j                             | j        ¬¦  «        S |  	                    ¦   «         }|  
                    |¦  «         | j                             || j        ¬¦  «        S | j         t          j        u r®|                      ¦   «          | j                             | j        ¦  «        }|€t!          d| j        z  | j        ¦  «        ‚t#          || j        j        ¦  «        r!| j                             || j        ¬¦  «        S | j                             || j        ¬¦  «        S |                      d¦  «         | j        }| j                             |¬¦  «        }| j        dk    �ru| j         t          j        u �ru|  	                    ¦   «         }| j        }d|v rm| j        rf|| j        vr]|                      ||¦  «        \  }}|  
                    ||¦  «         |                     |||                      |||¦  «        ¦  «         �nÉ| j        dk    ro|}|                      d¦  «         |  	                    ¦   «         }|  
                    ||¦  «         |                     |||                      |||¦  «        ¦  «         �nOd|v r?| j        s8t6                               t;          t!          d|›�|¦  «        ¦  «        ¦  «         |  
                    |¦  «         |                     |¦  «         �nà| j         t          j        u rØ|  	                    ¦   «         }| j        dk    rƒ| j        }	| j        }
|                      d¦  «         |                      ¦   «         }|  
                    d|
d	›�d|d	›�¦  «         |                      |
||  !                    |	|
|¦  «        ¦  «         �n+d| j        d	›�}|  
                    |¦  «         |                     |¦  «         nõ| j         t          j        u rÅ|                      ¦   «          | j                             | j        ¦  «        }|€t!          d| j        z  | j        ¦  «        ‚t#          || j        j        ¦  «        r"| j                             || j        ¬¦  «        }n!| j                             || j        ¬¦  «        }| "                    |¦  «         nt!          d
| j        ›�| j#        ¦  «        ‚| j        dk    �°u|                      d¦  «         |S )Nr   rH   zUnknown glyph class @%sú[ú]rÁ   z.Ambiguous glyph name that looks like a range: ÚcidÚ05dzBExpected glyph name, glyph range, or glyph class reference, found )$r9   r   ru   ÚCIDr:   r?   r0   Ú	NullGlyphrg   Úexpect_glyph_Úcheck_glyph_name_in_glyph_setÚ	GlyphNamerj   r5   r‰   rf   r   Ú
isinstanceÚ	MarkClassÚMarkClassNameÚGlyphClassNamer†   Ú
GlyphClassr/   rÌ   Ú	add_rangeÚmake_glyph_range_ÚlogÚwarningÚstrrd   Úexpect_cid_Úadd_cid_rangeÚmake_cid_range_Ú	add_classr<   )r@   r¥   Úaccept_nullÚglyphÚgcrI   r©   rÉ   rÊ   Úrange_locationÚrange_startÚ	range_endÚ
glyph_names                r   r¦   zParser.parse_glyphclass_M  s‹  € ð ð 	P Ô 5½%¼*ÅeÄiÐ9PÐ PÐ PØð M˜tÔ/°6Ò9Ð9à×#Ò#Ñ%Ô%Ð%Ø”x×)Ò)°4Ô3KÐ)ÑLÔLÐLØ×&Ò&Ñ(Ô(ˆEØ×.Ò.¨uÑ5Ô5Ð5Ø”8×%Ò% e°dÔ6NÐ%ÑOÔOÐOØÔ ¥EÔ$4Ð4Ð4Ø×ÒÑ!Ô!Ð!ØÔ#×+Ò+¨D¬OÑ<Ô<ˆBØˆzÝ%Ø-°´Ñ?ØÔ,ñô ð õ ˜"˜dœhÔ0Ñ1Ô1ð VØ”x×-Ò-¨b¸4Ô;SÐ-ÑTÔTÐTà”x×.Ò.¨r¸DÔ<TÐ.ÑUÔUÐUà×Ò˜CÑ Ô Ð ØÔ+ˆØ”×$Ò$¨hÐ$Ñ7Ô7ˆØÔ #Ò%Ñ%ØÔ$­¬
Ð2Ñ2Ø×*Ò*Ñ,Ô,�ØÔ3�Ø˜%�<�< DÔ$4�<¸ÀdÔFVÐ9VÐ9VØ#'×#:Ò#:¸5À(Ñ#KÔ#K‘L�E˜5Ø×6Ò6°u¸eÑDÔDÐDØ×$Ò$Ø˜u d×&<Ò&<¸XÀuÈeÑ&TÔ&Tñô ð ñ ð Ô%¨Ò,Ð,Ø!�EØ×'Ò'¨Ñ,Ô,Ð,Ø ×.Ò.Ñ0Ô0�EØ×6Ò6°u¸eÑDÔDÐDØ×$Ò$Ø˜u d×&<Ò&<¸XÀuÈeÑ&TÔ&Tñô ð ñ ð ˜e�|�|¨DÔ,<�|ÝŸšÝÝ /Ø$^ÐUZÐ$^Ð$^Ø$,ñ!"ô !"ñô ñô ð ð ×6Ò6°uÑ=Ô=Ð=Ø—M’M %Ñ(Ô(Ð(Ñ(ØÔ&­%¬)Ð3Ð3Ø×*Ò*Ñ,Ô,�ØÔ# sÒ*Ð*Ø%)Ô%=�NØ"&¤/�KØ×'Ò'¨Ñ,Ô,Ð,Ø $× 0Ò 0Ñ 2Ô 2�IØ×6Ò6Ø/˜kÐ/Ð/Ð/Ø-˜iÐ-Ð-Ð-ñô ð ð ×(Ò(Ø#Ø!Ø×,Ò,¨^¸[È)ÑTÔTñô ð ñ ð "= t¤Ð!<Ð!<Ð!<�JØ×6Ò6°zÑBÔBÐBØ—M’M *Ñ-Ô-Ð-Ð-ØÔ&­%Ô*:Ð:Ð:Ø×#Ò#Ñ%Ô%Ð%ØÔ'×/Ò/°´Ñ@Ô@�Ø�:Ý)Ø1°D´OÑCØÔ0ñô ð õ ˜b $¤(Ô"4Ñ5Ô5ð XØœ×/Ò/°¸TÔ=UÐ/ÑVÔV�B�Bàœ×0Ò0°¸dÔ>VÐ0ÑWÔW�BØ× Ò  Ñ$Ô$Ð$Ð$å%ðLØ7;Ô7GðLð LàÔ-ñô ð ðA Ô #Ò%Ñ%ðJ 	×Ò˜CÑ Ô Ð Øˆr   c                 ón  — g g g g g f\  }}}}}d}| j         dv�r°|                      d¬¦  «        }d}	| j         dk    r|                      d¦  «         dx}}	|	r-|rt          d| j        ¦  «        ‚|                     |¦  «         n-|r|                     |¦  «         n|                     |¦  «         |                      ¦   «         r)|                     |                      |¦  «        ¦  «         n|                     d ¦  «         d }
| j         dk    r˜|
€g }
|                      d¦  «         |	st          d| j        ¦  «        ‚|  	                    ¦   «         }| j
                             |¦  «        }|€t          d	|z  | j        ¦  «        ‚|
                     |¦  «         | j         dk    °˜|	r|                     |
¦  «         | j         dv�°°|s#|s!|g k    sJ ‚g |d gt          |¦  «        z  |g |fS t          |d t          |¦  «        …         ¦  «        rt          d
| j        ¦  «        ‚|t          |¦  «        t          |¦  «        t          |¦  «        z   …         }t          |¦  «        rLt          |t          |¦  «        t          |¦  «        z   d …         ¦  «        rt          d| j        ¦  «        ‚|}nx|rR|d         rJt          |¦  «        dk    st          |d d…         ¦  «        rt          d| j        ¦  «        ‚|dd …         }n$t          |¦  «        rt          d| j        ¦  «        ‚||||||fS )NF>   ÚbyÚfromrµ   rY   Tr¤   ú'z_Unsupported contextual target sequence: at most one run of marked (') glyph/class names allowedrP   z%Lookups can only follow marked glyphsúUnknown lookup "%s"z_Positioning cannot be applied in the bactrack glyph sequence, before the marked glyph sequence.zƒPositioning values are allowed only in the marked glyph sequence, or after the final glyph node when only one glyph node is marked.éÿÿÿÿr   )r:   r¦   r†   r   rg   rd   Úis_next_value_Úparse_valuerecord_r‡   rˆ   r6   r‰   r,   Úany)r@   rR   Úprefixr©   ÚlookupsÚvaluesÚsuffixÚhasMarksrç   ÚmarkedÚ
lookuplistÚlookup_namerP   Úmarked_valuess                 r   Úparse_glyph_pattern_zParser.parse_glyph_pattern_±  sß  € ð 46°r¸2¸rÀ2Ð2FÑ/ˆ�˜ ¨ØˆØÔÐ&>Ð>Ñ>Ø×'Ò'¸Ð'Ñ>Ô>ˆBØˆFØÔ 3Ò&Ð&Ø×#Ò# CÑ(Ô(Ð(Ø$(Ð(�˜6Øð "Øð õ *ðJàÔ0ñô ð ð
 —’˜bÑ!Ô!Ð!Ð!Øð "Ø—’˜bÑ!Ô!Ð!Ð!à—’˜bÑ!Ô!Ð!à×"Ò"Ñ$Ô$ð $Ø—’˜d×5Ò5°hÑ?Ô?Ñ@Ô@Ð@Ð@à—’˜dÑ#Ô#Ð#àˆJØÔ" hÒ.Ð.ØÐ%Ø!#�JØ×$Ò$ XÑ.Ô.Ð.Øð Ý)Ø?ØÔ0ñô ð ð #×/Ò/Ñ1Ô1�Øœ×.Ò.¨{Ñ;Ô;�Ø�>Ý)Ø-°Ñ;¸TÔ=Uñô ð ð ×!Ò! &Ñ)Ô)Ð)ð Ô" hÒ.Ð.ð  ð +Ø—’˜zÑ*Ô*Ð*ð[ ÔÐ&>Ð>Ñ>ð^ ð $	G˜fð $	GØ˜b’=�=�=�=Ø˜  ­¨V©¬Ñ 4°f¸bÀ(ÐKÐKå�6˜-�C ™KœK˜-Ô(Ñ)Ô)ð Ý%ð8àÔ,ñô ð ð
 #¥3 v¡;¤;µ°V±´½sÀ6¹{¼{Ñ1JÐ#JÔKˆMÝ�=Ñ!Ô!ð Ý�v�c &™kœk­C°©K¬KÑ7Ð9Ð9Ô:Ñ;Ô;ð Ý)ð*ð Ô0ñ	ô ð ð '��Øð ˜F 2œJð Ý�v‘;”; ’?�?¥c¨&°°"°¬+Ñ&6Ô&6�?Ý)ð*ð Ô0ñ	ô ð ð     œ��Ý�V‘”ð Ý%ð&ð Ô,ñ	ô ð ð ˜F G¨V°V¸XÐFÐFr   c                 ó@  — | j         }|                      d¬¦  «        \  }}}}}}t          |¦  «        rt          d|› d�|¦  «        ‚|sOt          d|› d�|¦  «        }	t                               t          |	¦  «        ¦  «         |dd …         |dd…         }}|||f}
|
S )	NFrQ   z(No lookups can be specified for "ignore rÃ   zAmbiguous "ignore z)", there should be least one marked glyphr   r   )rg   rþ   rô   r   rÞ   rß   rà   )r@   ÚsubrI   rõ   r©   rö   r÷   rø   rù   rz   ÚchainContexts              r   Úparse_ignore_glyph_pattern_z"Parser.parse_ignore_glyph_pattern_  sÖ   € ØÔ+ˆØ<@×<UÒ<UØð =Vñ =
ô =
Ñ9ˆ�˜ ¨°õ ˆw‰<Œ<ð 	Ý!ØA¸3ÐAÐAÐAÀ8ñô ð ð ð 	5Ý#ØS SÐSÐSÐSØñô ˆEõ �KŠK�˜E™
œ
Ñ#Ô#Ð#Ø# A B BœZ¨°°!°¬�FˆFØ ¨Ð/ˆØÐr   c                 ó  — | j         }|                      |¦  «        g}| j        dk    rH|                      d¦  «         |                     |                      |¦  «        ¦  «         | j        dk    °H|                      d¦  «         |S )Nrµ   rY   )rg   r  r:   r†   rd   )r@   r   rI   r  s       r   Úparse_ignore_context_zParser.parse_ignore_context_!  s�   € ØÔ+ˆØ×8Ò8¸Ñ=Ô=Ð>ˆØÔ #Ò%Ð%Ø×Ò Ñ$Ô$Ð$Ø×Ò × @Ò @ÀÑ EÔ EÑFÔFÐFð Ô #Ò%Ð%ð 	×Ò˜CÑ Ô Ð ØÐr   c                 óx  — |                       d¦  «        sJ ‚| j        }|                      ¦   «          | j        dv r1|                      d¦  «        }| j                             ||¬¦  «        S | j        dv r1|                      d¦  «        }| j                             ||¬¦  «        S t          d| j        ¦  «        ‚)NÚignore)Ú
substituter   r   rH   )ÚpositionÚposr	  z#Expected "substitute" or "position")	rh   rg   r?   rf   r  r0   ÚIgnoreSubstStatementÚIgnorePosStatementr   )r@   rI   r  s      r   Úparse_ignore_zParser.parse_ignore_*  sÈ   € à×#Ò# HÑ-Ô-Ð-Ð-Ð-ØÔ+ˆØ×ÒÑÔÐØŒ?Ð3Ð3Ð3Ø×5Ò5°eÑ<Ô<ˆLØ”8×0Ò0°ÈÐ0ÑQÔQÐQØŒ?Ð1Ð1Ð1Ø×5Ò5°eÑ<Ô<ˆLØ”8×.Ò.¨|ÀhÐ.ÑOÔOÐOÝØ1°4Ô3Kñ
ô 
ð 	
r   c                 ó~   — | j         dk    sJ ‚| j        }|                      ¦   «         }t          j        ||¬¦  «        S )NrJ   rH   )rf   rg   Úexpect_filename_r0   ÚIncludeStatement)r@   rI   Úfilenames      r   ri   zParser.parse_include_9  sD   € ØŒ )Ò+Ð+Ð+Ð+ØÔ+ˆØ×(Ò(Ñ*Ô*ˆåÔ# H°xÐ@Ñ@Ô@Ð@r   c                 ó\  — |                       d¦  «        sJ ‚| j        }|                      ¦   «         }d\  }}| j        dv r|                      ¦   «         dk    }| j        dk    r|                      d¦  «         d}|                      d¦  «         | j                             ||||¬¦  «        S )	NÚlanguage)TF>   Úexclude_dfltÚinclude_dfltr  ÚrequiredTrY   rH   )	rh   rg   Úexpect_language_tag_r:   rˆ   r‡   r†   r0   ÚLanguageStatement)r@   rI   r  Úinclude_defaultr  s        r   Úparse_language_zParser.parse_language_@  sÇ   € Ø×#Ò# JÑ/Ô/Ð/Ð/Ð/ØÔ+ˆØ×,Ò,Ñ.Ô.ˆØ$1Ñ!ˆ˜ØÔÐ?Ð?Ð?Ø"×/Ò/Ñ1Ô1°^ÒCˆOØÔ˜zÒ)Ð)Ø× Ò  Ñ,Ô,Ð,ØˆHØ×Ò˜CÑ Ô Ð ØŒx×)Ò)Ø�o x¸(ð *ñ 
ô 
ð 	
r   c                 ór  — |                       d¦  «        sJ ‚| j        }|                      d¬¦  «        }|                      ¦   «         g}| j        dk    r2|                     |                      ¦   «         ¦  «         | j        dk    °2|                      d¦  «         | j                             |||¬¦  «        S )NÚLigatureCaretByIndexTr¤   rY   rH   )	rh   rg   r¦   r�   r:   rd   r†   r0   ÚLigatureCaretByIndexStatement©r@   rI   r©   Úcaretss       r   Úparse_ligatureCaretByIndex_z"Parser.parse_ligatureCaretByIndex_O  s¼   € Ø×#Ò#Ð$:Ñ;Ô;Ð;Ð;Ð;ØÔ+ˆØ×'Ò'¸Ð'Ñ>Ô>ˆØ×%Ò%Ñ'Ô'Ð(ˆØÔ #Ò%Ð%Ø�MŠM˜$×-Ò-Ñ/Ô/Ñ0Ô0Ð0ð Ô #Ò%Ð%à×Ò˜CÑ Ô Ð ØŒx×5Ò5°f¸fÈxÐ5ÑXÔXÐXr   c                 óz  — |                       d¦  «        sJ ‚| j        }|                      d¬¦  «        }|                      d¬¦  «        g}| j        dk    r4|                     |                      d¬¦  «        ¦  «         | j        dk    °4|                      d¦  «         | j                             |||¬¦  «        S )NÚLigatureCaretByPosTr¤   r„   rY   rH   )	rh   rg   r¦   r�   r:   rd   r†   r0   ÚLigatureCaretByPosStatementr  s       r   Úparse_ligatureCaretByPos_z Parser.parse_ligatureCaretByPos_Y  sÆ   € Ø×#Ò#Ð$8Ñ9Ô9Ð9Ð9Ð9ØÔ+ˆØ×'Ò'¸Ð'Ñ>Ô>ˆØ×%Ò%¨tÐ%Ñ4Ô4Ð5ˆØÔ #Ò%Ð%Ø�MŠM˜$×-Ò-°tÐ-Ñ<Ô<Ñ=Ô=Ð=ð Ô #Ò%Ð%à×Ò˜CÑ Ô Ð ØŒx×3Ò3°F¸FÈXÐ3ÑVÔVÐVr   c                 ó.  — |                       d¦  «        sJ ‚| j        |                      ¦   «         }}| j        dk    re| j                             |¦  «        }|€t          d|z  | j        ¦  «        ‚|                      d¦  «         | j         	                    ||¬¦  «        S d}| j        dk    r|  
                    d¦  «         d}| j                             |||¬¦  «        }|                      ||¦  «         | j                             ||¦  «         |S )NrP   rY   rð   rH   FÚuseExtensionT)rh   rg   rˆ   r:   r6   r‰   r   r†   r0   ÚLookupReferenceStatementr‡   ÚLookupBlockÚparse_block_r˜   )r@   rR   rI   r]   rP   Úuse_extensionÚblocks          r   ro   zParser.parse_lookup_c  s)  € ð ×#Ò# HÑ-Ô-Ð-Ð-Ð-ØÔ1°4×3DÒ3DÑ3FÔ3F�$ˆàÔ˜sÒ"Ð"Ø”]×*Ò*¨4Ñ0Ô0ˆFØˆ~Ý%Ø)¨DÑ0°$Ô2Jñô ð ð ×Ò Ñ$Ô$Ð$Ø”8×4Ò4°VÀhÐ4ÑOÔOÐOàˆØÔ˜~Ò-Ð-Ø× Ò  Ñ0Ô0Ð0Ø ˆMà”×$Ò$ T¨=À8Ð$ÑLÔLˆØ×Ò˜% Ñ*Ô*Ð*ØŒ×Ò˜T 5Ñ)Ô)Ð)Øˆr   c                 óô  — |                       d¦  «        sJ ‚| j        }| j        t          j        k    rE|                      ¦   «         }|                      d¦  «         | j                             ||¬¦  «        S d}d\  }}}dddd	d
œ}t          ¦   «         }| j
        dk    rÿ| j
        |v rt          d| j
        z  | j        ¦  «        ‚|                     | j
        ¦  «         | j
        dk    r,|                      d¦  «         |                      d¬¦  «        }n}| j
        dk    r,|                      d¦  «         |                      d¬¦  «        }nF| j
        |v r d}|||                      ¦   «                  z  }nt          d| j
        z  | j        ¦  «        ‚| j
        dk    °ÿ|                      d¦  «         t#          |||g¦  «        st          d| j        ¦  «        ‚| j                             ||||¬¦  «        S )NÚ
lookupflagrY   rH   F)r   NNr   é   é   é   )ÚRightToLeftÚIgnoreBaseGlyphsÚIgnoreLigaturesÚIgnoreMarksz%s can be specified only onceÚMarkAttachmentTyper¤   ÚUseMarkFilteringSetTz#"%s" is not a recognized lookupflagzlookupflag must have a value)ÚmarkAttachmentÚmarkFilteringSetrI   )rh   rg   r9   r   ÚNUMBERr�   r†   r0   ÚLookupFlagStatementr.   r:   r   r<   r§   r‡   r¦   rˆ   rô   )r@   rI   ÚvalueÚ
value_seenr6  r7  ÚflagsÚseens           r   Úparse_lookupflag_zParser.parse_lookupflag_|  sW  € ð ×#Ò# LÑ1Ô1Ð1Ð1Ð1ØÔ+ˆð Ô ¥E¤LÒ0Ð0Ø×'Ò'Ñ)Ô)ˆEØ×Ò Ñ$Ô$Ð$Ø”8×/Ò/°ÀÐ/ÑIÔIÐIð ˆ
Ø2?Ñ/ˆˆ~Ð/àØ !Ø Øð	
ð 
ˆõ ‰uŒuˆØÔ #Ò%Ð%ØÔ 4Ð'Ð'Ý%Ø3°dÔ6FÑFØÔ-ñô ð ð �HŠH�TÔ%Ñ&Ô&Ð&ØÔÐ#7Ò7Ð7Ø×$Ò$Ð%9Ñ:Ô:Ð:Ø!%×!7Ò!7ÈÐ!7Ñ!OÔ!O��ØÔ!Ð%:Ò:Ð:Ø×$Ò$Ð%:Ñ;Ô;Ð;Ø#'×#9Ò#9È5Ð#9Ñ#QÔ#QÐ Ð ØÔ! UÐ*Ð*Ø!�
Ø  d×&7Ò&7Ñ&9Ô&9Ô :Ñ:��å%Ø9¸DÔ<LÑLØÔ-ñô ð ð# Ô #Ò%Ð%ð* 	×Ò˜CÑ Ô Ð å�J Ð0@ÐAÑBÔBð 	Ý!Ø.°Ô0Iñô ð ð Œx×+Ò+ØØ)Ø-Øð	 ,ñ 
ô 
ð 	
r   c                 ó`  — |                       d¦  «        sJ ‚| j        }|                      d¬¦  «        }|                     ¦   «         st	          d|¦  «        ‚|                      ¦   «         }|                      ¦   «         }|                      d¦  «         | j        j	         
                    |¦  «        }|€D| j                             |¦  «        }|| j        j	        |<   | j                             ||¦  «         | j                             ||||¬¦  «        }|                     |¦  «         |S )NrS   Tr¤   z*Empty glyph class in mark class definitionrY   rH   )rh   rg   r¦   ÚglyphSetr   r�   Úexpect_class_name_r†   r2   ÚmarkClassesÚgetr0   rØ   r5   r˜   ÚMarkClassDefinitionÚaddDefinition)r@   rI   r©   r~   r]   rS   Úmcdefs          r   rp   zParser.parse_markClass_µ  s6  € Ø×#Ò# KÑ0Ô0Ð0Ð0Ð0ØÔ+ˆØ×'Ò'¸Ð'Ñ>Ô>ˆØ�ŠÑ Ô ð 	Ý!Ø<¸hñô ð ð ×#Ò#Ñ%Ô%ˆØ×&Ò&Ñ(Ô(ˆØ×Ò˜CÑ Ô Ð Ø”IÔ)×-Ò-¨dÑ3Ô3ˆ	ØÐØœ×*Ò*¨4Ñ0Ô0ˆIØ*3ˆDŒIÔ! $Ñ'ØÔ×%Ò% d¨IÑ6Ô6Ð6Ø”×,Ò,Ø�v˜v°ð -ñ 
ô 
ˆð 	×Ò Ñ&Ô&Ð&Øˆr   c                 óœ  — | j         dv sJ ‚| j        dk    r|                      ||¦  «        S | j        dk    r|                      ||¦  «        S | j        dk    r|                      ||¦  «        S | j        dk    r|                      ||¦  «        S | j        }|                      |¦  «        \  }}}}}}	|                      d¦  «         t          |¦  «        r>t          |¦  «        rt          d|¦  «        ‚| j                             |||||¬¦  «        S |sk|sit          |¦  «        d	k    rV|	sT|d
         €|                     ¦   «          | j                             |d
         |d
         |d         |d         ||¬¦  «        S |rt          d|¦  «        ‚| j                             t#          t%          ||¦  «        ¦  «        |||	|¬¦  «        S )N>   r	  r  ÚcursiveÚbaseÚligaturer’   rY   z3If "lookup" is present, no values must be specifiedrH   r-  r   r   )r°   rI   z2"enumerate" is only allowed with pair positionings©Ú
forceChainrI   )rf   r:   Úparse_position_cursive_Úparse_position_base_Úparse_position_ligature_Úparse_position_mark_rg   rþ   r†   rô   r   r0   ÚChainContextPosStatementr,   ÚreverseÚPairPosStatementÚSinglePosStatementÚlistÚzip)
r@   r°   rR   rI   rõ   r©   rö   r÷   rø   rù   s
             r   r±   zParser.parse_position_Ë  s,  € ØŒÐ"5Ð5Ð5Ð5Ð5ØÔ˜yÒ(Ð(Ø×/Ò/°
¸HÑEÔEÐEØÔ Ò'Ð'Ø×,Ò,¨Z¸ÑBÔBÐBØÔ Ò+Ð+Ø×0Ò0°¸XÑFÔFÐFØÔ Ò'Ð'Ø×,Ò,¨Z¸ÑBÔBÐBàÔ+ˆØ<@×<UÒ<UØñ=
ô =
Ñ9ˆ�˜ ¨°ð 	×Ò˜CÑ Ô Ð åˆw‰<Œ<ð 	å�6‰{Œ{ð Ý%ØIÈ8ñô ð ð ”8×4Ò4Ø˜ ¨¸(ð 5ñ ô ð ð ð 
	˜fð 
	­¨V©¬¸Ò)9Ð)9À(Ð)9Ø�aŒyÐ Ø—’Ñ Ô Ð Ø”8×,Ò,Ø�q”	Ø�q”	Ø�q”	Ø�q”	Ø%Ø!ð -ñ ô ð ð ð 	Ý!ØDÀhñô ð ð Œx×*Ò*Ý•�V˜VÑ$Ô$Ñ%Ô%ØØØØð +ñ 
ô 
ð 	
r   c                 ó@  — | j         }|                      d¦  «         |rt          d|¦  «        ‚|                      d¬¦  «        }|                      ¦   «         }|                      ¦   «         }|                      d¦  «         | j                             ||||¬¦  «        S )NrH  z>"enumerate" is not allowed with cursive attachment positioningTr¤   rY   rH   )rg   r‡   r   r¦   r�   r†   r0   ÚCursivePosStatement)r@   r°   rR   rI   r¿   ÚentryAnchorÚ
exitAnchors          r   rM  zParser.parse_position_cursive_   s´   € ØÔ+ˆØ×Ò˜YÑ'Ô'Ð'Øð 	Ý!ØSØñô ð ð ×+Ò+¸TÐ+ÑBÔBˆ
Ø×(Ò(Ñ*Ô*ˆØ×'Ò'Ñ)Ô)ˆ
Ø×Ò˜CÑ Ô Ð ØŒx×+Ò+Ø˜ Z¸(ð ,ñ 
ô 
ð 	
r   c                 ó  — | j         }|                      d¦  «         |rt          d|¦  «        ‚|                      d¬¦  «        }|                      ¦   «         }|                      d¦  «         | j                             |||¬¦  «        S )NrI  zC"enumerate" is not allowed with mark-to-base attachment positioningTr¤   rY   rH   )rg   r‡   r   r¦   r•   r†   r0   ÚMarkBasePosStatement)r@   r°   rR   rI   rI  Úmarkss         r   rN  zParser.parse_position_base_  sš   € ØÔ+ˆØ×Ò˜VÑ$Ô$Ð$Øð 	Ý!ð6àñô ð ð
 ×%Ò%°tÐ%Ñ<Ô<ˆØ×(Ò(Ñ*Ô*ˆØ×Ò˜CÑ Ô Ð ØŒx×,Ò,¨T°5À8Ð,ÑLÔLÐLr   c                 ó¼  — | j         }|                      d¦  «         |rt          d|¦  «        ‚|                      d¬¦  «        }|                      ¦   «         g}| j        dk    rG|                      d¦  «         |                     |                      ¦   «         ¦  «         | j        dk    °G|                      d¦  «         | j         	                    |||¬¦  «        S )NrJ  zG"enumerate" is not allowed with mark-to-ligature attachment positioningTr¤   ÚligComponentrY   rH   )
rg   r‡   r   r¦   r•   r:   rd   r†   r0   ÚMarkLigPosStatement)r@   r°   rR   rI   Ú	ligaturesr]  s         r   rO  zParser.parse_position_ligature_  sï   € ØÔ+ˆØ×Ò˜ZÑ(Ô(Ð(Øð 	Ý!ð:àñô ð ð
 ×*Ò*¸DÐ*ÑAÔAˆ	Ø×)Ò)Ñ+Ô+Ð,ˆØÔ .Ò0Ð0Ø× Ò  Ñ0Ô0Ð0Ø�LŠL˜×1Ò1Ñ3Ô3Ñ4Ô4Ð4ð Ô .Ò0Ð0ð 	×Ò˜CÑ Ô Ð ØŒx×+Ò+¨I°uÀxÐ+ÑPÔPÐPr   c                 ó  — | j         }|                      d¦  «         |rt          d|¦  «        ‚|                      d¬¦  «        }|                      ¦   «         }|                      d¦  «         | j                             |||¬¦  «        S )Nr’   zC"enumerate" is not allowed with mark-to-mark attachment positioningTr¤   rY   rH   )rg   r‡   r   r¦   r•   r†   r0   ÚMarkMarkPosStatement)r@   r°   rR   rI   Ú	baseMarksr]  s         r   rP  zParser.parse_position_mark_/  sš   € ØÔ+ˆØ×Ò˜VÑ$Ô$Ð$Øð 	Ý!ð6àñô ð ð
 ×*Ò*¸DÐ*ÑAÔAˆ	Ø×(Ò(Ñ*Ô*ˆØ×Ò˜CÑ Ô Ð ØŒx×,Ò,¨Y¸ÈÐ,ÑQÔQÐQr   c                 óÈ   — |                       d¦  «        sJ ‚| j        |                      ¦   «         }}|                      d¦  «         | j                             ||¬¦  «        S )NÚscriptrY   rH   )rh   rg   Úexpect_script_tag_r†   r0   ÚScriptStatement)r@   rI   rf  s      r   Úparse_script_zParser.parse_script_=  sc   € Ø×#Ò# HÑ-Ô-Ð-Ð-Ð-ØÔ3°T×5LÒ5LÑ5NÔ5N�&ˆØ×Ò˜CÑ Ô Ð ØŒx×'Ò'¨¸Ð'ÑBÔBÐBr   c           
      ó¸  — | j         dv sJ ‚| j        }| j         dv }|                      d¬¦  «        \  }}}}}}t          |¦  «        rt	          d|¦  «        ‚g }	| j        dk    rX|                      d¦  «        }
| j        dk    r7|                      dd¬	¦  «        }|	                     |¦  «         | j        dk    °7n:| j        d
k    r-|                      d
¦  «        }
|                      d¬¦  «        g}	nd }
|  	                    d¦  «         t          |	¦  «        dk    r$t          |¦  «        st	          d| j        ¦  «        ‚|
d
k    r®|rt	          d|¦  «        ‚t          |¦  «        dk    s+t          |d                              ¦   «         ¦  «        dk    rt	          d|¦  «        ‚t          |	¦  «        dk    rt	          d|¦  «        ‚| j                             ||d         ||	d         |¬¦  «        S t          d„ |D ¦   «         ¦  «        }d}t          |	¦  «        dk    r6t          |	d         t          j        ¦  «        r|rt	          d|¦  «        ‚g }	d}|�st          |¦  «        dk    rût          |	¦  «        dk    rè|dk    rât!          |d                              ¦   «         ¦  «        }t!          |	d                              ¦   «         ¦  «        }t          |¦  «        dk    r|t          |¦  «        z  }t          |¦  «        t          |¦  «        k    r/t	          dt          |¦  «        t          |¦  «        fz  |¦  «        ‚| j                             ||	||||¬¦  «        S |r?t          |¦  «        dk    r,|dk    r&| j                             ||d         |d||¬¦  «        S |�s2t          |¦  «        dk    �rt          |	¦  «        dk    �r
|dk    �rt          |d                              ¦   «         ¦  «        }|	D ]³}t!          |                     ¦   «         ¦  «        st	          d|¦  «        ‚t          |                     ¦   «         ¦  «        dk    r[t          |                     ¦   «         ¦  «        |k    r6t	          d|› dt          |                     ¦   «         ¦  «        › d�|¦  «        ‚Œ´| j                             ||d         ||	||¬¦  «        S |s¢t          |¦  «        dk    r�t          |	¦  «        dk    r|t          |	d                              ¦   «         ¦  «        dk    rQ|dk    rK| j                             |||t!          |	d                              ¦   «         ¦  «        d         ||¬¦  «        S |�rWt          |¦  «        dk    rt	          d|¦  «        ‚t          |	¦  «        dk    rt	          d|¦  «        ‚|dk    rt	          d|¦  «        ‚t)          t!          |d                              ¦   «         ¦  «        ¦  «        }t)          t!          |	d                              ¦   «         ¦  «        ¦  «        }t          |¦  «        dk    r|t          |¦  «        z  }t          |¦  «        t          |¦  «        k    r/t	          dt          |¦  «        t          |¦  «        fz  |¦  «        ‚| j                             ||||	|¬¦  «        S t          |¦  «        dk    r#t          |	¦  «        dk    rt	          d|¦  «        ‚t          |	¦  «        dk    s|rt	          d |¦  «        ‚| j                             |||||¬¦  «        }|S )!N>   r   ÚrsubÚ
reversesubr  >   rk  rl  FrQ   z-Substitution statements cannot contain valuesrí   rY   T)r¥   rå   rî   r¤   r   z3Expected "by", "from" or explicit lookup referencesz4Reverse chaining substitutions do not support "from"r   z%Expected a single glyph before "from"z)Expected a single glyphclass after "from"rH   c                 ó   — g | ]}|®|‘ŒS r!   r   )r   rÄ   s     r   r_   z,Parser.parse_substitute_.<locals>.<listcomp>v  s   € Ð?Ð?Ð? °°˜1°°°r   z<Reverse chaining substitutions do not support glyph deletionz\Expected a glyph class with %d elements after "by", but found a glyph class with %d elementsrK  r   zEmpty class in replacementz!Expected a glyph class with 1 or z3 elements after "by", but found a glyph class with z	 elementsz\In reverse chaining single substitutions, only a single glyph or glyph class can be replacedzlIn reverse chaining single substitutions, the replacement (after "by") must be a single glyph or glyph classz8Reverse chaining substitutions cannot call named lookupszJDirect substitution of multiple glyphs by multiple glyphs is not supportedzInvalid substitution statement)rf   rg   rþ   rô   r   r:   r‡   r¦   rd   r†   r,   r@  r0   ÚAlternateSubstStatementr×   rÓ   rU  ÚSingleSubstStatementÚMultipleSubstStatementÚLigatureSubstStatementÚsortedÚ ReverseChainSingleSubstStatementÚChainContextSubstStatement)r@   rI   rR  Ú
old_prefixÚoldrö   r÷   Ú
old_suffixrù   ÚnewÚkeywordrç   Únum_lookupsÚis_deletionr©   ÚreplacementsÚcountÚnÚrules                      r   Úparse_substitute_zParser.parse_substitute_C  sê  € ØŒÐ"MÐMÐMÐMÐMØÔ+ˆØ”/Ð%;Ð;ˆð ×%Ò%¨uÐ%Ñ5Ô5ñ	
ØØØØØØåˆv‰;Œ;ð 	Ý!Ø?Àñô ð ð ˆØÔ˜tÒ#Ð#Ø×*Ò*¨4Ñ0Ô0ˆGØÔ" cÒ)Ð)Ø×+Ò+¸TÈtÐ+ÑTÔT�Ø—
’
˜2‘”�ð Ô" cÒ)Ð)øð Ô Ò'Ð'Ø×*Ò*¨6Ñ2Ô2ˆGØ×)Ò)¸5Ð)ÑAÔAÐBˆCˆCàˆGØ×Ò˜CÑ Ô Ð Ýˆs‰8Œ8�qŠ=ˆ=¥ W¡¤ˆ=Ý!ØEØÔ(ñô ð ð �fÒÐØð Ý%ØJÈHñô ð õ �3‰xŒx˜1Š}ˆ}¥ C¨¤F§O¢OÑ$5Ô$5Ñ 6Ô 6¸!Ò ;Ð ;Ý%Ð&MÈxÑXÔXÐXÝ�3‰xŒx˜1Š}ˆ}Ý%Ø?Àñô ð ð ”8×3Ò3Ø˜C œF J°°A´Àð 4ñ ô ð õ Ð?Ð? gÐ?Ñ?Ô?Ñ@Ô@ˆàˆÝˆs‰8Œ8�qŠ=ˆ=�Z¨¨A¬µ´Ñ>Ô>ˆ=Øð Ý%ØRØñô ð ð ˆCØˆKð ñ 	�3˜s™8œ8 qš=˜=­S°©X¬X¸ª]¨]¸{ÈaÒ?OÐ?OÝ˜#˜aœ&Ÿ/š/Ñ+Ô+Ñ,Ô,ˆFÝ  A¤§¢Ñ 1Ô 1Ñ2Ô2ˆLÝ�<Ñ Ô  AÒ%Ð%Ø+­c°&©k¬kÑ9�Ý�6‰{Œ{�c ,Ñ/Ô/Ò/Ð/Ý%ð?å˜6‘{”{¥C¨Ñ$5Ô$5Ð6ñ7ð ñ	ô ð ð ”8×0Ò0Ø�S˜* j¸XÐPXð 1ñ ô ð ð ð 	�3˜s™8œ8 qš=˜=¨[¸AÒ-=Ð-=Ø”8×2Ò2ØØ�A”ØØØ#Ø!ð 3ñ ô ð ð  ñ 	�3˜s™8œ8 qš=™=­S°©X¬X¸ª\©\¸kÈQÒ>NÑ>NÝ˜˜AœŸšÑ)Ô)Ñ*Ô*ˆEØð ð �Ý˜AŸJšJ™LœLÑ)Ô)ð RÝ)Ð*FÈÑQÔQÐQÝ�q—z’z‘|”|Ñ$Ô$¨Ò)Ð)­c°!·*²*±,´,Ñ.?Ô.?À5Ò.HÐ.HÝ)ðU¸Eð Uð UÝ8;¸A¿JºJ¹L¼LÑ8IÔ8IðUð Uð Uà ñô ð øð
 ”8×2Ò2ØØ�A”ØØØ#Ø!ð 3ñ ô ð ð ð	å�C‘”˜1’�Ý�C‘”˜A’�Ý�C˜”F—O’OÑ%Ô%Ñ&Ô&¨!Ò+Ð+Ø˜qÒ Ð à”8×2Ò2ØØØÝ�S˜”V—_’_Ñ&Ô&Ñ'Ô'¨Ô*Ø#Ø!ð 3ñ ô ð ð ñ 	Ý�3‰xŒx˜1Š}ˆ}Ý%ðIàñô ð õ
 �3‰xŒx˜1Š}ˆ}Ý%ð%ð ñ	ô ð ð ˜aÒÐÝ%ØNÐPXñô ð õ �D  Q¤§¢Ñ!2Ô!2Ñ3Ô3Ñ4Ô4ˆFÝ!¥$ s¨1¤v§¢Ñ'8Ô'8Ñ"9Ô"9Ñ:Ô:ˆLÝ�<Ñ Ô  AÒ%Ð%Ø+­c°&©k¬kÑ9�Ý�6‰{Œ{�c ,Ñ/Ô/Ò/Ð/Ý%ð?å˜6‘{”{¥C¨Ñ$5Ô$5Ð6ñ7ð ñ	ô ð ð ”8×<Ò<Ø˜J¨¨S¸8ð =ñ ô ð õ ˆs‰8Œ8�aŠ<ˆ<�C ™HœH qšL˜LÝ!ð#àñô ð õ ˆs‰8Œ8�qŠ=ˆ=˜Kˆ=Ý!Ð"BÀHÑMÔMÐMð Œx×2Ò2Ø˜˜Z¨¸8ð 3ñ 
ô 
ˆð ˆr   c                 óž   — |                       d¦  «        sJ ‚| j        }|                      d¦  «         | j                             |¬¦  «        S )NÚsubtablerY   rH   )rh   rg   r†   r0   ÚSubtableStatement)r@   rI   s     r   Úparse_subtable_zParser.parse_subtable_  sQ   € Ø×#Ò# JÑ/Ô/Ð/Ð/Ð/ØÔ+ˆØ×Ò˜CÑ Ô Ð ØŒx×)Ò)°8Ð)Ñ<Ô<Ð<r   c                 ó˜  — |                       d¦  «        sJ ‚| j        }|                      ¦   «         }|                      ¦   «         }d}d}| j        t
          j        t
          j        fv s|dk    r(|                      ¦   «         }|                      ¦   «         }|                      d¦  «         | j	         
                    |||||¬¦  «        S )NÚ
parametersg        r   rY   rH   )rh   rg   Úexpect_decipoint_r�   r9   r   r8  ÚFLOATr†   r0   ÚSizeParameters)r@   rI   Ú
DesignSizeÚSubfamilyIDÚ
RangeStartÚRangeEnds         r   Úparse_size_parameters_zParser.parse_size_parameters_  sÔ   € ð ×#Ò# LÑ1Ô1Ð1Ð1Ð1ØÔ+ˆØ×+Ò+Ñ-Ô-ˆ
Ø×)Ò)Ñ+Ô+ˆØˆ
ØˆØÔ ¥U¤\µ5´;Ð$?Ð?Ð?À;ÐRSÒCSÐCSØ×/Ò/Ñ1Ô1ˆJØ×-Ò-Ñ/Ô/ˆHà×Ò˜CÑ Ô Ð ØŒx×&Ò&Ø˜ Z°ÀHð 'ñ 
ô 
ð 	
r   c                 ó°   — |                       d¦  «        sJ ‚| j        }|                      ¦   «         \  }}}}| j                             d|||||¬¦  «        S )NÚsizemenunameÚsizerH   )rh   rg   Úparse_name_r0   ÚFeatureNameStatement)r@   rI   Ú
platformIDÚ	platEncIDÚlangIDÚstrings         r   Úparse_size_menuname_zParser.parse_size_menuname_  sj   € Ø×#Ò# NÑ3Ô3Ð3Ð3Ð3ØÔ+ˆØ04×0@Ò0@Ñ0BÔ0BÑ-ˆ
�I˜v vØŒx×,Ò,Ø�J 	¨6°6ÀHð -ñ 
ô 
ð 	
r   c           	      óš  — |                       d¦  «        sJ ‚| j        |                      ¦   «         }}| j                             ||¬¦  «        }|                      d¦  «         | j        | j        | j        | j	        | j
        | j        | j        | j        dœ                     |¦  «        }|r ||¦  «         n%t          d|                     ¦   «         z  |¦  «        ‚|                      d¦  «         |                      ¦   «         }||k    r*t          d|                     ¦   «         z  | j        ¦  «        ‚|                      d¦  «         |S )	NrW   rH   Ú{)ÚGDEFÚheadÚhheaÚvhear]   ÚBASEzOS/2ÚSTATz"table %s" is not supportedrš   úExpected "%s"rY   )rh   rg   r›   r0   Ú
TableBlockr†   Úparse_table_GDEF_Úparse_table_head_Úparse_table_hhea_Úparse_table_vhea_Úparse_table_name_Úparse_table_BASE_Úparse_table_OS_2_Úparse_table_STAT_rC  r   Ústrip)r@   rI   r]   rW   Úhandlerr¡   s         r   rs   zParser.parse_table_"  s]  € Ø×#Ò# GÑ,Ô,Ð,Ð,Ð,ØÔ1°4×3CÒ3CÑ3EÔ3E�$ˆØ”×#Ò# D°8Ð#Ñ<Ô<ˆØ×Ò˜CÑ Ô Ð àÔ*ØÔ*ØÔ*ØÔ*ØÔ*ØÔ*ØÔ*ØÔ*ð	
ð 	
÷ Š#ˆd‰)Œ)ð 	ð ð 	ØˆG�E‰NŒNˆNˆNå!Ø-°·
²
±´Ñ<¸hñô ð ð 	×Ò˜CÑ Ô Ð Ø×"Ò"Ñ$Ô$ˆØ�dŠ?ˆ?Ý!Ø $§*¢*¡,¤,Ñ.°Ô0Hñô ð ð 	×Ò˜CÑ Ô Ð Øˆr   c                 óZ  — |j         }| j        dk    s| j        �r�|                      d¬¦  «         | j        t
          j        u r;|                     | j         	                    | j
        | j        ¬¦  «        ¦  «         �n|                      d¦  «        r(|                     |                      ¦   «         ¦  «         nÙ|                      d¦  «        r(|                     |                      ¦   «         ¦  «         nœ|                      d¦  «        r(|                     |                      ¦   «         ¦  «         n_|                      d¦  «        r(|                     |                      ¦   «         ¦  «         n"| j
        d	k    r�Œxt#          d
| j        ¦  «        ‚| j        dk    �°†| j        �°Žd S d S )Nrš   Tr'   rH   r£   r´   r  r!  rY   z<Expected Attach, LigatureCaretByIndex, or LigatureCaretByPos)ra   r:   r;   r?   rb   r   rc   rd   r0   re   rf   rg   rh   r«   r»   r  r#  r   ©r@   rW   ra   s      r   r£  zParser.parse_table_GDEF_@  s¸  € ØÔ%ˆ
ØÔ #Ò%Ð%¨Ô);Ñ%Ø×Ò¨ÐÑ.Ô.Ð.ØÔ#¥u¤}Ð4Ð4Ø×!Ò!Ø”H×$Ò$ T¤_¸tÔ?WÐ$ÑXÔXñô ð ñ ð ×%Ò% hÑ/Ô/ð Ø×!Ò! $×"4Ò"4Ñ"6Ô"6Ñ7Ô7Ð7Ð7Ø×%Ò% oÑ6Ô6ð Ø×!Ò! $×";Ò";Ñ"=Ô"=Ñ>Ô>Ð>Ð>Ø×%Ò%Ð&<Ñ=Ô=ð 
Ø×!Ò! $×"BÒ"BÑ"DÔ"DÑEÔEÐEÐEØ×%Ò%Ð&:Ñ;Ô;ð Ø×!Ò! $×"@Ò"@Ñ"BÔ"BÑCÔCÐCÐCØ” CÒ'Ð'Ùå%ØUØÔ,ñô ð ð# Ô #Ò%Ñ%¨Ô);Ñ%Ð%Ð%Ð%Ð%r   c                 óâ  — |j         }| j        dk    s| j        rÕ|                      d¬¦  «         | j        t
          j        u r:|                     | j         	                    | j
        | j        ¬¦  «        ¦  «         n^|                      d¦  «        r(|                     |                      ¦   «         ¦  «         n!| j
        dk    rŒ¾t          d| j        ¦  «        ‚| j        dk    °Ì| j        °Ód S d S )Nrš   Tr'   rH   ÚFontRevisionrY   zExpected FontRevision)ra   r:   r;   r?   rb   r   rc   rd   r0   re   rf   rg   rh   Úparse_FontRevision_r   r®  s      r   r¤  zParser.parse_table_head_X  s  € ØÔ%ˆ
ØÔ #Ò%Ð%¨Ô);Ð%Ø×Ò¨ÐÑ.Ô.Ð.ØÔ#¥u¤}Ð4Ð4Ø×!Ò!Ø”H×$Ò$ T¤_¸tÔ?WÐ$ÑXÔXñô ð ð ð ×%Ò% nÑ5Ô5ð YØ×!Ò! $×":Ò":Ñ"<Ô"<Ñ=Ô=Ð=Ð=Ø” CÒ'Ð'Øå%Ð&=¸tÔ?WÑXÔXÐXð Ô #Ò%Ð%¨Ô);Ð%Ð%Ð%Ð%Ð%r   c                 ó²  — |j         }d}| j        dk    s| j        �r:|                      d¬¦  «         | j        t
          j        u r:|                     | j         	                    | j
        | j        ¬¦  «        ¦  «         nÁ| j        t
          j        u rŒ| j
        |v rƒ| j
                             ¦   «         }|                      ¦   «         }|                     | j                             ||| j        ¬¦  «        ¦  «         | j        dk    rt!          d| j        ¦  «        ‚n"| j
        dk    r�Œ"t!          d| j        ¦  «        ‚| j        dk    �°0| j        �°8d S d S )	N)ÚCaretOffsetÚAscenderÚ	DescenderÚLineGaprš   Tr'   rH   rY   úIncomplete statementz4Expected CaretOffset, Ascender, Descender or LineGap)ra   r:   r;   r?   rb   r   rc   rd   r0   re   rf   rg   ru   Úlowerr�   Ú	HheaFieldr   r<   ©r@   rW   ra   ÚfieldsÚkeyr:  s         r   r¥  zParser.parse_table_hhea_g  s}  € ØÔ%ˆ
ØDˆØÔ #Ò%Ð%¨Ô);Ñ%Ø×Ò¨ÐÑ.Ô.Ð.ØÔ#¥u¤}Ð4Ð4Ø×!Ò!Ø”H×$Ò$ T¤_¸tÔ?WÐ$ÑXÔXñô ð ð ð Ô%­¬Ð3Ð3¸¼È6Ð8QÐ8QØ”o×+Ò+Ñ-Ô-�Ø×+Ò+Ñ-Ô-�Ø×!Ò!Ø”H×&Ò& s¨E¸DÔ<TÐ&ÑUÔUñô ð ð Ô# sÒ*Ð*Ý)Ø.°Ô0Iñô ð ð +ð ” CÒ'Ð'Ùå%ØMØÔ,ñô ð ð' Ô #Ò%Ñ%¨Ô);Ñ%Ð%Ð%Ð%Ð%r   c                 ó²  — |j         }d}| j        dk    s| j        �r:|                      d¬¦  «         | j        t
          j        u r:|                     | j         	                    | j
        | j        ¬¦  «        ¦  «         nÁ| j        t
          j        u rŒ| j
        |v rƒ| j
                             ¦   «         }|                      ¦   «         }|                     | j                             ||| j        ¬¦  «        ¦  «         | j        dk    rt!          d| j        ¦  «        ‚n"| j
        dk    r�Œ"t!          d| j        ¦  «        ‚| j        dk    �°0| j        �°8d S d S )	N)ÚVertTypoAscenderÚVertTypoDescenderÚVertTypoLineGaprš   Tr'   rH   rY   r·  z?Expected VertTypoAscender, VertTypoDescender or VertTypoLineGap)ra   r:   r;   r?   rb   r   rc   rd   r0   re   rf   rg   ru   r¸  r�   Ú	VheaFieldr   r<   rº  s         r   r¦  zParser.parse_table_vhea_‚  s  € ØÔ%ˆ
ØMˆØÔ #Ò%Ð%¨Ô);Ñ%Ø×Ò¨ÐÑ.Ô.Ð.ØÔ#¥u¤}Ð4Ð4Ø×!Ò!Ø”H×$Ò$ T¤_¸tÔ?WÐ$ÑXÔXñô ð ð ð Ô%­¬Ð3Ð3¸¼È6Ð8QÐ8QØ”o×+Ò+Ñ-Ô-�Ø×+Ò+Ñ-Ô-�Ø×!Ò!Ø”H×&Ò& s¨E¸DÔ<TÐ&ÑUÔUñô ð ð Ô# sÒ*Ð*Ý)Ø.°Ô0Iñô ð ð +ð ” CÒ'Ð'Ùå%ð;àÔ,ñô ð ð' Ô #Ò%Ñ%¨Ô);Ñ%Ð%Ð%Ð%Ð%r   c                 óê  — |j         }| j        dk    s| j        rÙ|                      d¬¦  «         | j        t
          j        u r:|                     | j         	                    | j
        | j        ¬¦  «        ¦  «         nb|                      d¦  «        r,|                      ¦   «         }|r|                     |¦  «         n!| j
        dk    rŒÂt          d| j        ¦  «        ‚| j        dk    °Ð| j        °×d S d S )Nrš   Tr'   rH   ÚnameidrY   zExpected nameid)ra   r:   r;   r?   rb   r   rc   rd   r0   re   rf   rg   rh   Úparse_nameid_r   )r@   rW   ra   Ú	statements       r   r§  zParser.parse_table_name_ž  s  € ØÔ%ˆ
ØÔ #Ò%Ð%¨Ô);Ð%Ø×Ò¨ÐÑ.Ô.Ð.ØÔ#¥u¤}Ð4Ð4Ø×!Ò!Ø”H×$Ò$ T¤_¸tÔ?WÐ$ÑXÔXñô ð ð ð ×%Ò% hÑ/Ô/ð SØ ×.Ò.Ñ0Ô0�	Øð 1Ø×%Ò% iÑ0Ô0Ð0øØ” CÒ'Ð'Øå%Ð&7¸Ô9QÑRÔRÐRð Ô #Ò%Ð%¨Ô);Ð%Ð%Ð%Ð%Ð%r   c                 ó  — d}d}| j         t          j        v rk|                      ¦   «         }| j        }|dvrt          d|¦  «        ‚| j         t          j        v r(|                      ¦   «         }|                      ¦   «         }n	d}| j        }|dk    r	|pd}|pd}n|pd}|pd}|                      ¦   «         }|                      d¦  «         t          |||¦  «        }|€t          d	|¦  «        ‚|  	                    ||¦  «        }||||fS )
z~Parses a name record. See `section 9.e <https://adobe-type-tools.github.io/afdko/OpenTypeFeatureFileSpecification.html#9.e>`_.N©r   é   úExpected platform id 1 or 3rÈ  r   r   é	  rY   úUnsupported encoding)
r9   r   ÚNUMBERSÚexpect_any_number_rg   r   Úexpect_string_r†   r   Úunescape_string_©r@   r•  r–  r”  rI   r—  ÚencodingÚ	unescapeds           r   r’  zParser.parse_name_¯  s2  € àˆ	ØˆØÔ ¥E¤MÐ1Ð1Ø×0Ò0Ñ2Ô2ˆJØÔ/ˆHØ Ð'Ð'Ý%Ð&CÀXÑNÔNÐNØÔ$­¬Ð5Ð5Ø ×3Ò3Ñ5Ô5�	Ø×0Ò0Ñ2Ô2�øàˆJØÔ/ˆHà˜Š?ˆ?Ø!˜ QˆIØ�[˜qˆFˆFà!˜ QˆIØÐ%˜vˆFà×$Ò$Ñ&Ô&ˆØ×Ò˜CÑ Ô Ð å˜z¨9°fÑ=Ô=ˆØÐÝ!Ð"8¸(ÑCÔCÐCØ×)Ò)¨&°(Ñ;Ô;ˆ	Ø˜9 f¨iÐ7Ð7r   c                 óì  — d }d }| j         t          j        v rk|                      ¦   «         }| j        }|dvrt          d|¦  «        ‚| j         t          j        v r(|                      ¦   «         }|                      ¦   «         }n	d}| j        }|dk    r	|pd}|pd}n|pd}|pd}|                      ¦   «         }t          |||¦  «        }|€t          d|¦  «        ‚|                      ||¦  «        }||||fS )NrÇ  rÉ  rÈ  r   r   rÊ  rË  )	r9   r   rÌ  rÍ  rg   r   rÎ  r   rÏ  rÐ  s           r   Úparse_stat_name_zParser.parse_stat_name_Ï  s  € Øˆ	ØˆØÔ ¥E¤MÐ1Ð1Ø×0Ò0Ñ2Ô2ˆJØÔ/ˆHØ Ð'Ð'Ý%Ð&CÀXÑNÔNÐNØÔ$­¬Ð5Ð5Ø ×3Ò3Ñ5Ô5�	Ø×0Ò0Ñ2Ô2�øàˆJØÔ/ˆHà˜Š?ˆ?Ø!˜ QˆIØ�[˜qˆFˆFà!˜ QˆIØÐ%˜vˆFà×$Ò$Ñ&Ô&ˆÝ˜z¨9°fÑ=Ô=ˆØÐÝ!Ð"8¸(ÑCÔCÐCØ×)Ò)¨&°(Ñ;Ô;ˆ	Ø˜9 f¨iÐ7Ð7r   c                 ó  — | j         dk    sJ | j         ¦   «         ‚| j        |                      ¦   «         }}|dk    rt          d| j        ¦  «        ‚|                      ¦   «         \  }}}}| j                             ||||||¬¦  «        S )NrÃ  iÿ  z*Name id value cannot be greater than 32767rH   )rf   rg   rÍ  r   r’  r0   Ú
NameRecord)r@   rI   ÚnameIDr”  r•  r–  r—  s          r   rÄ  zParser.parse_nameid_ì  s¢   € ØŒ (Ò*Ð*Ð*¨D¬OÑ*Ô*Ð*ØÔ3°T×5LÒ5LÑ5NÔ5N�&ˆØ�EŠ>ˆ>Ý!Ø<¸dÔ>Vñô ð ð 15×0@Ò0@Ñ0BÔ0BÑ-ˆ
�I˜v vØŒx×"Ò"Ø�J 	¨6°6ÀHð #ñ 
ô 
ð 	
r   c                 óÄ   ‡ ‡— ‰dk    rt          j        d‰ j        |¦  «        }nˆˆ fd„}t          j        d||¦  «        }t          |dd¦  «        }t	          |d¦  «        S )NÚ	utf_16_bez\\[0-9a-fA-F]{4}c                 ó0   •— ‰                      | ‰¦  «        S r!   )Úunescape_byte_)ÚmrÑ  r@   s    €€r   ú<lambda>z)Parser.unescape_string_.<locals>.<lambda>ü  s   ø€  ×!4Ò!4°Q¸Ñ!AÔ!A€ r   z\\[0-9a-fA-F]{2}Úsurrogatepass)Úrer   Úunescape_unichr_r
   r   )r@   r—  rÑ  r   ÚunescapeÚutf16s   ` `   r   rÏ  zParser.unescape_string_ø  sp   øø€ Ø�{Ò"Ð"Ý”Ð*¨DÔ,AÀ6ÑJÔJˆAˆAàAÐAÐAÐAÐAˆHÝ”Ð*¨H°fÑ=Ô=ˆAõ ˜˜;¨Ñ8Ô8ˆÝ�U˜KÑ(Ô(Ð(r   c                 óv   — |                       d¦  «        dd …         }t          t          |d¦  «        ¦  «        S ©Nr   r   é   )ÚgroupÚchrÚint)Úmatchr~  s     r   rà  zParser.unescape_unichr_  s.   € à�KŠK˜‰NŒN˜1˜2˜2ÔˆÝ•3�q˜"‘:”:‰ŒÐr   c                 óœ   — |                       d¦  «        dd …         }t          t          |d¦  «        ¦  «                             |¦  «        S rä  )ræ  r	   rè  Údecode)ré  rÑ  r~  s      r   rÛ  zParser.unescape_byte_	  s>   € à�KŠK˜‰NŒN˜1˜2˜2ÔˆÝ•s˜1˜b‘z”zÑ"Ô"×)Ò)¨(Ñ3Ô3Ð3r   c                 óŒ   — t          |¦  «        D ]3}t          || j        j        ¦  «        rŒt          ||¦  «        r|c S  d S d S r!   )Úreversedr×   r0   re   )r@   ra   Úclass_Úpreviouss       r   Úfind_previouszParser.find_previous  s\   € Ý  Ñ,Ô,ð 	ð 	ˆHÝ˜( D¤HÔ$4Ñ5Ô5ð ØÝ˜H fÑ-Ô-ð Ø���ð �t�tàˆtr   c                 ó  — |j         }| j        dk    s| j        �rå|                      d¬¦  «         | j        t
          j        u r;|                     | j         	                    | j
        | j        ¬¦  «        ¦  «         �nk|                      d¦  «        r|                      ¦   «         }�n@|                      d¦  «        rZ|                      t          |¦  «        ¦  «        }|                     | j                             ||d| j        ¬¦  «        ¦  «         �nÑ|                      d¦  «        r�|                      |t          j        ¦  «        }|€t%          d	| j        ¦  «        ‚|j        rt%          d
| j        ¦  «        ‚|j                             |                      ¦   «         ¦  «         �n;|                      d¦  «        r|                      ¦   «         }�n|                      d¦  «        rY|                      t          |¦  «        ¦  «        }|                     | j                             ||d| j        ¬¦  «        ¦  «         n¢|                      d¦  «        r€|                      |t          j        ¦  «        }|€t%          d	| j        ¦  «        ‚|j        st%          d| j        ¦  «        ‚|j                             |                      ¦   «         ¦  «         n| j
        dk    r�Œâ| j        dk    �°Û| j        �°ãd S d S )Nrš   Tr'   rH   úHorizAxis.BaseTagListúHorizAxis.BaseScriptListFzHorizAxis.MinMaxz)MinMax must be preceded by BaseScriptListz9HorizAxis.MinMax must be preceded by HorizAxis statementsúVertAxis.BaseTagListúVertAxis.BaseScriptListzVertAxis.MinMaxz7VertAxis.MinMax must be preceded by VertAxis statementsrY   )ra   r:   r;   r?   rb   r   rc   rd   r0   re   rf   rg   rh   Úparse_base_tag_list_Úparse_base_script_list_r,   ÚBaseAxisrð  r   rR   ÚminmaxÚparse_base_minmax_)r@   rW   ra   Úhoriz_basesÚhoriz_scriptsÚbase_script_listÚ
vert_basesÚvert_scriptss           r   r¨  zParser.parse_table_BASE_  s>  € ØÔ%ˆ
ØÔ #Ò%Ð%¨Ô);Ñ%Ø×Ò¨ÐÑ.Ô.Ð.ØÔ#¥u¤}Ð4Ð4Ø×!Ò!Ø”H×$Ò$ T¤_¸tÔ?WÐ$ÑXÔXñô ð ñ ð ×%Ò%Ð&=Ñ>Ô>ð 3Ø"×7Ò7Ñ9Ô9�‘Ø×%Ò%Ð&@ÑAÔAð 1Ø $× <Ò <½SÀÑ=MÔ=MÑ NÔ N�Ø×!Ò!Ø”H×%Ò%Ø#Ø%ØØ!%Ô!9ð	 &ñ ô ñô ð ñ ð ×%Ò%Ð&8Ñ9Ô9ð 'Ø#'×#5Ò#5°jÅ#Ä,Ñ#OÔ#OÐ Ø#Ð+Ý)ØCØÔ0ñô ð ð $Ô,ð Ý)ØSØÔ0ñô ð ð !Ô'×.Ò.¨t×/FÒ/FÑ/HÔ/HÑIÔIÐIÑIØ×%Ò%Ð&<Ñ=Ô=ð Ø!×6Ò6Ñ8Ô8�
‘
Ø×%Ò%Ð&?Ñ@Ô@ð Ø#×;Ò;½CÀ
¹O¼OÑLÔL�Ø×!Ò!Ø”H×%Ò%Ø"Ø$ØØ!%Ô!9ð	 &ñ ô ñô ð ð ð ×%Ò%Ð&7Ñ8Ô8ð Ø#'×#5Ò#5°jÅ#Ä,Ñ#OÔ#OÐ Ø#Ð+Ý)ØCØÔ0ñô ð ð (Ô0ð Ý)ØQØÔ0ñô ð ð !Ô'×.Ò.¨t×/FÒ/FÑ/HÔ/HÑIÔIÐIÐIØ” CÒ'Ð'Ùðs Ô #Ò%Ñ%¨Ô);Ñ%Ð%Ð%Ð%Ð%r   c                 óÜ  — |j         }d}d}| j        dk    s| j        �rÍ|                      d¬¦  «         | j        t
          j        u r;|                     | j         	                    | j
        | j        ¬¦  «        ¦  «         �nS| j        t
          j        u �r2| j
                             ¦   «         }d }| j
        |v r|                      ¦   «         }nÃ|                      d¦  «        r<g }t!          d¦  «        D ])}|                     |                      ¦   «         ¦  «         Œ*nr| j
        |v r@g }| j        d	k    r2|                     |                      ¦   «         ¦  «         | j        d	k    °2n)|                      d
¦  «        r|                      ¦   «         }|                     | j                             ||| j        ¬¦  «        ¦  «         n| j
        d	k    r�ŒÊ| j        dk    �°Ã| j        �°Ëd S d S )N)ÚFSTypeÚTypoAscenderÚTypoDescenderÚTypoLineGapÚ	winAscentÚ
winDescentÚXHeightÚ	CapHeightÚWeightClassÚ
WidthClassÚLowerOpSizeÚUpperOpSize)ÚUnicodeRangeÚCodePageRangerš   Tr'   rH   ÚPanoseé
   rY   ÚVendor)ra   r:   r;   r?   rb   r   rc   rd   r0   re   rf   rg   ru   r¸  r�   rh   rÆ   rÎ  ÚOS2Field)r@   rW   ra   ÚnumbersrË   r¼  r:  r   s           r   r©  zParser.parse_table_OS_2_X  s  € ØÔ%ˆ
ð
ˆð 3ˆØÔ #Ò%Ð%¨Ô);Ñ%Ø×Ò¨ÐÑ.Ô.Ð.ØÔ#¥u¤}Ð4Ð4Ø×!Ò!Ø”H×$Ò$ T¤_¸tÔ?WÐ$ÑXÔXñô ð ñ ð Ô%­¬Ð3Ñ3Ø”o×+Ò+Ñ-Ô-�Ø�Ø”? gÐ-Ð-Ø ×/Ò/Ñ1Ô1�E�EØ×)Ò)¨(Ñ3Ô3ð 	2Ø�EÝ" 2™YœYð <ð <˜ØŸš T×%8Ò%8Ñ%:Ô%:Ñ;Ô;Ð;Ð;ð<à”_¨Ð.Ð.Ø�EØÔ*¨cÒ1Ð1ØŸš T×%8Ò%8Ñ%:Ô%:Ñ;Ô;Ð;ð Ô*¨cÒ1Ð1øà×)Ò)¨(Ñ3Ô3ð 2Ø ×/Ò/Ñ1Ô1�EØ×!Ò!Ø”H×%Ò% c¨5¸4Ô;SÐ%ÑTÔTñô ð ð ð ” CÒ'Ð'Ùð3 Ô #Ò%Ñ%¨Ô);Ñ%Ð%Ð%Ð%Ð%r   c                 óN  — |                       d¦  «        sJ ‚|                      d¦  «         g }| j        dk    s| j        r¸|                      ¦   «          |                       d¦  «        rT|                      ¦   «         \  }}}}| j                             d||||| j        ¬¦  «        }| 	                    |¦  «         n)| j
        dk    rt          d| j
        › d	�| j        ¦  «        ‚| j        dk    °±| j        °¸|                      d¦  «         |st          d
| j        ¦  «        ‚|S )NÚElidedFallbackNamerš  rš   r]   ÚstatrH   rY   úUnexpected token z in ElidedFallbackNameúExpected "name")rh   r†   r:   r;   r?   rÔ  r0   ÚSTATNameStatementrg   rd   rf   r   )r@   Únamesr”  r•  r–  r—  Ú
nameRecords          r   Úparse_STAT_ElidedFallbackNamez$Parser.parse_STAT_ElidedFallbackName„  s[  € Ø×#Ò#Ð$8Ñ9Ô9Ð9Ð9Ð9Ø×Ò˜CÑ Ô Ð ØˆØÔ #Ò%Ð%¨Ô);Ð%Ø×ÒÑ!Ô!Ð!Ø×#Ò# FÑ+Ô+ð Ø8<×8MÒ8MÑ8OÔ8OÑ5�
˜I v¨vØ!œX×7Ò7ØØØØØØ!Ô5ð 8ñ ô �
ð —’˜ZÑ(Ô(Ð(Ð(à”? cÒ)Ð)Ý)ØW¨D¬OÐWÐWÐWØÔ0ñô ð ð Ô #Ò%Ð%¨Ô);Ð%ð& 	×Ò˜CÑ Ô Ð Øð 	OÝ!Ð"3°TÔ5MÑNÔNÐNØˆr   c                 óH  — |                       d¦  «        sJ ‚g }|                      ¦   «         }|dvr2|                     ¦   «         st                               d|› d�¦  «         |                      ¦   «         }|                      d¦  «         | j        dk    s| j        rÎ|  	                    ¦   «          | j
        t          j        u rŒ:|                       d¦  «        rV| j        }|                      ¦   «         \  }}}}| j                             d|||||¬	¦  «        }	|                     |	¦  «         n)| j        d
k    rŒ±t'          d| j        › �| j        ¦  «        ‚| j        dk    °Ç| j        °Î|                      d¦  «         | j                             |||| j        ¦  «        S )NÚ
DesignAxis)ÚitalÚopszÚslntÚwdthÚwghtzUnregistered axis tag z should be uppercase.rš  rš   r]   r  rH   rY   zExpected "name", got )rh   r›   ÚisupperrÞ   rß   r�   r†   r:   r;   r?   rb   r   rc   rg   rÔ  r0   r  rd   rf   r   ÚSTATDesignAxisStatement)
r@   r  ÚaxisTagÚ	axisOrderrI   r”  r•  r–  r—  r]   s
             r   Úparse_STAT_design_axiszParser.parse_STAT_design_axis   sÑ  € Ø×#Ò# LÑ1Ô1Ð1Ð1Ð1ØˆØ×"Ò"Ñ$Ô$ˆàÐCÐCÐCØ—O’OÑ%Ô%ð Dõ �KŠKÐO°ÐOÐOÐOÑPÔPÐPØ×'Ò'Ñ)Ô)ˆ	Ø×Ò˜CÑ Ô Ð ØÔ #Ò%Ð%¨Ô);Ð%Ø×ÒÑ!Ô!Ð!ØÔ#¥u¤}Ð4Ð4ØØ×%Ò% fÑ-Ô-ð ØÔ3�Ø8<×8MÒ8MÑ8OÔ8OÑ5�
˜I v¨vØ”x×1Ò1Ø˜J¨	°6¸6ÈHð 2ñ ô �ð —’˜TÑ"Ô"Ð"Ð"Ø” CÒ'Ð'Øå%Ø=¨D¬OÐ=Ð=¸tÔ?Wñô ð ð Ô #Ò%Ð%¨Ô);Ð%ð$ 	×Ò˜CÑ Ô Ð ØŒx×/Ò/Ø�Y  tÔ'?ñ
ô 
ð 	
r   c                 ó  — |                       d¦  «        sJ ‚|                      d¦  «         g }g }d}| j        dk    s| j        �r=|                      d¬¦  «         | j        t          j        u rŒ=|                       d¦  «        rV| j        }|  	                    ¦   «         \  }}}}| j
                             d|||||¬	¦  «        }	|                     |	¦  «         n”|                       d
¦  «        r*|                      ¦   «         }|                     |¦  «         nU|                       d¦  «        r|                      ¦   «         }n+| j        dk    r�Œt!          d| j        › d�| j        ¦  «        ‚| j        dk    �°5| j        �°=|                      d¦  «         |st!          d| j        ¦  «        ‚|st!          d| j        ¦  «        ‚t#          |¦  «        dk    rˆ|D ]E}t#          |j        ¦  «        dk    r+t!          dt#          |j        ¦  «        › d�| j        ¦  «        ‚ŒFg }
|D ];}|j        }||
v rt!          d|› d�| j        ¦  «        ‚|
                     |¦  «         Œ<| j
                             |||| j        ¦  «        S )NÚ	AxisValuerš  r   rš   Tr'   r]   r  rH   rI   ÚflagrY   r  z in AxisValuezExpected "Axis Name"zExpected "Axis location"r   z?Only one value is allowed in a Format 4 Axis Value Record, but z were found.ú	Axis tag z already defined.)rh   r†   r:   r;   r?   rb   r   rc   rg   rÔ  r0   r  rd   Úparse_STAT_locationÚexpect_stat_flagsrf   r   r,   r÷   rž   ÚSTATAxisValueStatement)r@   Ú	locationsr  r<  rI   r”  r•  r–  r—  r]   Úformat4_tagsrž   s               r   Úparse_STAT_axis_value_zParser.parse_STAT_axis_value_Â  sÿ  € Ø×#Ò# KÑ0Ô0Ð0Ð0Ð0Ø×Ò˜CÑ Ô Ð Øˆ	ØˆØˆØÔ #Ò%Ð%¨Ô);Ñ%Ø×Ò¨ÐÑ.Ô.Ð.ØÔ#¥u¤}Ð4Ð4ØØ×%Ò% fÑ-Ô-ð ØÔ3�Ø8<×8MÒ8MÑ8OÔ8OÑ5�
˜I v¨vØ”x×1Ò1Ø˜J¨	°6¸6ÈHð 2ñ ô �ð —’˜TÑ"Ô"Ð"Ð"Ø×%Ò% jÑ1Ô1ð Ø×3Ò3Ñ5Ô5�Ø× Ò  Ñ*Ô*Ð*Ð*Ø×%Ò% fÑ-Ô-ð Ø×.Ò.Ñ0Ô0��Ø” CÒ'Ð'Ùå%ØJ¨¬ÐJÐJÐJØÔ,ñô ð ð' Ô #Ò%Ñ%¨Ô);Ñ%ð. 	×Ò˜CÑ Ô Ð Øð 	TÝ!Ð"8¸$Ô:RÑSÔSÐSØð 	XÝ!Ð"<¸dÔ>VÑWÔWÐWÝˆy‰>Œ>˜AÒÐØ%ð ð �Ý�x”Ñ'Ô'¨!Ò+Ð+Ý)ð>å˜xœÑ/Ô/ð>ð >ð >ð Ô0ñ	ô ð ð ,ð ˆLØ%ð )ð )�Ø”l�Ø˜,Ð&Ð&Ý)Ø= CÐ=Ð=Ð=¸tÔ?Wñô ð ð ×#Ò# CÑ(Ô(Ð(Ð(àŒx×.Ò.Ø�9˜e TÔ%=ñ
ô 
ð 	
r   c           	      óÎ  — g }|                       ¦   «         }t          |                     ¦   «         ¦  «        dk    rt          d| j        › d�| j        ¦  «        ‚| j        dk    r£| j        t          j	        u r*|  
                    ¦   «         }|                     |¦  «         n[| j        t          j        u r*|                      ¦   «         }|                     |¦  «         nt          d| j        › d�| j        ¦  «        ‚| j        dk    °£t          |¦  «        dk    r1|\  }}}||k     s||k    rt          d|› d	|› d
|› d�| j        ¦  «        ‚| j                             ||¦  «        S )Nr.  r,  z must be 4 charactersrY   zUnexpected value "z". Expected integer or float.rÈ  zDefault value z is outside of specified range rÁ   ú.)r›   r,   r«  r   rf   rg   r:   r9   r   rˆ  Úexpect_float_rd   r8  r�   r<   r0   ÚAxisValueLocationStatement)r@   r÷   rž   r:  ÚnominalÚmin_valÚmax_vals          r   r-  zParser.parse_STAT_locationú  s°  € ØˆØ×ÒÑ Ô ˆÝˆs�yŠy‰{Œ{ÑÔ˜qÒ Ð Ý!ØE˜DœOÐEÐEÐEØÔ(ñô ð ð
 Ô #Ò%Ð%ØÔ$­¬Ð3Ð3Ø×*Ò*Ñ,Ô,�Ø—’˜eÑ$Ô$Ð$Ð$ØÔ&­%¬,Ð6Ð6Ø×+Ò+Ñ-Ô-�Ø—’˜eÑ$Ô$Ð$Ð$å%ð1¨Ô)9ð 1ð 1ð 1àÔ-ñô ð ð Ô #Ò%Ð%õ ˆv‰;Œ;˜!ÒÐØ(.Ñ%ˆG�W˜gØ˜Ò Ð  G¨gÒ$5Ð$5Ý%ð, Wð ,ð ,àð,ð ,à!(ð,ð ,ð ,ð Ô-ñ	ô ð ð Œx×2Ò2°3¸Ñ?Ô?Ð?r   c                 ó  — |j         }g }| j        dk    s| j        �rp|                      d¬¦  «         | j        t
          j        u r;|                     | j         	                    | j
        | j        ¬¦  «        ¦  «         �nö| j        t
          j        u �rÕ|                      d¦  «        rC|                      ¦   «         }|                     | j                             |¦  «        ¦  «         �nŠ|                      d¦  «        rX|                      ¦   «         }|                     | j                             |¦  «        ¦  «         |                      d¦  «         �n|                      d¦  «        rY|                      ¦   «         }|                     |j        ¦  «         |                     |¦  «         |                      d¦  «         n¯|                      d	¦  «        rp|                      ¦   «         }|j        D ])}|j        |vrt/          d
|j        › d�| j        ¦  «        ‚Œ*|                     |¦  «         |                      d¦  «         n*t/          d| j
        › �| j        ¦  «        ‚| j
        dk    r�Œm| j        dk    �°f| j        �°nd S d S )Nrš   Tr'   rH   r  ÚElidedFallbackNameIDrY   r  r*  zDesignAxis not defined for r4  r  )ra   r:   r;   r?   rb   r   rc   rd   r0   re   rf   rg   ru   rh   r  r  r�   r;  r†   r(  rž   r2  r0  r   )	r@   rW   ra   Údesign_axesr  r:  Ú
designAxisÚaxisValueRecordrI   s	            r   rª  zParser.parse_table_STAT_  s¯  € ØÔ%ˆ
ØˆØÔ #Ò%Ð%¨Ô);Ñ%Ø×Ò¨ÐÑ.Ô.Ð.ØÔ#¥u¤}Ð4Ð4Ø×!Ò!Ø”H×$Ò$ T¤_¸tÔ?WÐ$ÑXÔXñô ð ñ ð Ô%­¬Ð3Ñ3Ø×'Ò'Ð(<Ñ=Ô=ð Ø ×>Ò>Ñ@Ô@�EØ×%Ò% d¤h×&AÒ&AÀ%Ñ&HÔ&HÑIÔIÐIÑIØ×)Ò)Ð*@ÑAÔAð Ø ×/Ò/Ñ1Ô1�EØ×%Ò% d¤h×&CÒ&CÀEÑ&JÔ&JÑKÔKÐKØ×'Ò'¨Ñ,Ô,Ð,Ñ,Ø×)Ò)¨,Ñ7Ô7ð Ø!%×!<Ò!<Ñ!>Ô!>�JØ×&Ò& z¤~Ñ6Ô6Ð6Ø×%Ò% jÑ1Ô1Ð1Ø×'Ò'¨Ñ,Ô,Ð,Ð,Ø×)Ò)¨+Ñ6Ô6ð Ø&*×&AÒ&AÑ&CÔ&C�OØ$3Ô$=ð ð ˜Ø#œ<¨{Ð:Ð:õ #2Ø PÀÄÐ PÐ PÐ PØ $Ô 8ñ#ô #ð ð ;ð ×%Ò% oÑ6Ô6Ð6Ø×'Ò'¨Ñ,Ô,Ð,Ð,å)Ø=¨D¬OÐ=Ð=¸tÔ?Wñô ð ð ” CÒ'Ð'ÙðI Ô #Ò%Ñ%¨Ô);Ñ%Ð%Ð%Ð%Ð%r   c                 óÞ   — | j         dv sJ | j         ¦   «         ‚g }| j        dk    r2|                     |                      ¦   «         ¦  «         | j        dk    °2|                      d¦  «         |S )N)rò  rô  rY   )rf   r:   rd   rg  r†   )r@   Úbasess     r   rö  zParser.parse_base_tag_list_D  s�   € àŒð #
ð 
ð 
ð 
ð Œ?ñ
ô 
ð 
ð ˆØÔ #Ò%Ð%Ø�LŠL˜×0Ò0Ñ2Ô2Ñ3Ô3Ð3ð Ô #Ò%Ð%à×Ò˜CÑ Ô Ð Øˆr   c                 ó2  — | j         dv sJ | j         ¦   «         ‚|                      |¦  «        g}| j        dk    rH|                      d¦  «         |                     |                      |¦  «        ¦  «         | j        dk    °H|                      d¦  «         |S )N)ró  rõ  rµ   rY   )rf   Úparse_base_script_record_r:   r†   rd   )r@   r}  Úscriptss      r   r÷  zParser.parse_base_script_list_P  s¶   € ØŒð #
ð 
ð 
ð 
ð Œ?ñ
ô 
ð 
ð ×1Ò1°%Ñ8Ô8Ð9ˆØÔ #Ò%Ð%Ø×Ò Ñ$Ô$Ð$Ø�NŠN˜4×9Ò9¸%Ñ@Ô@ÑAÔAÐAð Ô #Ò%Ð%ð 	×Ò˜CÑ Ô Ð Øˆr   c                 ó”   ‡ — ‰                       ¦   «         }‰                       ¦   «         }ˆ fd„t          |¦  «        D ¦   «         }|||fS )Nc                 ó8   •— g | ]}‰                      ¦   «         ‘ŒS r   )r�   )r   r   r@   s     €r   r_   z4Parser.parse_base_script_record_.<locals>.<listcomp>_  s%   ø€ Ð>Ð>Ð>¨A�$×%Ò%Ñ'Ô'Ð>Ð>Ð>r   )rg  rÆ   )r@   r}  Ú
script_tagÚbase_tagÚcoordss   `    r   rB  z Parser.parse_base_script_record_\  sQ   ø€ Ø×,Ò,Ñ.Ô.ˆ
Ø×*Ò*Ñ,Ô,ˆØ>Ð>Ð>Ð>µ°u±´Ð>Ñ>Ô>ˆØ˜8 VÐ+Ð+r   c                 ó|  — |                       ¦   «         }|                      ¦   «         }|                      ¦   «         }|                      ¦   «          | j        t
          j        u r| j        dk    st          d| j	        ¦  «        ‚|                      ¦   «         }| j
        dk    rt          d| j	        ¦  «        ‚||||fS )Nrµ   z0Expected a comma between min and max coordinatesz0Feature tags are not yet supported in BASE table)rg  r  r�   r?   rb   r   rw   rf   r   rg   r:   )r@   rF  r  Ú	min_coordÚ	max_coords        r   rú  zParser.parse_base_minmax_b  sË   € Ø×,Ò,Ñ.Ô.ˆ
Ø×,Ò,Ñ.Ô.ˆØ×'Ò'Ñ)Ô)ˆ	Ø×ÒÑÔÐØÔ$­¬Ð4Ð4¸¼ÈCÒ9OÐ9OÝ!ØBØÔ(ñô ð ð ×'Ò'Ñ)Ô)ˆ	ØÔ˜sÒ"Ð"Ý!ØBØÔ(ñô ð ð
 ˜8 Y°	Ð9Ð9r   c                 ó  — d }|                       d¦  «         |                      d¦  «         | j        dk    r|                      d¦  «         nž|                      ¦   «         |                      ¦   «         fg}| j        dk    r[|                       d¦  «         |                     |                      ¦   «         |                      ¦   «         f¦  «         | j        dk    °[t          |¦  «        }|                       d¦  «         |S )Nr}   Údevicer   rµ   r€   )r†   r‡   r:   r�   rd   Útuple)r@   Úresults     r   rŽ   zParser.parse_device_u  s   € ØˆØ×Ò˜CÑ Ô Ð Ø×Ò˜XÑ&Ô&Ð&ØÔ˜vÒ%Ð%Ø× Ò  Ñ(Ô(Ð(Ð(à×*Ò*Ñ,Ô,¨d×.AÒ.AÑ.CÔ.CÐDÐEˆFØÔ" cÒ)Ð)Ø×#Ò# CÑ(Ô(Ð(Ø—’˜t×2Ò2Ñ4Ô4°d×6IÒ6IÑ6KÔ6KÐLÑMÔMÐMð Ô" cÒ)Ð)õ ˜6‘]”]ˆFØ×Ò˜CÑ Ô Ð Øˆr   c                 óT   — | j         t          j        u p| j        dk    p
| j        dk    S )Nr}   ú()r9   r   r8  r:   ©r@   s    r   rò   zParser.is_next_value_„  s4   € àÔ!¥U¤\Ð1ð 'ØÔ 3Ò&ð'àÔ 3Ò&ð	
r   c                 ól  — | j         t          j        u r| j        dk    s| j         t          j        u r\|                      d¬¦  «        | j        }}|r| j                             |||¬¦  «        }n| j                             |||¬¦  «        }|S |  	                    d¦  «         | j        }| j         t          j
        u r |                      ¦   «         }|dk    r.|  	                    d¦  «         | j                             ¦   «         S | j                             |¦  «        }|€t          d	|z  | j        ¦  «        ‚|j        }|j        |j        }	}|j        |j        }}
n[|                      d¬¦  «        |                      d¬¦  «        |                      d¬¦  «        |                      d¬¦  «        f\  }}	}
}| j        dk    r³|                      ¦   «         |                      ¦   «         |                      ¦   «         |                      ¦   «         f\  }}}}t+          d
„ |r|nd|r|ndz   |r|ndz   |r|ndz   D ¦   «         ¦  «        }|d         dk     s|d         dk    rt          d| j        ¦  «        ‚nd\  }}}}|  	                    d¦  «         | j                             ||	|
|||||||¬¦
  «
        S )NrQ  Tr„   )ÚyAdvancerR   rI   )ÚxAdvancerR   rI   r}   r   r€   zUnknown valueRecordDef "%s"c                 ó   — g | ]\  }}|‘ŒS r   r   )r   r‘  Údeltas      r   r_   z-Parser.parse_valuerecord_.<locals>.<listcomp>»  s,   € ð ð ð á#˜˜eð ðð ð r   r   r   i€ÿÿÿrñ   é   z+Device value out of valid range (-128..127))NNNN)rR   rI   )r9   r   rw   r:   r8  r�   rg   r0   ÚValueRecordr†   ru   rˆ   r7   r‰   r   r:  Ú
xPlacementÚ
yPlacementrU  rT  rŽ   rr  )r@   rR   ÚnumberrI   Úvalr]   Úvrdr:  rZ  r[  rU  rT  Ú
xPlaDeviceÚ
yPlaDeviceÚ
xAdvDeviceÚ
yAdvDeviceÚ	allDeltass                    r   ró   zParser.parse_valuerecord_‹  sD  € àÔ!¥U¤\Ð1Ð1°dÔ6FÈ#Ò6MÐ6MØÔ"¥e¤lÐ2Ð2à×#Ò#¨TÐ#Ñ2Ô2ØÔ(ð ˆFð ð Ø”h×*Ò*Ø#¨hÀð +ñ ô ��ð ”h×*Ò*Ø#¨hÀð +ñ ô �ð ˆJØ×Ò˜CÑ Ô Ð ØÔ+ˆØÔ ¥E¤JÐ.Ð.Ø×$Ò$Ñ&Ô&ˆDØ�vŠ~ˆ~Ø×#Ò# CÑ(Ô(Ð(Ø”x×+Ò+Ñ-Ô-Ð-ØÔ$×,Ò,¨TÑ2Ô2ˆCØˆ{Ý%Ø1°DÑ8¸$Ô:Rñô ð ð ”IˆEØ&+Ô&6¸Ô8H˜
ˆJØ"'¤.°%´.�hˆHˆHð ×#Ò#¨TÐ#Ñ2Ô2Ø×#Ò#¨TÐ#Ñ2Ô2Ø×#Ò#¨TÐ#Ñ2Ô2Ø×#Ò#¨TÐ#Ñ2Ô2ð	:Ñ6ˆJ˜
 H¨hð Ô˜sÒ"Ð"à×"Ò"Ñ$Ô$Ø×"Ò"Ñ$Ô$Ø×"Ò"Ñ$Ô$Ø×"Ò"Ñ$Ô$ð	>Ñ:ˆJ˜
 J°
õ ðð à6@Ð(H¨
¨
ÀbØ%/Ð7�z�z°Rñ(9à%/Ð7�z�z°Rñ(9ð &0Ð7�z�z°Rñ(9ðñ ô ñô ˆIð ˜Œ|˜dÒ"Ð" i°¤m°cÒ&9Ð&9Ý%ØAØÔ,ñô ð ð ':ð >VÑ:ˆJ˜
 J°
à×Ò˜CÑ Ô Ð ØŒx×#Ò#ØØØØØØØØØØð $ñ 
ô 
ð 	
r   c                 ó.  — |                       d¦  «        sJ ‚| j        }|                      |¦  «        }|                      ¦   «         }|                      d¦  «         | j                             |||¬¦  «        }| j                             ||¦  «         |S )NrX   rY   rH   )	rh   rg   ró   rˆ   r†   r0   ÚValueRecordDefinitionr7   r˜   )r@   rR   rI   r:  r]   r^  s         r   rt   z$Parser.parse_valuerecord_definition_Ù  s—   € à×#Ò#Ð$4Ñ5Ô5Ð5Ð5Ð5ØÔ+ˆØ×'Ò'¨Ñ1Ô1ˆØ× Ò Ñ"Ô"ˆØ×Ò˜CÑ Ô Ð ØŒh×,Ò,¨T°5À8Ð,ÑLÔLˆØÔ×!Ò! $¨Ñ,Ô,Ð,Øˆ
r   c                 óÞ   — | j         dk    sJ ‚| j        }|                      ¦   «         }|                      ¦   «         }|                      d¦  «         | j                             |||¬¦  «        S )NrO   rY   rH   )rf   rg   rg  r  r†   r0   ÚLanguageSystemStatement)r@   rI   rf  r  s       r   rn   zParser.parse_languagesystem_ä  sq   € ØŒÐ"2Ò2Ð2Ð2Ð2ØÔ+ˆØ×(Ò(Ñ*Ô*ˆØ×,Ò,Ñ.Ô.ˆØ×Ò˜CÑ Ô Ð ØŒx×/Ò/°¸È8Ð/ÑTÔTÐTr   c                 óì  — |r| j         dk    sJ ‚n| j         dk    sJ ‚| j        }|                      ¦   «         }|dv }d }d }d}|| j        v r|}n|| j        v r|}n|dk    rd}|r|                      ¦   «         }d}	| j        dk    r|                      d¦  «         d}	|r| j         	                    |||	|¬¦  «        }
n| j         
                    ||	|¬¦  «        }
|                      |
||||¦  «         |
S )	NrV   rT   >   ÚvaltÚvhalÚvkrnÚvpalFr‘  Tr%  )r)  rI   )rf   rg   r›   ÚSS_FEATURE_TAGSÚCV_FEATURE_TAGSrˆ   r:   r‡   r0   ÚVariationBlockÚFeatureBlockr(  )r@   rV   rI   rž   rR   ÚstylisticsetÚ
cv_featureÚsize_featurerU   r)  r*  s              r   rq   zParser.parse_feature_block_ì  sZ  € Øð 	0Ø”? kÒ1Ð1Ð1Ð1Ð1à”? iÒ/Ð/Ð/Ð/ØÔ+ˆØ×ÒÑ Ô ˆØÐ:Ð:ˆàˆØˆ
ØˆØ�$Ô&Ð&Ð&ØˆLˆLØ�DÔ(Ð(Ð(ØˆJˆJØ�FŠ]ˆ]ØˆLàð 	/Ø×,Ò,Ñ.Ô.ˆLàˆØÔ˜~Ò-Ð-Ø× Ò  Ñ0Ô0Ð0Ø ˆMàð 	Ø”H×+Ò+Ø�\°Èð ,ñ ô ˆEˆEð ”H×)Ò)Ø =¸8ð *ñ ô ˆEð 	×Ò˜% ¨<¸ÀzÑRÔRÐRØˆr   c                 óÎ   — | j         dk    sJ | j         ¦   «         ‚| j        }|                      ¦   «         }|                      d¦  «         | j                             ||¬¦  «        S )NrT   rY   rH   )rf   rg   r›   r†   r0   ÚFeatureReferenceStatement)r@   rI   ÚfeatureNames      r   Úparse_feature_reference_zParser.parse_feature_reference_  sg   € ØŒ )Ò+Ð+Ð+¨T¬_Ñ+Ô+Ð+ØÔ+ˆØ×&Ò&Ñ(Ô(ˆØ×Ò˜CÑ Ô Ð ØŒx×1Ò1°+ÈÐ1ÑQÔQÐQr   c           
      óº  — | j         dk    sJ | j         ¦   «         ‚| j                             || j         | j        ¬¦  «        }|                      d¦  «         | j        D ]}|                     ¦   «          Œ| j        dk    s| j        �r|  	                    d¬¦  «         | j
        t          j        u r?|j                             | j                             | j         | j        ¬¦  «        ¦  «         n�|                      d¦  «        rY| j        }|                      ¦   «         \  }}}}|j                             | j                             ||||||¬¦  «        ¦  «         n!| j         dk    rŒõt'          d	| j        ¦  «        ‚| j        dk    �°| j        �°|                      d¦  «         | j        D ]}|                     ¦   «          Œ|                      d¦  «         |S )
z¾Parses a ``featureNames`` statement found in stylistic set features.
        See section `8.c <https://adobe-type-tools.github.io/afdko/OpenTypeFeatureFileSpecification.html#8.c>`_.
        ÚfeatureNamesrH   rš  rš   Tr'   r]   rY   r  )rf   r0   ÚNestedBlockrg   r†   r8   Úenter_scoper:   r;   r?   rb   r   rc   ra   rd   re   rh   r’  r“  r   Ú
exit_scope)	r@   rž   r*  ÚsymtabrI   r”  r•  r–  r—  s	            r   Úparse_featureNames_zParser.parse_featureNames_  s  € ð Œ .Ò0Ð0Ð0°$´/Ñ0Ô0Ð0Ø”×$Ò$Ø�”¨4Ô+Cð %ñ 
ô 
ˆð 	×Ò˜CÑ Ô Ð ØÔ)ð 	!ð 	!ˆFØ×ÒÑ Ô Ð Ð ØÔ #Ò%Ð%¨Ô);Ñ%Ø×Ò¨ÐÑ.Ô.Ð.ØÔ#¥u¤}Ð4Ð4ØÔ ×'Ò'Ø”H×$Ò$ T¤_¸tÔ?WÐ$ÑXÔXñô ð ð ð ×%Ò% fÑ-Ô-ð SØÔ3�Ø8<×8HÒ8HÑ8JÔ8JÑ5�
˜I v¨vØÔ ×'Ò'Ø”H×1Ò1Ø˜Z¨°F¸FÈXð 2ñ ô ñô ð ð ð
 ” CÒ'Ð'Øå%Ð&7¸Ô9QÑRÔRÐRð# Ô #Ò%Ñ%¨Ô);Ñ%ð$ 	×Ò˜CÑ Ô Ð ØÔ)ð 	 ð 	 ˆFØ×ÒÑÔÐÐØ×Ò˜CÑ Ô Ð Øˆr   c                 ó(  — | j         dk    sJ | j         ¦   «         ‚| j                             || j         | j        ¬¦  «        }|                      d¦  «         | j        D ]}|                     ¦   «          Œ|j        }| j        dk    s| j	        �r;|  
                    d¬¦  «         | j        t          j        u r:|                     | j                             | j         | j        ¬¦  «        ¦  «         nÄ|                      h d£¦  «        r/|                     |                      || j         ¦  «        ¦  «         n~|                      d¦  «        r)|                     |                      |¦  «        ¦  «         n@| j         d	k    r�Œt'          d
                     | j        | j         ¦  «        | j        ¦  «        ‚| j        dk    �°3| j	        �°;|                      d¦  «         | j        D ]}|                     ¦   «          Œ|                      d	¦  «         |S )NÚcvParametersrH   rš  rš   Tr'   >   ÚSampleTextNameIDÚFeatUILabelNameIDÚParamUILabelNameIDÚFeatUITooltipTextNameIDÚ	CharacterrY   zExpected statement: got {} {})rf   r0   rz  rg   r†   r8   r{  ra   r:   r;   r?   rb   r   rc   rd   re   rh   Úparse_cvNameIDs_Úparse_cvCharacter_r   rx   r|  )r@   rž   r*  r}  ra   s        r   Úparse_cvParameters_zParser.parse_cvParameters_<  sI  € ð Œ .Ò0Ð0Ð0°$´/Ñ0Ô0Ð0Ø”×$Ò$Ø�”¨4Ô+Cð %ñ 
ô 
ˆð 	×Ò˜CÑ Ô Ð ØÔ)ð 	!ð 	!ˆFØ×ÒÑ Ô Ð Ð àÔ%ˆ
ØÔ #Ò%Ð%¨Ô);Ñ%Ø×Ò¨ÐÑ.Ô.Ð.ØÔ#¥u¤}Ð4Ð4Ø×!Ò!Ø”H×$Ò$ T¤_¸tÔ?WÐ$ÑXÔXñô ð ð ð ×%Ò%ðð ð ñô ð ð ×!Ò! $×"7Ò"7¸¸T¼_Ñ"MÔ"MÑNÔNÐNÐNØ×%Ò% kÑ2Ô2ð 
Ø×!Ò! $×"9Ò"9¸#Ñ">Ô">Ñ?Ô?Ð?Ð?Ø” CÒ'Ð'Ùå%Ø3×:Ò:ØÔ,¨d¬oñô ð Ô,ñ	ô ð ð) Ô #Ò%Ñ%¨Ô);Ñ%ð6 	×Ò˜CÑ Ô Ð ØÔ)ð 	 ð 	 ˆFØ×ÒÑÔÐÐØ×Ò˜CÑ Ô Ð Øˆr   c                 ó²  — | j         |k    sJ | j         ¦   «         ‚| j                             ||| j        ¬¦  «        }|                      d¦  «         | j        D ]}|                     ¦   «          Œ| j        dk    s| j        �r|  	                    d¬¦  «         | j
        t          j        u r?|j                             | j                             | j         | j        ¬¦  «        ¦  «         n�|                      d¦  «        rZ| j        }|                      ¦   «         \  }}}}	|j                             | j                             |||||	||¬¦  «        ¦  «         n!| j         dk    rŒöt'          d| j        ¦  «        ‚| j        dk    �°| j        �°|                      d¦  «         | j        D ]}|                     ¦   «          Œ|                      d¦  «         |S )	NrH   rš  rš   Tr'   r]   rY   r  )rf   r0   rz  rg   r†   r8   r{  r:   r;   r?   rb   r   rc   ra   rd   re   rh   r’  ÚCVParametersNameStatementr   r|  )
r@   rž   Ú
block_namer*  r}  rI   r”  r•  r–  r—  s
             r   r†  zParser.parse_cvNameIDs_i  s  € ØŒ *Ò,Ð,Ð,¨d¬oÑ,Ô,Ð,Ø”×$Ò$ S¨*¸tÔ?WÐ$ÑXÔXˆØ×Ò˜CÑ Ô Ð ØÔ)ð 	!ð 	!ˆFØ×ÒÑ Ô Ð Ð ØÔ #Ò%Ð%¨Ô);Ñ%Ø×Ò¨ÐÑ.Ô.Ð.ØÔ#¥u¤}Ð4Ð4ØÔ ×'Ò'Ø”H×$Ò$ T¤_¸tÔ?WÐ$ÑXÔXñô ð ð ð ×%Ò% fÑ-Ô-ð SØÔ3�Ø8<×8HÒ8HÑ8JÔ8JÑ5�
˜I v¨vØÔ ×'Ò'Ø”H×6Ò6ØØ"Ø!ØØØ"Ø!)ð 7ñ ô ñ
ô 
ð 
ð 
ð ” CÒ'Ð'Øå%Ð&7¸Ô9QÑRÔRÐRð/ Ô #Ò%Ñ%¨Ô);Ñ%ð0 	×Ò˜CÑ Ô Ð ØÔ)ð 	 ð 	 ˆFØ×ÒÑÔÐÐØ×Ò˜CÑ Ô Ð Øˆr   c                 ó6  — | j         dk    sJ | j         ¦   «         ‚| j        |                      ¦   «         }}|                      d¦  «         d|cxk    rdk    s&n t	          d                     dd¦  «        |¦  «        ‚| j                             |||¬¦  «        S )Nr…  rY   iÿÿÿ r   z/Character value must be between {:#x} and {:#x}rH   )rf   rg   rÍ  r†   r   rx   r0   ÚCharacterStatement)r@   rž   rI   Ú	characters       r   r‡  zParser.parse_cvCharacter_�  s²   € ØŒ +Ò-Ð-Ð-¨t¬Ñ-Ô-Ð-Ø"Ô6¸×8OÒ8OÑ8QÔ8Q�)ˆØ×Ò˜CÑ Ô Ð Ø˜IÐ*Ð*Ò*Ð*¨Ò*Ð*Ð*Ð*Ý!ð"ß"(¢&¨¨HÑ"5Ô"5Øñô ð ð
 Œx×*Ò*¨9°cÀHÐ*ÑMÔMÐMr   c                 óú   — | j         dk    sJ | j         ¦   «         ‚| j        |                      ¦   «         }}|                      d¦  «         |dk    rt	          d|¦  «        ‚| j                             ||¬¦  «        S )Nr°  rY   r   z&Font revision numbers must be positiverH   )rf   rg   r5  r†   r   r0   ÚFontRevisionStatement)r@   rI   Úversions      r   r±  zParser.parse_FontRevision_™  s‚   € ð Œ .Ò0Ð0Ð0°$´/Ñ0Ô0Ð0Ø Ô4°d×6HÒ6HÑ6JÔ6J�'ˆØ×Ò˜CÑ Ô Ð Ø�aŠ<ˆ<Ý!Ð"JÈHÑUÔUÐUØŒx×-Ò-¨gÀÐ-ÑIÔIÐIr   c                 ó˜  — | j         }|                      ¦   «         }i }|                      d¦  «         | j        dk    �r)|                      ¦   «          | j        t          j        urt          d| j         ¦  «        ‚| j	        }||v rt          d|› �| j         ¦  «        ‚| j
        t          j        u r|                      ¦   «         }n)| j
        t          j        u r|                      d¬¦  «        }| j
        t          j        u r|                      ¦   «         }n)| j
        t          j        u r|                      d¬¦  «        }|                      d¦  «         ||f||<   | j        dk    �°)|                      d¦  «         |                      ¦   «         }||k    rt          d|z  | j         ¦  «        ‚| j                             |||¬	¦  «        S )
Nrš  rš   úExpected an axis namezRepeated condition for axis Fr„   rY   r¡  rH   )rg   rˆ   r†   r:   r?   rb   r   ru   r   rf   r9   rˆ  r5  r8  r�   r0   ÚConditionsetStatement)r@   rI   r]   Ú
conditionsÚaxisÚ	min_valueÚ	max_valueÚ	finalnames           r   rr   zParser.parse_conditionset_£  sÚ  € ØÔ+ˆØ× Ò Ñ"Ô"ˆàˆ
Ø×Ò˜CÑ Ô Ð àÔ #Ò%Ñ%Ø×ÒÑ!Ô!Ð!ØÔ#­5¬:Ð5Ð5Ý%Ð&=¸tÔ?WÑXÔXÐXà”?ˆDØ�zÐ!Ð!Ý%Ø9°4Ð9Ð9¸4Ô;Sñô ð ð Ô$­¬Ð3Ð3Ø ×.Ò.Ñ0Ô0�	�	ØÔ&­%¬,Ð6Ð6Ø ×/Ò/¸Ð/Ñ?Ô?�	àÔ$­¬Ð3Ð3Ø ×.Ò.Ñ0Ô0�	�	ØÔ&­%¬,Ð6Ð6Ø ×/Ò/¸Ð/Ñ?Ô?�	Ø×Ò Ñ$Ô$Ð$à )¨9Ð5ˆJ�tÑð- Ô #Ò%Ñ%ð0 	×Ò˜CÑ Ô Ð à×%Ò%Ñ'Ô'ˆ	Ø˜ÒÐÝ! /°DÑ"8¸$Ô:RÑSÔSÐSØŒx×-Ò-¨d°JÈÐ-ÑRÔRÐRr   c                 óÞ  — |                       d¦  «         | j        D ]}|                     ¦   «          Œ|j        }| j        dk    s| j        �rw|                      d¬¦  «         | j        t          j	        u r;| 
                    | j                             | j        | j        ¬¦  «        ¦  «         �nÿ| j        t          j        u r)| 
                    |                      ¦   «         ¦  «         �nÃ|                      d¦  «        r)| 
                    |                      ¦   «         ¦  «         �n…|                      ddh¦  «        r+| 
                    |                      |¬	¦  «        ¦  «         �nC|                      d
¦  «        r)| 
                    |                      ¦   «         ¦  «         �n|                      d¦  «        r)| 
                    |                      ¦   «         ¦  «         �nÇ|                      d¦  «        r)| 
                    |                      ¦   «         ¦  «         �n‰|                      d¦  «        r*| 
                    |                      |¦  «        ¦  «         �nJ|                      d¦  «        r)| 
                    |                      ¦   «         ¦  «         �n|                      d¦  «        r)| 
                    |                      ¦   «         ¦  «         �nÎ|                      ddh¦  «        r,| 
                    |                      d|¬¦  «        ¦  «         �n‹|                      d¦  «        r)| 
                    |                      ¦   «         ¦  «         �nM|                      h d£¦  «        r)| 
                    |                      ¦   «         ¦  «         �n|                      d¦  «        r)| 
                    |                      ¦   «         ¦  «         �nÏ|                      d¦  «        r*| 
                    |                      |¦  «        ¦  «         �n�|r?|                      d¦  «        r*| 
                    |                      |¦  «        ¦  «         �nO|r?|                      d¦  «        r*| 
                    |                       |¦  «        ¦  «         �n|r=|                      d¦  «        r(| 
                    |  !                    ¦   «         ¦  «         nÏ|r=|                      d¦  «        r(| 
                    |  "                    ¦   «         ¦  «         n�| j        t          j#        u r=| j        | j$        v r/| 
                     | j$        | j                 | ¦  «        ¦  «         n@| j        dk    r�ŒCtK          d &                    | j        | j        ¦  «        | j        ¦  «        ‚| j        dk    �°o| j        �°w|                       d¦  «         | j        D ]}| '                    ¦   «          Œ|  (                    ¦   «         }||j)         *                    ¦   «         k    r/tK          d|j)         *                    ¦   «         z  | j        ¦  «        ‚|                       d¦  «         d S )Nrš  rš   Tr'   rH   rN   r­   r®   rQ   rT   r  r  rP   r,  rS   r	  r  Fr¯   rf  >   r   rk  rl  r  r‚  rX   ry  r€  r†  r�  rY   z7Expected glyph class definition or statement: got {} {}r¡  )+r†   r8   r{  ra   r:   r;   r?   rb   r   rc   rd   r0   re   rf   rg   rj   rk   rh   rm   r²   rw  r  r  ro   r>  rp   r±   ri  r€  r„  rt   r~  rˆ  rŽ  r˜  ru   rv   r   rx   r|  rˆ   r]   r«  )	r@   r*  rR   rq  rs  rr  r}  ra   r]   s	            r   r(  zParser.parse_block_É  se  € ð 	×Ò˜CÑ Ô Ð ØÔ)ð 	!ð 	!ˆFØ×ÒÑ Ô Ð Ð àÔ%ˆ
ØÔ #Ò%Ð%¨Ô);Ñ%Ø×Ò¨ÐÑ.Ô.Ð.ØÔ#¥u¤}Ð4Ð4Ø×!Ò!Ø”H×$Ò$ T¤_¸tÔ?WÐ$ÑXÔXñô ð ñ ð Ô%­Ô)9Ð9Ð9Ø×!Ò! $×"CÒ"CÑ"EÔ"EÑFÔFÐFÑFØ×%Ò% kÑ2Ô2ð 1Ø×!Ò! $×"7Ò"7Ñ"9Ô"9Ñ:Ô:Ð:Ñ:Ø×%Ò% v¨{Ð&;Ñ<Ô<ð /Ø×!Ò! $×"7Ò"7ÀÐ"7Ñ"JÔ"JÑKÔKÐKÑKØ×%Ò% iÑ0Ô0ð -Ø×!Ò! $×"?Ò"?Ñ"AÔ"AÑBÔBÐBÑBØ×%Ò% hÑ/Ô/ð +Ø×!Ò! $×"4Ò"4Ñ"6Ô"6Ñ7Ô7Ð7Ñ7Ø×%Ò% jÑ1Ô1ð )Ø×!Ò! $×"6Ò"6Ñ"8Ô"8Ñ9Ô9Ð9Ñ9Ø×%Ò% hÑ/Ô/ð 'Ø×!Ò! $×"4Ò"4°XÑ">Ô">Ñ?Ô?Ð?Ñ?Ø×%Ò% lÑ3Ô3ð %Ø×!Ò! $×"8Ò"8Ñ":Ô":Ñ;Ô;Ð;Ñ;Ø×%Ò% kÑ2Ô2ð #Ø×!Ò! $×"7Ò"7Ñ"9Ô"9Ñ:Ô:Ð:Ñ:Ø×%Ò% u¨jÐ&9Ñ:Ô:ð !Ø×!Ò!Ø×(Ò(°EÀHÐ(ÑMÔMñô ð ñ ð ×%Ò% hÑ/Ô/ð Ø×!Ò! $×"4Ò"4Ñ"6Ô"6Ñ7Ô7Ð7Ñ7Ø×%Ò%Ð&QÐ&QÐ&QÑRÔRð Ø×!Ò! $×"8Ò"8Ñ":Ô":Ñ;Ô;Ð;Ñ;Ø×%Ò% jÑ1Ô1ð Ø×!Ò! $×"6Ò"6Ñ"8Ô"8Ñ9Ô9Ð9Ñ9Ø×%Ò%Ð&6Ñ7Ô7ð Ø×!Ò! $×"DÒ"DÀXÑ"NÔ"NÑOÔOÐOÑOØð  $×"6Ò"6°~Ñ"FÔ"Fð Ø×!Ò! $×":Ò":¸<Ñ"HÔ"HÑIÔIÐIÑIØð  × 4Ò 4°^Ñ DÔ Dð Ø×!Ò! $×":Ò":¸:Ñ"FÔ"FÑGÔGÐGÑGØð  $×"6Ò"6°|Ñ"DÔ"Dð Ø×!Ò! $×"=Ò"=Ñ"?Ô"?Ñ@Ô@Ð@Ð@Øð  $×"6Ò"6°~Ñ"FÔ"Fð Ø×!Ò! $×";Ò";Ñ"=Ô"=Ñ>Ô>Ð>Ð>àÔ$­¬
Ð2Ð2Ø”O t¤Ð6Ð6à×!Ò!Ð"B $¤/°$´/Ô"BÀ4Ñ"HÔ"HÑIÔIÐIÐIØ” CÒ'Ð'Ùå%ØM×TÒTØÔ,¨d¬oñô ð Ô,ñ	ô ð ði Ô #Ò%Ñ%¨Ô);Ñ%ðv 	×Ò˜CÑ Ô Ð ØÔ)ð 	 ð 	 ˆFØ×ÒÑÔÐÐà× Ò Ñ"Ô"ˆØ�5”:×#Ò#Ñ%Ô%Ò%Ð%Ý!Ø %¤*×"2Ò"2Ñ"4Ô"4Ñ4°dÔ6Nñô ð ð 	×Ò˜CÑ Ô Ð Ð Ð r   c                 óŽ   — | j         t          j        u r1t          |t	          d¦  «        ¦  «        r| j        |k    S | j        |v S dS )Nr   F)rb   r   ru   r×   Útyperf   )r@   r#   s     r   rh   zParser.is_cur_keyword_  sI   € ØÔ¥5¤:Ð-Ð-Ý˜!�T "™XœXÑ&Ô&ð ,Ø”¨!Ò+Ð+à”¨!Ð+Ð+Øˆur   c                 óˆ   — |                       ¦   «          | j        t          j        urt	          d| j        ¦  «        ‚| j        S )NzExpected @NAME)r?   rb   r   rj   r   rg   rf   rR  s    r   rA  zParser.expect_class_name_  sA   € Ø×ÒÑÔÐØÔ¥uÔ'7Ð7Ð7Ý!Ð"2°DÔ4LÑMÔMÐMØŒÐr   c                 óˆ   — |                       ¦   «          | j        t          j        u r| j        S t          d| j        ¦  «        ‚)NzExpected a CID)r?   rb   r   rÒ   rf   r   rg   rR  s    r   rá   zParser.expect_cid_%  s@   € Ø×ÒÑÔÐØÔ¥5¤9Ð,Ð,Ø”?Ð"ÝÐ.°Ô0HÑIÔIÐIr   c                 óˆ   — |                       ¦   «          | j        t          j        urt	          d| j        ¦  «        ‚| j        S )NzExpected file name)r?   rb   r   ÚFILENAMEr   rg   rf   rR  s    r   r  zParser.expect_filename_+  s@   € Ø×ÒÑÔÐØÔ¥u¤~Ð5Ð5Ý!Ð"6¸Ô8PÑQÔQÐQØŒÐr   c                 óè   — |                       ¦   «          | j        t          j        u r| j                             d¦  «        S | j        t          j        u r
d| j        z  S t          d| j        ¦  «        ‚)Nú\úcid%05dzExpected a glyph name or CID)	r?   rb   r   ru   rf   ÚlstriprÒ   r   rg   rR  s    r   rÔ   zParser.expect_glyph_1  sk   € Ø×ÒÑÔÐØÔ¥5¤:Ð-Ð-Ø”?×)Ò)¨$Ñ/Ô/Ð/ØÔ!¥U¤YÐ.Ð.Ø˜tœÑ.Ð.ÝÐ<¸dÔ>VÑWÔWÐWr   c                 óf   — | j         r'|D ]&}|| j         v rŒ|| j        vr| j        | j        |<   Œ%dS dS )zëAdds a glyph name (just `start`) or glyph names of a
        range (`start` and `end`) which are not in the glyph set
        to the "missing list" for future error reporting.

        If no glyph set is present, does nothing.
        N)r/   r>   rg   )r@   r  r]   s      r   rÕ   z$Parser.check_glyph_name_in_glyph_set9  sg   € ð Ôð 	BØð Bð B�Ø˜4Ô+Ð+Ð+ØØ˜tœ|Ð+Ð+Ø)-Ô)A�D”L Ñ&øð	Bð 	BðBð Br   c                 óú   — |                       ¦   «         }| j                             |¦  «        }|€t          d|z  | j        ¦  «        ‚t          || j        j        ¦  «        st          d|z  | j        ¦  «        ‚|S )NzUnknown markClass @%sz@%s is not a markClass)rA  r5   r‰   r   rg   r×   r0   rØ   )r@   r]   Úmcs      r   r“   z"Parser.expect_markClass_reference_G  sŒ   € Ø×&Ò&Ñ(Ô(ˆØÔ×'Ò'¨Ñ-Ô-ˆØˆ:Ý!Ø'¨$Ñ.°Ô0Hñô ð õ ˜"˜dœhÔ0Ñ1Ô1ð 	Ý!Ø(¨4Ñ/°Ô1Iñô ð ð ˆ	r   c                 óø   — |                       ¦   «          | j        t          j        urt	          d| j        ¦  «        ‚t          | j        ¦  «        dk    rt	          d| j        ¦  «        ‚| j        dz   d d…         S )NzExpected a tagr.  z'Tags cannot be longer than 4 charactersz    )r?   rb   r   ru   r   rg   r,   rf   rR  s    r   r›   zParser.expect_tag_T  s   € Ø×ÒÑÔÐØÔ¥u¤zÐ1Ð1Ý!Ð"2°DÔ4LÑMÔMÐMÝˆtŒÑÔ !Ò#Ð#Ý!Ø9¸4Ô;Sñô ð ð ” &Ñ(¨"¨1¨"Ô-Ð-r   c                 ód   — |                       ¦   «         }|dk    rt          d| j        ¦  «        ‚|S )NÚdfltz4"dflt" is not a valid script tag; use "DFLT" instead©r›   r   rg   ©r@   rž   s     r   rg  zParser.expect_script_tag_^  s>   € Ø×ÒÑ Ô ˆØ�&Š=ˆ=Ý!ØFØÔ(ñô ð ð ˆ
r   c                 ód   — |                       ¦   «         }|dk    rt          d| j        ¦  «        ‚|S )NÚDFLTz6"DFLT" is not a valid language tag; use "dflt" insteadr«  r¬  s     r   r  zParser.expect_language_tag_g  s>   € Ø×ÒÑ Ô ˆØ�&Š=ˆ=Ý!ØHØÔ(ñô ð ð ˆ
r   c                 óš   — |                       ¦   «          | j        t          j        u r| j        |k    r|S t          d|z  | j        ¦  «        ‚)NzExpected '%s')r?   rb   r   rw   rf   r   rg   )r@   Úsymbols     r   r†   zParser.expect_symbol_p  sM   € Ø×ÒÑÔÐØÔ¥5¤<Ð/Ð/°D´OÀvÒ4MÐ4MØˆMÝ˜o°Ñ6¸Ô8PÑQÔQÐQr   c                 ó¤   — |                       ¦   «          | j        t          j        u r| j        |k    r| j        S t          d|z  | j        ¦  «        ‚)Nr¡  ©r?   rb   r   ru   rf   r   rg   )r@   ry  s     r   r‡   zParser.expect_keyword_v  sP   € Ø×ÒÑÔÐØÔ¥5¤:Ð-Ð-°$´/ÀWÒ2LÐ2LØ”?Ð"Ý˜o°Ñ7¸Ô9QÑRÔRÐRr   c                 óˆ   — |                       ¦   «          | j        t          j        u r| j        S t          d| j        ¦  «        ‚)NzExpected a namer²  rR  s    r   rˆ   zParser.expect_name_|  s@   € Ø×ÒÑÔÐØÔ¥5¤:Ð-Ð-Ø”?Ð"ÝÐ/°Ô1IÑJÔJÐJr   c                 óð   — |                       ¦   «          | j        t          j        u r| j        S |r2| j        t          j        u r| j        dk    r|                      ¦   «         S t          d| j        ¦  «        ‚)NrQ  zExpected a number)	r?   rb   r   r8  rf   rw   Úexpect_variable_scalar_r   rg   )r@   r…   s     r   r�   zParser.expect_number_‚  sv   € Ø×ÒÑÔÐØÔ¥5¤<Ð/Ð/Ø”?Ð"Øð 	2˜Ô,µ´Ð<Ð<ÀÄÐTWÒAWÐAWØ×/Ò/Ñ1Ô1Ð1ÝÐ1°4Ô3KÑLÔLÐLr   c                 óê   — |                       ¦   «          t          ¦   «         }	 | j        t          j        k    r| j        dk    rn.|                      ¦   «         \  }}|                     ||¦  «         ŒO|S )NTr\   )r?   r   rb   r   rw   rf   Úexpect_master_Ú	add_value)r@   ÚscalarrI   r:  s       r   rµ  zParser.expect_variable_scalar_Š  sz   € Ø×ÒÑÔÐÝÑ!Ô!ˆð	.ØÔ#¥u¤|Ò3Ð3¸¼È3Ò8NÐ8NØØ"×1Ò1Ñ3Ô3‰OˆH�eØ×Ò˜X uÑ-Ô-Ð-ð		.ð
 ˆr   c                 óº  — i }	 | j         t          j        urt          d| j        ¦  «        ‚| j        }|                      ¦   «          | j         t          j        u r| j        dk    st          d| j        ¦  «        ‚|                      ¦   «         }|||<   | j	        t          j        u r| j
        d         dk    rn]|                      ¦   «          | j         t          j        u r| j        dk    st          d| j        ¦  «        ‚|                      ¦   «          �Œ|                      ¦   «          t          | j        d	d …         ¦  «        }|                      ¦   «          ||fS )
NTr“  r½   zExpected an equals signr   ú:rµ   z#Expected an comma or an equals signr   )rb   r   ru   r   rg   rf   r?   rw   Úexpect_integer_or_float_r9   r:   rè  )r@   rI   r–  r:  s       r   r·  zParser.expect_master_”  sk  € Øˆð	"ØÔ#­5¬:Ð5Ð5Ý%Ð&=¸tÔ?WÑXÔXÐXØ”?ˆDØ×ÒÑ!Ô!Ð!ØÔ(­E¬LÐ8Ð8¸T¼_ÐPSÒ=SÐ=SÝ%Ø-¨tÔ/Gñô ð ð ×1Ò1Ñ3Ô3ˆEØ"ˆH�T‰NØÔ$­¬
Ð2Ð2°tÔ7GÈÔ7JÈcÒ7QÐ7QàØ×ÒÑ!Ô!Ð!ØÔ(­E¬LÐ8Ð8¸T¼_ÐPSÒ=SÐ=SÝ%Ø9¸4Ô;Sñô ð ð ×ÒÑ!Ô!Ð!ñ'	"ð( 	×ÒÑÔÐÝ�D”O A B BÔ'Ñ(Ô(ˆØ×ÒÑÔÐØ˜ˆÐr   c                 óˆ   — |                       ¦   «          | j        t          j        v r| j        S t          d| j        ¦  «        ‚)Nz/Expected a decimal, hexadecimal or octal number)r?   rb   r   rÌ  rf   r   rg   rR  s    r   rÍ  zParser.expect_any_number_¯  sF   € Ø×ÒÑÔÐØÔ¥5¤=Ð0Ð0Ø”?Ð"ÝØ=¸tÔ?Wñ
ô 
ð 	
r   c                 óˆ   — |                       ¦   «          | j        t          j        u r| j        S t          d| j        ¦  «        ‚)Nz Expected a floating-point number)r?   rb   r   rˆ  rf   r   rg   rR  s    r   r5  zParser.expect_float_·  sF   € Ø×ÒÑÔÐØÔ¥5¤;Ð.Ð.Ø”?Ð"ÝØ.°Ô0Hñ
ô 
ð 	
r   c                 óÌ   — | j         t          j        k    r|                      ¦   «         S | j         t          j        u r|                      ¦   «         S t          d| j        ¦  «        ‚©Nú,Expected an integer or floating-point number©r9   r   rˆ  r5  r8  r�   r   rg   rR  s    r   r¼  zParser.expect_integer_or_float_¿  ó`   € ØÔ ¥E¤KÒ/Ð/Ø×%Ò%Ñ'Ô'Ð'ØÔ"¥e¤lÐ2Ð2Ø×&Ò&Ñ(Ô(Ð(å!Ø>ÀÔ@Xñô ð r   c                 óÒ   — | j         t          j        k    r|                      ¦   «         S | j         t          j        u r|                      ¦   «         dz  S t          d| j        ¦  «        ‚)Nr  rÁ  rÂ  rR  s    r   r‡  zParser.expect_decipoint_É  se   € ØÔ ¥E¤KÒ/Ð/Ø×%Ò%Ñ'Ô'Ð'ØÔ"¥e¤lÐ2Ð2Ø×&Ò&Ñ(Ô(¨2Ñ-Ð-å!Ø>ÀÔ@Xñô ð r   c                 óÌ   — d}dddœ}| j         dk    rQ| j         |v r |                      ¦   «         }|||         z  }nt          d| j        › �| j        ¦  «        ‚| j         dk    °Q|S )Nr   r   r-  )ÚOlderSiblingFontAttributeÚElidableAxisValueNamerY   zUnexpected STAT flag )r:   rˆ   r   rf   rg   )r@   r:  r<  r]   s       r   r.  zParser.expect_stat_flagsÓ  s“   € Øˆà)*Ø%&ð
ð 
ˆð Ô #Ò%Ð%ØÔ 5Ð(Ð(Ø×(Ò(Ñ*Ô*�Ø  d¤Ñ+��å%Ø=¨D¬OÐ=Ð=¸tÔ?Wñô ð ð Ô #Ò%Ð%ð ˆr   c                 óÌ   — | j         t          j        k    r|                      ¦   «         S | j         t          j        u r|                      ¦   «         S t          d| j        ¦  «        ‚rÀ  rÂ  rR  s    r   Úexpect_stat_values_zParser.expect_stat_values_ã  rÃ  r   c                 óˆ   — |                       ¦   «          | j        t          j        u r| j        S t          d| j        ¦  «        ‚)NzExpected a string)r?   rb   r   ÚSTRINGrf   r   rg   rR  s    r   rÎ  zParser.expect_string_í  s@   € Ø×ÒÑÔÐØÔ¥5¤<Ð/Ð/Ø”?Ð"ÝÐ1°4Ô3KÑLÔLÐLr   c                 óà  — |rA| j         r:t          j        | _        | j                              d¦  «        \  | _        | _        d S | j        | j        | j	        c| _        | _        | _        	 	 t          | j        ¦  «        \  | _        | _        | _	        n# t          $ r d\  | _        | _        Y nw xY w| j        t          j        k    rd S | j                              | j        | j	        f¦  «         Œ†)Nr   Tr%   )r;   r   rc   rb   r+   rf   rg   r9   r:   r<   Únextr=   ÚStopIterationrd   )r@   r(   s     r   r?   zParser.advance_lexer_ó  s  € Øð 		˜Ô*ð 		Ý#(¤=ˆDÔ Ø8<Ô8J×8NÒ8NÈqÑ8QÔ8QÑ5ˆDŒO˜TÔ5ØˆFð Ô%ØÔ ØÔ)ð LˆDÔ  $¤/°4Ô3Kð
	UðGõ
 ˜œÑ%Ô%ñ	ØÔ)ØÔ$ØÔ-Ð-øå ð Gð Gð GØ:FÑ7�Ô% tÔ'7Ð'7Ð'7ðGøøøàÔ$­¬Ò5Ð5Ø�ØÔ×%Ò% tÔ'7¸Ô9RÐ&SÑTÔTÐTð	Us   Á+'B ÂB/Â.B/c                 ó`   — d                      t          t          | ¦  «        ¦  «        ¦  «        S )z'abc' --> 'cba'r   )r-   rí  rU  )r   s    r   Úreverse_string_zParser.reverse_string_	  s$   € ð �wŠw•x¥ Q¡¤Ñ(Ô(Ñ)Ô)Ð)r   c                 óª   — t          ¦   «         }||k    rt          d|¦  «        ‚t          ||dz   ¦  «        D ]}|                     d|z  ¦  «         Œ|S )z>(location, 999, 1001) --> ["cid00999", "cid01000", "cid01001"]z*Bad range: start should be less than limitr   r£  )rU  r   rÆ   rd   )r@   rI   rÉ   rÊ   rO  rÐ   s         r   rã   zParser.make_cid_range_	  sh   € å‘”ˆØ�5Š=ˆ=Ý!Ø<¸hñô ð õ ˜ ¨¡	Ñ*Ô*ð 	+ð 	+ˆCØ�MŠM˜) c™/Ñ*Ô*Ð*Ð*Øˆr   c                 ó\  — t          ¦   «         }t          |¦  «        t          |¦  «        k    rt          d|›d|›d�|¦  «        ‚| j        }t          j                             ||g¦  «        } |t          j                              ||¦  «         ||¦  «        g¦  «        ¦  «        }t          |¦  «        dk    rK|t          |¦  «        t          |¦  «         …         }|t          |¦  «        t          |¦  «         …         }	n.|t          |¦  «        d…         }|t          |¦  «        d…         }	||	k    rt          d|¦  «        ‚t          j        d¦  «        }
|
 	                    |¦  «        rb|
 	                    |	¦  «        rMt          t          |¦  «        t          |	¦  «        dz   ¦  «        D ]}|                     d	|||fz  ¦  «         Œ|S t          j        d
¦  «        }| 	                    |¦  «        rb| 	                    |	¦  «        rMt          t          |¦  «        t          |	¦  «        dz   ¦  «        D ]}|                     d	|||fz  ¦  «         Œ|S t          j        d¦  «        }| 	                    |¦  «        rŒ| 	                    |	¦  «        rwt          t          |d¦  «        t          |	d¦  «        dz   ¦  «        D ]E}dt          |¦  «        z   t          |¦  «         d…         }|                     |›|›|›�¦  «         ŒF|S t          d|›d|›d�|¦  «        ‚)z?(location, "a.sc", "d.sc") --> ["a.sc", "b.sc", "c.sc", "d.sc"]zBad range: "z" and "z" should have the same lengthr   Nz+Start of range must be smaller than its endz^[A-Z]$r   z%s%c%sz^[a-z]$z^[0-9]{1,3}$r  Ú000rÁ   rÃ   )rU  r,   r   rÐ  ÚosÚpathÚcommonprefixrß  Úcompileré  rÆ   Úordrd   rè  rà   )r@   rI   rÉ   rÊ   rO  Úrevrõ   rø   Ústart_rangeÚlimit_rangeÚ	uppercaseÚcÚ	lowercaseÚdigitsr   r\  s                   r   rÝ   zParser.make_glyph_range_	  s#  € å‘”ˆÝˆu‰:Œ:�˜U™œÒ#Ð#Ý!�/ØJOÈ%È%ÐQVÐQVÐQVÐWØñô ð ð
 Ô"ˆÝ”×%Ò% u¨e nÑ5Ô5ˆØ�•R”W×)Ò)¨3¨3¨u©:¬:°s°s¸5±z´zÐ*BÑCÔCÑDÔDˆÝˆv‰;Œ;˜Š?ˆ?Ø¥ F¡¤­s°6©{¬{¨lÐ :Ô;ˆKØ¥ F¡¤­s°6©{¬{¨lÐ :Ô;ˆKˆKà¥ F¡¤  Ô.ˆKØ¥ F¡¤  Ô.ˆKà˜+Ò%Ð%Ý!Ø=¸xñô ð õ ”J˜zÑ*Ô*ˆ	Ø�?Š?˜;Ñ'Ô'ð 	¨I¯OªO¸KÑ,HÔ,Hð 	Ý�3˜{Ñ+Ô+­S°Ñ-=Ô-=ÀÑ-AÑBÔBð >ð >�Ø—’˜h¨&°!°VÐ)<Ñ<Ñ=Ô=Ð=Ð=ØˆMå”J˜zÑ*Ô*ˆ	Ø�?Š?˜;Ñ'Ô'ð 	¨I¯OªO¸KÑ,HÔ,Hð 	Ý�3˜{Ñ+Ô+­S°Ñ-=Ô-=ÀÑ-AÑBÔBð >ð >�Ø—’˜h¨&°!°VÐ)<Ñ<Ñ=Ô=Ð=Ð=ØˆMå”˜OÑ,Ô,ˆØ�<Š<˜Ñ$Ô$ð 	¨¯ª°kÑ)BÔ)Bð 	Ý�3˜{¨BÑ/Ô/µ°[À"Ñ1EÔ1EÈÑ1IÑJÔJð Cð C�Ø¥# a¡&¤&™.­3¨{Ñ+;Ô+;Ð*;Ð*=Ð*=Ô>�Ø—’¨&¨&°&°&¸&¸&ÐAÑBÔBÐBÐBØˆMåˆo°e°e°e¸U¸U¸UÐCÀXÑNÔNÐNr   )r   TN)F)NFN)lÚ__name__Ú
__module__Ú__qualname__Ú__doc__rv   r0   rÆ   rm  rn  rF   r{   r�   r•   rm   rl   r«   r²   r»   rk   rÌ   r¦   rþ   r  r  r  ri   r  r  r#  ro   r>  rp   r±   rM  rN  rO  rP  ri  r€  r„  rŽ  r˜  rs   r£  r¤  r¥  r¦  r§  r’  rÔ  rÄ  rÏ  Ústaticmethodrà  rÛ  rð  r¨  r©  r  r(  r2  r-  rª  rö  r÷  rB  rú  rŽ   rò   ró   rt   rn   rq   rw  r~  rˆ  r†  r‡  r±  rr   r(  rh   rA  rá   r  rÔ   rÕ   r“   r›   rg  r  r†   r‡   rˆ   r�   rµ  r·  rÍ  r5  r¼  r‡  r.  rÉ  rÎ  r?   rÐ  rã   rÝ   r   r   r   r   r      sù  € € € € € ðð ð0 €JØ
€CØ>Ð>¨U¨U°1°fÑ-=Ô-=Ð>Ñ>Ô>€OØ>Ð>¨U¨U°1°fÑ-=Ô-=Ð>Ñ>Ô>€Oð KOð+ð +ð +ð +ðB=ð =ð =ð~4
ð 4
ð 4
ðl
ð 
ð 
ðð ð ð"
Hð 
Hð 
Hð	Rð 	Rð 	RðHð Hð Hð
ð 
ð 
ð8ð ð ð(ð (ð (ðTbð bð bð bðH[Gð [Gð [Gðzð ð ð&ð ð ð
ð 
ð 
ðAð Að Að
ð 
ð 
ðYð Yð YðWð Wð Wðð ð ð27
ð 7
ð 7
ðrð ð ð,3
ð 3
ð 3
ðj
ð 
ð 
ð Mð Mð MðQð Qð Qð"Rð Rð RðCð Cð Cð}ð }ð }ð~=ð =ð =ð
ð 
ð 
ð$
ð 
ð 
ðð ð ð<ð ð ð0Yð Yð Yðð ð ð6ð ð ð8Sð Sð Sð"8ð 8ð 8ð@8ð 8ð 8ð:

ð 

ð 

ð
)ð 
)ð 
)ð ðð ñ „\ðð ð4ð 4ñ „\ð4ðð ð ð;ð ;ð ;ðz*ð *ð *ðXð ð ð8 
ð  
ð  
ðD6
ð 6
ð 6
ðp@ð @ð @ðB'ð 'ð 'ðR
ð 
ð 
ð
ð 
ð 
ð,ð ,ð ,ð:ð :ð :ð&ð ð ð
ð 
ð 
ðL
ð L
ð L
ð\	ð 	ð 	ðUð Uð Uð$ð $ð $ð $ðLRð Rð Rð!ð !ð !ðF+ð +ð +ðZ"ð "ð "ðH
Nð 
Nð 
NðJð Jð Jð$Sð $Sð $SðN RVðL!ð L!ð L!ð L!ð\ð ð ðð ð ðJð Jð Jðð ð ðXð Xð XðBð Bð Bðð ð ð.ð .ð .ðð ð ðð ð ðRð Rð RðSð Sð SðKð Kð KðMð Mð Mð Mðð ð ðð ð ð6
ð 
ð 
ð
ð 
ð 
ðð ð ðð ð ðð ð ð ð ð ðMð Mð MðUð Uð Uð Uð0 ð*ð *ñ „\ð*ð	ð 	ð 	ð+Oð +Oð +Oð +Oð +Or   r   c                   ó,   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ ZdS )r3   c                 ó   — i g| _         d S r!   ©Úscopes_rR  s    r   rF   zSymbolTable.__init__J	  s   € Ø�tˆŒˆˆr   c                 ó:   — | j                              i ¦  «         d S r!   )rè  rd   rR  s    r   r{  zSymbolTable.enter_scopeM	  s   € ØŒ×Ò˜BÑÔÐÐÐr   c                 ó8   — | j                              ¦   «          d S r!   )rè  r+   rR  s    r   r|  zSymbolTable.exit_scopeP	  s   € ØŒ×ÒÑÔÐÐÐr   c                 ó&   — || j         d         |<   d S )Nrñ   rç  )r@   r]   Úitems      r   r˜   zSymbolTable.defineS	  s   € Ø!%ˆŒ�RÔ˜ÑÐÐr   c                 ój   — t          | j        ¦  «        D ]}|                     |¦  «        }|r|c S Œd S r!   )rí  rè  rC  )r@   r]   Úscoperì  s       r   r‰   zSymbolTable.resolveV	  sE   € Ý˜dœlÑ+Ô+ð 	ð 	ˆEØ—9’9˜T‘?”?ˆDØð Ø���ðàˆtr   N)rà  rá  râ  rF   r{  r|  r˜   r‰   r   r   r   r3   r3   I	  s_   € € € € € ðð ð ð ð  ð  ðð ð ð&ð &ð &ðð ð ð ð r   r3   )ÚfontTools.feaLib.errorr   ÚfontTools.feaLib.lexerr   r   r   ÚfontTools.feaLib.variableScalarr   ÚfontTools.misc.encodingToolsr   ÚfontTools.misc.textToolsr	   r
   r   ÚfontTools.feaLib.astÚfeaLibr0   ÚloggingrÔ  rß  Ú	getLoggerrà  rÞ   Úobjectr   r3   r   r   r   ú<module>rù     s1  ðØ 2Ð 2Ð 2Ð 2Ð 2Ð 2Ø KÐ KÐ KÐ KÐ KÐ KÐ KÐ KÐ KÐ KØ :Ð :Ð :Ð :Ð :Ð :Ø 4Ð 4Ð 4Ð 4Ð 4Ð 4Ø <Ð <Ð <Ð <Ð <Ð <Ð <Ð <Ð <Ð <Ø "Ð "Ð "Ð "Ð "Ð "Ð "Ð "Ð "Ø €€€Ø 	€	€	€	Ø 	€	€	€	ð €gÔ˜Ñ!Ô!€ðw$Oð w$Oð w$Oð w$Oð w$OˆVñ w$Oô w$Oð w$OðtIð ð ð ð �&ñ ô ð ð ð r   