U
    \Sh+                     @  sN  d 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	m
Z
 ddlmZmZmZ ddlm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 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-m.Z. ddl/m0Z0m1Z1 ddl2m3Z3m4Z4m5Z5 ddl6m7Z7 ddl8m9Z9 e&:e;Z<G dd dZ=G dd dZ>G dd dZ?G dd  d e9Z@G d!d" d"e7ZAG d#d$ d$e ZBe ZCeDeCZEejDeCe	jFd%ZGeEeGjHd&d' ZIed(ZJeJd&k	reKeJZCedZIG d)d* d*e
ZLeL ZMd+d+d,d-d.d/ZNG d0d1 d1eBZOd2d3d4d5d6ZPd&S )7z The MessageCatalogBuilder class.    )annotations)open)defaultdict)datetime	timedeltatimezonetzinfo)getenvpathwalk)time)Any	GeneratorIterable)uuid4)nodes)Element)addnodespackage_dir)Sphinx)Builder)
ThemeError)__)loggingsplit_index_msg)bold)status_iterator)CatalogInfodocname_to_domain)extract_messagestraverse_translatable_index)
canon_path	ensuredirrelpath)Tags)SphinxRendererc                   @  s"   e Zd ZdZddddddZdS )	Messagez!An entry of translatable message.strzlist[tuple[str, int]]z	list[str]text	locationsuuidsc                 C  s   || _ || _|| _d S Nr(   )selfr)   r*   r+    r.   J/root/rtd-docs/venv/lib/python3.8/site-packages/sphinx/builders/gettext.py__init__#   s    zMessage.__init__N__name__
__module____qualname____doc__r0   r.   r.   r.   r/   r&   !   s   r&   c                   @  s>   e Zd ZdZddddZddddd	d
ZddddZdS )Catalogz!Catalog of translatable messages.Nonereturnc                 C  s   g | _ i | _d S r,   )messagesmetadatar-   r.   r.   r/   r0   ,   s    zCatalog.__init__r'   zElement | MsgOrigin)msgoriginr9   c                 C  s^   t |dsd S || jkr.| j| g | j|< |j}|d kr@d}| j| |j||jf d S )Nuid)hasattrr;   r:   appendlinesourcer?   )r-   r=   r>   rC   r.   r.   r/   add2   s    


zCatalog.addzGenerator[Message, None, None]c                 c  sJ   | j D ]>}tdd | j| D }dd | j| D }t|||V  qd S )Nc                 S  s   h | ]\}}}||fqS r.   r.   .0rD   rC   uuidr.   r.   r/   	<setcomp>A   s     z#Catalog.__iter__.<locals>.<setcomp>c                 S  s   g | ]\}}}|qS r.   r.   rF   r.   r.   r/   
<listcomp>C   s     z$Catalog.__iter__.<locals>.<listcomp>)r:   sortedr;   r&   )r-   messageZ	positionsr+   r.   r.   r/   __iter__?   s    
zCatalog.__iter__N)r2   r3   r4   r5   r0   rE   rM   r.   r.   r.   r/   r6   )   s   r6   c                   @  s"   e Zd ZdZddddddZdS )		MsgOriginz3
    Origin holder for Catalog message origin.
    r'   intr7   )rD   rC   r9   c                 C  s   || _ || _t j| _d S r,   )rD   rC   r   hexr?   )r-   rD   rC   r.   r.   r/   r0   L   s    zMsgOrigin.__init__Nr1   r.   r.   r.   r/   rN   G   s   rN   c                      s>   e Zd Zddddd fddZdddd	 fd
dZ  ZS )GettextRendererN
str | Noner7   )template_pathoutdirr9   c                   sT   || _ |d krttdd}t | ddddd}|| jjd< || jjd< d S )	N	templatesgettextr'   sr9   c                 S  s$   |  dd} |  dd} |  ddS )N\z\\"z\"
z\n"
")replacerX   r.   r.   r/   escape[   s    z(GettextRenderer.__init__.<locals>.escapeer^   )rT   r
   joinr   superr0   envfilters)r-   rS   rT   r^   	__class__r.   r/   r0   S   s    zGettextRenderer.__init__r'   dict[str, Any])filenamecontextr9   c                   s*   ddd fdd}||d< t  ||S )Nr'   rW   c                   s   t t|  jS r,   )r!   r#   rT   r]   r<   r.   r/   _relpathe   s    z(GettextRenderer.render.<locals>._relpathr#   )ra   render)r-   rg   rh   ri   rd   r<   r/   rj   d   s    zGettextRenderer.render)NN)r2   r3   r4   r0   rj   __classcell__r.   r.   rd   r/   rQ   R   s      rQ   c                   @  s    e Zd ZdZdddddZdS )I18nTagszDummy tags module for I18nBuilder.

    To translate all text inside of only nodes, this class
    always returns True value even if no tags are defined.
    r   bool)	conditionr9   c                 C  s   dS )NTr.   )r-   rn   r.   r.   r/   eval_conditionr   s    zI18nTags.eval_conditionN)r2   r3   r4   r5   ro   r.   r.   r.   r/   rl   l   s   rl   c                      s   e Zd ZdZdZdZdZdd fddZdd
d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ddZ  ZS )I18nBuilderz
    General i18n builder.
    Zi18nr)   Fr7   r8   c                   s6   t    | j| j| jjj t | _t	t
| _d S r,   )ra   initrb   Zset_versioning_methodversioning_methodconfiggettext_uuidrl   tagsr   r6   catalogsr<   rd   r.   r/   rq   ~   s    

zI18nBuilder.initNr'   rR   )docnametypr9   c                 C  s   dS )N r.   )r-   rw   rx   r.   r.   r/   get_target_uri   s    zI18nBuilder.get_target_uriset[str]c                 C  s   | j jS r,   )rb   Z
found_docsr<   r.   r.   r/   get_outdated_docs   s    zI18nBuilder.get_outdated_docs)docnamesr9   c                 C  s   d S r,   r.   )r-   r}   r.   r.   r/   prepare_writing   s    zI18nBuilder.prepare_writingzset[CatalogInfo])rv   rL   r9   c                 C  s   d S r,   r.   )r-   rv   rL   r.   r.   r/   compile_catalogs   s    zI18nBuilder.compile_catalogsznodes.document)rw   doctreer9   c                 C  s   | j t|| jj }| jj| tjD ](}t	|D ]\}}d|_
||| q4q(t	|D ]\}}||| qZd| jjjkrt|D ]8\}}|D ]*\}}	}
}}t||	D ]}||| qqqd S )Nry   index)rv   r   rs   gettext_compactrb   Ztocsfindallr   toctreer   r?   rE   gettext_additional_targetsr    r   )r-   rw   r   catalogr   noder=   entriesZ
entry_typevalueZ
_target_id_mainZ_category_keymr.   r.   r/   	write_doc   s    zI18nBuilder.write_doc)N)r2   r3   r4   r5   namerr   Zuse_message_catalogrq   rz   r|   r~   r   r   rk   r.   r.   rd   r/   rp   v   s   rp   )tzN)r   SOURCE_DATE_EPOCHc                      sV   e Zd Zdddd fddZdddd	d
ZdddddZdddddZ  ZS )LocalTimeZoner   r7   )argskwargsr9   c                   s   t  j|| t| _d S r,   )ra   r0   tzdelta)r-   r   r   rd   r.   r/   r0      s    zLocalTimeZone.__init__zdatetime | Noner'   )dtr9   c                 C  s   dS )Nlocalr.   r-   r   r.   r.   r/   tzname   s    zLocalTimeZone.tznamer   c                 C  s   | j S r,   )r   r   r.   r.   r/   	utcoffset   s    zLocalTimeZone.utcoffsetc                 C  s   t dS Nr   )r   r   r.   r.   r/   dst   s    zLocalTimeZone.dst)r2   r3   r4   r0   r   r   r   rk   r.   r.   rd   r/   r      s   r   r'   rm   )filepathnew_contentr9   c              
   C  s   t | sdS zt| ddp}| }|d}|d}|d}|d}|d | |d | kp|||d  ||d  kW  5 Q R  W S Q R X W n tk
r   Y nX dS )NTutf-8encodingz"POT-Creation-Date:z"PO-Revision-Date:)r
   existsr   readr   
ValueError)r   r   ZoldpotZold_contentZold_header_indexZnew_header_indexZold_body_indexZnew_body_indexr.   r.   r/   should_write   s    




r   c                      sz   e Zd ZdZdZedZdd fddZddd	d
ZddddZ	dddddd fddZ
dd fddZ  ZS )MessageCatalogBuilderz=
    Builds gettext-style message catalogs (.pot files).
    rV   z'The message catalogs are in %(outdir)s.r7   r8   c                   s"   t    |   | j|  d S r,   )ra   rq   Zcreate_template_bridgerU   r<   rd   r.   r/   rq      s    
zMessageCatalogBuilder.initr{   c           	      C  sj   t  }| jjD ]V}t| jj|}t|D ]8\}}}|D ](}|dr8t	t||}|
| q8q*q|S )Nz.html)setrs   Ztemplates_pathr
   r`   appsrcdirr   endswithr!   rE   )	r-   Ztemplate_filesrS   Ztmpl_abs_pathdirpath_dirsfilesfnrg   r.   r.   r/   _collect_templates   s    
z(MessageCatalogBuilder._collect_templatesc                 C  s   t |  }|  tjttd| j dd ttdt| | j	j
j}t|tddt|| jjD ]}zTt|dd}| }W 5 Q R X ||D ]&\}}}t||}	| jd	 ||	 qW qj tk
r }
 zt| d
|
|
W 5 d }
~
X Y qjX qjd S )Nzbuilding [%s]: T)Znonlztargets for %d template fileszreading templates... purpler   r   sphinxz: )listr   sortloggerinfor   r   r   lenrU   environmentextract_translationsr   r   	verbosityr   r   rN   rv   rE   	Exceptionr   )r-   r   r   templatefrh   rC   Z_methr=   r>   excr.   r.   r/   _extract_from_template   s"    
 
z,MessageCatalogBuilder._extract_from_templateNupdatezIterable[str] | NonerR   r'   )r}   summarymethodr9   c                   s   |    t ||| d S r,   )r   ra   build)r-   r}   r   r   rd   r.   r/   r      s    zMessageCatalogBuilder.buildc              
     s   t    | jj| jj| jj| jj| jjt	t
td| jj| jjd}t| j tddt| j| jjdd D ]\}}tt| jt| t||d< t| jdd	|}t| j|d
 }t||rtt|ddd}| | W 5 Q R X qtd S )Nz%Y-%m-%d %H:%M%z)version	copyrightprojectZlast_translatorZlanguage_teamctimeZdisplay_locationZdisplay_uuidzwriting message catalogs... Z	darkgreenc                 S  s   | d S r   r.   )Ztextdomain__r.   r.   r/   <lambda>      z.MessageCatalogBuilder.finish.<locals>.<lambda>r:   )rT   zmessage.pot_tz.potwr   r   )!ra   finishrs   r   r   r   gettext_last_translatorgettext_language_teamr   fromtimestamp	timestampltzstrftimegettext_locationrt   r   rv   itemsr   r   r   r   r"   r
   r`   rT   dirnamer   rQ   rj   r   r   write)r-   rh   
textdomainr   contentZpofnZpofilerd   r.   r/   r   	  s0    


 
zMessageCatalogBuilder.finish)Nr   )r2   r3   r4   r5   r   r   epilogrq   r   r   r   r   rk   r.   r.   rd   r/   r      s     	r   r   rf   )r   r9   c                 C  s~   |  t | dddtth | ddd | ddd | ddd | d	g d | d
dd | ddd ddddS )Nr   TrV   r   rt   FZgettext_auto_buildrb   r   r   zFULL NAME <EMAIL@ADDRESS>r   zLANGUAGE <LL@li.org>builtin)r   Zparallel_read_safeZparallel_write_safe)Zadd_builderr   Zadd_config_valuerm   r'   )r   r.   r.   r/   setup&  s    
r   )Qr5   
__future__r   codecsr   collectionsr   r   r   r   r   osr	   r
   r   r   typingr   r   r   rH   r   Zdocutilsr   Zdocutils.nodesr   r   r   r   Zsphinx.applicationr   Zsphinx.buildersr   Zsphinx.errorsr   Zsphinx.localer   Zsphinx.utilr   r   Zsphinx.util.consoler   Zsphinx.util.displayr   Zsphinx.util.i18nr   r   Zsphinx.util.nodesr   r    Zsphinx.util.osutilr!   r"   r#   Zsphinx.util.tagsr$   Zsphinx.util.templater%   	getLoggerr2   r   r&   r6   rN   rQ   rl   rp   r   r   Z
local_timeutcZutc_timer\   r   source_date_epochfloatr   r   r   r   r   r.   r.   r.   r/   <module>   sV   

/

P