U
    \Sh^                  +   @  s  d Z ddlmZ ddlZddl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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%m&Z& ddl'm(Z(m)Z) ddl*m+Z+m,Z, ddl-m.Z.m/Z/ ddl0m1Z1m2Z2 ddl3m4Z4m5Z5 ddl6m7Z7 ddl8m9Z9 ddl:m;Z; ddl<m=Z=m>Z> ddl?m@Z@ ddlAmBZBmCZC ddlDmEZE dddd d!d"d#d$d%d&d'd(d)d*d+d,d-d-d.d.d/d0d1d2d3d4d5d6d7d7d8d9d:d;d<d=d>d>d>d?d@dAdB*ZFdCdDdEdFdGdHdIdJgZGe+HeIZJG dKdL dLeZKdMdNdOdPdQdRZLdMdNdOdPdSdTZMdMdOdUdVdWZNdNdXdYdZd[ZOdNd\dYd]d^ZPdNd_dYd`daZQdNdbdYdcddZRdMdedUdfdgZSdS )hzLaTeX builder.    )annotationsN)path)AnyIterable)OptionParser)Node)addnodeshighlightingpackage_dir)Sphinx)Builder)ADDITIONAL_SETTINGSDEFAULT_SETTINGSSHORTHANDOFF)ThemeThemeFactory)ExtBabel)ENUMConfig)ImageAdapter)NoUriSphinxError)___)logging	texescape)bold	darkgreen)progress_messagestatus_iterator)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 z-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hsbhsvibebgmkmnrusrzsh-cyrlshukelz
el-polytonrF   rG   rH   rI   rJ   rK   rL   rM   c                   @  s  e Zd ZdZdZdZedZejdkr2eed7 ZdddgZ	d	Z
eZd
dddZddddZdEddddddZdFddd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d
dd$d%Zd
dd&d'Zd(d
d)d*d+Zddd,d-d.Zddd/d
d0d1d2Zdd3d4d5d6d7d8Zd
dd9d:Zeed;d
dd<d=Zeed>d
dd?d@Zd
ddAdBZ d
ddCdDZ!dS )G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/jpegFNone)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 ra   Q/root/rtd-docs/venv/lib/python3.8/site-packages/sphinx/builders/latex/__init__.pyr[   v   s    zLaTeXBuilder.initzstr | list[str]c                 C  s   dS )Nzall documentsra   r_   ra   ra   rb   get_outdated_docs   s    zLaTeXBuilder.get_outdated_docsNstrz
str | None)docnametyprS   c                 C  s   || j krt||d| S )N%)rW   r   )r`   re   rf   ra   ra   rb   get_target_uri   s    

zLaTeXBuilder.get_target_uri)from_torf   rS   c                 C  s   |  ||S rT   )rh   )r`   ri   rj   rf   ra   ra   rb   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kr\ttd| q2| j	| |
td r|d d }| j	||d f q2d S )	Nc                 S  s   g | ]}t |qS ra   )list).0xra   ra   rb   
<listcomp>   s     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_docsrX   appendendswithr%   )r`   Zpreliminary_document_dataentryre   ra   ra   rb   init_document_data   s     
zLaTeXBuilder.init_document_datac                 C  s6  t  | _| jt| jji  | jj| jjd d f}| jt|i  | j| jj	 | jj
| jd< | jj| jd< d| jjk| jd< d| jjk| jd< d| jjk| jd< | jjr| jj| jd< n"t| jjptd| jjd	| jd< | jjrt| jj| jd
< td| jd< | jj
r2| jdtd d S )Nrr   releaseZ	use_xindybooktabsZ
borderless	colorrowsdatez	%b %d, %Y)languageZlogofilenameIndexZ	indexnameZreleasenameZRelease)r   copyrV   updater   getrs   latex_enginer   latex_elementsr}   latex_use_xindylatex_table_styletodayr#   Z	today_fmtr   
latex_logor   basename
setdefault)r`   keyra   ra   rb   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.packagesZpackages_after_hyperrefN)rY   registryZlatex_packagesrV   Zlatex_packages_after_hyperref)r`   r   ra   ra   rb   update_context   s    zLaTeXBuilder.update_contextc                 C  s:   t | jj| jd  | _| j s6ttd| jj d S )NrU   z%no Babel option known for language %r)	r   rs   r   rV   rU   Zis_supported_languageru   rv   r   r_   ra   ra   rb   r]      s
    

zLaTeXBuilder.init_babelc                 C  sz  | j d dkr| j s^d| j d kr<d| j d< d| j d< n"d	| j d kr^d| j d< d
| j d< d| j d k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< t| j d< | j rd| jjkrd| j d< nz| j d rv| j d  d| j  7  < | j }|rNd| d| j  d}nd| j  }| j d  d| | 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fontsubstitutionrU   Zclassoptions,ZmultilingualZshorthandoffZfontpkgpolyglossiaz\setmainlanguage[z]{}z\setmainlanguage{%s}
)rV   rU   Zuses_cyrillicget_languager   rs   r   Zget_mainlanguage_options)r`   optionsr   ra   ra   rb   r^      s4    








zLaTeXBuilder.init_multilingualc              	   C  sh   t d| jj}t| jd}t|ddd2}|d |d |d ||	  W 5 Q R X d S )	NrP   zsphinxhighlight.stywutf-8)encodingz%\NeedsTeXFormat{LaTeX2e}[1995/12/01]
zX\ProvidesPackage{sphinxhighlight}[2022/06/30 stylesheet for highlighting with pygments]
zA% Its contents depend on pygments_style configuration variable.

)
r	   ZPygmentsBridgers   pygments_styler   joinoutdiropenwriteZget_stylesheet)r`   highlighter
stylesheetfra   ra   rb   write_stylesheet   s    


zLaTeXBuilder.write_stylesheetc                 C  s   |    | jjr|   d S rT   )copy_support_filesrs   latex_additional_filescopy_latex_additional_filesr_   ra   ra   rb   copy_assets  s    zLaTeXBuilder.copy_assetsr   )ignoredrS   c              
   G  s  t | }t , tjdtd t| jj|fdd }W 5 Q R X | 	  | 
  |   | jD ]n}|d d \}}}}}	| j|	}
d}t|dkr|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 5 Q R X ttdB ||_$||_%|d |_&||_'|
j|_(||_|
|_)|*|| W 5 Q R X q`d S )Nignore)categoryT)defaults
componentsZread_config_files   Fr   )Zdestination_pathr   Zoverwrite_if_changedzprocessing %sZmaxdepthr   howto)
appendicesdocclasscontentsnametocdepthwriting)+r)   warningscatch_warningsfilterwarningsDeprecationWarningr   rx   settingsget_default_valuesr|   r   r   rX   rZ   r   lenr    r   r   r   r   r   get_doctreenextfindallr   toctreeassemble_doctreenamers   latex_appendicesr   get_contentsnameZpost_process_imagesupdate_doc_contextr   Z_author_titleZ_contentsnameZ_docnameZ	_docclassthemer   )r`   r   Z	docwriterZdocsettingsr{   re   Z
targetnametitleauthorZ	themenamer   toctree_onlyZdestinationZdoctreer   r   ra   ra   rb   r     s^    
  


zLaTeXBuilder.write)	indexfilerS   c                 C  s:   | j |}d }|tjD ]}d|kr|d } q6q|S )Ncaption)rx   r   r   r   r   )r`   r   treer   r   ra   ra   rb   r   ;  s    zLaTeXBuilder.get_contentsnamer   )r   r   r   rS   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)rV   r   r   r   r   )r`   r   r   r   ra   ra   rb   r   E  s    

zLaTeXBuilder.update_doc_contextboolz	list[str]znodes.document)r   r   r   rS   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 ]R\}}|	|r&|ttd |t|| |td  qzq&|| q|S )N TZnonlre   z<latex output>z<Set title in conf.py>r   zresolving references...Z
refdocnameZrefsectnamez (in ))setrW   ru   infor   rx   r   r!   r*   sectionr   r   r   r   r$   ry   r   Zresolve_referencesZpending_xrefZemphasisrw   
startswithTextr   Zreplace_self)r`   r   r   r   r   Znew_treeZnew_sectnodeZ	largetreere   ZappendixZpendingnodesectnameZnewnodessubdirr   ra   ra   rb   r   M  sL    
 

zLaTeXBuilder.assemble_doctreec                 C  s   |    |   d S rT   )copy_image_fileswrite_message_catalogr_   ra   ra   rb   finishz  s    zLaTeXBuilder.finishzcopying TeX support filesc                 C  s   t | jjdd d}| jjdd tk}| jj| jj||d}tt	t
d ttd}t|D ]&}|dsjtt||| j|d qjtjd	krttd
}tt|d| j|d dS )z&copy TeX support files from texinputs.Nrr   z-L general -C utf8 )r   Z	xindy_usexindy_lang_optionxindy_cyrilliczcopying TeX support files...Z	texinputs.)rV   ntZtexinputs_winZ
Makefile_t)XINDY_LANG_OPTIONSr   rs   r   XINDY_CYRILLIC_SCRIPTSr   r   ru   r   r   r   r   r   r
   oslistdirr   r"   r   r   )r`   r   r   rV   Zstaticdirnamefilenamera   ra   rb   r   ~  s.    
 
 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   )	rs   r   ru   r   r"   r   r   confdirr   )r`   r   ra   ra   rb   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 ]p}| j | }z"t	t
| j|t
| j| W q8 tk
r } z ttdt
| j|| W 5 d }~X Y q8X q8| jjrt
t
| j| jjsttd| jj 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   rY   rx   Zget_original_image_urir   r   r   	verbosityr"   r   r   srcdirr   	Exceptionru   rv   rs   r   isfiler   r   )r`   r   srcdesterrra   ra   rb   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literalblocknamerU   r   z\addto\captions%sr   Z	templatesrP   zsphinxmessages.sty_t)rV   renderer)rs   Znumfig_formatr   splitrV   rU   r   r   r   r
   r"   r   r'   )r`   formatsrV   r   ra   ra   rb   r     s    z"LaTeXBuilder.write_message_catalog)N)N)"__name__
__module____qualname____doc__r   formatr   epilogr   Zsupported_image_typesZsupported_remote_imagesr(   Zdefault_translator_classr[   rc   rh   rk   r|   r\   r   r]   r^   r   r   r   r   r   r   r   r   r   r   r   r   ra   ra   ra   rb   rO   f   s>   

!&
4
-

rO   r   r   rR   )rY   rs   rS   c                 C  s@   t |jD ]0}|tkr
td}t||f  |j| q
d S )Nz3Unknown configure key: latex_elements[%r], ignored.)rl   r   r   r   ru   rv   poprY   rs   r   msgra   ra   rb   validate_config_values  s
    r  c                 C  sB   t |jD ]2}|tjkr
td}t||f  |j| q
d S )Nz7Unknown theme option: latex_theme_options[%r], ignored.)rl   latex_theme_optionsr   ZUPDATABLE_KEYSr   ru   rv   r   r   ra   ra   rb   validate_latex_theme_options  s
    
r  )rY   rS   c                 C  s*   | j jdkr&| j jdkr&| jddd dS )zInstall packages for Japanese.ja)platexuplatexZ	pxjahyperT)Zafter_hyperrefN)rs   r   r   Zadd_latex_packagerY   ra   ra   rb   install_packages_for_ja  s    r  rd   )rs   rS   c                 C  s0   | j dkrdS | j drdS | j dkr,dS dS )z> Better default latex_engine settings for specific languages. r  r  zhxelatexrN   r   )r   r   rs   ra   ra   rb   default_latex_engine  s    

r  zdict[str, str]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  ra   ra   rb   default_latex_docclass  s    

r  r   c                 C  s
   | j dkS )z? Better default latex_use_xindy settings for specific engines. >   r
  lualatex)r   r  ra   ra   rb   default_latex_use_xindy  s    r  z$list[tuple[str, str, str, str, str]]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)rs   r  r   ra   ra   rb   default_latex_documents  s    r  zdict[str, Any]c                 C  sp  |  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gdtg | 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   Fr   r
  r  r  r  rt   r   r   Zlatex_use_latex_multicolumnr   Zlatex_toplevel_sectioningpartZchapterr   Zlatex_domain_indicesTZlatex_show_urlsr;   Zlatex_show_pagerefsr   r   r   r~   r   r  r  r  Zlatex_theme_pathZlatex_docclassbuiltin)versionZparallel_read_safeZparallel_write_safe)Zsetup_extensionZadd_builderrO   connectr  r  r  Zadd_config_valuer  r   r  rd   r  r   rl   r  r  ra   ra   rb   setup  s<    



r  )Tr   
__future__r   r   r   r   typingr   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.environment.adapters.assetr   Zsphinx.errorsr   r   Zsphinx.localer   r   Zsphinx.utilr   r   Zsphinx.util.consoler   r   Zsphinx.util.displayr   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   	getLoggerr   ru   rO   r  r  r  r  r  r  r  r  ra   ra   ra   rb   <module>   s   
:       
  _