
    |e;                         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	e      Z G d
 de      Z G d de      Z G d de      Z G d de      Z G d de      Zy)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                      e Zd ZdZdZdgZdgZdgZej                  ej                  z  ZdZdefdez   d	z    eej                  ej"                        fdez   d
z    eej                  ej"                        dfdez   dz    eej                  eej(                        fdez   dz    eej                  eee      fdefgdej.                  fdedfgdZy)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     :/usr/lib/python3/dist-packages/pygments/lexers/textfmts.pyr   r      s(    DgG I !IJJ%EI2 '09_22HW__dhh4WX9_  2 2gootxx0%9 9_  D D goow0@0@AC
 9_  F F goow@	B
 )
. DNN+dF#
/Fr3   r   c                   2   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y)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   Integerr1   r2   r3   r4   r   r   V   s    
 DdmG&!IKI 	7<<(7../,gnn='fdmmV46@dmmT624/dmmV^^T]]D&QS
Fr3   r   c                       e Zd ZdZdZdgZej                  ZddZ	d Z
d Z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 Zy)r   z=
    Lexer for HTTP sessions.

    .. versionadded:: 1.5
    HTTPhttpc                 >    d| _         t        j                  | ||      S )zReset the content-type state.N)content_typer   get_tokens_unprocessed)selftextstacks      r4   rC   z HttpLexer.get_tokens_unprocessed~   s     00tUCCr3   c              #     K   |j                  d      j                         dk(  rL|j                  d      j                         }d|v r"|d |j                  d       j                         }|| _        |j                  d      t        j                  |j                  d      f |j                  d      t        |j                  d      f |j                  d      t        |j                  d      f |j                  d      t        |j                  d      f |j                  d      t        |j                  d      f |j                  d      t        |j                  d      f y w)	N   zcontent-type   ;            )grouplowerstripfindrB   startr   r0   r	   r   r   )rD   matchrB   s      r4   header_callbackzHttpLexer.header_callback   s    ;;q>!^3 ;;q>//1Ll"+,C\->->s-CDJJL ,Dkk!ndnnekk!n<<kk!ndEKKN22kk!nhA66kk!ndEKKN22kk!ngu{{1~55kk!ndEKKN22s   E0E2c              #     K   |j                  d      t        |j                  d      f |j                  d      t        |j                  d      f |j                  d      t        |j                  d      f y w)NrH   rK   rL   )rS   r	   rO   r   )rD   rT   s     r4   continuous_header_callbackz$HttpLexer.continuous_header_callback   s]     kk!ndEKKN22kk!ngu{{1~55kk!ndEKKN22s   A=A?c              #   r  K   t        | dd       }|j                         }|j                         }|rjddlm} |g}d|v r(t        j                  dd|      }|j                  |       |D ]0  }	  ||      }	|	j                  |      D ]  \  }
}}||
z   ||f   y  |t        |f y # t        $ r Y Jw xY ww)NrB   r   )get_lexer_for_mimetype+z^(.*)/.*\+(.*)$z\1/\2)getattrrO   rS   pygments.lexersrY   r(   subappendrC   r   r	   )rD   rT   rB   contentoffsetrY   possible_lexer_mimetypesgeneral_typeilexeridxtokenvalues                r4   content_callbackzHttpLexer.content_callback   s     t^T:++->(4~$l"  "vv&8(&2 4(//=- 215E .3-I-I'-R 9)UE$slE5889 dG## % s*   A*B7-B(53B7(	B41B73B44B7zL([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?\nr_   z.+)r   ri   r_   c                 ,     t         fddD              S )Nc              3   N   K   | ]  }t        j                  |      d u  y w)N)r(   search).0patternrE   s     r4   	<genexpr>z)HttpLexer.analyse_text.<locals>.<genexpr>   s)      
 IIgt$D0
s   "%)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))anyrE   s   `r4   analyse_textzHttpLexer.analyse_text   s     

 
 	
r3   N))r   )r    r!   r"   r#   r$   r%   r(   DOTALLr+   rC   rU   rW   rh   r   r   Functionr	   	Namespacer   Reservedr   r   	Exceptionr1   rr   r2   r3   r4   r   r   r   s     DhGIIED
33
$69dmmT4>>4&&&$@	
 Wg&&&$nnd,

 9/J,.HItY'
 $%
#F,
r3   r   c            
          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z   dz   Zedz   ez   dz   Zdez   dz   ez   dz   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y)r   zI
    Lexer for Todo.txt todo list format.

    .. versionadded:: 2.0
    Todotxtzhttp://todotxt.com/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$   urlr%   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   r1   r2   r3   r4   r   r      s    D
CkG [)II   HD mmGG 'J!NMM '3d:6@) *,0 1/(:ZG$N %h/?/?'G %h/?&F
 !(85G"N X|4|,G\2G\2'6/
: '0G$G$%&%&

 )62G$G$'('(

U5Fr3   r   c                   >   e Zd ZdZdZdZdgZ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" Zd# Zy$)%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``).
    Notmuchzhttps://notmuchmail.org/notmuchc              #     K   |j                  d      }	 | j                  rt        | j                        }nt        |j	                               }|j                  |      E d {    y # t
        $ r t        d      }Y 0w xY w7 w)NrH   rE   )rO   
body_lexerr   r   rQ   r   rC   )rD   rT   coderd   s       r4   _highlight_codezNotmuchLexer._highlight_codeD  ss     {{1~	.)$//:#DJJL1 //555  	.%f-E	. 	6s4   B;A* B$B%B*B>B BBz\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                 ,    | j                  d      rdS dS )Nz	message{g      ?g        )
startswithrq   s    r4   rr   zNotmuchLexer.analyse_text~  s    ool3s<<r3   c                 ^    |j                  dd       | _        t        j                  | fi | y )Nr   )getr   r   __init__)rD   optionss     r4   r   zNotmuchLexer.__init__  s'    !++lD9D,G,r3   N)r    r!   r"   r#   r$   r   r%   r   r   r   r   r0   r   r   r=   r   r   Strongr   r.   r   r
   r1   rr   r   r2   r3   r4   r   r   3  s   
 D
$CkG6 )DE
 !(4>>6"BC6dnnfnn57'dnnf-/FO
 w/gx0GV,
 gv.7dnnf-/,gnngtxx8:	
 GV,('3HIGV,
 xGH:k4>>6:<.k4>>6:<FO
 *7F;*G5KL$g.6H	
K+FZ=-r3   r   c            
       "   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y)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   r   r1   r2   r3   r4   r   r     s"   
 DwG9%I &tW5%tV4%tV4%tV4%tW5%tW5y)
 9$G0$@FO
 v&g&D&!
 FOgv&

 FOdF#

 FOgnnf-

 FOgmmV,
A$Fr3   r   )r#   r(   r\   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   r2   r3   r4   <module>r      s    
 : A A* * * '-<: <~: 8Y

 Y
xb: bJP-: P-f.Z .r3   