a
    W_}                     @   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lmZ g dZedZG dd	 d	eZG d
d deZG dd deZG dd deZG dd deZG dd deZG dd deZ G dd deZ!G dd deZ"G dd deZ#G dd deZ$dS )z
    pygments.lexers.haskell
    ~~~~~~~~~~~~~~~~~~~~~~~

    Lexers for Haskell and related languages.

    :copyright: Copyright 2006-2020 by the Pygments team, see AUTHORS.
    :license: BSD, see LICENSE for details.
    N)Lexer
RegexLexerbygroupsdo_insertionsdefaultincludeinherit)	TextCommentOperatorKeywordNameStringNumberPunctuationGeneric)	unistring)
HaskellLexer
HspecLexer
IdrisLexer	AgdaLexerCryptolLexerLiterateHaskellLexerLiterateIdrisLexerLiterateAgdaLexerLiterateCryptolLexer	KokaLexerz.*?
c                !   @   sN  e Zd ZdZdZddgZdgZdgZej	ej
B ZdZdZd	efd
ejfdejdfdejdfdejdfdejfdde ejfdejfdej d ejfdej d efdej d ejfdej d ejfdejfdejfdejfdejfdejfd ejfd!efd"e j!fd#e j!fd$e j!fd%e j!fd&e j"fd'e j#fd(e j$fd)e j%fd*ejd+fd,ed-fd.ejfd/ej&fd0e'fg d	efd,ed-fd1e'd2fd3efd4ej d5 ej d6 e(ej)eeeed2fd4ej d7 e(ej)eeee'd8fd4ej d9 e(ej)ee'd8fd:ej)d2fgd	efd4ej d9 e(ej)ee'd8fd;ej d< ej)d2fgd	efd;ej d= ejfd>ej d? ejfd
ejfdejdfd@e'fd!efdAe'dBfd1e'dCfg	dDejfdejdEfdFejd2fdGejfgdHejd2fdIej*dJfd*ejd2fgdKefdIej*dJfd,ed2fgdLej*d2fdMej dN ej*d2fdeej*d2fdOej*d2fdPej*d2fdQej*d2fdRej*d2fgdSZ+dTS )Ur   zk
    A Haskell lexer based on the lexemes defined in the Haskell 98 Report.

    .. versionadded:: 0.8
    ZHaskellZhaskellZhsz*.hsztext/x-haskell)caseclassdatar   ZderivingdoelseZfamilyifin
infix[lr]?instanceletnewtypeofthentypewhere_ZNULZSOHz[SE]TXZEOTZENQZACKZBELZBSZHTZLFVTZFFZCRzS[OI]ZDLEzDC[1-4]ZNAKZSYNZETBZCANZEMZSUBZESCz[FGRU]SZSPZDEL\s+!--(?![!#$%&*+./<=>?@^|_~:\\]).*?$\{-comment
\bimport\bimport
\bmodule\bmodule	\berror\b\b(%s)(?!\')\b|z'[^\\]'z^[_z][\w\']*z'?[_z][\w']*z('')?[z(')[z(')\[[^\]]*\]z(')\([^)]*\)z(')[:!#$%&*+.\\/<=>?@^|~-]+\\(?![:!#$%&*+.\\/<=>?@^|~-]+)+(<-|::|->|=>|=)(?![:!#$%&*+.\\/<=>?@^|~-]+):[:!#$%&*+.\\/<=>?@^|~-]*[:!#$%&*+.\\/<=>?@^|~-]+z40[xX]_*[\da-fA-F](_*[\da-fA-F])*_*[pP][+-]?\d(_*\d)*zR0[xX]_*[\da-fA-F](_*[\da-fA-F])*\.[\da-fA-F](_*[\da-fA-F])*(_*[pP][+-]?\d(_*\d)*)?z\d(_*\d)*_*[eE][+-]?\d(_*\d)*z+\d(_*\d)*\.\d(_*\d)*(_*[eE][+-]?\d(_*\d)*)?z0[bB]_*[01](_*[01])*z0[oO]_*[0-7](_*[0-7])*z 0[xX]_*[\da-fA-F](_*[\da-fA-F])*z	\d(_*\d)*'	character"string\[\]\(\)[][(),;`{}]\)#popqualified\bz([z][\w.]*)(\s+)(as)(\s+)([z][\w.]*)z][\w.]*)(\s+)(hiding)(\s+)(\()funclistz][\w.]*)(\s+)(\()[\w.]+[z][\w.]*z]\w*z(_[\w\']+|[z	][\w\']*),\(rH   rH   #pop:2[^-{}]+#push-\}[-{}][^\\']'\\escape[^\\"]+[abfnrtv"\'&\\]z\^[][z@^_]o[0-7]+x[\da-fA-F]+\d+\s+\\rootr4   r6   rH   r2   r?   rA   rU   N),__name__
__module____qualname____doc__namealiases	filenames	mimetypesre	MULTILINEUNICODEflagsreservedasciir	   r
   Single	Multiliner   Reservedr   	Exceptionjoinr   CharuniZLlFunctionZLuTyper   Wordr   FloatZBinOctHexIntegerBuiltinr   r   	NamespaceEscapetokens r~   r~   9/usr/lib/python3/dist-packages/pygments/lexers/haskell.pyr      s   



-



	








r   c                   @   sV   e Zd ZdZdZdgZg Zg Zddee	e
jfdee	e
jfdee	e
jfegiZdS )	r   zY
    A Haskell lexer with support for Hspec constructs.

    .. versionadded:: 2.4.0
    ZHspecZhspecr]   z(it\s*)("[^"]*")z(describe\s*)("[^"]*")z(context\s*)("[^"]*")N)r^   r_   r`   ra   rb   rc   rd   re   r   r	   r   ZDocr   r}   r~   r~   r~   r   r      s   r   c                   @   s*  e Zd ZdZdZddgZdgZdgZdZdZ	d	Z
d
de
 eeejfdeeejfdeeejfdeeejdfdeeejeejefdde ejfdeejedfdejfdefdejfdejfdejfdejfdejfdejfdejdfdedfd efd!efgd"efd#eejeed$fd%ejd&fgd"efd'ejfd(ejfd)ejfd*ejdfd+efd,efd-ed.fd/ed0fg	d1ejfd*ejd2fd3ejd&fd4ejfgd5ejfd6ej d7fdejd&fgd8efd6ej d7fded&fgd9ej d&fd:ej d&fde	ej d&fd;ej d&fd<ej d&fdej d&fd=ej d&fgd>Z!d?S )@r   z
    A lexer for the dependently typed programming language Idris.

    Based on the Haskell and Agda Lexer.

    .. versionadded:: 2.0
    ZIdrisZidrisZidrz*.idrztext/x-idris)3r   r   r   r   usingr    r!   r"   r#   r$   r%   rewriteauto	namespacecodatamutualprivatepublicabstracttotalpartial	interfaceimplementationexportZcoveringconstructorr&   Zproofr(   r)   Zstaticr+   r,   withpatternZtermsyntaxprefix	postulate
parametersrecordZdslZ
impossibleZimplicitZtacticsZintrosZintroZcomputeZrefineexactZtrivialr-   )liblinkflagr   ZhideZfreezeaccessr   ZloggingZdynamicrb   Zerror_handlersZlanguagez^(\s*)(%%(%s))r9   z((\s*)(--(?![!#$%&*+./<=>?@^|_~:\\]).*?)$z(\s*)(\|{3}.*?)$z
(\s*)(\{-)r2   ^(\s*)([^\s(){}]+)(\s*)(:)(\s*)r8   (import|module)(\s+)r6   ('')?[A-Z][\w\']*z[a-z][\w\']*z(<-|::|->|=>|=)z"([(){}\[\]:!#$%&*+.\\/<=>?@^|~-]+)\d+[eE][+-]?\d+\d+\.\d+([eE][+-]?\d+)?0[xX][\da-fA-F]+rZ   r>   r?   r@   rA   
[^\s(){}]+\s+?r/   ([A-Z][\w.]*)(\s+)(\()rH   [A-Z][\w.]*rF   [A-Z]\w*(_[\w\']+|[a-z][\w\']*)z--.*$r1   rK   r=   rL   rM   rE   rN   rO   rP   rQ   rR   z[^\\']rT   rU   rV   rW   \^[][A-Z@^_]rX   rY   r[   )r]   r6   rH   r2   r?   rA   rU   N)"r^   r_   r`   ra   rb   rc   rd   re   rj   rk   Z
directivesrp   r   r	   r   rn   r
   rl   rm   r   rs   r   ru   rt   r   rv   rx   ry   r   rq   r{   r   r|   r}   r~   r~   r~   r   r      s   






	








r   c                   @   s>  e Zd ZdZdZdgZdgZdgZg dZde	e
eje
eje
fdejfd	ejd
fdejdfdde ejfde	eje
dfdejfdefdejfdejfdejfdejfdejfdejdfdedfde
fde
fgdejfdejdfd ejd!fd"ejfgd	ejd
fd#ed!fd$e
fgejd
 ejd ejd ejd% d&Zd'S )(r   z
    For the `Agda <http://wiki.portal.chalmers.se/agda/pmwiki.php>`_
    dependently typed functional programming language and proof assistant.

    .. versionadded:: 2.0
    ZAgdaZagdaz*.agdaztext/x-agda)"r   r   Zcoinductiver   r   ZfieldforallZhidingr#   Z	inductiveinfixinfixlinfixrr%   r&   r   openr   r   Z	primitiver   ZquoteZ	quoteGoalZ	quoteTermr   Zrenamingr   r   ZtacticZunquoteZunquoteDeclr   r+   r   r   r0   r1   r2   z\{!holer8   r9   r   r6   z\b(Set|Prop)[\u2080-\u2089]*\bz(\(|\)|\{|\})z((\.{1,3}|\||\u03BB|\u2200|\u2192|:|=|->)r   r   r   rZ   r>   r?   r@   rA   r   r   z[^!{}]+rP   z!\}rF   z[!{}]z[a-zA-Z][\w.]*z	[\W0-9_]+rU   )r]   r   r6   r2   r?   rA   rU   N)r^   r_   r`   ra   rb   rc   rd   re   rj   r   r	   r   rs   r   ru   r
   rl   rm   Z	Directiverp   r   rn   rt   r   rv   rx   ry   r   rq   r   r}   r~   r~   r~   r   r   '  sP   





r   c                   @   s~  e Zd ZdZdZddgZdgZdgZdZdZ	d	e
fd
ejfdejdfdejdfdejdfdejfdde ejfdejfdefdejfdejfdejfdejfdefdejfdejfdejfdejfdejfd ejd!fd"ed#fd$ejfd%ejfd&efgd	e
fd"ed#fd'ed(fd)efd*e ej!e
ee
ed(fd+e ej!e
ee
ed,fd-e ej!e
ed,fd.ej!d(fgd	e
fd-e ej!e
ed,fd/ej!d(fgd	e
fd0ejfd1ejfd2efdefd3ed4fd'ed5fgd6ejfdejd7fd8ejd(fd9ejfgd:ejd(fd;ej"d<fd ejd(fgd=efd;ej"d<fd"ed(fgd>ej"d(fd?ej"d(fde	ej"d(fd@ej"d(fdAej"d(fdej"d(fdBej"d(fgdCZ#h dDZ$dEdF Z%dGS )Hr   zs
    FIXME: A Cryptol2 lexer based on the lexemes defined in the Haskell 98 Report.

    .. versionadded:: 2.0
    ZCryptolZcryptolZcryz*.cryztext/x-cryptol)ZArithZBitZCmpFalseZInfTruer!   r   ZexternZfinr"   r4   infZlg2maxminr6   r'   Zpragmapropertyr)   r*   r+   widthr-   r/   //.*$/\*r2   r3   r4   r5   r6   r7   r8   r9   z^[_a-z][\w\']*z'?[_a-z][\w']*r   r:   r;   r<   r=   r   r   z0[oO][0-7]+r   rZ   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   z(([A-Z][\w.]*)(\s+)(as)(\s+)([A-Z][\w.]*)z#([A-Z][\w.]*)(\s+)(hiding)(\s+)(\()rH   r   rI   r   r   r   rK   rL   rM   rN   [^/*]+rP   \*/[*/]rS   rT   rU   rV   rW   r   rX   rY   r[   r\   >   reverseZconstseqtailz>>Z	undefinedz<<rp   r   Z	transposez<<<z>>>ZregerrorZparsplitZtraceZlengthASSERTc                 c   sR   dg}t | ||D ]8\}}}|tu r@|| jv r@|tj|fV  q|||fV  qd S )Nr]   )r   get_tokens_unprocessedr   EXTRA_KEYWORDSrz   )selftextstackindextokenvaluer~   r~   r   r     s    z#CryptolLexer.get_tokens_unprocessedN)&r^   r_   r`   ra   rb   rc   rd   re   rj   rk   r	   r
   rl   rm   r   rn   r   ro   rp   rs   rt   r   ru   r   rv   rw   rx   ry   r   rq   rz   r   r   r{   r|   r}   r   r   r~   r~   r~   r   r   l  s   



$



	









fr   c                   @   s*   e Zd ZdZedZdd Zdd ZdS )LiterateLexera  
    Base class for lexers of literate file formats based on LaTeX or Bird-style
    (prefixing each code line with ">").

    Additional options accepted:

    `litstyle`
        If given, must be ``"bird"`` or ``"latex"``.  If not given, the style
        is autodetected: if the first non-whitespace character in the source
        is a backslash or percent character, LaTeX is assumed, else Bird.
    z(>[ \t]*)(.*\n)c                 K   s   || _ tj| fi | d S N)	baselexerr   __init__)r   r   optionsr~   r~   r   r     s    zLiterateLexer.__init__c              	   c   s  | j d}|d u r0| dd dv r,dp.d}d}g }|dkrt|D ]h}| }| j|}|r|t	|dt
j|dfgf ||d7 }qJ|t	|dt|fgf qJndd	lm} |f i | j }	d}
d}t|D ]}| }|
r| d
rd}
||7 }n||7 }q| dr\d}
||7 }|t	|t|	|f d}q||7 }q|t	|t|	|f t|| j|E d H  d S )Nlitstyler      z%\latexZbird    )TexLexerz
\end{code}z\begin{code})r   getlstripline_refinditergroupbird_rematchappendlenr
   Specialr	   Zpygments.lexers.markupr   
startswithlistr   r   r   )r   r   ZstylecodeZ
insertionsr   linemr   ZlxlexerZ	codelinesr   r~   r~   r   r     sL    





z$LiterateLexer.get_tokens_unprocessedN)	r^   r_   r`   ra   rf   compiler   r   r   r~   r~   r~   r   r     s   
r   c                   @   s0   e Zd ZdZdZg dZdgZdgZdd ZdS )	r   an  
    For Literate Haskell (Bird-style or LaTeX) source.

    Additional options accepted:

    `litstyle`
        If given, must be ``"bird"`` or ``"latex"``.  If not given, the style
        is autodetected: if the first non-whitespace character in the source
        is a backslash or percent character, LaTeX is assumed, else Bird.

    .. versionadded:: 0.9
    zLiterate Haskell)Zlhszliterate-haskellZlhaskellz*.lhsztext/x-literate-haskellc                 K   s&   t f i |}tj| |fi | d S r   )r   r   r   r   r   Zhslexerr~   r~   r   r   G  s    zLiterateHaskellLexer.__init__N	r^   r_   r`   ra   rb   rc   rd   re   r   r~   r~   r~   r   r   5  s   r   c                   @   s0   e Zd ZdZdZg dZdgZdgZdd ZdS )	r   al  
    For Literate Idris (Bird-style or LaTeX) source.

    Additional options accepted:

    `litstyle`
        If given, must be ``"bird"`` or ``"latex"``.  If not given, the style
        is autodetected: if the first non-whitespace character in the source
        is a backslash or percent character, LaTeX is assumed, else Bird.

    .. versionadded:: 2.0
    zLiterate Idris)Zlidrzliterate-idrisZlidrisz*.lidrztext/x-literate-idrisc                 K   s&   t f i |}tj| |fi | d S r   )r   r   r   r   r~   r~   r   r   ^  s    zLiterateIdrisLexer.__init__Nr   r~   r~   r~   r   r   L  s   r   c                   @   s0   e Zd ZdZdZddgZdgZdgZdd Zd	S )
r   aU  
    For Literate Agda source.

    Additional options accepted:

    `litstyle`
        If given, must be ``"bird"`` or ``"latex"``.  If not given, the style
        is autodetected: if the first non-whitespace character in the source
        is a backslash or percent character, LaTeX is assumed, else Bird.

    .. versionadded:: 2.0
    zLiterate AgdaZlagdazliterate-agdaz*.lagdaztext/x-literate-agdac                 K   s*   t f i |}tj| |fddi| d S )Nr   r   )r   r   r   )r   r   Z	agdalexerr~   r~   r   r   u  s    zLiterateAgdaLexer.__init__Nr   r~   r~   r~   r   r   c  s   r   c                   @   s0   e Zd ZdZdZg dZdgZdgZdd ZdS )	r   an  
    For Literate Cryptol (Bird-style or LaTeX) source.

    Additional options accepted:

    `litstyle`
        If given, must be ``"bird"`` or ``"latex"``.  If not given, the style
        is autodetected: if the first non-whitespace character in the source
        is a backslash or percent character, LaTeX is assumed, else Bird.

    .. versionadded:: 2.0
    zLiterate Cryptol)Zlcryzliterate-cryptolZlcryptolz*.lcryztext/x-literate-cryptolc                 K   s&   t f i |}tj| |fi | d S r   )r   r   r   )r   r   Zcrylexerr~   r~   r   r     s    zLiterateCryptolLexer.__init__Nr   r~   r~   r~   r   r   z  s   r   c                   @   s  e Zd ZdZdZdgZddgZdgZg dZg dZ	g d	Z
g d
ZdZde d ZdZejZejZejZedde edfdeeeedfdeeeedfdde	 d eeeedfdeeeeejfdeeeejeeeeejfde d eeeejfde d eeeeejfdde
 e ejfdde e efdde e ejfde efdeejefd eejefd!e d eejefd"ej fd#e!j"d$fed% e#fd&e#fd'e$fd(e%j&fd)e%j'fd*e%j(fd+e!j)d,fd-e!j"d.fgd/efedgd0e$d1fedgd2ed3fed4gd5ed1fd2ed3fd6efd7eeeefed4geddde
 e efd8de e d9 ed1fd:e efd;efd"ej fdeejefd<eejefd=efe*d1g
d>e+j,fd?efd@e+j-dAfdBe+j.fgdCe+j-fd@e+j-dDfdEe+j-d1fdFe+j-fgdGe!j"fdHe!j/fd-e!j"d1fgdIe!j"fedJdKe!j"d1fgdLe!j)fedJdMe!j)d1fgdNe!j/fdOe!j/fdPe!j/fdQe!j/fgdRZ0dSS )Tr   zc
    Lexer for the `Koka <http://koka.codeplex.com>`_
    language.

    .. versionadded:: 1.6
    ZKokaZkokaz*.kkz*.kkiztext/x-koka)"r   r   r   r*   cotyperectypealiasstructZconZfunZfunctionvalvarZexternalr"   r)   r!   elifreturnr   r   r   r   r6   r4   asr   ZinlineZrectryyieldenumr   r%   )r*   r   r   r   r   r   )r   existsZsomer   )forwhilerepeatZforeachzforeach-indexedr   ZcatchfinallyZcsZjsfilerefassignedz[$%&*+@!/\\^~=.:\-?|<>]+z(?!)z	(?![\w/])
whitespacez::?r*   z(alias)(\s+)([a-z]\w*)?
alias-typez(struct)(\s+)([a-z]\w*)?struct-typez(%s)r9   z(\s+)([a-z]\w*)?z4(module)(\s+)(interface\s+)?((?:[a-z]\w*/)*[a-z]\w*)zb(import)(\s+)((?:[a-z]\w*/)*[a-z]\w*)(?:(\s*)(=)(\s*)((?:qualified\s*)?)((?:[a-z]\w*/)*[a-z]\w*))?zE(^(?:(?:public|private)\s*)?(?:function|fun|val))(\s+)([a-z]\w*|\((?:z|/)\))zE(^(?:(?:public|private)\s*)?external)(\s+)(inline\s+)?([a-z]\w*|\((?:z::?|:=|\->|[=.]z((?:[a-z]\w*/)*)([A-Z]\w*)z((?:[a-z]\w*/)*)([a-z]\w*)z((?:[a-z]\w*/)*)(\((?:z_\w*z@"	litstringz
|/(?![*/])`z[{}()\[\];,]z![0-9]+\.[0-9]+([eE][\-+]?[0-9]+)?z0[xX][0-9a-fA-F]+z[0-9]+r>   charr@   rA   =z(?=\((?!,*\)))rF   z[(\[<]type-nestedtype-contentz[)\]>]rK   z([a-z]\w*)(\s*)(:)(?!:)z(?=((%s)z))z[EPHVX]z[a-z][0-9]*(?![\w/])z((?:[a-z]\w*/)*)([a-z]\w+)z::|->|[.:|]z	\n\s*#.*$r/   r   r2   r   r   rP   r   r   z[^"]+z""z	[^\\"\n]+escape-sequencez["\n]z
[^\\\'\n]+z[\'\n]z\\[nrt\\"\']z\\x[0-9a-fA-F]{2}z\\u[0-9a-fA-F]{4}z\\U[0-9a-fA-F]{6})r]   r   r   r*   r  r  r   r2   r   rA   r   r  N)1r^   r_   r`   ra   rb   rc   rd   re   keywordsZtypeStartKeywordsZtypekeywordsZbuiltinZsymbolsZ	sboundaryboundaryr   Z	AttributeZ	tokenTypeZClassZtokenTypeDefr   ZEmphZtokenConstructorr   r   r   r	   rp   r{   rs   rt   ZPseudoZVariabler   Doubler   r   r   rv   rx   ry   rq   r   r
   ZPreprocrm   rl   r|   r}   r~   r~   r~   r   r     s  








?









 r   )%ra   rf   Zpygments.lexerr   r   r   r   r   r   r   Zpygments.tokenr	   r
   r   r   r   r   r   r   r   Zpygmentsr   rr   __all__r   r   r   r   r   r   r   r   r   r   r   r   r   r~   r~   r~   r   <module>   s&   
$,
 oE 
@