B
    (dJ                 @   s   d Z ddlZddlmZ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 ddddgZG d	d deZG d
d deZdd ZdddZG dd deZG dd deZdS )z
    pygments.lexers.erlang
    ~~~~~~~~~~~~~~~~~~~~~~

    Lexers for Erlang.

    :copyright: Copyright 2006-2023 by the Pygments team, see AUTHORS.
    :license: BSD, see LICENSE for details.
    N)Lexer
RegexLexerbygroupswordsdo_insertionsincludedefaultline_re)	CommentOperatorKeywordNameStringNumberPunctuationGeneric
WhitespaceErlangLexerErlangShellLexerElixirConsoleLexerElixirLexerc               @   sN  e Zd ZdZdZdZdgZddddgZd	gZd
Z	dZ
dZdZdZdZdZdZdZdZde d e d e d e d Zde d e d ZdZdefdeeefee	ddefee
ddejfeeddejfdedfeefd e d!fd"ej!fd#ej!fd$e d% eej"efd&e d' eej#eefd(e d) e$j%fd*e$j%fd+e$j&fd,efeej'feefd-e ej(fd.e d/ e j)fd0e d1 e d2 ej!fd3ej*fd4ed5fgee j+fd e d6fd7e j,fd8e fd9e fgd:e d eej-eeej(d6fd;e d eej-eeej!d6feej-d6fge.d<d=ed>fd?ed>fd@ed6fge.d<dAed6fdBed6fgdCZ/dDS )Er   zT
    For the Erlang functional programming language.

    .. versionadded:: 0.9
    Erlangzhttps://www.erlang.org/erlangz*.erlz*.hrlz*.esz	*.escriptztext/x-erlang)afterbegincasecatchcondendZfunifZletZofqueryreceivetrywhen){absZappend_elementapplyZatom_to_listZbinary_to_listZbitstring_to_listZbinary_to_termZbit_sizeZbump_reductionsZ	byte_sizeZcancel_timerZcheck_process_codeZdelete_moduleZ	demonitorZdisconnect_nodedisplayelementZeraseexitfloatZfloat_to_listZfun_infoZfun_to_listZfunction_exportedZgarbage_collectgetZget_keysZgroup_leaderhashZhdZinteger_to_listZiolist_to_binaryZiolist_sizeZis_atomZ	is_binaryZis_bitstringZ
is_boolean
is_builtinZis_floatZis_function
is_integerZis_listZ	is_numberZis_pidZis_portZis_process_aliveZ	is_recordZis_referenceis_tuplelengthlinkZlist_to_atomZlist_to_binaryZlist_to_bitstringZlist_to_existing_atomZlist_to_floatZlist_to_integerZlist_to_pidZlist_to_tupleload_moduleZlocaltime_to_universaltimeZ
make_tuplemd5Z	md5_finalZ
md5_updateZmemoryZmodule_loadedZmonitorZmonitor_nodenodeZnodesZ	open_portZphashZphash2Zpid_to_listZ
port_closeZport_commandZport_connectZport_controlZ	port_callZ	port_infoZport_to_listZprocess_displayZprocess_flagZprocess_infoZpurge_moduleputZ
read_timerZref_to_listregisterZresume_processroundsendZ
send_afterZsend_nosuspend
set_cookieZ
setelementsizespawnZ
spawn_linkZspawn_monitorZ	spawn_optZsplit_binaryZstart_timer
statisticsZsuspend_processZsystem_flagZsystem_infoZsystem_monitorZsystem_profileZterm_to_binarytltraceZtrace_deliveredZ
trace_infoZtrace_patterntrunc
tuple_sizeZtuple_to_listZuniversaltime_to_localtimeunlink
unregisterZwhereisz1(\+\+?|--?|\*|/|<|>|/=|=:=|=/=|=<|>=|==?|<-|!|\?))andZandalsoZbandZbnotZborZbslZbsrZbxordivnotorZorelseremxorz(?:[a-z]\w*|'[^\n']*[^\\]')z(?:[A-Z_]\w*)z[bdefnrstv\'"\\]z[0-7][0-7]?[0-7]?z%(?:x[0-9a-fA-F]{2}|x\{[0-9a-fA-F]+\})z
\^[a-zA-Z]z(?:\\(?:|z))z(?:)z(?:[2-9]|[12][0-9]|3[0-6])z\s+z	(%.*)(\n)z\b)suffixz^-	directive"stringz<<z>>(z)(:)z(?:^|(?<=:))(z
)(\s*)(\()z[+-]?z#[0-9a-zA-Z]+z[+-]?\d+z[+-]?\d+.\d+z[]\[:_@\".{}()|;,]z\?z\$(?:z|\\[ %]|[^\\])#z(:?\.z)?z\A#!.+\nz#\{map_keyz#popz~[0-9.*]*[~#+BPWXb-ginpswx]z[^"\\~]+~z(define)(\s*)(\()(z(record)(\s*)(\()(rootz=>map_valz:=z\},z(?=\}))rR   rM   rK   rP   rS   N)0__name__
__module____qualname____doc__nameurlaliases	filenames	mimetypeskeywordsbuiltins	operatorsZword_operatorsZatom_reZvariable_reZesc_char_reZesc_octal_reZ
esc_hex_reZesc_ctrl_reZ	escape_reZmacro_reZbase_rer   r   r
   r   r   r   Builtinr   Wordr   r   Label	NamespaceFunctionr   IntegerFloatVariableConstantCharHashbangEscapeInterpolEntityr   tokens rp   rp   c/work/yifan.wang/ringdown/master-ringdown-env/lib/python3.7/site-packages/pygments/lexers/erlang.pyr      sx   $




c               @   s8   e Zd ZdZdZdgZdgZdgZe	dZ
dd Zd	S )
r   zM
    Shell sessions in erl (for Erlang code).

    .. versionadded:: 1.1
    zErlang erl sessionerlz*.erl-shztext/x-erl-shellsessionz(?:\([\w@_.]+\))?\d+>(?=\s|\Z)c       	   	   c   s   t f | j}d}g }xt|D ]}| }| j|}|d k	r~| }|t	|dt
j|d | fgf |||d  7 }q |rt|||E d H  d}g }|dr| t
j|fV  q | t
j|fV  q W |rt|||E d H  d S )N r   *)r   optionsr	   finditergroup
_prompt_rematchr   appendlenr   Promptr   get_tokens_unprocessed
startswithstart	TracebackOutput)	selftextZerlexercurcode
insertionsry   linemr   rp   rp   rq   r}      s,    

z'ErlangShellLexer.get_tokens_unprocessedN)rU   rV   rW   rX   rY   r[   r\   r]   recompilerx   r}   rp   rp   rp   rq   r      s   
c             C   sD   i }d|f |ft dd|fd|f t|dft dg|d|  < |S )Nz	[^#%s\\]+escapesz\\.z(%s)z#popinterpolZstring_)r   r   )rY   symboltokenstatesrp   rp   rq   gen_elixir_string_rules   s    r   Tc             C   s\   |r4d|f |ft dd|fd| f |dft dgS d|f |fd|fd| f |dfgS d S )Nz	[^#%s\\]+r   z\\.z%s[a-zA-Z]*z#popr   z[^%s\\]+)r   )termZ
term_classr   r   rp   rp   rq   gen_elixir_sigstr_rules   s    
r   c            #   @   s  e Zd ZdZdZdZdddgZddd	d
gZdgZdZ	dZ
dZdZdZdZdZdZdZdZdZdd Zdd Zddd eD Zddd eD Zddd eD Zd eeef Zdd!d eD Zd"Zd#e Zd$d%ei Zd eeef Zd&Z d'Z!d(Z"d)Z#d*e$fd+e%j&fd,e! e'e(j)e(j*e+j,e(j*fd,e" e'e(j)e(j*fd,e# e'e(j)e(j*fd-e(j)fd.e(j-fd/e.fd0e  e(j-fd0e e(j-fd1e(j-d2fd3e(j-d4fd5e ef e'e(j-e/fd6e e0j1fee0fd7ef e'e/e0j2fee.fee.fee/fd8e0j3fee.fd9e+j4fd:e+j5fd;e+j,fd<e+j6fd=e+j7fd>e'e(j8e$d?fd@e'e(j8e$dAfdBe(j9dCfdDe(j&dEfe:dFdGe/dHfdIe/dJfg!dKe'e$e(j8dLfe:dMgdNe(j8dLfe:dMgdOe(j8fe:dPdQe(j8fdRe(j8fe:dSgdTe(j8fdQe(j8fdRe$fge!e'e(j*e+j,e(j*fe"e(j*fe#e(j*fgdUe(j;dVfgdWe(j;dLfe:dXge:dXd0e/dYfdZe/dYfdWe/dLfge:dXd[e/dLfd\e/dLfge:dXdWe/dLfgd]Z<e<=e>d^dBe(j9 e<=e>d_dDe(j& e<=e>d`dBe(j- e<=e>dadDe(j- e<=e  dbS )cr   z=
    For the Elixir language.

    .. versionadded:: 1.5
    Elixirzhttp://elixir-lang.orgelixirexexsz*.exz*.eexz*.exsz*.leexztext/x-elixir)fndor   r   elseZrescuer   )rD   rB   rE   r#   in)r   r   forr   Zunlessr"   r!   raisequoteunquoteZunquote_splicingthrowsuper)defZdefpZ	defmoduleZdefprotocolZdefmacroZ	defmacropZdefdelegateZdefexceptionZ	defstructZdefimplZdefcallback)importrequireZusealias)niltruefalse)_Z
__MODULE__Z__DIR__Z__ENV__Z
__CALLER__)z<<<z>>>z|||z&&&z^^^z~~~z===z!==z~>>z<~>z|~>z<|>)z==z!=z<=z>=z&&z||z<>z++z--z|>z=~z->z<-rH   .=z~>z<~)	<>+-rt   /!^&)z\\z<<z>>z=>rN   rI   :;rT   []c             c   s   xt | |D ]\}}}|tkr|| jkr8|t|fV  q|| jkrR|tj|fV  q|| jkrj|t|fV  q|| j	kr|tj
|fV  q|| jkr|tj|fV  q|| jkr|tj|fV  q|| jkr|tjj|fV  q|||fV  q|||fV  qW d S )N)r   r}   r   KEYWORDr   KEYWORD_OPERATORr   rb   BUILTINBUILTIN_DECLARATIONDeclarationBUILTIN_NAMESPACErd   CONSTANTri   
PSEUDO_VARra   Pseudo)r   r   indexr   valuerp   rp   rq   r}     s$    






z"ElixirLexer.get_tokens_unprocessedc        	   
   C   sv  ddddddddg} d	d
g}t j}dg i}x|D ]\}}|d  d|f t|t j|d |d ffd|f t|t j|d |d ffg7  < d|dftdg||d < d| d ttt jdftdg||d < d| d ttt jdftdg||d < q0W xr| D ]j\}}}}|d  d| ||d fd| ||d fg7  < t|||||d < t|||dd||d < qW |S )N)z\{z\}}cb)z\[z\]z\]sb)z\(z\)rI   pa)r   r   r   ab)r   r   r   Zslas)z\|z\|rH   pipe)rL   rL   rL   quot)'r   r   Zapos)z"""Ztriquot)z'''Ztriapossigilsz(~[a-z])(%s)z-endz-intpz(~[A-Z])(%s)z-no-intpz	[a-zA-Z]+z#popz^(\s*)(rI   heredoc_interpolheredoc_no_interpolz~[a-z]z~[A-Z]F)r   )r   Otherr   Heredocr   r   r   r   )	ZterminatorsZ	triquotesr   r   r   rY   ZltermZrtermZrterm_classrp   rp   rq   gen_elixir_sigil_rules  s<    z"ElixirLexer.gen_elixir_sigil_rulesrH   c             c   s   | ]}t |V  qd S )N)r   escape).0srp   rp   rq   	<genexpr>Q  s    zElixirLexer.<genexpr>c             c   s   | ]}t |V  qd S )N)r   r   )r   r   rp   rp   rq   r   R  s    c             c   s   | ]}t |V  qd S )N)r   r   )r   r   rp   rp   rq   r   S  s    z(?:%s|%s|%s)c             c   s   | ]}t |V  qd S )N)r   r   )r   r   rp   rp   rq   r   U  s    z\wz(?:\.\.\.|[a-z_]%s*[!?]?)z%[A-Z]%(alnum)s*(?:\.[A-Z]%(alnum)s*)*alnumz(?:\.\.\.|<<>>|%\{\}|%|\{\})z(\\x\{)([\da-fA-F]+)(\})z(\\x[\da-fA-F]{1,2})z(\\[abdefnrstv])z\s+z#.*$z(\?)z\?\\?.z:::z::r   z:"Zstring_double_atomz:'Zstring_single_atomz(%s|%s)(:)(?=\s|\n)@z	(%%?)(%s)z&\dz0b[01]+z0o[0-7]+z0x[\da-fA-F]+z)\d(_?\d)*\.\d(_?\d)*([eE][-+]?\d(_?\d)*)?z	\d(_?\d)*z
(""")(\s*)heredoc_doublez(''')(\s*)$heredoc_singlerL   Zstring_doubler   Zstring_singler   z%\{rP   z\{tuplez^(\s*)(""")z#popr   z^\s*'''z	[^#\\\n]+r   z\\.z\n+r   z[^\\\n]+z#\{interpol_stringz\}rR   rS   z=>rT   z(?=\}))rR   r   r   r   r   r   r   r   rP   rS   r   doubleZsingleZdouble_atomZsingle_atomN)?rU   rV   rW   rX   rY   rZ   r[   r\   r]   r   r   r   r   r   r   r   Z
OPERATORS3Z
OPERATORS2Z
OPERATORS1PUNCTUATIONr}   r   joinZop3_reZop2_reZop1_reZops_reZpunctuation_rer   Zname_reZ
modname_reZcomplex_name_reZspecial_atom_reZlong_hex_char_reZhex_char_reZescape_char_rer   r
   Singler   r   rj   rl   r   HexSymbolr   r   r   	AttributeClassrn   BinOctrg   rf   r   Doubler   rm   ro   updater   rp   rp   rp   rq   r      s   
4










c               @   s2   e Zd ZdZdZdgZdgZedZ	dd Z
dS )	r   a8  
    For Elixir interactive console (iex) output like:

    .. sourcecode:: iex

        iex> [head | tail] = [1,2,3]
        [1,2,3]
        iex> head
        1
        iex> tail
        [2,3]
        iex> [head | tail]
        [1,2,3]
        iex> length [head | tail]
        3

    .. versionadded:: 1.5
    zElixir iex sessioniexztext/x-elixir-shellsessionz,(iex|\.{3})((?:\([\w@_.]+\))?\d+|\(\d+\))?> c          	   c   s0  t f | j}d}d}g }xt|D ]}| }|drtd}|t|dtj	|d d fgf ||dd  7 }q$| j
|}|d k	rd}| }	|t|dtj|d |	 fgf |||	d  7 }q$|rt|||E d H  d}g }|rtj	ntj}
| |
|fV  q$W |r,t|||E d H  d S )Nrs   Fz** Tr   )r   ru   r	   rv   rw   r~   rz   r{   r   Errorrx   ry   r   r|   r   r}   r   r   )r   r   Zexlexerr   Zin_errorr   ry   r   r   r   r   rp   rp   rq   r}     s8    


z)ElixirConsoleLexer.get_tokens_unprocessedN)rU   rV   rW   rX   rY   r[   r]   r   r   rx   r}   rp   rp   rp   rq   r     s   
)T)rX   r   Zpygments.lexerr   r   r   r   r   r   r   r	   Zpygments.tokenr
   r   r   r   r   r   r   r   r   __all__r   r   r   r   r   r   rp   rp   rp   rq   <module>	   s   (, )
 |