U
    \a(                     @   s  d Z ddlmZmZmZmZmZmZ ddlm	Z	m
Z
 ddlmZmZmZ ddlmZ ddlmZ ddlmZmZmZmZmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z% ddl&Z&ddl'Z'dd	l(m)Z) G d
d deZ*dd Z+G dd deZ,dd Z-dd Z.dd Z/G dd deZ0dd Z1dd Z2dd Z3e.Z4G dd deZ5e3Z6dZ7d d! Z8d"d# Z9d$d% Z:G d&d' d'eZ;d(d) Z<d:d*d+Z=d,d- Z>d;d.d/Z?d0d1 Z@d2d3 ZAd4d5 ZBd6d7 ZCd8d9 ZDdS )<zFAdd the generic fixed and derived content to a Classic Pygame document    )Visitorget_nameGetError	get_refidas_refid	as_refuri)get_descinfoget_descinfo_refid)descdesc_signaturedesc_content)index)PyClasslike)sectionliteral	reference	paragraphtitledocumentTextTextElementinlinetabletgroupcolspectbodyrowentrywhitespace_normalize_nameSkipNodelineN)dequec                   @   s   e Zd ZdZdd ZdS )PyGameClasslikez*
    No signature prefix for classes.
    c                 C   s   | j dkrdS t| |S )Nclass )objtyper   )selfsig r(   </home/runner/work/pygame/pygame/docs/reST/ext/boilerplate.pyget_signature_prefix(   s    z$PyGameClasslike.get_signature_prefixN)__name__
__module____qualname____doc__r*   r(   r(   r(   r)   r"   #   s   r"   c                 C   s   |  d | dg d | ddt | dt | dt | jtt	t
fttfttfd | jtttftd ftd fd | jtttfttfd	 d S )
Nzext.indexerboilerplate_skip_transformr$   pyr#   zdoctree-resolvedzhtml-page-context)htmllatextext)r1   r2   )setup_extensionadd_config_valueadd_directive_to_domainr"   connecttransform_documentinject_template_globalsadd_nodeTocRefvisit_toc_ref_htmldepart_toc_ref_htmlvisit_toc_refdepart_toc_refTocTablevisit_toc_table_htmldepart_toc_table_html
visit_skipDocTitlevisit_doc_title_htmldepart_doc_title_htmlvisit_doc_titledepart_doc_title)appr(   r(   r)   setup,   s,    
rJ   c                   @   s   e Zd ZdS )r;   Nr+   r,   r-   r(   r(   r(   r)   r;   N   s   r;   c                 C   s   |  | d S N)visit_referencer&   noder(   r(   r)   r>   R   s    r>   c                 C   s   |  | d S rL   )depart_referencerN   r(   r(   r)   r?   V   s    r?   c                 C   sR   |d }t |}t|| jjd }| jj}dtj|||f |d< t	| | d S )Nrefuridocnamez%s%s%s)
r   r	   settingsenvbuilderlink_suffixospathbasenamer>   )r&   rO   rQ   refidrR   rV   r(   r(   r)   r<   Z   s    r<   c                   @   s   e Zd ZdS )r@   NrK   r(   r(   r(   r)   r@   c   s   r@   c                 C   s   |  | d S rL   )visit_tablerN   r(   r(   r)   rA   g   s    rA   c                 C   s   |  | d S rL   )depart_tablerN   r(   r(   r)   rB   k   s    rB   c                 C   s
   t  d S rL   )r   rN   r(   r(   r)   rC   o   s    rC   c                   @   s   e Zd ZdS )rD   NrK   r(   r(   r(   r)   rD   v   s   rD   c                 C   s   |  | d S rL   )visit_titlerN   r(   r(   r)   rG   ~   s    rG   c                 C   s   |  | d S rL   )depart_titlerN   r(   r(   r)   rH      s    rH   c                 C   s&   || j d krd S |t| | d S )Nr/   )config	walkaboutDocumentTransformer)rI   doctreerR   r(   r(   r)   r8      s    r8   c                       sZ   e Zd ZdZeeZ fddZdd Zdd Z	dd	 Z
d
d Zdd Zdd Z  ZS )ra   z:(?P<key>[a-zA-Z_][a-zA-Z0-9_]*(\.[a-zA-Z_][a-zA-Z0-9_]*)*)c                    s&   t t| || t | _t | _d S rL   )superra   __init__r!   Zmodule_stacktitle_stack)r&   rI   document_node	__class__r(   r)   rd      s    zDocumentTransformer.__init__c                 C   s   | j d  d S rL   )re   appendrN   r(   r(   r)   visit_section   s    z!DocumentTransformer.visit_sectionc                 C   s.   | j  }|d d dr*t||| j d S )Nidsr   zmodule-)re   pop
startswithtransform_module_sectionrT   )r&   rO   
title_noder(   r(   r)   depart_section   s    
z"DocumentTransformer.depart_sectionc                 C   s   |d dkr| j d S )Ndomainr0   )	skip_noderN   r(   r(   r)   
visit_desc   s    zDocumentTransformer.visit_descc                 C   s:   |d  d |d d  d |jd s6t|| j d S )Nclasses
definitionr   r   noindex)ri   
attributesadd_tocrT   rN   r(   r(   r)   depart_desc   s    
zDocumentTransformer.depart_descc                 C   s   t |jjtrt|_d S rL   )
isinstanceparentr   rD   rh   rN   r(   r(   r)   r]      s    zDocumentTransformer.visit_titlec                 C   s   d|d krd S z|d }W n t k
r2   Y d S X t|tsBd S | }| j|}|d krbd S |d}zt|| jd }W n t	k
r   Y d S X |rd|d< |d 
d td|d	gd
}|
| d S )Ntocrt   r   keysummaryr$   reftitleZtooltipztooltip-contentrt   )
IndexErrorrz   r   astextkey_patmatchgroupr	   rT   r   ri   r   )r&   rO   childnamemr}   r~   Zinline_noder(   r(   r)   rM      s,    

z#DocumentTransformer.visit_reference)r+   r,   r-   Z_key_rerecompiler   rd   rj   rp   rs   ry   r]   rM   __classcell__r(   r(   rg   r)   ra      s   
ra   c           
      C   s   | d d }|  t}tt| |d }|d kr>td|g}ntt|}td
|ddg|gd}td| }td||dddgd	}	| |	 t	|	||  d S )Nnamesr      r$   r   module)rt   r   ru   )desctyper%   rt   )r$   r$   )r$   )
first_child_matching_classsection_prelude_end_classlist
ipop_childr   r   r   r
   ri   rx   )
section_nodero   rT   ZfullmodnamewhereZcontent_childrenZsignature_childrenZsignature_nodecontent_node	desc_noder(   r(   r)   rn      s4    
    
rn   c                 c   s   t | |kr| |V  q d S rL   )lenrl   )rO   startr(   r(   r)   r      s    r   c                 C   s6   zt | d |d W S  tk
r0   tdY nX d S )NrZ   r~   zreference has no refid)r	   KeyErrorr   )reference_noderT   r(   r(   r)   get_target_summary   s    r   c                 C   sf   |dk	rt |}nt | }t||}t||}|dkr:dS | d }d}|d rV|d7 }||| dS )z&Add a table of contents to a desc nodeNr   r~   r   )r   r	   	build_tocinsert)r   rT   r   rZ   descinfor|   r   Z	insert_atr(   r(   r)   rx      s    


rx   c                 C   s  d}| d }|sdS d}d}g }t ||D ]z\}}}	t|t|}t|t|	}t||}
tdtdd|
}tdt|d}tdt|	d}td|||}|| q*|d }t|}|d }t	d| }t
|d}t
|d}t
|d}td||||d	d
}td|dgdS )z)Return a desc table of contents node treeu   —childrenNr   r$      
   )colwidth   )colsr|   r   )r$   )
ichild_idsmaxr   toc_refr   r    r   r   ri   r   r   r   r@   )r   rT   	separator	child_idsZmax_fullname_lenZmax_summary_lenrowsfullnamerZ   r~   r   Zref_entry_nodeZsep_entry_nodeZsum_entry_noderow_nodeZcol0_lenZcol1_lenZcol2_lenZ
tbody_nodeZcol0_colspec_nodeZcol1_colspec_nodeZcol2_colspec_nodeZtgroup_noder(   r(   r)   r      s@    



     r   c                 c   s0   | D ]&}|j | }|d |d |d fV  qd S )Nr   rZ   r~   )pyg_descinfo_tbl)r   rT   rZ   r   r(   r(   r)   r      s    
r   c                 C   s"   t | f}td| |t|dgdS )Nr$   r|   )r   rQ   rt   )r   r;   r   )r   rZ   r   r(   r(   r)   r   &  s    
r   c                 C   sR   |d }| j D ]>}t|tjjrt|d tjjrtjd|}|d| qd S )N.r   r$   )r   rz   sphinxaddnodesr   	desc_namedesc_classnamer   )r
   	classnameprefixr   Znew_desc_classnamer(   r(   r)   decorate_signatures+  s    
 r   c                    s   dd }| j j}z
|j}W n tk
r2   g }Y nX t||d}dddddd	d
dddddddddddddddddddddd g}d!d" |D }d#d$ }	td%d" |D  d&d" |D }
|	|
|} fd'd"|D }||d(< d S ))Nc                 S   s   t | d  S )Nr   )r   lower)dr(   r(   r)   lowercase_name6  s    z/inject_template_globals.<locals>.lowercase_name)r}   ZColorZcursorsdisplayZdraweventfontimageZjoystickr}   localsmaskZmixerZmouseZmusicpygameZRectZSurfaceZspritetime	transformZBufferProxyZfreetypeZgfxdrawZmidiZOverlayZ
PixelArrayZ	pixelcopyZsndarrayZ	surfarrayc                 S   s   g | ]}d | qS )zpygame.r(   .0xr(   r(   r)   
<listcomp>a  s     z+inject_template_globals.<locals>.<listcomp>c                    s     fdd| D  S )Nc                    s   g | ]}| kr|qS r(   r(   r   existing_orderr(   r)   r   d  s      zBinject_template_globals.<locals>.sort_by_order.<locals>.<listcomp>r(   )sequencer   r(   r   r)   sort_by_orderc  s    z.inject_template_globals.<locals>.sort_by_orderc                 S   s   g | ]}|d  |fqS r   r(   r   r(   r(   r)   r   f  s     c                 S   s   g | ]}|d  qS r   r(   r   r(   r(   r)   r   g  s     c                    s   g | ]}| kr | qS r(   r(   )r   r   Zfull_name_sectionr(   r)   r   j  s     pyg_sections)rU   rT   r   AttributeErrorsorteddict)rI   pagenametemplatenamecontextrb   r   rT   sectionsr   r   Z
full_namesZsorted_namesr(   r   r)   r9   5  s\    



r9   )r   )N)Er.   	ext.utilsr   r   r   r   r   r   ext.indexerr   r	   Zsphinx.addnodesr
   r   r   r   r   sphinx.domains.pythonr   Zdocutils.nodesr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    rW   r   collectionsr!   r"   rJ   r;   r>   r?   r<   r@   rA   rB   rC   r=   rD   rE   rF   rG   rH   r8   ra   rn   r   r   rx   r   r   r   r   r9   r(   r(   r(   r)   <module>   sH    P	"	<

 
