"Te7f0ddlmZddlZddlmZmZmZmZmZm Z m Z ddl m Z ddl mZejdk\rddlmZnddlmZddlmZd d lmZd d lmZd d lmZd d lmZmZmZmZd dlm Z d dl!m"Z"d dl#m$Z$d dl%m&Z&d dl'm(Z(d dl)m*Z*m+Z+d dl,m-Z-d dl.m/Z/m0Z0GddZ1Gdde1Z2Gdde1Z3Gdde3Z4Gdde3Z5Gd d!e3Z6Gd"d#e3Z7Gd$d%e1Z8Gd&d'e1Z9Gd(d)e1Z:Gd*d+e1Z;Gd,d-e1Z<Gd.d/e1Z=Gd0d1e1Z>Gd2d3e3Z?Gd4d5e3Z@Gd6d7e3ZAGd8d9ZBGd:d;e"ZCeDdZGeGjd?d@dABeGjdCdDdEdFddGHeGjdIdJdKdLdMNeGjdOdPdQddQNeGjdRdSdTdFdUVeGjdWdXeIdYddZ[eGjd\d]d^dFd_VeGjd`dadbdFdcVeGjZKdddlLmZeKjdek(rejjZPn.eQeKjdfdgh5ZReRjZPdddeCePeKjrdindjeKjeKjeKjkZWeKjrjddlYZYddlZZZeYjZ\ee\eKjeKjlZejeWeZje\jyeeKjeKjdmnZejeWyy#1swYxYw)o) annotationsN)ClassVarDictIterableListOptionalTypeUnion) MarkdownIt)Token))get_args)Tablebox) loop_first)Stack)ConsoleConsoleOptions JustifyMethod RenderResult) Renderables) JupyterMixin)Panel)Rule)Segment)Style StyleStack)Syntax)TextTextTypecneZdZUdZded<ed dZd dZd dZd dZ ddZ dd Z y )MarkdownElementTzClassVar[bool]new_linec|S)zFactory to create markdown element, Args: markdown (Markdown): The parent Markdown object. token (Token): A node from markdown-it. Returns: MarkdownElement: A new markdown element clsmarkdowntokens //usr/lib/python3/dist-packages/rich/markdown.pycreatezMarkdownElement.create!s u cy)zuCalled when the node is entered. Args: context (MarkdownContext): The markdown context. Nr(selfcontexts r-on_enterzMarkdownElement.on_enter.r/cy)zpCalled when text is parsed. Args: context (MarkdownContext): The markdown context. Nr(r2r3texts r-on_textzMarkdownElement.on_text5r5r/cy)zwCalled when the parser leaves the element. Args: context (MarkdownContext): [description] Nr(r1s r-on_leavezMarkdownElement.on_leave<r5r/cy)a|Called when a child element is closed. This method allows a parent element to take over rendering of its children. Args: context (MarkdownContext): The markdown context. child (MarkdownElement): The child markdown element. Returns: bool: Return True to render the element, or False to not render the element. Tr(r2r3childs r-on_child_closezMarkdownElement.on_child_closeCsr/cy)Nr(r(r2consoleoptionss r-__rich_console__z MarkdownElement.__rich_console__Ssr/Nr+ 'Markdown'r,r return'MarkdownElement'r3'MarkdownContext'rGNoner3rJr8r#rGrKr3rJr>rHrGbool)rBz 'Console'rCz'ConsoleOptions'rGz'RenderResult') __name__ __module__ __qualname__r&__annotations__ classmethodr.r4r9r;r?rDr(r/r-r%r%sg#Hn#     (1B   +; r/r%ceZdZdZy)UnknownElementzAn unknown element. Hopefully there will be no unknown elements, and we will have a MarkdownElement for everything in the document. N)rOrPrQ__doc__r(r/r-rUrUYsr/rUc,eZdZdZdZddZddZddZy) TextElementz)Base class for elements that render text.nonecf|j|j|_td|_yNleftjustify) enter_style style_namestyler"r8r1s r-r4zTextElement.on_entergs$((9 ( r/c~|jj|t|tr|jydyN)r8append isinstancestr current_styler7s r-r9zTextElement.on_textks+  48Mw44XSWXr/c$|jyrc) leave_styler1s r-r;zTextElement.on_leavensr/NrIrL)rOrPrQrVr`r4r9r;r(r/r-rXrXbs3J)Yr/rXcNeZdZUdZdZded<ed dZd dZ d dZ y) Paragraphz A Paragraph.zmarkdown.paragraphrr^c0||jxsdSr[r]r)s r-r.zParagraph.createxs8++5v66r/c||_yrcr]r2r^s r-__init__zParagraph.__init__|s  r/c#^K|j|j_|jywrc)r^r8rAs r-rDzParagraph.__rich_console__s!!LL iis+-N)r+rFr,r rGz 'Paragraph'r^rrGrKrBrrCrrGr) rOrPrQrVr`rRrSr.rorDr(r/r-rkrkrsD%J 77)7 r/rkcReZdZdZeddZddZdfd Z d dZxZ S) Headingz A heading.c&||jSrc)tagr)s r-r.zHeading.creates599~r/cXt|_|j|jyrc)r"r8r_r`r1s r-r4zHeading.on_entersF DOO,r/cD||_d||_t| y)N markdown.)rvr`superro)r2rv __class__s r-rozHeading.__init__s#%cU+ r/c#K|j}d|_|jdk(rt|tj dy|jdk(r t d|yw)Ncenterh1zmarkdown.h1.border)rrah2)r8r^rvrrHEAVYr")r2rBrCr8s r-rDzHeading.__rich_console__sZyy 88t II* xx42hJsA#A%)r+rFr,r rGz 'Heading'rI)rvrfrGrKrr) rOrPrQrVrSr.r4rorD __classcell__r{s@r-rtrts?- )7 r/rtcBeZdZdZdZeddZddZ d dZy) CodeBlockz&A code block with syntax highlighting.zmarkdown.code_blockcx|jxsd}|jdd}||xsd|jS)Nr rr8)info partition code_theme)r*r+r, node_info lexer_names r-r.zCodeBlock.creates=JJ$" ((-a0 :')<)<==r/c ||_||_yrc)rtheme)r2rrs r-rozCodeBlock.__init__s$ r/c#Kt|jj}t||j|j dd}|yw)NTr)r word_wrappadding)rfr8rstripr!rr)r2rBrCcodesyntaxs r-rDzCodeBlock.__rich_console__sB499~$$& $//tQ  sA AN)r+rFr,r rGz 'CodeBlock')rrfrrfrGrKrr) rOrPrQrVr`rSr.rorDr(r/r-rrs>0&J>> )7 r/rcDeZdZdZdZddZ ddZ d dZy) BlockQuotezA block quote.zmarkdown.block_quotec"t|_yrcrelementsr2s r-rozBlockQuote.__init__ %0] r/c:|jj|yNFrrdr=s r-r?zBlockQuote.on_child_close U#r/c#K|j|jdz }|j|j||j}|j}t d}t d|}|D]}||Ed{|y7 w)Nwidthra u▌ )update max_width render_linesrrar) r2rBrCrender_optionslinesrar&rlines r-rDzBlockQuote.__rich_console__s!g.?.?!.CD$$T]]N$**$U 4=&%( DMOON  sA9B ;B< B NrGrKrMrr)rOrPrQrVr`ror?rDr(r/r-rrsI'J3(1B   )7   r/rc(eZdZdZdZ ddZy)HorizontalRulez%A horizontal rule to divide sections.Fc#NK|jdd}t|yw)Nz markdown.hrrYdefaultr) get_styler)r2rBrCras r-rDzHorizontalRule.__rich_console__s(!!-!@s#%Nrr)rOrPrQrVr&rDr(r/r-rrs'/H  )7  r/rc@eZdZdZddZ ddZ ddZy) TableElementz.MarkdownElement corresponding to `table_open`.c d|_d|_yrc)headerbodyrs r-rozTableElement.__init__s15 -1 r/cxt|tr||_yt|tr||_yt d)Nz Couldn't process markdown table.F)reTableHeaderElementrTableBodyElementr RuntimeErrorr=s r-r?zTableElement.on_child_closesB e/ 0DK  / 0DIAB Br/c#Kttj}|jV|jj@|jjj D]}|j |j|jM|jjD]4}|j Dcgc]}|j}}|j|6|ycc}ww)Nr) rr SIMPLE_HEAVYrrowcells add_columncontentrrowsadd_row)r2rBrCtablecolumnrelement row_contents r-rDzTableElement.__rich_console__s#**+ ;; "t{{'B++//// 1  0 1 99 yy~~ ,>AiiH7wH H {+ , IsB0C"2CC"NrrMrr)rOrPrQrVror?rDr(r/r-rrsD82 ( 1B   )7 r/rc,eZdZdZddZ ddZy)rz@MarkdownElement corresponding to `thead_open` and `thead_close`.cd|_yrc)rrs r-rozTableHeaderElement.__init__s +/r/c6t|tsJ||_yr)reTableRowElementrr=s r-r?z!TableHeaderElement.on_child_closes%111r/NrrMrOrPrQrVror?r(r/r-rr s'J0(1B r/rc,eZdZdZddZ ddZy)rz@MarkdownElement corresponding to `tbody_open` and `tbody_close`.cg|_yrc)rrs r-rozTableBodyElement.__init__s +- r/c^t|tsJ|jj|yr)rerrrdr=s r-r?zTableBodyElement.on_child_close!s)%111 r/NrrMrr(r/r-rrs'J.(1B r/rc,eZdZdZddZ ddZy)rz:MarkdownElement corresponding to `tr_open` and `tr_close`.cg|_yrc)rrs r-rozTableRowElement.__init__,s -/ r/c^t|tsJ|jj|yr)reTableDataElementrrdr=s r-r?zTableRowElement.on_child_close/s*%!1222 % r/NrrMrr(r/r-rr)s'D0(1B r/rc2eZdZdZeddZddZddZy) rz[MarkdownElement corresponding to `td_open` and `td_close` and `th_open` and `th_close`.ct|jjdxsd}d|vrd}nd|vrd}n d|vrd}nd }|ttvsJ|| S) Nrarztext-align:rightrightztext-align:centerr}ztext-align:leftr\rr])rfattrsgetrr)r*r+r,rar^s r-r.zTableDataElement.create;sjEKKOOG,-3  &G E )G % 'GG(=11117##r/c6td||_||_y)Nrr])r"rr^rns r-rozTableDataElement.__init__Ls!"g6  r/ct|tr t|n|}|j|j|j j |yrc)rerfr"stylizergr append_textr7s r-r9zTableDataElement.on_textPs:'c2tDz W**+   &r/NrErqrL)rOrPrQrVrSr.ror9r(r/r-rr7s%%$$ 'r/rcReZdZdZeddZddZ d dZ d dZy) ListElementzA list element.c n||jt|jjddS)Nstartr)typeintrrr)s r-r.zListElement.createYs'5::s5;;??7A#>?@@r/c.g|_||_||_yrc)items list_type list_start)r2rrs r-rozListElement.__init__]s%' "$r/c^t|tsJ|jj|yr)reListItemrrdr=s r-r?zListElement.on_child_closebs)%*** % r/c#fK|jdk(r,|jD]}|j||Ed{y|jdn |j}|t |jz}t |jD]$\}}|j ||||z|Ed{&y7v7 w)Nbullet_list_openr)rr render_bulletrlen enumerate render_number)r2rBrCitemnumber last_numberindexs r-rDzListElement.__rich_console__is >>/ /  @--gw??? @//1QtF 3tzz?2K(4  t--Wfunk  @ s"4B1B-A.B1%B/&B1/B1N)r+rFr,r rGz 'ListElement')rrfrz int | NonerGrKrMrr) rOrPrQrVrSr.ror?rDr(r/r-rrVsXAA% (1B   )7   r/rcTeZdZdZdZddZ d dZd dZ d dZy) rzAn item in a list.z markdown.itemc"t|_yrcrrs r-rozListItem.__init__}rr/c:|jj|yrrr=s r-r?zListItem.on_child_closerr/c#\K|j|jdz }|j|j||j}|j dd}t d|}t d|}t d }t|D]\} } | r|n|| Ed{|y7 w) Nr rrzmarkdown.item.bulletrYru • z r)rrrrrarrr) r2rBrCrr bullet_stylebulletrr&firstrs r-rzListItem.render_bullets g.?.?!.CD$$T]]N$**$U(()?(P ,/'<04=%e, KE4!&w .OON  sBB,B* B,c#Ktt|dz}|j|j|z }|j |j ||j }|jdd}td} td|z|} t|j|d z dz|} t|D]\} } | r| n| | Ed{| y7 w) Nrrzmarkdown.item.numberrYrrrr) rrfrrrrrarrrjustr)r2rBrCrr number_widthrr number_styler&rnumeralrrs r-rzListItem.render_numbers3{+,q0  g.?.?,.NO$$T]]N$**$U(()?(P 4=# ,l;VH++L1,<=C\R%e, KE4"' /OON  sC CC CNrrMrr) rBrrCrrrrrrGr) rOrPrQrVr`ror?rrr(r/r-rrxs^ J3(1B  )7ADSV r/rc&eZdZeddZddZy)Linkcr|jjdd}||jt|S)Nhref#)rrrrf)r*r+r,urls r-r.z Link.creates+kkoofc*5==#c(++r/c2t||_||_yrc)r"r8r)r2r8rs r-roz Link.__init__sJ  r/NrE)r8rfrrf)rOrPrQrSr.ror(r/r-rrs,,r/rcZeZdZdZdZeddZdfd Zd fd Z d dZ xZ S) ImageItemz#Renders a placeholder for an image.Fcn|t|jjdd|jS)zFactory to create markdown element, Args: markdown (Markdown): The parent Markdown object. token (Any): A token from markdown-it. Returns: MarkdownElement: A new markdown element srcr)rfrr hyperlinksr)s r-r.zImageItem.creates+3u{{ub12H4G4GHHr/cL||_||_d|_t|yrc) destinationr linkrzro)r2r r r{s r-rozImageItem.__init__s$&$#'  r/c||jj|_td|_t||yr[)rgrr"r8rzr4)r2r3r{s r-r4zImageItem.on_enters/)).. (  !r/c#ZKt|jxs|jxsd}|jxs7t |jj dj ddd}|jr|j|t jd|dd}|yw) Nr/ru🌆 rr)end) rrr r8r"striprsplitr rassemble)r2rBrC link_styletitler8s r-rDzImageItem.__rich_console__s ET-=-= EF  QT$"2"2"8"8"="D"DS!"LR"PQ ?? MM* %}}WeSb9 sB)B+rE)r rfr rNrGrKrIrr) rOrPrQrVr&rSr.ror4rDrrs@r-rrsF-H I I " )7 r/rc^eZdZdZ d d dZed dZd dZd dZd dZ y) MarkdownContextz!Manages the console render state.Nc||_||_t||_t |_d|_|td|||_yy)Nr)r)rBrCr style_stackrstack_syntaxr!)r2rBrCrainline_code_lexerinline_code_themes r-rozMarkdownContext.__init__sL  '1%'8-2W )-  (!"&7?PQDL )r/c.|jjS)z>Current style which is the product of all styles on the stack.)rcurrentrs r-rgzMarkdownContext.current_styles'''r/cf|dvr|j{|jj|}|j|jjj |t j||jjy|jjj ||y)z#Called when the parser visits text.>fence code_inlineNr) r highlightrrtopr9r"rrr#)r2r8 node_typehighlight_texts r-r9zMarkdownContext.on_texts 0 0T\\5M!\\33D9N  ! ! # JJNN " "dmmN$:J:J:R:RS  JJNN " "4 .r/c|jj|d}|jj||jS)zEnter a style context.rYr)rBrrpushrg)r2r`ras r-r_zMarkdownContext.enter_styles; &&z6&B e$!!!r/c:|jj}|S)zLeave a style context.)rpop)r2ras r-rizMarkdownContext.leave_styles  $$& r/)Nmonokai) rBrrCrrarr  Optional[str]r!rfrGrK)rGr)r8rfr)rfrGrK)r`Union[str, Style]rGr) rOrPrQrVropropertyrgr9r_rir(r/r-rrsv+,0!* RR R R ) R  R R"(( /" r/rceZdZUdZidedededededede d e d e d e d e d e dedededeZded<hdZ d ddZddZ ddZy)MarkdownaA Markdown renderable. Args: markup (str): A string containing markdown. code_theme (str, optional): Pygments theme for code blocks. Defaults to "monokai". justify (JustifyMethod, optional): Justify value for paragraphs. Defaults to None. style (Union[str, Style], optional): Optional style to apply to markdown. hyperlinks (bool, optional): Enable hyperlinks. Defaults to ``True``. inline_code_lexer: (str, optional): Lexer to use if inline code highlighting is enabled. Defaults to None. inline_code_theme: (Optional[str], optional): Pygments theme for inline code highlighting, or None for no highlighting. Defaults to None. paragraph_open heading_openr% code_blockblockquote_openhrrordered_list_openlist_item_openimage table_open tbody_open thead_opentr_opentd_openth_openz*ClassVar[Dict[str, Type[MarkdownElement]]]r>semrstrongNctjdjd}||_|j||_||_||_||_||_||_ |xs||_ y)N strikethroughr) r enablemarkupparseparsedrr^rar r r!) r2rIrr^rar r r!parsers r-rozMarkdown.__init__+si$$_5<| |j5|jd| W| |vr| dk7r| dk7rz| r|j+d| }| r|j5|j+d| | jr|j| j| |j5|j@j%| jxstB}|j3|| }| s|r,|j,j/||jE|| r|j,j7}|j, xs4|j,xr&|j,jFjI||}|r|r||jK||jLEd{n|r|j,j7| j}||j|||j, xs4|j,xr&|j,jFjI||}|r*|r||jK||jLEd{| s|s|jO||jP}y77-w)zRender markdown to the console.rYrN)height)r r!Frrrr8 hardbreakr softbreakr link_openrrzmarkdown.link_urlr link_closez markdown.linkz ()r%r7ry))rrarrr r!rKinlinesrrrPrrvnestingr9rrfrrr rr_rr,rr.rir.rer8plainrrrUr4r(r?renderrCr;r&)r2rBrCrar3rQinline_style_tagsr&_new_line_segmentr,r)rventeringexiting self_closingrrrlink_url_style element_class should_renderr8s r-rDzMarkdown.__rich_console__Is!!$**f!=...-!   "44"44   LL#LLN))&1c 0E I))C}})Hmmr)G ==A-LF" y9k)i0k)Y/k)5;;??6267??!(!2!23FPV!2!WJ%T"22J'' 3MM&&t{{4'?@l*??'')%mm//1G%gt444!(!2!2?F!2!SJ'' 3OOGLL$6$6 B'')OOD)4%,%6%6+V&7&N''7OOGLL)<'')OOC3(((-'')C5(9:'')'')C5(9:}} yA'')!% 1 1%** = O '..tU;|MM&&w/$$W-%mm//1G(/ $5% O#MM--<>'7??#KKK!MM%%' ==D'6$MM)O"==O#MM--<>'7??#KKKl$$W-&//HGc 0`LLs+Q'U)U*B+UUU "UU)r/NrYTNN)rIrfrrfr^zOptional[JustifyMethod]rar1r rNr r0r!r0rGrK)rQIterable[Token]rGrgrr)rOrPrQrVrkrtrrrrrrrrrrrrrRr[rorPrDr(r/r-r4r4ss <)<< < i < : < n < K< [< (< < l< &< (< ?< #< #!<H8&,G $+/#)+/+/AAA) A ! A  A)A)A A(u0u0)7u0 u0r/r4__main__z(Render Markdown to the console with Rich) descriptionpathPATHz%path to markdown file, or - for stdin)metavarhelpz-cz --force-color force_color store_truezforce color for non-terminals)destactionrrmz-tz --code-themerr/zpygments code theme)rprrmz-iz--inline-code-lexerr z-yz --hyperlinksr zenable hyperlinks)rprqrmz-wz--widthrz*width of output (default will auto-detect))rrprrmz-jz --justifyr^zenable full text justifyz-pz--pagepagezuse pager to scroll output)r-rtzutf-8)encodingfullr\)r^rr r )fileforce_terminalrT)rxrrecord)b __future__rsystypingrrrrrr r markdown_itr markdown_it.tokenr version_infortyping_extensions rich.tablerrr_loopr_stackrrBrrrr containersrjupyterrpanelrrulersegmentrrarr rr!r8r"r#r%rUrXrkrtrrrrrrrrrrrrrr4rOargparseArgumentParserrL add_argumentr parse_argsargs rich.consolerjstdinread markdown_bodyopen markdown_filer^rr r r+rriopydocStringIOfileiornrprintpagergetvaluer(r/r-rs" HHH"#v*II#!$ 88v_ /   ( k F 28  _   ? F     o ''>/D){)X;% %P--`w0|w0t z $X $ $>F  4     ,     "              9     '     )     D$ yyC ( $))TG 4 1 )..0M 1,,F????00 H yy(8(8    h FOO%&++4::d   hL 1 1s N  N