a
    ÛEb}  ã                   @   s   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 ddlmZ zddlZddlZddlZW n ey†   d	ZY n0 d
Zdd„ Zdd„ Zd"dd„ZddddddœZdd„ Zd#dd„Ze� rüejjj de¡ e ¡ D ]\ZZ eee ƒ qèedƒZ!edƒZ"dd„ Z#d d!„ Z$dS )$zBMisc. utility functions/classes for admin documentation generator.é    N)ÚHeaderParseError)ÚHeaderParser)Úcleandoc)Úreverse)Ú_lazy_re_compile)Ú	mark_safeFTc                 C   sD   t | dƒr"| j}|j› d|j› �S | j}t| d| jjƒ}|d | S )NÚ
view_classÚ.Ú__qualname__)Úhasattrr   Ú
__module__r
   ÚgetattrÚ	__class__Ú__name__)Z	view_funcÚklassÚmod_nameZ	view_name© r   ú^/home/ja/django-apps/lartica_env/lib/python3.9/site-packages/django/contrib/admindocs/utils.pyÚget_view_name   s    
r   c                 C   sÂ   | sddi fS t | ƒ} t d| ¡}|d }t|ƒdkr@d}i }nxtƒ }z| |d ¡}W n( ty€   i }d |dd… ¡}Y n80 t| 	¡ ƒ}|r¦d |dd… ¡}nd |dd… ¡}|||fS )zN
    Parse out the parts of a docstring.  Return (title, body, metadata).
    Ú z\n{2,}r   é   éÿÿÿÿz

N)
r   ÚreÚsplitÚlenr   Úparsestrr   ÚjoinÚdictÚitems)Ú	docstringÚpartsÚtitleÚbodyÚmetadataÚparserr   r   r   Úparse_docstring   s&    
r%   c                 C   sR   dd|t dƒ d¡dddœ}|o&d| }d}tjj||  |d	d
|d�}t|d ƒS )z<
    Convert the string from reST to an XHTML fragment.
    Té   zdjango-admindocs-docrootú/F)Zdoctitle_xformZinitial_header_levelÚdefault_reference_contextÚ	link_baseZraw_enabledZfile_insertion_enabledz<%s>z7
.. default-role:: cmsreference

%s

.. default-role::
NÚhtml)Úsource_pathZdestination_pathZwriter_nameZsettings_overridesÚfragment)r   ÚrstripÚdocutilsÚcoreZpublish_partsr   )Útextr(   Zthing_being_parsedZ	overridesÚsourcer    r   r   r   Ú	parse_rst;   s"    úûr2   z%s/models/%s/z%s/views/%s/z%s/templates/%s/z%s/filters/#%sz%s/tags/#%s)ÚmodelÚviewÚtemplateÚfilterÚtagc                    s$   d‡ fdd„	}t jjj | |¡ d S )Nc                    sB   |d u ri }t jj||fdˆ |jjj| ¡ f i|¤Ž}|gg fS ©NZrefuri)r.   ÚnodesÚ	referenceÚdocumentÚsettingsr)   Úlower)ÚnameÚrawtextr0   ÚlinenoÚinlinerÚoptionsÚcontentÚnode©Úurlbaser   r   Ú_roleh   s    þþÿü
öz$create_reference_role.<locals>._role)NN)r.   ÚparsersÚrstÚrolesÚregister_canonical_role)ZrolenamerF   rG   r   rE   r   Úcreate_reference_roleg   s    rL   c           	      C   sP   |d u ri }|j jj}tjj||fdt| |j jj| ¡ f i|¤Ž}|gg fS r8   )	r;   r<   r(   r.   r9   r:   ÚROLESr)   r=   )	r>   r?   r0   r@   rA   rB   rC   ÚcontextrD   r   r   r   Údefault_reference_role|   s     
þþÿü
örO   Zcmsreferencez\(\?P(<\w+>)z\(c                 C   sÈ   dd„ t  | ¡D ƒ}g }|D ]Œ\}}}d\}}t| |d… ƒD ]h\}}	|	dkr`|dkr`|d7 }n|	dkrx|dkrx|d8 }|	}|d	kr>| | ||| d … |f¡  qq>q|D ]\}
}|  |
|¡} q®| S )
a  
    Find named groups in `pattern` and replace them with the group name. E.g.,
    1. ^(?P<a>\w+)/b/(\w+)$ ==> ^<a>/b/(\w+)$
    2. ^(?P<a>\w+)/b/(?P<c>\w+)/$ ==> ^<a>/b/<c>/$
    3. ^(?P<a>\w+)/b/(\w+) ==> ^<a>/b/(\w+)
    4. ^(?P<a>\w+)/b/(?P<c>\w+) ==> ^<a>/b/<c>
    c                 S   s&   g | ]}|  d ¡| d ¡|d f‘qS )r   r   )ÚstartÚend©Ú.0Úmr   r   r   Ú
<listcomp>¦   s   z(replace_named_groups.<locals>.<listcomp>©r   NNú(ú\r   ú)r   )Únamed_group_matcherÚfinditerÚ	enumerateÚappendÚreplace)ÚpatternZnamed_group_indicesZgroup_pattern_and_namerP   rQ   Ú
group_nameÚunmatched_open_bracketsÚ	prev_charÚidxÚvalZgroup_patternr   r   r   Úreplace_named_groupsž   s(    ÿ
ÿre   c                 C   sL  dd„ t  | ¡D ƒ}g }|D ]‚}d\}}t| |d d… ƒD ]`\}}|dkr^|dkr^|d7 }n|dkrv|dkrv|d8 }|}|d	kr<| ||d
 | f¡  qq<qg }d}	|D ]*\}}
|	rÀ||	ksÄ|	sÒ| ||
f¡ |
}	q¬|�rDg d }}	|D ]:\}}
|	�r| | |	|… ¡ | | d|… d ¡ |
}	qì| | |	d… ¡ d |¡S | S dS )a)  
    Find unnamed groups in `pattern` and replace them with '<var>'. E.g.,
    1. ^(?P<a>\w+)/b/(\w+)$ ==> ^(?P<a>\w+)/b/<var>$
    2. ^(?P<a>\w+)/b/((x|y)\w+)$ ==> ^(?P<a>\w+)/b/<var>$
    3. ^(?P<a>\w+)/b/(\w+) ==> ^(?P<a>\w+)/b/<var>
    4. ^(?P<a>\w+)/b/((x|y)\w+) ==> ^(?P<a>\w+)/b/<var>
    c                 S   s   g | ]}|  d ¡‘qS )r   )rP   rR   r   r   r   rU   Í   s   z*replace_unnamed_groups.<locals>.<listcomp>rV   r   NrW   rX   rY   r   é   z<var>r   )Úunnamed_group_matcherr[   r\   r]   r   )r_   Zunnamed_group_indicesZgroup_indicesrP   ra   rb   rc   rd   Zgroup_start_end_indicesZprev_endrQ   Zfinal_patternr   r   r   Úreplace_unnamed_groupsÅ   s>    ÿ


rh   )N)NN)%Ú__doc__r   Zemail.errorsr   Úemail.parserr   Úinspectr   Zdjango.urlsr   Zdjango.utils.regex_helperr   Zdjango.utils.safestringr   Zdocutils.corer.   Zdocutils.nodesZdocutils.parsers.rst.rolesÚImportErrorZdocutils_is_availabler   r%   r2   rM   rL   rO   rH   rI   rJ   rK   r   r>   rF   rZ   rg   re   rh   r   r   r   r   Ú<module>   sH   
	
$û	 ÿ

ÿ'