o
    ‡ÎÖa6;  ã                   @   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-2021 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 logsÚ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ÚflagsÚ	timestampr	   r   ÚPreprocr   ÚTagr   r   ÚInsertedr   r   Ú	AttributeÚtokens© r0   r0   ú:/usr/lib/python3/dist-packages/pygments/lexers/textfmts.pyr      s2    
þ
ý
üìþ
é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 CatalogÚpotÚ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   ÚTypeÚDeclarationr	   ÚSingler   r   r   ÚPropertyÚVariabler   r   ÚIntegerr/   r0   r0   r0   r1   r   V   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
    ÚHTTPÚhttp©r   c                 C   s   d| _ t | ||¡S )zReset the content-type state.N)Úcontent_typer   Úget_tokens_unprocessed)ÚselfÚtextÚstackr0   r0   r1   r>   ~   s   z HttpLexer.get_tokens_unprocessedc                 c   sÜ   � |  d¡ ¡ dkr#|  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Úfindr=   Ústartr   r.   r   r
   r   )r?   Úmatchr=   r0   r0   r1   Úheader_callbackƒ   s   €zHttpLexer.header_callbackc                 c   sN   � |  d¡t| d¡fV  |  d¡t| d¡fV  |  d¡t| d¡fV  d S )NrB   rE   rF   )rM   r   rI   r   )r?   rN   r0   r0   r1   Úcontinuous_header_callback�   s   €z$HttpLexer.continuous_header_callbackc              	   c   s¸   � t | dd ƒ}| ¡ }| ¡ }|rTddlm} |g}d|v r*t dd|¡}| |¡ |D ]'}z||ƒ}	W n	 ty=   Y q,w |	 	|¡D ]\}
}}||
 ||fV  qC d S |t
|fV  d S )Nr=   r   )Úget_lexer_for_mimetypeú+z^(.*)/.*\+(.*)$z\1/\2)ÚgetattrrI   rM   Úpygments.lexersrQ   r&   ÚsubÚappendr   r>   r   )r?   rN   r=   ÚcontentÚoffsetrQ   Úpossible_lexer_mimetypesÚgeneral_typeÚiÚlexerÚidxÚtokenÚvaluer0   r0   r1   Ú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?\nrW   z.+)r   ra   rW   c                 C   s
   |   d¡S )N)zGET /zPOST /zPUT /zDELETE /zHEAD /z	OPTIONS /zTRACE /zPATCH /©Ú
startswith©r@   r0   r0   r1   Úanalyse_textÄ   s   
zHttpLexer.analyse_textN)r<   )r   r   r    r!   r"   r#   r&   ÚDOTALLr)   r>   rO   rP   r`   r   r   ÚFunctionr   Ú	Namespacer   ÚReservedr
   r   Ú	Exceptionr/   re   r0   r0   r0   r1   r   r   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
    ÚTodotxtÚ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   ro   rp   N)r   r   r    r!   r"   r#   r$   r%   r
   ÚCompleteTaskTextr   ÚIncompleteTaskTextr   ÚHeadingÚPriorityÚ
SubheadingÚDateÚErrorÚProjectr   ÚContextÚ
date_regexÚpriority_regexÚproject_regexÚcontext_regexÚcomplete_one_date_regexÚcomplete_two_date_regexÚpriority_date_regexr   r/   r0   r0   r0   r1   r   É   sj    ÿÿÿþ
ÿÿé÷÷
Ö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``).
    ÚNotmuchÚnotmuchc                 c   s^   � |  d¡}z| jrt| jƒ}nt| ¡ ƒ}W n ty$   tdƒ}Y nw | |¡E d H  d S )NrB   r@   )rI   Ú
body_lexerr   r   rK   r   r>   )r?   rN   Úcoder\   r0   r0   r1   Ú_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*)rŠ   ú	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#pushr‹   z^Non-text part: .*\nz&(?s)(.*?(?=\f(?:part|attachment)\}\n)))r   r‡   r†   rˆ   r‰   r‹   rŠ   c                 C   s   |   d¡rdS dS )Nz	message{g      ð?g        rb   rd   r0   r0   r1   re   w  s   zNotmuchLexer.analyse_textc                 K   s$   |  dd ¡| _tj| fi |¤Ž d S )Nrƒ   )Úgetrƒ   r   Ú__init__)r?   Úoptionsr0   r0   r1   r�   z  s   zNotmuchLexer.__init__N)r   r   r    r!   r"   r#   r…   r   r   r   r.   r   r   r9   r   r   ÚStrongr   r,   r   r	   r/   re   r�   r0   r0   r0   r1   r   -  sb    ÿÿ
ÿú	ý
ÿÿüýÿÿú	üÛ-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 logÚkmsgÚ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   r–   r—   r’   r“   r”   r•   N)r   r   r    r!   r"   r#   r$   r   r   r   r   r   r	   r   r�   rw   r/   r0   r0   r0   r1   r     sD    ù
ýýþþ
þ
þ
àr   )r!   r&   rT   r   r   Úpygments.lexerr   r   r   r   Úpygments.tokenr   r	   r
   r   r   r   r   r   r   r   Úpygments.utilr   Ú__all__r   r   r   r   r   r   r0   r0   r0   r1   Ú<module>   s    
0?WdR