a
    ÛËU_N;  ã                   @   sÜ   d Z ddlZddlmZmZ ddl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mZ ddlmZ g 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dS )zÕ
    pygments.lexers.textfmts
    ~~~~~~~~~~~~~~~~~~~~~~~~

    Lexers for various text formats.

    :copyright: Copyright 2006-2020 by the Pygments team, see AUTHORS.
    :license: BSD, see LICENSE for details.
é    N)Úguess_lexerÚget_lexer_by_name)Ú
RegexLexerÚbygroupsÚdefaultÚinclude)
ÚTextÚCommentÚOperatorÚKeywordÚNameÚStringÚNumberÚGenericÚLiteralÚPunctuation)ÚClassNotFound)ÚIrcLogsLexerÚTodotxtLexerÚ	HttpLexerÚGettextLexerÚNotmuchLexerÚKernelLogLexerc                
   @   sÂ   e Zd ZdZdZdgZdgZdgZej	ej
B ZdZdefde d	 eejejƒfde d
 eejejƒdfde d eejeejƒfde d eejeeeƒfdefgdejfdedfgdœZdS )r   zD
    Lexer for IRC logs in *irssi*, *xchat* or *weechat* style.
    zIRC logsZircz*.weechatlogztext/x-irclogaf  
        (
          # irssi / xchat and others
          (?: \[|\()?                  # Opening bracket or paren for the timestamp
            (?:                        # Timestamp
                (?: (?:\d{1,4} [-/])*  # Date as - or /-separated groups of digits
                    (?:\d{1,4})
                 [T ])?                # Date/time separator: T or space
                (?: \d?\d [:.])*       # Time as :/.-separated groups of 1 or 2 digits
                    (?: \d?\d)
            )
          (?: \]|\))?\s+               # Closing bracket or paren for the timestamp
        |
          # weechat
          \d{4}\s\w{3}\s\d{2}\s        # Date
          \d{2}:\d{2}:\d{2}\s+         # Time + Whitespace
        |
          # xchat
          \w{3}\s\d{2}\s               # Date
          \d{2}:\d{2}:\d{2}\s+         # Time + Whitespace
        )?
    z^\*\*\*\*(.*)\*\*\*\*$ú^z(\s*<[^>]*>\s*)$z/
                (\s*<.*?>\s*)          # Nick Úmsgzo
                (\s*[*]\s+)            # Star
                (\S+\s+.*?\n)          # Nick + rest of message zÅ
                (\s*(?:\*{3}|<?-[!@=P]?->?)\s*)  # Star(s) or symbols
                (\S+\s+)                     # Nick + Space
                (.*?\n)                         # Rest of message z^.*?\nz
\S+:(?!//)z.*\nú#pop)Úrootr   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚnameÚaliasesÚ	filenamesÚ	mimetypesÚreÚVERBOSEÚ	MULTILINEÚflagsZ	timestampr	   r   ZPreprocr   ÚTagr   r   ZInsertedr   r   Ú	AttributeÚtokens© r,   r,   ú:/usr/lib/python3/dist-packages/pygments/lexers/textfmts.pyr      s0   
þ
ý
üìþér   c                   @   sŠ   e Zd ZdZdZddgZddgZg d¢Zdd	ej	fd
ej
fdejfdeeejeƒfdefdeejeeƒfdeejejejeeƒfgiZdS )r   zE
    Lexer for Gettext catalog files.

    .. versionadded:: 0.9
    zGettext CatalogZpotZpoz*.potz*.po)zapplication/x-gettextztext/x-gettextztext/gettextr   z	^#,\s.*?$z	^#:\s.*?$z^(#|#\.\s|#\|\s|#~\s|#\s).*$z^(")([A-Za-z-]+:)(.*")$z^".*"$z0^(msgid|msgid_plural|msgstr|msgctxt)(\s+)(".*")$z^(msgstr\[)(\d)(\])(\s+)(".*")$N)r   r   r   r    r!   r"   r#   r$   r   ÚTypeZDeclarationr	   ÚSingler   r   r   ZPropertyZVariabler   r   ÚIntegerr+   r,   r,   r,   r-   r   W   s*   ÿÿÿöÿr   c                   @   s®   e Zd ZdZdZdgZejZddd„Z	dd„ Z
d	d
„ Zdd„ Zdeejeejeejeeeƒdfdeejeeeeeejeƒdfgde
fdefdedfgdefgdœZdd„ ZdS )r   z=
    Lexer for HTTP sessions.

    .. versionadded:: 1.5
    ZHTTPZhttp©r   c                 C   s   d| _ t | ||¡S )zReset the content-type state.N)Úcontent_typer   Úget_tokens_unprocessed)ÚselfÚtextÚstackr,   r,   r-   r3      s    z HttpLexer.get_tokens_unprocessedc                 c   sÚ   |  d¡ ¡ dkrD|  d¡ ¡ }d|v r>|d | d¡…  ¡ }|| _| d¡tj|  d¡fV  | d¡t|  d¡fV  | d¡t	|  d¡fV  | d¡t|  d¡fV  | d¡t
|  d¡fV  | d¡t|  d¡fV  d S )	Né   zcontent-typeé   ú;é   é   é   é   )ÚgroupÚlowerÚstripÚfindr2   Ústartr   r*   r   r
   r   )r4   Úmatchr2   r,   r,   r-   Úheader_callback„   s    zHttpLexer.header_callbackc                 c   sL   |  d¡t| d¡fV  |  d¡t| d¡fV  |  d¡t| d¡fV  d S )Nr7   r:   r;   )rB   r   r>   r   )r4   rC   r,   r,   r-   Úcontinuous_header_callback‘   s    z$HttpLexer.continuous_header_callbackc              	   c   s¸   t | dd ƒ}| ¡ }| ¡ }|r¨ddlm} |g}d|v rRt dd|¡}| |¡ |D ]P}z||ƒ}	W n tyx   Y qV0 |	 	|¡D ]\}
}}||
 ||fV  q„ d S qV|t
|fV  d S )Nr2   r   )Úget_lexer_for_mimetypeú+z^(.*)/.*\+(.*)$z\1/\2)Úgetattrr>   rB   Úpygments.lexersrF   r%   ÚsubÚappendr   r3   r   )r4   rC   r2   ÚcontentÚoffsetrF   Zpossible_lexer_mimetypesZgeneral_typeÚiÚlexerÚidxÚtokenÚvaluer,   r,   r-   Úcontent_callback–   s(    ÿ
zHttpLexer.content_callbackze(GET|POST|PUT|DELETE|HEAD|OPTIONS|TRACE|PATCH)( +)([^ ]+)( +)(HTTP)(/)(1\.[01]|2(?:\.0)?|3)(\r?\n|\Z)ÚheaderszF(HTTP)(/)(1\.[01]|2(?:\.0)?|3)( +)(\d{3})(?:( +)([^\r\n]*))?(\r?\n|\Z)z(([^\s:]+)( *)(:)( *)([^\r\n]+)(\r?\n|\Z)z([\t ]+)([^\r\n]+)(\r?\n|\Z)z\r?\nrL   z.+)r   rT   rL   c                 C   s
   |   d¡S )N)zGET /zPOST /zPUT /zDELETE /zHEAD /z	OPTIONS /zTRACE /zPATCH /©Ú
startswith©r5   r,   r,   r-   Úanalyse_textÅ   s    zHttpLexer.analyse_textN)r1   )r   r   r   r    r!   r"   r%   ÚDOTALLr(   r3   rD   rE   rS   r   r   ZFunctionr   Z	Namespacer   ZReservedr
   r   Ú	Exceptionr+   rX   r,   r,   r,   r-   r   s   s:   

ÿüÿýúýÿïr   c                
   @   s*  e Zd ZdZdZdgZddgZdgZeZ	e
ZejZejZejZeZdZdZd	Zd
Zde d Zed e d Zde d e d Zeee	ee	eƒdfeee	eƒdfeeeeeƒdfeedfeedfeedfeedfdedfgde	dfeefeefde	fde	fgdedfeefeefdefdefgdœZdS )r   zb
    Lexer for `Todo.txt <http://todotxt.com/>`_ todo list format.

    .. versionadded:: 2.0
    ZTodotxtZtodotxtztodo.txtz	*.todotxtztext/x-todoz\d{4,}-\d{2}-\d{2}z	\([A-Z]\)z\+\S+z@\S+z(x )(ú)z( )(ú(z)( )(ÚcompleteÚ
incompletez\S+z\s*\nr   z\s+)r   r]   r^   N)r   r   r   r    r!   r"   r#   r$   r
   ZCompleteTaskTextr   ZIncompleteTaskTextr   ZHeadingZPriorityZ
SubheadingZDateÚErrorZProjectr   ZContextZ
date_regexZpriority_regexZproject_regexZcontext_regexZcomplete_one_date_regexZcomplete_two_date_regexZpriority_date_regexr   r+   r,   r,   r,   r-   r   Ê   sh   ÿÿÿþ
ÿÿé÷÷Ör   c                   @   s*  e Zd ZdZdZdgZdd„ Zdedfgdee	j
eƒfd	ee	j
ejƒfd
ee	j
eƒfedƒgdedfdedfdedfgdedfdee	j
eƒfdeejee	jƒfgdedfdedfdedfgdee	j
ejƒfdeee	j
eƒfdeee	j
eƒfedƒgdedfdedfdefd efgd!œZd"d#„ Zd$d%„ Zd&S )'r   a5  
    For `Notmuch <https://notmuchmail.org/>`_ email text format.

    .. versionadded:: 2.5

    Additional options accepted:

    `body_lexer`
        If given, highlight the contents of the message body with the specified
        lexer, else guess it according to the body content (default: ``None``).
    ZNotmuchZnotmuchc                 c   s\   |  d¡}z"| jrt| jƒ}nt| ¡ ƒ}W n tyF   tdƒ}Y n0 | |¡E d H  d S )Nr7   r5   )r>   Ú
body_lexerr   r   r@   r   r3   )r4   rC   ÚcoderO   r,   r,   r-   Ú_highlight_code>  s    
zNotmuchLexer._highlight_codez\fmessage\{\s*)Úmessageúmessage-attrz(\s*id:\s*)(\S+)z&(\s*(?:depth|match|excluded):\s*)(\d+)z(\s*filename:\s*)(.+\n)r   z\fmessage\}\nz\fheader\{\nÚheaderz
\fbody\{\nÚbodyz\fheader\}\nz'((?:Subject|From|To|Cc|Date):\s*)(.*\n)z(.*)(\s*\(.*\))(\s*\(.*\)\n)z
\fpart\{\nÚpartz\f(part|attachment)\{\s*)rg   ú	part-attrz
\fbody\}\nz(ID:\s*)(\d+)z*(,\s*)((?:Filename|Content-id):\s*)([^,]+)z(,\s*)(Content-type:\s*)(.+\n)z\f(?:part|attachment)\}\nz\f(?:part|attachment)\{\s*)z#pushrh   z^Non-text part: .*\nz&(?s)(.*?(?=\f(?:part|attachment)\}\n)))r   rd   rc   re   rf   rh   rg   c                 C   s   |   d¡rdS dS )Nz	message{g      ð?g        rU   rW   r,   r,   r-   rX   x  s    zNotmuchLexer.analyse_textc                 K   s$   |  dd ¡| _tj| fi |¤Ž d S )Nr`   )Úgetr`   r   Ú__init__)r4   Zoptionsr,   r,   r-   rj   {  s    zNotmuchLexer.__init__N)r   r   r   r    r!   r"   rb   r   r   r   r*   r   r   r0   r   r   ÚStrongr   r)   r   r	   r+   rX   rj   r,   r,   r,   r-   r   .  s`   ÿÿ
ÿú	ý
ÿÿüýÿÿú	üÛ-r   c                
   @   sÖ   e Zd ZdZdZddgZddgZdedfd	ed
fdedfdedfdedfdedfdedfgdedfdedfed
ƒgde	fde
fdedfgedƒdedfgedƒdedfgedƒdejdfgedƒdejdfgdœZdS )r   zK
    For Linux Kernel log ("dmesg") output.

    .. versionadded:: 2.6
    z
Kernel logZkmsgZdmesgz*.kmsgz*.dmesgz^[^:]+:debug : (?=\[)Údebugz^[^:]+:info  : (?=\[)Úinfoz^[^:]+:warn  : (?=\[)Úwarnz^[^:]+:notice: (?=\[)z^[^:]+:err   : (?=\[)Úerrorz^[^:]+:crit  : (?=\[)z^(?=\[)Úunknownz(^(?=.+(warning|notice|audit|deprecated))z ^(?=.+(error|critical|fail|Bug))z\[[0-9. ]+\] z(?<=\] ).+?:z\nr   Úbasez.+\n)r   rp   rq   rl   rm   rn   ro   N)r   r   r   r    r!   r"   r#   r   r   r   r   r   r	   r   rk   r_   r+   r,   r,   r,   r-   r   €  sB   ù
ýýþþ
þ
þàr   )r    r%   rI   r   r   Zpygments.lexerr   r   r   r   Zpygments.tokenr   r	   r
   r   r   r   r   r   r   r   Zpygments.utilr   Ú__all__r   r   r   r   r   r   r,   r,   r,   r-   Ú<module>   s   
0?WdR