o $ai>@s0dZddlZddlZddlZddlmZddlmZmZddlm Z m Z m Z m Z ddl mZddlmZddlmZmZddlZdd lmZdd lmZdd lmZmZdd lmZmZdd lm Z m!Z!ddl"m#Z#ddl$m%Z%ddl&m'Z'ddl(m)Z)ddl*m+Z+ddl,m-Z-ddl.m/Z/ddl0m1Z1ddl2m3Z3ddl4m5Z5e6e7Z8GdddeZ9GdddZ:Gdddej;ejdede>d e?d!ej@fd"d#ZAd$e d!e?fd%d&ZBGd'd(d(e ZCGd)d*d*e ZD dKd+e!d,e?d-e d.e?d/e?d0e?d!e e?e?ffd1d2ZE  dLd+e-de>d,e?d-e d/e?d3e?d4e?d0e?d!e e?e?ffd5d6ZFd+e-de>d!dfd7d8ZG dKd+e/de>d,e?d-e d/e?d0e?d!dfd9d:ZHd+e/de>d!dfd;d<ZI dMd+e3de>d,e?d-e d/e?d!df d=d>ZJd+e3de>d!dfd?d@ZKd+e5de>d!dfdAdBZLd+e1de>d!dfdCdDZMdEedFeNd!dfdGdHZOdEed!e e?e ffdIdJZPdS)Na sphinx.ext.graphviz ~~~~~~~~~~~~~~~~~~~ Allow graphviz-formatted graphs to be included in Sphinx-generated documents inline. :copyright: Copyright 2007-2021 by the Sphinx team, see AUTHORS. :license: BSD, see LICENSE for details. N)path)PIPECalledProcessError)AnyDictListTuple)nodes)Node) Directive directives)Sphinx) SphinxError)___)loggingsha1)SphinxDirectiveSphinxTranslator) copy_asset)search_image_for_language)set_source_info) ensuredir) OptionSpec)HTMLTranslator)LaTeXTranslator)ManualPageTranslator)TexinfoTranslator)TextTranslatorc@seZdZdZdS) GraphvizErrorzGraphviz errorN)__name__ __module__ __qualname__categoryr$r$5/usr/lib/python3/dist-packages/sphinx/ext/graphviz.pyr+src @sbeZdZdZedZedZddedededd fd d Z ddedd fd d Z defddZ d S)ClickableMapDefinitionz1A manipulator for clickable map file of graphviz.zdS)Nrz$Invalid clickable map file found: %sz%3z grapviz%si) maptag_rematchr)rr(groupr-rencode hexdigestreplacehref_researchr/append)r1r*matchedhashedliner$r$r%r0<s     zClickableMapDefinition.parsecCs.|jrd|jdg|j|jdgSdS)zvGenerate clickable map tags if clickable item exists. If not exists, this only returns empty string.  rr')r/joinr))r1r$r$r%generate_clickable_mapMs$z-ClickableMapDefinition.generate_clickable_map)r')N) r r!r"__doc__recompiler4r:strr2r0rCr$r$r$r%r&/s  r&c@s eZdZdSgraphvizN)r r!r"r$r$r$r%rIXsrI directivenodecaptionr+cCsltd|}d|vr|jd|d<|j||j\}}tj|dg|R}||t ||||7}|S)Nr'align) r figure attributespopstate inline_textlinenorLextendr)rJrKrL figure_nodeinodesmessages caption_noder$r$r%figure_wrapper\s   rYargumentcCs t|dS)N)leftcenterright)r choice)rZr$r$r% align_specis r_c@\eZdZUdZdZdZdZdZej e ej ej ej ej ej dZ e ed<deefd d Zd S) Graphviz3 Directive to insert arbitrary dot markup. Trr3FaltrMrLlayout graphviz_dotnameclass option_specr+c Cs|jra|jj}|jr|jjtd|jdgSt|jd|j }|j |\}}|j |zt |dd }| }Wdn1sCwYWn0ty`|jjtd||jdgYSwd|j}d}|sz|jjjtd|jdgSt}||d <d |j ji|d <d |jvr|jd |d d <d |jvr|jd |d d <d|jvr|jd|d<d|jvr|jd|d<d|jvr|jd|d<|r||d<d|jvr|||gSt|||jd}|||gS)NzCGraphviz directive cannot have both content and a filename argument)r?rutf-8encodingz8External Graphviz file %r not found or reading it failedr@z.Ignoring "graphviz" directive without content.codedocnameoptionsrfrerdrMrhclassesr(rL) argumentsrQdocumentr)reporterwarningrrSrenv relfn2pathnote_dependencyopenreadOSErrorrBstrip state_machinerIrnroadd_namerY) r1rrrZ rel_filenamer(fpdotcoderKrNr$r$r%runsf             z Graphviz.runNr r!r"rD has_contentrequired_argumentsoptional_argumentsfinal_argument_whitespacer unchangedr_ class_optionrir__annotations__rr rr$r$r$r%ram  rac@r`) GraphvizSimplerbTr3rFrcrir+cCst}d|j|jdd|jf|d<d|jji|d<d|jvr*|jd|dd<d|jvr8|jd|dd<d |jvrD|jd |d <d |jvrP|jd |d <d |jvr\|jd |d <d |jvri|||gSt |||jd }|||gS)Nz %s %s { %s } rr@rmrnrorfrerdrMrhrprL) rIrgrqrBr)rurnror}rY)r1rKrNr$r$r%rs*        zGraphvizSimple.runNrr$r$r$r%rrrr1rmroformatprefixr(c Cs|d|jjj}|t|t|t|jjj}d|t||f}t |jj |} t |jj |jj|} t | rC| | fSt|jdrR|jj|rRdStt | |g} | |jjj| d|d| g|dd} |rt t |jj|} n t t |jj| } |d kr| d d | gz#tj| |tt| d d }t | sttd|j|jf| | fWStyttd|t|jdsi|j_d |jj|<YdSt y}z ttd|j|jf|d}~ww)z3Render graphviz code into a PNG or PDF output file.rfz%s-%s.%s_graphviz_warned_dot)NNz-Tz-ornindexpngz-Tcmapxz-o%s.mapT)inputstdoutstderrcwdcheckz;dot did not produce an output file: [stderr] %r [stdout] %rzYdot command %r cannot be run (needed for graphviz output), check the graphviz_dot settingz.dot exited with error: [stderr] %r [stdout] %rN)!getbuilderconfigrfrGgraphviz_dot_argsr7rr8 posixpathrBimgpathroutdirimagedirisfilehasattrrrdirnamerTsrcdir subprocessrrrrrrrzloggerrtr)r1rmrorrr(rfhashkeyfnamerelfnoutfndot_argsrnrretexcr$r$r% render_dotsd             rimgclsrdc Cs|jjj}z|dvrttd|t||||||\} } Wnty7} z ttd|| tj | d} ~ ww|dg| dg} d t d| }| durZ|j ||tj |duri| d||}d|vr{|j d |d|df|d kr|j d |j d | |f|j d ||j dn_t| dddO} t| d| |d}|jr|j d |j d| ||j|f|j d|j |n|j d |j d| ||f|j dWdn1swYd|vr|j dtj )N)rsvgz=graphviz_output_format must be one of 'png', 'svg', but is %rdot code %r: %srIrp rdrMz!
rz
z3 z

%s

z
z.maprjrkr,z1%sz
z$%s)rrgraphviz_output_formatrrrrrtr SkipNoderrBfilterbodyr<r7r{rxr&ryr/r-rC)r1rKrmrorrrdr(rrrrrpmapfileimgmapr$r$r%render_dot_htmlsb          rcC$t|||d|d|dddSNrmror()r()rrr1rKr$r$r%html_visit_graphvizD$rc Csz t|||d||\}}Wnty&}z ttd||tj|d}~ww||} | s^d} d} d|vrV|ddkrAd} d} n|ddkrLd } d } n |dd krVd } d} |j d | |j d|| sp|j d| tj)Npdfrr'rMr[{z\hspace*{\fill}}r]z{\hspace*{\fill}}r\z{\hfillz %sz\sphinxincludegraphics[]{%s}z%s ) rrrrtrr r is_inlinerr<) r1rKrmrorr(rrrrprepostr$r$r%render_dot_latexHs4    rcCrr)rrrr$r$r%latex_visit_graphvizjrrc Csrz t|||d|\}}Wnty%}z ttd||tj|d}~ww|dur6|jd|ddtj)Nrrz@image{%s,,,[graphviz],png} ) rrrrtrr rrr<)r1rKrmrorrrrr$r$r%render_dot_texinfonsrcCst|||d|ddS)Nrmro)rrr$r$r%texinfo_visit_graphvizzsrcCs:d|jvr|td|dtj|tdtjNrdz [graph: %s]z[graph])rOadd_textrr rrr$r$r%text_visit_graphviz~s rcCs>d|jvr|jtd|dtj|jtdtjr)rOrr<rr rrr$r$r%man_visit_graphvizs rapprcCsJ|dur!|jjdkr#ttjddd}t|jd}t||dSdSdS)Nhtml templatesrI graphviz.css_static)rrrrBsphinx package_dirrr)rrsrcdstr$r$r%on_build_finisheds rcCs|jttdftdftdftdftdfd|dt|dt |dt | ddd| dgd| d d d| d | d t tjd dS)N)rlatextexinfotextmanrIgraphdigraphrfr*rrrrrzbuild-finishedT)versionparallel_read_safe)add_noderIrrrrr add_directiveraradd_config_value add_css_fileconnectrr__display_version__)rr$r$r%setups       rrH)rINNN)rI)QrDrrErosrrrtypingrrrrdocutilsr docutils.nodesr docutils.parsers.rstr r rsphinx.applicationr sphinx.errorsr sphinx.localerr sphinx.utilrrsphinx.util.docutilsrrsphinx.util.fileutilrsphinx.util.i18nrsphinx.util.nodesrsphinx.util.osutilrsphinx.util.typingrsphinx.writers.htmlrsphinx.writers.latexrsphinx.writers.manpagersphinx.writers.texinforsphinx.writers.textr getLoggerr rrr&GeneralInlineElementrIrGrNrYr_rarrrrrrrrrr Exceptionrrr$r$r$r%s                 ) D,  5  4 "