ó
¦á­Qc           @   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(    (    sA   /usr/lib/python2.7/dist-packages/docutils/transforms/universal.pyt   apply"   s    c         C   s   d  S(   N(   t   None(   R   (    (    sA   /usr/lib/python2.7/dist-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   (    (    sA   /usr/lib/python2.7/dist-packages/docutils/transforms/universal.pyR   1   s6    				!	(   t   __name__t
   __module__t   __doc__t   default_priorityR   R   R   (    (    (    sA   /usr/lib/python2.7/dist-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(    (    sA   /usr/lib/python2.7/dist-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(    (    sA   /usr/lib/python2.7/dist-packages/docutils/transforms/universal.pyR   _   s    (   R*   R+   R,   R-   R1   R   (    (    (    sA   /usr/lib/python2.7/dist-packages/docutils/transforms/universal.pyR.   T   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>   (    (    sA   /usr/lib/python2.7/dist-packages/docutils/transforms/universal.pyR   q   s    
(   R*   R+   R,   R-   R   (    (    (    sA   /usr/lib/python2.7/dist-packages/docutils/transforms/universal.pyR7   h   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   (    (    sA   /usr/lib/python2.7/dist-packages/docutils/transforms/universal.pyR   ‰   s    (   R*   R+   R,   R-   R   (    (    (    sA   /usr/lib/python2.7/dist-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   (    (    sA   /usr/lib/python2.7/dist-packages/docutils/transforms/universal.pyR   ™   s    	(   R*   R+   R,   R-   R   (    (    (    sA   /usr/lib/python2.7/dist-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   (    (    sA   /usr/lib/python2.7/dist-packages/docutils/transforms/universal.pyR   ¨   s    (   R*   R+   R,   R-   R   (    (    (    sA   /usr/lib/python2.7/dist-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   (    (    sA   /usr/lib/python2.7/dist-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(    (    sA   /usr/lib/python2.7/dist-packages/docutils/transforms/universal.pyRP   Ç   s    (   R*   R+   R,   R-   R   RP   (    (    (    sA   /usr/lib/python2.7/dist-packages/docutils/transforms/universal.pyRK   ®   s   	t   SmartQuotesc           B   s/   e  Z d  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  c         C   s&   t  j |  | d | ƒt ƒ  |  _ d  S(   Nt	   startnode(   R   t   __init__t   sett   unsupported_languages(   R   R   RU   (    (    sA   /usr/lib/python2.7/dist-packages/docutils/transforms/universal.pyRV   Ù   s    c      	   c   sn   i d t  6d t 6} xS | D]K } | t | j t j t j t j t j t j	 f ƒ } | | j
 ƒ  f Vq Wd  S(   Nt   literalt   plain(   t   Truet   FalseR/   R=   R   RY   t   matht   imaget   rawt   problematict   astext(   R   t   txtnodest   texttypet   txtnodet   nodetype(    (    sA   /usr/lib/python2.7/dist-packages/docutils/transforms/universal.pyt
   get_tokensÝ   s    

c         C   s  |  j  j j } | s d  Sy | j d ƒ } Wn t k
 rE t } n X|  j  j j } x½|  j  j t j	 ƒ D]¦} t
 | t j t j f ƒ r’ qk n  t
 | j t j	 ƒ r­ qk n  g  | j t j ƒ D]! } t
 | j t j ƒ sÀ | ^ qÀ } | j | ƒ } | r*d | k r| j d d ƒ } q*| d 7} n  xx t j | ƒ D]" } | t j j k r:| } Pq:q:W| |  j k r|  j  j j d | d | ƒn  |  j j | ƒ d } t j |  j | ƒ d d d | ƒ}	 x9 t | |	 ƒ D]( \ } }
 | j j | t j |
 ƒ ƒ qÙWt ƒ  |  _ qk Wd  S(	   Nt   alts
   -x-altquotR   s*   No smart quotes defined for language "%s".t	   base_nodet   attrt   2t   language(   R   R   t   smart_quotest
   startswitht   AttributeErrorR\   t   language_codeR3   R   t   TextElementR/   t   FixedTextElementt   SpecialR=   R"   t   option_stringt   get_language_codet   replaceR   t   normalize_language_tagR   t
   smartcharst   quotesRX   R;   t   warningt   addt   educate_tokensRf   t   zipRW   (   R   Rl   t   alternativet   document_languageR0   Rd   Rb   t   langt   tagt   teachert   newtext(    (    sA   /usr/lib/python2.7/dist-packages/docutils/transforms/universal.pyR   í   sF    
	 (   R*   R+   R,   R-   RV   Rf   R   (    (    (    sA   /usr/lib/python2.7/dist-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   (    (    (    sA   /usr/lib/python2.7/dist-packages/docutils/transforms/universal.pyt   <module>   s   :!