U
    luf;                     @   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 ddd	d
ddg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-2023 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flags	timestampr	   r   ZPreprocr   Tagr   r   ZInsertedr   r   	Attributetokens r-   r-   </tmp/pip-unpacked-wheel-7eq1ciah/pygments/lexers/textfmts.pyr      s2   
 

c                   @   s   e Zd ZdZdZddgZddgZddd	g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*.poz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PropertyVariabler   r   Integerr,   r-   r-   r-   r.   r   V   s*   
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stackr-   r-   r.   r7   ~   s    z HttpLexer.get_tokens_unprocessedc                 c   s   | d dkrD| d }d|k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findr6   startr   r+   r   r
   r   )r8   matchr6   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 )Nr;   r>   r?   )rF   r   rB   r   )r8   rG   r-   r-   r.   continuous_header_callback   s    z$HttpLexer.continuous_header_callbackc              	   c   s   t | dd }| }| }|rddlm} |g}d|krRtdd|}|| |D ]R}z||}	W n tk
rz   Y qVX |		|D ]\}
}}||
 ||fV  q d S qV|t
|fV  d S )Nr6   r   )get_lexer_for_mimetype+z^(.*)/.*\+(.*)$z\1/\2)getattrrB   rF   pygments.lexersrJ   r%   subappendr   r7   r   )r8   rG   r6   contentoffsetrJ   Zpossible_lexer_mimetypesZgeneral_typeilexeridxtokenvaluer-   r-   r.   content_callback   s(    
zHttpLexer.content_callbackzL([a-zA-Z][-_a-zA-Z]+)( +)([^ ]+)( +)(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?\nrP   z.+)r   rX   rP   c                    s   t  fdddD S )Nc                 3   s   | ]}t | d k	V  qd S )N)r%   search).0patternr9   r-   r.   	<genexpr>   s   z)HttpLexer.analyse_text.<locals>.<genexpr>)zM^([a-zA-Z][-_a-zA-Z]+)( +)([^ ]+)( +)(HTTP)(/)(1\.[01]|2(?:\.0)?|3)(\r?\n|\Z)zG^(HTTP)(/)(1\.[01]|2(?:\.0)?|3)( +)(\d{3})(?:( +)([^\r\n]*))?(\r?\n|\Z))anyr\   r-   r\   r.   analyse_text   s    zHttpLexer.analyse_textN)r5   )r   r   r   r    r!   r"   r%   DOTALLr(   r7   rH   rI   rW   r   r   ZFunctionr   	Namespacer   ZReservedr
   r   	Exceptionr,   r_   r-   r-   r-   r.   r   r   sB   
    c                
   @   s.  e Zd 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   zI
    Lexer for Todo.txt todo list format.

    .. versionadded:: 2.0
    ZTodotxtzhttp://todotxt.com/Z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   re   rf   N)r   r   r   r    r!   urlr"   r#   r$   r
   ZCompleteTaskTextr   ZIncompleteTaskTextr   ZHeadingZPriorityZ
SubheadingDateErrorZProjectr   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      sl    
c                   @   s.  e Zd 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   a  
    For Notmuch 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https://notmuchmail.org/Znotmuchc                 c   s^   | d}z"| jrt| j}nt| }W n tk
rH   td}Y nX ||E d H  d S )Nr;   r9   )rB   
body_lexerr   r   rD   r   r7   )r8   rG   coderS   r-   r-   r.   _highlight_codeD  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*)rr   	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#pushrs   z^Non-text part: .*\nz&(?s)(.*?(?=\f(?:part|attachment)\}\n)))r   ro   rn   rp   rq   rs   rr   c                 C   s   |  drdS dS )Nz	message{g      ?g        )
startswithr\   r-   r-   r.   r_   ~  s    zNotmuchLexer.analyse_textc                 K   s    | dd | _tj| f| d S )Nrk   )getrk   r   __init__)r8   optionsr-   r-   r.   rv     s    zNotmuchLexer.__init__N)r   r   r   r    r!   rg   r"   rm   r   r   r   r+   r   r   r2   r   r   Strongr   r*   r   r	   r,   r_   rv   r-   r-   r-   r.   r   3  sb   
	
	-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   r}   r~   ry   rz   r{   r|   N)r   r   r   r    r!   r"   r#   r   r   r   r   r   r	   r   rx   ri   r,   r-   r-   r-   r.   r     sB   


)r    r%   rM   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 ?\eS