
    hq+                         S SK JrJr  S SKJr  S SKrS SKr S SKr " S S\
5      r " S S\
5      r " S	 S
\5      rg! \ a	    S SK	Jr   N0f = f)    )FeatureLibErrorIncludedFeaNotFound)FeatureLibLocationN)cythonc                       \ rS rSrSrSrSr\\\4rSrSr	Sr
SrS	rS
rSrSrSrSrSrSrSrSrSrSr\S-   r\\-   S-   r\R6                  " S5      rSrSrS rS r S r!S r"S r#S r$S r%S  r&S! r'S"r(g#)$Lexer   NUMBERHEXADECIMALOCTALFLOATSTRINGNAMEFILENAME
GLYPHCLASSCIDSYMBOLCOMMENTNEWLINEANONYMOUS_BLOCKz 	z
z,;:-+'{}[]<>()=
01234567890123456789ABCDEFabcdef4ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzz	_+*:.^~!\z
_.+*:^~!/-z^[A-Za-z_0-9.\-]+$NORMALc                     X l         SU l        SU l        SU l        Xl        [        U5      U l        [        R                  U l	        g )N   r   )
	filename_line_pos_line_start_text_lentext_length_r   MODE_NORMAL_mode_)selftextfilenames      H/var/www/html/env/lib/python3.13/site-packages/fontTools/feaLib/lexer.py__init__Lexer.__init__+   s;    !
	
I''
    c                     U $ N r&   s    r)   __iter__Lexer.__iter__4       r,   c                 "    U R                  5       $ r.   __next__r0   s    r)   next
Lexer.next7       }}r,   c                 ^     U R                  5       u  pnU[        R                  :w  a  XU4$ M-  r.   )next_r   r   )r&   
token_typetokenlocations       r)   r6   Lexer.__next__:   s1    *.**,'JxU]]*"844 r,   c                     U R                   U R                  -
  S-   n[        U R                  =(       d    SU R                  U5      $ )Nr   z
<features>)r   r    r   r   r   )r&   columns     r)   	location_Lexer.location_@   s7    T---1!$.."@L$**fUUr,   c                    U R                  [        R                  5        U R                  5       nU R                  nU R
                  n[        U5      nX$:  a
  [        5       eX2   nUS-   U:  a  X2S-      OS nUS:X  aN  U =R                  S-  sl        U =R                  S-  sl        U R                  U l	        [        R                  S U4$ US:X  aV  U =R                  US:X  a  SOS-  sl        U =R                  S-  sl        U R                  U l	        [        R                  S U4$ US:X  a>  U R                  [        R                  5        [        R                  X2U R                   U4$ U R                  [        R                  L a  US:w  a  [!        SU5      eU R                  S5        U R                  U:  a  X0R                     OS nUS:w  a  [!        S	U5      eU =R                  S-  sl        [        R"                  U l        [        R$                  X2S-   U R                  S-
   U4$ US
:X  at  U[        R&                  ;   a`  U =R                  S-  sl        U R                  [        R&                  5        [        R(                  [+        X2S-   U R                   S5      U4$ US:X  a  U =R                  S-  sl        U R                  [        R,                  5        X2S-   U R                   n[        U5      S:  a  [!        SU5      e[        R.                  R1                  U5      (       d  [!        SU5      e[        R2                  Xq4$ U[        R4                  ;   ao  U =R                  S-  sl        U R                  [        R,                  5        X2U R                   nUS:X  a  [        R                  U l        [        R6                  X4$ US:X  ac  US;   a]  U =R                  S-  sl        U R                  [        R8                  5        [        R:                  [+        X2U R                   S5      U4$ US:X  a\  U[        R&                  ;   aH  U R                  [        R&                  5        [        R<                  [+        X2U R                   S5      U4$ U[        R&                  ;   a  U R                  [        R&                  5        U R                  U:  d  X0R                     S:w  a)  [        R>                  [+        X2U R                   S5      U4$ U R                  S5        U R                  [        R&                  5        [        R@                  [C        X2U R                   5      U4$ US:X  a  U[        R&                  ;   a  U =R                  S-  sl        U R                  [        R&                  5        U R                  U:  d  X0R                     S:w  a)  [        R>                  [+        X2U R                   S5      U4$ U R                  S5        U R                  [        R&                  5        [        R@                  [C        X2U R                   5      U4$ U[        RD                  ;   a'  U =R                  S-  sl        [        RF                  XQ4$ US:X  a  U =R                  S-  sl        U R                  S5        U R                  U RH                  :  an  U R
                  U R                     S:X  aQ  U =R                  S-  sl        [J        RL                  " SSX2S-   U R                  S-
   5      n	[        RN                  X4$ [!        SU5      e[!        SU-  U5      e)Nr   
   #(zExpected '(' before file name)zExpected ')' after file name\
   @zExpected glyph class namezOGlyph class names must consist of letters, digits, underscore, period or hypheninclude0xX      .-"z[
] z Expected '"' to terminate stringzUnexpected character: %r)(
scan_over_r   CHAR_WHITESPACE_rB   r   r!   r"   StopIterationr   r    r   scan_until_CHAR_NEWLINE_r   r%   MODE_FILENAME_r   r$   r   CHAR_DIGIT_r   intCHAR_NAME_CONTINUATION_RE_GLYPHCLASSmatchr   CHAR_NAME_START_r   CHAR_HEXDIGIT_r   r   r
   r   floatCHAR_SYMBOL_r   r#   resubr   )
r&   r>   startr'   limitcur_char	next_char
glyphclassr=   strings
             r)   r;   Lexer.next_D   s   ../>>#		zzD	>/!;',qy5'8DOd	tIINIJJ!OJ#yyDMM422tIIi4/Q6IJJ!OJ#yyDMM422s?U001MM4		#:HEE::---3%&ExPPS!*.))e*;tIIH3%&DhOOIINI++DJNNDTYY]$CXNNt	U->-> >IINIOOE--.IIs4	DII#>CXNNs?IINIOOE99:ai$))4J:"%&A8LL&&,,Z88%3 
 $$j;;u---IINIOOE99:+E	!"11
JJ00s?yD0IINIOOE001%%s4		+BB'GRRs?yE,=,==OOE--.KKT$))%<a!@(KKu(((OOE--.yyE!T))_%;c$tyy*A2&FQQOOC OOE--.KKtDII'>!?JJs?yE,=,==IINIOOE--.yyE!T))_%;c$tyy*A2&FQQOOC OOE--.KKtDII'>!?JJu)))IINILL(55s?IINIS!yy4,,,DII1F#1M		Q	"d19tyy1}.MNf77%&I8TT88CXNNr,   c                     U R                   nX R                  :  a<  U R                  U   U;   a)  US-  nX R                  :  a  U R                  U   U;   a  M)  X l         g Nr   r   r#   r!   )r&   validps      r)   rW   Lexer.scan_over_   sQ    II###

1(>FA ###

1(>	r,   c                     U R                   nX R                  :  a<  U R                  U   U;  a)  US-  nX R                  :  a  U R                  U   U;  a  M)  X l         g rp   rq   )r&   stop_atrs   s      r)   rZ   Lexer.scan_until_   sQ    II###

1W(DFA ###

1W(D	r,   c                    U R                  5       nUR                  5       nU R                  [        R                  5        U R                  [        R                  5        SU-   S-   n[        R                  " X0R                  U R                  S  SS9n[        U5      S:w  a  [        SU-  U5      eU =R                  [        US   5      -  sl	        [        R                  US   U4$ )Nz}\s*z\s*;r   )maxsplitrG   z-Expected '} %s;' to terminate anonymous blockr   )rB   striprZ   r   r[   rW   rf   splitr!   r   r"   r   r   )r&   tagr>   regexpr{   s        r)   scan_anonymous_blockLexer.scan_anonymous_block   s    >>#iik,,-++,3(DIIK!81Eu:?!?#Ex  			Sq]"	%%uQx::r,   )r   r   r    r%   r   r!   r#   N))__name__
__module____qualname____firstlineno__r
   r   r   NUMBERSr   r   r   r   r   r   r   r   r   r   rX   r[   re   r]   rc   CHAR_LETTER_rb   r_   rf   compiler`   r$   r\   r*   r1   r7   r6   rB   r;   rW   rZ   r~   __static_attributes__r/   r,   r)   r   r      s    FKE{E*GEFDHJ
CFGG'OM$LK-NIL#l2*[8<GJJ45MLN(5V_OB;r,   r   c                   N    \ rS rSrSrSS.S jrS rS rS r\	S	 5       r
S
 rSrg)IncludingLexer   a{  A Lexer that follows include statements.

The OpenType feature file specification states that due to
historical reasons, relative imports should be resolved in this
order:

1. If the source font is UFO format, then relative to the UFO's
   font directory
2. relative to the top-level include file
3. relative to the parent include file

We only support 1 (via includeDir) and 2.
N)
includeDirc                z    U R                  U5      /U l        U R                  S   R                  U l        X l        g)a  Initializes an IncludingLexer.

Behavior:
    If includeDir is passed, it will be used to determine the top-level
    include directory to use for all encountered include statements. If it is
    not passed, ``os.path.dirname(featurefile)`` will be considered the
    include directory.
r   N)make_lexer_lexers_r   featurefilepathr   )r&   featurefiler   s      r)   r*   IncludingLexer.__init__   s4     ((56#||A88$r,   c                     U $ r.   r/   r0   s    r)   r1   IncludingLexer.__iter__   r3   r,   c                 "    U R                  5       $ r.   r5   r0   s    r)   r7   IncludingLexer.next   r9   r,   c                    U R                   (       Ga  U R                   S   n [        U5      u  p#nU[        R
                  L Ga6  US:X  Ga/  UR                  5       u  pVnU[        R                  La  [        SU5      e[        R                  R                  U5      (       a  UnOU R                  b  U R                  n	OLU R                  b*  [        R                  R                  U R                  5      n	O[        R                  " 5       n	[        R                  R                  X5      n[!        U R                   5      S:  a  [        SU5      e U R                   R#                  U R%                  U5      5        OX#U4$ U R                   (       a  GM  [        5       e! [         a    U R                   R                  5          GM  f = f! [&         a  n
[)        Xg5      U
eS n
A
ff = f)NrN   zExpected file name   zToo many recursive includes)r   r7   rY   popr   r   r   r   ospathisabsr   r   dirnamegetcwdjoinr"   appendr   FileNotFoundErrorr   )r&   lexerr<   r=   r>   
fname_typefname_tokenfname_locationr   curpatherrs              r)   r6   IncludingLexer.__next__   s   lllLL$E.25k+
8 UZZ'EY,>:?**,7
U^^3)*>OO 77==--&D2"&//--9"$''//$2F2F"G #%))+77<<=Dt||$))*GXXTLL''(8(8(>? #844G lllH oA !   "8 ) T-kJPSSTs)   F *G	 $GG	
G$GG$c                     [        U S5      (       a  U Sp!OU Sp#[        USSS9nUR                  5       n[        USS 5      nU(       a  UR	                  5         [        XC5      $ )NreadFTrz	utf-8-sig)encodingname)hasattropenr   getattrcloser   )file_or_pathfileobjclosingr(   datas        r)   r   IncludingLexer.make_lexer_
  s[    <((+UW ,dg8S;?G||~7FD1MMOT$$r,   c                 >    U R                   S   R                  U5      $ )Nr   )r   r~   )r&   r|   s     r)   r~   #IncludingLexer.scan_anonymous_block  s    ||B44S99r,   )r   r   r   )r   r   r   r   __doc__r*   r1   r7   r6   staticmethodr   r~   r   r/   r,   r)   r   r      s:     37 %%N 
% 
%:r,   r   c                       \ rS rSrSrS rSrg)NonIncludingLexeri  zBLexer that does not follow `include` statements, emits them as-is.c                 2    [        U R                  S   5      $ )Nr   )r7   r   r0   s    r)   r6   NonIncludingLexer.__next__  s    DLLO$$r,   r/   N)r   r   r   r   r   r6   r   r/   r,   r)   r   r     s
    L%r,   r   )fontTools.feaLib.errorr   r   fontTools.feaLib.locationr   rf   r   r   ImportErrorfontTools.miscobjectr   r   r   r/   r,   r)   <module>r      sX    G 8 	 	&p;F p;fX:V X:v% %g  &%&s   > AA