B
    G
\I                 @   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 ddddg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-2017 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ErlangLexerErlangShellLexerElixirConsoleLexerElixirLexerz.*?
c               @   sD  e 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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 d0 e d1 ejfd2ej)fd3ed4fgeej*fded5fd6ej+fd7efd8efgd9e d e ej,eeej'd5fd:e d e ej,eeejd5feej,d5fge-d;d<ed=fd>ed=fd?ed5fge-d;d@ed5fdAed5fgdBZ.dCS )Dr   z
    For the Erlang functional programming language.

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

    .. versionadded:: 0.9
    ZErlangZerlangz*.erlz*.hrlz*.esz	*.escriptztext/x-erlang)afterZbegincasecatchcondendZfunifZletZofZ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_binaryZtlZtraceZtrace_deliveredZ
trace_infoZtrace_patternZtruncZ
tuple_sizeZtuple_to_listZuniversaltime_to_localtimeunlinkZ
unregisterZwhereisz1(\+\+?|--?|\*|/|<|>|/=|=:=|=/=|=<|>=|==?|<-|!|\?))andZandalsoZbandZbnotZborZbslZbsrZbxorZdivnotorZ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])z\s+z%.*\nz\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(?=\}))r=   r8   r6   r;   r>   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   Builtinr   Wordr   r   ZLabelr   	NamespaceZFunctionr   IntegerFloatZVariableConstantCharZHashbangEscapeInterpolEntityr   tokens rU   rU   5lib/python3.7/site-packages/pygments/lexers/erlang.pyr      sv   $




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\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 |rxt|||D ]
}	|	V  qW d}g }|dr| t
j|fV  q | t
j|fV  q W |rxt|||D ]
}	|	V  qW 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
insertionsr^   linemr   itemrU   rU   rV   rb      s0    


z'ErlangShellLexer.get_tokens_unprocessedN)r@   rA   rB   rC   rD   rE   rF   rG   recompiler]   rb   rU   rU   rU   rV   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   )rD   ZsymboltokenstatesrU   rU   rV   gen_elixir_string_rules   s    rs   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\\]+ro   z\\.z%s[a-zA-Z]*z#poprp   z[^%s\\]+)r   )termrq   rp   rU   rU   rV   gen_elixir_sigstr_rules   s    
ru   c            #   @   s  e Zd ZdZdZdddgZ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d-e e'j,fd-e e'j,fd.e'j,d/fd0e'j,d1fd2eef e&e'j,e.fd3e e/j0fee/fd4ef e&e.e/j1fee-fee-fee.fd5e/j2fee-fd6e*j3fd7e*j4fd8e*j+fd9e*j5fd:e*j6fd;e'j7d<fd=e'j7d>fd?e'j8d@fdAe'j%dBfe9dCdDe.dEfdFe.dGfg!dHe'j7dIfe9dJgdKe'j7dIfe9dJgdLe'j7fe9dMdNe'j7fdOe'j7fe9dPgdQe'j7fdNe'j7fdOe'j7fge e&e'j)e*j+e'j)fe!e'j)fe"e'j)fgdRe'j:dSfgdTe'j:dIfe9dUge9dUd-e.dVfdWe.dVfdTe.dIfge9dUdXe.dIfdYe.dIfge9dUdTe.dIfgdZZ;e;<e=d[d?e'j8 e;<e=d\dAe'j% e;<e=d]d?e'j, e;<e=d^dAe'j, e;<e  d_S )`r   zY
    For the `Elixir language <http://elixir-lang.org>`_.

    .. versionadded:: 1.5
    ZElixirZelixirexZexsz*.exz*.exsztext/x-elixir)fnZdor   r   elseZrescuer   )r0   r/   r1   r   in)r   r   forr   Zunlessr   r   raiseZquoteZ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<-r3   .=z~>z<~)	<>+-rX   /!^&)z\\z<<z>>z=>r9   r4   :;r?   []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   rb   r   KEYWORDr   KEYWORD_OPERATORr   rK   BUILTINBUILTIN_DECLARATIONZDeclarationBUILTIN_NAMESPACErL   CONSTANTrO   
PSEUDO_VARrJ   ZPseudo)rf   rg   indexrq   valuerU   rU   rV   rb     s$    






z"ElixirLexer.get_tokens_unprocessedc           
   C   sZ  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| t jdftdg||d < d| t jdftdg||d < q0W xj| D ]b\}}}|d  d| ||d fd| ||d fg7  < t||||d < t||dd||d < qW |S )N)z\{z\}cb)z\[z\]Zsb)z\(z\)Zpa)r   r   Zab)r   r   Zslas)z\|z\|pipe)r7   r7   Zquot)'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*heredoc_interpolheredoc_no_interpolz~[a-z]z~[A-Z]F)rp   )r   ZOtherr   Heredocr   r   ru   )ZterminatorsZ	triquotesrq   rr   rt   rD   ZltermZrtermrU   rU   rV   gen_elixir_sigil_rules#  s<    z"ElixirLexer.gen_elixir_sigil_rulesr3   c             c   s   | ]}t |V  qd S )N)rm   escape).0srU   rU   rV   	<genexpr>V  s    zElixirLexer.<genexpr>c             c   s   | ]}t |V  qd S )N)rm   r   )r   r   rU   rU   rV   r   W  s    c             c   s   | ]}t |V  qd S )N)rm   r   )r   r   rU   rU   rV   r   X  s    z(?:%s|%s|%s)c             c   s   | ]}t |V  qd S )N)rm   r   )r   r   rU   rU   rV   r   Z  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_singler7   Zstring_doubler   Zstring_singler   z%\{r;   z\{tuplez^\s*"""z#popr   z^\s*'''z	[^#\\\n]+ro   z\\.z\n+rp   z[^\\\n]+z#\{interpol_stringz\}r=   r>   z=>r?   z(?=\}))r=   r   r   r   r   ro   rp   r   r;   r>   r   ZdoubleZsingleZdouble_atomZsingle_atomN)>r@   rA   rB   rC   rD   rE   rF   rG   r   r   r   r   r   r   r   Z
OPERATORS3Z
OPERATORS2Z
OPERATORS1ZPUNCTUATIONrb   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   rP   rQ   r   ZHexZSymbolr   r   r   Z	AttributeZClassrS   ZBinZOctrN   rM   r   Doubler   rR   rT   updaters   rU   rU   rU   rV   r      s   
3














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})(\(\d+\))?> c          	   c   sJ  t f | j}d}d}g }xt|D ]}| }|drvd}|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&|rxt|||D ]
}
|
V  qW d}g }|rtj	ntj}| ||fV  q&W |rFx t|||D ]}
|
V  q6W d S )NrW   Fz** Tr   )r   rY   rZ   r[   r\   rc   r_   r`   r   Errorr]   r^   r   ra   r   rb   re   rd   )rf   rg   Zexlexerrh   Zin_errorri   r^   rj   rk   r   rl   rq   rU   rU   rV   rb     s<    



z)ElixirConsoleLexer.get_tokens_unprocessedN)r@   rA   rB   rC   rD   rE   rG   rm   rn   r]   rb   rU   rU   rU   rV   r     s   
)T)rC   rm   Zpygments.lexerr   r   r   r   r   r   r   Zpygments.tokenr	   r
   r   r   r   r   r   r   r   __all__rn   rZ   r   r   rs   ru   r   r   rU   rU   rU   rV   <module>
   s   $,
 +
 x