Ë
    ñ%9jÏ   ã                   ó  — 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dlZd	Zd„ Zd„ Zd#d„ZddddddœZ ej2                  dej4                  «      Zd„ Zd„ Z	 d$d„ZerQej>                  j@                  jB                  jE                  de«       ejG                  «       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"„ Z/y# e$ r d
ZY ŒÄw xY w)%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       úZ/var/www/html/truck-me/venv/lib/python3.12/site-packages/django/contrib/admindocs/utils.pyÚget_view_namer      sj   € Üˆy˜,Ô'Ø×$Ñ$ˆØ×"Ñ"Ð# 1 U×%7Ñ%7Ð$8Ð9Ð9Ø×#Ñ#€HÜ˜	 >°9×3FÑ3F×3OÑ3OÓP€IØ�c‰>˜IÑ%Ð%ó    c                 óž  — | sddi fS t        | «      } t        j                  d| «      }|d   }t        |«      dk(  rd}i }ndt	        «       }	 |j                  |d   «      }t        |j                  «       «      }|rdj                  |dd «      }ndj                  |dd «      }	 |||fS # t        $ r i }dj                  |dd «      }Y Œ&w xY w)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‰H�Y 	Ó*€EØ�!‰H€EÜ
ˆ5ƒz�Q‚ØˆØ‰ä“ˆð
	.Ø—‘ u¨R¡yÓ1ˆHô
 ˜HŸN™NÓ,Ó-ˆHÙØ—{‘{ 5¨¨2 ;Ó/‘à—{‘{ 5¨¨ 9Ó-‘Ø�$˜Ð Ð øô  ò 	*ØˆHØ—;‘;˜u Q R˜yÓ)ŠDð	*ús   ÁB* Â*CÃCc                 ó
  — dd|t        d«      j                  d«      dddœ}|xr d|z  }d}t        j                  j	                  d	«      «       }t        j
                  j                  || z  |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::
ÚhtmlN)Úsource_pathÚdestination_pathÚwriterÚsettings_overridesÚfragment)r   ÚrstripÚdocutilsÚwritersÚget_writer_classÚcoreÚpublish_partsr   )Útextr0   Úthing_being_parsedÚ	overridesÚsourceÚwriter_instancer%   s          r   Ú	parse_rstrE   <   s¡   € ð
 Ø !Ø%>ÜÐ7Ó8×?Ñ?ÀÓDØØ"'ñ€Ið ,ÒK°Ð9KÑ0KÐð€Fô ×&Ñ&×7Ñ7¸Ó?ÓA€OÜ�M‰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Útagz^(.+?)\s*(?<!\x00)<([^<]*?)>$c                 ó€   — t         j                  | «      }|r#d|j                  d«      |j                  d«      fS d| | fS )zÂ
    Split role content into title and target, if given.

    From sphinx.util.nodes.split_explicit_title
    See https://github.com/sphinx-doc/sphinx/blob/230ccf2/sphinx/util/nodes.py#L389
    Tr   é   F)Úexplicit_title_reÚmatchÚgroup)r@   rN   s     r   Úsplit_explicit_titlerP   m   sA   € ô ×#Ñ# DÓ)€EÙØ�U—[‘[ “^ U§[¡[°£^Ð3Ð3Ø�$˜ÐÐr   c                 ó†   ‡‡— | dv Šdˆˆfd„	}t         j                  j                  j                  j	                  | |«       y )N)rH   rG   c                 óä   •— |€i }t        |«      \  }}}	t        j                  j                  ||fd‰|j                  j
                  j                  ‰r|	n|	j                  «       fz  i|¤Ž}
|
gg fS ©NÚrefuri)rP   r;   ÚnodesÚ	referenceÚdocumentÚsettingsr1   Úlower)ÚnameÚrawtextr@   ÚlinenoÚinlinerÚoptionsÚcontentÚ_r&   ÚtargetÚnodeÚis_case_sensitiveÚurlbases              €€r   Ú_rolez$create_reference_role.<locals>._role~   s†   ø€ Øˆ?ØˆGÜ/°Ó5Ñˆˆ5�&Ü�~‰~×'Ñ'ØØñ
ð à×$Ñ$×-Ñ-×7Ñ7Ù/‘F°V·\±\³^ðñð	
ð ñ
ˆð ˆv�rˆzÐr   ©NN)r;   ÚparsersÚrstÚrolesÚregister_canonical_role)Úrolenamerd   re   rc   s    ` @r   Úcreate_reference_rolerl   z   s8   ù€ à Ð$8Ð8Ðöô$ ×Ñ×Ñ×Ñ×6Ñ6°xÀÕGr   c                 ó
  — |€i }|j                   j                  j                  }t        j                  j
                  ||fdt        |   |j                   j                  j                  |j                  «       fz  i|¤Ž}|gg fS rS   )	rW   rX   r0   r;   rU   rV   ÚROLESr1   rY   )	rZ   r[   r@   r\   r]   r^   r_   Úcontextrb   s	            r   Údefault_reference_rolerp   “   s�   € ð €ØˆØ×Ñ×'Ñ'×AÑA€GÜ�>‰>×#Ñ#ØØñô �'‰Nà× Ñ ×)Ñ)×3Ñ3Ø—
‘
“ðñð	ð ñ€Dð ˆ6�2ˆ:Ðr   Úcmsreferencez\(\?P(<\w+>)z\(z\(\?\:c                 ó2   — t        j                  dd„ | «      S )z1Remove unescaped metacharacters from the pattern.z/((?:^|(?<!\\))(?:\\\\)*)(\\?)([?*+^$]|\\[bBAZ])c                 ó,   — | d   r| d   | d   z   S | d   S )NrL   r   r,   © )Úms    r   ú<lambda>z(replace_metacharacters.<locals>.<lambda>º   s    €   1¢�!�A‘$˜˜1™‘+€ ¨1¨Q©4€ r   )r   Úsub)Úpatterns    r   Úreplace_metacharactersry   ¶   s   € ä�6‰6Ø:Ù/Øóð r   c                 óž   — d\  }}t        ||d  «      D ]7  \  }}|dk(  r|dk7  r|dz  }n|dk(  r
|dk7  r|dz  }|}|dk(  sŒ-| ||z   dz   fc S  y )N)r   Nú(ú\r   ú)r   )Ú	enumerate)ÚstartÚendrx   Úunmatched_open_bracketsÚ	prev_charÚidxÚvals          r   Ú_get_group_start_endr…   ¿   s�   € à)0Ñ&Ð˜YÜ˜g c d˜mÓ,ò (‰ˆˆSð �#Š:˜) tÒ+Ø# qÑ(Ñ#Ø�CŠZ˜I¨Ò-Ø# qÑ(Ð#Øˆ	ð # aÓ'Ø˜# ™) a™-Ð'Ò'ñ(r   c              #   óÆ   K  — d }|j                  | «      D ]G  }t        |j                  d«      |j                  d«      | «      x}sŒ1|\  }}|r||kD  s|s|||f–— |}ŒI y ­w)Nr   )Úfinditerr…   r   r€   )rx   Úgroup_matcherÚprev_endrN   Úindicesr   r€   s          r   Ú_find_groupsr‹   Ð   sp   è ø€ Ø€HØ×'Ñ'¨Ó0ò ˆÜ*¨5¯;©;°q«>¸5¿9¹9ÀQ»<ÈÓQÐQˆ7ÑQØ ‰JˆE�3Ù˜E HÒ,±HØ˜S %Ð'Ò'Ø‰Hñùs   ‚AA!ÁA!c                 ó¦   — t        | t        «      D ���cg c]  \  }}}| || |d   f‘Œ }}}}|D ]  \  }}| j                  ||«      } Œ | S c c}}}w )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>
    r   )r‹   Únamed_group_matcherÚreplace)rx   r   r€   rN   Úgroup_pattern_and_nameÚgroup_patternÚ
group_names          r   Úreplace_named_groupsr’   Ú   su   € ô ".¨gÔ7JÓ!K÷ð áˆE�3˜ð 
��sÐ	˜U 1™XÒ&ðÐò ð &<ò =Ñ!ˆ�zØ—/‘/ -°Ó<‰ð=à€Nùôs   •A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)rx   Úfinal_patternr‰   r   r€   r`   s         r   Úreplace_unnamed_groupsr—   ë   sm   € ð 'Ñ€M�8Ü% gÔ/DÓEò ‰ˆˆs�AÙØ˜W X¨eÐ4Ñ4ˆMØ˜  %˜¨7Ñ2Ñ2ˆØ‰ð	ð
 ˜7 8 9Ð-Ñ-Ð-r   c                 óf   — 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)rx   Úgroup_start_end_indicesr–   r‰   r   r€   r`   s          r   Úremove_non_capturing_groupsr›   ü   s[   € ô +¨7Ô4OÓPÐØ&Ñ€M�8Ø0ò ‰ˆˆs�AØ˜ ¨%Ð0Ñ0ˆØ‰ðð ˜7 8 9Ð-Ñ-Ð-r   c                 óX   — t        | j                  dd«      j                  dd«      «      S )Nz<p>r   z</p>)r   rŽ   )Úvalues    r   Ústrip_p_tagsrž     s%   € Ü�U—]‘] 5¨"Ó-×5Ñ5°f¸bÓAÓBÐBr   )Nrf   )0Ú__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.writersÚdocutils_is_availableÚImportErrorr   r*   rE   rn   ÚcompileÚDOTALLrM   rP   rl   rp   rg   rh   ri   rj   r"   rZ   rd   r�   r•   r™   ry   r…   r‹   r’   r—   r›   rž   rt   r   r   ú<module>r®      s>  ðÙ Dã 	Ý )Ý %Ý å Ý 6Ý -ð!ÛÛÛ%Ûð !Ðò&ò!ó8 (ðN ØØ"ØØñ	€ð �B—J‘JÐ?ÀÇÁÓKÐ ò
òHð4 AEóñ* Ø×Ñ×Ñ×Ñ×6Ñ6ØÐ.ôð Ÿ™›ò -‰ˆˆgÙ˜d GÕ,ð-ñ ' Ó7Ð Ù(¨Ó/Ð Ù.¨yÓ9Ð òò(ò"òò".ò".óCøðu ò "Ø!Òð"ús   ¬C9 Ã9DÄD