a
    ìÄU_î$  ã                   @   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-2020 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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\]]+\]Fc                 C   sr   |}z|| | j v r|d7 }qW n ty:   t|ƒ}Y n0 |rL||ksLJ ‚||krn| j |t|||… f¡ |S )zTokenize whitespace.é   )Ú
WHITESPACEÚ
IndexErrorÚlenÚcurÚappendr   )ÚselfÚstartÚtextZrequiredÚend© r   ú5/usr/lib/python3/dist-packages/pygments/lexers/tnt.pyÚ
whitespace:   s    zTNTLexer.whitespacec                 C   sR   || | j v sJ ‚|d }|| | jv r2|d7 }q| j |tj|||… f¡ |S )zTokenize a variable.r   )Ú	VARIABLESÚPRIMESr   r   r   ZVariable©r   r   r   r   r   r   r   ÚvariableH   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 sÞJ ‚| j  |t	|| f¡ |  |d |¡}|| dksJ ‚| j  |t|| f¡ |d S t
‚dS )zTokenize a term.ÚSr   Ú0ú(ú)N)r   r   r   ÚIntegerÚtermr   r   r	   Ú	OPERATORSr   ÚAssertionErrorr   r   r   r   r#   Q   s*    
zTNTLexer.termc                 C   sÐ  || dv r*| j  |t|| f¡ |d S || | jv r~|d }|| | jv rX|d7 }q@| j  |t|||… f¡ |  ||¡S || | jv rê| j  |tj|| f¡ |  |d |¡}|| dksÄJ ‚| j  |t	|| f¡ |  |d |¡S || dkrˆ| j  |t	|| f¡ |  |d |¡}|| | j
v s2J ‚| j  |t|| f¡ |  |d |¡}|| dksjJ ‚| j  |t	|| f¡ |d S |  ||¡}|| dks¦J ‚| j  |t|| f¡ |  |d |¡}|S )zTokenize a formula.z[]r   ú:ú<ú>ú=)r   r   r   ÚNEGATORSr   ÚformulaÚQUANTIFIERSZDeclarationr   r	   ÚLOGICr#   r   r   r   r   r+   i   s:    
zTNTLexer.formulac              	   C   sè   | j  ||¡}|dusJ ‚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ÚmatchÚsortedÚregsr   r   r   r   r"   r   )r   r   r   r/   Ú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srJ ‚|| ¡  dks†J ‚| j | ¡ t	j
| d¡f¡ | j | ¡ t|| ¡  f¡ | ¡ d S )zTokenize a line marker.r   Nr!   r   )ÚNUMBERSr   r   r	   r   ÚLINENOSr/   r   r   r   r"   r3   )r   r   r   r   r/   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 rÂn nŒ|| | jv rN|d7 }q6||krÆ| j  |tj|||… f¡ t| j ƒ}z|  ||d¡ }}W n2 tyÄ   | j |d…= |  ||¡ }}Y qY n0 | j	 
||¡}|dur| j  |t||| ¡ … f¡ | ¡  }}|  ||¡ }}q~t| j ƒ}z|  ||¡ }}W nZ ty”   | j |d…= || | jvrr|d7 }qV| j  |t|||… f¡ |}Y n0 t| j ƒ}z|  ||d¡ }}W n4 tyê   | j |d…= |  ||¡ }}Y qY n0 t| j ƒ}z|  ||¡ }}W n4 ty>   | j |d…= |  ||¡ }}Y qY n0 |  ||¡ }}|| dkrt| j ƒ}z|  ||¡ }}W n4 ty®   | j |d…= |  ||¡ }}Y qY n0 |  ||¡ }}q| j S )zReturns a list of TNT tokens.r   r   TNr    )r   r   r   r5   r   r   r"   r%   r9   ÚCOMMENTr/   r   r   r+   r   r
   r4   r7   )r   r   r   r   Zorigr/   r   r   r   Úget_tokens_unprocessed¸   sn     











zTNTLexer.get_tokens_unprocessedN)F)Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚnameÚaliasesÚ	filenamesr   Úsetr-   r$   r   r   r*   r,   r5   r   ÚreÚcompiler.   r6   r:   r   r   r#   r+   r4   r7   r9   r;   r   r   r   r   r      s0   	
	


	!)r?   rD   Zpygments.lexerr   Zpygments.tokenr   r   r   r   r   r   r	   r
   Ú__all__r   r   r   r   r   Ú<module>   s
   
(