+
    Sj               
       ,   R t ^ RIt^ RIHt ^ RIHt ^ RIHt ^ RIH	t	 ^ RI
Ht ^ RIHt  ^ RIt^ RIt^ RIt^ RItRtR
 tR tR&R ltRRRRRRRRRR/t]P2                  ! R]P4                  4      tR tR tR'R lt]'       dT   ]P>                  P@                  PB                  PE                  R]4       ]PG                  4        F  w  t$t%]! ]$]%4       K  	  ]! R4      t&]! R4      t']! R4      t(R t)R  t*R! t+R" t,R# t-R$ t.R% t/R#   ] d    R	t Li ; i)(zBMisc. utility functions/classes for admin documentation generator.N)HeaderParseError)HeaderParser)cleandoc)reverse)_lazy_re_compile)	mark_safeTFc                     \        V R 4      '       d(   V P                  pVP                   RVP                   2# V P                  p\	        V RV P
                  P                  4      pVR,           V,           # )
view_class.__qualname__)hasattrr	   
__module__r   getattr	__class____name__)	view_funcklassmod_name	view_names   &   S/var/www/idalgo/venv/lib/python3.14/site-packages/django/contrib/admindocs/utils.pyget_view_namer      sm    y,''$$""#1U%7%7$899##H	>93F3F3O3OPIc>I%%    c                   V '       g   RR/ 3# \        V 4      p \        P                  ! RV 4      pV^ ,          p\        V4      ^8X  d   Rp/ pMr\	        4       p VP                  VR,          4      p\        VP                  4       4      pV'       d   RP                  V^R 4      pMRP                  VR,          4      p W#V3#   \         d    / pRP                  TR,          4      p L+i ; i)zE
Parse out the parts of a docstring. Return (title, body, metadata).
 z\n{2,}z

:   NN)
r   resplitlenr   parsestrdictitemsjoinr   )	docstringpartstitlebodymetadataparsers   &     r   parse_docstringr)       s     2rz#IHHY	*E!HE
5zQ
	.uRy1H
 HNN,-H{{52;/{{59-     	*H;;uRy)D	*s   C %C,+C,c                8   RRR^RVR\        R4      P                  R4      RR	R
R	/pT;'       d
    RV,          pRp\        P                  P	                  R4      ! 4       p\        P
                  P                  W@,          VRVVR7      p\        VR,          4      # )z4
Convert the string from reST to an XHTML fragment.
doctitle_xformTinitial_header_leveldefault_reference_context	link_basezdjango-admindocs-docroot/raw_enabledF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   )textr-   thing_being_parsed	overridessourcewriter_instancer$   s   &&&    r   	parse_rstrC   <   s    
 	$#%>W78??Du %I ,KK9K0KF &&77?AOMM''&$ ( E U:&''r   modelz%s/models/%s/viewz%s/views/%s/templatez%s/templates/%s/filterz%s/filters/#%stagz%s/tags/#%sz^(.+?)\s*(?<!\x00)<([^<]*?)>$c                    \         P                  V 4      pV'       d$   RVP                  ^4      VP                  ^4      3# RW 3# )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
TF)explicit_title_rematchgroup)r>   rK   s   & r   split_explicit_titlerM   m   s?     ##D)EU[[^U[[^33$r   c                    aa V R9   oRVV3R llp\         P                  P                  P                  P	                  W4       R# )rF   Nc                    < Vf   / p\        V4      w  rxp	\        P                  P                  ! VV3RSVP                  P
                  P                  S'       d   T	MV	P                  4       3,          /VB p
V
.. 3# Nrefuri)rM   r9   nodes	referencedocumentsettingsr.   lower)namerawtextr>   linenoinlineroptionscontent_r%   targetnodeis_case_sensitiveurlbases   &&&&&&&    r   _role$create_reference_role.<locals>._role~   s    ?G/5&~~''
 $$--77/FV\\^	
 
 vrzr   )rF   rE   NN)r9   parsersrstrolesregister_canonical_role)rolenamera   rb   r`   s   &f @r   create_reference_rolerj   z   s;     $88 $ 66xGr   c                     Vf   / pVP                   P                  P                  p\        P                  P
                  ! VV3R\        V,          VP                   P                  P                  VP                  4       3,          /VB pV.. 3# rP   )	rT   rU   r-   r9   rR   rS   ROLESr.   rV   )	rW   rX   r>   rY   rZ   r[   r\   contextr_   s	   &&&&&&&  r   default_reference_rolern      s     ''AAG>>## 'N  ))33

	 D 62:r   cmsreferencez\(\?P(<\w+>)z\(z\(\?\:c                4    \         P                  ! RR V 4      # )z1Remove unescaped metacharacters from the pattern.z/((?:^|(?<!\\))(?:\\\\)*)(\\?)([?*+^$]|\\[bBAZ])c                 `    V ^,          '       d   V ^,          V ^,          ,           # V ^,          # )    )ms   &r   <lambda>(replace_metacharacters.<locals>.<lambda>   s$    1!A$1+/1Q4/r   )r   sub)patterns   &r   replace_metacharactersry      s    66:/ r   c                     ^RrC\        W!R 4       FP  w  rVVR8X  d   VR8w  d   V^,          pMVR8X  d   VR8w  d
   V^,          pTpV^ 8X  g   K?  WV,           ^,           3u # 	  R# )r   N(\))	enumerate)startendrx   unmatched_open_brackets	prev_charidxvals   &&&    r   _get_group_start_endr      sr    )*DYgdm, #:)t+#q(#CZI-#q(#	 #a')a-'' -r   c              #      "   R pVP                  V 4       FZ  p\        VP                  ^ 4      VP                  ^ 4      V 4      ;p'       g   K8  Vw  rVV'       d   WR8  g	   V'       g   WVV3x  TpK\  	  R # 5iN)finditerr   r   r   )rx   group_matcherprev_endrK   indicesr   r   s   &&     r   _find_groupsr      sg     H''0*5;;q>599Q<QQ7QQ JEE,H%''H 1s   AA6A6(A6c                    \        V \        4       UUUu. uF  w  rpWV V^,          3NK  	  ppppV F  w  rVV P                  WV4      p K  	  V # u upppi )z
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   named_group_matcherreplace)rx   r   r   rK   group_pattern_and_namegroup_pattern
group_names   &      r   replace_named_groupsr      sf     ".g7J!K!KE 
s	U1X&!K   &<!//-< &<Ns   Ac                    RRr!\        V \        4       F,  w  r4pV'       d   WW# ,          pWRV R,           ,          pTpK.  	  WVR ,           # )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   Nz<var>)r   unnamed_group_matcher)rx   final_patternr   r   r   r]   s   &     r   replace_unnamed_groupsr      s\     !$8%g/DEAX44M%722	 F
 89---r   c                n    \        V \        4      pRRr2V F  w  rEpW W4 ,          pTpK  	  W VR ,           # )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      sK     +74OP $80A00 1 89---r   c                 X    \        V P                  R R4      P                  RR4      4      # )z<p>r   z</p>)r   r   )values   &r   strip_p_tagsr     s%    U]]5"-55fbABBr   r   rd   )0__doc__r   email.errorsr   email.parserr   inspectr   django.urlsr   django.utils.regex_helperr   django.utils.safestringr   docutils.corer9   docutils.nodesdocutils.parsers.rst.rolesdocutils.writersdocutils_is_availableImportErrorr   r)   rC   rl   compileDOTALLrJ   rM   rj   rn   re   rf   rg   rh   r!   rW   ra   r   r   r   ry   r   r   r   r   r   r   rs   r   r   <module>r      s<   D 	 ) %   6 -!% !&!8 (N _
N"	=	 JJ?K 
H2* 66. gdG, ' '7 (/ .y9 ("".".Cu  "!"s   D 	DD