
    Fe)&                       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mZ dd	lmZmZ dd
lmZ ddl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# 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. erddl/m0Z0 ddl1m2Z2 ddl3m4Z4 ddl5m6Z6  ejn                  e8      Z9ej
                  ju                  edd      Z; G d de      Z<	 	 	 	 d dZ=d!dZ>y)"zTexinfo builder.    )annotationsN)path)TYPE_CHECKINGAny)nodes)OptionParser)
FileOutput)addnodespackage_dir)Builder)ImageAdapter)NoUri)___)logging)	darkgreen)progress_messagestatus_iterator)new_document)copy_asset_file)inline_all_toctrees)SEP	ensuredirmake_filename_from_project)TexinfoTranslatorTexinfoWriter)Iterable)Node)Sphinx)Config	templatestexinfoc                      e Zd ZdZdZdZ ed      Zej                  dk(  re ed      z  Zg dZ	e
ZddZddZddd
ZdddZddZddZ	 	 	 	 	 	 	 	 ddZddZddZddZy	)TexinfoBuilderz=
    Builds Texinfo output to create Info documentation.
    r"   z$The Texinfo files are in %(outdir)s.posixzl
Run 'make' in that directory to run these through makeinfo
(use 'make info' here to do that automatically).)z	image/pngz
image/jpegz	image/gifc                     g | _         g | _        y N)docnamesdocument_dataselfs    9/usr/lib/python3/dist-packages/sphinx/builders/texinfo.pyinitzTexinfoBuilder.init8   s    ')SU    c                     y)Nzall documents r*   s    r,   get_outdated_docsz TexinfoBuilder.get_outdated_docs<   s    r.   Nc                @    || j                   vrt        ||      d|z   S )N%)r(   r   )r+   docnametyps      r,   get_target_urizTexinfoBuilder.get_target_uri?   s%    $--'%%W}r.   c                &    | j                  ||      S r'   )r6   )r+   from_tor5   s       r,   get_relative_urizTexinfoBuilder.get_relative_uriD   s    ""2s++r.   c                   | j                   j                  D cg c]  }t        |       }}|st        j	                  t        d             y g | _        |D ]  }|d   }|| j                  j                  vr t        j	                  t        d      |       @| j                  j                  |       |j                  t        dz         r|d d }| j                  j                  ||d   f        y c c}w )NzGno "texinfo_documents" config value found; no documents will be writtenr   z?"texinfo_documents" config value references unknown document %sindex   )configtexinfo_documentslistloggerwarningr   titlesenvall_docsr)   appendendswithr   )r+   xpreliminary_document_dataentryr4   s        r,   init_document_dataz!TexinfoBuilder.init_document_dataH   s    6:kk6S6S$TT!W$T!$T(NN2 0 1 2-/. 		4EAhGdhh///r #0  129;%%e,g.!#2,KKq23		4 %Us   C2c                   | j                          | j                          | j                  D ]  }|d d \  }}}}|dz  }dx}x}}	t        |      dkD  r	|dd \  }}}	d}
t        |      dkD  r|d   }
t	        t        j                  | j                  |      d      }t        t        d	      |z        5  | j                  j                  xs g }| j                  ||
|
      }d d d        t        t        d            5  | j                         t        |       }t        j                          5  t        j"                  dt$               t'        | j(                  j*                  |fd      j-                         }d d d        |_        ||_        |d d dz   |_        | j                  j4                  |_        |xs d|_        |	xs d|_        |xs d|_        ||_        ||_        |j?                  ||       | jA                  |d d        d d d         y # 1 sw Y   ;xY w# 1 sw Y   xY w# 1 sw Y   xY w)N   z.texi       Fzutf-8)destination_pathencodingzprocessing %s)
appendiceswritingignore)categoryT)defaults
componentsread_config_filesr=   z.info)!rL   copy_assetsr)   lenr	   r   joinoutdirr   r   r?   texinfo_appendicesassemble_doctreepost_process_imagesr   warningscatch_warningsfilterwarningsDeprecationWarningr   rE   settingsget_default_valuesauthortitletexinfo_filenametexinfo_elementstexinfo_dir_entrytexinfo_dir_categorytexinfo_dir_descriptionr4   writecopy_image_files)r+   ignoredrK   r4   
targetnameri   rh   direntrydescriptionrW   toctree_onlydestinationrT   doctree	docwriterrf   s                   r,   ro   zTexinfoBuilder.write[   s<   !'' %	7E16r.GZ'!J022H2{X5zA~27!*/+x L5zA~$Qx$!%4;;
!C "K ""_"5
"BC ^![[;;Ar
//R\/]^ ""Y-0 7((1)$/	,,. E++H?QR %1!%!2!2$-<*.%0 1C0B0D 	E #)!&,6sOg,E),0KK,H,H)-5^*08B-3>3D"0#* #+ 5%%j"o6+7 7!%	7^ ^E E7 7s2   4/H?1H50AH)=BH5H&	)H2.H55H?	c           	        t        |g|z         | _        t        j                  t	        |      dz   d       | j
                  j                  |      }||d<   |rht        d      }t        j                         }|t        j                  dd      z  }||z  }|j                  t        j                        D ]  }||z  }	 |}t        | | j                  ||t        |g      }||d<   |D ]3  }	| j
                  j                  |	      }
|	|
d<   |j                  |
       5 t        j                  d       t        j                  t!        d             | j
                  j#                  |||        |j                  t        j$                        D ]  }|d	   }	|d
   }t        j&                  ||      g}| j(                  D ]  \  }}|	j+                  |      s|j                  t        j,                  t/        d                   |j                  t        j&                  ||             |j                  t        j,                  d              n 	 |j1                  |        |S )N Tnonlr4   z<texinfo output>z<Set title in conf.py>rO   zresolving references...
refdocnamerefsectnamez (in ))setr(   rB   infor   rE   get_doctreer   r   sectionri   findallr
   toctreer   rG   r   resolve_referencespending_xrefemphasisrD   
startswithTextr   replace_self)r+   	indexfileru   rT   treenew_treenew_sectnode	largetreer4   appendixpendingnodesectnamenewnodessubdirri   s                   r,   r`   zTexinfoBuilder.assemble_doctree   s!    YK*45Ii(3.T:xx##I.#Y $$67H}}H$<$<> >H HX%5%56 !D !D'dmmY(1I;@	(	)! 	'Gxx++G4H")HYX&	' 	BB012##Iy$?$,,X-B-BC 	/K!,/G"=1H$)NN8X$F#GH!% %%f-OOEJJqz$:;OOENN5%$@AOOEJJsO4 $$X.	/ r.   c                $    | j                          y r'   )copy_support_filesr*   s    r,   r[   zTexinfoBuilder.copy_assets   s    !r.   c           	        | j                   rt        | j                  j                        j                  }t        | j                   t        d      dt        | j                         | j                  j                  |      D ]~  }| j                   |   }	 t        j                  | j                  |dz         }t        |       t        t        j                  | j                  |      t        j                  ||              y y # t        $ rH}t         j#                  t        d      t        j                  | j                  |      |       Y d }~d }~ww xY w)Nzcopying images... brown)stringify_funcz-figureszcannot copy image file %r: %s)imagesr   apprE   get_original_image_urir   r   r\   	verbosityr   r]   r^   r   r   srcdir	ExceptionrB   rC   )r+   rr   r   srcdestimagedirerrs          r,   rp   zTexinfoBuilder.copy_image_files   s	   ;;)$((,,7NNN&t{{B7K4Lg'*4;;'79K9K6DF E {{3'E#yyj:6MNHh'#DIIdkk3$?$(IIh$=?E  ! ENN2&E#F#'99T[[##>E EEs   A,D	E>EEc                `   	 t        t        d            5  t        j                  dd       t	        t
        j                  j                  t        d      | j                         d d d        y # 1 sw Y   y xY w# t        $ r)}t        j                  t        d      |       Y d }~y d }~ww xY w)Nzcopying Texinfo support filesz	Makefile Tr{   Makefilezerror writing file Makefile: %s)r   r   rB   r   r   osr   r]   template_dirr^   OSErrorrC   )r+   r   s     r,   r   z!TexinfoBuilder.copy_support_files   s    	G!"%D"EF UKd3\: FTU U U  	GNN2?@#FF	Gs5   A; AA/&A; /A84A; 8A; ;	B-B((B-)returnNone)r   zstr | list[str]r'   )r4   strr5   
str | Noner   r   )r8   r   r9   r   r5   r   r   r   )rq   r   r   r   )r   r   ru   boolrT   z	list[str]r   znodes.document)rr   r   r   r   )__name__
__module____qualname____doc__nameformatr   epilogr   supported_image_typesr   default_translator_classr-   r1   r6   r:   rL   ro   r`   r[   rp   r   r0   r.   r,   r$   r$   (   s     DF67F	ww'" H I 	I*0V
,4&(7T**,0*>G*	*X"E Gr.   r$   c                |    t        | j                        }| j                  || j                  | j                  |ddfgS )z, Better default texinfo_documents settings. zOne line description of projectMiscellaneous)r   projectroot_docrh   )r?   filenames     r,   default_texinfo_documentsr      s@     *&..9H__hx.A B Br.   c                V   | j                  t               | j                  dt        d       | j                  dg d       | j                  di d       | j                  dddt        g       | j                  ddd       | j                  d	dd       | j                  d
dd       ddddS )Nr@   Fr_   rk   texinfo_domain_indicesTtexinfo_show_urlsfootnotetexinfo_no_detailmenutexinfo_cross_referencesbuiltin)versionparallel_read_safeparallel_write_safe)add_builderr$   add_config_valuer   rA   )r   s    r,   setupr      s    OON#,.GO-r59+R714G,j%@0%?3T5A "# r.   )r?   r    r   z.list[tuple[str, str, str, str, str, str, str]])r   r   r   zdict[str, Any])?r   
__future__r   r   rb   r   typingr   r   docutilsr   docutils.frontendr   docutils.ior	   sphinxr
   r   sphinx.buildersr   !sphinx.environment.adapters.assetr   sphinx.errorsr   sphinx.localer   r   sphinx.utilr   sphinx.util.consoler   sphinx.util.displayr   r   sphinx.util.docutilsr   sphinx.util.fileutilr   sphinx.util.nodesr   sphinx.util.osutilr   r   r   sphinx.writers.texinfor   r   collections.abcr   docutils.nodesr   sphinx.applicationr   sphinx.configr    	getLoggerr   rB   r]   r   r$   r   r   r0   r.   r,   <module>r      s     " 	   %  * " ( # :    ) A - 0 1 I I C(#)$			8	$ww||Ki@bGW bGJBB3Br.   