
    ]Mhq+                         d dl mZmZ d dlmZ d dlZd dlZ	 d dlZn# e$ r	 d dl	mZ Y nw xY w G d de
          Z G d de
          Z G d	 d
e          ZdS )    )FeatureLibErrorIncludedFeaNotFound)FeatureLibLocationN)cythonc                       e Zd ZdZdZdZeeef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edz   Zeez   dz   Z ej        d          ZdZdZd Zd Zd Z d Z!d Z"d Z#d Z$d Z%d  Z&d!S )"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                     || _         d| _        d| _        d| _        || _        t          |          | _        t          j        | _	        d S )N   r   )
	filename_line_pos_line_start_text_lentext_length_r   MODE_NORMAL_mode_)selftextfilenames      V/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/fontTools/feaLib/lexer.py__init__zLexer.__init__+   sB    !
	
II'


    c                     | S N r%   s    r(   __iter__zLexer.__iter__4       r*   c                 *    |                                  S r,   __next__r.   s    r(   nextz
Lexer.next7       }}r*   c                 `    	 |                                  \  }}}|t          j        k    r|||fS .r,   )next_r   r   )r%   
token_typetokenlocations       r(   r3   zLexer.__next__:   s:    	5*.**,,'JxU]**"E844	5r*   c                 `    | j         | j        z
  dz   }t          | j        pd| j        |          S )Nr   z
<features>)r   r   r   r   r   )r%   columns     r(   	location_zLexer.location_@   s1    T--1!$."@L$*fUUUr*   c                    |                      t          j                   |                                 }| j        }| j        }t          |          }||k    rt                      ||         }|dz   |k     r||dz            nd }|dk    r;| xj        dz  c_        | xj        dz  c_        | j        | _	        t          j
        d |fS |dk    rC| xj        |dk    rdndz  c_        | xj        dz  c_        | j        | _	        t          j
        d |fS |dk    r;|                     t          j                   t          j        ||| j                 |fS | j        t          j        u r|dk    rt!          d|          |                     d           | j        |k     r|| j                 nd }|dk    rt!          d	|          | xj        dz  c_        t          j        | _        t          j        ||dz   | j        dz
           |fS |d
k    rj|t          j        v r\| xj        dz  c_        |                      t          j                   t          j        t+          ||dz   | j                 d          |fS |dk    r| xj        dz  c_        |                      t          j                   ||dz   | j                 }t          |          dk     rt!          d|          t          j                            |          st!          d|          t          j        ||fS |t          j        v rd| xj        dz  c_        |                      t          j                   ||| j                 }|dk    rt          j        | _        t          j        ||fS |dk    r]|dv rY| xj        dz  c_        |                      t          j                   t          j        t+          ||| j                 d          |fS |dk    rW|t          j        v rI|                      t          j                   t          j        t+          ||| j                 d          |fS |t          j        v r|                      t          j                   | j        |k    s|| j                 dk    r*t          j        t+          ||| j                 d          |fS |                      d           |                      t          j                   t          j         tC          ||| j                           |fS |dk    r|t          j        v r| xj        dz  c_        |                      t          j                   | j        |k    s|| j                 dk    r*t          j        t+          ||| j                 d          |fS |                      d           |                      t          j                   t          j         tC          ||| j                           |fS |t          j"        v r| xj        dz  c_        t          j#        ||fS |dk    r| xj        dz  c_        |                     d           | j        | j$        k     r^| j        | j                 dk    rH| xj        dz  c_        tK          j&        dd||dz   | j        dz
                     }	t          j'        |	|fS t!          d|          t!          d|z  |          )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_r=   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
glyphclassr9   strings
             r(   r7   zLexer.next_D   su   .///>>##	zD		E>>//!;',qy5'8'8DOOd	tIINIIJJ!OJJ#yDM422tIIi4//Q6IIJJ!OJJ#yDM422s??U0111M4	(9#:HEE:---3%&ExPPPS!!!*.)e*;*;tDIH3%&DhOOOIINII+DJNDTY])B$CXNNt	U-> > >IINIIOOE-...Is4	DI(=#>CCXNNs??IINIIOOE9:::eai$)34J:""%&A8LLL&,,Z88 %3  
 $j(;;u---IINIIOOE9:::*+E	!!"1
Jx00s??yD00IINIIOOE0111%s4	0A+BB'G'GRRs??yE,===OOE-...KT%$)*;%<a!@!@(KKu(((OOE-...yE!!T$)_%;%;c$uty/@*A2&F&FQQOOC   OOE-...KtEDI,='>!?!?JJs??yE,===IINIIOOE-...yE!!T$)_%;%;c$uty/@*A2&F&FQQOOC   OOE-...KtEDI,='>!?!?JJu)))IINIIL(H55s??IINIIS!!!y4,,,DI1F#1M1M		Q		"d519ty1}3L.MNNfh77%&I8TTT88CXNNNr*   c                     | j         }|| j        k     r.| j        |         |v r|dz  }|| j        k     r| j        |         |v || _         d S Nr   r   r"   r    )r%   validps      r(   rQ   zLexer.scan_over_   s[    I$###
1(>(>FA $###
1(>(>			r*   c                     | j         }|| j        k     r.| j        |         |vr|dz  }|| j        k     r| j        |         |v|| _         d S ri   rj   )r%   stop_atrl   s      r(   rT   zLexer.scan_until_   s[    I$###
1W(D(DFA $###
1W(D(D			r*   c                    |                                  }|                                }|                     t          j                   |                     t          j                   d|z   dz   }t          j        || j        | j	        d          d          }t          |          dk    rt          d|z  |          | xj	        t          |d                   z  c_	        t          j        |d         |fS )Nz}\s*z\s*;r   )maxsplitrA   z-Expected '} %s;' to terminate anonymous blockr   )r=   striprT   r   rU   rQ   r`   splitr    r   r!   r   r   )r%   tagr:   regexprr   s        r(   scan_anonymous_blockzLexer.scan_anonymous_block   s    >>##iikk,---+,,,3(DIKK!81EEEu::??!?#Ex   			Sq]]"		%uQx::r*   N)'__name__
__module____qualname__r	   r
   r   NUMBERSr   r   r   r   r   r   r   r   r   r   rR   rU   r_   rW   r]   CHAR_LETTER_r\   rY   r`   compilerZ   r#   rV   r)   r/   r4   r3   r=   r7   rQ   rT   ru   r-   r*   r(   r   r      sH       FKE{E*GEFDHJ
CFGG'OM$LK-NIL#l2*[8<GBJ455MLN( ( (    5 5 5V V V_O _O _OB    ; ; ; ; ;r*   r   c                   L    e Zd ZdZdddZd Zd Zd Zed             Z	d	 Z
dS )
IncludingLexera  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                x    |                      |          g| _        | j        d         j        | _        || _        dS )aO  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)   zIncludingLexer.__init__   s8     ((556#|A8$r*   c                     | S r,   r-   r.   s    r(   r/   zIncludingLexer.__iter__   r0   r*   c                 *    |                                  S r,   r2   r.   s    r(   r4   zIncludingLexer.next   r5   r*   c                    | j         r| j         d         }	 t          |          \  }}}n)# t          $ r | j                                          Y Ow xY w|t          j        u rG|dk    r@|                                \  }}}|t          j        urt          d|          t          j	        
                    |          r|}nn| j        | j        }	n?| j        %t          j	                            | j                  }	nt          j                    }	t          j	                            |	|          }t!          | j                   dk    rt          d|          	 | j                             |                     |                     n(# t&          $ r}
t)          ||          |
d }
~
ww xY w|||fS | j         t                      )NrH   zExpected file name   zToo many recursive includes)r   r4   rS   popr   r   r   r   ospathisabsr~   r   dirnamegetcwdjoinr!   appendr   FileNotFoundErrorr   )r%   lexerr8   r9   r:   
fname_typefname_tokenfname_locationr   curpatherrs              r(   r3   zIncludingLexer.__next__   s   l #	5L$E.25kk+
E88      """ UZ''EY,>,>:?**,,7
KU^33)*>OOO 7==-- >&DD2"&/-9"$'//$2F"G"G #%)++7<<==Dt|$$)))*GXXXTL''(8(8(>(>????( T T T-k>JJPSST #E844G l #	5H oos'   + #AA-F 
F'F""F'c                     t          | d          r| d}}n| d}}t          |dd          }|                                }t          |dd           }|r|                                 t          ||          S )NreadFTrz	utf-8-sig)encodingname)hasattropenr   getattrcloser   )file_or_pathfileobjclosingr'   datas        r(   r   zIncludingLexer.make_lexer_
  s    <(( 	@+UWGG ,dgH8S;???G||~~7FD11 	MMOOOT8$$$r*   c                 B    | j         d                             |          S )Nr   )r   ru   )r%   rs   s     r(   ru   z#IncludingLexer.scan_anonymous_block  s    |B44S999r*   )rv   rw   rx   __doc__r)   r/   r4   r3   staticmethodr   ru   r-   r*   r(   r}   r}      s          37 % % % % %    % % %N 
% 
% \
%: : : : :r*   r}   c                       e Zd ZdZd ZdS )NonIncludingLexerzBLexer that does not follow `include` statements, emits them as-is.c                 6    t          | j        d                   S )Nr   )r4   r   r.   s    r(   r3   zNonIncludingLexer.__next__  s    DLO$$$r*   N)rv   rw   rx   r   r3   r-   r*   r(   r   r     s)        LL% % % % %r*   r   )fontTools.feaLib.errorr   r   fontTools.feaLib.locationr   r`   r   r   ImportErrorfontTools.miscobjectr   r}   r   r-   r*   r(   <module>r      s   G G G G G G G G 8 8 8 8 8 8 				 				&MMMM & & &%%%%%%%%&
p; p; p; p; p;F p; p; p;fX: X: X: X: X:V X: X: X:v% % % % % % % % % %s    ++