ó
¡V]c           @   s   d  Z  d Z d d l Z d d l Z d d l Z d d l m Z m Z d d l m	 Z	 m
 Z
 d d l m Z d e
 f d „  ƒ  YZ d	 e
 f d
 „  ƒ  YZ d e
 f d „  ƒ  YZ d e
 f d „  ƒ  YZ d e
 f d „  ƒ  YZ d e
 f d „  ƒ  YZ d e
 f d „  ƒ  YZ d e
 f d „  ƒ  YZ d S(   s+  
Transforms needed by most or all documents:

- `Decorations`: Generate a document's header & footer.
- `Messages`: Placement of system messages stored in
  `nodes.document.transform_messages`.
- `TestMessages`: Like `Messages`, used on test runs.
- `FinalReferences`: Resolve remaining references.
t   reStructuredTextiÿÿÿÿN(   t   nodest   utils(   t   TransformErrort	   Transform(   t   smartquotest   Decorationsc           B   s/   e  Z d  Z d Z d „  Z d „  Z d „  Z RS(   sD   
    Populate a document's decoration element (header, footer).
    i4  c         C   s~   |  j  ƒ  } | r= |  j j ƒ  } | j ƒ  } | j | ƒ n  |  j ƒ  } | rz |  j j ƒ  } | j ƒ  } | j | ƒ n  d  S(   N(   t   generate_headert   documentt   get_decorationt
   get_headert   extendt   generate_footert
   get_footer(   t   selft   header_nodest
   decorationt   headert   footer_nodest   footer(    (    s<   lib/python2.7/site-packages/docutils/transforms/universal.pyt   apply"   s    c         C   s   d  S(   N(   t   None(   R   (    (    s<   lib/python2.7/site-packages/docutils/transforms/universal.pyR   .   s    c      	   C   sy  |  j  j } | j s0 | j s0 | j s0 | j rqg  } | j rH | j sQ | j r¯ | j rf | j } n t j | j	 | j ƒ } | j
 t j d d d | ƒt j d ƒ g ƒ n  | j rô t j | j t j ƒ  ƒ } | j t j d | d ƒ ƒ n  | j r[| j
 t j d ƒ t j d d d d ƒt j d	 ƒ t j d d
 d d ƒt j d ƒ g ƒ n  t j d d | Œ g Sd  Sd  S(   Nt    s   View document sourcet   refuris   .
s   Generated on: s   Generated by t   Docutilss    http://docutils.sourceforge.net/s    from R    s(   http://docutils.sourceforge.net/rst.htmls	    source.
(   R   t   settingst	   generatort	   datestampt   source_linkt
   source_urlt   _sourceR   t   relative_patht   _destinationR   R   t	   referencet   Textt   timet   strftimet   gmtimet   appendt	   paragraphR   (   R   R   t   textt   sourceR   (    (    s<   lib/python2.7/site-packages/docutils/transforms/universal.pyR   1   s6    				!	(   t   __name__t
   __module__t   __doc__t   default_priorityR   R   R   (    (    (    s<   lib/python2.7/site-packages/docutils/transforms/universal.pyR      s
   		t   ExposeInternalsc           B   s&   e  Z d  Z d Z d „  Z d „  Z RS(   sL   
    Expose internal attributes if ``expose_internals`` setting is set.
    iH  c         C   s   t  | t j ƒ S(   N(   t
   isinstanceR   R"   (   R   t   node(    (    s<   lib/python2.7/site-packages/docutils/transforms/universal.pyt   not_Text`   s    c         C   s   |  j  j j r{ xi |  j  j |  j ƒ D]O } xF |  j  j j D]5 } t | | d  ƒ } | d  k	 r; | | d | <q; q; Wq% Wn  d  S(   Ns	   internal:(   R   R   t   expose_internalst   traverseR1   t   getattrR   (   R   R0   t   attt   value(    (    s<   lib/python2.7/site-packages/docutils/transforms/universal.pyR   c   s    (   R*   R+   R,   R-   R1   R   (    (    (    s<   lib/python2.7/site-packages/docutils/transforms/universal.pyR.   X   s   	t   Messagesc           B   s   e  Z d  Z d Z d „  Z RS(   si   
    Place any system messages generated after parsing into a dedicated section
    of the document.
    i\  c         C   sº   |  j  j } |  j  j j } g  } x8 | D]0 } | d | k r( | j r( | j | ƒ q( q( W| r¶ t j d d g ƒ } | t j d d ƒ 7} | | 7} g  |  j  j (|  j  | 7_  n  d  S(   Nt   levelt   classess   system-messagesR   s   Docutils System Messages(	   R   t   transform_messagest   reportert   report_levelt   parentR&   R   t   sectiont   title(   R   t
   unfilteredt	   thresholdt   messagest   msgR>   (    (    s<   lib/python2.7/site-packages/docutils/transforms/universal.pyR   u   s    
(   R*   R+   R,   R-   R   (    (    (    s<   lib/python2.7/site-packages/docutils/transforms/universal.pyR7   l   s   t   FilterMessagesc           B   s   e  Z d  Z d Z d „  Z RS(   s;   
    Remove system messages below verbosity threshold.
    if  c         C   sP   xI |  j  j t j ƒ D]2 } | d |  j  j j k  r | j j | ƒ q q Wd  S(   NR8   (   R   R3   R   t   system_messageR;   R<   R=   t   remove(   R   R0   (    (    s<   lib/python2.7/site-packages/docutils/transforms/universal.pyR      s    (   R*   R+   R,   R-   R   (    (    (    s<   lib/python2.7/site-packages/docutils/transforms/universal.pyRD   …   s   t   TestMessagesc           B   s   e  Z d  Z d Z d „  Z RS(   sk   
    Append all post-parse system messages to the end of the document.

    Used for testing purposes.
    ip  c         C   s6   x/ |  j  j D]! } | j s |  j  | 7_  q q Wd  S(   N(   R   R:   R=   (   R   RC   (    (    s<   lib/python2.7/site-packages/docutils/transforms/universal.pyR      s    	(   R*   R+   R,   R-   R   (    (    (    s<   lib/python2.7/site-packages/docutils/transforms/universal.pyRG   “   s   t   StripCommentsc           B   s   e  Z d  Z d Z d „  Z RS(   sq   
    Remove comment elements from the document tree (only if the
    ``strip_comments`` setting is enabled).
    iä  c         C   sF   |  j  j j rB x0 |  j  j t j ƒ D] } | j j | ƒ q% Wn  d  S(   N(   R   R   t   strip_commentsR3   R   t   commentR=   RF   (   R   R0   (    (    s<   lib/python2.7/site-packages/docutils/transforms/universal.pyR   ¬   s    (   R*   R+   R,   R-   R   (    (    (    s<   lib/python2.7/site-packages/docutils/transforms/universal.pyRH   £   s   t   StripClassesAndElementsc           B   s&   e  Z d  Z d Z d „  Z d „  Z RS(   sÏ   
    Remove from the document tree all elements with classes in
    `self.document.settings.strip_elements_with_classes` and all "classes"
    attribute values in `self.document.settings.strip_classes`.
    i¤  c         C   sÄ   |  j  j j p |  j  j j s" d  St g  |  j  j j p: g  D] } | d  f ^ q; ƒ |  _ t g  |  j  j j pq g  D] } | d  f ^ qr ƒ |  _ x- |  j  j |  j ƒ D] } | j	 j
 | ƒ q¦ Wd  S(   N(   R   R   t   strip_elements_with_classest   strip_classest   dictR   t   strip_elementsR3   t   check_classesR=   RF   (   R   t   keyR0   (    (    s<   lib/python2.7/site-packages/docutils/transforms/universal.pyR   ¼   s    ""c         C   se   t  | t j ƒ ra xL | d D]< } | |  j k rG | d j | ƒ n  | |  j k r d Sq Wn  d  S(   NR9   i   (   R/   R   t   ElementRM   RF   RO   (   R   R0   t   class_value(    (    s<   lib/python2.7/site-packages/docutils/transforms/universal.pyRP   Ë   s    (   R*   R+   R,   R-   R   RP   (    (    (    s<   lib/python2.7/site-packages/docutils/transforms/universal.pyRK   ²   s   	t   SmartQuotesc           B   sk   e  Z d  Z d Z e j e j f Z e j e j	 e j
 e j e j f Z d Z d „  Z d „  Z d „  Z RS(   s   
    Replace ASCII quotation marks with typographic form.

    Also replace multiple dashes with em-dash/en-dash characters.
    iR  t   qDec         C   s&   t  j |  | d | ƒt ƒ  |  _ d  S(   Nt	   startnode(   R   t   __init__t   sett   unsupported_languages(   R   R   RV   (    (    s<   lib/python2.7/site-packages/docutils/transforms/universal.pyRW   ì   s    c         c   sS   i d t  6d t 6} x8 | D]0 } | t | j |  j ƒ } | | j ƒ  f Vq Wd  S(   Nt   literalt   plain(   t   Truet   FalseR/   R=   t   literal_nodest   astext(   R   t   txtnodest   texttypet   txtnodet   nodetype(    (    s<   lib/python2.7/site-packages/docutils/transforms/universal.pyt
   get_tokensð   s    

c         C   sM  |  j  j j } | s d  Sy | j d ƒ } Wn t k
 rE t } n X|  j  j j } |  j  j j } | r† t j	 j
 j t | ƒ ƒ n  x´|  j  j t j ƒ D]} t | |  j ƒ rº qœ n  t | j t j ƒ rÕ qœ n  g  | j t j ƒ D]! } t | j t j ƒ sè | ^ qè } | j | ƒ } | rRd | k rE| j d d ƒ } qR| d 7} n  xx t j | ƒ D]" }	 |	 t j	 j
 k rb|	 } PqbqbW| |  j k r·|  j  j j d | d | ƒn  |  j j | ƒ d } t j |  j | ƒ d |  j d | ƒ}
 xB t  | |
 ƒ D]1 \ } } | j j | t j | d | j! ƒƒ qWqœ Wt" ƒ  |  _ d  S(	   Nt   alts
   -x-altquotR   s*   No smart quotes defined for language "%s".t	   base_nodet   attrt   languaget	   rawsource(#   R   R   t   smart_quotest
   startswitht   AttributeErrorR]   t   language_codet   smartquotes_localesR   t
   smartcharst   quotest   updateRN   R3   R   t   TextElementR/   t   nodes_to_skipR=   R"   t   option_stringt   get_language_codet   replaceR   t   normalize_language_tagRY   R;   t   warningt   addt   educate_tokensRd   t   smartquotes_actiont   zipRi   RX   (   R   Rj   t   alternativet   document_languaget   lc_smartquotesR0   Rb   R`   t   langt   tagt   teachert   newtext(    (    s<   lib/python2.7/site-packages/docutils/transforms/universal.pyR   ü   sN    
	(   R*   R+   R,   R-   R   t   FixedTextElementt   SpecialRs   t   imageRZ   t   matht   rawt   problematicR^   R{   RW   Rd   R   (    (    (    s<   lib/python2.7/site-packages/docutils/transforms/universal.pyRT   Ô   s   		(   R,   t   __docformat__t   ret   sysR#   t   docutilsR   R   t   docutils.transformsR   R   t   docutils.utilsR   R   R.   R7   RD   RG   RH   RK   RT   (    (    (    s<   lib/python2.7/site-packages/docutils/transforms/universal.pyt   <module>   s   >"