o
    ZhJ                     @   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 g 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-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                   @   sJ  e Zd 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d0ej*fd1ed2fgee j+fde d3fd4e j,fd5e fd6e fgd7e d eej-eeej(d3fd8e d eej-eeej!d3feej-d3fge.d9d:ed;fd<ed;fd=ed3fge.d9d>ed3fd?ed3fgd@Z/dAS )Br   zT
    For the Erlang functional programming language.

    .. versionadded:: 0.9
    Erlangzhttps://www.erlang.org/erlang)z*.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node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sizeZ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or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])\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:=\},(?=\}))rX   rO   rM   rU   rZ   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 ry   ry   M/var/www/html/lang_env/lib/python3.10/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 sessionerlz*.erl-shztext/x-erl-shellsessionz(?:\([\w@_.]+\))?\d+>(?=\s|\Z)c           	   	   c   s    t di | j}d}g }t|D ]X}| }| j|}|d urA| }|t	|dt
j|d | fgf |||d  7 }q|rRt|||E d H  d}g }|dra| t
j|fV  q| t
j|fV  q|rzt|||E d H  d S d S )N r   *ry   )r   optionsr	   finditergroup
_prompt_rematchr   appendlenr   Promptr   get_tokens_unprocessed
startswithstart	TracebackOutput)	selftextZerlexercurcode
insertionsr   linemr   ry   ry   rz   r      s6   


z'ErlangShellLexer.get_tokens_unprocessedN)r^   r_   r`   ra   rb   rd   re   rf   recompiler   r   ry   ry   ry   rz   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)rV   interpolZstring_)r   r   )rb   symboltokenstatesry   ry   rz   gen_elixir_string_rules   s   r   Tc                 C   sX   |rd|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 )Nr   r   r   z%s[a-zA-Z]*rV   r   z[^%s\\]+)r   )termZ
term_classr   r   ry   ry   rz   gen_elixir_sigstr_rules   s   	r   c                   @   s  e Zd 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#g 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d0e ef e'e(j-e/fd1e e0j1fee0fd2ef e'e/e0j2fee.fee.fee/fd3e0j3fee.fd4e+j4fd5e+j5fd6e+j,fd7e+j6fd8e+j7fd9e'e(j8e$d:fd;e'e(j8e$d<fd=e(j9d>fd?e(j&d@fe:dAdBe/dCfdDe/dEfdFe'e$e(j8dGfe:dHgdIe(j8dGfe:dHgdJe(j8fe:dKdLe(j8fdMe(j8fe:dNgdOe(j8fdLe(j8fdMe$fge!e'e(j*e+j,e(j*fe"e(j*fe#e(j*fgdPe(j;dQfgdRe(j;dGfe:dSge:dSd+e/dTfdUe/dTfdRe/dGfge:dSdVe/dGfdWe/dGfge:dSdRe/dGfgdXZ<e<=e>dYd=e(j9 e<=e>dZd?e(j& e<=e>d[d=e(j- e<=e>d\d?e(j- e<=e  d]S )^r   z=
    For the Elixir language.

    .. versionadded:: 1.5
    Elixirzhttp://elixir-lang.org)elixirexexs)z*.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<-rI   .=z~>z<~)	<>+-r}   /!^&)z\\rP   rQ   rY   rR   rJ   :;r\   []c                 c   s    t | |D ]p\}}}|tu rq|| jv r|t|fV  q|| jv r)|tj|fV  q|| jv r5|t|fV  q|| j	v rB|tj
|fV  q|| jv rO|tj|fV  q|| jv r\|tj|fV  q|| jv rj|tjj|fV  q|||fV  q|||fV  qd S N)r   r   r   KEYWORDr   KEYWORD_OPERATORr   rk   BUILTINBUILTIN_DECLARATIONDeclarationBUILTIN_NAMESPACErm   CONSTANTrr   
PSEUDO_VARrj   Pseudo)r   r   indexr   valuery   ry   rz   r     s(   






z"ElixirLexer.get_tokens_unprocessedc            	   
   C   s`  g d} ddg}t j}dg i}|D ]e\}}|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 ]4\}}}}|d  d| ||d fd| ||d	 fg7  < t|||||d < t|||dd||d	 < qy|S )N))\{r[   }cb)z\[\]r   sb)z\(z\)rJ   pa)r   r   r   ab)r   r   r   Zslas)\|r   rI   pipe)rN   rN   rN   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]+rV   z^(\s*)(rJ   heredoc_interpolheredoc_no_interpolz~[a-z]z~[A-Z]F)r   )r   Otherr   Heredocr   r   r   r   )	ZterminatorsZ	triquotesr   r   r   rb   ZltermZrtermZrterm_classry   ry   rz   gen_elixir_sigil_rules  s@   

z"ElixirLexer.gen_elixir_sigil_rulesrI   c                 c       | ]}t |V  qd S r   r   escape.0sry   ry   rz   	<genexpr>Q      zElixirLexer.<genexpr>c                 c   r   r   r   r   ry   ry   rz   r   R  r   c                 c   r   r   r   r   ry   ry   rz   r   S  r   z(?:%s|%s|%s)c                 c   r   r   r   r   ry   ry   rz   r   U  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])rK   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_singlerN   Zstring_doubler   Zstring_singler   z%\{rU   r   tuplez^(\s*)(""")rV   r   z^\s*'''z	[^#\\\n]+r   r   z\n+r   z[^\\\n]+rT   interpol_stringr[   rX   rZ   rY   r\   r]   )rX   r   r   r   r   r   r   r   rU   rZ   r   doublesingleZdouble_atomZsingle_atomN)?r^   r_   r`   ra   rb   rc   rd   re   rf   r   r   r   r   r   r   r   Z
OPERATORS3Z
OPERATORS2Z
OPERATORS1Z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   rs   ru   r   HexSymbolr   r   r   	AttributeClassrw   BinOctrp   ro   r   Doubler   rv   rx   updater   ry   ry   ry   rz   r      s>   4




 !$%&'(+,-./24
6
79;<?


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 sessioniexztext/x-elixir-shellsessionz,(iex|\.{3})((?:\([\w@_.]+\))?\d+|\(\d+\))?> c              	   c   s4   t di | j}d}d}g }t|D ]t}| }|dr<d}|t|dtj	|d d fgf ||dd  7 }q| j
|}|d urgd}| }	|t|dtj|d |	 fgf |||	d  7 }q|rxt|||E d H  d}g }|r}tj	ntj}
| |
|fV  q|rt|||E d H  d S d S )Nr|   Fz** Tr   ry   )r   r~   r	   r   r   r   r   r   r   Errorr   r   r   r   r   r   r   r   )r   r   Zexlexerr   Zin_errorr   r   r   r   r   r   ry   ry   rz   r     sD   





z)ElixirConsoleLexer.get_tokens_unprocessedN)r^   r_   r`   ra   rb   rd   rf   r   r   r   r   ry   ry   ry   rz   r     s    
r   )T)ra   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   ry   ry   ry   rz   <module>   s    
(, )
 |