a
    0a_                  +   @   s  d Z ddlZddlZddlmZ ddlmZmZmZmZm	Z	m
Z
 ddlmZ ddlmZ ddlZddlmZmZmZ ddlmZ dd	lmZ dd
lmZmZmZ ddlmZmZ ddlm Z  ddl!m"Z"m#Z# ddl$m%Z% ddl&m'Z' ddl(m)Z)m*Z* ddl+m,Z,m-Z- ddl.m/Z/m0Z0m1Z1m2Z2 ddl3m4Z4m5Z5 ddl6m7Z7m8Z8 ddl9m:Z: ddl;m<Z< ddl=m>Z> ddl?m@Z@mAZA ddlBmCZC ddlDmEZEmFZF ddlGmHZH ddddd d!d"d#d$d%d&d'd(d)d*d+d,d,d-d-d.d/d0d1d2d3d4d5d6d6d7d8d9d:d;d<d=d=d=d>d?d@dA*ZIg dBZJe/KeLZMG dCdD dDeZNee#ddEdFdGZOee#ddEdHdIZPeddJdKdLZQe#eRdMdNdOZSe#eeReRf dMdPdQZTe#eUdMdRdSZVe#ee	eReReReReRf  dMdTdUZWeeeRef dJdVdWZXdS )Xz
    sphinx.builders.latex
    ~~~~~~~~~~~~~~~~~~~~~

    LaTeX builder.

    :copyright: Copyright 2007-2022 by the Sphinx team, see AUTHORS.
    :license: BSD, see LICENSE for details.
    N)path)AnyDictIterableListTupleUnion)OptionParser)Node)addnodeshighlightingpackage_dir)Sphinx)Builder)ADDITIONAL_SETTINGSDEFAULT_SETTINGSSHORTHANDOFF)ThemeThemeFactory)ExtBabel)ENUMConfig)RemovedInSphinx50Warning)ImageAdapter)NoUriSphinxError)___)loggingprogress_messagestatus_iterator	texescape)bold	darkgreen)SphinxFileOutputnew_document)copy_asset_file)format_date)inline_all_toctrees)SEPmake_filename_from_project)LaTeXRenderer)LaTeXTranslatorLaTeXWriter)nodesz-L albanian -C utf8 z-L croatian -C utf8 z-L czech -C utf8 z-L danish -C utf8 z-L dutch-ij-as-ij -C utf8 -L english -C utf8 z-L esperanto -C utf8 z-L estonian -C utf8 z-L finnish -C utf8 z-L french -C utf8 z-L german-din5007 -C utf8 z-L icelandic -C utf8 z-L italian -C utf8 z-L latin -C utf8 z-L latvian -C utf8 z-L lithuanian -C utf8 z-L lower-sorbian -C utf8 z-L norwegian -C utf8 z-L polish -C utf8 z-L portuguese -C utf8 z-L romanian -C utf8 z-L slovak-small -C utf8 z-L slovenian -C utf8 z-L spanish-modern -C utf8 z-L swedish -C utf8 z-L turkish -C utf8 z-L upper-sorbian -C utf8 z-L vietnamese -C utf8 z-L belarusian -C utf8 z-L bulgarian -C utf8 z-L macedonian -C utf8 z-L mongolian-cyrillic -C utf8 z-L russian -C utf8 z-L serbian -C utf8 z-L ukrainian -C utf8 z-L greek -C utf8 z-L greek-polytonic -C utf8 )*sqhrcsdanleneoetfifrdeisitZlalvltZdsbZdsnbnoplptroskslessvtrZhsbZhsvibebgmkmnrusrzsh-cyrlshukelz
el-polyton)rJ   rK   rL   rM   rN   rO   rP   rQ   c                   @   s  e Zd ZdZdZdZedZejdkr2eed7 Zg dZ	dZ
eZdd	d
dZeeee f d	ddZd<eeedddZd=eeeedddZdd	ddZdd	ddZdd	ddZdd	ddZdd	ddZdd	ddZedd d!d"Zeed#d$d%Zeeedd&d'd(Zeeee e j!d)d*d+Z"dd	d,d-Z#e$ed.dd	d/d0Z%e$ed1dd	d2d3Z&dd	d4d5Z'dd	d6d7Z(e)ee*eef  d	d8d9Z+e)ee*eef  d	d:d;Z,dS )>LaTeXBuilderz,
    Builds LaTeX output to create PDF.
    latexz"The LaTeX files are in %(outdir)s.posixzr
Run 'make' in that directory to run these through (pdf)latex
(use `make latexpdf' here to do that automatically).)zapplication/pdfz	image/pngz
image/jpegFN)returnc                 C   sH   d | _ i | _i | _g | _t| j| _t  | 	  | 
  |   d S N)babelcontextdocnamesdocument_datar   appthemesr!   initinit_context
init_babelinit_multilingualself rd   =lib/python3.9/site-packages/sphinx/builders/latex/__init__.pyr^   |   s    zLaTeXBuilder.initc                 C   s   dS )Nzall documentsrd   rb   rd   rd   re   get_outdated_docs   s    zLaTeXBuilder.get_outdated_docs)docnametyprV   c                 C   s"   || j vrt||nd| S d S )N%)rZ   r   )rc   rg   rh   rd   rd   re   get_target_uri   s    
zLaTeXBuilder.get_target_uri)from_torh   rV   c                 C   s   |  ||S rW   )rj   )rc   rk   rl   rh   rd   rd   re   get_relative_uri   s    zLaTeXBuilder.get_relative_uric                 C   s   dd | j jD }|s(ttd d S g | _|D ]d}|d }|| jjvr\ttd| q2| j	| |
td r|d d }| j	||d f q2d S )	Nc                 S   s   g | ]}t |qS rd   )list).0xrd   rd   re   
<listcomp>       z3LaTeXBuilder.init_document_data.<locals>.<listcomp>zEno "latex_documents" config value found; no documents will be writtenr   z="latex_documents" config value references unknown document %sindex   )configlatex_documentsloggerwarningr   titlesenvZall_docsr[   appendendswithr)   )rc   Zpreliminary_document_dataentryrg   rd   rd   re   init_document_data   s     
zLaTeXBuilder.init_document_datac                 C   s  t  | _| jt| jji  | jjrV| jj| jjd d f}| jt|i  | j| jj	 | jj
| jd< | jj| jd< | jjr| jj| jd< n"t| jjptd| jjd| jd< | jjrt| jj| jd< td| jd	< | jj
r| jd
td d S )Nru   releaseZ	use_xindydatez	%b %d, %Y)languageZlogofilenameZIndexZ	indexnameZreleasenameZRelease)r   copyrY   updater   getrv   latex_enginer   latex_elementsr   latex_use_xindyZtodayr'   Z	today_fmtr   
latex_logor   basename
setdefault)rc   keyrd   rd   re   r_      s$    

zLaTeXBuilder.init_contextc                 C   s$   | j j}|j| jd< |j| jd< dS )z<Update template variables for .tex file just before writing.ZpackagesZpackages_after_hyperrefN)r\   registrylatex_packagesrY   latex_packages_after_hyperref)rc   r   rd   rd   re   update_context   s    zLaTeXBuilder.update_contextc                 C   sB   t | jj| jd  | _| jjr>| j s>ttd| jj d S )NrX   z%no Babel option known for language %r)	r   rv   r   rY   rX   Zis_supported_languagerx   ry   r   rb   rd   rd   re   r`      s
    
zLaTeXBuilder.init_babelc                 C   s  | j d dkr| j s^d| j d v r<d| j d< d| j d< n"d	| j d v r^d| j d< d
| j d< d| j d v rxd| j d< n
d| j d< | j d dkrd| j d< | j d r| j d  d| j  7  < | j d | j d< | jjr~t| j d< | j r~d| jjvr~d| j d< nr| j d r~| j d  d| j  7  < | j }|rXd|| j f }nd| j  }d| j d |f | j d< d S )Nr   pdflatexZX2Zfontencz\usepackage{substitutefont}Zsubstitutefontz(\usepackage[Xtwo]{sphinxpackagecyrillic}ZtextcyrillicZT2Az)\usepackage[TtwoA]{sphinxpackagecyrillic}ZLGR Z	textgreekZfontsubstitutionrX   Zclassoptions,ZmultilingualZshorthandoffZfontpkgpolyglossiaz\setmainlanguage[%s]{%s}z\setmainlanguage{%s}z%s
%s)	rY   rX   Zuses_cyrillicget_languagerv   r   r   r   Zget_mainlanguage_options)rc   optionsr   rd   rd   re   ra      s6    








zLaTeXBuilder.init_multilingualc                 C   sx   t d| jj}t| jd}t|d<}|d |d |d ||	  W d    n1 sj0    Y  d S )NrT   zsphinxhighlight.stywz%\NeedsTeXFormat{LaTeX2e}[1995/12/01]
zX\ProvidesPackage{sphinxhighlight}[2016/05/29 stylesheet for highlighting with pygments]
zA% Its contents depend on pygments_style configuration variable.

)
r   ZPygmentsBridgerv   Zpygments_styler   joinoutdiropenwriteZget_stylesheet)rc   ZhighlighterZ
stylesheetfrd   rd   re   write_stylesheet   s    


zLaTeXBuilder.write_stylesheet)ignoredrV   c              	   G   s  t | }t| jj|fdd }|   |   | jD ]}|d d \}}}}}	| j	|	}
d}t
|dkrv|d }tt| j|ddd}ttd|  | j|}t|tjd }|r|	dd	kr|	d}nd }| j|||
jd
kr| jjng d}|
j|d< | ||d< ||d< | | | |||
 |   W d    n1 sX0    Y  ttdL ||_||_ |d |_!||_"|
j|_#||_|
|_$|%|| W d    q61 s0    Y  q6d S )NT)defaults
componentsZread_config_files   Fzutf-8)Zdestination_pathencodingZoverwrite_if_changedzprocessing %sZmaxdepthr   howto)
appendicesdocclasscontentsnametocdepthZwriting)&r-   r	   r{   ZsettingsZget_default_valuesr   r   r[   r]   r   lenr$   r   r   r   r   r   get_doctreenextfindallr   toctreeassemble_doctreenamerv   latex_appendicesr   get_contentsnameZpost_process_imagesupdate_doc_contextr   Z_authorZ_titleZ_contentsnameZ_docnameZ	_docclassthemer   )rc   r   Z	docwriterZdocsettingsr~   rg   Z
targetnametitleauthorZ	themenamer   toctree_onlyZdestinationZdoctreer   r   rd   rd   re   r     sT    


(
zLaTeXBuilder.write)	indexfilerV   c                 C   s:   | j |}d }|tjD ]}d|v r|d } q6q|S )NZcaption)r{   r   r   r   r   )rc   r   treer   r   rd   rd   re   r   6  s    zLaTeXBuilder.get_contentsname)r   r   r   rV   c                 C   sH   || j d< || j d< |j| j d< |j| j d< |j| j d< |j| j d< d S )Nr   r   r   	papersize	pointsizewrapperclass)rY   r   r   r   r   )rc   r   r   r   rd   rd   re   r   @  s    

zLaTeXBuilder.update_doc_context)r   r   r   rV   c              	   C   s  t |g| | _tjt|d dd | j|}||d< |rtd}t	 }|t
dd7 }||7 }|tjD ]}||7 }qr|}t| | j||t|g}||d< |D ]"}	| j|	}
|	|
d< ||
 qtd ttd | j|||  |tjD ]}|d	 }	|d
 }t||g}| jD ]Z\}}|	|r&|ttdtd |t|| |tdd  qq&|| q|S )N TZnonlrg   z<latex output>z<Set title in conf.py>r   zresolving references...Z
refdocnameZrefsectnamez (in ))setrZ   rx   infor#   r{   r   r%   r.   sectionr   r   r   r   r(   r|   r   Zresolve_referencesZpending_xrefZemphasisrz   
startswithTextr   Zreplace_self)rc   r   r   r   r   Znew_treeZnew_sectZnodeZ	largetreerg   ZappendixZpendingnodeZsectnameZnewnodesZsubdirr   rd   rd   re   r   H  sJ    


zLaTeXBuilder.assemble_doctreec                 C   s,   |    |   |   | jjr(|   d S rW   )copy_image_fileswrite_message_catalogcopy_support_filesrv   latex_additional_filescopy_latex_additional_filesrb   rd   rd   re   finishs  s
    zLaTeXBuilder.finishzcopying TeX support filesc                 C   s   | j jr6t| j jdd d}| j jdd tv }nd}d}| j j| j j||d}tt	t
d ttd}t|D ]&}|d	s|tt||| j|d
 q|tjdkrttd}tt|d| j|d
 dS )z&copy TeX support files from texinputs.Nru   z-L general -C utf8 r/   F)r   Z	xindy_usexindy_lang_optionxindy_cyrilliczcopying TeX support files...Z	texinputs.)rY   ntZtexinputs_winZ
Makefile_t)rv   r   XINDY_LANG_OPTIONSr   XINDY_CYRILLIC_SCRIPTSr   r   rx   r   r"   r   r   r   r   oslistdirr   r&   r   r   )rc   r   r   rY   Zstaticdirnamefilenamerd   rd   re   r   {  s2    

zLaTeXBuilder.copy_support_fileszcopying additional filesc                 C   s:   | j jD ],}tjd| dd tt| j|| j qd S )Nr   Tr   )	rv   r   rx   r   r&   r   r   confdirr   )rc   r   rd   rd   re   r     s    z(LaTeXBuilder.copy_latex_additional_filesc                 C   s   | j rt| jjj}t| j tddt| j | jj|dD ]r}| j | }z"t	t
| j|t
| j| W q8 ty } z(ttdt
| j|| W Y d }~q8d }~0 0 q8| jjrt
t
| j| jjsttd| jj nt	t
| j| jj| j d S )Nzcopying images... Zbrown)stringify_funczcannot copy image file %r: %szlogo file %r does not exist)Zimagesr   r\   r{   Zget_original_image_urir    r   r   	verbosityr&   r   r   Zsrcdirr   	Exceptionrx   ry   rv   r   isfiler   r   )rc   r   srcdesterrrd   rd   re   r     s&    


zLaTeXBuilder.copy_image_filesc                 C   s   | j j}d|dddd|dddd|ddddd}| jd	 sZ| jd
 rld| j  |d< tt	ddd}t
|| j|t d d S )Nz\@idenZfigurer   z%s   tablez
code-block)addtocaptionsZ
figurenameZ	tablenameZliteralblocknamerX   r   z\addto\captions%sr   Z	templatesrT   zsphinxmessages.sty_t)rY   Zrenderer)rv   Znumfig_formatr   splitrY   rX   r   r   r   r   r&   r   r+   )rc   formatsrY   r   rd   rd   re   r     s    z"LaTeXBuilder.write_message_catalogc                 C   s   t jdtdd | jjjS )Nz'LaTeXBuilder.usepackages is deprecated.ru   
stacklevel)warningswarnr   r\   r   r   rb   rd   rd   re   usepackages  s    zLaTeXBuilder.usepackagesc                 C   s   t jdtdd | jjjS )Nz6LaTeXBuilder.usepackages_after_hyperref is deprecated.ru   r   )r   r   r   r\   r   r   rb   rd   rd   re   usepackages_after_hyperref  s    z'LaTeXBuilder.usepackages_after_hyperref)N)N)-__name__
__module____qualname____doc__r   formatr   epilogr   Zsupported_image_typesZsupported_remote_imagesr,   Zdefault_translator_classr^   r   strr   rf   rj   rm   r   r_   r   r`   ra   r   r   r   r   r   r   boolr.   Zdocumentr   r   r   r   r   r   r   propertyr   r   r   rd   rd   rd   re   rS   l   sD   
'
/
+
 
rS   )r\   rv   rV   c                 C   s@   t |jD ]0}|tvr
td}t||f  |j| q
d S )Nz3Unknown configure key: latex_elements[%r], ignored.)rn   r   r   r   rx   ry   popr\   rv   r   msgrd   rd   re   validate_config_values  s
    r   c                 C   sB   t |jD ]2}|tjvr
td}t||f  |j| q
d S )Nz7Unknown theme option: latex_theme_options[%r], ignored.)rn   latex_theme_optionsr   ZUPDATABLE_KEYSr   rx   ry   r   r   rd   rd   re   validate_latex_theme_options  s
    
r   )r\   rV   c                 C   s*   | j jdkr&| j jdv r&| jddd dS )zInstall packages for Japanese.ja)platexuplatexZ	pxjahyperT)Zafter_hyperrefN)rv   r   r   Zadd_latex_packager\   rd   rd   re   install_packages_for_ja  s    r   )rv   rV   c                 C   s8   | j dkrdS | j pddr"dS | j dkr0dS dS dS )	z> Better default latex_engine settings for specific languages. r   r   r   zhxelatexrR   r   N)r   r   rv   rd   rd   re   default_latex_engine  s    

r   c                 C   s2   | j dkr*| jdkrdddS dddS ni S dS )	z@ Better default latex_docclass settings for specific languages. r   r   ZujbookZujreport)manualr   ZjsbookZjreportN)r   r   r   rd   rd   re   default_latex_docclass  s    

r   c                 C   s
   | j dv S )z? Better default latex_use_xindy settings for specific engines. >   lualatexr   )r   r   rd   rd   re   default_latex_use_xindy   s    r   c                 C   sJ   t | j| j}t | j| j}| jt| jd t |t || jfgS )z* Better default latex_documents settings. z.tex)	r!   escapeprojectr   r   Zroot_docr*   Zescape_abbrlatex_theme)rv   r  r   rd   rd   re   default_latex_documents  s    r  c                 C   sZ  |  d | t | jdtdd | jdtdd | dt | dtd t	ddd	d
d | dt
d  | dd d tg | dg d  | ddd  | dtd tg | dd d t	d ddd | ddd tg | ddd  | ddd  | di d  | dg d  | ddd tg | di d  | d g d tg | d!td  d"ddd#S )$Nz sphinx.builders.latex.transformszconfig-initedi   )priorityzbuilder-initedr   r   r   r   r   r   rw   r   r   Zlatex_use_latex_multicolumnFr   Zlatex_toplevel_sectioningpartZchapterr   Zlatex_domain_indicesTZlatex_show_urlsr@   Zlatex_show_pagerefsr   r   r  r   r   Zlatex_theme_pathZlatex_docclassZbuiltin)versionZparallel_read_safeZparallel_write_safe)Zsetup_extensionZadd_builderrS   Zconnectr   r   r   Zadd_config_valuer   r   r  r   r   r   rn   r   r   rd   rd   re   setup  s:    



r  )Yr   r   r   r   typingr   r   r   r   r   r   Zdocutils.frontendr	   Zdocutils.nodesr
   Zsphinx.builders.latex.nodesZsphinxr   r   r   Zsphinx.applicationr   Zsphinx.buildersr   Zsphinx.builders.latex.constantsr   r   r   Zsphinx.builders.latex.themingr   r   Zsphinx.builders.latex.utilr   Zsphinx.configr   r   Zsphinx.deprecationr   Z!sphinx.environment.adapters.assetr   Zsphinx.errorsr   r   Zsphinx.localer   r   Zsphinx.utilr   r   r    r!   Zsphinx.util.consoler"   r#   Zsphinx.util.docutilsr$   r%   Zsphinx.util.fileutilr&   Zsphinx.util.i18nr'   Zsphinx.util.nodesr(   Zsphinx.util.osutilr)   r*   Zsphinx.util.templater+   Zsphinx.writers.latexr,   r-   Zdocutilsr.   r   r   Z	getLoggerr   rx   rS   r   r   r   r   r   r   r   r   r  r  rd   rd   rd   re   <module>   s   
 
9
  g"