§
    ¤”j‚  ã                   óÈ  — 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       úm/var/www/finuniver-perm.ru/html/portfolio/venv/lib/python3.11/site-packages/django/contrib/admindocs/utils.pyÚget_view_namer      sd   € Ýˆy˜,Ñ'Ô'ð :ØÔ$ˆØÔ"Ð9Ð9 UÔ%7Ð9Ð9Ð9ØÔ#€HÝ˜	 >°9Ô3FÔ3OÑPÔP€IØ�c‰>˜IÑ%Ð%ó    c                 ó  — | sddi fS t          | ¦  «        } t          j        d| ¦  «        }|d         }t          |¦  «        dk    rd}i }n¸t	          ¦   «         }	 |                     |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"  € ð ð Ø�2�rˆzÐÝ˜Ñ#Ô#€IÝŒH�Y 	Ñ*Ô*€EØ�!ŒH€EÝ
ˆ5�z„z�Q‚€ØˆØˆˆå‘”ˆð
	.Ø—’ u¨R¤yÑ1Ô1ˆHõ
 ˜HŸNšNÑ,Ô,Ñ-Ô-ˆHØð .Ø—{’{ 5¨¨2¨¤;Ñ/Ô/��à—{’{ 5¨¨¨¤9Ñ-Ô-��øõ  ð 	*ð 	*ð 	*ØˆHØ—;’;˜u Q R RœyÑ)Ô)ˆDˆDˆDð	*øøøð �$˜Ð Ð 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°Ð9KÑ0KÐð€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Ø-Ð?�D�D°4·:²:±<´<ðñð	
ð ð
ð 
ˆð ˆv�rˆzÐr   ©NN)r;   ÚparsersÚrstÚrolesÚregister_canonical_role)ÚrolenamerY   rZ   rX   s    ` @r   Úcreate_reference_rolera   g   sZ   øø€ à Ð$8Ð8Ððð ð ð ð ð ð õ" ÔÔÔ×6Ò6°xÀÑ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‚   € ð €ØˆØÔÔ'ÔA€GÝŒ>Ô#ØØðð õ �'ŒNàÔ Ô)Ô3Ø—
’
‘”ðñð	ð ðð €Dð ˆ6�2ˆ:Ð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œ‘+�+¨1¨Q¬4€ 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Ý˜g c d dœmÑ,Ô,ð (ð (‰ˆˆSð �#Š:ˆ:˜) tÒ+Ð+Ø# qÑ(Ð#Ð#Ø�CŠZˆZ˜I¨Ò-Ð-Ø# 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©>¬>¸5¿9º9ÀQ¹<¼<ÈÑQÔQÐQˆ7ð 	Ø ‰JˆE�3Øð (˜E HÒ,Ð,°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   ø€ ð ð ð áˆE�3˜ð 
��s�Ô	˜U 1œXÐ&ðð ð r   )r‚   Únamed_group_matcherÚreplace)rn   Úgroup_pattern_and_nameÚgroup_patternÚ
group_names   `   r   Úreplace_named_groupsrŒ   Æ   sg   ø€ ðð ð ð å!-¨gÕ7JÑ!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{   € ð 'Ñ€M�8Ý% gÕ/DÑEÔEð ð ‰ˆˆs�AØð 	5Ø˜W X¨e ^Ô4Ñ4ˆMØ˜  % œ¨7Ñ2Ñ2ˆØˆˆØ˜7 8 9 9Ô-Ñ-Ð-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   € õ +¨7Õ4OÑPÔPÐØ&Ñ€M�8Ø0ð ð ‰ˆˆs�AØ˜ ¨% Ô0Ñ0ˆØˆˆØ˜7 8 9 9Ô-Ñ-Ð-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ØÐ˜d GÑ,Ô,Ð,Ð,ð 'Ð& Ñ7Ô7Ð Ø(Ð(¨Ñ/Ô/Ð Ø.Ð.¨yÑ9Ô9Ð ðð ð ð(ð (ð (ð"ð ð ðð ð ð".ð .ð .ð".ð .ð .ð .ð .s   ¬; »AÁA