U
    \ShJ                     @  s   d Z ddlm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 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"dddddZ#dS )zChangelog builder.    )annotationsN)path)Any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ddd	d
ZddddZ	dddddZ
ddd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.None)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   J/root/rtd-docs/venv/lib/python3.8/site-packages/sphinx/builders/changes.pyr      s    
zChangesBuilder.initstrc                 C  s   | j S N)outdirr   r   r   r   get_outdated_docs$   s    z ChangesBuilder.get_outdated_docsaddedchanged
deprecated)versionaddedversionchangedr&   r   )ignoredr   c              
     s  | j j}tt| jd}i }g }i }||}|sNtt	t
d|  d S tt	t
d |D ]Z}t|jtr|jd }	n|j}	| j|j }
|jdd}|	r|jdr|rd|	 d	|
 d
| }nd|	 d	|
 d}|||j|jf qd|	s|jrp|jptd}|	s"td}	|r@d|	 d	|
 d
| }nd|	 d	|
 d}||g ||j|jf qd|sxqdd|
  d
| }| jj|j  }||j|fg ||j|jf qd| j j|| j j| j jt|  t|t|  | j j!| j j"d	}t#t$%| j&dddd}|'| j()d| W 5 Q R X t#t$%| j&dddd}|'| j()d| W 5 Q R X d| d| d| gddddfdd tt	t
d | jj*D ]}t#| j+|| jj j,dJ}z|- }W n6 t.k
r   t/t
d | Y W 5 Q R  qY nX W 5 Q R X t$%| j&d!t0|d" }t1t$2| t#|dd#dJ}d$% fd%d&t3|D }| j+|d'|d(}|'| j()d)| W 5 Q R X qd*d+ | j45i   D }t6t$%t7d,d-d.d/| j&|| j(d0 t6t$%t7d,d1d.d2| j& d S )3N	changesetzno changes in version %s.zwriting summary file...r   
 zc-apiz<b>z	</b>: <i>z:</i> z</i>.ZBuiltinszModule levelz<i>)	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intr   )noliner   c                   s4   d|  t | } D ]}||krd| } q0q|S )Nz<a name="L%s"> </a>z<span class="hl">%s</span>)htmlescape)r6   r7   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ir7   )r<   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)8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   renderZall_docsZdoc2pathZsource_encoding	readlinesUnicodeDecodeErrorwarningr   r   dirname	enumerater   Zget_optionsr   r   )r   r)   r.   domainr/   r0   r1   Z
changesetsr*   rQ   ZttextrI   entryr[   titlectxfrW   linesZtargetfnrD   Zthemectxr   )r<   r;   r   rc   -   s    



 "  zChangesBuilder.write)rD   r.   r   c              	   C  s>   t |}dD ]*}|d| d| d| d| d}q|S )N)r(   r'   r&   z.. z:: z<b>.. z</b>)r8   r9   rV   )r   rD   r.   	directiver   r   r   r<      s    
zChangesBuilder.hlc                 C  s   d S r    r   r"   r   r   r   finish   s    zChangesBuilder.finishN)__name__
__module____qualname____doc__namer   epilogr   r#   rS   rc   r<   rq   r   r   r   r   r      s   `r   r   zdict[str, Any])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
    
ry   )$ru   
__future__r   r8   osr   typingr   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   	getLoggerrr   rN   r   ry   r   r   r   r   <module>   s$   
 