o
    ¯3IhØ(  ã                   @   sZ   d Z ddlZddlmZ ddlmZmZmZmZm	Z	m
Z
mZmZ dgZG dd„ deƒZdS )zÏ
    pygments.lexers.tnt
    ~~~~~~~~~~~~~~~~~~~

    Lexer for Typographic Number Theory.

    :copyright: Copyright 2006-2025 by the Pygments team, see AUTHORS.
    :license: BSD, see LICENSE for details.
é    N)ÚLexer)ÚTextÚCommentÚOperatorÚKeywordÚNameÚNumberÚPunctuationÚErrorÚTNTLexerc                   @   sÔ   e Zd ZdZdZdZdgZdgZdZg Z	e
dƒZe
dƒZe
d	ƒZe
d
ƒZe
dƒZe
dƒZe
dƒZe
dƒZe d¡Ze d¡Ze d¡Zdd„ Zd&dd„Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Zd!d"„ Zd#d$„ Z d%S )'r   uz   
    Lexer for Typographic Number Theory, as described in the book
    GÃ¶del, Escher, Bach, by Douglas R. Hofstadter
    zTypographic Number Theoryz,https://github.com/Kenny2github/language-tntÚtntz*.tntz2.7u   âŠƒâ†’]&âˆ§^|âˆ¨Vvu   +.â‹…*Úabcdeu   'â€²z~!u   AEâˆ€âˆƒÚ
0123456789z	 
ax  (?xi)
        joining | separation | double-tilde | fantasy\ rule
        | carry[- ]over(?:\ of)?(?:\ line)?\ ([0-9]+) | detachment
        | contrapositive | De\ Morgan | switcheroo
        | specification | generalization | interchange
        | existence | symmetry | transitivity
        | add\ S | drop\ S | induction
        | axiom\ ([1-5]) | premise | push | pop
    z((?:[0-9]+)(?:(?:, ?|,? and )(?:[0-9]+))*z\[[^\n\]]+\]c                 O   s"   t j| g|¢R i |¤Ž g | _d S )N)r   Ú__init__Úcur)ÚselfÚargsÚkwargs© r   úS/home/air/sanwanet/gpt-api/venv/lib/python3.10/site-packages/pygments/lexers/tnt.pyr   7   s   
zTNTLexer.__init__Fc                 C   s~   |}z|| | j v r|d7 }|| | j v s
W n ty#   t|ƒ}Y nw |r,||kr,t‚||kr=| j |t|||… f¡ |S )zTokenize whitespace.é   )Ú
WHITESPACEÚ
IndexErrorÚlenÚAssertionErrorr   Úappendr   )r   ÚstartÚtextÚrequiredÚendr   r   r   Ú
whitespace;   s   ÿ€ÿzTNTLexer.whitespacec                 C   s^   || | j vr	t‚|d }|| | jv r|d7 }|| | jv s| j |tj|||… f¡ |S )zTokenize a variable.r   )Ú	VARIABLESr   ÚPRIMESr   r   r   ÚVariable©r   r   r   r   r   r   r   ÚvariableI   s   ÿzTNTLexer.variablec                 C   s>  || dkr.|d }|| dkr|d7 }|| dks| j  |tj|||… f¡ |  ||¡S || dkrD| j  |tj|| f¡ |d S || | jv rQ|  ||¡S || dkr| j  |t|| f¡ |  |d |¡}|| | jvrst	‚| j  |t
|| f¡ |  |d |¡}|| dkrŽt	‚| j  |t|| f¡ |d S t	‚)zTokenize a term.ÚSr   Ú0ú(ú))r   r   r   ÚIntegerÚtermr!   r%   r	   Ú	OPERATORSr   r   r$   r   r   r   r+   S   s0   ÿzTNTLexer.termc                 C   sª  || | j v r0|d }|| | j v r|d7 }|| | j v s| j |t|||… f¡ |  ||¡S || | jv rf| j |tj|| f¡ |  |d |¡}|| dkrSt	‚| j |t
|| f¡ |  |d |¡S || dkr²| j |t
|| f¡ |  |d |¡}|| | jvrˆt	‚| j |t|| f¡ |  |d |¡}|| dkr£t	‚| j |t
|| f¡ |d S |  ||¡}|| dkrÀt	‚| j |t|| f¡ |  |d |¡}|S )zTokenize a formula.r   ú:ú<ú>ú=)ÚNEGATORSr   r   r   ÚformulaÚQUANTIFIERSr   ÚDeclarationr%   r   r	   ÚLOGICr+   r$   r   r   r   r2   m   s>   ÿzTNTLexer.formulac              	   C   sî   | j  ||¡}|du rt‚t|jdd… ƒ}|D ]K}|d dkrc| j |t|||d … f¡ | j |d tj	||d |d … f¡ |d | 
¡ kr^| j |d t||d | 
¡ … f¡  | 
¡ S q| j |t||| 
¡ … f¡ | 
¡ S )zTokenize a rule.Nr   r   )ÚRULESÚmatchr   ÚsortedÚregsr   r   r   r   r*   r   )r   r   r   r7   ÚgroupsÚgroupr   r   r   Úrule   s&   ÿÿö	zTNTLexer.rulec                 C   sÚ   |}|| | j vr|d7 }|| | j vs	| j |t|| f¡ | j |d t||d |… f¡ |}| j ||¡}|du r?t‚|| ¡  dkrIt‚| j | 	¡ t
j| d¡f¡ | j | ¡ t|| ¡  f¡ | ¡ d S )zTokenize a line referral.r   Nr)   r   )ÚNUMBERSr   r   r	   r   ÚLINENOSr7   r   r   r   r   r*   r;   )r   r   r   r   r7   r   r   r   Úlineno¢   s   ÿ"zTNTLexer.linenoc                 C   sv   |}z|| dkr|d7 }|| dks	W n t y!   t|ƒ}Y nw ||kr3| j |t|||… f¡ |  ||¡}|S )z?Mark everything from ``start`` to the end of the line as Error.Ú
r   )r   r   r   r   r
   r    r$   r   r   r   Úerror_till_line_end³   s   ÿ€ÿzTNTLexer.error_till_line_endc                 C   sz  g | _ |  d|¡ }}||  krt|ƒk rºn | j S zi|| | jv r0|d7 }|| | jv s%||krk| j  |tj|||… f¡ t| j ƒ}z|  ||d¡ }}W n tyj   | j |d…= |  ||¡ }}Y W qw | j	 
||¡}|dur•| j  |t||| ¡ … f¡ | ¡  }}|  ||¡ }}W q~|| dv r°| j  |t|| f¡ |d7 }|d7 }nBt| j ƒ}z
|  ||¡ }}W n2 ttfyñ   | j |d…= || | jvrà|d7 }|| | jvsÕ| j  |t|||… f¡ |}Y nw t| j ƒ}z|  ||d¡ }}W n ty   | j |d…= |  ||¡ }}Y W qw t| j ƒ}z
|  ||¡ }}W n tyD   | j |d…= |  ||¡ }}Y W qw |  ||¡ }}|| dkr…t| j ƒ}z
|  ||¡ }}W n ty|   | j |d…= |  ||¡ }}Y W qw |  ||¡ }}W n# ty©   z| j |d…= W n
 ty    Y nw |  ||¡ Y nw ||  kr¹t|ƒk s| j S  | j S )zReturns a list of TNT tokens.r   r   TNz[]r(   )r   r    r   r=   r   r   r*   r   rA   ÚCOMMENTr7   r   r   r   r2   ÚRecursionErrorr   r
   r<   r?   r   Ú	NameError)r   r   r   r   Úorigr7   r   r   r   Úget_tokens_unprocessedÀ   s    J·ÿ
ý

ÿû
ý
ý
ý€ÿû¼J¶JzTNTLexer.get_tokens_unprocessedN)F)!Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚnameÚurlÚaliasesÚ	filenamesÚversion_addedr   Úsetr5   r,   r!   r"   r1   r3   r=   r   ÚreÚcompiler6   r>   rB   r   r    r%   r+   r2   r<   r?   rA   rF   r   r   r   r   r      s8    

	


")rJ   rQ   Úpygments.lexerr   Úpygments.tokenr   r   r   r   r   r   r	   r
   Ú__all__r   r   r   r   r   Ú<module>   s    
(