o
    	ȷe(                     @   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-2022 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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   u   
    Lexer for Typographic Number Theory, as described in the book
    Gödel, Escher, Bach, by Douglas R. Hofstadter
    
    .. versionadded:: 2.7
    zTypographic Number Theoryz,https://github.com/Kenny2github/language-tnttntz*.tntu   ⊃→]&∧^|∨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   J/var/www/ideatree/venv/lib/python3.10/site-packages/pygments/lexers/tnt.pyr   8   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   variableJ   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rt	| 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+   T   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rt	| j|t|| f | |d |}|| dkrt	| j|t
|| f |d S | ||}|| dkrt	| j|t|| f | |d |}|S )zTokenize a formula.r   :<>=)NEGATORSr   r   r   formulaQUANTIFIERSr   Declarationr%   r   r	   LOGICr+   r$   r   r   r   r2   n   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 rn | 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rt| 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rt|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	filenamesr   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      s6    

	


")rJ   rP   pygments.lexerr   pygments.tokenr   r   r   r   r   r   r	   r
   __all__r   r   r   r   r   <module>   s    
(