o $a@sdZddlZddlmZmZmZmZddlmZddl m Z ddl m Z ddl mZmZmZddlmZddlmZdd lmZdd lmZdd lmZdd lmZdd lmZddlm Z ddl!m"Z"m#Z#m$Z$m%Z%ddl&m'Z'm(Z(m)Z)ddl*m+Z+ddl,m-Z-m.Z.m/Z/ddl0m1Z1ddl2m3Z3erddl4m5Z5e/6e7Z8Gdddej9Z:Gddde:Z;Gddde:ZGd$d%d%eZ?d&d'd(e d)e@d!ejAfd*d+ZBdS),z sphinx.io ~~~~~~~~~ Input/Output files :copyright: Copyright 2007-2021 by the Sphinx team, see AUTHORS. :license: BSD, see LICENSE for details. N) TYPE_CHECKINGAnyListType)nodes) Publisher)Values) FileInputInput NullOutput)Parser) standalone) Transform)DanglingReferences)UnfilteredWriter)addnodes)BuildEnvironment)AutoIndexUpgraderDoctreeReadEvent FigureAlignerSphinxTransformer)LocalePreserveTranslatableMessagesRemoveTranslatableInline) SphinxDomains)UnicodeDecodeErrorHandler get_filetypelogging)LoggingReporter) UIDTransformSphinxcs|eZdZUdZgZeeeed<de de ddffdd Z dd d Z deeeffd d Z de jffdd ZZS)SphinxBaseReaderzm A base class of readers for Sphinx. This replaces reporter by Sphinx's on generating document. transformsargskwargsreturnNcs\ddlm}t|dkr#t|d|r#|d|_|jj|_|dd}tj|i|dS)Nrr ) sphinx.applicationr!len isinstance_appenv_envsuper__init__)selfr$r%r! __class__+/usr/lib/python3/dist-packages/sphinx/io.pyr/3s    zSphinxBaseReader.__init__appr!cCs||_|j|_dSN)r+r,r-r0r5r3r3r4setup<s zSphinxBaseReader.setupcs6t|j}tg}|D] }||vr||q |Sr6)r.get_transformsr#rremove)r0r#unused transformr1r3r4r9@s zSphinxBaseReader.get_transformscsBt}tj|_t||_|j|jj |j }t ||_ |S)zm Creates a new document object which has a special reporter object good for logging. ) r. new_documentrdocumentr2r transformerset_environmentsettingsr,reporterr from_reporter)r0r>rBr1r3r4r=Ks   zSphinxBaseReader.new_documentr5r!r&N)__name__ __module__ __qualname____doc__r#rrr__annotations__rr/r8r9rr>r= __classcell__r3r3r1r4r"*s   r"csPeZdZdZdfdd Zded ed edej fd d Z d e de fddZ ZS)SphinxStandaloneReaderz- A basic document reader for Sphinx. r5r!r&Ncs"|j|j|_t|dSr6)r#registryr9r.r8r7r1r3r4r8cszSphinxStandaloneReader.setupsourceparserrAcCs4||_|js ||_||_||j|_||jSr6)rMrNrA read_sourcer,inputparser>)r0rMrNrAr3r3r4readgszSphinxStandaloneReader.readr,cCs*|j}|g}|jd|j||dS)z-Read content from source and do post-process.z source-readr)rMrReventsemitdocname)r0r,contentargr3r3r4rOps z"SphinxStandaloneReader.read_sourcerD)rErFrGrHr8r r rrr>rRrstrrOrJr3r3r1r4rK^s  rKcs"eZdZdZdfdd ZZS) SphinxI18nReadera A document reader for i18n. This returns the source line number of original text as current source line number to let users know where the error happened. Because the translated texts are partial and they don't have correct line numbers. r5r!r&NcsVt||j|j|_ttttt t t t g}|D] }||jvr(|j |qdSr6)r.r8r#rLr9rrrrrrrrr:)r0r5r;r<r1r3r4r8s   zSphinxI18nReader.setuprD)rErFrGrHr8rJr3r3r1r4rYzsrYc@seZdZdZdZdddZdS)SphinxDummyWriterz0Dummy writer module used for generating doctree.)htmlr&NcCsdSr6r3)r0r3r3r4 translateszSphinxDummyWriter.translate)r&N)rErFrGrH supportedr\r3r3r3r4rZsrZrMr$r%r&cOs|S)z.Bypass source object as is to cheat Publisher.r3)rMr$r%r3r3r4SphinxDummySourceClasssr^cs.eZdZdZdededdffdd ZZS)SphinxFileInputzA basic FileInput for Sphinx.r$r%r&Ncsd|d<tj|i|dS)Nsphinx error_handler)r.r/)r0r$r%r1r3r4r/szSphinxFileInput.__init__)rErFrGrHrr/rJr3r3r1r4r_s"r_r5r!r,filenamecCst|j}td|t}||t|jj|}|j ||}|j j dkr0|j dkr0tj |_ t||tttd}|d|jd|j|d||jS)z(Parse a document and convert to doctree.r`CommonMarkParserr3)readerrNwriter source_class destinationN) source_path)rrUcodecsregister_errorrKr8rconfig source_suffixrLcreate_source_parserr2rE settings_spec RSTParserrrZr_r process_programmatic_settingsrA set_sourcepublishr>)r5r,rbrardfiletyperNpubr3r3r4read_docs$    ru)CrHritypingrrrrdocutilsr docutils.corerdocutils.frontendr docutils.ior r r docutils.parsersr docutils.parsers.rstrodocutils.readersr docutils.transformsrdocutils.transforms.referencesrdocutils.writersrr`rsphinx.environmentrsphinx.transformsrrrrsphinx.transforms.i18nrrrsphinx.transforms.referencesr sphinx.utilrrrsphinx.util.docutilsrsphinx.versioningrr(r! getLoggerrEloggerReaderr"rKrYrZr^r_rXr>rur3r3r3r4s>                 4