a
    ©lcÝ(  ã                   @   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   +.â‹…*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| g|¢R i |¤Ž g | _d S )N)r   Ú__init__Úcur)ÚselfÚargsÚkwargs© r   úO/var/www/html/django/DPS/env/lib/python3.9/site-packages/pygments/lexers/tnt.pyr   8   s    zTNTLexer.__init__Fc                 C   sr   |}z|| | j v r|d7 }qW n ty:   t|ƒ}Y n0 |rL||krLt‚||krn| 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 vrt‚|d }|| | jv 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v r˜|  ||¡S || dkr4| j  |t|| f¡ |  |d |¡}|| | jvrÞt	‚| 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 v rT|d }|| | j v r.|d7 }q| j |t|||… f¡ |  ||¡S || | jv rÀ| j |tj|| f¡ |  |d |¡}|| dkršt	‚| 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   r1   n   s<    
zTNTLexer.formulac              	   C   sè   | j  ||¡}|du 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¡  qàq0| j |t||| 
¡ … f¡ | 
¡ S )zTokenize a rule.Nr   r   )ÚRULESÚmatchr   ÚsortedÚregsr   r   r   r   r)   r   )r   r   r   r6   ÚgroupsÚgroupr   r   r   Úrule   s"    ÿÿzTNTLexer.rulec                 C   sÎ   |}|| | j vr|d7 }q| j |t|| f¡ | j |d t||d |… f¡ |}| j ||¡}|du rrt‚|| ¡  dkr†t‚| j | 	¡ t
j| d¡f¡ | j | ¡ t|| ¡  f¡ | ¡ d S )zTokenize a line referral.r   Nr(   r   )ÚNUMBERSr   r   r	   r   ÚLINENOSr6   r   r   r   r   r)   r:   )r   r   r   r   r6   r   r   r   Úlineno£   s    
"zTNTLexer.linenoc                 C   sl   |}z|| dkr|d7 }qW n t y8   t|ƒ}Y n0 ||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   s\  g | _ |  d|¡ }}||  kr0t|ƒk rVn n zÔ|| | jv rR|d7 }q:||krÌ| j  |tj|||… f¡ t| j ƒ}z|  ||d¡ }}W n4 tyÊ   | j |d…= |  ||¡ }}Y W qY n0 | j	 
||¡}|dur"| j  |t||| ¡ … f¡ | ¡  }}|  ||¡ }}W q~|| dv rZ| j  |t|| f¡ |d7 }|d7 }n~t| j ƒ}z|  ||¡ }}W n^ ttfyÖ   | j |d…= || | jvr´|d7 }q˜| j  |t|||… f¡ |}Y n0 t| j ƒ}z|  ||d¡ }}W n6 ty.   | j |d…= |  ||¡ }}Y W qY n0 t| j ƒ}z|  ||¡ }}W n6 ty„   | j |d…= |  ||¡ }}Y W qY n0 |  ||¡ }}|| dkr
t| j ƒ}z|  ||¡ }}W n6 tyø   | j |d…= |  ||¡ }}Y W qY n0 |  ||¡ }}W q tyR   z| j |d…= W n ty@   Y n0 |  ||¡ Y q0 q| j S )zReturns a list of TNT tokens.r   r   TNz[]r'   )r   r   r   r<   r   r   r)   r   r@   ÚCOMMENTr6   r   r   r   r1   ÚRecursionErrorr   r
   r;   r>   r   Ú	NameError)r   r   r   r   Úorigr6   r   r   r   Úget_tokens_unprocessedÁ   s„     








zTNTLexer.get_tokens_unprocessedN)F) Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚnameÚurlÚaliasesÚ	filenamesr   Úsetr4   r+   r    r!   r0   r2   r<   r   ÚreÚcompiler5   r=   rA   r   r   r$   r*   r1   r;   r>   r@   rE   r   r   r   r   r      s4   
	



")rI   rO   Zpygments.lexerr   Zpygments.tokenr   r   r   r   r   r   r	   r
   Ú__all__r   r   r   r   r   Ú<module>   s
   
(