a
    ;@bK                     @   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 g dZed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-2021 by the Pygments team, see AUTHORS.
    :license: BSD, see LICENSE for details.
    N)Lexer
RegexLexerbygroupswordsdo_insertionsincludedefault)
TextCommentOperatorKeywordNameStringNumberPunctuationGeneric
Whitespace)ErlangLexerErlangShellLexerElixirConsoleLexerElixirLexerz.*?
c                   @   sF  e Zd ZdZdZdgZg d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d,e d- e d. ej fd/ej)fd0ed1fgeej*fded2fd3ej+fd4efd5efgd6e d eej,eeej'd2fd7e d eej,eeej d2feej,d2fge-d8d9ed:fd;ed:fd<ed2fge-d8d=ed2fd>ed2fgd?Z.d@S )Ar   z
    For the Erlang functional programming language.

    Blame Jeremy Thurgood (http://jerith.za.net/).

    .. versionadded:: 0.9
    ZErlangZerlang)z*.erlz*.hrlz*.esz	*.escriptztext/x-erlang)afterZbegincasecatchcondendZfunifZletZofqueryreceivetrywhen){absZappend_elementZ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_nodeZ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_referenceZ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_tupleZmd5Z	md5_finalZ
md5_updateZmemoryZmodule_loadedZmonitorZmonitor_nodeZ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_moduleZputZ
read_timerZref_to_listregisterZresume_processroundsendZ
send_afterZsend_nosuspendZ
set_cookieZ
setelementsizeZspawnZ
spawn_linkZspawn_monitorZ	spawn_optZsplit_binaryZstart_timerZ
statisticsZsuspend_processZsystem_flagZsystem_infoZsystem_monitorZsystem_profileZterm_to_binarytlZtraceZtrace_deliveredZ
trace_infoZtrace_patternZtrunc
tuple_sizeZtuple_to_listZuniversaltime_to_localtimeunlinkZ
unregisterZwhereisz1(\+\+?|--?|\*|/|<|>|/=|=:=|=/=|=<|>=|==?|<-|!|\?))andZandalsoZbandZbnotZborZbslZbsrZbxorZdivnotororelseZ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])\s+z	(%.*)(\n)z\b)suffixz^-	directive"string<<>>(z)(:)z(?:^|(?<=:))(z
)(\s*)(\()z[+-]?z#[0-9a-zA-Z]+z[+-]?\d+z[+-]?\d+.\d+z[]\[:_@\".{}()|;,]z\?z\$(?:z|\\[ %]|[^\\])#z(:?\.z)?z\A#!.+\n#\{map_key#popz~[0-9.*]*[~#+BPWXb-ginpswx]z[^"\\~]+~z(define)(\s*)(\()(z(record)(\s*)(\()(root=>map_valz:=\},(?=\}))rG   r>   r<   rD   rI   N)/__name__
__module____qualname____doc__namealiases	filenames	mimetypeskeywordsbuiltinsZ	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   ZLabel	NamespaceZFunctionr   IntegerFloatZVariableConstantCharZHashbangEscapeInterpolEntityr   tokens rb   rb   5lib/python3.9/site-packages/pygments/lexers/erlang.pyr      s   $
 


r   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 sessionZerlz*.erl-shztext/x-erl-shellsessionz(?:\([\w@_.]+\))?\d+>(?=\s|\Z)c           	   	   c   s   t f i | j}d}g }t|D ]}| }| j|}|d u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"|rt|||E d H  d S )N r   *)r   optionsline_refinditergroup
_prompt_rematchr   appendlenr   Promptr   get_tokens_unprocessed
startswithstartZ	TracebackOutput)	selftextZerlexercurcode
insertionsrk   linemr   rb   rb   rc   ro      s2    


z'ErlangShellLexer.get_tokens_unprocessedN)rM   rN   rO   rP   rQ   rR   rS   rT   recompilerj   ro   rb   rb   rb   rc   r      s   
r   c                 C   sD   i }d|f |ft dd|fd|f t|dft dg|d|  < |S )N	[^#%s\\]+escapes\\.z(%s)rE   interpolZstring_)r   r   )rQ   symboltokenstatesrb   rb   rc   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 )Nr{   r|   r}   z%s[a-zA-Z]*rE   r~   z[^%s\\]+)r   )termZ
term_classr   r~   rb   rb   rc   gen_elixir_sigstr_rules   s    	r   c                #   @   s  e Zd ZdZdZg dZg d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d*e e'j,fd*e e'j,fd+e'j,d,fd-e'j,d.fd/eef e&e'j,e.fd0e e/j0fee/fd1ef e&e.e/j1fee-fee-fee.fd2e/j2fee-fd3e*j3fd4e*j4fd5e*j+fd6e*j5fd7e*j6fd8e&e'j7e#d9fd:e&e'j7e#d;fd<e'j8d=fd>e'j%d?fe9d@dAe.dBfdCe.dDfg!dEe&e#e'j7dFfe9dGgdHe'j7dFfe9dGgdIe'j7fe9dJdKe'j7fdLe'j7fe9dMgdNe'j7fdKe'j7fdLe#fge e&e'j)e*j+e'j)fe!e'j)fe"e'j)fgdOe'j:dPfgdQe'j:dFfe9dRge9dRd*e.dSfdTe.dSfdQe.dFfge9dRdUe.dFfdVe.dFfge9dRdQe.dFfgdWZ;e;<e=dXd<e'j8 e;<e=dYd>e'j% e;<e=dZd<e'j, e;<e=d[d>e'j, e;<e  d\S )]r   zY
    For the `Elixir language <http://elixir-lang.org>`_.

    .. versionadded:: 1.5
    ZElixir)ZelixirexZexs)z*.exz*.eexz*.exsz*.leexztext/x-elixir)fnZdor   r   elseZrescuer   )r4   r3   r5   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)importZrequireZusealias)ZniltrueZ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<-r8   .=z~>z<~)	<>+-re   /!^&)z\\r?   r@   rH   rA   r9   :;rK   []c                 c   s   t | |D ]\}}}|tu r|| jv r6|t|fV  q|| jv rP|tj|fV  q|| jv rh|t|fV  q|| j	v r|tj
|fV  q|| jv r|tj|fV  q|| jv r|tj|fV  q|| jv r|tjj|fV  q|||fV  q|||fV  qd S N)r   ro   r   KEYWORDr   KEYWORD_OPERATORr   rX   BUILTINBUILTIN_DECLARATIONZDeclarationBUILTIN_NAMESPACErY   CONSTANTr\   
PSEUDO_VARrW   ZPseudo)rs   rt   indexr   valuerb   rb   rc   ro   
  s$    






z"ElixirLexer.get_tokens_unprocessedc            	   
   C   s`  g d} ddg}t j}dg i}|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	 < q"| D ]h\}}}}|d  d| ||d fd| ||d	 fg7  < t|||||d < t|||dd||d	 < q|S )N))\{rJ   }cb)z\[\]r   Zsb)z\(z\)r9   pa)r   r   r   ab)r   r   r   Zslas)\|r   r8   pipe)r=   r=   r=   Z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]+rE   z^(\s*)(r9   heredoc_interpolheredoc_no_interpolz~[a-z]z~[A-Z]F)r~   )r   ZOtherr   Heredocr   r   r   r   )	ZterminatorsZ	triquotesr   r   r   rQ   ZltermZrtermZrterm_classrb   rb   rc   gen_elixir_sigil_rules   s@    

z"ElixirLexer.gen_elixir_sigil_rulesr8   c                 c   s   | ]}t |V  qd S r   ry   escape.0srb   rb   rc   	<genexpr>T      zElixirLexer.<genexpr>c                 c   s   | ]}t |V  qd S r   r   r   rb   rb   rc   r   U  r   c                 c   s   | ]}t |V  qd S r   r   r   rb   rb   rc   r   V  r   z(?:%s|%s|%s)c                 c   s   | ]}t |V  qd S r   r   r   rb   rb   rc   r   X  r   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])r:   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_singler=   Zstring_doubler   Zstring_singler   z%\{rD   r   tuplez^(\s*)(""")rE   r   z^\s*'''z	[^#\\\n]+r|   r}   z\n+r~   z[^\\\n]+rC   interpol_stringrJ   rG   rI   rH   rK   rL   )rG   r   r   r   r   r|   r~   r   rD   rI   r   ZdoubleZsingleZdouble_atomZsingle_atomN)>rM   rN   rO   rP   rQ   rR   rS   rT   r   r   r   r   r   r   r   Z
OPERATORS3Z
OPERATORS2Z
OPERATORS1ZPUNCTUATIONro   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   r]   r^   r   ZHexZSymbolr   r   r   Z	AttributeZClassr`   ZBinZOctr[   rZ   r   Doubler   r_   ra   updater   rb   rb   rb   rc   r      s   4





?


pr   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 sessionZiexztext/x-elixir-shellsessionz,(iex|\.{3})((?:\([\w@_.]+\))?\d+|\(\d+\))?> c              	   c   s0  t f i | j}d}d}g }t|D ]}| }|drvd}|t|dtj	|d d fgf ||dd  7 }q&| j
|}|d u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&|r,t|||E d H  d S )Nrd   Fz** Tr   )r   rf   rg   rh   ri   rp   rl   rm   r   Errorrj   rk   r   rn   r   ro   rr   rq   )rs   rt   Zexlexerru   Zin_errorrv   rk   rw   rx   r   r   rb   rb   rc   ro     s@    





z)ElixirConsoleLexer.get_tokens_unprocessedN)rM   rN   rO   rP   rQ   rR   rT   ry   rz   rj   ro   rb   rb   rb   rc   r     s   
r   )T)rP   ry   Zpygments.lexerr   r   r   r   r   r   r   Zpygments.tokenr	   r
   r   r   r   r   r   r   r   r   __all__rz   rg   r   r   r   r   r   r   rb   rb   rb   rc   <module>   s   
$0
 )
 {