B
    d                 @   s   d Z ddlZddlmZ ddlmZmZmZmZ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 ddlmZ ddlmZmZ e e!Z"G dd deZ#eee$ef dddZ%dS )zChangelog builder.    N)path)AnyDictListTuplecast)package_dir)Sphinx)Builder)ChangeSetDomain)___)HTMLThemeFactory)logging)bold)copy_asset_file)	ensurediros_pathc               @   st   e Zd ZdZdZedZddddZeddd	Z	d
dddZ
eddddZeeedddZddddZdS )ChangesBuilderzC
    Write a summary with all versionadded/changed directives.
    changesz#The overview file is in %(outdir)s.N)returnc             C   s2   |    t| j}|d| _| j| | j d S )Ndefault)Zcreate_template_bridger   appcreatetheme	templatesinit)selfZtheme_factory r   d/work/yifan.wang/ringdown/master-ringdown-env/lib/python3.7/site-packages/sphinx/builders/changes.pyr      s    
zChangesBuilder.initc             C   s   | j S )N)outdir)r   r   r   r   get_outdated_docs"   s    z ChangesBuilder.get_outdated_docsaddedchanged
deprecated)versionaddedversionchangedr$   )ignoredr   c          
      s  | j j}tt| jd}i }g }i }||}|sNtt	t
d|  d S tt	t
d xB|D ]8}t|jtr|jd }	n|j}	| j|j }
|jdd}|	r|jdr|rd|	|
|f }nd	|	|
f }|||j|jf qh|	s|jrV|jptd
}|	std}	|r,d|	|
|f }nd	|	|
f }||g ||j|jf qh|s^qhd|
 |f }| jj|j  }||j|fg ||j|jf qhW | j j|| j j| j jt|  t|t|  | j j!| j j"d	}t#t$%| j&dddd}|'| j()d| W d Q R X t#t$%| j&dddd}|'| j()d| W d Q R X d| d| d| gt*t+t+dfdd tt	t
d x| jj,D ]}t#| j-|| jj j.d>}y|/ }W n* t0k
r   t1t
d| wY nX W d Q R X t$%| j&dt2|d }t3t$4| t#|dddJ}d % fd!d"t5|D }| j-|d#|d$}|'| j()d%| W d Q R X qW d&d' | j67i   D }t8t$%t9d(d)d*d+| j&|| j(d, t8t$%t9d(d-d*d.| j& d S )/N	changesetzno changes in version %s.zwriting summary file...r   
 zc-apiz<b>%s</b>: <i>%s:</i> %sz<b>%s</b>: <i>%s</i>.ZBuiltinszModule levelz<i>%s:</i> %s)	projectversionZ	docstitleZ
shorttitle
libchanges
apichangesotherchangesZshow_copyrightZshow_sphinxz
index.htmlwutf8)encodingzchanges/frameset.htmlzchanges.htmlzchanges/versionchanges.htmlz.. versionadded:: %sz.. versionchanged:: %sz.. deprecated:: %s)noliner   c                s6   d|  t | }x D ]}||krd| }P qW |S )Nz<a name="L%s"> </a>z<span class="hl">%s</span>)htmlescape)r3   r4   x)hltextr   r   hll   s    
z ChangesBuilder.write.<locals>.hlzcopying source files...z(could not read %r for changelog creationrstz.htmlzutf-8 c             3   s    | ]\}} |d  |V  qdS )   Nr   ).0ir4   )r9   r   r   	<genexpr>   s    z'ChangesBuilder.write.<locals>.<genexpr>F)filenametextzchanges/rstsource.htmlc             S   s   i | ]\}}|d | qS )Ztheme_r   )r=   keyvalr   r   r   
<dictcomp>   s    z(ChangesBuilder.write.<locals>.<dictcomp>themesr   Zstaticzdefault.css_t)contextrendererbasicz	basic.css):configr,   r   r   envZ
get_domainZget_changesets_forloggerinfor   r   
isinstancedescnametupletypemaptypecontentreplacedocname
startswithappendlinenomoduler   
setdefault
capitalizetitlesZastextr+   Z
html_titleZhtml_short_titlesorteditemsZhtml_show_copyrightZhtml_show_sphinxopenr   joinr    writer   renderintstrZall_docsZdoc2pathZsource_encoding	readlinesUnicodeDecodeErrorwarningr   r   dirname	enumerater   Zget_optionsr   r   )r   r'   r,   domainr-   r.   r/   Z
changesetsr(   rN   ZttextrF   entryrX   titlectxfrT   linesZtargetfnrA   Zthemectxr   )r9   r8   r   r`   +   s    





$zChangesBuilder.write)rA   r,   r   c             C   s8   t |}x(dD ] }|d||f d||f }qW |S )N)r&   r%   r$   z
.. %s:: %sz<b>.. %s:: %s</b>)r5   r6   rS   )r   rA   r,   	directiver   r   r   r9      s
    

zChangesBuilder.hlc             C   s   d S )Nr   )r   r   r   r   finish   s    zChangesBuilder.finish)__name__
__module____qualname____doc__namer   epilogr   rc   r!   rP   r   r`   r9   rp   r   r   r   r   r      s   br   )r   r   c             C   s   |  t ddddS )NbuiltinT)r,   Zparallel_read_safeZparallel_write_safe)Zadd_builderr   )r   r   r   r   setup   s    
rx   )&rt   r5   osr   typingr   r   r   r   r   Zsphinxr   Zsphinx.applicationr	   Zsphinx.buildersr
   Zsphinx.domains.changesetr   Zsphinx.localer   r   Zsphinx.themingr   Zsphinx.utilr   Zsphinx.util.consoler   Zsphinx.util.fileutilr   Zsphinx.util.osutilr   r   	getLoggerrq   rK   r   rc   rx   r   r   r   r   <module>   s"   
 