
    Cj                        S SK Jr  S SKJr  S SKJrJrJrJrJ	r	J
r
Jr  S SKJr   " S S\5      r " S S\5      r " S	 S
\5      r " S S\
5      r " S S\
5      r\" S5      r\\/S4   r " S S\\   5      rg)    )annotations)deque)CallableDeque	GeneratorGenericIterable
NamedTupleTypeVar)get_timec                      \ rS rSrSrSrg)
ParseError	   z$Base class for parse related errors. N__name__
__module____qualname____firstlineno____doc____static_attributes__r       a/home/rurouni/.local/share/pipx/venvs/strix-agent/lib/python3.13/site-packages/textual/_parser.pyr   r   	   s    .r   r   c                      \ rS rSrSrSrg)ParseEOF   zEnd of Stream.r   Nr   r   r   r   r   r      s    r   r   c                      \ rS rSrSrSrg)ParseTimeout   zRead has timed out.r   Nr   r   r   r   r   r      s    r   r   c                  (    \ rS rSr% SrSrS\S'   Srg)Read1   zReads a single character.Nfloat | Nonetimeoutr   r   r   r   r   r   r$   __annotations__r   r   r   r   r!   r!      s    # G\ &r   r!   c                  (    \ rS rSr% SrSrS\S'   Srg)Peek1   zCReads a single character, but does not advance the parser position.Nr#   r$   r   r%   r   r   r   r(   r(      s    M G\ &r   r(   TNc                  d    \ rS rSrSr\r\rS
S jr	\
SS j5       rSS jrSS jr    SS jrSrg	)Parser'   zBase class for a simple parser.c                    SU l         [        5       U l        U R                  U R                  R                  5      U l        [        U R
                  5      U l        S U l        g )NF)	_eofr   _tokensparseappend_gennext	_awaiting_timeout_timeselfs    r   __init__Parser.__init__-   sC    	!&JJt||223	(,TYY+/r   c                    U R                   $ )z6Is the parser at the end of the file (i.e. exhausted)?)r/   r7   s    r   is_eofParser.is_eof4   s     yyr   c              #  :  #    U R                   b  [        5       U R                   :  aq  SU l         U R                  R                  [	        5       5      U l        U R                  (       a0  U R                  R                  5       v   U R                  (       a  M/  gggg7f)z0Call at regular intervals to check for timeouts.N)r6   r   r3   throwr   r5   r0   popleftr7   s    r   tickParser.tick9   sl     )hjD<N<N.N!%D!YY__\^<DN,,ll**,, ,,, /O)s   BBBc              #  ^  #    U R                   (       a  [        S5      SeU R                  nUR                  nU(       dE  SU l          U R                  R                  [        5       5        U(       a  U" 5       v   U(       a  M  gSn[        U5      nU(       a  U" 5       v   U(       a  M  XE:  a  U R                  n[        U[        5      (       a/  SU l        U R                  R                  X   5      U l	        US-  nO>[        U[        5      (       a)  SU l        U R                  R                  X   5      U l	        U R                  R                  b&  [!        5       U R                  R                  -   U l        U(       a  U" 5       v   U(       a  M  XE:  a  M  gg! [         a     GN?f = f7f)zFeed data to be parsed.

Args:
    data: Data to parser.

Raises:
    ParseError: If the data could not be parsed.

Yields:
    T: A generic data type.
zend of file reachedNTr      )r/   r   r0   r@   r3   r?   r   StopIterationlenr5   
isinstancer!   r6   sendr(   r$   r   )r8   datatokensr@   pos	data_sizer5   s          r   feedParser.feedA   sG     9923=..DI		
+ i &I	)O f oI)U++%)"!%	!:qIu--%)"!%	!:~~%%1%-Z$..2H2H%H"i & o ! sC   AF-#F *F-%F-*C'F-F-F-
F*&F-)F**F-c              #  $   #    S Sh  vN   g N7f)zImplement to parse a stream of text.

Args:
    token_callback: Callable to report a successful parsed data type.

Yields:
    ParseAwaitable: One of `self.read1` or `self.peek1`
r   Nr   )r8   token_callbacks     r   r1   Parser.parses   s      s   )r5   r/   r3   r6   r0   N)returnNone)rR   bool)rR   Iterable[T])rI   strrR   rU   )rP   TokenCallbackrR   z#Generator[Read1 | Peek1, str, None])r   r   r   r   r   r!   read1r(   peek1r9   propertyr<   rA   rM   r1   r   r   r   r   r,   r,   '   sH    )EE0  -0 d+	,r   r,   )
__future__r   collectionsr   typingr   r   r   r   r	   r
   r   textual._timer   	Exceptionr   r   r   r!   r(   r*   rW   r,   r   r   r   <module>r`      s    "  U U U "/ /z : 'J ''J ' CL!d#WWQZ Wr   