
    -Phh                    0   d Z ddlmZ ddlZddl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'm(Z(m)Z)m*Z* e
rddl+m,Z, ddl-m.Z. ddl/m0Z0 ddl1m2Z2  e j3        e4          Z5dZ6 edej7                  Z8d8d'Z9d9d)Z: G d* d+e          Z; G d, d-          Z< G d. d/e          Z= G d0 d1e          Z> G d2 d3e          Z? G d4 d5e          Z@d:d7ZAdS );z:Docutils transforms used by Sphinx when reading documents.    )annotationsN)DOTALLmatch)indent)TYPE_CHECKINGAnyTypeVar)nodes)StringInput)addnodes)make_glossary_termsplit_term_classifiers)ConfigError)__)init)SphinxTransform)get_filetypelogging)docname_to_domain)split_index_msg)IMAGE_TYPE_NODESLITERAL_TYPE_NODESNodeMatcherextract_messagestraverse_translatable_index)Sequence)Sphinx)Config)ExtensionMetadata)refexplicitN)boundappr   sourcestrsource_pathsource_lineintconfigr   settingsr   returnnodes.Elementc           	        	 |j         }d|_         ddlm}  |            }|                    |            t	          |j        |          }	| j                            | |	          }
|                    t          || d| d          |
|          }t          j        t                    5  |d         cddd           ||_         S # 1 swxY w Y   |||_         S # ||_         w xY w)a  Publish msgstr (single line) into docutils document

    :param sphinx.application.Sphinx app: sphinx application
    :param str source: source text
    :param str source_path: source path for warning indication
    :param source_line: source line for warning indication
    :param sphinx.config.Config config: sphinx config
    :param docutils.frontend.Values settings: docutils settings
    :return: document
    :rtype: docutils.nodes.document
    Nr   )SphinxI18nReader:z:<translated>)r$   r&   )r$   parserr*   )
rst_prolog	sphinx.ior.   setupr   source_suffixregistrycreate_source_parserreadr   
contextlibsuppress
IndexError)r#   r$   r&   r'   r)   r*   r1   r.   readerfiletyper0   docs               V/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/sphinx/transforms/i18n.pypublish_msgstrr?   2   sX   &'&
 ......!!##S 4kBB223AAkkk+V+VK+V+V+V     
 
  ,, 	 	q6	 	 	 	 	 	 	 '		 	 	 	 	 	 	 	&J&&&&s0   B)C +C3C CC CC 	C$tuple[str, bool]c                h    t          d| t                    }|r|                    d          dfS | dfS )Nz(.*)(?<!\\)#\s*noqa\s*$   TF)r   r   group)r$   ms     r>   
parse_noqarE   ^   s;    (&&99A wwqzz4u}    c                      e Zd ZdZdZd	dZdS )
PreserveTranslatableMessagesz:Preserve original translatable messages before translation
   kwargsr   r+   Nonec                |    | j                             t          j                  D ]}|                                 d S N)documentfindallr   translatablepreserve_original_messages)selfrJ   nodes      r>   applyz"PreserveTranslatableMessages.applyk   sC    M))(*?@@ 	. 	.D++----	. 	.rF   NrJ   r   r+   rK   __name__
__module____qualname____doc__default_priorityrT    rF   r>   rH   rH   f   s4        DD. . . . . .rF   rH   c                  Z    e Zd ZdZddZddZddZddZddZddZ	ddZ
ddZddZdS )_NodeUpdaterzAContains logic for updating one node with the translated content.rS   r,   patchrN   nodes.documentnoqaboolr+   rK   c                >    || _         || _        || _        || _        d S rM   )rS   r_   rN   ra   )rR   rS   r_   rN   ra   s        r>   __init__z_NodeUpdater.__init__s   s$     $(	$)
(0			rF   old_refsSequence[nodes.Element]new_refswarning_msgr%   c                    | j         sqt          |          t          |          k    rSd |D             }d |D             }t                              |                    ||          | j        dd           dS dS dS )zLWarn about mismatches between references in original and translated content.c                    g | ]	}|j         
S r\   	rawsource.0refs     r>   
<listcomp>z3_NodeUpdater.compare_references.<locals>.<listcomp>       !D!D!DC#-!D!D!DrF   c                    g | ]	}|j         
S r\   rk   rm   s     r>   rp   z3_NodeUpdater.compare_references.<locals>.<listcomp>   rq   rF   i18ninconsistent_references)locationtypesubtypeN)ra   lenloggerwarningformatrS   )rR   re   rg   rh   old_ref_rawsourcesnew_ref_rawsourcess         r>   compare_referencesz_NodeUpdater.compare_references   s     y 	S]]c(mm;;!D!D8!D!D!D!D!D8!D!D!DNN""#57IJJ1	      	 	;;rF   c                   d}t          | j        t          j                  rt          | j        j        t          j                  r| j        j        }t          j        | j                                                  }t          j        | j                                                  }||k    r(|	                    dg           }|
                    |           | j        j                            |d           }| j        j                            |d           }|r||s`| j        j                            |d            | j        j                            |d            | j        j                            |d            | j                            |           t%          t          j        |          }|                    | j                  D ]}	||	d<   d}|S )NFnamesrefnamer   T)
isinstancerS   r
   titleparentsectionfully_normalize_namer_   astext
setdefaultappendrN   nameidsget	nametypespopidsnote_implicit_targetr   targetrO   )
rR   	processedsection_nodenew_nameold_namer   _idexplicitmatcher
old_targets
             r>   update_title_mappingz!_NodeUpdater.update_title_mapping   s   	 ty%+..;	!49+U];;;	!  9+L1$*2C2C2E2EFFH1$)2B2B2D2DEEH8## $0#:#:7B#G#GX&&& m+//$??=266xFF"  E# 9 -11(DAAA/33HdCCC)--c4888 M66|DDD &elHEEE")//$-"@"@ 5 5J,4Jy)) 	rF   c                   dd}t          t          j        t          	          }t	          |                    | j                            }t	          |                    | j                            }|                     ||t          d
                     i }|D ]>}|
                    |                    d          g                               |           ?|D ]}|                    d          }|                    |g           }	|	s|j                            |           K|	                    d          }
|
d         |d<   |d         D ]}|| j        j        |<   |d         dk    r || j        j        |
|           n || j        j        |
|           |rZ| j        j        
                    |g           } |||
|           | j        j        
                    |g           } |||
|           d S )Nlstlist[N]oldr!   newr+   rK   c                l    || v r|| |                      |          <   d S |                     |           d S rM   )indexr   )r   r   r   s      r>   list_replace_or_appendzK_NodeUpdater.update_autofootnote_references.<locals>.list_replace_or_append   s8    czz&)CIIcNN###

3rF   )autoVinconsistent footnote references in translated message. original: {0}, translated: {1}r   r   r   r   rB   )r   r   r   r!   r   r!   r+   rK   )r   r
   footnote_referencer   listrO   rS   r_   r~   r   r   r   r   r   remover   rN   r   autofootnote_refssymbol_footnote_refsfootnote_refsrefnames)rR   r   is_autofootnote_refold_foot_refsnew_foot_refsold_foot_namerefsrnewfr   refsoldfidr   r   s                 r>   update_autofootnote_referencesz+_NodeUpdater.update_autofootnote_references   s:   	  	  	  	  *%*BMMM088CCDD088DDEE2 	
 	
 	
 HJ 	I 	IA((y)9)92>>EEaHHHH! 	= 	=Dhhy))G$(("55D ""4(((88A;;Du+DK5k - -(,!"%%F|q  &&t}'FdSSSS '&t}'I4QUVVV = $ ; F FwPR S S&&}dDAAA=1<<WbII&&xt<<<1	= 	=rF   c                &   t          t          j        t                    }t	          |                    | j                            }t	          |                    | j                            }|                     ||t          d                     d |D             }d |D             }g h |h |z
  }|D ]X}| j
                            |d                   s|r|                    d          |d<   n	 | j
                            |           Yd S )Nr   zMinconsistent references in translated message. original: {0}, translated: {1}c                    g | ]
}|d          S r   r\   rn   r   s     r>   rp   z;_NodeUpdater.update_refnamed_references.<locals>.<listcomp>      888!9888rF   c                    g | ]
}|d          S r   r\   r   s     r>   rp   z;_NodeUpdater.update_refnamed_references.<locals>.<listcomp>  r   rF   r   r   )r   r
   	referencer   r   rO   rS   r_   r~   r   rN   has_namer   note_refname)rR   is_refnamed_refre   rg   old_ref_namesnew_ref_namesorphansnewrs           r>   update_refnamed_referencesz'_NodeUpdater.update_refnamed_references  s7   
 &eosCCC//	::;;//
;;<<2 	
 	
 	
 98x88888x888:%}%(8-(88: 	- 	-D=))$y/::   &-kk!nnDOO M&&t,,,,	- 	-rF   c                "   t          t          j        t                    }t	          |                    | j                            }t	          |                    | j                            }i }|                     ||t          d                     |D ]7}|
                    |d         g                               |d                    8|D ]=}|d         }|                    |          r||                             d          |d<   >d S )Nr   r   r   r   r   )r   r
   r   r   r   rO   rS   r_   r~   r   r   r   r   r   )rR   is_refnamed_footnote_refr   r   refname_ids_mapr   r   r   s           r>   #update_refnamed_footnote_referencesz0_NodeUpdater.update_refnamed_footnote_references$  s!   #.u/GQT#U#U#U 5==diHHII5==djIIJJ022 	
 	
 	
 " 	P 	PD&&tI;;BB4;OOOO! 	> 	>D9oG""7++ >-g6::1==U	> 	>rF   c                    t          t          j        t                    }t	          |                    | j                            }t	          |                    | j                            }|                     ||t          d                     i }|D ]7}|
                    |d         g                               |d                    8|D ]<}|d         }|                    |          r||                                         |d<   =d S )Nr   zVinconsistent citation references in translated message. original: {0}, translated: {1}r   r   )r   r
   citation_referencer   r   rO   rS   r_   r~   r   r   r   r   r   )rR   is_citation_refold_cite_refsnew_cite_refsr   oldcnewcr   s           r>   update_citation_referencesz'_NodeUpdater.update_citation_references9  s   %e&>LLL_44TY??@@_44TZ@@AA2 	
 	
 	
 13! 	P 	PD&&tI;;BB4;OOOO! 	= 	=D9oG""7++ =-g6::<<U	= 	=rF   c                   g | j                             t          j                  }g | j                            t          j                  }|                     ||t          d                     i }dd}|D ]} ||          }|r
|j        ||<   |D ]I} ||          }|                    |i           	                                D ]\  }}	|t          vr|	||<   Jd S )NzRinconsistent term references in translated message. original: {0}, translated: {1}rS   addnodes.pending_xrefr+   tuple[str, str, str] | Nonec                `    | d         | d         f}|dk    rd S | d         | d         | d         fS )N	refdomainreftype)stdterm	reftargetr\   )rS   cases     r>   get_ref_keyz6_NodeUpdater.update_pending_xrefs.<locals>.get_ref_key_  sH    $d9o5D&&t %O% rF   )rS   r   r+   r   )rS   rO   r   pending_xrefr_   r~   r   
attributesr   items EXCLUDED_PENDING_XREF_ATTRIBUTES)
rR   	old_xrefs	new_xrefsxref_reftarget_mapr   r   keyr   kvs
             r>   update_pending_xrefsz!_NodeUpdater.update_pending_xrefsN  s7    @di''(=>>?	@dj(()>??@	2 	
 	
 	
 QS		 		 		 		  	9 	9C+c""C 9*-."3' 	 	C+c""C +..sB77==??  1<<<CF		 	rF   c                h    | j         j        D ]}| j        |_        | j         j        | j        _        d S rM   )r_   childrenrS   r   )rR   childs     r>   update_leavesz_NodeUpdater.update_leavesv  s6    Z( 	% 	%E9ELL!Z0	rF   N)
rS   r,   r_   r,   rN   r`   ra   rb   r+   rK   )re   rf   rg   rf   rh   r%   r+   rK   )r+   rb   )r+   rK   )rW   rX   rY   rZ   rd   r~   r   r   r   r   r   r   r   r\   rF   r>   r^   r^   p   s        KK
 
 
 
   $A A A AF.= .= .= .=`- - - -@> > > >*= = = =*& & & &P1 1 1 1 1 1rF   r^   c                      e Zd ZdZdZd	dZdS )
Localez9Replace translatable nodes with their translated doctree.   rJ   r   r+   rK   c                  " | j         j        | j         d         }}d}t          | j        j        | j        j                  }| j        j        ""fd| j        j        D             }t          || j        j
        |          \  }}|sd S t          |dd           g}	|j        x}-|	                    t          |dd                      |j        x}-i }
t          d t          |	                    D ]}|
|z  }
t!          | j                   D ]\  }}|
                    |d          }t%          |t&                    st)          |          \  }}|                                sd|d<   ]||k    rd|d<   i|                                                    d          r|d	z  }t%          |t&                    rd
t/          |d          z   }t1          | j        |||j        | j        |          }t%          |t6          j                  st;          ||| j         d          }|                                }t%          |t6          j                  rm|d         D ]d}tA          |          \  }}t1          | j        |pd||j        | j        |          }tC          | j        ||||j        || j                   |_"        d}e|r|#                                 d|d<   d|d<   t!          | j                   D ]\  }}|$                    dd          r|
                    |d          }d}t%          |t&                    st)          |          \  }}|r||k    rd|d<   jt%          |tJ          j&                  r|'                    ||           t%          |t6          j(                  r||d<   d|d<   t%          |t6          j)                  r|                    d          |k    r||d<   |                                                    d          r|d	z  }t%          |t&                    rd
t/          |d          z   }t%          |t6          j*                  r|dz   dtW          |          z  dz  z   }t1          | j        |||j        | j        |          }t%          |t6          j*                  r|,                                }t6          j        t6          j*        f}|t&          z  }|tZ          z  }t%          ||          st;          ||| j         |          }|.                                 |/                                 |0                                 |1                                 |2                                 |#                                 t%          |t&                    r|3                                |_4        t%          |t6          j)                  r+|                    d          |k    r|d         |d<   d|d<   d|d<   d| j        j5        v rtm          | j                   D ]\  }}g }|D ]}\  }}}}}to          ||          }g }|D ]1} |
                    | d          }|s| }|                    |           2|d8                    |          ||d f}!|                    |!           ~||d<   ||d<   d S d S )Nr$    c                    g | ]}|z  S r\   r\   )rn   	directorysrcdirs     r>   rp   z Locale.apply.<locals>.<listcomp>  s    LLLy"LLLrF   _catalogF
translatedTz::z

   dummy literalz::

z   )ra   r   contentalt
=   urir   ;raw_entriesentries)9rN   r*   r   envdocnamer)   gettext_compactr   locale_dirsinit_localelanguagegetattr	_fallbackr   filterreversedr   r   r   r   rE   stripendswithr   r?   r#   liner
   	paragraphr^   r   r   r   r   r_   r   r   r   rP   apply_translated_messagemetaimager   rx   	next_noder   r   r   r   r   r   r   rl   gettext_additional_targetsr   r   join)#rR   rJ   r*   r$   msgstr
textdomaindirscataloghas_catalog
cataloguesmerged	cataloguerS   msg_r_   updaterr   r   r   first_classifierra   
unexpectedr   new_entries
entry_typevalue	target_idmain_category_key	msg_partsmsgstr_partspart	new_entryr   s#                                     @r>   rT   zLocale.apply  s`   =14=3J&&tx'79TUU
 LLLLDK4KLLL*41EzRR 	Fgz4889
!++w8ggz4@@AAA "++w8!#hz&:&:;; 	  	 IiFF *$-88 L	+ L	+ID#ZZR((F d$677 /&v..	<<>> %*\"}}%)\" ||~~&&t,, 100
 $ 233 <!F67$;$;;"	 E eU_55 "4EJJJG4466I $
++ %; % %C-CF-K-K*D**
	  E %7(	% %GM !%II  +%%'''%)\""%*\"" *$-88 ^	& ^	&ID#|U33 ZZR((FD d$677 2)&11 Vs]]%*\" $ 566 --c6::: $
++ "(Y%)\"$,, %C1G1G$U ||~~&&t,, 100
 $ 233 <!F67$;$;;
 $,, ?$s6{{):Q)>>"	 E $,, *)) ;J ,,J**JeZ00 "4tDDG22444..00077999..000((***!!### $ 233 /!%$,, %C1G1G#ElU%*\"!%Ddk<<<!<T]!K!K . .gKMIP 2 2EJy$ /
E B BI#%L ) 4 4!'D"!5!5% *%)F$++F3333 #..!!I  &&y1111&-]#"-Y/ =<. .rF   NrU   rV   r\   rF   r>   r   r   |  s:        CC[. [. [. [. [. [.rF   r   c                      e Zd ZdZdZd	dZdS )
TranslationProgressTotaliserz:Calculate the number of translated and untranslated nodes.   rJ   r   r+   rK   c                   ddl m} t          | j        j        |          rd S dx}}t          t          j        t                    	                    | j
                  D ]}|dz  }|d         r|dz  }||d| j
        d<   d S )Nr   MessageCatalogBuilderr   rB   r   )totalr   translation_progress)sphinx.builders.gettextr-  r   r#   builderr   r
   Elementr   rO   rN   )rR   rJ   r-  r/  r   rS   s         r>   rT   z"TranslationProgressTotaliser.applyd  s    AAAAAAdh&(=>> 	F
#>>>FFt}UU 	  	 DQJEL!  a
 $1
 1
,---rF   NrU   rV   r\   rF   r>   r)  r)  _  s4        DD
 
 
 
 
 
rF   r)  c                      e Zd ZdZdZd	dZdS )
AddTranslationClasseszNAdd ``translated`` or ``untranslated`` classes to indicate translation status.i  rJ   r   r+   rK   c                6   ddl m} t          | j        j        |          rd S | j        j        sd S | j        j        du rdx}}n;| j        j        dk    rd}d}n&| j        j        dk    rd}d}nd}t          |          t          t          j
        t                                        | j                  D ]a}|d         r,|r)|                    d	g                               d           6|r)|                    d	g                               d           bd S )
Nr   r,  Tr   FuntranslatedzPtranslation_progress_classes must be True, False, "translated" or "untranslated"r.  classes)r1  r-  r   r#   r2  r)   translation_progress_classesr   r   r
   r3  r   rO   rN   r   r   )rR   rJ   r-  add_translatedadd_untranslatedr  rS   s          r>   rT   zAddTranslationClasses.apply{  sY   AAAAAAdh&(=>> 	F{7 	F;3t;;044N--[5EE!N$[5GG"N#>  c"""#>>>FFt}UU 	J 	JDL! J! HOOIr2299,GGG# JOOIr2299.III	J 	JrF   NrU   rV   r\   rF   r>   r5  r5  v  s:        XXJ J J J J JrF   r5  c                      e Zd ZdZdZd	dZdS )
RemoveTranslatableInlinez9Remove inline nodes used for translation as placeholders.i  rJ   r   r+   rK   c                "   ddl m} t          | j        j        |          rd S t          t          j        t                    }|	                    | j
                  D ]1}|j                            |           |xj        |j        z  c_        2d S )Nr   r,  )rP   )r1  r-  r   r#   r2  r   r
   inliner   rO   rN   r   r   r   )rR   rJ   r-  r   r?  s        r>   rT   zRemoveTranslatableInline.apply  s    AAAAAAdh&(=>> 	Fel===oodm44 	- 	-FM  (((MMV_,MMM	- 	-rF   NrU   rV   r\   rF   r>   r=  r=    s4        CC	- 	- 	- 	- 	- 	-rF   r=  r   c                   |                      t                     |                      t                     |                      t                     |                      t                     |                      t
                     ddddS )NbuiltinT)versionparallel_read_safeparallel_write_safe)add_transformrH   r   r)  r5  r=  )r#   s    r>   r3   r3     s    2333f2333+,,,./// "#  rF   )r#   r   r$   r%   r&   r%   r'   r(   r)   r   r*   r   r+   r,   )r$   r%   r+   r@   )r#   r   r+   r   )BrZ   
__future__r   r8   rer   r   textwrapr   typingr   r   r	   docutilsr
   docutils.ior   sphinxr   sphinx.domains.stdr   r   sphinx.errorsr   sphinx.localer   r   r  sphinx.transformsr   sphinx.utilr   r   sphinx.util.i18nr   sphinx.util.index_entriesr   sphinx.util.nodesr   r   r   r   r   collections.abcr   sphinx.applicationr   sphinx.configr   sphinx.util.typingr   	getLoggerrW   ry   r   Noder!   r?   rE   rH   r^   r   r)  r5  r=  r3   r\   rF   r>   <module>r[     sk   @ @ " " " " " "                   . . . . . . . . . .       # # # # # #       I I I I I I I I % % % % % %       - - - - - - - - - - - - - - - - - - - - . . . . . . 5 5 5 5 5 5               5(((((())))))$$$$$$444444 
	8	$	$ $4   GCuz""")' )' )' )'X   . . . . .? . . .I1 I1 I1 I1 I1 I1 I1 I1X`. `. `. `. `._ `. `. `.F
 
 
 
 
? 
 
 
.#J #J #J #J #JO #J #J #JL- - - - - - - -"     rF   