
    ~Ti/                       d Z ddlmZ ddlZddlZddl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 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*m+Z+m,Z, ddl-m.Z. ddl/m0Z0 er*ddl1m2Z2m3Z3m4Z4 ddlm5Z5m6Z6 ddl7m8Z8 ddl9m:Z: ddl"m;Z; ddl<m=Z=  ej|                  dd      Z? ej                  eA      ZB G d d       ZC G d! d"      ZD G d# d$      ZE G d% d&e0      ZF G d' d(e.      ZG G d) d*e      ZH e	d+      xZI ej                   eKeI            ZLn ej                         ZL ej                  d,eL      ZOd2d-ZPd3d.ZQ G d/ d0eH      ZRd4d1ZSy)5z The MessageCatalogBuilder class.    )annotationsN)defaultdict)getenvwalk)Path)TYPE_CHECKING)uuid4)nodes)addnodespackage_dir)bold)Builder)
ThemeError)__)logging)status_iterator)docname_to_domain)split_index_msg)extract_messagestraverse_translatable_index)
canon_path	ensuredirrelpath)Tags)SphinxRenderer)IterableIteratorSequence)AnyLiteral)Element)Sphinx)CatalogInfo)ExtensionMetadata	templatesgettextc                  T    e Zd ZU dZdZded<   ded<   ded<   	 	 	 	 	 	 	 	 dd	Zdd
Zy)Messagez!An entry of translatable message.text	locationsuuidsstrr*   list[tuple[str, int]]r+   	list[str]r,   c                .    || _         || _        || _        y Nr)   )selfr*   r+   r,   s       J/home/agent/.local/lib/python3.12/site-packages/sphinx/builders/gettext.py__init__zMessage.__init__7   s     	"
    c                V    d| j                   d| j                  d| j                  dS )NzMessage(text=z, locations=z, uuids=)r)   r2   s    r3   __repr__zMessage.__repr__>   s2    II=T^^,>htzzn	
r5   N)r*   r-   r+   r.   r,   r/   returnNoner:   r-   __name__
__module____qualname____doc__	__slots____annotations__r4   r9    r5   r3   r(   r(   .   sE    +,I
I$$$9BK	
r5   r(   c                  >    e Zd ZdZdZddZd	dZd
dZedd       Z	y)Catalogz!Catalog of translatable messages.metadatac                    i | _         y r1   rG   r8   s    r3   r4   zCatalog.__init__K   s	    ?Ar5   c                    t        |d      sy | j                  j                  |g       }|j                  x}|nd}|j	                  |j
                  xs d||j                  f       y )Nuid )hasattrrH   
setdefaultlineappendsourcerK   )r2   msgoriginmsg_metadatarP   s        r3   addzCatalog.addO   s^    vu% }}//R8 &+8tbV]]0b$

CDr5   c              #  $  K   | j                   j                         D ]o  \  }}t        t        t	        t        j                  dd      |                  }t        t	        t        j                  d      |            }t        |||       q y w)Nr         r)   )	rH   itemssortedsetmapoperator
itemgetterlistr(   )r2   messagerU   	positionsr,   s        r3   __iter__zCatalog.__iter__X   sw     %)]]%8%8%: 	J!G\s3x':':1a'@,#OPQIX003\BCEw)5II	Js   BBc                ,    t        | j                        S r1   )r`   rH   r8   s    r3   messageszCatalog.messages^   s    DMM""r5   Nr:   r;   )rS   r-   rT   zElement | MsgOriginr:   r;   )r:   zIterator[Message])r:   r/   )
r>   r?   r@   rA   rB   r4   rV   rc   propertyre   rD   r5   r3   rF   rF   F   s0    +IBEJ # #r5   rF   c                  D    e Zd ZU dZdZded<   ded<   ded<   ddZdd	Zy
)	MsgOriginz)Origin holder for Catalog message origin.rR   rP   rK   r-   rR   intrP   rK   c                R    || _         || _        t               j                  | _        y r1   )rR   rP   r	   hexrK   )r2   rR   rP   s      r3   r4   zMsgOrigin.__init__l   s    	7;;r5   c                V    d| j                    d| j                   d| j                  dS )Nz<MsgOrigin :z; uid=>rj   r8   s    r3   r9   zMsgOrigin.__repr__q   s)    T[[M499+VDHH<qIIr5   N)rR   r-   rP   rk   r:   r;   r<   r=   rD   r5   r3   ri   ri   c   s$    3'IK
I	H
Jr5   ri   c                  <     e Zd Z	 	 d	 	 	 	 	 d fdZd fdZ xZS )GettextRendererc                    || _         |t        | 	  t        g       nt        | 	  g |t               dd}|| j                  j
                  d<   || j                  j
                  d<   y )Nc                n    | j                  dd      } | j                  dd      } | j                  dd      S )N\z\\"z\"
z\n"
")replace)ss    r3   escapez(GettextRenderer.__init__.<locals>.escape   s3    		$&A		#u%A99T9--r5   erz   ry   r-   r:   r-   )outdirsuperr4   DEFAULT_TEMPLATE_PATHenvfilters)r2   template_pathr}   rz   	__class__s       r3   r4   zGettextRenderer.__init__v   sk    
  G345GD}D.CDE	. !'%+"r5   c                <     d fd}||d<   t            ||      S )Nc                B    t        t        | j                              S r1   )r   r   r}   )ry   r2   s    r3   _relpathz(GettextRenderer.render.<locals>._relpath   s    ga566r5   r   r|   )r~   render)r2   filenamecontextr   r   s   `   r3   r   zGettextRenderer.render   s%    	7 &	w~h00r5   )NN)r   z'Sequence[str | os.PathLike[str]] | Noner}   zstr | os.PathLike[str] | Noner:   r;   )r   r-   r   zdict[str, Any]r:   r-   )r>   r?   r@   r4   r   __classcell__r   s   @r3   rr   rr   u   s8     BF04,>, ., 
	,(1 1r5   rr   c                      e Zd ZdZddZy)I18nTagszDummy tags module for I18nBuilder.

    To ensure that all text inside ``only`` nodes is translated,
    this class always returns ``True`` regardless the defined tags.
    c                     y)NTrD   )r2   	conditions     r3   eval_conditionzI18nTags.eval_condition   s    r5   N)r   r   r:   bool)r>   r?   r@   rA   r   rD   r5   r3   r   r      s    r5   r   c                  R     e Zd ZdZdZdZdZd
 fdZdddZddZ	ddZ
dd	Z xZS )I18nBuilderzGeneral i18n builder.i18nr*   Fc                    t         |           | j                  j                  | j                  | j
                  j                         t               x| _        | j                  _        t        t              | _        y r1   )r~   initr   set_versioning_methodversioning_methodconfiggettext_uuidr   tags_appr   rF   catalogsr2   r   s    r3   r   zI18nBuilder.init   sP    &&t'='=t{{?W?WX%-Z/	DIIN3>w3Gr5   c                     y)NrM   rD   )r2   docnametyps      r3   get_target_urizI18nBuilder.get_target_uri   s    r5   c                .    | j                   j                  S r1   )r   
found_docsr8   s    r3   get_outdated_docszI18nBuilder.get_outdated_docs   s    xx"""r5   c                     y r1   rD   )r2   r   ra   s      r3   compile_catalogszI18nBuilder.compile_catalogs   s    r5   c                F   | j                   t        || j                  j                           }| j                  j
                  |   j                  t        j                        D ].  }t        |      D ]  \  }}d|_
        |j                  ||         0 t        |      D ]#  \  }}t        |      r|j                  ||       % d| j                  j                  v rDt        |      D ]5  \  }}|D ]+  \  }}	}
}}t        ||	      D ]  }|j                  ||        - 7 y y )NrM   index)r   r   r   gettext_compactr   tocsfindallr   toctreer   rK   rV   #_is_node_in_substitution_definitiongettext_additional_targetsr   r   )r2   r   doctreecatalogr   noderS   entries
entry_typevalue
_target_id_main_category_keyms                 r3   	write_doczI18nBuilder.write_doc   s   -- 1'4;;;V;V WXxx}}W-55h6F6FG 	'G-g6 '	cC&'	'
 *'2 	'ID#6t<C&	'
 dkk<<<!<W!E -gKR -GJz5-,Z? -At,--- =r5   rf   r1   )r   r-   r   
str | Noner:   r-   r:   zset[str])r   zset[CatalogInfo]ra   r-   r:   r;   )r   r-   r   znodes.documentr:   r;   )r>   r?   r@   rA   namer   use_message_catalogr   r   r   r   r   r   r   s   @r3   r   r      s1    DH#-r5   r   SOURCE_DATE_EPOCHz%Y-%m-%d %H:%M%zc                `   | j                         sy	 t        | d      5 }|j                         }d d d        j                  d      }|j                  d      }|j                  d      }|j                  d      }|d | |d | k7  xs ||d  ||d  k7  S # 1 sw Y   exY w# t        $ r Y yw xY w)NTutf-8encodingz"POT-Creation-Date:z"PO-Revision-Date:)existsopenreadr   
ValueError)filepathnew_contentoldpotold_contentold_header_indexnew_header_indexold_body_indexnew_body_indexs           r3   should_writer      s    ??(W- 	( ++-K	(&,,-BC&,,-BC$**+?@$**+?@))*k:K;K.LL L>?+{>?/KK	
	( 	(  s(   B! BA#B! BB! !	B-,B-c                    | j                   r4t        | t        j                        ry| j                   } | j                   r4y)z;Check "node" to test if it is in a substitution definition.TF)parent
isinstancer
   substitution_definition)r   s    r3   r   r      s3    
++dE99:{{ ++ r5   c                  t     e Zd ZdZdZ ed      Zd	 fdZd
dZd	dZ		 	 d	 	 	 	 	 	 	 d fdZ
d	 fdZ xZS )MessageCatalogBuilderz3Builds gettext-style message catalogs (.pot files).r&   z'The message catalogs are in %(outdir)s.c                x    t         |           | j                          | j                  j                  |        y r1   )r~   r   create_template_bridger%   r   s    r3   r   zMessageCatalogBuilder.init   s*    ##%D!r5   c                   t               }| j                  j                  D ]i  }| j                  |z  }t	        |      D ]J  \  }}}|D ]?  }|j                  d      st        ||      j                         }|j                  |       A L k |S )Nz.html)	r\   r   templates_pathsrcdirr   endswithr   as_posixrV   )	r2   template_filesr   tmpl_abs_pathdirpath_dirsfilesfnr   s	            r3   _collect_templatesz(MessageCatalogBuilder._collect_templates   s    ![[77 	5M KK-7M)-m)< 5% 5B{{7+#'#4#=#=#?&**8455	5 r5   c                   t        | j                               }|j                          t        j	                  t        t        d            | j                  d       t        j	                  t        d      t        |             | j                  j                  j                  }t        |t        d      dt        |      | j                  j                        D ]f  }	 t        |d      5 }|j!                         }d d d         |      D ]2  \  }}}t#        ||	      }	| j$                  d
   j'                  ||	       4 h y # 1 sw Y   IxY w# t(        $ r}
| d|
}t+        |      |
d }
~
ww xY w)Nzbuilding [%s]: T)nonlztargets for %d template fileszreading templates... purpler   r   )rR   rP   sphinxz: )r`   r   sortloggerinfor   r   r   lenr%   environmentextract_translationsr   r   	verbosityr   r   ri   r   rV   	Exceptionr   )r2   r   r   templatefr   rP   _methrS   rT   excs              r3   _extract_from_templatez,MessageCatalogBuilder._extract_from_template  sB   T,,./

D-./FB67UD#~~99NN'&'JKK!!
 	/H/(W5 'ffhG'(<W(E =$D%&hTBFMM(+//V<=	/' '
  /!
"SG, o3./s1   E,E=AEE	
E	E2E--E2c                H    | j                          t        | 	  |||       y r1   )r   r~   build)r2   docnamessummarymethodr   s       r3   r   zMessageCatalogBuilder.build  s!     	##%h0r5   c           
     &   t         
|           | j                  j                  | j                  j                  | j                  j
                  | j                  j                  | j                  j                  t        | j                  j                  | j                  j                  d}t        | j                  j                         t        d      dt        | j                        | j                  j                   t#        j$                  d            D ]  \  }}t'        | j(                  t*        j,                  j/                  |      z         t1        |      |d<   | j                  j2                  D cg c]  }| j4                  |z   }}t7        || j(                        }|j9                  d|      }| j(                  | dz  }t;        ||      st=        |d	d
      5 }	|	j?                  |       d d d         y c c}w # 1 sw Y   xY w)N)version	copyrightprojectlast_translatorlanguage_teamctimedisplay_locationdisplay_uuidzwriting message catalogs... 	darkgreenr   re   )r}   zmessage.pot.jinjaz.potwr   r   ) r~   finishr   r   r   r   gettext_last_translatorgettext_language_teamr  gettext_locationr   r   r   rZ   r   r   r   r^   r_   r   r}   ospathdirnamer`   r   r   rr   r   r   r   write)r2   r   
textdomainr   rel_pathr   renderercontentpofnpofiler   s             r3   r  zMessageCatalogBuilder.finish'  s   {{**..{{**#{{BB![[>> $ < < KK44	
 $3MM!-.KK!!"$
 	*J dkkBGGOOJ$??@"&w-GJ7;{{7Q7Q+3h&M  '}T[[IHoo&97CG;;J<t!44DD'*$g6 *&LL)* *)	** *s   7H%HH	rf   r   )Nupdate)r   zIterable[str] | Noner   r   r   z$Literal['all', 'specific', 'update']r:   r;   )r>   r?   r@   rA   r   r   epilogr   r   r   r   r  r   r   s   @r3   r   r      sb    =D9:F"
	/8 #7?	1&1 1 5	1
 
1"* "*r5   r   c                J   | j                  t               | j                  dddt        t        t
        h             | j                  dddt        t        h             | j                  dddt        t        h             | j                  ddd	t        t        h             | j                  d
g d	t        t        t        t        t        h             | j                  dddt        t
        h             | j                  dddt        t
        h             ddddS )Nr   Tr&   )typesr	  r   Fgettext_auto_buildr   r   r  zFULL NAME <EMAIL@ADDRESS>r  zLANGUAGE <LL@li.org>builtin)r   parallel_read_safeparallel_write_safe)	add_builderr   add_config_value	frozensetr   r-   r`   r\   tuple)apps    r3   setupr!  L  s$   OO)*4)T3K2H   +T9ItfDUV	D6ARS-tU)TFBST$
D#u56	   !#	   	   "# r5   )r   r   r   r-   r:   r   )r   z
nodes.Noder:   r   )r   r"   r:   r$   )TrA   
__future__r   r^   r
  os.pathtimecollectionsr   r   r   pathlibr   typingr   uuidr	   docutilsr
   r   r   r   sphinx._cli.util.colourr   sphinx.buildersr   sphinx.errorsr   sphinx.localer   sphinx.utilr   sphinx.util.displayr   sphinx.util.i18nr   sphinx.util.index_entriesr   sphinx.util.nodesr   r   sphinx.util.osutilr   r   r   sphinx.util.tagsr   sphinx.util.templater   collections.abcr   r   r   r   r    docutils.nodesr!   sphinx.applicationr"   r#   sphinx.util.typingr$   joinpathr   	getLoggerr>   r   r(   rF   ri   rr   r   r   source_date_epochgmtimefloat	timestamp	localtimestrftimer  r   r   r   r!  rD   r5   r3   <module>rB     sB   & "  	   #       ( ( # $   / . 5 K = = ! /<<#&),4,,,[)D 			8	$
 
0# #:J J$1n 1:t (-' (-Z   344AE"345I  I()4(Z*K Z*z r5   