
                             d Z ddlmZmZ ddlmZmZ ddlmZ ddl	m
Z
 ddlmZ  G d d	e      Z G d
 de
e      Z G d de      Zy)zNProvides Indentation services for languages with indentation similar to Python    )ABCabstractmethod)ListIterator   )	LarkError)PostLex)Tokenc                       e Zd Zy)DedentErrorN)__name__
__module____qualname__      lib/third_party/lark/indenter.pyr   r      s    r   r   c                   .   e Zd ZU eed<   ee   ed<   ddZdedee   fdZ	d Z
d	 Zed
        Zeedefd              Zeedee   fd              Zeedee   fd              Zeedefd              Zeedefd              Zeedefd              Zy)Indenterparen_levelindent_levelreturnNc                 D    d| _         dg| _        | j                  dkD  sJ y Nr   )r   r   tab_lenselfs    r   __init__zIndenter.__init__   s&    C||ar   tokenc              #     K   | j                   dkD  ry | |j                  dd      d   }|j                  d      |j                  d      | j                  z  z   }|| j                  d   kD  r?| j                  j                  |       t        j                  | j                  ||       y || j                  d   k  rP| j                  j                          t        j                  | j                  ||       || j                  d   k  rP|| j                  d   k7  rt        d|d| j                  d         y w)	Nr   
r    	zUnexpected dedent to column z. Expected dedent to )r   rsplitcountr   r   appendr
   new_borrow_posINDENT_typepopDEDENT_typer   )r   r   
indent_strindents       r   	handle_NLzIndenter.handle_NL   s)    a\\$*1-
!!#&)9)9$)?$,,)NND%%b))$$V,&&t'7'7UKK4,,R00!!%%'**4+;+;ZOO 4,,R00 **2..!]ceievevwyez"{|| /s   DE 1E c              #   n  K   |D ]  }|j                   | j                  k(  r| j                  |      E d {    n| |j                   | j                  v r| xj                  dz  c_        h|j                   | j
                  v s| xj                  dz  c_        | j                  dk\  rJ  t        | j                        dkD  rK| j                  j                          t        | j                  d       t        | j                        dkD  rK| j                  dgk(  sJ | j                         y 7 w)Nr   r    )typeNL_typer-   OPEN_PAREN_typesr   CLOSE_PAREN_typeslenr   r)   r
   r*   )r   streamr   s      r   _processzIndenter._process,   s    EzzT\\)>>%000zzT222  A% t555  A% ''1,,,  $##$q(!!#(("-- $##$q(   QC':):)::' 1s#   3D5D3AD5$D5+A%D5#D5c                 B    d| _         dg| _        | j                  |      S r   )r   r   r6   )r   r5   s     r   processzIndenter.process?   s#    C}}V$$r   c                     | j                   fS N)r1   r   s    r   always_acceptzIndenter.always_acceptE   s    r   c                     t               r:   NotImplementedErrorr   s    r   r1   zIndenter.NL_typeI        "##r   c                     t               r:   r=   r   s    r   r2   zIndenter.OPEN_PAREN_typesN   r?   r   c                     t               r:   r=   r   s    r   r3   zIndenter.CLOSE_PAREN_typesS   r?   r   c                     t               r:   r=   r   s    r   r(   zIndenter.INDENT_typeX   r?   r   c                     t               r:   r=   r   s    r   r*   zIndenter.DEDENT_type]   r?   r   c                     t               r:   r=   r   s    r   r   zIndenter.tab_lenb   r?   r   )r   N)r   r   r   int__annotations__r   r   r
   r   r-   r6   r8   propertyr;   r   strr1   r2   r3   r(   r*   r   r   r   r   r   r      s)   s) 
}u }% }(;&%   $ $  $ $$s) $  $ $49 $  $ $S $  $ $S $  $ $ $  $r   r   c                   ,    e Zd ZdZg dZg dZdZdZdZy)PythonIndenter_NEWLINE)LPARLSQBLBRACE)RPARRSQBRBRACE_INDENT_DEDENT   N)	r   r   r   r1   r2   r3   r(   r*   r   r   r   r   rJ   rJ   h   s"    G12KKGr   rJ   N)__doc__abcr   r   typingr   r   
exceptionsr   larkr	   lexerr
   r   r   rJ   r   r   r   <module>r[      s@    P # ! !  	) 	V$w V$rX r   