
    }f-                        d Z ddlmZ ddlZddlmZmZ ddlmZ ddl	m
Z
 ddlmZ dd	lmZmZmZmZmZmZ dd
lmZ ddlmZmZmZmZ ddlmZ  ej:                  d      ZeZ G d de      Z y)a
  
The Buffer class provides the functionality required by a parser-driven lexer.

Line analysis and caching are done so the parser can freely move with goto(p)
to any position in the parsed text, and still recover accurate information
about source lines and content.
    )annotationsN)repeat	takewhile)Path)Any   )
ParseError)CommentInfoLineIndexInfoLineInfoParserConfigPosLineUndefinedStr)	Tokenizer)RETYPEcontains_sublistextend_listidentity)match_to_findz(?m)\s+c                       e Zd Z	 d9	 	 	 d: fdZed        Zed        Zed        Ze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ej*                  d        Zed        Zed        Zd9dZd9dZd Zd Zed        Zd Zd;dZd Zd Z d Z!d<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=d,Z0d- Z1d. Z2d/ Z3ed0        Z4d9d1Z5d2 Z6d3 Z7d9d4Z8d>d5Z9d?d6Z:d7 Z;d9d8Z< xZ=S )@Bufferc               :   t         |           t        j                  d|| d|}|| _        t        |      }|x| _        | _        | j                  |j                        | _
        |j                  |j                  n+t        | j                        xs t        |j                        | _        t        |j                        | _        d| _        d| _        d| _        g | _        g | _        g | _        g | _        | j/                          | j1                          y )N)configownerr    )super__init__r   newr   strtextoriginal_textbuild_whitespace_re
whitespacewhitespace_re	nameguardbool	namecharsset_namechar_set_pos_len
_linecount_lines_line_index_line_cache_comment_index_preprocess_postprocess)selfr    r   settings	__class__s       N/var/www/feuerwehr-webapp/venv/lib/python3.12/site-packages/tatsu/buffering.pyr   zBuffer.__init__)   s    	!!HtHxH4y)--	D&!55f6G6GH + d(()CT&2B2B-C 	
 !!1!12		!#02*,13    c                .    | j                   j                  S N)r   filenamer3   s    r6   r:   zBuffer.filenameF   s    {{###r7   c                .    | j                   j                  S r9   )r   
ignorecaser;   s    r6   r=   zBuffer.ignorecaseJ       {{%%%r7   c                .    | j                   j                  S r9   )r   r#   r;   s    r6   r#   zBuffer.whitespaceN   r>   r7   c                    t        |       t        u rt        S | dv ry t        | t              r| S | rDt        | t
              sddj                  d | D               d} t        j                  d|        S y )N>   N [rA   c              3      K   | ]  }|  y wr9   r   ).0cs     r6   	<genexpr>z-Buffer.build_whitespace_re.<locals>.<genexpr>`   s     (?q(?s   z]+z(?m))	typer   DEFAULT_WHITESPACE_RE
isinstancer   r   joinrecompile)r#   s    r6   r"   zBuffer.build_whitespace_reR   sv    
|+((#
F+j#.
  !(?J(?!? @C
::ZL122r7   c                    | j                  | j                  | j                        \  }}|| _        || _        | j                  |      | _        y r9   )_preprocess_blockr:   r    r-   r.   join_block_lines)r3   argskwargslinesindexs        r6   r1   zBuffer._preprocesse   sA    --dmmTYYGu ))%0	r7   c                    t        j                  | j                        \  }}|| _        || _        t        | j                        | _        y r9   )r   build_line_cacher-   r/   r,   lenr    r+   )r3   cachecounts      r6   r2   zBuffer._postprocessk   s8    //<u 		N	r7   c                    | j                  |      }t        j                  |t        |            } | j                  |||fi |S r9   )split_block_linesr   block_indexrV   process_block)r3   nameblockrQ   rR   rS   s         r6   rN   zBuffer._preprocess_blockq   sD    &&u-))$E
;!t!!$u???r7   c                $    |j                  d      S )NT)
splitlines)r3   r^   s     r6   rZ   zBuffer.split_block_linesv   s    %%r7   c                $    dj                  |      S )NrA   )rJ   )r3   rR   s     r6   rO   zBuffer.join_block_linesy   s    wwu~r7   c                
    ||fS r9   r   )r3   r]   rR   rS   rQ   s        r6   r\   zBuffer.process_block|   s    e|r7   c                     | j                   ||fi |\  }}	t        |      t        |	      k(  sJ |||| |	||| t        |      t        |      k(  sJ |t        |      z   dz
  S Nr   )rN   rV   )
r3   rR   rS   ijr]   r^   rQ   blinesbindexs
             r6   includezBuffer.include   st    ///eFvF6{c&k)))a
a
5zSZ'''3v;""r7   c                X    | j                  ||      \  }}| j                  ||||||      S r9   )get_includeri   )	r3   sourcer]   rR   rS   re   rf   r    r:   s	            r6   include_filezBuffer.include_file   s1    ))&$7h||E5!Q$??r7   c                   t        |      j                         }|j                  }||z  }	 |j                         5 }|j	                         |fcd d d        S # 1 sw Y   y xY w# t
        $ r}t        d|       |d }~ww xY w)Nzinclude not found: )r   resolveparentopenreadOSErrorr	   )r3   rl   r:   baseri   fes          r6   rk   zBuffer.get_include   s    f%%'}}/	E )1vvx() ) ) 	E27)<=1D	Es4   A$ A	A$ A!A$ !A$ $	B-A<<Bc                $   | j                  | j                        }t        | j                        }| j	                  ||||||      }| j                  |      | _        || _        | j                          | j                  ||dz   |dz          }||fS )Nr      )rZ   r    listr.   ri   rO   r2   )	r3   re   rf   r]   r^   rR   rS   endlinenewtexts	            r6   replace_lineszBuffer.replace_lines   s    &&tyy1T%%&,,ueQ4?))%0	 ''a!eWq[(ABr7   c                    | j                   S r9   )r*   r;   s    r6   posz
Buffer.pos   s    yyr7   c                &    | j                  |       y r9   )gotor3   ps     r6   r~   z
Buffer.pos   s    		!r7   c                "    | j                         S r9   )posliner;   s    r6   linezBuffer.line   s    ||~r7   c                "    | j                         S r9   )poscolr;   s    r6   colz
Buffer.col   s    {{}r7   c                P    || j                   }| j                  |   j                  S r9   )r*   r/   r   r3   r~   s     r6   r   zBuffer.posline   s'    ;))C$)))r7   c                Z    || j                   }| j                  |   j                  }||z
  S r9   )r*   r/   start)r3   r~   r   s      r6   r   zBuffer.poscol   s0    ;))C  %++U{r7   c                4    | j                   | j                  k\  S r9   )r*   r+   r;   s    r6   atendzBuffer.atend   s    yyDII%%r7   c                B    | j                         xs | j                  dv S )Nz
)r   currentr;   s    r6   ateolzBuffer.ateol   s    zz|5t||v55r7   c                h    | j                   | j                  k\  ry | j                  | j                      S r9   )r*   r+   r    r;   s    r6   r   zBuffer.current   s(    99		!yy##r7   c                @    || j                   k\  ry | j                  |   S r9   )r+   r    r   s     r6   atz	Buffer.at   s    		>yy|r7   c                >    | j                  | j                  |z         S r9   )r   r*   r3   ns     r6   peekzBuffer.peek   s    wwtyy1}%%r7   c                    | j                         ry | j                  | j                     }| xj                  dz  c_        |S rd   )r   r    r*   r3   rE   s     r6   nextzBuffer.next   s2    ::<IIdii 		Q	r7   c                `    t        dt        t        | j                        |            | _        y )Nr   )maxminrV   r    r*   r   s     r6   r   zBuffer.goto   s    3s499~s34	r7   c                @    | j                  | j                  |z          y r9   )r   r~   r   s     r6   movezBuffer.move   s    		$((Q,r7   c                x   | j                   j                  r| j                  st        g g       S | j	                  |      }|t        | j                        k\  rt        g g       S g }|t        | j                        k  r/| j                  |   j                  }|rg | j                  |   _        g }|dk\  r|| j                  |   j                  rc|j                  d| j                  |   j                         |rg | j                  |   _        |dz  }|dk\  r| j                  |   j                  rct        ||      S Nr   r   )	r   comment_recoveryr0   r
   r   rV   eolinlineinsert)r3   r   clearr   eolcmmcmms         r6   commentszBuffer.comments   s   {{++43F3Fr2&&LLOD''((r2&&s4&&''((+//F-/##A&*1f,,Q/66JJq$--a077802##A&-FA	 1f,,Q/66 3''r7   c                   |r}| j                   j                  rf| j                  }t        | j                  |t
        j                          || j                  |         }t        ||      s|j                  |       y y y y )N)default)	r   r   r   r   r0   r
   new_commentr   extend)r3   r   selectorr   previouss        r6   _index_commentszBuffer._index_comments   ss    44		A##Q0G0G   3 3A 67H#( ) 58r7   c                T    |sy | j                  |      r	 | j                  |      ry y r9   )_matchre_fastr3   regexs     r6   
_eat_regexzBuffer._eat_regex  s)      '   'r7   c                v    |sg S t        t        t        t        | j                  t        |                        S r9   )ry   r   r   mapmatchrer   r   s     r6   _eat_regex_listzBuffer._eat_regex_list  s+    IIhDLL&-(HIJJr7   c                8    | j                  | j                        S r9   )r   r$   r;   s    r6   eat_whitespacezBuffer.eat_whitespace  s    t1122r7   c                t    | j                  | j                  j                        }| j                  |d        y )Nc                    | j                   S r9   )r   xs    r6   <lambda>z%Buffer.eat_comments.<locals>.<lambda>  s
     r7   )r   r   comments_rer   r3   r   s     r6   eat_commentszBuffer.eat_comments  s-    ''(?(?@X'9:r7   c                t    | j                  | j                  j                        }| j                  |d        y )Nc                    | j                   S r9   )r   r   s    r6   r   z)Buffer.eat_eol_comments.<locals>.<lambda>  s
     r7   )r   r   eol_comments_rer   r   s     r6   eat_eol_commentszBuffer.eat_eol_comments  s,    ''(C(CDX7r7   c                    d }| j                   |k7  rM| j                   }| j                          | j                          | j                          | j                   |k7  rLy y r9   )r*   r   r   r   r   s     r6   
next_tokenzBuffer.next_token  sL    ii1n		A!!#!	 ii1nr7   c                    | j                   }| j                  }||k  r/| j                  |   |k7  r|dz  }||k  r| j                  |   |k7  r| j                  |       | j                  S rd   )r*   r+   r    r   r~   )r3   rE   r   les       r6   skip_tozBuffer.skip_to  s_    IIYY"f1*FA "f1*		!xxr7   c                \    | j                  |       | j                          | j                  S r9   )r   r   r~   r   s     r6   	skip_pastzBuffer.skip_past'  s    Q		xxr7   c                $    | j                  d      S )N
)r   r;   s    r6   skip_to_eolzBuffer.skip_to_eol,  s    ||D!!r7   c                X    | j                   xr | j                  | j                         d uS r9   )r$   _scanrer;   s    r6   
scan_spacezBuffer.scan_space/  s)    O4<<0B0B#C4#O	
r7   c                "    | j                         S r9   )r   r;   s    r6   is_spacezBuffer.is_space4  s      r7   c                N    |d uxr  |j                         xs || j                  v S r9   )isalnumr)   r   s     r6   is_name_charzBuffer.is_name_char7  s'    }I!))+"Hd6H6H1HIr7   c                     | j                         S  j                  } j                  r; j                  ||t	        |      z    j                         |j                         k(  }n j                  ||t	        |      z    |k(  }|sy  j                  t	        |              j                  xrJ |xrF |d   j                         xr1  j                   j                        xr t         fd|D              }|r j                  |       y |S )Nr   c              3  @   K   | ]  }j                  |        y wr9   )r   )rD   tr3   s     r6   rF   zBuffer.match.<locals>.<genexpr>M  s     8QD%%a(8s   )r   r~   r=   r    rV   lowerr   r%   isalphar   r   allr   )r3   tokenr   is_matchpartial_matchs   `    r6   matchzBuffer.match:  s    =::<HH??yyAE
N399;u{{}LHyyAE
N3u<H		#e*NN 99a  "9 !!$,,/9 8%88 	 IIaLr7   c                |    | j                  |      x}sy | j                  t        |j                                      y r9   )r   r   rV   group)r3   patternr   s      r6   r   zBuffer._matchre_fastU  s0    g...		#ekkm$%r7   c                    | j                  |      x}sy |j                         }t        |      }| j                  t	        |             |S r9   )r   r   r   r   rV   )r3   r   r   matchedr   s        r6   r   zBuffer.matchre[  sC    g...++-e$		#g,r7   c                    t        |t              r|}n$t        j                  |t        j                        }|j                  | j                  | j                        S r9   )rI   r   rK   rL   	MULTILINEr   r    r~   )r3   r   cres      r6   r   zBuffer._scanred  s>    gv&C**Wbll3CyyDHH--r7   c                    | j                   S r9   )r,   r;   s    r6   	linecountzBuffer.linecountk  s    r7   c                B   || j                   }t        |t        | j                        dz
        }| j                  |   \  }}}||z   }||z
  }| j                  || }t        t        | j
                        dz
  |      }| j
                  |   \  }	}t        |	|||||      S )Nrx   r   )r*   r   rV   r/   r    r.   r   )
r3   r~   r   r   lengthendr   r    r   r:   s
             r6   	line_infozBuffer.line_infoo  s    ;))C #s4++,q01"..s3tVfnEkyys# D$$%)40))!,$$UC>>r7   c                    | j                         ry| j                         }d|j                  dz   |j                  dz   fz  S )NrA   z~%d:%dr   )r   r   r   r   )r3   infos     r6   lookahead_poszBuffer.lookahead_pos  s:    ::<~~499q=$((Q,777r7   c                    | j                         ry| j                         }|j                  |j                  |j                  dz   dz    }| j	                  |      d   j                         }| S )NrA   r   P   r   )r   r   r    r   rZ   rstrip)r3   r   r    s      r6   	lookaheadzBuffer.lookahead  sa    ::<~~yy488a<"#45%%d+A.557r7   c                <    || j                   }| j                  |   S r9   )r   r-   r   s     r6   get_linezBuffer.get_line  s    9		A{{1~r7   c                \    |d}|t        | j                        }| j                  ||dz    S r   )rV   r-   r3   r   r   s      r6   	get_lineszBuffer.get_lines  s4    =E;dkk"C{{5#'**r7   c                T    |t        | j                        }| j                  |d|z    S rd   )rV   r.   r   s      r6   
line_indexzBuffer.line_index  s.    ;d&&'Cq3w//r7   c                J    dt        |       j                  | j                  fz  S )Nz%s@%d)rG   __name__r~   r;   s    r6   __repr__zBuffer.__repr__  s     $t*--txx888r7   c                     y r9   r   )r3   seens     r6   __json__zBuffer.__json__  s    r7   r9   )r   zParserConfig | Noner4   r   )r   )F)r   r   returnz
str | None)NN)r   N)>r  
__module____qualname__r   propertyr:   r=   r#   staticmethodr"   r1   r2   rN   rZ   rO   r\   ri   rm   rk   r|   r~   setterr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  __classcell__)r5   s   @r6   r   r   '   s    6:2GJ: $ $ & & & &  $1#@
&#@E    	ZZ     *
&6 $ $

&5 (.
*K
3;8"
"

!J6&.  ?$8
+0
9r7   r   )!__doc__
__future__r   rK   	itertoolsr   r   pathlibr   typingr   
exceptionsr	   infosr
   r   r   r   r   r   
tokenizingr   utilr   r   r   r   	util.miscr   rL   rH   LineIndexEntryr   r   r7   r6   <module>r     sb    # 	 '   "  "  %"

:.  }Y }r7   