o
    Ni.                     @  sf  d Z ddlmZ ddlZddlZddl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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! 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,m-Z- ddl.m/Z/m0Z0m1Z1 ddl2m3Z3 ddl4m5Z5 erddl	Z	ddl6m7Z7m8Z8m9Z9 ddl:m;Z; ddl<m=Z= ddl>m?Z? ddl@mAZA eeddZBe!CeDZEG dd  d ZFG d!d" d"ZGG d#d$ d$ZHG d%d& d&e5ZIG d'd( d(e3ZJG d)d* d*eZKe
d+ ZLdureMeNeLZOneP ZOeQd,eOZRdDd2d3ZSdEd6d7ZTG d8d9 d9eKZUdFd?d@ZVdGdBdCZWdS )Hz The MessageCatalogBuilder class.    )annotationsN)open)defaultdict)getenvpathwalk)Path)TYPE_CHECKINGAnyLiteral)uuid4)nodes)addnodespackage_dir)Builder)
ThemeError)__)logging)bold)status_iterator)CatalogInfodocname_to_domain)split_index_msg)extract_messagestraverse_translatable_index)
canon_path	ensuredirrelpath)Tags)SphinxRenderer)IterableIteratorSequence)Element)Sphinx)Config)ExtensionMetadata	templatesgettextc                   @  s   e Zd ZdZdd
dZdS )Messagez!An entry of translatable message.textstr	locationslist[tuple[str, int]]uuids	list[str]returnNonec                 C  s   || _ || _|| _d S N)r*   r,   r.   )selfr*   r,   r.    r4   K/home/ubuntu/.local/lib/python3.10/site-packages/sphinx/builders/gettext.py__init__0   s   
zMessage.__init__N)r*   r+   r,   r-   r.   r/   r0   r1   __name__
__module____qualname____doc__r6   r4   r4   r4   r5   r)   -   s    r)   c                   @  s.   e Zd ZdZdddZdd
dZdddZdS )Catalogz!Catalog of translatable messages.r0   r1   c                 C  s   g | _ i | _d S r2   )messagesmetadatar3   r4   r4   r5   r6   ;   s   
zCatalog.__init__msgr+   originElement | MsgOriginc                 C  s^   t |dsd S || jvr| j| g | j|< |j}|d u r d}| j| |j||jf d S )Nuid)hasattrr>   r=   appendlinesourcerC   )r3   r@   rA   rG   r4   r4   r5   addA   s   


zCatalog.addIterator[Message]c                 c  sL    | j D ]}tdd | j| D }dd | j| D }t|||V  qd S )Nc                 S  s   h | ]	\}}}||fqS r4   r4   .0rH   rG   uuidr4   r4   r5   	<setcomp>P   s    z#Catalog.__iter__.<locals>.<setcomp>c                 S  s   g | ]\}}}|qS r4   r4   rK   r4   r4   r5   
<listcomp>S   s    z$Catalog.__iter__.<locals>.<listcomp>)r=   sortedr>   r)   )r3   message	positionsr.   r4   r4   r5   __iter__N   s   
zCatalog.__iter__Nr0   r1   )r@   r+   rA   rB   r0   r1   )r0   rJ   )r8   r9   r:   r;   r6   rI   rS   r4   r4   r4   r5   r<   8   s
    

r<   c                   @  s   e Zd ZdZddd	Zd
S )	MsgOriginz3
    Origin holder for Catalog message origin.
    rH   r+   rG   intr0   r1   c                 C  s   || _ || _t j| _d S r2   )rH   rG   r   hexrC   )r3   rH   rG   r4   r4   r5   r6   \   s   zMsgOrigin.__init__N)rH   r+   rG   rV   r0   r1   r7   r4   r4   r4   r5   rU   W   s    rU   c                      s2   e Zd Z		dd fdd	Zd fddZ  ZS )GettextRendererNtemplate_path'Sequence[str | os.PathLike[str]] | Noneoutdirstr | os.PathLike[str] | Noner0   r1   c                   sX   || _ |d u rt tg n
t g |t ddd}|| jjd< || jjd< d S )	Nsr+   r0   c                 S  s$   |  dd} |  dd} |  ddS )N\z\\"z\"
z\n"
")replacer]   r4   r4   r5   escapen   s   z(GettextRenderer.__init__.<locals>.escapeerc   r]   r+   r0   r+   )r[   superr6   DEFAULT_TEMPLATE_PATHenvfilters)r3   rY   r[   rc   	__class__r4   r5   r6   c   s   
zGettextRenderer.__init__filenamer+   contextdict[str, Any]c                   s$   d fdd}||d< t  ||S )Nr]   r+   r0   c                   s   t t|  jS r2   )r   r   r[   rb   r?   r4   r5   _relpathx   s   z(GettextRenderer.render.<locals>._relpathr   re   )rf   render)r3   rl   rm   ro   rj   r?   r5   rp   w   s   zGettextRenderer.render)NN)rY   rZ   r[   r\   r0   r1   )rl   r+   rm   rn   r0   r+   )r8   r9   r:   r6   rp   __classcell__r4   r4   rj   r5   rX   b   s
    rX   c                   @  s   e Zd ZdZd	ddZdS )
I18nTagszDummy tags module for I18nBuilder.

    To ensure that all text inside ``only`` nodes is translated,
    this class always returns ``True`` regardless the defined tags.
    	conditionr
   r0   boolc                 C     dS )NTr4   )r3   rs   r4   r4   r5   eval_condition      zI18nTags.eval_conditionN)rs   r
   r0   rt   )r8   r9   r:   r;   rv   r4   r4   r4   r5   rr      s    rr   c                      sX   e Zd ZdZdZdZdZd fddZddddZdddZ	d ddZ
d!ddZ  ZS )"I18nBuilderz
    General i18n builder.
    i18nr*   Fr0   r1   c                   s6   t    | j| j| jjj t | _t	t
| _d S r2   )rf   initrh   set_versioning_methodversioning_methodconfiggettext_uuidrr   tagsr   r<   catalogsr?   rj   r4   r5   rz      s   
zI18nBuilder.initNdocnamer+   typ
str | Nonec                 C  ru   )N r4   )r3   r   r   r4   r4   r5   get_target_uri   rw   zI18nBuilder.get_target_uriset[str]c                 C  s   | j jS r2   )rh   
found_docsr?   r4   r4   r5   get_outdated_docs   s   zI18nBuilder.get_outdated_docsr   set[CatalogInfo]rQ   c                 C  s   d S r2   r4   )r3   r   rQ   r4   r4   r5   compile_catalogs   rw   zI18nBuilder.compile_catalogsdoctreenodes.documentc                 C  s   | j t|| jj }| jj| tjD ]}t	|D ]\}}d|_
||| qqt	|D ]\}}t|s;||| q-d| jjjv rdt|D ]\}}|D ]\}}	}
}}t||	D ]}||| qYqMqGd S d S )Nr   index)r   r   r}   gettext_compactrh   tocsfindallr   toctreer   rC   rI   #_is_node_in_substitution_definitiongettext_additional_targetsr   r   )r3   r   r   catalogr   noder@   entries
entry_typevalue
_target_id_main_category_keymr4   r4   r5   	write_doc   s&   zI18nBuilder.write_docrT   r2   )r   r+   r   r   r0   r+   r0   r   )r   r   rQ   r+   r0   r1   )r   r+   r   r   r0   r1   )r8   r9   r:   r;   namer|   use_message_catalogrz   r   r   r   r   rq   r4   r4   rj   r5   rx      s    

rx   SOURCE_DATE_EPOCHz%Y-%m-%d %H:%M%zfilepathr+   new_contentr0   rt   c                 C  s   t | sdS zKt| dd:}| }|d}|d}|d}|d}|d | |d | kp>||d  ||d  k	 W  d    W S 1 sKw   Y  W dS  ty\   Y dS w )NTutf-8encodingz"POT-Creation-Date:z"PO-Revision-Date:)r   existsr   readr   
ValueError)r   r   oldpotold_contentold_header_indexnew_header_indexold_body_indexnew_body_indexr4   r4   r5   should_write   s$   




$r   r   
nodes.Nodec                 C  s&   | j rt| tjrdS | j } | j sdS )z;Check "node" to test if it is in a substitution definition.TF)parent
isinstancer   substitution_definition)r   r4   r4   r5   r      s   r   c                      sd   e Zd ZdZdZedZd fddZdd	d
ZdddZ			dd fddZ
d fddZ  ZS )MessageCatalogBuilderz=
    Builds gettext-style message catalogs (.pot files).
    r(   z'The message catalogs are in %(outdir)s.r0   r1   c                   s"   t    |   | j|  d S r2   )rf   rz   create_template_bridger'   r?   rj   r4   r5   rz      s   
zMessageCatalogBuilder.initr   c           	      C  sj   t  }| jjD ]+}t| jj|}t|D ]\}}}|D ]}|dr0t	t||}|
| qqq|S )Nz.html)setr}   templates_pathr   joinappsrcdirr   endswithr   rI   )	r3   template_filesrY   tmpl_abs_pathdirpath_dirsfilesfnrl   r4   r4   r5   _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 ]N}z4t|dd}| }W d    n1 sLw   Y  ||D ]\}}}t||}	| jd	 ||	 qUW q4 ty }
 z| d
|
}t||
d }
~
ww d S )Nzbuilding [%s]: T)nonlztargets for %d template fileszreading templates... purpler   r   sphinxz: )listr   sortloggerinfor   r   r   lenr'   environmentextract_translationsr   r   	verbosityr   r   rU   r   rI   	Exceptionr   )r3   r   r   templatefrm   rG   _methr@   rA   excr4   r4   r5   _extract_from_template   s,   



z,MessageCatalogBuilder._extract_from_templateNupdatedocnamesIterable[str] | Nonesummaryr   method$Literal['all', 'specific', 'update']c                   s   |    t ||| d S r2   )r   rf   build)r3   r   r   r   rj   r4   r5   r     s   zMessageCatalogBuilder.buildc           	   	     s  t     jj jj jj jj jjt jj	 jj
d}t j tddt j jjtdD ]X\}}tt jt| t||d<  fdd jjD }t| jd}|d	|}t j|d
 }t||rt|ddd}|| W d    n1 sw   Y  q4d S )N)version	copyrightprojectlast_translatorlanguage_teamctimedisplay_locationdisplay_uuidzwriting message catalogs... 	darkgreenr   r=   c                   s   g | ]} j j| qS r4   )r   r   )rL   rel_pathr?   r4   r5   rO   .  s    z0MessageCatalogBuilder.finish.<locals>.<listcomp>)r[   zmessage.pot.jinjaz.potwr   r   ) rf   finishr}   r   r   r   gettext_last_translatorgettext_language_teamr   gettext_locationr~   r   r   itemsr   r   r   r   operator
itemgetterr   r   r   r[   dirnamer   r   rX   rp   r   r   write)	r3   rm   
textdomainr   rY   renderercontentpofnpofilerj   r?   r5   r     s@   

	

zMessageCatalogBuilder.finishrT   r   )Nr   )r   r   r   r   r   r   r0   r1   )r8   r9   r:   r;   r   r   epilogrz   r   r   r   r   rq   r4   r4   rj   r5   r      s    

	r   r   r$   r}   r%   r1   c                 C  s.   |j }|dkrd|_ d S |dkrd|_ d S d S )N0F1T)r   )r   r}   r   r4   r4   r5   _gettext_compact_validator:  s   

r   r&   c                 C  s   |  t | dddtth | ddd | ddd | ddd | jd	g dtthd
 | ddd | ddd | jdtdd ddddS )Nr   Tr(   r   r~   Fgettext_auto_buildrh   r   )typesr   zFULL NAME <EMAIL@ADDRESS>r   zLANGUAGE <LL@li.org>zconfig-initedi   )prioritybuiltin)r   parallel_read_safeparallel_write_safe)	add_builderr   add_config_valuert   r+   r   r   connectr   )r   r4   r4   r5   setupC  s   
r  )r   r+   r   r+   r0   rt   )r   r   r0   rt   )r   r$   r}   r%   r0   r1   )r   r$   r0   r&   )Xr;   
__future__r   r   timecodecsr   collectionsr   osr   r   r   pathlibr   typingr	   r
   r   rM   r   docutilsr   r   r   r   sphinx.buildersr   sphinx.errorsr   sphinx.localer   sphinx.utilr   sphinx.util.consoler   sphinx.util.displayr   sphinx.util.i18nr   r   sphinx.util.index_entriesr   sphinx.util.nodesr   r   sphinx.util.osutilr   r   r   sphinx.util.tagsr   sphinx.util.templater   collections.abcr    r!   r"   docutils.nodesr#   sphinx.applicationr$   sphinx.configr%   sphinx.util.typingr&   rg   	getLoggerr8   r   r)   r<   rU   rX   rr   rx   source_date_epochgmtimefloat	timestamp	localtimestrftimer   r   r   r   r   r  r4   r4   r4   r5   <module>   s`    
1

	
Z	