§
    ÛóÉ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 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)Ú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 eh 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„ Z0d2„ Z1d3„ Z2d4„ Z3d5„ Z4d6„ Z5e6d7„ ¦   «         Z7d8„ Z8d9„ Z9d:„ Z:d;„ Z;d<„ Z<d=„ Z=d>„ Z>d?„ Z?d@„ Z@dA„ ZAdB„ ZBdC„ ZCdD„ ZDdE„ ZEdF„ ZFdG„ ZGdH„ ZHdndI„ZIdJ„ ZJdK„ ZKdL„ ZLdM„ ZMdN„ ZNdO„ ZOdP„ ZP	 dodQ„ZQdR„ ZRdS„ ZSdT„ ZTdU„ ZUdV„ ZVdW„ ZWdX„ ZXdY„ ZYdZ„ ZZd[„ Z[d\„ Z\d]„ Z]d^„ Z^dnd_„Z_d`„ Z`da„ Zadb„ Zbdc„ Zcdd„ Zdde„ Zedf„ Zfdg„ Zgdh„ Zhdndi„Zie6dj„ ¦   «         Zjdk„ Zkdl„ Zld	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     ú|/home/lighthouse/badge-speaker-benchmark/.benchmark-venv-community/lib64/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)rU   Ú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:
ú
)"r1   Ú
statementsr8   r:   r>   Úcur_token_type_r   ÚCOMMENTÚappendr/   Ú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?   r`   Úerrors      r   ÚparsezParser.parseM   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ÚyDeviceTablerH   T©Úvariabler€   r$   )Úexpect_symbol_Úexpect_keyword_rf   r9   r8   r   rt   Úexpect_name_r3   Úresolver   r/   ÚAnchorÚxÚyr€   Úexpect_number_Úparse_device_)	r?   rH   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)r9   r�   r†   Úexpect_markClass_reference_rc   )r?   ÚanchorMarksr}   rR   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 )NrM   r€   rX   )r€   rH   )rg   rf   rŒ   r9   r†   r‡   r…   r/   ÚAnchorDefinitionr3   Údefine)r?   rH   rŠ   r‹   r€   r\   rŽ   s          r   rl   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 )NrJ   Ú}z-bad splitting in Lexer.scan_anonymous_block()rX   rG   )rg   Úexpect_tag_r<   Úscan_anonymous_blockr>   r…   r/   ÚAnonymousBlock)r?   ÚtagÚ_ÚcontentrH   Úend_tags         r   rk   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_glyphnamerX   rG   )	rg   rf   Úparse_glyphclass_rŒ   r9   Úaddr…   r/   ÚAttachStatement)r?   rH   Ú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©Ú
enumeratedrQ   )re   r>   Úparse_position_)r?   rQ   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£   rX   rG   )rg   rf   r9   r¥   r…   r/   ÚGlyphClassDefStatement)r?   rH   Ú
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£   rX   rG   )rf   re   r…   r¥   r/   ÚGlyphClassDefinitionr4   r—   )r?   rH   r\   r¨   Ú
glyphclasss        r   rj   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>E  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.   rc   r   )	r?   r\   rH   Ú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~   rG   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 )$r8   r   rt   ÚCIDr9   r>   r/   Ú	NullGlyphrf   Úexpect_glyph_Úcheck_glyph_name_in_glyph_setÚ	GlyphNameri   r4   rˆ   re   r   Ú
isinstanceÚ	MarkClassÚMarkClassNameÚGlyphClassNamer…   Ú
GlyphClassr.   rË   Ú	add_rangeÚmake_glyph_range_ÚlogÚwarningÚstrrc   Úexpect_cid_Úadd_cid_rangeÚmake_cid_range_Ú	add_classr;   )r?   r¤   Úaccept_nullÚglyphÚgcrH   r¨   rÈ   rÉ   Úrange_locationÚrange_startÚ	range_endÚ
glyph_names                r   r¥   zParser.parse_glyphclass_L  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´   rX   Tr£   ú'z_Unsupported contextual target sequence: at most one run of marked (') glyph/class names allowedrO   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   )r9   r¥   r…   r   rf   rc   Úis_next_value_Úparse_valuerecord_r†   r‡   r5   rˆ   r+   Úany)r?   rQ   Úprefixr¨   ÚlookupsÚvaluesÚsuffixÚhasMarksræ   ÚmarkedÚ
lookuplistÚlookup_namerO   Ú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 )	NFrP   z(No lookups can be specified for "ignore rÂ   zAmbiguous "ignore z)", there should be least one marked glyphr   r   )rf   rý   ró   r   rÝ   rÞ   rß   )r?   ÚsubrH   rô   r¨   rõ   rö   r÷   rø   ry   Ú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´   rX   )rf   r  r9   r…   rc   )r?   rÿ   rH   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ÿ   rG   )ÚpositionÚposr  z#Expected "substitute" or "position")	rg   rf   r>   re   r  r/   ÚIgnoreSubstStatementÚIgnorePosStatementr   )r?   rH   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 )NrI   rG   )re   rf   Úexpect_filename_r/   ÚIncludeStatement)r?   rH   Úfilenames      r   rh   zParser.parse_include_8  sD   € ØŒ )Ò+Ð+Ð+Ð+ØÔ+ˆØ×(Ò(Ñ*Ô*ˆåÔ# H°xÐ@Ñ@Ô@Ð@r   >   r  rÿ   r¬   Úrsubr  rO   ÚscriptrS   Úlanguager  ÚsubtablerM   r­   rR   Ú
lookupflagÚ
parametersÚ
reversesubr  ÚcvParametersÚfeatureNamesÚsizemenunamerW   c                 óÚ  — |                       d¦  «        sJ ‚| j        }|                      ¦   «         g}| j        t          j        u r„| j        dvr{| j        | j        vrm| j        | j        vr_| 	                    |                      ¦   «         ¦  «         | j        t          j        u r%| j        dvr| j        | j        vr| j        | j        v°_t          |¦  «        dk    rd|v rt          d|¦  «        ‚d\  }}| j        dv r|                      ¦   «         dk    }| j        d	k    r|                      d	¦  «         d
}|                      d¦  «         | j                             ||||¬¦  «        S )Nr  >   ÚrequiredÚexclude_dfltÚinclude_dfltr   Údfltz3"dflt" must be the only tag in a language statement)TF>   r  r  r  r  TrX   rG   )rg   rf   Úexpect_language_tag_r8   r   rt   r9   Ú_statement_keywordsru   rc   r+   r   r‡   r†   r…   r/   ÚLanguageStatement)r?   rH   Ú	languagesÚinclude_defaultr  s        r   Úparse_language_zParser.parse_language_]  s¢  € Ø×#Ò# JÑ/Ô/Ð/Ð/Ð/ØÔ+ˆØ×.Ò.Ñ0Ô0Ð1ˆ	àÔ!¥U¤ZÐ/Ð/ØÔ Ð(TÐTÐTØÔ ¨Ô(@Ð@Ð@ØÔ ¨¬Ð7Ð7à×Ò˜T×6Ò6Ñ8Ô8Ñ9Ô9Ð9ð Ô!¥U¤ZÐ/Ð/ØÔ Ð(TÐTÐTØÔ ¨Ô(@Ð@Ð@ØÔ ¨¬Ð7Ð7õ ˆy‰>Œ>˜AÒÐ &¨IÐ"5Ð"5Ý!ØEÀxñô ð ð %2Ñ!ˆ˜ØÔÐ?Ð?Ð?Ø"×/Ò/Ñ1Ô1°^ÒCˆOØÔ˜zÒ)Ð)Ø× Ò  Ñ,Ô,Ð,ØˆHØ×Ò˜CÑ Ô Ð ØŒx×)Ò)Ø�¨¸8ð *ñ 
ô 
ð 	
r   c                 ór  — |                       d¦  «        sJ ‚| j        }|                      d¬¦  «        }|                      ¦   «         g}| j        dk    r2|                     |                      ¦   «         ¦  «         | j        dk    °2|                      d¦  «         | j                             |||¬¦  «        S )NÚLigatureCaretByIndexTr£   rX   rG   )	rg   rf   r¥   rŒ   r9   rc   r…   r/   ÚLigatureCaretByIndexStatement©r?   rH   r¨   Úcaretss       r   Úparse_ligatureCaretByIndex_z"Parser.parse_ligatureCaretByIndex_w  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ƒ   rX   rG   )	rg   rf   r¥   rŒ   r9   rc   r…   r/   ÚLigatureCaretByPosStatementr(  s       r   Úparse_ligatureCaretByPos_z Parser.parse_ligatureCaretByPos_�  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 )NrO   rX   rï   rG   FÚuseExtensionT)rg   rf   r‡   r9   r5   rˆ   r   r…   r/   ÚLookupReferenceStatementr†   ÚLookupBlockÚparse_block_r—   )r?   rQ   rH   r\   rO   Úuse_extensionÚblocks          r   rn   zParser.parse_lookup_‹  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 )Nr  rX   rG   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ÚmarkFilteringSetrH   )rg   rf   r8   r   ÚNUMBERrŒ   r…   r/   ÚLookupFlagStatementr-   r9   r   r;   r¦   r†   r¥   r‡   ró   )r?   rH   ÚvalueÚ
value_seenr@  rA  Ú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 )NrR   Tr£   z*Empty glyph class in mark class definitionrX   rG   )rg   rf   r¥   ÚglyphSetr   r�   Úexpect_class_name_r…   r1   ÚmarkClassesÚgetr/   r×   r4   r—   ÚMarkClassDefinitionÚaddDefinition)r?   rH   r¨   r}   r\   rR   Úmcdefs          r   ro   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‘   rX   z3If "lookup" is present, no values must be specifiedrG   r7  r   r   )r¯   rH   z2"enumerate" is only allowed with pair positionings©Ú
forceChainrH   )re   r9   Úparse_position_cursive_Úparse_position_base_Úparse_position_ligature_Úparse_position_mark_rf   rý   r…   ró   r   r/   ÚChainContextPosStatementr+   ÚreverseÚPairPosStatementÚSinglePosStatementÚlistÚzip)
r?   r¯   rQ   rH   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 )NrR  z>"enumerate" is not allowed with cursive attachment positioningTr£   rX   rG   )rf   r†   r   r¥   r�   r…   r/   ÚCursivePosStatement)r?   r¯   rQ   rH   r¾   ÚentryAnchorÚ
exitAnchors          r   rW  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 )NrS  zC"enumerate" is not allowed with mark-to-base attachment positioningTr£   rX   rG   )rf   r†   r   r¥   r”   r…   r/   ÚMarkBasePosStatement)r?   r¯   rQ   rH   rS  Úmarkss         r   rX  zParser.parse_position_base_8  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 )NrT  zG"enumerate" is not allowed with mark-to-ligature attachment positioningTr£   ÚligComponentrX   rG   )
rf   r†   r   r¥   r”   r9   rc   r…   r/   ÚMarkLigPosStatement)r?   r¯   rQ   rH   Ú	ligaturesrg  s         r   rY  zParser.parse_position_ligature_F  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£   rX   rG   )rf   r†   r   r¥   r”   r…   r/   ÚMarkMarkPosStatement)r?   r¯   rQ   rH   Ú	baseMarksrg  s         r   rZ  zParser.parse_position_mark_W  sš   € ØÔ+ˆØ×Ò˜VÑ$Ô$Ð$Øð 	Ý!ð6àñô ð ð
 ×*Ò*¸DÐ*ÑAÔAˆ	Ø×(Ò(Ñ*Ô*ˆØ×Ò˜CÑ Ô Ð ØŒx×,Ò,¨Y¸ÈÐ,ÑQÔQÐQr   c                 óÈ   — |                       d¦  «        sJ ‚| j        |                      ¦   «         }}|                      d¦  «         | j                             ||¬¦  «        S )Nr  rX   rG   )rg   rf   Úexpect_script_tag_r…   r/   ÚScriptStatement)r?   rH   r  s      r   Úparse_script_zParser.parse_script_e  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ÿ   r  r  r  >   r  r  FrP   z-Substitution statements cannot contain valuesrì   rX   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"rG   c                 ó   — g | ]}|®|‘ŒS r    r   )r   rÃ   s     r   r^   z,Parser.parse_substitute_.<locals>.<listcomp>ž  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 elementsrU  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)re   rf   rý   ró   r   r9   r†   r¥   rc   r…   r+   rJ  r/   ÚAlternateSubstStatementrÖ   rÒ   r_  ÚSingleSubstStatementÚMultipleSubstStatementÚLigatureSubstStatementÚsortedÚ ReverseChainSingleSubstStatementÚChainContextSubstStatement)r?   rH   r\  Ú
old_prefixÚoldrõ   rö   Ú
old_suffixrø   ÚnewÚkeywordræ   Únum_lookupsÚis_deletionr¨   ÚreplacementsÚcountÚnÚrules                      r   Úparse_substitute_zParser.parse_substitute_k  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 )Nr  rX   rG   )rg   rf   r…   r/   ÚSubtableStatement)r?   rH   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 )Nr  g        r   rX   rG   )rg   rf   Úexpect_decipoint_rŒ   r8   r   rB  ÚFLOATr…   r/   ÚSizeParameters)r?   rH   Ú
DesignSizeÚSubfamilyIDÚ
RangeStartÚRangeEnds         r   Úparse_size_parameters_zParser.parse_size_parameters_0  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 )Nr  ÚsizerG   )rg   rf   Úparse_name_r/   ÚFeatureNameStatement)r?   rH   Ú
platformIDÚ	platEncIDÚlangIDÚstrings         r   Úparse_size_menuname_zParser.parse_size_menuname_B  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 )	NrV   rG   Ú{)ÚGDEFÚheadÚhheaÚvhear\   ÚBASEzOS/2ÚSTATz"table %s" is not supportedr™   úExpected "%s"rX   )rg   rf   rš   r/   Ú
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_rM  r   Ústrip)r?   rH   r\   rV   Úhandlerr    s         r   rr   zParser.parse_table_J  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&   rG   r¢   r³   r&  r,  rX   z<Expected Attach, LigatureCaretByIndex, or LigatureCaretByPos)r`   r9   r:   r>   ra   r   rb   rc   r/   rd   re   rf   rg   rª   rº   r*  r.  r   ©r?   rV   r`   s      r   r§  zParser.parse_table_GDEF_h  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&   rG   ÚFontRevisionrX   zExpected FontRevision)r`   r9   r:   r>   ra   r   rb   rc   r/   rd   re   rf   rg   Úparse_FontRevision_r   r²  s      r   r¨  zParser.parse_table_head_€  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&   rG   rX   úIncomplete statementz4Expected CaretOffset, Ascender, Descender or LineGap)r`   r9   r:   r>   ra   r   rb   rc   r/   rd   re   rf   rt   ÚlowerrŒ   Ú	HheaFieldr   r;   ©r?   rV   r`   ÚfieldsÚkeyrD  s         r   r©  zParser.parse_table_hhea_�  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&   rG   rX   r»  z?Expected VertTypoAscender, VertTypoDescender or VertTypoLineGap)r`   r9   r:   r>   ra   r   rb   rc   r/   rd   re   rf   rt   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&   rG   ÚnameidrX   zExpected nameid)r`   r9   r:   r>   ra   r   rb   rc   r/   rd   re   rf   rg   Úparse_nameid_r   )r?   rV   r`   Ú	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   é	  rX   úUnsupported encoding)
r8   r   ÚNUMBERSÚexpect_any_number_rf   r   Úexpect_string_r…   r   Úunescape_string_©r?   r™  rš  r˜  rH   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Ï  )	r8   r   rÐ  rÑ  rf   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 32767rG   )re   rf   rÑ  r   r–  r/   Ú
NameRecord)r?   rH   Ú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°t          ¦   «         }t          j        d|¦  «        D ]w}t          |¦  «        dk    r8|d         dk    r,|                     t          |dd …         d¦  «        ¦  «         ŒM|r(|                     | 	                    |¦  «        ¦  «         Œx| 
                    |¦  «        }t          |dd	¦  «        }t          |d¦  «        S )
NÚ	utf_16_bez\\[0-9a-fA-F]{4}z(\\[0-9a-fA-F]{2})rÌ  r   ú\r   é   Úsurrogatepass)Úrerÿ   Úunescape_unichr_Ú	bytearrayrÄ   r+   rc   ÚintÚextendÚencodeÚdecoder	   r
   )r?   r›  rÕ  r   ÚoutÚtokenÚutf16s          r   rÓ  zParser.unescape_string_   sì   € Ø�{Ò"Ð"Ý”Ð*¨DÔ,AÀ6ÑJÔJˆAˆAõ ‘+”+ˆCÝœÐ"7¸Ñ@Ô@ð 7ð 7�Ý�u‘:”: ’?�? u¨Q¤x°4Ò'7Ð'7Ø—J’J�s 5¨¨¨¤9¨bÑ1Ô1Ñ2Ô2Ð2Ð2Øð 7Ø—J’J˜uŸ|š|¨HÑ5Ô5Ñ6Ô6Ð6øØ—
’
˜8Ñ$Ô$ˆAõ ˜˜;¨Ñ8Ô8ˆÝ�U˜KÑ(Ô(Ð(r   c                 óv   — |                       d¦  «        dd …         }t          t          |d¦  «        ¦  «        S )Nr   r   rß  )ÚgroupÚchrrä  )Úmatchr…  s     r   râ  zParser.unescape_unichr_6  s.   € à�KŠK˜‰NŒN˜1˜2˜2ÔˆÝ•3�q˜"‘:”:‰ŒÐr   c                 óŒ   — t          |¦  «        D ]3}t          || j        j        ¦  «        rŒt          ||¦  «        r|c S  d S d S r    )ÚreversedrÖ   r/   rd   )r?   r`   Ú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&   rG   ú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 statementsrX   )r`   r9   r:   r>   ra   r   rb   rc   r/   rd   re   rf   rg   Úparse_base_tag_list_Úparse_base_script_list_r+   ÚBaseAxisró  r   rQ   ÚminmaxÚparse_base_minmax_)r?   rV   r`   Úhoriz_basesÚhoriz_scriptsÚbase_script_listÚ
vert_basesÚvert_scriptss           r   r¬  zParser.parse_table_BASE_H  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&   rG   ÚPanoseé
   rX   ÚVendor)r`   r9   r:   r>   ra   r   rb   rc   r/   rd   re   rf   rt   r¼  rŒ   rg   rÅ   rÒ  ÚOS2Field)r?   rV   r`   ÚnumbersrÊ   rÀ  rD  r   s           r   r­  zParser.parse_table_OS_2_…  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\   ÚstatrG   rX   úUnexpected token z in ElidedFallbackNameúExpected "name")rg   r…   r9   r:   r>   rØ  r/   ÚSTATNameStatementrf   rc   re   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  rG   rX   zExpected "name", got )rg   rš   ÚisupperrÝ   rÞ   rŒ   r…   r9   r:   r>   ra   r   rb   rf   rØ  r/   r  rc   re   r   ÚSTATDesignAxisStatement)
r?   r  ÚaxisTagÚ	axisOrderrH   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  rG   rH   ÚflagrX   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.)rg   r…   r9   r:   r>   ra   r   rb   rf   rØ  r/   r  rc   Úparse_STAT_locationÚexpect_stat_flagsre   r   r+   rö   r�   ÚSTATAxisValueStatement)r?   Ú	locationsr  rF  rH   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 )Nr8  r/  z must be 4 charactersrX   zUnexpected value "z". Expected integer or float.rÌ  zDefault value z is outside of specified range rÀ   ú.)rš   r+   r¯  r   re   rf   r9   r8   r   r�  Úexpect_float_rc   rB  rŒ   r;   r/   ÚAxisValueLocationStatement)r?   rö   r�   rD  ÚnominalÚmin_valÚmax_vals          r   r0  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&   rG   r  ÚElidedFallbackNameIDrX   r!  r-  zDesignAxis not defined for r7  r  )r`   r9   r:   r>   ra   r   rb   rc   r/   rd   re   rf   rt   rg   r  r  rŒ   r>  r…   r+  r�   r5  r3  r   )	r?   rV   r`   Údesign_axesr  rD  Ú
designAxisÚaxisValueRecordrH   s	            r   r®  zParser.parse_table_STAT_H  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÷  rX   )re   r9   rc   rp  r…   )r?   Úbasess     r   rù  zParser.parse_base_tag_list_q  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´   rX   )re   Úparse_base_script_record_r9   r…   rc   )r?   r„  Úscriptss      r   rú  zParser.parse_base_script_list_}  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   )rp  rÅ   )r?   r„  Ú
script_tagÚbase_tagÚcoordss   `    r   rE  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)rp  r  rŒ   r>   ra   r   rv   re   r   rf   r9   )r?   rI  r  Ú	min_coordÚ	max_coords        r   rý  zParser.parse_base_minmax_�  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†   r9   rŒ   rc   Útuple)r?   Úresults     r   r�   zParser.parse_device_¢  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|   ú()r8   r   rB  r9   ©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 )NrT  Trƒ   )ÚyAdvancerQ   rH   )ÚxAdvancerQ   rH   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)rQ   rH   )r8   r   rv   r9   rB  rŒ   rf   r/   ÚValueRecordr…   rt   r‡   r6   rˆ   r   rD  Ú
xPlacementÚ
yPlacementrX  rW  r�   ry  )r?   rQ   ÚnumberrH   Úvalr\   ÚvrdrD  r]  r^  rX  rW  Ú
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 )NrW   rX   rG   )	rg   rf   rò   r‡   r…   r/   ÚValueRecordDefinitionr6   r—   )r?   rQ   rH   rD  r\   ra  s         r   rs   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 )NrN   rX   rG   )re   rf   rp  r  r…   r/   ÚLanguageSystemStatement)r?   rH   r  r  s       r   rm   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 )	NrU   rS   >   ÚvaltÚvhalÚvkrnÚvpalFr•  Tr0  )r4  rH   )re   rf   rš   ÚSS_FEATURE_TAGSÚCV_FEATURE_TAGSr‡   r9   r†   r/   ÚVariationBlockÚFeatureBlockr3  )r?   rU   rH   r�   rQ   ÚstylisticsetÚ
cv_featureÚsize_featurerT   r4  r5  s              r   rp   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 )NrS   rX   rG   )re   rf   rš   r…   r/   ÚFeatureReferenceStatement)r?   rH   Ú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>`_.
        r  rG   rž  r™   Tr&   r\   rX   r  )re   r/   ÚNestedBlockrf   r…   r7   Úenter_scoper9   r:   r>   ra   r   rb   r`   rc   rd   rg   r–  r—  r   Ú
exit_scope)	r?   r�   r5  ÚsymtabrH   r˜  r™  rš  r›  s	            r   Úparse_featureNames_zParser.parse_featureNames_F  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 )Nr  rG   rž  r™   Tr&   >   ÚSampleTextNameIDÚFeatUILabelNameIDÚParamUILabelNameIDÚFeatUITooltipTextNameIDÚ	CharacterrX   zExpected statement: got {} {})re   r/   r|  rf   r…   r7   r}  r`   r9   r:   r>   ra   r   rb   rc   rd   rg   Úparse_cvNameIDs_Úparse_cvCharacter_r   rw   r~  )r?   r�   r5  r  r`   s        r   Úparse_cvParameters_zParser.parse_cvParameters_i  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 )	NrG   rž  r™   Tr&   r\   rX   r  )re   r/   r|  rf   r…   r7   r}  r9   r:   r>   ra   r   rb   r`   rc   rd   rg   r–  ÚCVParametersNameStatementr   r~  )
r?   r�   Ú
block_namer5  r  rH   r˜  r™  rš  r›  s
             r   r‡  zParser.parse_cvNameIDs_–  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†  rX   iÿÿÿ r   z/Character value must be between {:#x} and {:#x}rG   )re   rf   rÑ  r…   r   rw   r/   ÚCharacterStatement)r?   r�   rH   Ú	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´  rX   r   z&Font revision numbers must be positiverG   )re   rf   r8  r…   r   r/   ÚFontRevisionStatement)r?   rH   Ú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ƒ   rX   r¥  rG   )rf   r‡   r…   r9   r>   ra   r   rt   r   re   r8   r�  r8  rB  rŒ   r/   ÚConditionsetStatement)r?   rH   r\   Ú
conditionsÚaxisÚ	min_valueÚ	max_valueÚ	finalnames           r   rq   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&   rG   rM   r¬   r­   rP   rS   r  r  rO   r  rR   r  r  Fr®   r  >   rÿ   r  r  r  r  rW   r  r  r  r  rX   z7Expected glyph class definition or statement: got {} {}r¥  )+r…   r7   r}  r`   r9   r:   r>   ra   r   rb   rc   r/   rd   re   rf   ri   rj   rg   rl   r±   rz  r  r$  rn   rH  ro   r°   rr  r‡  rŠ  rs   r€  r‰  r“  rœ  rt   ru   r   rw   r~  r‡   r\   r¯  )	r?   r5  rQ   rt  rv  ru  r  r`   r\   s	            r   r3  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)ra   r   rt   rÖ   Útypere   )r?   r"   s     r   rg   zParser.is_cur_keyword_D  sI   € ØÔ¥5¤:Ð-Ð-Ý˜!�T "™XœXÑ&Ô&ð ,Ø”¨!Ò+Ð+à”¨!Ð+Ð+Øˆur   c                 óˆ   — |                       ¦   «          | j        t          j        urt	          d| j        ¦  «        ‚| j        S )NzExpected @NAME)r>   ra   r   ri   r   rf   re   rU  s    r   rK  zParser.expect_class_name_L  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>   ra   r   rÑ   re   r   rf   rU  s    r   rà   zParser.expect_cid_R  s@   € Ø×ÒÑÔÐØÔ¥5¤9Ð,Ð,Ø”?Ð"ÝÐ.°Ô0HÑIÔIÐIr   c                 óˆ   — |                       ¦   «          | j        t          j        urt	          d| j        ¦  «        ‚| j        S )NzExpected file name)r>   ra   r   ÚFILENAMEr   rf   re   rU  s    r   r  zParser.expect_filename_X  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        ¦  «        ‚)NrÞ  úcid%05dzExpected a glyph name or CID)	r>   ra   r   rt   re   ÚlstriprÑ   r   rf   rU  s    r   rÓ   zParser.expect_glyph_^  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=   rf   )r?   r  r\   s      r   rÔ   z$Parser.check_glyph_name_in_glyph_setf  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)rK  r4   rˆ   r   rf   rÖ   r/   r×   )r?   r\   Úmcs      r   r’   z"Parser.expect_markClass_reference_t  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 tagr8  z'Tags cannot be longer than 4 charactersz    )r>   ra   r   rt   r   rf   r+   re   rU  s    r   rš   zParser.expect_tag_�  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 )Nr  z4"dflt" is not a valid script tag; use "DFLT" instead©rš   r   rf   ©r?   r�   s     r   rp  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_”  s>   € Ø×ÒÑ Ô ˆØ�&Š=ˆ=Ý!ØHØÔ(ñô ð ð ˆ
r   c                 óš   — |                       ¦   «          | j        t          j        u r| j        |k    r|S t          d|z  | j        ¦  «        ‚)NzExpected '%s')r>   ra   r   rv   re   r   rf   )r?   Úsymbols     r   r…   zParser.expect_symbol_�  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>   ra   r   rt   re   r   rf   )r?   r€  s     r   r†   zParser.expect_keyword_£  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±  rU  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        ¦  «        ‚)NrT  zExpected a number)	r>   ra   r   rB  re   rv   Úexpect_variable_scalar_r   rf   )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          ¦   «         }d}	 | j        t          j        k    r| j        dk    rnz| j        t          j        k    r7|rt          d| j        ¦  «        ‚d}i | j        }}|                       ¦   «          n|  	                    ¦   «         \  }}| 
                    ||¦  «         Œ›|S )NFTr[   z(Duplicate value for the default location)r>   r   ra   r   rv   re   rB  r   rf   Úexpect_master_Ú	add_value)r?   ÚscalarÚdefault_seenrH   rD  s        r   r´  zParser.expect_variable_scalar_·  sÙ   € Ø×ÒÑÔÐÝÑ!Ô!ˆØˆð	.ØÔ#¥u¤|Ò3Ð3¸¼È3Ò8NÐ8NØØÔ#¥u¤|Ò3Ð3Øð Ý)ØBØÔ0ñô ð ð  $�Ø"$ d¤o˜%�Ø×#Ò#Ñ%Ô%Ð%Ð%à"&×"5Ò"5Ñ"7Ô"7‘�˜%Ø×Ò˜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   )ra   r   rt   r   rf   re   r>   rv   Úexpect_integer_or_float_r8   r9   rä  )r?   rH   r—  rD  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>   ra   r   rÐ  re   r   rf   rU  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>   ra   r   r�  re   r   rf   rU  s    r   r8  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©r8   r   r�  r8  rB  rŒ   r   rf   rU  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Â  rU  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   r7  )ÚOlderSiblingFontAttributeÚElidableAxisValueNamerX   zUnexpected STAT flag )r9   r‡   r   re   rf   )r?   rD  rF  r\   s       r   r1  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Â  rU  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>   ra   r   ÚSTRINGre   r   rf   rU  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   rb   ra   r*   re   rf   r8   r9   r;   Únextr<   ÚStopIterationrc   )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ð  r_  )r   s    r   Úreverse_string_zParser.reverse_string_C	  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£  )r_  r   rÅ   rc   )r?   rH   rÈ   rÉ   rR  rÏ   s         r   râ   zParser.make_cid_range_H	  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Â   )r_  r+   r   rÐ  ÚosÚpathÚcommonprefixrá  Úcompilerî  rÅ   Úordrc   rä  rß   )r?   rH   rÈ   rÉ   rR  Úrevrô   r÷   Ústart_rangeÚlimit_rangeÚ	uppercaseÚcÚ	lowercaseÚdigitsr   r_  s                   r   rÜ   zParser.make_glyph_range_S	  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)mÚ__name__Ú
__module__Ú__qualname__Ú__doc__ru   r/   rÅ   rp  rq  rE   rz   r�   r”   rl   rk   rª   r±   rº   rj   rË   r¥   rý   r  r  r  rh   Ú	frozensetr   r$  r*  r.  rn   rH  ro   r°   rW  rX  rY  rZ  rr  r‡  rŠ  r“  rœ  rr   r§  r¨  r©  rª  r«  r–  rØ  rÈ  rÓ  Ústaticmethodrâ  ró  r¬  r­  r  r+  r5  r0  r®  rù  rú  rE  rý  r�   rñ   rò   rs   rm   rp   rz  r€  r‰  r‡  rˆ  rµ  rq   r3  rg   rK  rà   r  rÓ   rÔ   r’   rš   rp  r  r…   r†   r‡   rŒ   r´  r¶  rÑ  r8  r¼  rŒ  r1  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ð $˜)ð	
ð 	
ð 	
ñô Ðð6
ð 
ð 
ð4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ð:

ð 

ð 

ð)ð )ð )ð, ðð ñ „\ððð ð ð;ð ;ð ;ð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 )r2   c                 ó   — i g| _         d S r    ©Úscopes_rU  s    r   rE   zSymbolTable.__init__‚	  s   € Ø�tˆŒˆˆr   c                 ó:   — | j                              i ¦  «         d S r    )ré  rc   rU  s    r   r}  zSymbolTable.enter_scope…	  s   € ØŒ×Ò˜BÑÔÐÐÐr   c                 ó8   — | j                              ¦   «          d S r    )ré  r*   rU  s    r   r~  zSymbolTable.exit_scopeˆ	  s   € ØŒ×ÒÑÔÐÐÐr   c                 ó&   — || j         d         |<   d S )Nrð   rè  )r?   r\   Úitems      r   r—   zSymbolTable.define‹	  s   € Ø!%ˆŒ�RÔ˜ÑÐÐr   c                 ój   — t          | j        ¦  «        D ]}|                     |¦  «        }|r|c S Œd S r    )rð  ré  rM  )r?   r\   Úscoperí  s       r   rˆ   zSymbolTable.resolveŽ	  sE   € Ý˜dœlÑ+Ô+ð 	ð 	ˆEØ—9’9˜T‘?”?ˆDØð Ø���ðàˆtr   N)rà  rá  râ  rE   r}  r~  r—   rˆ   r   r   r   r2   r2   �	  s_   € € € € € ðð ð ð ð  ð  ðð ð ð&ð &ð &ðð ð ð ð r   r2   )ÚfontTools.feaLib.errorr   ÚfontTools.feaLib.lexerr   r   r   ÚfontTools.feaLib.variableScalarr   ÚfontTools.misc.encodingToolsr   ÚfontTools.misc.textToolsr	   r
   ÚfontTools.feaLib.astÚfeaLibr/   ÚloggingrÔ  rá  Ú	getLoggerrà  rÝ   Úobjectr   r2   r   r   r   ú<module>rú     s)  ðØ 2Ð 2Ð 2Ð 2Ð 2Ð 2Ø KÐ KÐ KÐ KÐ KÐ KÐ KÐ KÐ KÐ KØ :Ð :Ð :Ð :Ð :Ð :Ø 4Ð 4Ð 4Ð 4Ð 4Ð 4Ø 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ø "Ð "Ð "Ð "Ð "Ð "Ð "Ð "Ð "Ø €€€Ø 	€	€	€	Ø 	€	€	€	à€gÔ˜Ñ!Ô!€ðp%Oð p%Oð p%Oð p%Oð p%OˆVñ p%Oô p%Oð p%OðfKð ð ð ð �&ñ ô ð ð ð r   