o
    ThJ                     @   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-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                   @   sN  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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 d0 ej"fd1ej+fd2e d3fgee!j,fde!d4fd5e!j-fd6e!fd7e!fgd8e d eej.ee ej)d4fd9e d eej.ee ej"d4feej.d4fge/d:d;e d<fd=e d<fd>e d4fge/d:d?e d4fd@e d4fgdAZ0dBS )Cr   z9
    For the Erlang functional programming language.
    Erlanghttps://www.erlang.org/erlang)z*.erlz*.hrlz*.esz	*.escriptztext/x-erlangz0.9)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(?:[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)1__name__
__module____qualname____doc__nameurlaliases	filenames	mimetypesversion_added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   W/home/air/segue/gemini/back/venv/lib/python3.10/site-packages/pygments/lexers/erlang.pyr      s    $
 



r   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 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   optionsr	   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   r   r   recompiler   r   r   r   r   r   r      s    
r   c                 C   sH   i }d| d|ft dd|fd| dt|dft dg|d	|  < |S )
N[^#\\]+escapes\\.r   r   r   interpolstring_)r   r   )r   symboltokenstatesr   r   r   gen_elixir_string_rules   s   r  Tc                 C   s\   |rd| d|ft dd|f|  d|dft dgS d| d|fd|f|  d|dfgS )	Nr  r	  r
  r  z	[a-zA-Z]*r   r  z[^)r   )term
term_classr  r  r   r   r   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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$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d0e)j.d1fd2e)j.d3fd4e! de  d5e(e)j.e0fd6e e1j2fee1fd7e de(e0e1j3fee/fee/fee0fd8e1j4fee/fd9e,j5fd:e,j6fd;e,j-fd<e,j7fd=e,j8fd>e(e)j9e%d?fd@e(e)j9e%dAfdBe)j:dCfdDe)j'dEfe;dFdGe0dHfdIe0dJfdKe(e%e)j9dLfe;dMgdNe)j9dLfe;dMgdOe)j9fe;dPdQe)j9fdRe)j9fe;dSgdTe)j9fdQe)j9fdRe%fge"e(e)j+e,j-e)j+fe#e)j+fe$e)j+fgdUe)j<dVfgdWe)j<dLfe;dXge;dXd/e0dYfdZe0dYfdWe0dLfge;dXd[e0dLfd\e0dLfge;dXdWe0dLfgd]Z=e=>e?d^dBe)j: e=>e?d_dDe)j' e=>e?d`dBe)j. e=>e?dadDe)j. e=>e  dbS )cr   z"
    For the Elixir language.
    Elixirhttps://elixir-lang.org)elixirexexs)z*.exz*.eexz*.exsz*.leexztext/x-elixir1.5)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   sd  g d} ddg}t j}dg i}|D ]g\}}|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 ]4\}}}}|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\)r   pa)rA  rB  rB  ab)rE  rE  rE  slas)\|ra  r   pipe)r   r   r   quot)'rd  rd  apos)z"""triquot)z'''triapossigilsz	(~[a-z])(r   z-endz-intpz	(~[A-Z])(z-no-intpz	[a-zA-Z]+r   z^(\s*)(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 rM  r  escape.0sr   r   r   	<genexpr>O      zElixirLexer.<genexpr>c                 c   rs  rM  rt  rv  r   r   r   ry  P  rz  c                 c   rs  rM  rt  rv  r   r   r   ry  Q  rz  r   r   c                 c   rs  rM  rt  rv  r   r   r   ry  S  rz  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])r   z#.*$z(\?)z\?\\?.z:::z::rI  z:"string_double_atomz:'string_single_atomr   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_singler   string_doublerd  string_singlerh  z%\{r   rY  tuplez^(\s*)(""")r   ri  z^\s*'''z	[^#\\\n]+r
  r  z\n+r  z[^\\\n]+r   interpol_stringr   r   r   r   r   r   )r   r~  r  ri  rj  r
  r  r  r   r   r  doublesingledouble_atomsingle_atomN)@r   r   r   r   r   r   r   r   r   r   rN  rO  rP  rQ  rS  rT  rU  
OPERATORS3
OPERATORS2
OPERATORS1PUNCTUATIONr   rr  joinop3_reop2_reop1_reops_repunctuation_realnum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   rl  Doubler   r   r   updater  r   r   r   r   r      s@   4



 !$%&'(+,-./24
6
79;<?


pr   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   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   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   r   r     s    
r   )T)r   r  pygments.lexerr   r   r   r   r   r   r   r	   pygments.tokenr
   r   r   r   r   r   r   r   r   __all__r   r   r  r  r   r   r   r   r   r   <module>   s    
(,)
 {