'Wd&dZddlmZddlmZddlZddlmZmZm Z ddl m Z m Z ddl mZdd lmZmZGd d e ZGd d eZy)z class Renderer Generates HTML from parsed token stream. Each instance has independent copy of rules. Those can be rewritten with ease. Also, you can add new rules if you create plugin and adds new token types. ) annotations)SequenceN)AnyClassVarProtocol) escapeHtml unescapeAll)Token)EnvType OptionsDictc0eZdZUded< ddZy)RendererProtocolz ClassVar[str] __output__cyN)selftokensoptionsenvs 6/usr/lib/python3/dist-packages/markdown_it/renderer.pyrenderzRendererProtocol.renders N)rSequence[Token]rr rr returnr)__name__ __module__ __qualname____annotations__rrrrrrs- % 0; BI  rrceZdZdZdZdddZ ddZ ddZ ddZe ddZ dd Z dd Z dd Z dd Z dd Z ddZ ddZ ddZ ddZ ddZy) RendererHTMLaContains render rules for tokens. Can be updated and extended. Example: Each rule is called as independent static function with fixed signature: :: class Renderer: def token_type_name(self, tokens, idx, options, env) { # ... return renderedHTML :: class CustomRenderer(RendererHTML): def strong_open(self, tokens, idx, options, env): return '' def strong_close(self, tokens, idx, options, env): return '' md = MarkdownIt(renderer_cls=CustomRenderer) result = md.render(...) See https://github.com/markdown-it/markdown-it/blob/master/lib/renderer.js for more details and examples. htmlNctj|tjDcic]*\}}|jds|jds||,c}}|_ycc}}w)N) predicater_)inspect getmembersismethod startswithrules)rparserkvs r__init__zRendererHTML.__init__<sU **47;K;KL 1LL*all3.? qD   s/A"cTd}t|D]\}}|jdk(r.|js"||j|j||z }C|j|jvr&||j|j||||z }||j ||||z }|S)zTakes token stream and generates HTML. :param tokens: list on block tokens to render :param options: params of parser instance :param env: additional data from parsed input inline) enumeratetypechildren renderInliner+ renderTokenrrrrresultitokens rrzRendererHTML.renderCs!&) DHAuzzX%>>d//MMFtzz)0$**UZZ0GSII$**61gsCC D rcd}t|D]Z\}}|j|jvr&||j|j||||z }D||j||||z }\|S)aThe same as ``render``, but for single token of `inline` type. :param tokens: list on block tokens to render :param options: params of parser instance :param env: additional data from parsed input (references, for example) r1)r3r4r+r7r8s rr6zRendererHTML.renderInlineZsz!&) DHAuzzTZZ'0$**UZZ0GSII$**61gsCC  D  rcPd}d}||}|jry|jr(|jdk7r|r||dz jr|dz }||jdk(rdnd|jzz }||j |z }|jdk(r |d r|d z }|jrrd }|jdk(ra|dzt |krP||dz}|j d k(s |jrd}n*|jdk(r|j|jk(rd}||rd z }|Sdz }|S)zDefault token renderer. Can be overridden by custom function :param idx: token index to render :param options: params of parser instance r1Fr z >)hiddenblocknestingtag renderAttrslenr4) rridxrrr9needLfr; nextTokens rr7zRendererHTML.renderTokenms>s  << ;;5==B.36#'?;Q;Q dNF 5==B.4C599DD $""5)) ==A '*"5 dNF ;;F}}!sQwV'<"37O >>X-1A1A#F&&",%))1K#F6%* (+* rcd}|jD]1\}}|dt|zdztt|zdzz }3|S)z"Render token attributes to string.r1 z="") attrItemsr str)r;r9keyvalues rrGzRendererHTML.renderAttrssW//+ RJC cJsO+d2ZE 5KKcQ QF R rcd}|xsgD]s}|jdk(r||jz }"|jdk(r.|js>||j|j||z }_|jdk(so|dz }u|S)aiSpecial kludge for image `alt` attributes to conform CommonMark spec. Don't try to use it! Spec requires to show `alt` content with stripped markup, instead of simple escaping. :param tokens: list on block tokens to render :param options: params of parser instance :param env: additional data from parsed input r1textimage softbreakr?)r4contentr5renderInlineAsText)rrrrr9r;s rrXzRendererHTML.renderInlineAsTexts\r EzzV#%--'w&>>d55enngsSSF{*$  rcr||}d|j|zdzt||jzdzS)NzrGr rWrrrIrrr;s r code_inlinezRendererHTML.code_inlinesSs  u% & ,,- .   rcr||}d|j|zdzt||jzdzS)N rZr[s r code_blockzRendererHTML.code_blocksUs  u% & ,,- .   rc||}|jr#t|jjnd}d}d}|r*|jd} | d}t | dk(r| d}|j r5|j |j ||xst|j } nt|j } | jdr| dzS|rctddd|jj} | jd |j|zd |j| zd z| zd zSd |j|zd z| zd zS) Nr1r)maxsplitrr^r?)r4rFrEattrsclassz
>MM%!8!8RU!VWMM%$Wc::rc"|jrdSdS)N

)rArrrIrrs r hardbreakzRendererHTML.hardbreak7s%--z;8;rc>|jr|jrdSdSdS)Nrwrxr?)breaksrArys rrVzRendererHTML.softbreak<s+?Fnn7++Z 19 RV rc2t||jSr)r rWrys rrTzRendererHTML.textCs&+--..rc ||jSrrWrys r html_blockzRendererHTML.html_blockHc{"""rc ||jSrrrys r html_inlinezRendererHTML.html_inlineMrrr)r,r)rrrr rr rrP) rrrIintrr rr rrP)r;r rrP)rzSequence[Token] | Nonerr rr rrP)rrr__doc__rr/rr6r7 staticmethodrGrXr\r`rrrUrzrVrTrrrrrr"r"s:J %0;BI .%0;BI &=== =  = =~&  <  %  ,/  :E  LS            "2 2 2  2  2 2 h;;; ;  ; ;$<%<,/<:Ers?#$**1' x t##t#r