
    Fef                       d Z ddlm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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/m0Z0 ddl1m2Z2  e"jf                  e4      Z5dZ6 edejn                        Z8	 	 	 	 	 	 d)dZ9d*dZ: G d de      Z; G d d      Z< G d  d!e      Z= G d" d#e      Z> G d$ d%e      Z? G d& d'e      Z@d+d(ZAy),z:Docutils transforms used by Sphinx when reading documents.    )annotationsN)path)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)refexplicitN)boundc           	        	 |j                   }d|_         ddlm}  |       }|j                  |        t	        |j
                  |      }	| j                  j                  | |	      }
|j                  t        || d| d      |
|      }t        j                  t              5  |d   cddd       ||_         S # 1 sw Y   nxY w|||_         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>)sourcesource_path)r&   parsersettings)
rst_prolog	sphinx.ior$   setupr   source_suffixregistrycreate_source_parserreadr   
contextlibsuppress
IndexError)appr&   r'   source_lineconfigr)   r*   r$   readerfiletyper(   docs               8/usr/lib/python3/dist-packages/sphinx/transforms/i18n.pypublish_msgstrr;   2   s    '&&
 .!#S 4 4kB223Akkf.9]!K=+VX	  
   , 	q6	 	 '		 	&Js$   B!C #B9(	C 9C>C 	Cc                V    t        d| t              }|r|j                  d      dfS | dfS )Nz(.*)(?<!\\)#\s*noqa\s*$   TF)r   r   group)r&   ms     r:   
parse_noqar@   V   s1    (&&9Awwqz4u}    c                      e Zd ZdZdZddZy)PreserveTranslatableMessageszD
    Preserve original translatable messages before translation
    
   c                    | j                   j                  t        j                        D ]  }|j	                           y N)documentfindallr   translatablepreserve_original_messages)selfkwargsnodes      r:   applyz"PreserveTranslatableMessages.applyd   s2    MM))(*?*?@ 	.D++-	.rA   NrL   r	   returnNone__name__
__module____qualname____doc__default_priorityrN    rA   r:   rC   rC   ^   s     .rA   rC   c                  x    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y)_NodeUpdaterzAContains logic for updating one node with the translated content.c                <    || _         || _        || _        || _        y rF   )rM   patchrG   noqa)rK   rM   r\   rG   r]   s        r:   __init__z_NodeUpdater.__init__l   s      $(	$)
(0	rA   c                ,   | j                   s~t        |      t        |      k7  rf|D cg c]  }|j                   }}|D cg c]  }|j                   }}t        j	                  |j                  ||      | j                  dd       yyyc c}w c c}w )zLWarn about mismatches between references in original and translated content.i18ninconsistent_references)locationtypesubtypeN)r]   len	rawsourceloggerwarningformatrM   )rK   old_refsnew_refswarning_msgrefold_ref_rawsourcesnew_ref_rawsourcess          r:   compare_referencesz_NodeUpdater.compare_referencest   s    
 yyS]c(m;;C!DC#--!D!D;C!DC#--!D!DNN;--.@BTU$(IIFD]  _ <y!D!Ds   BBc                "   d}t        | j                  t        j                        rt        | j                  j                  t        j
                        r| j                  j                  }t        j                  | j                  j                               }t        j                  | j                  j                               }||k7  rB|j                  dg       }|j                  |       | j                  j                  j                  |d       }| j                  j                  j                  |d       }|r|sr| j                  j                  j                  |d        | j                  j                  j                  |d        | j                  j                   j                  |d        | j                  j#                  |       t%        t        j&                  |      }| j                  j)                  |      D ]  }	||	d<   	 d}|S )NFnamesrefnamert   T)
isinstancerM   r   titleparentsectionfully_normalize_namer\   astext
setdefaultappendrG   nameidsget	nametypespopidsnote_implicit_targetr   targetrH   )
rK   	processedsection_nodenew_nameold_namerr   _idexplicitmatcher
old_targets
             r:   update_title_mappingz!_NodeUpdater.update_title_mapping   s   	 dii-*TYY=M=Mu}}2]99++L11$**2C2C2EFH11$))2B2B2DEH8# %//<X& mm++//$?==2266xF" # --11(DA//33HdC))--c48 MM66|D &ellHE"&--"7"7"@ 5J,4Jy)5 !	rA   c                   d	d}t        t        j                  t              }g | j                  j                  |      }g | j                  j                  |      }| j                  ||t        d             i }|D ]2  }|j                  |j                  d      g       j                  |       4 |D ](  }|j                  d      }|j                  |g       }	|	s|j                  j                  |       E|	j                  d      }
|
d   |d<   |d   D ]  }|| j                  j                   |<    |d   dk(  r || j                  j"                  |
|       n || j                  j$                  |
|       |s| j                  j&                  j                  |g       } |||
|       | j                  j(                  j                  |g       } |||
|       + y )
Nc                X    || v r|| | j                  |      <   y | j                  |       y rF   )indexr|   )lstoldnews      r:   list_replace_or_appendzK_NodeUpdater.update_autofootnote_references.<locals>.list_replace_or_append   s&    cz&)CIIcN#

3rA   )autoVinconsistent footnote references in translated message. original: {0}, translated: {1}rt   r   r   r   r=   )r   zlist[N]r   r!   r   r!   rP   rQ   )r   r   footnote_referencer	   rM   rH   r\   rp   r   r{   r~   r|   rw   remover   rG   r   autofootnote_refssymbol_footnote_refsfootnote_refsrefnames)rK   r   is_autofootnote_refold_foot_refsnew_foot_refsold_foot_namerefsrnewfrt   refsoldfidr   r   s                 r:   update_autofootnote_referencesz+_NodeUpdater.update_autofootnote_references   s   	  *%*B*BM95YY239596ZZ 3496} " $E !F	G HJ 	IA((y)92>EEaH	I! 	=Dhhy)G$(("5D""4(88A;Du+DK5k -(,!!"%- F|q &t}}'F'FdS 't}}'I'I4QUV $ ; ; F FwPR S&}dDA==11<<WbI&xt<1	=rA   c                   t        t        j                  t              }g | j                  j                  |      }g | j                  j                  |      }| j                  ||t        d             |D cg c]  }|d   	 }}|D cg c]  }|d   	 }}g h |h |z
  }|D ]S  }| j                  j                  |d         s|r|j                  d      |d<   n	 | j                  j                  |       U y c c}w c c}w )Nrs   zMinconsistent references in translated message. original: {0}, translated: {1}rt   r   )r   r   	referencer	   rM   rH   r\   rp   r   rG   has_namer   note_refname)	rK   is_refnamed_refrj   rk   r   old_ref_namesnew_ref_namesorphansnewrs	            r:   update_refnamed_referencesz'_NodeUpdater.update_refnamed_references   s   
 &eoosC*ODII,=,=o,N*O*PDJJ,>,>,O*P( " $E !F	G 088!988/78!988:%}%(8-(88: 	-D==))$y/: &-kk!nDO MM&&t,	- 98s   :C>Dc                   t        t        j                  t              }g | j                  j                  |      }g | j                  j                  |      }i }| j                  ||t        d             |D ])  }|j                  |d   g       j                  |d          + |D ]0  }|d   }|j                  |      s||   j                  d      |d<   2 y )Nrs   r   rt   r   r   )r   r   r   r	   rM   rH   r\   rp   r   r{   r|   r~   r   )rK   is_refnamed_footnote_refr   r   refname_ids_mapr   r   rt   s           r:   #update_refnamed_footnote_referencesz0_NodeUpdater.update_refnamed_footnote_references  s    #.u/G/GQT#U 9'$)):K:K$;& 9'9'$**:L:L$;& 9'02} " $E !F	G " 	PD&&tI;BB4;O	P! 	>D9oG""7+-g6::1=U	>rA   c                   t        t        j                  t              }g | j                  j                  |      }g | j                  j                  |      }| j                  ||t        d             i }|D ])  }|j                  |d   g       j                  |d          + |D ]/  }|d   }|j                  |      s||   j                         |d<   1 y )Nrs   zVinconsistent citation references in translated message. original: {0}, translated: {1}rt   r   )r   r   citation_referencer	   rM   rH   r\   rp   r   r{   r|   r~   r   )rK   is_citation_refold_cite_refsnew_cite_refsr   oldcnewcrt   s           r:   update_citation_referencesz'_NodeUpdater.update_citation_references  s    %e&>&>L8]$)):K:KO:\8]8^$**:L:L_:]8^} " $E !F	G 13! 	PD&&tI;BB4;O	P! 	=D9oG""7+-g6::<U	=rA   c                   g | j                   j                  t        j                        }g | j                  j                  t        j                        }| j                  ||t        d             i }dd}|D ]  } ||      }|s|j                  ||<    |D ]@  } ||      }|j                  |i       j                         D ]  \  }}	|t        vs|	||<    B y )NzRinconsistent term references in translated message. original: {0}, translated: {1}c                >    | d   | d   f}|dk(  ry | d   | d   | d   fS )N	refdomainreftype)stdterm	reftargetrX   )rM   cases     r:   get_ref_keyz6_NodeUpdater.update_pending_xrefs.<locals>.get_ref_key5  sC    $d9o5D& %O% rA   )rM   zaddnodes.pending_xrefrP   ztuple[str, str, str] | None)rM   rH   r   pending_xrefr\   rp   r   
attributesr~   items EXCLUDED_PENDING_XREF_ATTRIBUTES)
rK   	old_xrefs	new_xrefsxref_reftarget_mapr   r   keyr   kvs
             r:   update_pending_xrefsz!_NodeUpdater.update_pending_xrefs)  s     @dii''(=(=>?	@djj(()>)>?@		9 " $E !F	G QS		  	9Cc"C*-.."3'	9  	Cc"C +..sB7==? 1<<CF		rA   c                    | j                   j                  D ]  }| j                  |_         | j                   j                  | j                  _        y rF   )r\   childrenrM   rw   )rK   childs     r:   update_leavesz_NodeUpdater.update_leavesL  s<    ZZ(( 	%E99EL	%!ZZ00		rA   N)
rM   nodes.Elementr\   r   rG   znodes.documentr]   boolrP   rQ   )rj   Sequence[nodes.Element]rk   r   rl   strrP   rQ   )rP   r   )rP   rQ   )rS   rT   rU   rV   r^   rp   r   r   r   r   r   r   r   rX   rA   r:   rZ   rZ   i   sy    K!*7CQY]		_%<	_(+	_04	_>@+=Z-6>$= !F1rA   rZ   c                      e Zd ZdZdZddZy)LocalezC
    Replace translatable nodes with their translated doctree.
       c                n   | j                   j                  | j                   d   }}d}t        | j                  j                  | j
                  j                        }| j
                  j                  D cg c],  }t        j                  | j                  j                  |      . }}t        || j
                  j                  |      \  }}	|	sy t        |dd       g}
|j                  x}+|
j                  t        |dd              |j                  x}+i }t!        d t#        |
            D ]  }||z  }	 t%        | j                         D ]  \  }}|j'                  |d      }t)        |t*              st-        |      \  }}|j/                         dk(  rd|d<   P||k(  rd|d<   [|j/                         j1                  d      r|dz  }t)        |t*              rd	t3        |d
      z   }t5        | j6                  |||j8                  | j
                  |      }t)        |t:        j<                        st?        ||| j                   d      }|jA                         }t)        |t:        jB                        r|d   D ]  }tE        |      }t5        | j6                  |d   xs d||j8                  | j
                  |      }tG        | j                  ||d   xs d||j8                  || j                         |_$        d} |r|jK                          d|d<   d|d<    t%        | j                         D ]  \  }}|jM                  dd      r|j'                  |d      }d}t)        |t*              st-        |      \  }}|r||k(  rd|d<   Yt)        |tN        jP                        r|jS                  ||       t)        |t:        jT                        r||d<   d|d<   t)        |t:        jV                        r|j'                  d      |k(  r||d<   |j/                         j1                  d      r|dz  }t)        |t*              rd	t3        |d
      z   }t)        |t:        jX                        r|dz   dt[        |      z  dz  z   }t5        | j6                  |||j8                  | j
                  |      }t)        |t:        jX                        r|j]                         }t:        j<                  t:        jX                  f}|t*        z  }|t^        z  }t)        ||      st?        ||| j                   |      }|ja                          |jc                          |je                          |jg                          |ji                          |jK                          t)        |t*              r|jk                         |_6        t)        |t:        jV                        r#|j'                  d      |k7  r|d   |d<   d|d<   d|d<    d| j
                  jn                  v rtq        | j                         D ]  \  }}g }|D ]k  \  }}}}}ts        ||      }g }|D ])  } |j'                  | d      }|s| }|j                  |       + |dj                  |      ||d f}!|j                  |!       m ||d<   ||d<    y y c c}w )Nr&    _catalogF
translatedTz::z

   dummy literalz::

z   )r]   r   r   r=   contentalt
=   urir   ;raw_entriesentries):rG   r)   r   envdocnamer6   gettext_compactlocale_dirsr   joinsrcdirinit_localelanguagegetattr	_fallbackr|   filterreversedr   r~   ru   r   r@   stripendswithr   r;   r4   liner   	paragraphrZ   r   r   r   r   r\   r   r{   r   rI   apply_translated_messagemetaimagerv   re   	next_noder   r   r   r   r   r   rz   rf   gettext_additional_targetsr   r   )"rK   rL   r)   r&   msgstr
textdomain	directorydirscataloghas_catalog
cataloguesmerged	cataloguerM   msg_r\   updaterr   r   partsr]   
unexpectedr   new_entries
entry_typevalue	target_idmain_category_key	msg_partsmsgstr_partspart	new_entrys"                                     r:   rN   zLocale.applyX  sM   ==114==3J&&txx'7'79T9TU
 "&!8!8: 		$((//95 : :*41E1EzRgz489
!+++w8ggz4@A "+++w8!#hz&:; 	 IiF	  *$--8 ;	+ID#ZZR(F d$67&v.	||~#%*\"}%)\" ||~&&t,00
 $ 23!F67$;;"488VV#'99dkk8EE eU__5"4EJG446I $

+; %C26:E*%(.b&$))T[[RZE %7%qRCQUQ^Q^%GM !%I% %%'%)\"%*\"w;	+| *$--8 X	&ID#|U3ZZR(FD d$67)&1Vs]%*\" $ 5 56--c6: $

+"(Y%)\"$,%C1G$U ||~&&t,00
 $ 23!F67$;;
 $,$s6{):Q)>>"488VV#'99dkk8EE $,) ;J ,,J**JeZ0"4tDG224..0779..0((*!!# $ 23!%$,%C1G#ElU%*\"!%DqX	&t dkk<<<!<T]]!K .gKMIP 
2EJy$ /
E BI#%L ) 4!'D"!5%%)F$++F3	4 !+CHH\,BItUY YI&&y1
2 '.]#"-Y. =M:s   41Z2NrO   rR   rX   rA   r:   r   r   R  s     ~.rA   r   c                      e Zd ZdZdZddZy)TranslationProgressTotaliserzD
    Calculate the number of translated and untranslated nodes.
       c                    ddl m} t        | j                  j                  |      ry dx}}| j
                  j                  t        t                    D ]  }|dz  }|d   s|dz  } ||d| j
                  d<   y )Nr   MessageCatalogBuilderr   r=   r   )totalr   translation_progress)	sphinx.builders.gettextr  ru   r4   builderrG   rH   r   r	   )rK   rL   r  r  r   rM   s         r:   rN   z"TranslationProgressTotaliser.apply  s}    Adhh&&(=>
MM))+*EF 	 DQJEL!a
	  $1
,-rA   NrO   rR   rX   rA   r:   r  r    s     
rA   r  c                      e Zd ZdZdZddZy)AddTranslationClasseszX
    Add ``translated`` or ``untranslated`` classes to indicate translation status.
    i  c                D   ddl m} t        | j                  j                  |      ry | j
                  j                  sy | j
                  j                  du rdx}}nI| j
                  j                  dk(  rd}d}n+| j
                  j                  dk(  rd}d}nd}t        |      | j                  j                  t        t                    D ]P  }|d   r%|s|j                  d	g       j                  d       -|s0|j                  d	g       j                  d       R y )
Nr   r  Tr   FuntranslatedzPtranslation_progress_classes must be True, False, "translated" or "untranslated"r  classes)r  r  ru   r4   r  r6   translation_progress_classesr   rG   rH   r   r	   r{   r|   )rK   rL   r  add_translatedadd_untranslatedr  rM   s          r:   rN   zAddTranslationClasses.apply6  s    Adhh&&(=>{{77;;33t;044N-[[55E!N$[[55G"N#ACc""MM))+*EF 	JDL!!OOIr299,G#OOIr299.I	JrA   NrO   rR   rX   rA   r:   r!  r!  0  s     JrA   r!  c                      e Zd ZdZdZddZy)RemoveTranslatableInlinezC
    Remove inline nodes used for translation as placeholders.
    i  c                V   ddl m} t        | j                  j                  |      ry t        t        j                  t              }t        | j                  j                  |            D ]<  }|j                  j                  |       |xj                  |j                  z  c_        > y )Nr   r  )rI   )r  r  ru   r4   r  r   r   inliner	   listrG   rH   rw   r   r   )rK   rL   r  r   r+  s        r:   rN   zRemoveTranslatableInline.applyZ  st    Adhh&&(=>ell=4==009: 	-FMM  (MMV__,M	-rA   NrO   rR   rX   rA   r:   r)  r)  T  s     -rA   r)  c                    | j                  t               | j                  t               | j                  t               | j                  t               | j                  t
               ddddS )NbuiltinT)versionparallel_read_safeparallel_write_safe)add_transformrC   r   r  r!  r)  )r4   s    r:   r,   r,   e  sa    23f23+,./ "# rA   )r4   r   r&   r   r'   r   r5   intr6   r   r)   r	   rP   r   )r&   r   rP   ztuple[str, bool])r4   r   rP   zdict[str, Any])BrV   
__future__r   r1   osr   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   	getLoggerrS   rg   r   Noder!   r;   r@   rC   rZ   r   r  r!  r)  r,   rX   rA   r:   <module>rI     s    @ "     . .  #  I %  - - - . 5  ()$ 
		8	$ $4   Cuzz"!'!!'-0!'5B!'H.? .f1 f1RD._ D.N
? 
.!JO !JH- -"rA   