
    Dvg                        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 	 ddlZddlZddlZd	Zn# e$ r d
ZY nw xY wd Zd Zd dZddddddZd Z	 d!dZerKej        j        j                            de           e                                D ]\  ZZ  eee             ed          Z! ed          Z" ed          Z#d Z$d Z%d Z&d Z'd Z(d Z)dS )"zBMisc. utility functions/classes for admin documentation generator.    N)HeaderParseError)HeaderParser)cleandoc)reverse)_lazy_re_compile)	mark_safeTFc                     t          | d          r| j        }|j         d|j         S | j        }t	          | d| j        j                  }|dz   |z   S )N
view_class.__qualname__)hasattrr
   
__module__r   getattr	__class____name__)	view_funcklassmod_name	view_names       [/var/www/pixelcanvas.ch/venv/lib/python3.11/site-packages/django/contrib/admindocs/utils.pyget_view_namer      sd    y,'' :$"99U%7999#H	>93F3OPPIc>I%%    c                    | sddi fS t          |           } t          j        d|           }|d         }t          |          dk    rd}i }nt	                      }	 |                    |d                   }t          |                                          }|rd                    |dd                   }nMd                    |dd                   }n/# t          $ r" i }d                    |dd                   }Y nw xY w|||fS )zN
    Parse out the parts of a docstring.  Return (title, body, metadata).
     z\n{2,}r      z

N)
r   resplitlenr   parsestrdictitemsjoinr   )	docstringpartstitlebodymetadataparsers         r   parse_docstringr*      s"     2rz##IHY	**E!HE
5zzQ
	.uRy11H
 HNN,,--H .{{52;//{{59--   	* 	* 	*H;;uQRRy))DDD	* $  s   C )D Dc                     dd|t          d                              d          ddd}|od|z  }d}t          j                            || z  |d	d
|          }t          |d                   S )z<
    Convert the string from reST to an XHTML fragment.
    T   zdjango-admindocs-docroot/F)doctitle_xforminitial_header_leveldefault_reference_context	link_baseraw_enabledfile_insertion_enabledz<%s>z7
.. default-role:: cmsreference

%s

.. default-role::
Nhtml)source_pathdestination_pathwriter_namesettings_overridesfragment)r   rstripdocutilscorepublish_partsr   )textr0   thing_being_parsed	overridessourcer%   s         r   	parse_rstrB   ;   s    
  !%>788??DD"' I ,K9K0KF M''&$ (  E U:&'''r   z%s/models/%s/z%s/views/%s/z%s/templates/%s/z%s/filters/#%sz%s/tags/#%s)modelviewtemplatefiltertagc                 t    | dv dfd	}t           j        j        j                            | |           d S )N)rE   rD   c                     |i }t          j        j        ||fd	|j        j        j        r|n|                                fz  i|}|gg fS Nrefuri)r;   nodes	referencedocumentsettingsr1   lower)
namerawtextr>   linenoinlineroptionscontentnodeis_case_sensitiveurlbases
           r   _rolez$create_reference_role.<locals>._rolek   sx    ?G~'
 
 $-7-?DD4::<<	
 
 
 vrzr   NN)r;   parsersrstrolesregister_canonical_role)rolenamerY   rZ   rX   s    ` @r   create_reference_rolera   g   sZ     $88      " 66xGGGGGr   c                     |i }|j         j        j        }t          j        j        ||fdt          |         |j         j        j        |                                fz  i|}|gg fS rJ   )	rN   rO   r0   r;   rL   rM   ROLESr1   rP   )	rQ   rR   r>   rS   rT   rU   rV   contextrW   s	            r   default_reference_rolere      s     'AG>#  'N )3

	  D 62:r   cmsreferencez\(\?P(<\w+>)z\(z\(\?\:c                 0    t          j        dd |           S )z1Remove unescaped metacharacters from the pattern.z/((?:^|(?<!\\))(?:\\\\)*)(\\?)([?*+^$]|\\[bBAZ])c                 D    | d         r| d         | d         z   n| d         S )N   r   r,    )ms    r   <lambda>z(replace_metacharacters.<locals>.<lambda>   s#    1/!A$1++1Q4 r   )r   sub)patterns    r   replace_metacharactersro      s"    6://  r   c                     d\  }}t          ||d                    D ]<\  }}|dk    r|dk    r|dz  }n|dk    r|dk    r|dz  }|}|dk    r| ||z   dz   fc S =d S )N)r   N(\r   )r   )	enumerate)startendrn   unmatched_open_brackets	prev_charidxvals          r   _get_group_start_endr{      s    )0&Ygcddm,, ( (S #::)t++#q(##CZZI--#q(#	 #a''#)a-'''' (( (r   c              #      K   d }|                     |           D ]S}t          |                    d          |                    d          |           x}r|\  }}|r||k    s|s|||fV  |}Td S )Nr   )finditerr{   ru   rv   )rn   group_matcherprev_endmatchindicesru   rv   s          r   _find_groupsr      s      H''00  *5;;q>>599Q<<QQQ7 	 JE3 (EH,,H,S%''''H r   c                       fdt           t                    D             }|D ]\  }}                     ||            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                 <    g | ]\  }}}||         |d          fS )r   rj   ).0ru   rv   r   rn   s       r   
<listcomp>z(replace_named_groups.<locals>.<listcomp>   sA       E3 
s	U1X&  r   )r   named_group_matcherreplace)rn   group_pattern_and_namegroup_pattern
group_names   `   r   replace_named_groupsr      sg       !-g7J!K!K   &< = =!z//-<<Nr   c                     d\  }}t          | t                    D ]'\  }}}|r|| ||         z  }|| d|         dz   z  }|}(|| |d         z   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>
    r   NNz<var>)r   unnamed_group_matcher)rn   final_patternr   ru   rv   _s         r   replace_unnamed_groupsr      s{     'M8%g/DEE  sA 	5WXe^44M%7227899---r   c                     t          | t                    }d\  }}|D ]\  }}}|| ||         z  }|}|| |d         z   S )z
    Find non-capturing groups in the given `pattern` and remove them, e.g.
    1. (?P<a>\w+)/b/(?:\w+)c(?:\w+) => (?P<a>\\w+)/b/c
    2. ^(?:\w+(?:\w+))a => ^a
    3. ^a(?:\w+)/b(?:\w+) => ^a/b
    r   N)r   non_capturing_group_matcher)rn   group_start_end_indicesr   r   ru   rv   r   s          r   remove_non_capturing_groupsr      sb     +74OPP&M80  sA%007899---r   )Nr[   )*__doc__r   email.errorsr   email.parserr   inspectr   django.urlsr   django.utils.regex_helperr   django.utils.safestringr   docutils.corer;   docutils.nodesdocutils.parsers.rst.rolesdocutils_is_availableImportErrorr   r*   rB   rc   ra   re   r\   r]   r^   r_   r"   rQ   rY   r   r   r   ro   r{   r   r   r   r   rj   r   r   <module>r      sW   D D 				 ) ) ) ) ) ) % % % % % %             6 6 6 6 6 6 - - - - - -!%%%% !  " " "!"& & &! ! !8( ( ( (H "	 	H H H2 AE   *  -66.    - -gdG,,,, '&77 ((// ..y99   ( ( ("    ". . .". . . . .s   ; AA