ó
öÀ„\c           @   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! r;d d l" m# Z# m$ Z$ m% Z% m& Z& d d l' m( Z( d d l) m* Z* n  e j+ e, ƒ Z- d „  Z. d e f d „  ƒ  YZ/ d e f d „  ƒ  YZ0 d e f d „  ƒ  YZ1 d S(   sé   
    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.
iÿÿÿÿ(   t   path(   t   nodes(   t   StringInput(   t   relative_path(   t   addnodes(   t   make_glossary_termt   split_term_classifiers(   t   __t   init(   t   SphinxTransform(   t   split_index_msgt   logging(   t   find_catalog(   t   LITERAL_TYPE_NODESt   IMAGE_TYPE_NODESt   extract_messagest   is_pending_metat   traverse_translatable_index(   t   indent(   t   Anyt   Dictt   Listt   Tuple(   t   Sphinx(   t   Configc   
   	   C   sŽ   d d l  m } | |  ƒ } |  j j |  d ƒ } | j d t d | d d | | f ƒ d | d | ƒ }	 y |	 d	 }	 Wn t k
 r‰ n X|	 S(
   sË  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
    iÿÿÿÿ(   t   SphinxI18nReadert   restructuredtextt   sourcet   source_paths   %s:%s:<translated>t   parsert   settingsi    (   t	   sphinx.ioR   t   registryt   create_source_parsert   readR   t
   IndexError(
   t   appR   R   t   source_linet   configR   R   t   readerR   t   doc(    (    s5   lib/python2.7/site-packages/sphinx/transforms/i18n.pyt   publish_msgstr'   s    		t   PreserveTranslatableMessagesc           B   s   e  Z d  Z d Z d „  Z RS(   sC   
    Preserve original translatable messages befor translation
    i
   c         C   s.   x' |  j  j t j ƒ D] } | j ƒ  q Wd  S(   N(   t   documentt   traverseR   t   translatablet   preserve_original_messages(   t   selft   node(    (    s5   lib/python2.7/site-packages/sphinx/transforms/i18n.pyt   applyJ   s    (   t   __name__t
   __module__t   __doc__t   default_priorityR1   (    (    (    s5   lib/python2.7/site-packages/sphinx/transforms/i18n.pyR*   D   s   t   Localec           B   s   e  Z d  Z d Z d „  Z RS(   sC   
    Replace translatable nodes with their translated doctree.
    i   c   D   	      sä  |  j  j |  j  d } } d } | j |  j j ƒ s; t ‚ t j t t j	 |  j j d ƒ | ƒ ƒ d } t
 | |  j j ƒ } g  |  j j D] } t j	 |  j j | ƒ ^ q‹ } t | |  j j | ƒ \ } }	 |	 s× d  Sx9t |  j  ƒ D](\ }
 } | j | ƒ } | sç | | k sç | j ƒ  r(qç n  | j ƒ  j d ƒ rJ| d 7} n  t |
 t ƒ rod t | d( ƒ } n  t |  j | | |
 j |  j | ƒ } t | t j ƒ s«qç n  t } t |
 t j ƒ r÷|
 j } t j | j  ƒ  ƒ } t j |
 j  ƒ  ƒ ‰  ˆ  | k r÷| j! d
 g  ƒ } | j" | ƒ |  j  j# j$ ˆ  d  ƒ } |  j  j& j$ ˆ  d  ƒ } | rµ| s¢|  j  j# j' ˆ  d  ƒ |  j  j& j' ˆ  d  ƒ |  j  j( j' | d  ƒ n  |  j  j) | ƒ n  ‡  f d †  } x$ |  j  j* | ƒ D] } | | d <q×Wt+ } q÷n  t |
 t j, ƒ rÓ|  j j- j! d t. ƒ  ƒ } x¬ |
 d
 D] } | | k rQ| j/ | ƒ n  t0 | ƒ } t |  j | d | |
 j |  j | ƒ } t1 |  j | | d | |
 j | ƒ } | d |
 d <| d
 |
 d
 <t+ } q/Wn  | rç x | j2 D] } |
 | _ qãW| j2 |
 _2 t+ |
 d <qç qç Wx²t |  j  ƒ D]¡\ }
 } |
 j$ d t ƒ rGq#n  | j | ƒ } | s#| | k roq#n  t |
 t3 j4 ƒ r—|
 j5 | | ƒ q#n  t6 |
 ƒ r¾| |
 j7 d d d <q#n  | j ƒ  j d ƒ rà| d 7} n  t |
 t ƒ rd t | d) ƒ } n  t |
 t j ƒ r6| d d t8 | ƒ d } n  t |  j | | |
 j |  j | ƒ } t |
 t j ƒ r{| j9 ƒ  } n  t | t j t j f t t: ƒ s¤q#n  d „  } d „  } |
 j* | ƒ } | j* | ƒ } t8 | ƒ t8 | ƒ k rPg  | D] } | j; ^ qó} g  | D] } | j; ^ q} t< j= t> d d ƒ j? | | ƒ d |
 ƒn  i  } x0 | D]( }  | j! |  j$ d ƒ g  ƒ j" |  ƒ q]Wx	| D]}! |! j$ d ƒ }" | j$ |" g  ƒ }# |# sÃqn  |# j' d ƒ }$ |$ d |! d <x" |! d D] }% |! |  j  j( |% <qëW|! d d k r.| |  j  j@ |$ |! ƒ n | |  j  jA |$ |! ƒ |" r| |  j  jB j! |" g  ƒ |$ |! ƒ | |  j  jC j! |" g  ƒ |$ |! ƒ qqWd „  }& |
 j* |& ƒ }' | j* |& ƒ }( t8 |' ƒ t8 |( ƒ k r8g  |' D] } | j; ^ qÛ}) g  |( D] } | j; ^ q÷}* t< j= t> d d ƒ j? |) |* ƒ d |
 ƒn  g  |' D] }  |  d ^ q?}+ g  |( D] }  |  d ^ q\}, tD t. |+ ƒ t. |, ƒ ƒ }- xS |( D]K }! |  j  jE |! d ƒ sÐ|- rÐ|- j' d ƒ |! d <qÐn  |  j  jF |! ƒ q•Wd „  }. |
 j* |. ƒ } | j* |. ƒ } i  }/ t8 | ƒ t8 | ƒ k r	g  | D] } | j; ^ q0	} g  | D] } | j; ^ qL	} t< j= t> d d ƒ j? | | ƒ d |
 ƒn  x/ | D]' }$ |/ j! |$ d g  ƒ j" |$ d ƒ q”	WxA | D]9 }! |! d }" |/ j$ |" ƒ rÆ	|/ |" j' d ƒ |! d <qÆ	qÆ	Wd „  }0 |
 j* |0 ƒ }1 | j* |0 ƒ }2 i  }/ t8 |1 ƒ t8 |2 ƒ k r¬
g  |1 D] } | j; ^ qO
}3 g  |2 D] } | j; ^ qk
}4 t< j= t> d  d ƒ j? |3 |4 ƒ d |
 ƒn  x/ |1 D]' }$ |/ j! |$ d g  ƒ j" |$ d ƒ q³
Wx> |2 D]6 }! |! d }" |/ j$ |" ƒ rå
|/ |" j' ƒ  |! d <qå
qå
W|
 j* t3 jG ƒ }' | j* t3 jG ƒ }( i  }5 t8 |' ƒ t8 |( ƒ k rÅg  |' D] } | j; ^ qh}) g  |( D] } | j; ^ q„}* t< j= t> d! d ƒ j? |) |* ƒ d |
 ƒn  d" „  }6 x0 |' D]( }$ |6 |$ ƒ }7 |7 rÕ|$ jH |5 |7 <qÕqÕWxM |( D]E }! |6 |! ƒ }7 x0 |5 j$ |7 i  ƒ jI ƒ  D] \ }8 }9 |9 |! |8 <q3WqWx | j2 D] } |
 | _ q[W| j2 |
 _2 t |
 t ƒ r›|
 j  ƒ  |
 _; n  t |
 t: ƒ rº|
 jJ | ƒ n  t+ |
 d <q#Wd# |  j jK k r­xÐ tL |  j  ƒ D]¼ \ }
 }: g  }; x“ |: D]‹ \ }< } }= }> }? tM |< | ƒ }@ g  }A x9 |@ D]1 }B | j |B ƒ } | sX|B } n  |A j" | ƒ q4W|; j" |< d$ j	 |A ƒ |= |> d  f ƒ qW|: |
 d% <|; |
 d& <qêWn  d' „  }C x' |  j  j* |C ƒ D] }
 |
 jN d ƒ qÉWd  S(*   NR   u    t   dummyi    s   ::s   

   dummy literals   ::

t    i   t   namesc            s%   t  |  t j ƒ o$ |  j d ƒ ˆ  k S(   Nt   refname(   t
   isinstanceR   t   targett   get(   R0   (   t   old_name(    s5   lib/python2.7/site-packages/sphinx/transforms/i18n.pyt   is_named_targetº   s    R:   t   gloss_entriesi   t   idst
   translatedR   t   contents   
t   -i   c         S   s   t  |  t j ƒ o |  j d ƒ S(   Nt   auto(   R;   R   t   footnote_referenceR=   (   R0   (    (    s5   lib/python2.7/site-packages/sphinx/transforms/i18n.pyt   is_autofootnote_ref  s    c         S   s3   | |  k r" | |  |  j  | ƒ <n |  j | ƒ d  S(   N(   t   indext   append(   t   lstt   oldt   new(    (    s5   lib/python2.7/site-packages/sphinx/transforms/i18n.pyt   list_replace_or_append  s    s7   inconsistent footnote references in translated message.s    original: {0}, translated: {1}t   locationRE   c         S   s   t  |  t j ƒ o d |  k S(   NR:   (   R;   R   t	   reference(   R0   (    (    s5   lib/python2.7/site-packages/sphinx/transforms/i18n.pyt   is_refnamed_refK  s    s.   inconsistent references in translated message.c         S   s   t  |  t j ƒ o d |  k S(   NR:   (   R;   R   RF   (   R0   (    (    s5   lib/python2.7/site-packages/sphinx/transforms/i18n.pyt   is_refnamed_footnote_refi  s    c         S   s   t  |  t j ƒ o d |  k S(   NR:   (   R;   R   t   citation_reference(   R0   (    (    s5   lib/python2.7/site-packages/sphinx/transforms/i18n.pyt   is_citation_ref  s    s7   inconsistent citation references in translated message.s3   inconsistent term references in translated message.c         S   sA   |  d |  d f } | d k r$ d  S|  d |  d |  d f Sd  S(   Nt	   refdomaint   reftypet   stdt   termt	   reftarget(   RV   RW   (   t   None(   R0   t   case(    (    s5   lib/python2.7/site-packages/sphinx/transforms/i18n.pyt   get_ref_key¢  s    RH   t   ;t   raw_entriest   entriesc         S   s   t  |  t j ƒ o d |  k S(   NRB   (   R;   R   t   Element(   R0   (    (    s5   lib/python2.7/site-packages/sphinx/transforms/i18n.pyt   has_translatableÝ  s    s      s      (O   R+   R   t
   startswitht   envt   srcdirt   AssertionErrorR    t   splitextR   t   joinR   R&   t   gettext_compactt   locale_dirst   init_localet   languageR   t   gettextt   stript   endswithR;   R   R   R)   R$   t   lineR   t	   paragrapht   Falset   titlet   parentt   fully_normalize_namet   astextt
   setdefaultRI   t   nameidsR=   RY   t	   nametypest   popRA   t   note_implicit_targetR,   t   TrueRW   t	   temp_datat   sett   removeR   R   t   childrenR   R-   t   apply_translated_messageR   t   detailst   lent	   next_nodeR   t	   rawsourcet   loggert   warningR   t   formatt   autofootnote_refst   symbol_footnote_refst   footnote_refst   refnamest   listt   has_namet   note_refnamet   pending_xreft
   attributest   itemst   update_all_attst   gettext_additional_targetsR   R
   t   delattr(D   R/   R   R   t   msgstrt   docnamet
   textdomaint	   directoryt   dirst   catalogt   has_catalogR0   t   msgt   patcht	   processedt   section_nodet   new_nameR9   t   _idt   explicitR?   t
   old_targetR@   t   partst   childRG   RM   t   old_foot_refst   new_foot_refst   reft   old_foot_ref_rawsourcest   new_foot_ref_rawsourcest   old_foot_namerefst   rRL   R:   t   refsRK   t   idRP   t   old_refst   new_refst   old_ref_rawsourcest   new_ref_rawsourcest   old_ref_namest   new_ref_namest   orphansRQ   t   refname_ids_mapRS   t   old_cite_refst   new_cite_refst   old_cite_ref_rawsourcest   new_cite_ref_rawsourcest   xref_reftarget_mapR[   t   keyt   kt   vR^   t   new_entriest   typet   tidt   maint   key_t	   msg_partst   msgstr_partst   partR`   (    (   R>   s5   lib/python2.7/site-packages/sphinx/transforms/i18n.pyR1   V   s²   . 		
		

&
	

	

%
	

%


	%	)
	(   R2   R3   R4   R5   R1   (    (    (    s5   lib/python2.7/site-packages/sphinx/transforms/i18n.pyR6   P   s   t   RemoveTranslatableInlinec           B   s   e  Z d  Z d Z d „  Z RS(   sC   
    Remove inline nodes used for translation as placeholders.
    iç  c         C   s~   d d l  m } t |  j j | ƒ r) d  SxN |  j j t j ƒ D]7 } d | k r? | j	 j
 | ƒ | j	 | j 7_	 q? q? Wd  S(   Niÿÿÿÿ(   t   MessageCatalogBuilderR-   (   t   sphinx.builders.gettextRÇ   R;   R$   t   builderR+   R,   R   t   inlineRr   R}   R~   (   R/   RÇ   RÊ   (    (    s5   lib/python2.7/site-packages/sphinx/transforms/i18n.pyR1   ê  s    (   R2   R3   R4   R5   R1   (    (    (    s5   lib/python2.7/site-packages/sphinx/transforms/i18n.pyRÆ   ä  s   N(2   R4   t   osR    t   docutilsR   t   docutils.ioR   t   docutils.utilsR   t   sphinxR   t   sphinx.domains.stdR   R   t   sphinx.localeR   R   Ri   t   sphinx.transformsR	   t   sphinx.utilR
   R   t   sphinx.util.i18nR   t   sphinx.util.nodesR   R   R   R   R   t   sphinx.util.pycompatR   Rp   t   typingR   R   R   R   t   sphinx.applicationR   t   sphinx.configR   t	   getLoggerR2   R„   R)   R*   R6   RÆ   (    (    (    s5   lib/python2.7/site-packages/sphinx/transforms/i18n.pyt   <module>
   s,   ("	ÿ •