|erxdZddlZddlmZmZddlmZddlmZm Z m Z m Z m Z m Z ddlmZmZdgZGddeZy) z pygments.lexers.mime ~~~~~~~~~~~~~~~~~~~~ Lexer for Multipurpose Internet Mail Extensions (MIME) data. :copyright: Copyright 2006-2023 by the Pygments team, see AUTHORS. :license: BSD, see LICENSE for details. N) RegexLexerinclude)get_lexer_for_mimetype)TextNameStringOperatorCommentOther) get_int_opt ClassNotFound MIMELexerceZdZdZdZdgZgdZfdZdZdZ dZ d Z d Z d Z d d hZdefde fgdej fdej dfgedde fde fdedfgedde fgdZxZS)ra_ Lexer for Multipurpose Internet Mail Extensions (MIME) data. This lexer is designed to process nested multipart data. It assumes that the given data contains both header and body (and is split at an empty line). If no valid header is found, then the entire data will be treated as body. Additional options accepted: `MIME-max-level` Max recursion level for nested MIME structure. Any negative number would treated as unlimited. (default: -1) `Content-Type` Treat the data as a specific content type. Useful when header is missing, or this lexer would try to parse from header. (default: `text/plain`) `Multipart-Boundary` Set the default multipart boundary delimiter. This option is only used when `Content-Type` is `multipart` and header is missing. This lexer would try to parse from header by default. (default: None) `Content-Transfer-Encoding` Treat the data as a specific encoding. Or this lexer would try to parse from header by default. (default: None) .. versionadded:: 2.5 MIMEmime)zmultipart/mixedzmultipart/relatedzmultipart/alternativec t|di||jd|_|jd|_|jdd|_t |dd|_y)NzMultipart-BoundaryContent_Transfer_Encoding Content_Typez text/plainzMIME-max-level)super__init__getboundarycontent_transfer_encoding content_typer max_nested_level)selfoptions __class__s 6/usr/lib/python3/dist-packages/pygments/lexers/mime.pyrzMIMELexer.__init__;s[ #7# $89 )05P)Q&#KK E +G5Er Jc#K|jd}|j|jvr|jdtj |dzf|jdt j|jdf|jd}|jd}|j|d|jfD]\}}}||z||fy|jt|jfyw)N:root) grouplowerattention_headersstartrTagr Whitespaceendget_tokens_unprocessedr )rmatchfieldposbodyitvs r!get_header_tokenszMIMELexer.get_header_tokensBs A ;;=D22 2++a.$((ECK7 7++a.$//5;;q>A A))A,C;;q>D66tfekkm=TU $1aAgq!m# $++-%++-7 7sDD c#K|j}|j}|ddk(r|tjdf|dz}|dd}|jj dr |j s%|j|D]\}}}||z||fydtj|j z}tj|tj}|j|} | rh|| jz} | jx} } |t|d| jf|| ztj| jfn|} d} |j!|| D]y} | |z } | j} || | }|j|D]\}}}| |z||f|| ztj| jf|| jz} {| |z } | t#|k7r| t|| dfyyw)Nr r$ multipartz ^--%s(--)?\n)r,r)rr.r startswithrget_bodypart_tokensreescapecompile MULTILINEsearchr/r Delimiterfinditerlen)rr1pos_body_start entire_bodyr5r6r7 bdry_pattern bdry_matchermpos_part_startpos_iter_startlpos_end lpos_startparts r!get_body_tokenszMIMELexer.get_body_tokensQskkm  q>T ! $//47 7+a/N%ab/K  ++K8 33K@ /1a$q(!Q.. / '4==)AA zz, =     , +aeeg5N() /NX $ JQWWY(?? ? 8+V-=-=qwwyH H+NN&&{NC 6A'.8JwwyHz(3D33D9 /1a$q(!Q.. /!8+V-=-=qwwyH H+aeeg5N 6$n4 [) ) $ JK(@@ @ *sH H c|jr |js dt|fgS|j}|r|dvr dt|fgS|jdk(r dt|fgS t |j}t|t|r|jdz |_|j|S#t $r dt|fgcYSwxYw)Nr>quoted-printable7bit8bitr$) striprr rrrr isinstancetyper0)rtextctelexers r!r=zMIMELexer.get_bodypart_tokenss zz|4#4#4t$% %,, 3BBt$% %  A %t$% % &*4+<+<=E eT$Z (%)%:%:Q%>E "++D11  &t$% % &sB,,CCc#K|jd|_|jd|jdz }|jdtj|jdd|f|jdt j |jdf|jdtjdf|jdt j |jdfyw)Nr$rr&/r') r)rr,rr.rLabelr/rrC)rr1 prefix_lens r!store_content_typezMIMELexer.store_content_types!KKN[[^ekk!n4 kk!ndoou{{1~kz/JJJkk!ndjj%++a.88iilF,,c11kk!ndjj%++a.88sC;C=c#K|jdt|jdf|jdtj|jdf|jdtj |jdf|jdt |jdf|jdt|jdf|jdjdk(r<|jdj}|ddk(r |d dk(r|dd }||_ yyw) Nr$r&r'rr"r) r,rr)r.r Attributer rr*rUr)rr1rs r!get_content_type_subtokensz$MIMELexer.get_content_type_subtokensskk!ndEKKN22kk!ndoou{{1~==kk!ndnnekk!n<<kk!nh A66kk!nfekk!n44 ;;q>   !Z /{{1~++-H{c!hrlc&9#Ab>$DM 0sEEc#K|jdj|_|jdtj |jdfyw)Nr)r)r*rr,rConstant)rr1s r!store_content_transfer_encodingz)MIMELexer.store_content_transfer_encodings@).Q)=)=)?&kk!ndmmU[[^;;sAA content-typecontent-transfer-encodingz#^([\w-]+):( *)([\s\S]*?\n)(?![ \t])z ^$[\s\S]+z\n[ \t]z \n(?![ \t])z#popheaderzP^\s*((multipart|application|audio|font|image|model|text|video|message)/([\w-]+))z>(;)((?:[ \t]|\n[ \t])*)([\w:-]+)(=)([\s\S]*?)(?=;|\n(?![ \t]))z;[ \t]*\n(?![ \t])z([\w-]+))r(rkrirj)__name__ __module__ __qualname____doc__namealiases mimetypesrr8rPr=r_rerhr+rr.rtokens __classcell__)r s@r!rrs> DhG*IK 8/Ab269 %<()DE45F G ? +  ) T__f 5 H '"  O ' ) "D& 1   H  9 :& +Fr")ror>pygments.lexerrrpygments.lexersrpygments.tokenrrrr r r pygments.utilr r __all__rrr"r!rzs3 .2GG4 -} }r"