U
    祡c(                     @   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-tntZtntz*.tntu   ⊃→]&∧^|∨Vvu   +.⋅*Z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| f|| g | _d S )N)r   __init__cur)selfargskwargs r   7/tmp/pip-unpacked-wheel-6wad6tea/pygments/lexers/tnt.pyr   8   s    zTNTLexer.__init__Fc                 C   st   |}z|| | j kr|d7 }qW n tk
r<   t|}Y nX |rN||krNt||krp| 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   sR   || | j krt|d }|| | jkr2|d7 }q| 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rR|d }|| dkr*|d7 }q| j |tj||| f | ||S || dkr~| j |tj|| f |d S || | jkr| ||S || dkr4| j |t|| f | |d |}|| | jkrt	| j |t
|| f | |d |}|| dkrt	| j |t|| f |d S t	dS )zTokenize a term.Sr   0()N)r   r   r   Integertermr   r#   r	   	OPERATORSr   r   r"   r   r   r   r)   T   s.    
zTNTLexer.termc                 C   s  || | j krT|d }|| | j kr.|d7 }q| j|t||| f | ||S || | jkr| j|tj|| f | |d |}|| dkrt	| j|t
|| f | |d |S || dkr^| j|t
|| f | |d |}|| | jk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   ZDeclarationr#   r   r	   LOGICr)   r"   r   r   r   r0   n   s<    
zTNTLexer.formulac              	   C   s   | j ||}|dkrtt|jdd }|D ]}|d dkr0| j|t|||d  f | j|d tj	||d |d  f |d |
 kr| j|d t||d |
  f  qq0| j|t|||
  f |
 S )zTokenize a rule.Nr   r   )RULESmatchr   sortedregsr   r   r   r   r(   r   )r   r   r   r4   groupsgroupr   r   r   rule   s"    zTNTLexer.rulec                 C   s   |}|| | j kr|d7 }q| j|t|| f | j|d t||d | f |}| j||}|dkrrt||  dkrt| j|	 t
j|df | j| t||  f | d S )zTokenize a line referral.r   Nr'   r   )NUMBERSr   r   r	   r   LINENOSr4   r   r   r   r   r(   r8   )r   r   r   r   r4   r   r   r   lineno   s    
"zTNTLexer.linenoc                 C   sn   |}z|| dkr|d7 }qW n t k
r:   t|}Y nX ||kr^| 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   sj  g | _ | d| }}||  kr0t|k rdn n.z|| | jkrR|d7 }q:||kr| j |tj||| f t| j }z| ||d }}W n6 tk
r   | j |d= | || }}Y W qY nX | j	
||}|dk	r$| j |t|||  f |  }}| || }}W q~|| dkr\| j |t|| f |d7 }|d7 }nt| j }z| || }}W n` ttfk
r   | j |d= || | jkr|d7 }q| j |t||| f |}Y nX t| j }z| ||d }}W n8 tk
r4   | j |d= | || }}Y W qY nX t| j }z| || }}W n8 tk
r   | j |d= | || }}Y W qY nX | || }}|| dkrt| j }z| || }}W n8 tk
r   | j |d= | || }}Y W qY nX | || }}W q tk
r`   z| j |d= W n tk
rN   Y nX | || Y qX q| j S )zReturns a list of TNT tokens.r   r   TNz[]r&   )r   r   r   r:   r   r   r(   r   r>   COMMENTr4   r   r   r   r0   RecursionErrorr   r
   r9   r<   r   	NameError)r   r   r   r   origr4   r   r   r   get_tokens_unprocessed   s     








zTNTLexer.get_tokens_unprocessedN)F) __name__
__module____qualname____doc__nameurlaliases	filenamesr   setr2   r*   r   r    r/   r1   r:   r   recompiler3   r;   r?   r   r   r#   r)   r0   r9   r<   r>   rC   r   r   r   r   r      s4   
	



")rG   rM   Zpygments.lexerr   Zpygments.tokenr   r   r   r   r   r   r	   r
   __all__r   r   r   r   r   <module>   s
   
(