ó
EõMPc           @   sk  d  Z  d d l 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 y( d d l Z d d l Z d d l Z Wn e k
 r£ e Z n Xe Z d „  Z d	 „  Z d d
 „ Z i d d 6d d 6d d 6d d 6d d 6Z d „  Z d d d „ Z e rge j j j j d e ƒ d e j j j _ x* e j  ƒ  D] \ Z! Z" e e! e" ƒ qGWn  d S(   sB   Misc. utility functions/classes for admin documentation generator.iÿÿÿÿN(   t   HeaderParser(   t   HeaderParseError(   t	   mark_safe(   t   reverse(   t   force_bytesc         C   s¶   |  s |  j  ƒ  r d S|  j ƒ  j ƒ  } t g  | D]. } | j ƒ  r4 t | ƒ t | j ƒ  ƒ ^ q4 ƒ } | d j ƒ  g g  | d D] } | | j ƒ  ^ q† } d j | ƒ j  ƒ  S(   sœ   
    Uniformly trims leading/trailing whitespace from docstrings.

    Based on http://www.python.org/peps/pep-0257.html#handling-docstring-indentation
    t    i    i   s   
(   t   stript
   expandtabst
   splitlinest   mint   lstript   lent   rstript   join(   t	   docstringt   linest   linet   indentt   trimmed(    (    s7   ../Django//lib/python/django/contrib/admindocs/utils.pyt   trim_docstring   s    A8c         C   sç   t  |  ƒ }  t j d |  ƒ } | d } t | ƒ d k rI d } i  } n‘ t ƒ  } y | j | d ƒ } Wn* t k
 r• i  } d j | d ƒ } nE Xt | j	 ƒ  ƒ } | rÇ d j | d d !ƒ } n d j | d ƒ } | | | f S(   sO   
    Parse out the parts of a docstring.  Returns (title, body, metadata).
    s   \n{2,}i    i   R   iÿÿÿÿs   

(
   R   t   ret   splitR   R    t   parsestrR   R   t   dictt   items(   R   t   partst   titlet   bodyt   metadatat   parser(    (    s7   ../Django//lib/python/django/contrib/admindocs/utils.pyt   parse_docstring!   s"    
		c      
   C   s‚   i t  d 6d d 6| d 6t d ƒ j d ƒ d 6} | rJ t d | ƒ } n  t j j |  d	 | d
 d d d d | ƒ} t | d ƒ S(   s<   
    Convert the string from reST to an XHTML fragment.
    t   doctitle_xformi   t   inital_header_levelt   default_reference_contexts   django-admindocs-docroott   /t	   link_bases   <%s>t   source_patht   destination_patht   writer_namet   htmlt   settings_overridest   fragmentN(	   t   TrueR   R   R   t   docutilst   coret   publish_partst   NoneR   (   t   textR!   t   thing_being_parsedt	   overridesR   (    (    s7   ../Django//lib/python/django/contrib/admindocs/utils.pyt	   parse_rst:   s    	s   %s/models/%s/t   models   %s/views/%s/t   views   %s/templates/%s/t   templates   %s/filters/#%st   filters   %s/tags/#%st   tagc            s2   d  d  ‡  f d † } t j j j j |  | ƒ d  S(   Nc            sn   | d  k r i  } n  | d  k r* g  } n  t j j | | d ˆ  | j j j | j ƒ  f | } | g g  f S(   Nt   refuri(   R.   R+   t   nodest	   referencet   documentt   settingsR#   t   lower(   t   namet   rawtextR/   t   linenot   inlinert   optionst   contentt   node(   t   urlbase(    s7   ../Django//lib/python/django/contrib/admindocs/utils.pyt   _roleW   s     	 	7(   R.   R+   t   parserst   rstt   rolest   register_canonical_role(   t   rolenameRE   RF   (    (   RE   s7   ../Django//lib/python/django/contrib/admindocs/utils.pyt   create_reference_roleV   s    c   	      C   s   | d  k r i  } n  | d  k r* g  } n  | j j j } t j j | | d t | | j j j | j	 ƒ  f | } | g g  f S(   NR8   (
   R.   R;   R<   R!   R+   R9   R:   t   ROLESR#   R=   (	   R>   R?   R/   R@   RA   RB   RC   t   contextRD   (    (    s7   ../Django//lib/python/django/contrib/admindocs/utils.pyt   default_reference_role^   s     	 	;t   cmsreference(#   t   __doc__R   t   email.parserR    t   email.errorsR   t   django.utils.safestringR   t   django.core.urlresolversR   t   django.utils.encodingR   t   docutils.coreR+   t   docutils.nodest   docutils.parsers.rst.rolest   ImportErrort   Falset   docutils_is_availableR*   R   R   R.   R2   RM   RL   RO   RG   RH   RI   RJ   t   DEFAULT_INTERPRETED_ROLER   R>   RE   (    (    (    s7   ../Django//lib/python/django/contrib/admindocs/utils.pyt   <module>   s:   
		
	