
    Fe+                       d Z ddlm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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+m,Z,m-Z- ddl.m/Z/ ddl0m1Z1 erddlZddl2m3Z3m4Z4 ddl5m6Z6 ddl7m8Z8  ejr                  e:      Z; G d d      Z< G d d      Z= G d d      Z> G d  d!e1      Z? G d" d#e/      Z@ G d$ d%e      ZA e	d&      xZB ej                   eDeB            ZEn ej                         ZE ej                  d'eE      ZHd-d(ZId.d)ZJ G d* d+eA      ZKd/d,ZLy)0z The MessageCatalogBuilder class.    )annotationsN)open)defaultdict)getenvpathwalk)TYPE_CHECKINGAny)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)	GeneratorIterable)Element)Sphinxc                      e Zd ZdZddZy)Messagez!An entry of translatable message.c                .    || _         || _        || _        y N)text	locationsuuids)selfr'   r(   r)   s       9/usr/lib/python3/dist-packages/sphinx/builders/gettext.py__init__zMessage.__init__)   s    	"
    N)r'   strr(   zlist[tuple[str, int]]r)   z	list[str]__name__
__module____qualname____doc__r,    r-   r+   r$   r$   '   s
    +r-   r$   c                  (    e Zd ZdZddZddZddZy)	Catalogz!Catalog of translatable messages.c                     g | _         i | _        y r&   )messagesmetadatar*   s    r+   r,   zCatalog.__init__2   s    #% @Br-   c                   t        |d      sy || j                  vr*| j                  j                  |       g | j                  |<   |j                  }|d}| j                  |   j                  |j
                  ||j                  f       y )Nuid)hasattrr9   r8   appendlinesourcer<   )r*   msgoriginr@   s       r+   addzCatalog.add8   sv    vu% dmm#MM  %!#DMM#{{<Dc!!6==$

"CDr-   c              #    K   | j                   D ]e  }t        | j                  |   D ch c]
  \  }}}||f c}}}      }| j                  |   D cg c]  \  }}}|
 }}}}t        |||       g y c c}}}w c c}}}w wr&   )r8   sortedr9   r$   )r*   messagerA   r@   uuid	positionsr)   s          r+   __iter__zCatalog.__iter__E   s     }} 	5G"&--"8 :  :3E64  : ;I48MM'4JKK0fdDTKEK'9e44		5 :Ks   (BA8BA?
"$BNreturnNone)rB   r.   rC   zElement | MsgOriginrL   rM   )rL   zGenerator[Message, None, None])r0   r1   r2   r3   r,   rD   rJ   r4   r-   r+   r6   r6   /   s    +BE5r-   r6   c                      e Zd ZdZddZy)	MsgOriginz3
    Origin holder for Catalog message origin.
    c                R    || _         || _        t               j                  | _        y r&   )rA   r@   r   hexr<   )r*   rA   r@   s      r+   r,   zMsgOrigin.__init__R   s    	7;;r-   N)rA   r.   r@   intrL   rM   r/   r4   r-   r+   rO   rO   M   s    r-   rO   c                  <     e Zd Z	 	 d	 	 	 	 	 d fdZd fdZ xZS )GettextRendererc                    || _         |t        j                  t        dd      g}t        |   |       dd}|| j                  j                  d<   || j                  j                  d<   y )N	templatesgettextc                n    | j                  dd      } | j                  dd      } | j                  dd      S )N\z\\"z\"
z\n"
")replace)ss    r+   escapez(GettextRenderer.__init__.<locals>.escapeb   s3    		$&A		#u%A99T9--r-   er^   r]   r.   rL   r.   )outdirr   joinr   superr,   envfilters)r*   template_pathra   r^   	__class__s       r+   r,   zGettextRenderer.__init__Y   sc      !YY{KKLM'	. !'%+"r-   c                <     d fd}||d<   t            ||      S )Nc                B    t        t        | j                              S r&   )r   r   ra   )r]   r*   s    r+   _relpathz(GettextRenderer.render.<locals>._relpathl   s    ga566r-   r   r`   )rc   render)r*   filenamecontextrj   rg   s   `   r+   rk   zGettextRenderer.renderk   s%    	7 &	w~h00r-   )NN)rf   z#list[str | os.PathLike[str]] | Nonera   zstr | os.PathLike[str] | NonerL   rM   )rl   r.   rm   dict[str, Any]rL   r.   )r0   r1   r2   r,   rk   __classcell__rg   s   @r+   rT   rT   X   s2    CG48,@,1, 
,$1 1r-   rT   c                      e Zd ZdZddZy)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.
    c                     y)NTr4   )r*   	conditions     r+   eval_conditionzI18nTags.eval_conditiony   s    r-   N)rt   r
   rL   bool)r0   r1   r2   r3   ru   r4   r-   r+   rr   rr   s   s    
r-   rr   c                  Z     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dd
Z xZS )I18nBuilderz
    General i18n builder.
    i18nr'   Fc                    t         |           | j                  j                  | j                  | j                  j
                  j                         t               | _        t        t              | _        y r&   )rc   initrd   set_versioning_methodversioning_methodconfiggettext_uuidrr   tagsr   r6   catalogsr*   rg   s    r+   r{   zI18nBuilder.init   sM    &&t'='='+xx'C'C	EJ	3>w3Gr-   c                     y)N r4   )r*   docnametyps      r+   get_target_urizI18nBuilder.get_target_uri   s    r-   c                .    | j                   j                  S r&   )rd   
found_docsr:   s    r+   get_outdated_docszI18nBuilder.get_outdated_docs   s    xx"""r-   c                     y r&   r4   )r*   docnamess     r+   prepare_writingzI18nBuilder.prepare_writing       r-   c                     y r&   r4   )r*   r   rG   s      r+   compile_catalogszI18nBuilder.compile_catalogs   r   r-   c                Z   | j                   t        || j                  j                           }| j                  j
                  |   j                  t        j                        D ].  }t        |      D ]  \  }}d|_
        |j                  ||         0 t        |      D ]#  \  }}t        |      r|j                  ||       % d| j                  j                  j                  v rDt        |      D ]5  \  }}|D ]+  \  }}	}
}}t        ||	      D ]  }|j                  ||        - 7 y y )Nr   index)r   r   r~   gettext_compactrd   tocsfindallr   toctreer   r<   rD   #_is_node_in_substitution_definitiongettext_additional_targetsr   r   )r*   r   doctreecatalogr   noderB   entries
entry_typevalue
_target_id_main_category_keyms                 r+   	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&	'
 dhhoo@@@!<W!E -gKR -GJz5-,Z? -At,--- Ar-   rK   r&   )r   r.   r   
str | NonerL   r.   rL   set[str])r   r   rL   rM   )r   zset[CatalogInfo]rG   r.   rL   rM   )r   r.   r   znodes.documentrL   rM   )r0   r1   r2   r3   namer}   use_message_catalogr{   r   r   r   r   r   ro   rp   s   @r+   rx   rx   }   s:     DH#-r-   rx   SOURCE_DATE_EPOCHz%Y-%m-%d %H:%M%zc                l   t        j                  |       sy	 t        | d      5 }|j                         }|j	                  d      }|j	                  d      }|j	                  d      }|j	                  d      }|d | |d | k7  xs ||d  ||d  k7  cd d d        S # 1 sw Y   yxY w# t
        $ r Y yw xY w)NTutf-8encodingz"POT-Creation-Date:z"PO-Revision-Date:)r   existsr   readr   
ValueError)filepathnew_contentoldpotold_contentold_header_indexnew_header_indexold_body_indexnew_body_indexs           r+   should_writer      s    ;;x 
(W- 	T ++-K*001FG*001FG(../CDN(../CDN !2"23{CTDT7UU S 1[5QQ	T 	T 	T   s/   B' A,B	B' B$ B' $B' '	B32B3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    r+   r   r      s3    
++dE99:{{ ++ r-   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 )MessageCatalogBuilderz=
    Builds gettext-style message catalogs (.pot files).
    rW   z'The message catalogs are in %(outdir)s.c                x    t         |           | j                          | j                  j                  |        y r&   )rc   r{   create_template_bridgerV   r   s    r+   r{   zMessageCatalogBuilder.init   s*    ##%D!r-   c           	     ^   t               }| j                  j                  D ]  }t        j                  | j
                  j                  |      }t        |      D ]O  \  }}}|D ]D  }|j                  d      st        t        j                  ||            }|j                  |       F Q  |S )Nz.html)setr~   templates_pathr   rb   appsrcdirr   endswithr   rD   )	r*   template_filesrf   tmpl_abs_pathdirpath_dirsfilesfnrl   s	            r+   _collect_templatesz(MessageCatalogBuilder._collect_templates   s    ![[77 	5M IIdhhoo}EM)-m)< 5% 5B{{7+#-dii.D#E&**8455	5 r-   c                   t        | j                               }|j                          t        j	                  t        t        d      | j                  z        d       t        j	                  t        d      t        |             | j                  j                  j                  }t        |t        d      dt        |      | j                  j                        D ]e  }	 t        |d      5 }|j!                         }d d d         |      D ]1  \  }}}t#        ||      }	| j$                  d	   j'                  ||	       3 g y # 1 sw Y   Hx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   sphinxz: )listr   sortloggerinfor   r   r   lenrV   environmentextract_translationsr   r   	verbosityr   r   rO   r   rD   	Exceptionr   )r*   r   r   templatefrm   r@   _methrB   rC   excs              r+   _extract_from_templatez,MessageCatalogBuilder._extract_from_template   sB   T,,./

D-.:;$GB67UD#~~99NN'r2I/JH(+E
DHH4F4FH 
	/H/(W5 'ffhG'(<W(E =$D%&x6FMM(+//V<=
	/' '
  /!
"SG, o3./s1   !E.E?AEE	E	E3E..E3c                H    | j                          t        | 	  |||       y r&   )r   rc   build)r*   r   summarymethodrg   s       r+   r   zMessageCatalogBuilder.build   s!     	##%h0r-   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"                  d       D ]  \  }}t%        t'        j(                  | j*                  t'        j,                  |                   t/        |      |d<   t1        | j*                        j3                  d|      }t'        j(                  | j*                  |dz         }t5        ||      st7        |d	d
      5 }|j9                  |       d d d         y # 1 sw Y   xY w)N)version	copyrightprojectlast_translatorlanguage_teamctimedisplay_locationdisplay_uuidzwriting message catalogs... 	darkgreenc                    | d   S )Nr   r4   )textdomain__s    r+   <lambda>z.MessageCatalogBuilder.finish.<locals>.<lambda>  s    UV r-   r8   )ra   zmessage.pot_tz.potwr   r   )rc   finishr~   r   r   r   gettext_last_translatorgettext_language_teamr   gettext_locationr   r   r   itemsr   r   r   r   r   r   rb   ra   dirnamer   rT   rk   r   r   write)r*   rm   
textdomainr   contentpofnpofilerg   s          r+   r   zMessageCatalogBuilder.finish  sg   {{**..{{**#{{BB![[>> $ < < KK44	
 $34==3F3F3H356T3U3>DMM@R37883E3E3W	$Y 	*J diiT\\*-EFG"&w-GJ%T[[9@@RYZG99T[[*v*=>DD'*$g6 *&LL)* *	** *s   8GG	rK   r   )Nupdate)r   zIterable[str] | Noner   r   r   r.   rL   rM   )r0   r1   r2   r3   r   r   epilogr{   r   r   r   r   ro   rp   s   @r+   r   r      sf     D9:F"
	/. #	1&1 1 	1
 
1* *r-   r   c                X   | j                  t               | j                  dddt        t        h       | j                  ddd       | j                  ddd       | j                  ddd       | j                  d	g d       | j                  d
dd       | j                  ddd       ddddS )Nr   TrW   r   r   Fgettext_auto_buildrd   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_valuerv   r.   )r   s    r+   setupr  #  s    OO)**D)dC[I+T9=	:-tU;5r5A24OQZ[02H)T "# r-   )r   r.   r   r.   rL   rv   )r   z
nodes.NoderL   rv   )r   r"   rL   rn   )Mr3   
__future__r   timecodecsr   collectionsr   osr   r   r   typingr	   r
   rH   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    docutils.nodesr!   sphinx.applicationr"   	getLoggerr0   r   r$   r6   rO   rT   rr   rx   source_date_epochgmtimefloat	timestamp	localtimestrftimer   r   r   r   r  r4   r-   r+   <module>r%     s   & "   # ! ! %   ( # $   $ / ; 5 K = = ! /3&)			8	$ 5 5< 1n 16t --' --d   344AE"345I  I()4$N*K N*br-   