B
    ë¹`ª'  ã               @   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-2021 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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,
    or as summarized here:
    https://github.com/Kenny2github/language-tnt/blob/master/README.md#summary-of-tnt

    .. versionadded:: 2.7
    zTypographic Number TheoryZ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   ú[/home/kop/projects/devel/pgwui/test_venv/lib/python3.7/site-packages/pygments/lexers/tnt.pyr   9   s    zTNTLexer.__init__Fc             C   sx   |}y x|| | j kr |d7 }qW W n tk
r@   t|ƒ}Y nX |rR||ksRt‚||krt| 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   sV   || | j kst‚|d }x|| | jkr4|d7 }qW | j |tj|||… f¡ |S )zTokenize a variable.r   )Ú	VARIABLESr   ÚPRIMESr   r   r   ÚVariable)r   r   r   r   r   r   r   ÚvariableK   s    zTNTLexer.variablec             C   s@  || dkrV|d }x|| dkr,|d7 }qW | j  |tj|||… f¡ |  ||¡S || dkr‚| j  |tj|| f¡ |d S || | jkrœ|  ||¡S || dkr8| j  |t|| f¡ |  |d |¡}|| | jksât	‚| j  |t
|| f¡ |  |d |¡}|| dks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   r   r   r(   T   s*    zTNTLexer.termc             C   sª  || | j krX|d }x|| | j kr0|d7 }qW | j |t|||… f¡ |  ||¡S || | jkrÄ| j |tj|| f¡ |  |d |¡}|| dksžt	‚| j |t
|| f¡ |  |d |¡S || dkrb| j |t
|| f¡ |  |d |¡}|| | jkst	‚| j |t|| f¡ |  |d |¡}|| dksDt	‚| j |t
|| f¡ |d S |  ||¡}|| dks€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   r   r   r   r/   l   s4    zTNTLexer.formulac          	   C   sê   | j  ||¡}|dk	st‚t|jdd… ƒ}x´|D ]Ž}|d dkr2| j |t|||d … f¡ | j |d tj	||d |d … f¡ |d | 
¡ kr¾| j |d t||d | 
¡ … f¡ P q2W | j |t||| 
¡ … f¡ | 
¡ S )zTokenize a rule.Nr   r   )ÚRULESÚmatchr   ÚsortedÚregsr   r   r   r   r'   r   )r   r   r   r3   ÚgroupsÚgroupr   r   r   ÚruleŠ   s    
zTNTLexer.rulec             C   sÒ   |}x|| | j kr|d7 }qW | j |t|| f¡ | j |d t||d |… f¡ |}| j ||¡}|dk	svt‚|| ¡  dksŠt‚| j | 	¡ t
j| d¡f¡ | j | ¡ t|| ¡  f¡ | ¡ d S )zTokenize a line referral.r   Nr&   r   )ÚNUMBERSr   r   r	   r   ÚLINENOSr3   r   r   r   r   r'   r7   )r   r   r   r   r3   r   r   r   Úlinenoœ   s    "zTNTLexer.linenoc             C   sr   |}yx|| dkr|d7 }qW W n t k
r>   t|ƒ}Y nX ||krb| 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   r   r   r   Úerror_till_line_end«   s    zTNTLexer.error_till_line_endc             C   sb  g | _ |  d|¡ }}xB||  kr4t|ƒk rZn n yÐx|| | jkrX|d7 }q@W ||krÒ| j  |tj|||… f¡ t| j ƒ}y|  ||d¡ }}W n2 tk
rÐ   | j |d…= |  ||¡ }}wY nX | j	 
||¡}|dk	r&| j  |t||| ¡ … f¡ | ¡  }}|  ||¡ }}w~|| dkr^| j  |t|| f¡ |d7 }|d7 }n€t| j ƒ}y|  ||¡ }}W n` tk
rÜ   | j |d…= x|| | jkr¸|d7 }qœW | j  |t|||… f¡ |}Y nX t| j ƒ}y|  ||d¡ }}W n4 tk
r2   | j |d…= |  ||¡ }}wY nX t| j ƒ}y|  ||¡ }}W n4 tk
r†   | j |d…= |  ||¡ }}wY nX |  ||¡ }}|| dkr
t| j ƒ}y|  ||¡ }}W n4 tk
rø   | j |d…= |  ||¡ }}wY nX |  ||¡ }}W q tk
rV   y| j |d…= W n tk
rD   Y nX |  ||¡ Y qX qW | j S )zReturns a list of TNT tokens.r   r   TNz[]r%   )r   r   r   r9   r   r   r'   r   r=   ÚCOMMENTr3   r   r   r   r/   r   r
   r8   r;   r   Ú	NameError)r   r   r   r   Úorigr3   r   r   r   Úget_tokens_unprocessed¸   s„    $







zTNTLexer.get_tokens_unprocessedN)F)Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚnameÚaliasesÚ	filenamesr   Úsetr1   r)   r   r    r.   r0   r9   r   ÚreÚcompiler2   r:   r>   r   r   r"   r(   r/   r8   r;   r=   rA   r   r   r   r   r      s4   


	)rE   rJ   Zpygments.lexerr   Zpygments.tokenr   r   r   r   r   r   r	   r
   Ú__all__r   r   r   r   r   Ú<module>	   s
   (