B
    .Kc,                 @   sT  d Z ddlmZ ddlmZmZ ddl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mZmZ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 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.m/Z/ ddl0m1Z1 ddl2m3Z3m4Z4 ddl5m6Z6m7Z7 ddl8m9Z9m:Z:m;Z; ddl<m=Z= ddl>m?Z? e-@eAZBG dd dZCG dd dZDG dd dZEG dd de?ZFG d d! d!e=ZGG d"d# d#e%ZHe ZIeJeIeKeI ZLe
d$ZMeMd%k	r eNeMZIedZLG d&d' d'eZOeO ZPeQeQeRd(d)d*ZSG d+d, d,eHZTe#eeQef d-d.d/ZUd%S )0z The MessageCatalogBuilder class.    )open)OrderedDictdefaultdict)datetime	timedeltatzinfo)getenvpathwalk)time)
AnyDefaultDictDict	GeneratorIterableListOptionalSetTupleUnion)uuid4)nodes)Element)addnodespackage_dir)Sphinx)Builder)pairindextypes)
ThemeError)__)loggingsplit_index_msgstatus_iterator)bold)CatalogInfodocname_to_domain)extract_messagestraverse_translatable_index)
canon_path	ensuredirrelpath)Tags)SphinxRendererc               @   s2   e Zd ZdZeeeeef  ee dddZdS )Messagez!An entry of translatable message.)text	locationsuuidsc             C   s   || _ || _|| _d S )N)r.   r/   r0   )selfr.   r/   r0    r2   6lib/python3.7/site-packages/sphinx/builders/gettext.py__init__"   s    zMessage.__init__N)	__name__
__module____qualname____doc__strr   r   intr4   r2   r2   r2   r3   r-       s   r-   c               @   sP   e Zd ZdZddddZeeedf dddd	Ze	e
ddf dd
dZdS )Catalogz!Catalog of translatable messages.N)returnc             C   s   g | _ t | _d S )N)messagesr   metadata)r1   r2   r2   r3   r4   +   s    zCatalog.__init__	MsgOrigin)msgoriginr<   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sourcerB   )r1   r@   rA   rF   r2   r2   r3   add1   s    


zCatalog.addc             c   sN   xH| j D ]>}tdd | j| D }dd | j| D }t|||V  qW d S )Nc             S   s   h | ]\}}}||fqS r2   r2   ).0rG   rF   uuidr2   r2   r3   	<setcomp>@   s    z#Catalog.__iter__.<locals>.<setcomp>c             S   s   g | ]\}}}|qS r2   r2   )rI   rG   rF   rJ   r2   r2   r3   
<listcomp>B   s    z$Catalog.__iter__.<locals>.<listcomp>)r=   sortedr>   r-   )r1   messageZ	positionsr0   r2   r2   r3   __iter__>   s
    zCatalog.__iter__)r5   r6   r7   r8   r4   r9   r   r   rH   r   r-   rO   r2   r2   r2   r3   r;   (   s   r;   c               @   s"   e Zd ZdZeeddddZdS )r?   z3
    Origin holder for Catalog message origin.
    N)rG   rF   r<   c             C   s   || _ || _t j| _d S )N)rG   rF   r   hexrB   )r1   rG   rF   r2   r2   r3   r4   K   s    zMsgOrigin.__init__)r5   r6   r7   r8   r9   r:   r4   r2   r2   r2   r3   r?   F   s   r?   c                   sN   e Zd Zdee ee dd fddZeeeef ed fddZ  Z	S )	GettextRendererN)template_pathoutdirr<   c                sT   || _ |d krttdd}t | ttddd}|| jjd< || jjd< d S )N	templatesgettext)sr<   c             S   s$   |  dd} |  dd} |  ddS )N\z\\"z\"
z\n"
")replace)rV   r2   r2   r3   escapeZ   s    z(GettextRenderer.__init__.<locals>.escapeer[   )	rS   r	   joinr   superr4   r9   envfilters)r1   rR   rS   r[   )	__class__r2   r3   r4   R   s    zGettextRenderer.__init__)filenamecontextr<   c                s*   t t d fdd}||d< t ||S )N)rV   r<   c                s   t t|  jS )N)r(   r*   rS   )rV   )r1   r2   r3   _relpathd   s    z(GettextRenderer.render.<locals>._relpathr*   )r9   r^   render)r1   rb   rc   rd   )ra   )r1   r3   re   c   s    zGettextRenderer.render)NN)
r5   r6   r7   r   r9   r4   r   r   re   __classcell__r2   r2   )ra   r3   rQ   Q   s   rQ   c               @   s    e Zd ZdZee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.
    )	conditionr<   c             C   s   dS )NTr2   )r1   rh   r2   r2   r3   eval_conditionq   s    zI18nTags.eval_conditionN)r5   r6   r7   r8   r   boolri   r2   r2   r2   r3   rg   k   s   rg   c                   s   e Zd ZdZdZdZdZdd fddZdee	e ed	d
dZ
ee dddZee ddddZee eddddZeejddddZ  ZS )I18nBuilderz
    General i18n builder.
    Zi18nr.   FN)r<   c                s6   t    | j| j| jjj t | _t	t
| _d S )N)r^   initr_   Zset_versioning_methodversioning_methodconfiggettext_uuidrg   Ztagsr   r;   catalogs)r1   )ra   r2   r3   rl   }   s
    

zI18nBuilder.init)docnametypr<   c             C   s   dS )N r2   )r1   rq   rr   r2   r2   r3   get_target_uri   s    zI18nBuilder.get_target_uric             C   s   | j jS )N)r_   Z
found_docs)r1   r2   r2   r3   get_outdated_docs   s    zI18nBuilder.get_outdated_docs)docnamesr<   c             C   s   d S )Nr2   )r1   rv   r2   r2   r3   prepare_writing   s    zI18nBuilder.prepare_writing)rp   rN   r<   c             C   s   d S )Nr2   )r1   rp   rN   r2   r2   r3   compile_catalogs   s    zI18nBuilder.compile_catalogs)rq   doctreer<   c             C   s   | j t|| jj }xD| jj| tjD ],}x&t	|D ]\}}d|_
||| q8W q*W x t	|D ]\}}||| qdW d| jjjkrxbt|D ]V\}}xL|D ]D\}}}	}
}x4t||D ]&}|dkr|t krq||| qW qW qW d S )Nrs   indexZpair)rp   r%   rn   gettext_compactr_   Ztocsfindallr   toctreer&   rB   rH   gettext_additional_targetsr'   r!   r   values)r1   rq   ry   catalogr}   Znoder@   entriesrr   Z_tid_mainZ_keymr2   r2   r3   	write_doc   s    zI18nBuilder.write_doc)N)r5   r6   r7   r8   namerm   Zuse_message_catalogrl   r9   r   rt   r   ru   rw   r$   rx   r   Zdocumentr   rf   r2   r2   )ra   r3   rk   u   s   rk   SOURCE_DATE_EPOCHNc                   sN   e Zd Zeedd fddZee edddZee eddd	Z	  Z
S )
LocalTimeZoneN)argskwargsr<   c                s   t  j|| t| _d S )N)r^   r4   tzdelta)r1   r   r   )ra   r2   r3   r4      s    zLocalTimeZone.__init__)dtr<   c             C   s   | j S )N)r   )r1   r   r2   r2   r3   	utcoffset   s    zLocalTimeZone.utcoffsetc             C   s   t dS )Nr   )r   )r1   r   r2   r2   r3   dst   s    zLocalTimeZone.dst)r5   r6   r7   r   r4   r   r   r   r   r   rf   r2   r2   )ra   r3   r      s   r   )filepathnew_contentr<   c          	   C   s   t | sdS yxt| ddb}| }|d}|d}|d}|d}|d | |d | kp|||d  ||d  kS Q R X W n tk
r   Y nX dS )NTzutf-8)encodingz"POT-Creation-Date:z"PO-Revision-Date:)r	   existsr   readrz   
ValueError)r   r   ZoldpotZold_contentZold_header_indexZnew_header_indexZold_body_indexZnew_body_indexr2   r2   r3   should_write   s    




"r   c                   s   e Zd ZdZdZedZdd fddZee	 ddd	Z
ddd
dZdee	 ee	 e	dd fddZdd fddZ  ZS )MessageCatalogBuilderz=
    Builds gettext-style message catalogs (.pot files).
    rU   z'The message catalogs are in %(outdir)s.N)r<   c                s"   t    |   | j|  d S )N)r^   rl   Zcreate_template_bridgerT   )r1   )ra   r2   r3   rl      s    
zMessageCatalogBuilder.initc       	      C   sv   t  }xj| jjD ]^}t| jj|}xHt|D ]<\}}}x0|D ](}|dr>t	t||}|
| q>W q.W qW |S )Nz.html)setrn   Ztemplates_pathr	   r]   appZsrcdirr
   endswithr(   rH   )	r1   Ztemplate_filesrR   Ztmpl_abs_pathdirpathZ_dirsfilesfnrb   r2   r2   r3   _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}xt|tddt|| jjD ]}yXt|dd}| }W d Q R X x2||D ]&\}}}t||}	| jd	 ||	 qW W ql tk
r }
 ztd
||
f |
W d d }
~
X Y qlX qlW d S )Nzbuilding [%s]: T)Znonlztargets for %d template fileszreading templates... Zpurplezutf-8)r   sphinxz%s: %r)listr   sortloggerinfor#   r   r   lenrT   Zenvironmentextract_translationsr"   r   	verbosityr   r   r?   rp   rH   	Exceptionr   )r1   r   r   templatefrc   rF   Z_methr@   rA   excr2   r2   r3   _extract_from_template   s    

z,MessageCatalogBuilder._extract_from_templateupdate)rv   summarymethodr<   c                s   |    t ||| d S )N)r   r^   build)r1   rv   r   r   )ra   r2   r3   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}xt| 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||rvt|ddd}| | W d Q R X qvW d S )Nz%Y-%m-%d %H:%M%z)version	copyrightprojectZlast_translatorZlanguage_teamZctimeZdisplay_locationZdisplay_uuidzwriting message catalogs... Z	darkgreenc             S   s   | d S )Nr   r2   )Ztextdomain__r2   r2   r3   <lambda>      z.MessageCatalogBuilder.finish.<locals>.<lambda>r=   )rS   zmessage.pot_tz.potwzutf-8)r   )!r^   finishrn   r   r   r   gettext_last_translatorgettext_language_teamr   fromtimestamp	timestampltzZstrftimegettext_locationro   r"   rp   itemsr   r   r   r   r)   r	   r]   rS   dirnamer   rQ   re   r   r   write)r1   rc   
textdomainr   ZcontentZpofnZpofile)ra   r2   r3   r     s*    


zMessageCatalogBuilder.finish)Nr   )r5   r6   r7   r8   r   r   epilogrl   r   r9   r   r   r   r   r   r   rf   r2   r2   )ra   r3   r      s   r   )r   r<   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{   TrU   r   ro   FZgettext_auto_buildr_   r~   r   zFULL NAME <EMAIL@ADDRESS>r   zLANGUAGE <LL@li.org>Zbuiltin)r   Zparallel_read_safeZparallel_write_safe)Zadd_builderr   Zadd_config_valuerj   r9   )r   r2   r2   r3   setup!  s    
r   )Vr8   codecsr   collectionsr   r   r   r   r   osr   r	   r
   r   typingr   r   r   r   r   r   r   r   r   r   rJ   r   Zdocutilsr   Zdocutils.nodesr   r   r   r   Zsphinx.applicationr   Zsphinx.buildersr   Zsphinx.domains.pythonr   Zsphinx.errorsr   Zsphinx.localer   Zsphinx.utilr    r!   r"   Zsphinx.util.consoler#   Zsphinx.util.i18nr$   r%   Zsphinx.util.nodesr&   r'   Zsphinx.util.osutilr(   r)   r*   Zsphinx.util.tagsr+   Zsphinx.util.templater,   Z	getLoggerr5   r   r-   r;   r?   rQ   rg   rk   r   r   Zutcfromtimestampr   Zsource_date_epochfloatr   r   r9   rj   r   r   r   r2   r2   r2   r3   <module>   sR   0

3
M