U
    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in
infix[lr]?instanceletnewtypeofthentypewhere_ZNULZSOHz[SE]TXZEOTZENQZACKZBELZBSZHTZLFZ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(')\([^)]*\)\\(?![:!#$%&*+.\\/<=>?@^|~-]+)+(<-|::|->|=>|=)(?![:!#$%&*+.\\/<=>?@^|~-]+):[:!#$%&*+.\\/<=>?@^|~-]*[:!#$%&*+.\\/<=>?@^|~-]+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\']*),\(rE   rE   #pop:2[^-{}]+#push-\}[-{}][^\\']'\\escape[^\\"]+[abfnrtv"\'&\\]z\^[][z@^_]o[0-7]+x[\da-fA-F]+\d+\s+\\rootr1   r3   rE   r/   r<   r>   rR   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   



+   
 


	








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!   r"   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trivialr+   )liblinkflagr   ZhideZfreezeaccessr   ZloggingZdynamicr_   Zerror_handlersZlanguagez^(\s*)(%%%s)r6   z((\s*)(--(?![!#$%&*+./<=>?@^|_~:\\]).*?)$z(\s*)(\|{3}.*?)$z
(\s*)(\{-)r/   ^(\s*)([^\s(){}]+)(\s*)(:)(\s*)r5   (import|module)(\s+)r3   ('')?[A-Z][\w\']*z[a-z][\w\']*z(<-|::|->|=>|=)z"([(){}\[\]:!#$%&*+.\\/<=>?@^|~-]+)\d+[eE][+-]?\d+\d+\.\d+([eE][+-]?\d+)?0[xX][\da-fA-F]+rW   r;   r<   r=   r>   
[^\s(){}]+\s+?r,   ([A-Z][\w.]*)(\s+)(\()rE   [A-Z][\w.]*rC   [A-Z]\w*(_[\w\']+|[a-z][\w\']*)z--.*$r.   rH   r:   rI   rJ   rB   rK   rL   rM   rN   rO   z[^\\']rQ   rR   rS   rT   \^[][A-Z@^_]rU   rV   rX   )rZ   r3   rE   r/   r<   r>   rR   N)"r[   r\   r]   r^   r_   r`   ra   rb   rg   rh   Z
directivesrm   r   r   r   rk   r	   ri   rj   r   rp   r
   rr   rq   r   rs   ru   rv   r   rn   rx   r   ry   rz   r{   r{   r{   r|   r      s   	

 



	








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-agdar   r   Zcoinductiveconstructorr   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   r-   r.   r/   z\{!holer5   r6   r   r3   z\b(Set|Prop)\bz(\(|\)|\{|\})u   (\.{1,3}|\||Λ|∀|→|:|=|->)r   r   r   rW   r;   r<   r=   r>   r   r   z[^!{}]+rM   z!\}rC   z[!{}]z[a-zA-Z][\w.]*z	[\W0-9_]+rR   )rZ   r   r3   r/   r<   r>   rR   N)r[   r\   r]   r^   r_   r`   ra   rb   rg   r   r   r   rp   r
   rr   r	   ri   rj   Z	Directiverm   r   rk   rq   r   rs   ru   rv   r   rn   r   rz   r{   r{   r{   r|   r     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	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    r1   infZlg2maxminr3   r%   Zpragmapropertyr'   r(   r)   widthr+   r,   //.*$/\*r/   r0   r1   r2   r3   r4   r5   r6   z^[_a-z][\w\']*z'?[_a-z][\w']*r   r7   r8   r9   r:   r   r   z0[oO][0-7]+r   rW   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   z(([A-Z][\w.]*)(\s+)(as)(\s+)([A-Z][\w.]*)z#([A-Z][\w.]*)(\s+)(hiding)(\s+)(\()rE   r   rF   r   r   r   rH   rI   rJ   rK   [^/*]+rM   \*/[*/]rP   rQ   rR   rS   rT   r   rU   rV   rX   rY   )rm   splitreverseZ	transposer   Zlengthtailz<<z>>z<<<z>>>ZconstZregZparseqASSERTZ	undefinederrorZtracec                 c   sR   dg}t | ||D ]8\}}}|tkr@|| jkr@|tj|fV  q|||fV  qd S )NrZ   )r   get_tokens_unprocessedr   EXTRA_KEYWORDSrw   )selftextstackindextokenvaluer{   r{   r|   r     s    z#CryptolLexer.get_tokens_unprocessedN)'r[   r\   r]   r^   r_   r`   ra   rb   rg   rh   r   r	   ri   rj   r   rk   r   rl   rm   rp   rq   r
   rr   r   rs   rt   ru   rv   r   rn   rw   r   r   rx   ry   rz   setr   r   r{   r{   r{   r|   r   S  s   



$   
 


	









f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   optionsr{   r{   r|   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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 | j }	d}
d}t|D ]}| }|
r| d
rd}
||7 }n||7 }q| drXd}
||7 }|t	|t|	|f d}q||7 }q|t	|t|	|f t|| j|D ]}|V  qd 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   itemr{   r{   r|   r     sN    





z$LiterateLexer.get_tokens_unprocessedN)	r[   r\   r]   r^   rc   compiler   r   r   r{   r{   r{   r|   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 r   )r   r   r   r   r   Zhslexerr{   r{   r|   r   /  s    
zLiterateHaskellLexer.__init__N	r[   r\   r]   r^   r_   r`   ra   rb   r   r{   r{   r{   r|   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 r   )r   r   r   r   r{   r{   r|   r   F  s    
zLiterateIdrisLexer.__init__Nr   r{   r{   r{   r|   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	agdalexerr{   r{   r|   r   ]  s    
zLiterateAgdaLexer.__init__Nr   r{   r{   r{   r|   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 r   )r   r   r   )r   r   Zcrylexerr{   r{   r|   r   t  s    
zLiterateCryptolLexer.__init__Nr   r{   r{   r{   r|   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   r   r   r3   r1   asr   ZinlineZrectryyieldenumZ	interfacer#   r   existsZsomer   forwhilerepeatZforeachzforeach-indexedr   ZcatchfinallyZcsZjsfilerefassignedz[$%&*+@!/\\^~=.:\-?|<>]+z(?!)z	(?![\w/])
whitespacez::?z(alias)(\s+)([a-z]\w*)?
alias-typez(struct)(\s+)([a-z]\w*)?struct-typez(%s)r6   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=   r>   =z(?=\((?!,*\)))rC   z[(\[<]type-nestedtype-contentz[)\]>]rH   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   r/   r   r   rM   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})rZ   r   r   r(   r   r   r   r/   r   r>   r   r   N)1r[   r\   r]   r^   r_   r`   ra   rb   keywordsZtypeStartKeywordsZtypekeywordsZbuiltinZsymbolsZ	sboundaryboundaryr   Z	AttributeZ	tokenTypeZClassZtokenTypeDefr   ZEmphZtokenConstructorr   r   r   r   rm   rx   rp   rq   ZPseudoZVariabler   Doubler
   r   r   rs   ru   rv   rn   r   r	   ZPreprocrj   ri   ry   rz   r{   r{   r{   r|   r   y  s                                         
 







?
 








 )#r^   rc   Zpygments.lexerr   r   r   r   r   r   Zpygments.tokenr   r	   r
   r   r   r   r   r   r   Zpygmentsr   ro   __all__r   r   r   r   r   r   r   r   r   r   r   r   r{   r{   r{   r|   <module>   s0   
 ,   
 nE 
A