o a)@sZdZddlZddlmZddlmZmZmZmZm Z m Z m Z m Z dgZ GdddeZdS)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)TextCommentOperatorKeywordNameNumber PunctuationErrorTNTLexerc@seZdZdZdZdgZdgZgZedZ edZ edZ edZ ed Z ed Zed Zed Zed ZedZedZddZd$ddZddZddZddZddZddZdd 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 Theorytntz*.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)selfargskwargsr5/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 IndexErrorlenAssertionErrorrappendr)rstarttextrequiredendrrr whitespace=s   zTNTLexer.whitespacecCs^|||jvr t|d}|||jvr|d7}|||jvs|j|tj|||f|S)zTokenize a variable.r) VARIABLESrPRIMESrrrVariablerrrrrrrvariableKszTNTLexer.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|}||dkrt |j|t||f|dSt )zTokenize a term.Sr0()) rrrIntegertermr!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 vrt |j|t||f||d|}||dkrt |j|t ||f|dS| ||}||dkrt |j|t||f| |d|}|S)zTokenize a formula.r:<>=) NEGATORSrrrformula QUANTIFIERSr Declarationr%rr LOGICr+r$rrrr2os>      zTNTLexer.formulac Cs|j||}|dur tt|jdd}|D]K}|ddkrc|j|t|||df|j|dtj ||d|df|d| kr^|j|dt||d| f| Sq|j|t||| f| S)zTokenize a rule.Nrr) RULESmatchrsortedregsrrrrr*r)rrrr7groupsgrouprrrrules&  z TNTLexer.rulecCs|}|||jvr|d7}|||jvs |j|t||f|j|dt||d|f|}|j||}|dur?t||dkrIt|j| t j | df|j|t||f|dS)zTokenize a line referral.rNr)r) NUMBERSrrr rLINENOSr7rrrrr*r;)rrrrr7rrrlinenos" 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$rrrerror_till_line_ends     zTNTLexer.error_till_line_endc Cszg|_|d|}}||krt|krn|jSzi|||jvr0|d7}|||jvs%||krk|j|tj|||ft|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|||}}||dkrt|j}z |||}}Wnty||j|d=|||}}YWq w|||}}Wn#tyz|j|d=Wn tyYnw|||Ynw||krt|ks|jS|jS)zReturns a list of TNT tokens.rrTNz[]r()rr rr=rrr*rrACOMMENTr7rrrr2RecursionErrorrr r<r?r NameError)rrrrorigr7rrrget_tokens_unprocessedsJ              JJzTNTLexer.get_tokens_unprocessedN)F)__name__ __module__ __qualname____doc__namealiases filenamesrsetr5r,r!r"r1r3r=rrecompiler6r>rBrr r%r+r2r<r?rArFrrrrr s4     " )rJrOpygments.lexerrpygments.tokenrrrrrrr r __all__r rrrrs  (