U
    YShJ                     @   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-2025 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                   @   sR  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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 d0 e!j*fd1e d2 e d3 ej"fd4ej+fd5e d6fgee!j,fd!e!d7fd8e!j-fd9e!fd:e!fgd;e d eej.ee ej)d7fd<e d eej.ee ej"d7feej.d7fge/d=d>e d?fd@e d?fdAe d7fge/d=dBe d7fdCe d7fgdDZ0dES )Fr   z9
    For the Erlang functional programming language.
    Erlanghttps://www.erlang.org/erlangz*.erlz*.hrlz*.esz	*.escriptztext/x-erlangz0.9)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_timerZ
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(?:[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)1__name__
__module____qualname____doc__nameurlaliases	filenames	mimetypesversion_added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 rz   rz   I/root/rtd-docs/venv/lib/python3.8/site-packages/pygments/lexers/erlang.pyr      s   $
 
 
 
c                   @   s@   e Zd ZdZdZdgZdgZdgZdZdZ	e
dZd	d
 ZdS )r   z2
    Shell sessions in erl (for Erlang code).
    zErlang erl sessionerlz*.erl-shztext/x-erl-shellsessionr   z1.1z(?:\([\w@_.]+\))?\d+>(?=\s|\Z)c           	   	   c   s   t f | j}d}g }t|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|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
insertionsr   linemr   rz   rz   r{   r      s2    


z'ErlangShellLexer.get_tokens_unprocessedN)r^   r_   r`   ra   rb   rd   re   rf   rc   rg   recompiler   r   rz   rz   rz   r{   r      s   
c                 C   sH   i }d| d|ft dd|fd| dt|dft dg|d	|  < |S )
N[^#\\]+escapes\\.rR   rJ   rV   interpolZstring_)r   r   )rb   symboltokenstatesrz   rz   r{   gen_elixir_string_rules   s    r   Tc                 C   s`   |r6d| d|ft dd|f|  d|dft dgS d| d|fd|f|  d|dfgS d S )	Nr   r   r   r   z	[a-zA-Z]*rV   r   z[^)r   )termZ
term_classr   r   rz   rz   r{   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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 de de d"Zdd#d eD Zd$Zd%e d&Zd'e d(e d)Zd!e de de d"Z d*Z!d+Z"d,Z#d-Z$d.e%fd/e&j'fd0e" e(e)j*e)j+e,j-e)j+fd0e# e(e)j*e)j+fd0e$ e(e)j*e)j+fd1e)j*fd2e)j.fd3e/fd4e! e)j.fd4e  e)j.fd5e)j.d6fd7e)j.d8fd9e! de  d:e(e)j.e0fd;e e1j2fee1fd<e d"e(e0e1j3fee/fee/fee0fd=e1j4fee/fd>e,j5fd?e,j6fd@e,j-fdAe,j7fdBe,j8fdCe(e)j9e%dDfdEe(e)j9e%dFfdGe)j:dHfdIe)j'dJfe;dKdLe0dMfdNe0dOfg!dPe(e%e)j9dQfe;dRgdSe)j9dQfe;dRgdTe)j9fe;dUdVe)j9fdWe)j9fe;dXgdYe)j9fdVe)j9fdWe%fge"e(e)j+e,j-e)j+fe#e)j+fe$e)j+fgdZe)j<d[fgd\e)j<dQfe;d]ge;d]d4e0d^fd_e0d^fd\e0dQfge;d]d`e0dQfdae0dQfge;d]d\e0dQfgdbZ=e=>e?dcdGe)j: e=>e?dddIe)j' e=>e?dedGe)j. e=>e?dfdIe)j. e=>e  dgS )hr   z"
    For the Elixir language.
    Elixirhttps://elixir-lang.orgelixirexexsz*.exz*.eexz*.exsz*.leexztext/x-elixir1.5)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<~)	<>+-r~   /!^&)z\\rP   rQ   rY   rR   rJ   :;r\   []c                 c   s   t | |D ]\}}}|tkr|| jkr6|t|fV  q|| jkrP|tj|fV  q|| jkrh|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d S N)r   r   r   KEYWORDr   KEYWORD_OPERATORr   rl   BUILTINBUILTIN_DECLARATIONDeclarationBUILTIN_NAMESPACErn   CONSTANTrs   
PSEUDO_VARrk   Pseudo)r   r   indexr   valuerz   rz   r{   r     s$    






z"ElixirLexer.get_tokens_unprocessedc            	   
   C   sr  ddddddddg} d	d
g}t j}dg i}|D ]\}}|d  d| dt|t j|d |d ffd| d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 ]j\}}}}|d  d| ||d fd| ||d fg7  < t|||||d < t|||dd||d < q|S )N)\{r[   }cb)z\[\]r   sb)z\(z\)rJ   pa)r   r   r   ab)r   r   r   Zslas)\|r   rH   pipe)rN   rN   rN   quot)'r   r   Zapos)z"""Ztriquot)z'''Ztriapossigilsz	(~[a-z])(rJ   z-endz-intpz	(~[A-Z])(z-no-intpz	[a-zA-Z]+rV   z^(\s*)(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_classrz   rz   r{   gen_elixir_sigil_rules  sP    

z"ElixirLexer.gen_elixir_sigil_rulesrH   c                 c   s   | ]}t |V  qd S r   r   escape.0srz   rz   r{   	<genexpr>O  s     zElixirLexer.<genexpr>c                 c   s   | ]}t |V  qd S r   r   r   rz   rz   r{   r   P  s     c                 c   s   | ]}t |V  qd S r   r   r   rz   rz   r{   r   Q  s     rI   rJ   c                 c   s   | ]}t |V  qd S r   r   r   rz   rz   r{   r   S  s     z\wz(?:\.\.\.|[a-z_]z*[!?]?)z[A-Z]z*(?:\.[A-Z]z*)*z(?:\.\.\.|<<>>|%\{\}|%|\{\})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_atomrR   z)(:)(?=\s|\n)@z(%?)(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   doubleZsingleZdouble_atomZsingle_atomN)@r^   r_   r`   ra   rb   rc   rd   re   rf   rg   r   r   r   r   r   r   r   Z
OPERATORS3Z
OPERATORS2Z
OPERATORS1ZPUNCTUATIONr   r   joinZop3_reZop2_reZop1_reZops_reZpunctuation_reZalnumZname_reZ
modname_reZcomplex_name_reZspecial_atom_reZlong_hex_char_reZhex_char_reZescape_char_rer   r
   Singler   r   rt   rv   r   HexSymbolr   r   r   	AttributeClassrx   BinOctrq   rp   r   Doubler   rw   ry   updater   rz   rz   rz   r{   r      s   
4  




?


pc                   @   s:   e Zd ZdZdZdgZdgZdZdZe	
dZdd	 Zd
S )r   a  
    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
    zElixir iex sessioniexztext/x-elixir-shellsessionr   r   z,(iex|\.{3})((?:\([\w@_.]+\))?\d+|\(\d+\))?> c              	   c   s,  t f | j}d}d}g }t|D ]}| }|drrd}|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"|r(t|||E d H  d S )Nr}   Fz** Tr   )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   rz   rz   r{   r     sD    


 
 z)ElixirConsoleLexer.get_tokens_unprocessedN)r^   r_   r`   ra   rb   rd   rf   rc   rg   r   r   r   r   rz   rz   rz   r{   r     s   
)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   rz   rz   rz   r{   <module>   s   
(,)
 {