B
    6\5{              	   @   s(  d Z ddlZddl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 dddd	d
ddddg	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"dS )z
    pygments.lexers.haskell
    ~~~~~~~~~~~~~~~~~~~~~~~

    Lexers for Haskell and related languages.

    :copyright: Copyright 2006-2017 by the Pygments team, see AUTHORS.
    :license: BSD, see LICENSE for details.
    N)Lexer
RegexLexerbygroupsdo_insertionsdefaultinclude)	TextCommentOperatorKeywordNameStringNumberPunctuationGeneric)	unistringHaskellLexer
IdrisLexer	AgdaLexerCryptolLexerLiterateHaskellLexerLiterateIdrisLexerLiterateAgdaLexerLiterateCryptolLexer	KokaLexerz.*?
c                @   sF  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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d/e'fgd	efd+ed,fd0e'd1fd2efd3ej d4 ej d5 e(ej)eeeed1fd3ej d6 e(ej)eeee'd7fd3ej d8 e(ej)ee'd7fd9ej)d1fgd	efd3ej d8 e(ej)ee'd7fd:ej d; ej)d1f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d@e'dAfd0e'dBfg	dCejfdejdDfdEejd1fdFejfgdGejd1fdHej*dIfd)ejd1fgdJefdHej*dIfd+ed1fgdKej*d1fdLej dM ej*d1fdeej*d1fdNej*d1fdOej*d1fdPej*d1fdQej*d1fgdRZ+dSS )Tr   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inz
infix[lr]?instanceletnewtypeofthentypewhere_)NULSOHz[SE]TXEOTENQACKBELBSHTLFVTFFCRzS[OI]DLEzDC[1-4]NAKSYNETBCANEMSUBESCz[FGRU]SSPDELz\s+z!--(?![!#$%&*+./<=>?@^|_~:\\]).*?$z\{-commentz
\bimport\bimportz
\bmodule\bmodulez	\berror\bz\b(%s)(?!\')\b|z'[^\\]'z^[_z][\w\']*z'?[_z][\w']*z('')?[z(')[z(')\[[^\]]*\]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"stringz\[\]z\(\)z[][(),;`{}]z\)z#popzqualified\bz([z][\w.]*)(\s+)(as)(\s+)([z][\w.]*)z][\w.]*)(\s+)(hiding)(\s+)(\()funclistz][\w.]*)(\s+)(\()z[\w.]+[z][\w.]*z]\w*z(_[\w\']+|[z	][\w\']*),z\()rH   rH   z#pop:2z[^-{}]+z#pushz-\}z[-{}]z[^\\']'z\\escapez[^\\"]+z[abfnrtv"\'&\\]z\^[][z@^_]zo[0-7]+zx[\da-fA-F]+z\d+z\s+\\)rootrA   rB   rH   r@   rE   rG   rK   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 rm   rm   6lib/python3.7/site-packages/pygments/lexers/haskell.pyr      s   
















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).r   r   r   r   usingr   r   r    r!   z
infix[lr]?r"   rewriteauto	namespacecodatamutualprivatepublicabstractZtotalpartialr#   Zproofr%   r&   Zstaticr(   r)   withpatternZtermsyntaxprefix	postulateZ
parametersrecordZdslZ
impossibleZimplicitZtacticsZintrosZintroZcomputeZrefineexactZtrivial)r*   r+   z[SE]TXr,   r-   r.   r/   r0   r1   r2   r3   r4   r5   zS[OI]r6   zDC[1-4]r7   r8   r9   r:   r;   r<   r=   z[FGRU]Sr>   r?   )liblinkflagr   ZhideZfreezeaccessr   ZloggingZdynamicrQ   Zerror_handlersZlanguagez^(\s*)(%%%s)rC   z((\s*)(--(?![!#$%&*+./<=>?@^|_~:\\]).*?)$z(\s*)(\|{3}.*?)$z
(\s*)(\{-)r@   z^(\s*)([^\s(){}]+)(\s*)(:)(\s*)z\b(%s)(?!\')\bz(import|module)(\s+)rB   z('')?[A-Z][\w\']*z[a-z][\w\']*z(<-|::|->|=>|=)z"([(){}\[\]:!#$%&*+.\\/<=>?@^|~-]+)z\d+[eE][+-]?\d+z\d+\.\d+([eE][+-]?\d+)?z0[xX][\da-fA-F]+z\d+rD   rE   rF   rG   z
[^\s(){}]+z\s+?z\s+z([A-Z][\w.]*)(\s+)(\()rH   z[A-Z][\w.]*z#popz[A-Z]\w*z(_[\w\']+|[a-z][\w\']*)z--.*$z\{-rJ   z[:!#$%&*+.\\/<=>?@^|~-]+z\()rH   rH   z\)z#pop:2z[^-{}]+z#pushz-\}z[-{}]z[^\\']z\\rK   z[^\\"]+z[abfnrtv"\'&\\]z\^[][A-Z@^_]zo[0-7]+zx[\da-fA-F]+z\s+\\)rL   rB   rH   r@   rE   rG   rK   N)"rM   rN   rO   rP   rQ   rR   rS   rT   rY   rZ   Z
directivesr_   r   r   r   r]   r	   r[   r\   r   rb   r
   rd   rc   r   re   rg   rh   r   r`   rj   r   rk   rl   rm   rm   rm   rn   r      sv   	













c            "   @   s~  e Zd ZdZdZdgZdgZdgZdddd	d
dddddddddddddddddddddd d!d"d#d$d%d&d'g"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d0e	eje
d1fd2ejfd3efd4ejfd5ejfd6ejfd7ejfd8ejfd9ejd:fd;ed<fd=e
fd>e
fgd?ejfd,ejd@fdAejdBfdCejfgd*ejd+fdDedBfdEe
fgejd+ ejd: ejd< ejdF dGZdHS )Ir   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-agdarw   rs   Zcoinductiveconstructorr   ZfieldforallZhidingr!   Z	inductiveinfixinfixlinfixrr"   r#   rt   openrz   r}   Z	primitiveru   ZquoteZ	quoteGoalZ	quoteTermr~   Zrenamingrp   r{   ZtacticZunquoteZunquoteDeclro   r(   ry   z^(\s*)([^\s(){}]+)(\s*)(:)(\s*)z!--(?![!#$%&*+./<=>?@^|_~:\\]).*?$z\{-r@   z\{!holez\b(%s)(?!\')\brC   z(import|module)(\s+)rB   z\b(Set|Prop)\bz(\(|\)|\{|\})u   (\.{1,3}|\||Λ|∀|→|:|=|->)z\d+[eE][+-]?\d+z\d+\.\d+([eE][+-]?\d+)?z0[xX][\da-fA-F]+z\d+rD   rE   rF   rG   z
[^\s(){}]+z\s+?z[^!{}]+z#pushz!\}z#popz[!{}]z[a-zA-Z][\w.]*z	[\W0-9_]+rK   )rL   r   rB   r@   rE   rG   rK   N)rM   rN   rO   rP   rQ   rR   rS   rT   rY   r   r   r   rb   r
   rd   r	   r[   r\   Z	Directiver_   r   r]   rc   r   re   rg   rh   r   r`   r   rl   rm   rm   rm   rn   r     sR   








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#e$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   ZexportZexternZfinr    rA   infZlg2maxminrB   r$   Zpragmapropertyr&   r'   r(   width)r*   r+   z[SE]TXr,   r-   r.   r/   r0   r1   r2   r3   r4   r5   zS[OI]r6   zDC[1-4]r7   r8   r9   r:   r;   r<   r=   z[FGRU]Sr>   r?   z\s+z//.*$z/\*r@   z
\bimport\brA   z
\bmodule\brB   z	\berror\bz\b(%s)(?!\')\brC   z^[_a-z][\w\']*z'?[_a-z][\w']*z('')?[A-Z][\w\']*z\\(?![:!#$%&*+.\\/<=>?@^|~-]+)z+(<-|::|->|=>|=)(?![:!#$%&*+.\\/<=>?@^|~-]+)z:[:!#$%&*+.\\/<=>?@^|~-]*z[:!#$%&*+.\\/<=>?@^|~-]+z\d+[eE][+-]?\d+z\d+\.\d+([eE][+-]?\d+)?z0[oO][0-7]+z0[xX][\da-fA-F]+z\d+rD   rE   rF   rG   z\[\]z\(\)z[][(),;`{}]z\)z#popzqualified\bz(([A-Z][\w.]*)(\s+)(as)(\s+)([A-Z][\w.]*)z#([A-Z][\w.]*)(\s+)(hiding)(\s+)(\()rH   z([A-Z][\w.]*)(\s+)(\()z[\w.]+z[A-Z][\w.]*z[A-Z]\w*z(_[\w\']+|[a-z][\w\']*)rJ   z\()rH   rH   z#pop:2z[^/*]+z#pushz\*/z[*/]z[^\\']'z\\rK   z[^\\"]+z[abfnrtv"\'&\\]z\^[][A-Z@^_]zo[0-7]+zx[\da-fA-F]+z\s+\\)rL   rA   rB   rH   r@   rE   rG   rK   )r_   splitreverseZ	transposer   lengthtailz<<z>>z<<<z>>>ZconstZregZparseqASSERTZ	undefinederrorZtracec             c   sV   dg}xJt | ||D ]8\}}}|tkrB|| jkrB|tj|fV  q|||fV  qW d S )NrL   )r   get_tokens_unprocessedr   EXTRA_KEYWORDSri   )selftextstackindextokenvaluerm   rm   rn   r     s    z#CryptolLexer.get_tokens_unprocessedN)'rM   rN   rO   rP   rQ   rR   rS   rT   rY   rZ   r   r	   r[   r\   r   r]   r   r^   r_   rb   rc   r
   rd   r   re   rf   rg   rh   r   r`   ri   r   r   rj   rk   rl   setr   r   rm   rm   rm   rn   r   S  s   
















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| d S )N)	baselexerr   __init__)r   r   optionsrm   rm   rn   r     s    zLiterateLexer.__init__c          	   c   s  | j d}|d kr0| dd dkr,dp.d}d}g }|dkrxvt|D ]h}| }| j|}|r|t	|dt
j|dfgf ||d7 }qL|t	|dt|fgf qLW ndd	lm} |f | j }	d}
d}xt|D ]}| }|
r | d
rd}
||7 }n||7 }q| dr^d}
||7 }|t	|t|	|f d}q||7 }qW |t	|t|	|f x"t|| j|D ]}|V  qW 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   itemrm   rm   rn   r     sH    
 



z$LiterateLexer.get_tokens_unprocessedN)	rM   rN   rO   rP   rU   compiler   r   r   rm   rm   rm   rn   r     s   
r   c               @   s2   e Zd ZdZdZdddg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 HaskellZlhszliterate-haskellZlhaskellz*.lhsztext/x-literate-haskellc             K   s   t f |}tj| |f| d S )N)r   r   r   )r   r   hslexerrm   rm   rn   r   /  s    
zLiterateHaskellLexer.__init__N)	rM   rN   rO   rP   rQ   rR   rS   rT   r   rm   rm   rm   rn   r     s   
c               @   s2   e Zd ZdZdZdddg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 IdrisZlidrzliterate-idrisZlidrisz*.lidrztext/x-literate-idrisc             K   s   t f |}tj| |f| d S )N)r   r   r   )r   r   r   rm   rm   rn   r   F  s    
zLiterateIdrisLexer.__init__N)	rM   rN   rO   rP   rQ   rR   rS   rT   r   rm   rm   rm   rn   r   4  s   
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 |}tj| |fddi| d S )Nr   r   )r   r   r   )r   r   Z	agdalexerrm   rm   rn   r   ]  s    
zLiterateAgdaLexer.__init__N)	rM   rN   rO   rP   rQ   rR   rS   rT   r   rm   rm   rm   rn   r   K  s   c               @   s2   e Zd ZdZdZdddg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 CryptolZlcryzliterate-cryptolZlcryptolz*.lcryztext/x-literate-cryptolc             K   s   t f |}tj| |f| d S )N)r   r   r   )r   r   Zcrylexerrm   rm   rn   r   t  s    
zLiterateCryptolLexer.__init__N)	rM   rN   rO   rP   rQ   rR   rS   rT   r   rm   rm   rm   rn   r   b  s   
c            "   @   s  e Zd ZdZdZdgZddgZdgZddd	d
ddddddddddddddddddddddd d!d"d#d$d%d&d'g"Zd
ddddd%gZ	d(d)d*d+gZ
d,d-d.d/d0d1d2d3d4d5d6d7d8gZd9Z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dAeeeedBfdCdDe	 dE eeeed
fdFeeeeejfdGeeeejeeeeejfdHe dI eeeejfdJe dI eeeeejfdCdDe
 e ejfdCdDe e efdCdDe e ejfdKe efdLeejefdMeejefdNe dI eejefdOej fdPe!j"dQfedR e#fdSe#fdTe$fdUe%j&fdVe%j'fdWe%j(fdXe!j)dYfdZe!j"d[fgd\efed
gd]e$d^fed
gd_ed`fedagdbed^fd_ed`fdcefddeeeefedaged=dCdDe
 e efdedDe e df ed^fdge efdhefdOej fdLeejefdieejefdjefe*d^g
dke+j,fdlefdme+j-dnfdoe+j.fgdpe+j-fdme+j-dqfdre+j-d^fdse+j-fgdte!j"fdue!j/fdZe!j"d^fgdve!j"fedwdxe!j"d^fgdye!j)fedwdze!j)d^fgd{e!j/fd|e!j/fd}e!j/fd~e!j/fgdZ0dS )r   zc
    Lexer for the `Koka <http://koka.codeplex.com>`_
    language.

    .. versionadded:: 1.6
    ZKokaZkokaz*.kkz*.kkiztext/x-kokar   r   r   r'   ZcotypeZrectypealiasZstructZconZfunZfunctionvalvarZexternalr    r&   r   elifreturnr   ru   rv   rB   rA   asr   ZinlineZrectryyieldenumZ	interfacer"   r   existsZsomery   forwhilerepeatZforeachzforeach-indexedr   ZcatchfinallyZcsZjsfilerefassignedz[$%&*+@!/\\^~=.:\-?|<>]+z(?!)z	(?![\w/])
whitespacez::?z(alias)(\s+)([a-z]\w*)?z
alias-typez(struct)(\s+)([a-z]\w*)?zstruct-typez(%s)rC   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]+rD   charrF   rG   =z(?=\((?!,*\)))z#popz[(\[<]ztype-nestedztype-contentz[)\]>]rJ   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*#.*$z\s+z/\*r@   z//.*$z[^/*]+z#pushz\*/z[*/]z[^"]+z""z	[^\\"\n]+z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})rL   z
alias-typezstruct-typer'   ztype-nestedztype-contentr   r@   r   rG   r   zescape-sequenceN)1rM   rN   rO   rP   rQ   rR   rS   rT   keywordsZtypeStartKeywordsZtypekeywordsZbuiltinZsymbolsZ	sboundaryboundaryr   Z	AttributeZ	tokenTypeZClassZtokenTypeDefr   ZEmphZtokenConstructorr   r   r   r   r_   rj   rb   rc   ZPseudoZVariabler   Doubler
   r   r   re   rg   rh   r`   r   r	   ZPreprocr\   r[   rk   rl   rm   rm   rm   rn   r   y  s   













)#rP   rU   Zpygments.lexerr   r   r   r   r   r   Zpygments.tokenr   r	   r
   r   r   r   r   r   r   Zpygmentsr   ra   __all__r   r   r   r   r   r   r   r   r   r   r   r   rm   rm   rm   rn   <module>
   s(    ,
 nE 
A