U
    YSh                     @   s   d Z ddlZddlmZmZmZmZmZmZm	Z	 ddl
mZmZmZmZmZmZmZmZmZmZ ddddgZG d	d deZG d
d deZG dd deZG dd deZdS )z
    pygments.lexers.int_fiction
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Lexers for interactive fiction languages.

    :copyright: Copyright 2006-2025 by the Pygments team, see AUTHORS.
    :license: BSD, see LICENSE for details.
    N)
RegexLexerincludebygroupsusingthisdefaultwords)
TextCommentOperatorKeywordNameStringNumberPunctuationErrorGenericInform6LexerInform6TemplateLexerInform7Lexer
Tads3Lexerc                >   @   s	  e Zd ZdZdZdZddgZdgZdZe	j
e	jB ZdZd	Zd
ZdZdZde de dejdfedgdefde dejfgeddedfdedfdefedgeddedfde e dedfde d efd!e d"edfgedd#edfd$edfded%fd&e d'efde d(efd)ed*fd+e d,ed*fd-ejd*fd.efd/ejd0fd1efedgd#ed2fd3efd4e d5ed*fd.ejfd6ed7fed8gd$ed9fd:edfed8gd;ed*fed8gd)edfed8gd<ej dfed=gedd4e d>e d?e!j"dfd@e dAe dBe#e!j"e!j$e!j"dfd@e dCe dBe#e!j"e!j$e!j"dfd4e d?e!jdDfd4e d?e!j%dEfdFe dGe dHe&j'dfdIe&j(dfdJe&j)dfdKe&j*dfdLe dMe#eedfdNe dMe#eej+j,dfdOedPfdQe dMe#eej-dfdRej.dSfe/dTdUdVej.dfdWej.dfe/dXdYdUdZej.dfe/d[dYdUdZej.dfeedfged\edgd]e de!j$fd^e d_e!jfd`e!jfdae!j$fdbe!j$fd4e d?e!jdfgdce!j$fdde d_e!j%fdee!j%fdfe!j$fdge dhe die!j$fdge dje dke dle!j$fdge dme dne!j$fd4e d?e!j%dfgdoe d_e!j%fdpe!j%fdfe!j$fd4e d?e!j%dfgedeej0dfed\gedd)efdqedrfeej0drfedgedeej+j,dfed\gedeejdfedgedeej+dfedgdse!j1dfgedeej.dfgeddRefd6edfdedtfe/dudYdUdZedvfdwedxfdyedzfd{ed|fd}ed~fde#eefdedfdedfdedfdedfdedfdedfdedfdedfdedfdedfdedfdedfdedfeej2dfgedeej-dfedgedd6edfdefde!j%dfeej+fgedd6efdedfd:efedgeddedfedgeddedfeej2dfgedd#edfedgd4e d5efdej dfedgedd6ed9fd)efdej dfdej fd:efedgeddedfeej2fed\geddqedfdedfedgedd6edfdefd4e d5ed\fdedfedgeddqedfedgedd6edfd)efdedfedgedd4e d?e!j%dfedgedd4e d?e!j%dfedgdce!j$fedgede/ddUdVedfdefd4e dedfgeded\gededgede/dde de ddVefedgede/ddUdVedfedgeddedfdefe/ddUdVedvfdefdedfdedfdedfdedfdedfde dBedfdejd0fdedfdedfdedvfdedfed΃geddedfde dѝejdfe de dѝej-dfedgedd#edfedgedd6edfedӃgedd6edfd:efedԃgedd#edfedgedd4e d?e!j%dfd4e dםedfeedfgd:efedكgdڜ4Z3dd܄ Z4ddބ Z5dS )r   z#
    For Inform 6 source code.
    zInform 6zhttp://inform-fiction.org/inform6i6z*.inf2.0z[a-zA-Z_]\w*u	   \-‐-—u   "“”u   '‘’u
   \n  z\A(!%[^z]*[])+	directive\s+![^]*_whitespace\[many-valuesz:|(?=;)#pop<)
expression_expressionz(?=sp\b)z(?=[z$0-9#a-zA-Z_]))r"   valuez\+\+|[z]{1,2}(?!>)|~~?z(?=[()\[z,?@{:;])\(\))r"   
statementslocalsz>(?=(\s+|(![^z
]*))*[>;])z	]{2}(?!>),r%   z&&?|\|\|?|[=~><]?=|[z]{1,2}>?|\.\.?[&#]?|::|[<>+*/%]z*(has|hasnt|in|notin|ofclass|or|provides)\bzsp\bz\?~?label?z[@{])#pushr%   z[\[\]][z]>;#pop:3r$   #pop:2:z(from|near|to)\bzhas\b_list-expressionz][^@][]z([z])(@\{[0-9a-fA-F]*\})([])z])(@.{2})([)r"   dictionary-word)r"   stringz	\$[<>]?[+z][0-9]*\.?[0-9]*([eE][+z
]?[0-9]+)?z\$[0-9a-fA-F]+z	\$\$[01]+z[0-9]+z
(##|#a\$)()z(#g\$)(z#[nw]\$)r"   obsolete-dictionary-wordz(#r\$)(#)r"   system-constant)childchildrenZelderZeldestZglkZindirect	metaclassparentrandomZsiblingZyoungerZyoungestz\b)suffixz#(?i)(Class|Object|Routine|String)\b)2ZBox__RoutineZCA__PrZCDefArtZ	CInDefArtZCl__MsZCopy__PrimitiveZCP__TabZDA__PrZDB__PrZDefArtZDynam__StringZEnglishNumberZ	Glk__WrapZIA__PrZIB__PrZInDefArtZMain__ZMeta__classZOB__MoveZ
OB__RemoveZOC__ClZOP__PrZPrint__AddrZPrint__PNameZPrintShortNameZRA__PrZRA__ScZRL__PrZ	R_ProcessZRT__ChGZRT__ChGtZ	RT__ChLDBZ	RT__ChLDWZRT__ChPRZRT__ChPrintAZRT__ChPrintCZRT__ChPrintOZRT__ChPrintSZRT__ChPSZRT__ChRZ	RT__ChSTBZ	RT__ChSTWZRT__ChTZRT__ErrZRT__TrPSZRV__PrZ	Symb__TabZUnsigned__CompareZWV__PrZ	Z__Regionz(?i))prefixrA   )8callcopycreateDEBUGdestroyZDICT_CHAR_SIZEZDICT_ENTRY_BYTESZDICT_IS_UNICODEZDICT_WORD_SIZEZDOUBLE_HI_INFINITYZDOUBLE_HI_NANZDOUBLE_HI_NINFINITYZDOUBLE_LO_INFINITYZDOUBLE_LO_NANZDOUBLE_LO_NINFINITYfalseZFLOAT_INFINITYZ	FLOAT_NANZFLOAT_NINFINITYZGOBJFIELD_CHAINZGOBJFIELD_CHILDZGOBJFIELD_NAMEZGOBJFIELD_PARENTZGOBJFIELD_PROPTABZGOBJFIELD_SIBLINGZGOBJ_EXT_STARTZGOBJ_TOTAL_LENGTHZGrammar__VersionZINDIV_PROP_STARTZINFIXZinfix__watchingZMODULE_MODEnameZnothingZNUM_ATTR_BYTESprintZprint_to_arrayZrecreate	remainingselfZsenderZSTRICT_MODEZsw__varZ
sys__glob0Z
sys__glob1Z
sys__glob2Zsys_statusline_flagZTARGET_GLULXZTARGET_ZCODEZtemp__global2Ztemp__global3Ztemp__global4Ztemp_globaltrueZUSE_MODULESZWORDSIZEr&   z
[~^]+|//[^z
[^~^/\\@({]+z[/({]z@\{[0-9a-fA-F]*\}z@.{2}z[~^]+z	[^~^\\@({z[({]\\z@(\\\s*[z]\s*)*@((\\\s*[z]\s*)*[0-9])*z]\s*)*[({]((\\\s*[z]\s*)*[0-9a-zA-Z_])*(\\\s*[z
]\s*)*[)}]z]\s*)*.(\\\s*[z]\s*)*.z[^~^\\({\[\]z
[~^({\[\]]=value?z\S\w*)r   r)   r*   routine-name?)Z
abbreviateendif
dictionaryZifdefZiffalseZifndefZifnotZiftrueZifv3Zifv5releaseserialZswitchesZsystem_fileversionr   z(?i)(array|global)\b)r   directive-keyword?_globalz(?i)attribute\b)r   alias?	_constantz(?i)class\b)object-body
duplicates
class-namez(?i)(constant|default)\b)r   	constant*z(?i)(end\b)(.*)z(?i)(extend|verb)\bgrammarz(?i)fake_action\b)r   r[   z(?i)import\bmanifestz(?i)(include|link|origsource)\b)r   before-plain-string?z(?i)(lowstring|undef)\bz(?i)message\b)r   
diagnosticz(?i)(nearby|object)\b)r\   _object-headz(?i)property\b)r   rZ   r[   property-keyword*z(?i)replace\b)r   rR   rR   z(?i)statusline\b)r   rX   z
(?i)stub\b)r   rR   z(?i)trace\b)r   trace-keyword?rf   z(?i)zcharacter\b)r   rX   rX   z\*"plain-string\]zalias\b)r"   r[   z#(?=[,;]|(class|has|private|with)\b))r"   r$   r%   z(class|has|private|with)\brY   class\bclass-segmentz(has|private|with)\b)_object-expressionr%   )r"   r   )r"   grammar-line_directive-keywordz[/*]z(noun|scope)\b=routinerR   z(?i)global\b)r"   message-string)r"   rb   rX   )r"   rh   )%additivealiasbufferclassZcreaturedataerrorZ
fatalerrorfirsthasZheld
individualinitialZinitstrlastlongmetamultiZmultiexceptZ	multiheldZmultiinsideZnounnumberonlyprivatereplacereversescopeZscorespecialr7   tableZterminatingtimeZtopicwarningwithzstatic\bz]{1,2}>|[+=]_directive-keyword!)rq   ry   r|   z\b(?=(\s*|(![^z]))*[_a-zA-Z]))ZassemblyrT   ZexpressionslinesZlinkerobjectsoffonsymbolstokensZverbsz[;{}])boxbreakcontinuer   ZgiveZ	inversionnew_linequitreadremovereturnZrfalseZrtruespacesr7   Zuntilz(do|else)\bz(font|style)\b)r   miscellaneous-keyword?zfor\b)for(?z(if|switch|while))r$   r%   r   z(jump|save|restore)\b)r   r,   zobjectloop\b)_keyword-expression	variable?r   zprint(_ret)?\b|(?=[
print-listz\.@opcodez#(?![agrnw]\$|#)zmove\b)r   r   r%   z:(bold|fixed|from|near|off|on|reverse|roman|to|underline)\bzN(a|A|an|address|char|name|number|object|property|string|the|The)\b(?=(\s+|(![^z]*))*\))z(?=(\s+|(![^)_for-expressionr%   )r3   r%   r3   form)r"   r   )operandsrh   z]{1,2}>r   )_assembly-expressionr%   )4rootr   r   r%   r$   r   r   r   r3   rl   r&   rQ   r6   r7   rh   r[   r_   rY   r,   r   r9   r;   r   rR   r*   r!   rZ   r^   r]   rd   r\   rk   r`   rm   ro   ra   rc   rb   rp   r   rn   rX   re   rf   r)   r   r   r   r   r   r   r   c                 c   s   g }d}d }t | |D ]\}}}|tjkrF|dkrF|||gg}d}nx|dkrx|tkrf|tkrf|d8 }||||f nF|dkr|d d dkrt|d d< |r|dV  qd}|||fV  |tkr|tkr|}q|r|dV  qd S )Nin   r      r8   )	r   get_tokens_unprocessedr   Variabler
   r	   appendr   pop)rL   textZobjectloop_queueZobjectloop_token_countZprevious_tokenindextokenr&    r   N/root/rtd-docs/venv/lib/python3.8/site-packages/pygments/lexers/int_fiction.pyr     s0    z#Inform6Lexer.get_tokens_unprocessedc                 C   s    d}t d| t jr|d7 }|S )zWe try to find a keyword which seem relatively common, unfortunately
        there is a decent overlap with Smalltalk keywords otherwise here..r   zorigsourceg?)research
IGNORECASEr   resultr   r   r   analyse_text  s    zInform6Lexer.analyse_textN)6__name__
__module____qualname____doc__rI   urlaliases	filenamesversion_addedr   	MULTILINEDOTALLflags_name_dash_dquoteZ_squote_newliner
   Preprocr   r	   Singler   r   r   Wordr   Labelr   r   PseudoDeclarationr   Charr   EscapeDoubler   FloatHexBinIntegerr   GlobalFunctionBuiltinr   ConstantOtherClassr   r   r   r   r   r   r   r      sF  
	
 
	
   



 
 

    ?	





  
*

		



		   
 
      Kc                   @   s  e Zd ZdZdZdZddgZddgZdZe	j
e	jB ZejZejZejZd	e d
Zi ZdddgZeD ]lZeejd dej dejdfgdefdejdfde dejdfedgde dejfde dejdfgdejdfde de dejfde dejdfde de de dedfd e d!edfd"e dejfgd#e d$e defde dejd%fd&ed'fd(ed)fdejdfd*e d+e d,ee e!e"d-dd.e fd/e d0e d1e d2ed3fd4e defgd5efdejdfd*e d+e d,ee e!e"d6dd.e dfedgd5efdejdfd*e d+e d,ee e!e"d-dd.e dfedgd7ejfdejd8fd9ejdfgd:e dejfd;ej#fde dejdfgdefdejdfde d<ed=fde d>efd?e dejdfedgd5efdejdfd@edAfedgd5efdejdfde dBedCfedDgdEe dFe dejfdEe dGe dej$fdHe dIe dJe!e"dKdLfde dMe dNefdejdfgd/e dOe dPejfd/e dQe dRe dejfd/e dSe dPejdTfge%ddUee ee fgdVee e!e"dKdLe fgdWe dXee ej&e fdWe dYee e'e ee dZfdWe d[ee e'e ee fd\ee e!e"dKdLe fgd]ejfd/e dOe dPejdfd/e dQe d^ejfd/e dSe dPejfd_ejfgd/e dOe dPejfd/e dQe d`e dejfd/e dSe dPejdTfd/e dae de'fdbe dej&fdce ddee e'e dfdee dfefgdgee< ejD ]VZ(e(dkrqzeeje( ee e(< e()dhsze%die%egee e( djdk< qzqddldm Z*djS )nr   z#
    For Inform 7 source code.
    zInform 7zhttp://inform7.com/inform7i7z*.niz*.i7xr   z\A|(?<=[r5   +i6t-not-inline+i6t-inline+i6t-use-optionr   z[^r   )r   +pz(\|?\s)+r    +commentr.   r4   )+main+titling+titling-string)r   	+heading?rN   r"   z.;:|r   z]{2}|(?<=[\sz])\|[\s)r"   r   z[.;:]|(?<=[\sz])\|z[|z(?i)[^z:a\[(|+textr2   +phrase-definitionz
(?i)\bas\b+use-optionz(\([z	])(.*?)([z]\)))+i6-rootr   )statei6t(z|(?<=[\s;:.z	]))\|\s|[z]{2,}r   z(?i)[a(|r   )r   r   r   r)   z[^\[\]]+r-   ri   z[^\[z\[.*?\]z]{4}\s++documentation-headingz]{1,3}z*(?i)(volume|book|part|chapter|section)\b[^z(?i)documentation\s++documentation-heading2z]{4}\s+documentationr1   z(?i)(z)\s*(chapter|example)\s*:[^z)\s*section\s*:[^z((z)\t.*?[r   r   r   z\[]+|[z\[]z)@c( .*?)?([z]|\Z)z)@([z]+|Purpose:)[^z)@p( .*?)?([r   z(\{)(N)(\})z(\{)(\S[^}]*)?(\})z(\{[z])(![^}]*)(\}?)z])(lines)(:)([^}]*)(\}?)+linesz])([^:}]*)(:?)([^}]*)(\}?)z(\(\+)(.*?)(\+\)|\Z)z[^@]+z]|Purpose:)r   z]|Purpose:)[^z)@\w*[ r   z(\{)([z]endlines)(\})z
[^@!{]+?([z]|\Z)|.)r   	+i6t-rootr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   +i6tr   r   _r   Nr   c                 K   sD   | dd}|| jkr&| j|| _n| j| | _tj| f| d S )Nr   r   )get_all_tokens	__class__process_tokendef_tokensr   __init__)rL   optionslevelr   r   r   r     s
    
zInform7Lexer.__init__)+r   r   r   r   rI   r   r   r   r   r   r   r   r   r   r   r   r   _startr   token_variantsr   listr
   r   r	   	Multiliner   Headingr   r   r   r   r   r   r   Interpol
Subheadingr   r   r   r   
startswithr   r   r   r   r   r     s  



 








 





 	




 
 

  
 

&c                   @   s.   e Zd ZdZdZdgZdgZdZd
ddZd	S )r   z%
    For Inform 6 template code.
    zInform 6 templater   z*.i6tr   r   c                 C   s   t | ||S )N)r   r   )rL   r   stackr   r   r   r     s    z+Inform6TemplateLexer.get_tokens_unprocessedN)r  )	r   r   r   r   rI   r   r   r   r   r   r   r   r   r     s   c                T   @   s  e Zd ZdZdZdgZdgZdZdZe	j
e	jB ZdZdZd	Zd
ZdZdZde de dZde de dZdefddZefddZefddZdefdedfdefdedfde de d eejeed!d"ed#fed!d$efd%e fd&ed'fg	ed(e!d)gd*ed+fded,fedgd*efded-fd.ed+fd/ed0fde d1e d eejeed!d"ed2fde de d3eejeed!d"edfde de d4eej"eed!d"ed5fed!d6e ed7fe!d8g
ed(de de d9eej"eed!d"ed:fe!d;gded<fed!d=ed>fe!d?gded<fed!e!d+gd@efded-fd.ed+fdAe#j$fde de d4eej%eed!d"efed!gedBd&edCfgdDe&j'd+fedBd&edEfged!dFed:fdGedHfdedIfdJed+fdKe(j)d+fdLe(j*d+fdMe(j+d+fdNe(j,d+fdOe&j-dPfdQe&j.dRfdSe&j-dTfdUe&j.dVfdWe&j/dXfdYe&j/dZfd[e&j/d\fd]e&j/d^fd_e d`ee#j$eed!d"e#j$fdae d ee#j$eed!d"edbfdce ddee#j$eed!d"e#j$defdfe dgee#j$eed!d"fdhe diee#j$eed!d"e#j$djfdke diee#eed!d"e#j$dlfdmej0d+fdne#j$dofdpe#j$fdqe#j$drfdse#j$dtfdue#j$d+fdve#j$dwfdxe#j$dyfdze#j$d{fd|e#j$d}fd~e#j$dfde#j$dfde#j$dfde#j$dfde#j$d+fde#j$dfde#j1d+fde#j$d?fde#j$dfde#j$dfdej0j2d+fde#j$djfde d ee3j4eed!d"e3dfde3j4fdej0d+fg0ed(eed+fe!d+gdFedfdGedCfdefded7fded+fed!ee3d7fde3dfde dee3j4eed!d"e3j4fde fg
ede!d+gde3d+fedgdDe&j'd;fedgdFed}fde#j$dfed7gd.ed+fdedfde#dfedgeej"d+fed!gdedfedgded7fedgde de deej"eed!d"d+fde de de deej5eed!d"ej"d+fdefed(eej"d+fe!d+gde deeeed!d"fdefdedfdedfdedfedgded+fedgde#d+fed!e!d+gdedfde3d+fedgde#d+fed!gdefeej6dfed!ged!de#dwfe!dwgdefdFedfd/edfeej5fed!ged!de&j7d+fgeded!de deeeed!d"e#d7fd6e defeej1fe!d;gd/ed+fgde&j'fde de dŝed+feejd+fed!gdedfed!eej5d+fe!d+gde3j4d+fed!ee3fe!d+gdFedfded,fed!gded+fedde#j$fed!de efeej"fgdJed+fde#j$d+fde#j$feej5d+fed!e!d+gdedfed!ded+fe!d+gdefd*ed+fde#j$feej1fed!geej%d+fed!e!d+gdefded+fed!eej"fgde de dԝe8j9fee8j.fee8j:fde d֝efgdOe&j-dfdQe&j.dfdSe&j-dfdUe&j.dfgde e&j;fgde&j'fde de dߝe&j'dfgdej<fgeddeddeddeddedddedddedddedddedddedddedddedddeddeddeddeddedSddedSddedSddedSddedUddedUddedUddedUddeeddeeddeeddeeddde&j/fde&j/fde&j/d+fdSe&j/fgde&j/fde&j/fde&j/d+fdUe&j/fgde&j/fde&j/fdSe&j/d+fgde&j/fde&j/fdUe&j/d+fgdPZ=dd Z>dd Z?dS )r   z!
    For TADS 3 source code.
    zTADS 3tads3z*.tzhttps://www.tads.org z(?://(?:[^\\\n]|\\+[\w\W])*$)z(?:/\*(?:[^*]|\*(?!/))*\*/)zM(?:\\(?:[\n\\<>"\'^v bnrt]|u[\da-fA-F]{,4}|x[\da-fA-F]{,2}|[0-3]?[0-7]{1,2}))z(?:[_a-zA-Z]\w*)z(?=\s|\\?>)zD(?:&&|\|\||\+\+|--|\?\?|::|[.,@\[\]~]|(?:[=+\-*/%!&|^]|<<?|>>?>?)=?)z	(?:\\|\s||r8   z(?:\\\n|[^\S\n]|Nc           
      C   s  |rd dd |D }|r dnd}|r.tjntj}| rJd| d| dnd}d	| rZd
nd|rddnd}| d}g }	| r|	| d|dfd| dtjf||fg7 }	n|	||df |	tdd| d|fg7 }	|r
|	d| d| dtj	d| d|ff n||	d| d| | d| dt
jfdtj	d| d|ffdtj	d| d |ffd!| d| | d| d"tj	|ftd#g7 }	|	td$d%| d| | d| d&tjfd'|fg7 }	|	S )(Nr	  c              	   S   s2   g | ]*}d t |  dt |  dqS )z(?:r
  r8   )r   escapelowerupper).0cr   r   r   
<listcomp>  s   z1Tads3Lexer._make_string_state.<locals>.<listcomp>rg   '+|(?!{2}){}{}tdsZqt{3,}r"   rO   +
s/verbatimz[^\\<&{}rN   z\\?<(/|\\\\|(?!z)\\)z
(?=[\s=>])qsz\\?<!([^><\\]|<(?!<)|\\r
  z|\\.)*>?z(?i)\\?<listing(?=[\s=>]|\\>)z
qs/listingz(?i)\\?<xmp(?=[\s=>]|\\>)zqs/xmpz\\?<([^\s=><\\z|\\.)*s/entitys/escape	\{([^}<\\|\\.)*\}z[\\&{}<])joinr   r   r   formatr   r   r   r   Tagr
   r  r  )
tripledoubleZverbatim_escapecharr   escaped_quotesrB   Ztag_state_namer   r   r   r   _make_string_state  sZ    

  
 zTads3Lexer._make_string_statec                 C   s  |rdnd}| rdnd}d | r$dnd|r.dnd}|r>tjntj}| rZd	| d
| dnd}| | |dfdtfdtttjd| fdtttjd| fdtd| fdtjdfd| d| | d| dtj	fd| d| | d| dtj
ftdtdtddtj
fgS ) Nrg   r  r  r	  z{}{}qtr  r  r  r  r  r  r1   z
(\s|\\\n)+z	(=)(\\?")zdqs/z	(=)(\\?')zsqs/rP   zuqs/z\\?>r"   r   r  r
  r!  z
([^\s=><\\z|\\.)+r  r  r  z[\\{}&])r#  r   r   r   r	   r   r   r   r$  r  	Attributer   )r%  r&  r'  r(  Z
quantifierZ
state_namer   r)  r   r   r   _make_tag_state:  s,    
  zTads3Lexer._make_tag_statec           	      C   s   | dkrt jn| dkrt jnt j}|r*dnd}|r6dnd}|rDt jnt j}|r`d| d| dnd}| | |dfd	|t jkrdnd
| |dftdtdd| d| | d| dt jfd|t jkrdnd |ftdd|fgS )Nrg   r  r  r	  r  r  r  r0   r  z\\?r"   r  r  r   r  r
  r!  z([^\s"\'<%s{}\\&])+>r  z["\'\s&{<}\\])r   r   r   r   r#  r   r  )	
terminatorZhost_tripleZhost_doubler'  r   Z	host_charZhost_quantifierZ
host_tokenr)  r   r   r   _make_attribute_value_stateQ  s0      z&Tads3Lexer._make_attribute_value_stateu   ﻿z\{r\   z;+z(?=(argcount|break|case|catch|continue|default|definingobj|delegated|do|else|for|foreach|finally|goto|if|inherited|invokee|local|nil|new|operator|replaced|return|self|switch|targetobj|targetprop|throw|true|try|while)\b)blockr   z)(z*)(\()
whitespacer   )block?/rootmore/parametersmain/parametersz\++z[^\s!"%-(*->@-_a-z{-~]+z(?!\Z)	main/root
main/basic)r"   object-body/no-bracesclassesrt   r/   r"   )r"   r\   r-   z\}r2   )r8  rt   z?)()block?r3  r4  z*)(\{)z*)(:))r7  r8  rt   z->|mainmain/object-bodyz*)(=?))r"   morer:  r1   )r"   r0  z(?=[\[\'"<(:]))r"   r7  r`   grammar-rules)r"   r7  z[;:]+z	default\bblock/basic)r<  r:  z>>)
more/embedr:  r'   r    )r"   	more/listr:  )r"   
more/inner
main/innerr3  r4  z\*|\.{3}z(?i)0x[\da-f]+z5(\d+\.(?!\.)\d*|\.\d+)([eE][-+]?\d+)?|\d+[eE][-+]?\d+z0[0-7]+z\d+z""")r"   tdqsz''')r"   tsqsrg   )r"   dqsr  )r"   sqszR""")r"   tdqrzR''')r"   tsqrzR")r"   dqrzR')r"   sqrz	(extern)(z+)(object\b)z(function|method)()r"   r9  r3  r4  z	(modify)(z+)(grammar\b))r"   r7  r2   r`   z(new)(z+(?=(?:function|method)\b))z	(object)(z+)(template\b))r"   templatez	(string)()r"   function-namez>(argcount|definingobj|invokee|replaced|targetobj|targetprop)\bz(break|continue|goto)\b)r"   labelz0(case|extern|if|intrinsic|return|static|while)\bzcatch\b)r"   catchrj   )r"   r7  rt   z(default|do|else|finally|try)\bz(dictionary|property)\b)r"   	constantszenum\b)r"   enumzexport\b)r"   r:  z(for|foreach)\b)r"   rA  rB  z(function|method)\b)r"   r9  rL  z	grammar\b)r"   r7  r`   zinherited\b)r"   	inheritedzlocal\b)r"   
more/local
main/localz)(modify|replace|switch|throw|transient)\bznew\b)r"   rt   z(nil|true)\bzobject\bz
operator\b)r"   operatorzpropertyset\b)r"   propertysetr:  zself\bz
template\bz(__objref|defined)()r"   more/__objrefr:  zdelegated\ba*  (__DATE__|__DEBUG|__LINE__|__FILE__|__TADS_MACRO_FORMAT_VERSION|__TADS_SYS_\w*|__TADS_SYSTEM_NAME|__TADS_VERSION_MAJOR|__TADS_VERSION_MINOR|__TADS3|__TIME__|construct|finalize|grammarInfo|grammarTag|lexicalParent|miscVocab|sourceTextGroup|sourceTextGroupName|sourceTextGroupOrder|sourceTextOrder)\b)r@  r:  z\.{3}z->|\.\.z(?=;)|[:)\]]z\?)r:  more/conditionalr:  z	(is|not)(z+)(in\b)z[^\s!"%-_a-z{-~]+
more/basicz:(?!:)r<  )r"   rS  r+   rB  z(in|step)\brS  z[,:]z*)(?=:)z+)(z\[+z(:)(z*(?=[?=,:)]))z[?\]]+z[:)])r"   multimethod?r4  rP   )more/parameterr:  z(?=[,)])zmultimethod\bmoder(   z(error|warn)\bz\(+)r"   	variablesztoken\bz\)+grammar-tagr=  a!  """([^\\"<]|""?(?!")|\\"+|\\.|<(?!<))+("{3,}|<<)|R"""([^\\"]|""?(?!")|\\"+|\\.)+"{3,}|'''([^\\'<]|''?(?!')|\\'+|\\.|<(?!<))+('{3,}|<<)|R'''([^\\']|''?(?!')|\\'+|\\.)+'{3,}|"([^\\"<]|\\.|<(?!<))+("|<<)|R"([^\\"]|\\.)+"|'([^\\'<]|\\.|<(?!<))+('|<<)|R'([^\\']|\\.)+'|([^)\s\\/]|/(?![/*]))+|\)r7   z(\[)(z*)(badness)z|[()]z(<<([^>]|>>>|>(?!>))*>>)+z(?=?z*[({])r#   )r"   r8  rt   znegate\b)r3  r4  z(?=;)z->|\?|ztransient\bz[:,]rt   r-  z,+z
property\b^z*#(z|[^\n]|(?<=\\)\n)*\n?z\\+\n+z*#?|\n+|([^\S\n]|\\)+rC  rD  rE  rF  z
\{\{|\}\}|z<<\s*(as\s+decreasingly\s+likely\s+outcomes|cycling|else|end|first\s+time|one\s+of|only|or|otherwise|(sticky|(then\s+)?(purely\s+)?at)\s+random|stopping|(then\s+)?(half\s+)?shuffled|\|\|)\s*>>z<<(%(_(z$|\\?.)|[\-+ ,#]|\[\d*\]?)*\d*\.?\d*(z/|\\?.)|\s*((else|otherwise)\s+)?(if|unless)\b)?)block/embedr?  r:  z'(?i)&(#(x[\da-f]+|\d+)|[a-z][\da-z]*);?TFZlistingZxmpz[^\\"]+z\\"*z"{3,}z[^\\']+z\\'*z'{3,}z\\"?z\\'?)Pr   r5  r7  r\   r;  r2  r9  r>  r0  r`  r6  r:  rX  r<  rW  r?  rB  rA  rS  rR  r@  r4  r3  rZ  rY  rV  r[  rN  rP  r`   r]  r=  r2   rL  rQ  rT  rU  rK  rt   r8  rO  rM  r\  r1  r7   r  r  r  rC  rD  rE  rF  ztdqs/listingztsqs/listingzdqs/listingzsqs/listingztdqs/xmpztsqs/xmpzdqs/xmpzsqs/xmpZtdqtZtsqtZdqtZsqtzdqs/tdqtzdqs/tsqtzdqs/dqtzdqs/sqtzsqs/tdqtzsqs/tsqtzsqs/dqtzsqs/sqtzuqs/tdqtzuqs/tsqtzuqs/dqtzuqs/sqtrG  rH  rI  rJ  c              	   k   s   d| j  d| j  d}d}tj| |f|D ]\}}}|dkrn|tjkrt| d| j  d| j  d|rd}nf|tjkr|dkrt| d	|rd}qt| d|r|d7 }qt| d
|r|d8 }nt}|||fV  q*d S )Nr_  z*#*r   ifz+(0|nil)z*$\n?r   zel(if|se)\bzendif\b)_ws_ppr   r   r
   r   r   match)rL   r   kwargsppZif_false_levelr   r   r&   r   r   r   r   8  s(    
 


z!Tads3Lexer.get_tokens_unprocessedc                 C   s8   d}d| ksd| kr|d7 }d| kr4d| kr4|d7 }|S )zThis is a rather generic descriptive language without strong
        identifiers. It looks like a 'GameMainDef' has to be present,
        and/or a 'versionInfo' with an 'IFID' field.r   Z__TADSZGameMainDefg?ZversionInfoZIFIDg?r   r   r   r   r   r   N  s    zTads3Lexer.analyse_text)@r   r   r   r   rI   r   r   r   r   r   r   r   r   Z_comment_singleZ_comment_multiliner'  r   Z	_no_quote	_operator_wsrc  r*  r,  r/  r	   r   r   r   r   r   r   r   r   r   r   r   Reservedr   r   r  r   r   r   Octr   r   r   Regexr   r   r   r   r   r   	Exceptionr   r
   r   r  r   Entityr   r   r   r   r   r   r   r     s  -
 	

 















 











 W



 



 





	
	




 
























      T)r   r   Zpygments.lexerr   r   r   r   r   r   r   Zpygments.tokenr	   r
   r   r   r   r   r   r   r   r   __all__r   r   r   r   r   r   r   r   <module>   s   
$0     J