o ‡ÎÖa)ã@sZdZddlZddlmZddlmZmZmZmZm Z m Z m Z m Z dgZ Gdd„deƒZdS)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ÌeZdZdZdZdgZdgZgZedƒZ edƒZ edƒZ edƒZ ed ƒZ ed ƒZed ƒZed ƒZe d ¡Ze d¡Ze d¡Zdd„Zd$dd„Zdd„Zdd„Zdd„Zdd„Zdd„Zdd „Zd!d"„Zd#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 zTypographic Number TheoryÚtntz*.tntu⊃→]&∧^|∨Vvu+.â‹…*Úabcdeu'′z~!uAEâˆ€âˆƒÚ 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\]]+\]cOs"tj|g|¢Ri|¤Žg|_dS)N)rÚ__init__Úcur)ÚselfÚargsÚkwargs©rú5/usr/lib/python3/dist-packages/pygments/lexers/tnt.pyr9s zTNTLexer.__init__FcCs~|}z|||jvr|d7}|||jvs Wn ty#t|ƒ}Ynw|r,||kr,t‚||kr=|j |t|||…f¡|S)zTokenize whitespace.é)Ú WHITESPACEÚ IndexErrorÚlenÚAssertionErrorrÚappendr)rÚstartÚtextÚrequiredÚendrrrÚ whitespace=sÿ€  ÿ zTNTLexer.whitespacecCs^|||jvr t‚|d}|||jvr|d7}|||jvs|j |tj|||…f¡|S)zTokenize a variable.r)Ú VARIABLESrÚPRIMESrrrÚVariable©rrrrrrrÚvariableKsÿzTNTLexer.variablecCs>||dkr.|d}||dkr|d7}||dks|j |tj|||…f¡| ||¡S||dkrD|j |tj||f¡|dS|||jvrQ| ||¡S||dkr|j |t||f¡| |d|¡}|||jvrst ‚|j |t ||f¡| |d|¡}||dkrŽt ‚|j |t||f¡|dSt ‚)zTokenize a term.ÚSrÚ0ú(ú)) rrrÚIntegerÚtermr!r%r Ú OPERATORSrrr$rrrr+Us0   ÿ     z TNTLexer.termcCsª|||jvr0|d}|||jvr|d7}|||jvs|j |t|||…f¡| ||¡S|||jvrf|j |tj||f¡| |d|¡}||dkrSt ‚|j |t ||f¡| |d|¡S||dkr²|j |t ||f¡| |d|¡}|||j vrˆt ‚|j |t||f¡| |d|¡}||dkr£t ‚|j |t ||f¡|dS|  ||¡}||dkrÀt ‚|j |t||f¡|  |d|¡}|S)zTokenize a formula.rú:ú<ú>ú=) ÚNEGATORSrrrÚformulaÚ QUANTIFIERSrÚ Declarationr%rr ÚLOGICr+r$rrrr2os>ÿ      zTNTLexer.formulac Csî|j ||¡}|dur t‚t|jdd…ƒ}|D]K}|ddkrc|j |t|||d…f¡|j |dtj ||d|d…f¡|d|  ¡kr^|j |dt||d|  ¡…f¡|  ¡Sq|j |t|||  ¡…f¡|  ¡S)zTokenize a rule.Nrr) ÚRULESÚmatchrÚsortedÚregsrrrrr*r)rrrr7ÚgroupsÚgrouprrrÚrule‘s& ÿÿö z TNTLexer.rulecCsÚ|}|||jvr|d7}|||jvs |j |t||f¡|j |dt||d|…f¡|}|j ||¡}|dur?t‚|| ¡dkrIt‚|j |  ¡t j |  d¡f¡|j | ¡t|| ¡f¡| ¡dS)zTokenize a line referral.rNr)r) ÚNUMBERSrrr rÚLINENOSr7rrrrr*r;)rrrrr7rrrÚlineno¤sÿ" zTNTLexer.linenocCsv|}z||dkr|d7}||dks Wn ty!t|ƒ}Ynw||kr3|j |t|||…f¡| ||¡}|S)z?Mark everything from ``start`` to the end of the line as Error.Ú r)rrrrr r r$rrrÚerror_till_line_endµs  ÿ€  ÿ zTNTLexer.error_till_line_endc Cszg|_| d|¡}}||krt|ƒkrºn|jSzi|||jvr0|d7}|||jvs%||krk|j |tj|||…f¡t|jƒ}z | ||d¡}}Wntyj|j|d…=| ||¡}}YWq w|j   ||¡}|dur•|j |t |||  ¡…f¡|  ¡}}| ||¡}}Wq ~||dvr°|j |t ||f¡|d7}|d7}nBt|jƒ}z | ||¡}}Wn2ttfyñ|j|d…=|||jvrà|d7}|||jvsÕ|j |t|||…f¡|}Ynwt|jƒ}z | ||d¡}}Wnty|j|d…=| ||¡}}YWq wt|jƒ}z | ||¡}}WntyD|j|d…=| ||¡}}YWq w| ||¡}}||dkr…t|jƒ}z | ||¡}}Wnty||j|d…=| ||¡}}YWq w| ||¡}}Wn#ty©z|j|d…=Wn ty Ynw| ||¡Ynw||kr¹t|ƒks|jS|jS)zReturns a list of TNT tokens.rrTNz[]r()rr rr=rrr*rrAÚCOMMENTr7rrrr2ÚRecursionErrorrr r<r?rÚ NameError)rrrrÚorigr7rrrÚget_tokens_unprocessedÂs J·ÿ   ý     ÿû  ý  ý  ý€ÿû¼J¶JzTNTLexer.get_tokens_unprocessedN)F)Ú__name__Ú __module__Ú __qualname__Ú__doc__ÚnameÚaliasesÚ filenamesrÚsetr5r,r!r"r1r3r=rÚreÚcompiler6r>rBrr r%r+r2r<r?rArFrrrrr s4     " )rJrOÚpygments.lexerrÚpygments.tokenrrrrrrr r Ú__all__r rrrrÚs  (