B
    \X                 @   s   d 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 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mZmZ ddlm Z  e!e"Z#dd Z$G dd deZ%G dd deZ&G dd deZ'dS )z
    sphinx.transforms.i18n
    ~~~~~~~~~~~~~~~~~~~~~~

    Docutils transforms used by Sphinx when reading documents.

    :copyright: Copyright 2007-2019 by the Sphinx team, see AUTHORS.
    :license: BSD, see LICENSE for details.
    )path)nodes)StringInput)relative_path)addnodes)make_glossary_termsplit_term_classifiers)__init)SphinxTransform)split_index_msglogging)find_catalog)LITERAL_TYPE_NODESIMAGE_TYPE_NODESextract_messagesis_pending_metatraverse_translatable_index)indentc       
      C   sh   ddl m} || }| j| d}|jt|d||f d||d}	y|	d }	W n tk
rb   Y nX |	S )a  Publish msgstr (single line) into docutils document

    :param sphinx.application.Sphinx app: sphinx application
    :param unicode source: source text
    :param unicode 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
    r   )SphinxI18nReaderZrestructuredtextz%s:%s:<translated>)sourcesource_path)r   parsersettings)Z	sphinx.ior   registryZcreate_source_parserreadr   
IndexError)
appr   r   Zsource_lineconfigr   r   readerr   doc r!   5lib/python3.7/site-packages/sphinx/transforms/i18n.pypublish_msgstr'   s    r#   c               @   s   e Zd ZdZdZdd ZdS )PreserveTranslatableMessageszC
    Preserve original translatable messages befor translation
    
   c             C   s$   x| j tjD ]}|  qW d S )N)documenttraverser   translatableZpreserve_original_messages)selfnoder!   r!   r"   applyJ   s    z"PreserveTranslatableMessages.applyN)__name__
__module____qualname____doc__default_priorityr+   r!   r!   r!   r"   r$   D   s   r$   c               @   s   e Zd ZdZdZdd ZdS )LocalezC
    Replace translatable nodes with their translated doctree.
       c       B   	      s	  j jj d  }}d}|jjs*tttt	jjd|d }t
|jj}fddjjD }t|jj|\}}|sd S xHtj D ]8\}	}
||
}|r||
ks| sq| dr|d7 }t|	trd	t|d
 }tj|||	jj|}t|tjsqd}t|	tjr|	j}t| }t|	   |kr| dg }|!| j j"# d }j j$# d }|r|sȈj j"% d  j j$% d  j j&%|d  j '|  fdd}xj (|D ]}||d< qW d}t|	tj)rjj* dt+ }x|	d D ]t}||krF|,| t-|}tj|d ||	jj|}t.j||d ||	j|}|d |	d< |d |	d< d}q.W |rx|j/D ]}|	|_qW |j/|	_/d|	d< qW x tj D ]\}	}
|	#ddr q||
}|r||
krqt|	t0j1r<|	2|
| qt3|	r\||	j4d d d< q| drt|d7 }t|	trd	t|d
 }t|	tjr|d dt5| d  }tj|||	jj|}t|	tjr|6 }t|tjtjft t7 sqdd }dd }|	(|}|(|}t5|t5|krndd |D }dd |D }t8j9t:d ;|||	d! i }x&|D ]}| |#dg !| qxW x|D ]}|#d} |#| g }!|!sĐq|!%d}"|"d |d< x|d D ]}#|j j&|#< qW |d" dkr|j j<|"| n|j j=|"| | r|j j> | g |"| |j j? | g |"| qW d#d$ }$|	(|$}%|(|$}&t5|%t5|&krd%d |%D }'d&d |&D }(t8j9t:d';|'|(|	d! d(d |%D })d)d |&D }*t@t+|)t+|* }+xB|&D ]:}j A|d s,|+r,|+%d|d< n j B| q W d*d+ },|	(|,}|(|,}i }-t5|t5|krd,d |D }d-d |D }t8j9t:d ;|||	d! x(|D ] }"|- |"d g !|"d  qW x4|D ],}|d } |-#| r|-|  %d|d< qW d.d/ }.|	(|.}/|(|.}0i }-t5|/t5|0krnd0d |/D }1d1d |0D }2t8j9t:d2;|1|2|	d! x(|/D ] }"|- |"d g !|"d  qtW x2|0D ]*}|d } |-#| r|-|  % |d< qW |	(t0jC}%|(t0jC}&i }3t5|%t5|&kr0d3d |%D }'d4d |&D }(t8j9t:d5;|'|(|	d! d6d7 }4x&|%D ]}"|4|"}5|5r>|"jD|3|5< q>W x>|&D ]6}|4|}5x&|3#|5i E D ]\}6}7|7||6< qW qfW x|j/D ]}|	|_qW |j/|	_/t|	tr|	 |	_Ft|	t7r|	G| d|	d< qW d8jjHk	rxtIj D ]\}	}8g }9xn|8D ]f\}:}
};}<}=tJ|:|
}>g }?x,|>D ]$}@||@}|	s`|@}|?!| 	qHW |9!|:d9	|?|;|<d f 	q&W |8|	d:< |9|	d;< 	qW d<d= }Ax j (|AD ]}	|	Kd 	qW d S )>Nr    Zdummyr   c                s   g | ]}t  jj|qS r!   )r   joinenvsrcdir).0Z	directory)r)   r!   r"   
<listcomp>b   s   z Locale.apply.<locals>.<listcomp>z::z

   dummy literalz::

z   Fnamesc                s   t | tjo| d kS )Nrefname)
isinstancer   targetget)r*   )old_namer!   r"   is_named_target   s    z%Locale.apply.<locals>.is_named_targetr:   Tgloss_entries   ids
translatedr   Zcontent
-   c             S   s   t | tjo| dS )Nauto)r;   r   footnote_referencer=   )r*   r!   r!   r"   is_autofootnote_ref  s    z)Locale.apply.<locals>.is_autofootnote_refc             S   s&   || kr|| |  |< n
| | d S )N)indexappend)Zlstoldnewr!   r!   r"   list_replace_or_append  s    z,Locale.apply.<locals>.list_replace_or_appendc             S   s   g | ]
}|j qS r!   )	rawsource)r7   refr!   r!   r"   r8   $  s    c             S   s   g | ]
}|j qS r!   )rO   )r7   rP   r!   r!   r"   r8   %  s    zVinconsistent footnote references in translated message. original: {0}, translated: {1})locationrG   c             S   s   t | tjod| kS )Nr:   )r;   r   Z	reference)r*   r!   r!   r"   is_refnamed_refK  s    z%Locale.apply.<locals>.is_refnamed_refc             S   s   g | ]
}|j qS r!   )rO   )r7   rP   r!   r!   r"   r8   R  s    c             S   s   g | ]
}|j qS r!   )rO   )r7   rP   r!   r!   r"   r8   S  s    zMinconsistent references in translated message. original: {0}, translated: {1}c             S   s   g | ]}|d  qS )r:   r!   )r7   rr!   r!   r"   r8   X  s    c             S   s   g | ]}|d  qS )r:   r!   )r7   rS   r!   r!   r"   r8   Y  s    c             S   s   t | tjod| kS )Nr:   )r;   r   rH   )r*   r!   r!   r"   is_refnamed_footnote_refi  s    z.Locale.apply.<locals>.is_refnamed_footnote_refc             S   s   g | ]
}|j qS r!   )rO   )r7   rP   r!   r!   r"   r8   q  s    c             S   s   g | ]
}|j qS r!   )rO   )r7   rP   r!   r!   r"   r8   r  s    c             S   s   t | tjod| kS )Nr:   )r;   r   Zcitation_reference)r*   r!   r!   r"   is_citation_ref  s    z%Locale.apply.<locals>.is_citation_refc             S   s   g | ]
}|j qS r!   )rO   )r7   rP   r!   r!   r"   r8     s    c             S   s   g | ]
}|j qS r!   )rO   )r7   rP   r!   r!   r"   r8     s    zVinconsistent citation references in translated message. original: {0}, translated: {1}c             S   s   g | ]
}|j qS r!   )rO   )r7   rP   r!   r!   r"   r8     s    c             S   s   g | ]
}|j qS r!   )rO   )r7   rP   r!   r!   r"   r8     s    zRinconsistent term references in translated message. original: {0}, translated: {1}c             S   s6   | d | d f}|dkrd S | d | d | d fS d S )NZ	refdomainZreftype)ZstdtermZ	reftargetr!   )r*   Zcaser!   r!   r"   get_ref_key  s    z!Locale.apply.<locals>.get_ref_keyrJ   ;Zraw_entriesentriesc             S   s   t | tjod| kS )NrC   )r;   r   ZElement)r*   r!   r!   r"   has_translatable  s    z&Locale.apply.<locals>.has_translatable)Lr&   r   
startswithr5   r6   AssertionErrorr   splitextr   r4   r   r   Zgettext_compactZlocale_dirsinit_localeZlanguager   gettextstripendswithr;   r   r   r#   r   liner   Z	paragraphtitleparentZfully_normalize_nameZastext
setdefaultrK   Znameidsr=   Z	nametypespoprB   Znote_implicit_targetr'   rV   Z	temp_datasetremover   r   childrenr   r(   Zapply_translated_messager   ZdetailslenZ	next_noder   loggerZwarningr	   formatZautofootnote_refsZsymbol_footnote_refsZfootnote_refsZrefnameslistZhas_nameZnote_refnameZpending_xrefZ
attributesitemsrO   Zupdate_all_attsZgettext_additional_targetsr   r   delattr)Br)   r   r   ZmsgstrZdocname
textdomaindirsZcatalogZhas_catalogr*   msgZpatchZ	processedZsection_nodenew_namer9   Z_idZexplicitr?   Z
old_targetr@   partsZchildrI   rN   Zold_foot_refsZnew_foot_refsZold_foot_ref_rawsourcesZnew_foot_ref_rawsourcesZold_foot_namerefsrS   rM   r:   ZrefsrL   idrR   Zold_refsZnew_refsZold_ref_rawsourcesZnew_ref_rawsourcesZold_ref_namesZnew_ref_namesZorphansrT   Zrefname_ids_maprU   Zold_cite_refsZnew_cite_refsZold_cite_ref_rawsourcesZnew_cite_ref_rawsourcesZxref_reftarget_maprW   keykvrY   Znew_entriestypetidmainZkey_Z	msg_partsZmsgstr_partspartrZ   r!   )r>   r)   r"   r+   V   s   





	


















 



 







 zLocale.applyN)r,   r-   r.   r/   r0   r+   r!   r!   r!   r"   r1   P   s   r1   c               @   s   e Zd ZdZdZdd ZdS )RemoveTranslatableInlinezC
    Remove inline nodes used for translation as placeholders.
    i  c             C   s^   ddl m} t| jj|rd S x:| jtjD ](}d|kr.|j	
| | j	|j7  _	q.W d S )Nr   )MessageCatalogBuilderr(   )Zsphinx.builders.gettextr~   r;   r   Zbuilderr&   r'   r   inlinerd   rh   ri   )r)   r~   r   r!   r!   r"   r+     s    zRemoveTranslatableInline.applyN)r,   r-   r.   r/   r0   r+   r!   r!   r!   r"   r}     s   r}   N)(r/   osr   Zdocutilsr   Zdocutils.ior   Zdocutils.utilsr   Zsphinxr   Zsphinx.domains.stdr   r   Zsphinx.localer	   r
   r^   Zsphinx.transformsr   Zsphinx.utilr   r   Zsphinx.util.i18nr   Zsphinx.util.nodesr   r   r   r   r   Zsphinx.util.pycompatr   Z	getLoggerr,   rk   r#   r$   r1   r}   r!   r!   r!   r"   <module>
   s(   
   