o
    ‡ÎÖa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
    ÚErlangÚerlang)z*.erlz*.hrlz*.esz	*.escriptztext/x-erlang)ÚafterÚbeginÚcaseÚcatchÚcondÚendÚfunÚifÚletÚofÚqueryÚreceiveÚtryÚwhen){ÚabsÚappend_elementÚapplyÚatom_to_listÚbinary_to_listÚbitstring_to_listÚbinary_to_termÚbit_sizeÚbump_reductionsÚ	byte_sizeÚcancel_timerÚcheck_process_codeÚdelete_moduleÚ	demonitorÚdisconnect_nodeÚdisplayÚelementÚeraseÚexitÚfloatÚfloat_to_listÚfun_infoÚfun_to_listÚfunction_exportedÚgarbage_collectÚgetÚget_keysÚgroup_leaderÚhashÚhdÚinteger_to_listÚiolist_to_binaryÚiolist_sizeÚis_atomÚ	is_binaryÚis_bitstringÚ
is_booleanÚ
is_builtinÚis_floatÚis_functionÚ
is_integerÚis_listÚ	is_numberÚis_pidÚis_portÚis_process_aliveÚ	is_recordÚis_referenceÚis_tupleÚlengthÚlinkÚlist_to_atomÚlist_to_binaryÚlist_to_bitstringÚlist_to_existing_atomÚlist_to_floatÚlist_to_integerÚlist_to_pidÚlist_to_tupleÚload_moduleÚlocaltime_to_universaltimeÚ
make_tupleÚmd5Ú	md5_finalÚ
md5_updateÚmemoryÚmodule_loadedÚmonitorÚmonitor_nodeÚnodeÚnodesÚ	open_portÚphashÚphash2Úpid_to_listÚ
port_closeÚport_commandÚport_connectÚport_controlÚ	port_callÚ	port_infoÚport_to_listÚprocess_displayÚprocess_flagÚprocess_infoÚpurge_moduleÚputÚ
read_timerÚref_to_listÚregisterÚresume_processÚroundÚsendÚ
send_afterÚsend_nosuspendÚ
set_cookieÚ
setelementÚsizeÚspawnÚ
spawn_linkÚspawn_monitorÚ	spawn_optÚsplit_binaryÚstart_timerÚ
statisticsÚsuspend_processÚsystem_flagÚsystem_infoÚsystem_monitorÚsystem_profileÚterm_to_binaryÚtlÚtraceÚtrace_deliveredÚ
trace_infoÚtrace_patternÚtruncÚ
tuple_sizeÚtuple_to_listÚuniversaltime_to_localtimeÚunlinkÚ
unregisterÚwhereisz1(\+\+?|--?|\*|/|<|>|/=|=:=|=/=|=<|>=|==?|<-|!|\?))ÚandÚandalsoÚbandÚbnotÚborÚbslÚbsrÚ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:=ú\}ú,ú(?=\}))r¿   r¶   r´   r¼   rÁ   N)/Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚnameÚaliasesÚ	filenamesÚ	mimetypesÚkeywordsÚbuiltinsÚ	operatorsÚword_operatorsÚatom_reÚvariable_reÚesc_char_reÚesc_octal_reÚ
esc_hex_reÚesc_ctrl_reÚ	escape_reÚmacro_reÚbase_rer   r   r
   r   r   r   ÚBuiltinr   ÚWordr   r   ÚLabelÚ	NamespaceÚFunctionr   ÚIntegerÚFloatÚVariableÚConstantÚCharÚHashbangÚEscapeÚInterpolÚEntityr   Útokens© ré   ré   ú8/usr/lib/python3/dist-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   Ú*ré   )r   ÚoptionsÚline_reÚfinditerÚgroupÚ
_prompt_reÚmatchr   ÚappendÚlenr   ÚPromptr   Úget_tokens_unprocessedÚ
startswithÚstartÚ	TracebackÚOutput)	ÚselfÚtextÚerlexerÚcurcodeÚ
insertionsró   ÚlineÚmr   ré   ré   rê   r÷   §   s6   €
ÿ
ÿ
ÿÿz'ErlangShellLexer.get_tokens_unprocessedN)rÅ   rÆ   rÇ   rÈ   rÉ   rÊ   rË   rÌ   ÚreÚcompilerò   r÷   ré   ré   ré   rê   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)r½   ÚinterpolÚstring_)r   r   )rÉ   ÚsymbolÚtokenÚstatesré   ré   rê   Ú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]*r½   r  z[^%s\\]+)r   )ÚtermÚ
term_classr  r  ré   ré   rê   Ú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"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‘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‘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
    ÚElixir)ÚelixirÚexÚexs)z*.exz*.eexz*.exsz*.leexztext/x-elixir)ÚfnÚdor   r   ÚelseÚrescuer   )r«   r¢   r¬   r&   Úin)r   r   Úforr    Úunlessr%   r$   ÚraiseÚquoteÚunquoteÚunquote_splicingÚthrowÚsuper)ÚdefÚdefpÚ	defmoduleÚdefprotocolÚdefmacroÚ	defmacropÚdefdelegateÚdefexceptionÚ	defstructÚdefimplÚdefcallback)ÚimportÚrequireÚuseÚalias)ÚnilÚtrueÚfalse)Ú_Ú
__MODULE__Ú__DIR__Ú__ENV__Ú
__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<-r°   Ú.ú=z~>z<~)	ú<ú>ú+ú-rí   ú/ú!ú^ú&)z\\r·   r¸   rÀ   r¹   r±   ú:ú;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   rÛ   ÚBUILTINÚBUILTIN_DECLARATIONÚDeclarationÚBUILTIN_NAMESPACErÝ   ÚCONSTANTrâ   Ú
PSEUDO_VARrÚ   ÚPseudo)rü   rý   Úindexr  Úvalueré   ré   rê   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\[ú\]rV  Úsb)z\(z\)r±   Úpa)r;  r<  r<  Úab)r?  r?  r?  Úslas)ú\|r[  r°   Úpipe)rµ   rµ   rµ   Úquot)ú'r^  r^  Úapos)z"""Útriquot)z'''ÚtriaposÚsigilsz(~[a-z])(%s)z-endz-intpz(~[A-Z])(%s)z-no-intpz	[a-zA-Z]+r½   z^(\s*)(r±   Úheredoc_interpolÚheredoc_no_interpolz~[a-z]z~[A-Z]F)r  )r   ÚOtherr   ÚHeredocr   r   r   r  )	ÚterminatorsÚ	triquotesr  r  r  rÉ   ÚltermÚrtermÚrterm_classré   ré   rê   Úgen_elixir_sigil_rules   s@   ÿÿýþþþþ

ÿÿz"ElixirLexer.gen_elixir_sigil_rulesr°   c                 c   ó   � | ]}t  |¡V  qd S rG  ©r  Úescape©Ú.0Úsré   ré   rê   Ú	<genexpr>T  ó   € zElixirLexer.<genexpr>c                 c   rm  rG  rn  rp  ré   ré   rê   rs  U  rt  c                 c   rm  rG  rn  rp  ré   ré   rê   rs  V  rt  z(?:%s|%s|%s)c                 c   rm  rG  rn  rp  ré   ré   rê   rs  X  rt  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::rC  z:"Ústring_double_atomz:'Ú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µ   Ústring_doubler^  Ústring_singlerb  z%\{r¼   rS  Útuplez^(\s*)(""")r½   rc  z^\s*'''z	[^#\\\n]+r  r  z\n+r  z[^\\\n]+r»   Úinterpol_stringrÂ   r¿   rÁ   rÀ   rÃ   rÄ   )r¿   ry  rz  rc  rd  r  r  r~  r¼   rÁ   r}  ÚdoubleÚsingleÚdouble_atomÚsingle_atomN)>rÅ   rÆ   rÇ   rÈ   rÉ   rÊ   rË   rÌ   rH  rI  rJ  rK  rM  rN  rO  Ú
OPERATORS3Ú
OPERATORS2Ú
OPERATORS1ÚPUNCTUATIONr÷   rl  ÚjoinÚop3_reÚop2_reÚop1_reÚops_reÚpunctuation_reru  Úname_reÚ
modname_reÚcomplex_name_reÚspecial_atom_reÚlong_hex_char_reÚhex_char_reÚescape_char_rer   r
   ÚSingler   r   rã   rå   r   ÚHexÚSymbolr   r   r   Ú	AttributeÚClassrç   ÚBinÚOctrà   rß   rf  ÚDoubler   ræ   rè   Úupdater  ré   ré   ré   rê   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|r˜t|| |¡ƒE d H  d S d S )Nrì   Fz** Tr   éÿÿÿÿré   )r   rî   rï   rð   rñ   rø   rô   rõ   r   ÚErrorrò   ró   r   rö   r   r÷   rû   rù   )rü   rý   Úexlexerrÿ   Úin_errorr   ró   r  r  r   r  ré   ré   rê   r÷   ô  sD   €

ÿ
ÿ

ÿ
ÿÿz)ElixirConsoleLexer.get_tokens_unprocessedN)rÅ   rÆ   rÇ   rÈ   rÉ   rÊ   rÌ   r  r  rò   r÷   ré   ré   ré   rê   r   Ú  s    
r   )T)rÈ   r  Úpygments.lexerr   r   r   r   r   r   r   Úpygments.tokenr	   r
   r   r   r   r   r   r   r   r   Ú__all__r  rï   r   r   r  r  r   r   ré   ré   ré   rê   Ú<module>   s    
$0
 )
 {