B
    öÀ„\§)  ã               @   s  d Z ddlZddlmZ ddlmZ ddlmZ ddlmZ ddl	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" ddl#m$Z$m%Z% e &e'¡Z(dZ)G dd„ deƒZ*dd„ Z+dS )zÁ
    sphinx.builders.texinfo
    ~~~~~~~~~~~~~~~~~~~~~~~

    Texinfo builder.

    :copyright: Copyright 2007-2019 by the Sphinx team, see AUTHORS.
    :license: BSD, see LICENSE for details.
é    N)Úpath)Únodes)ÚOptionParser)Ú
FileOutput)Úaddnodes)ÚBuilder)ÚNoUri)ÚImageAdapter)Ú_Ú__)Úlogging)Ústatus_iterator)ÚboldÚ	darkgreen)Únew_document)Úcopy_asset_file)Úinline_all_toctrees)ÚSEPÚmake_filename)ÚTexinfoWriterÚTexinfoTranslatora©  # Makefile for Sphinx Texinfo output

infodir ?= /usr/share/info

MAKEINFO = makeinfo --no-split
MAKEINFO_html = makeinfo --no-split --html
MAKEINFO_plaintext = makeinfo --no-split --plaintext
TEXI2PDF = texi2pdf --batch --expand
INSTALL_INFO = install-info

ALLDOCS = $(basename $(wildcard *.texi))

all: info
info: $(addsuffix .info,$(ALLDOCS))
plaintext: $(addsuffix .txt,$(ALLDOCS))
html: $(addsuffix .html,$(ALLDOCS))
pdf: $(addsuffix .pdf,$(ALLDOCS))

install-info: info
	for f in *.info; do \
	  cp -t $(infodir) "$$f" && \
	  $(INSTALL_INFO) --info-dir=$(infodir) "$$f" ; \
	done

uninstall-info: info
	for f in *.info; do \
	  rm -f "$(infodir)/$$f"  ; \
	  $(INSTALL_INFO) --delete --info-dir=$(infodir) "$$f" ; \
	done

%.info: %.texi
	$(MAKEINFO) -o '$@' '$<'

%.txt: %.texi
	$(MAKEINFO_plaintext) -o '$@' '$<'

%.html: %.texi
	$(MAKEINFO_html) -o '$@' '$<'

%.pdf: %.texi
	-$(TEXI2PDF) '$<'
	-$(TEXI2PDF) '$<'
	-$(TEXI2PDF) '$<'

clean:
	rm -f *.info *.pdf *.txt *.html
	rm -f *.log *.ind *.aux *.toc *.syn *.idx *.out *.ilg *.pla *.ky *.pg
	rm -f *.vr *.tp *.fn *.fns *.def *.defs *.cp *.cps *.ge *.ges *.mo

.PHONY: all info plaintext html pdf install-info uninstall-info clean
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	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S )ÚTexinfoBuilderz=
    Builds Texinfo output to create Info documentation.
    Ztexinfoz$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             C   s   g | _ g | _d S )N)ÚdocnamesÚdocument_data)Úself© r   ú6lib/python3.7/site-packages/sphinx/builders/texinfo.pyÚinito   s    zTexinfoBuilder.initc             C   s   dS )Nzall documentsr   )r   r   r   r   Úget_outdated_docst   s    z TexinfoBuilder.get_outdated_docsNc             C   s   || j krt‚nd| S d S )Nú%)r   r   )r   ÚdocnameÚtypr   r   r   Úget_target_urix   s    
zTexinfoBuilder.get_target_uric             C   s   |   ||¡S )N)r#   )r   Zfrom_Útor"   r   r   r   Úget_relative_uri   s    zTexinfoBuilder.get_relative_uric             C   s    dd„ | j jD ƒ}|s(t tdƒ¡ d S g | _xl|D ]d}|d }|| jjkr^t tdƒ|¡ q4| j 	|¡ | 
td ¡r„|d d… }| j 	||d f¡ q4W d S )	Nc             S   s   g | ]}t |ƒ‘qS r   )Úlist)Ú.0Úxr   r   r   ú
<listcomp>†   s    z5TexinfoBuilder.init_document_data.<locals>.<listcomp>zGno "texinfo_documents" config value found; no documents will be writtenr   z?"texinfo_documents" config value references unknown document %sÚindexéûÿÿÿé   )ÚconfigÚtexinfo_documentsÚloggerÚwarningr   ÚtitlesÚenvZall_docsr   ÚappendÚendswithr   )r   Zpreliminary_document_dataÚentryr!   r   r   r   Úinit_document_data„   s    

z!TexinfoBuilder.init_document_datac             G   sn  |   ¡  x^| jD ]R}|d d… \}}}}|d7 }d } }}	t|ƒdkr^|dd… \}}}	d}
t|ƒdkrv|d }
tt | j|¡dd}tjt	d	ƒ|d
d | j
||
| jjp²g d}tjt	dƒd
d |  |¡ t| ƒ}t| jj|fdd ¡ }||_||_|d d… d |_| jj|_|p$d|_|	p0d|_|p<d|_||_||_| ||¡ t t	dƒ¡ qW d S )Né   z.texiÚ é   é   Fzutf-8)Zdestination_pathÚencodingzprocessing %s...é   )Únonl)Ú
appendiceszwriting... T)ÚdefaultsZ
componentsZread_config_filesr+   z.infoZdone)r6   r   Úlenr   r   ÚjoinÚoutdirr/   Úinfor   Úassemble_doctreer-   Útexinfo_appendicesZpost_process_imagesr   r   r2   ÚsettingsZget_default_valuesÚauthorÚtitleZtexinfo_filenameÚtexinfo_elementsZtexinfo_dir_entryZtexinfo_dir_categoryZtexinfo_dir_descriptionr!   Úwrite)r   Zignoredr5   r!   Z
targetnamerH   rG   ZdirentryZdescriptionÚcategoryÚtoctree_onlyZdestinationZdoctreeZ	docwriterrF   r   r   r   rJ   ˜   sF    

zTexinfoBuilder.writec          	   C   s   t |g| ƒ| _tjt|ƒd dd | j |¡}||d< |rˆtdƒ}t 	¡ }|t 
dd¡7 }||7 }x| tj¡D ]}||7 }qtW |}t| | j||t|gƒ}||d< x*|D ]"}	| j |	¡}
|	|
d< | |
¡ q¬W t d¡ t tdƒ¡ | j ||| ¡ x | tj¡D ]}|d	 }	|d
 }t ||¡g}x`| jD ]V\}}|	 |¡r2| t tdƒtdƒ¡¡ | t ||¡¡ | t dd¡¡ P q2W | |¡ qW |S )Nú r<   )r=   r!   z<texinfo output>z<Set title in conf.py>r8   zresolving references...Z
refdocnameZrefsectnamez (in ú))Úsetr   r/   rC   r   r2   Zget_doctreer   r   ZsectionrH   Ztraverser   Ztoctreer   r3   r   Zresolve_referencesZpending_xrefZemphasisr1   Ú
startswithZTextr
   Zreplace_self)r   Z	indexfilerL   r>   ZtreeZnew_treeZnew_sectZnodeZ	largetreer!   ZappendixZpendingnodeZsectnameZnewnodesZsubdirrH   r   r   r   rD   ¾   sF    


zTexinfoBuilder.assemble_doctreec          
   C   sª   |   ¡  tjttdƒƒdd t | jd¡}tj|dd y$t|dƒ}| 	t
¡ W d Q R X W n8 ttfk
r– } zt tdƒ||¡ W d d }~X Y nX t tdƒ¡ d S )	Nz!copying Texinfo support files... T)r=   ZMakefiler<   Úwzerror writing file %s: %sz done)Úcopy_image_filesr/   rC   r   r   r   rA   rB   ÚopenrJ   ÚTEXINFO_MAKEFILEÚIOErrorÚOSErrorr0   )r   ÚfnZmkfileÚerrr   r   r   Úfinishé   s    $zTexinfoBuilder.finishc             C   s²   | j r®t| jjƒj}x˜t| j tdƒdt| j ƒ| jj|dD ]p}| j | }y"t	t
 | j|¡t
 | j|¡ƒ W q: tk
r¨ } z t tdƒt
 | j|¡|¡ W d d }~X Y q:X q:W d S )Nzcopying images... Zbrown)Ústringify_funczcannot copy image file %r: %s)Zimagesr	   Úappr2   Zget_original_image_urir   r   r@   Ú	verbosityr   r   rA   ZsrcdirrB   Ú	Exceptionr/   r0   )r   rZ   ÚsrcÚdestrX   r   r   r   rR   ø   s    

zTexinfoBuilder.copy_image_files)N)N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚnameÚformatr   ZepilogÚosZsupported_image_typesr   Zdefault_translator_classr   r   r#   r%   r6   rJ   rD   rY   rR   r   r   r   r   r   _   s$   


&+r   c             C   sr   |   t¡ |  ddd„ d ¡ |  dg d ¡ |  di d ¡ |  ddd tg¡ |  dd	d ¡ |  d
dd ¡ ddddœS )Nr.   c             S   s2   | j t| jƒ ¡ | jdt| jƒdt| jƒ dfgS )Nr8   zThe %s reference manual.ÚPython)Z
master_docr   ZprojectÚlower)r   r   r   r   Ú<lambda>  s   
zsetup.<locals>.<lambda>rE   rI   Ztexinfo_domain_indicesTZtexinfo_show_urlsZfootnoteZtexinfo_no_detailmenuFZbuiltin)ÚversionZparallel_read_safeZparallel_write_safe)Zadd_builderr   Zadd_config_valuer&   )r[   r   r   r   Úsetup  s    
rk   ),rc   rf   r   Zdocutilsr   Zdocutils.frontendr   Zdocutils.ior   Zsphinxr   Zsphinx.buildersr   Zsphinx.environmentr   Z!sphinx.environment.adapters.assetr	   Zsphinx.localer
   r   Zsphinx.utilr   r   Zsphinx.util.consoler   r   Zsphinx.util.docutilsr   Zsphinx.util.fileutilr   Zsphinx.util.nodesr   Zsphinx.util.osutilr   r   Zsphinx.writers.texinfor   r   Z	getLoggerr`   r/   rT   r   rk   r   r   r   r   Ú<module>
   s.   
5 *