o
    Ni                     @  sd  d Z ddlmZ ddl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 ddlmZ dd	lmZmZ dd
lmZmZmZmZmZ ddlmZ ddlmZ ddlmZmZ ddl m!Z! ddl"m#Z#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.m/Z/m0Z0 ddl1m2Z2m3Z3 ddl4m5Z5m6Z6 ddl7m8Z8 erddl9m:Z:m;Z; ddl<m=Z=m>Z>m?Z?m@Z@ ddlAmBZBmCZC ddlDmEZE ddlFmGZG ddlmHZH ddlImJZJ ddlKmLZLmMZM dd lmNZNmOZOmPZPmQZQmRZRmSZSmTZTmUZUmVZVmWZWmXZXmYZYmZZZm[Z[m\Z\m]Z]m^Z^m_Z_m`Z`maZambZbmcZcmdZdmeZemfZfmgZgmhZhmiZimjZjmkZkmlZlmmZmmnZnmoZompZpmqZqmrZrmsZsmtZtmuZumvZvmwZwmxZxmyZymzZzm{Z{m|Z|m}Z}m~Z~mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZ e,eZdNd#d$ZG d%d& d&ee ZG d'd( d(eZG d)d* d*eZG d+d, d,eZG d-d. d.eZG d/d0 d0eZG d1d2 d2eZG d3d4 d4eZG d5d6 d6eZG d7d8 d8e5ZG d9d: d:e5ZG d;d< d<e5ZG d=d> d>e	j=ZG d?d@ d@e(ZG dAdB dBeZG dCdD dDe&ZG dEdF dFe6ZG dGdH dHeZdOdLdMZdS )PzThe C++ language domain.    )annotationsN)TYPE_CHECKINGAnyClassVar)nodes)
directives)addnodes)ObjectDescription)DomainObjType)ASTDeclarationASTIdentifierASTNamespaceASTNestedNameASTNestedNameElement)_max_id)DefinitionParser)Symbol_DuplicateSymbolError)NoUri)___)XRefRole)SphinxTransform)ReferencesResolver)logging)DefinitionErrorNoOldIdErroranon_identifier_re)FieldGroupedField)SphinxDirective
SphinxRole)make_refnode)IteratorSet)ElementNodeTextElementsystem_message)desc_signaturepending_xref)Sphinx)Builder)	LookupKey)BuildEnvironment)ExtensionMetadata
OptionSpec)WASTAlignofExprASTArrayASTAssignmentExprASTBaseASTBaseClassASTBinOpExprASTBooleanLiteralASTBracedInitListASTCastExprASTCharLiteralASTClassASTCommaExpr
ASTConceptASTConditionalExprASTDeclaratorASTDeclaratorMemPtrASTDeclaratorNameBitFieldASTDeclaratorNameParamQualASTDeclaratorParamPackASTDeclaratorParenASTDeclaratorPtrASTDeclaratorRefASTDeclSpecsASTDeclSpecsSimpleASTDeleteExprASTEnumASTEnumeratorASTExplicitCastASTExplicitSpecASTExpressionASTFallbackExprASTFoldExprASTFunctionParameterASTIdExpressionASTInitializer
ASTLiteral
ASTNewExprASTNoexceptExprASTNoexceptSpecASTNumberLiteralASTOperatorASTOperatorBuildInASTOperatorLiteralASTOperatorTypeASTPackExpansionExprASTParametersQualifiersASTParenExprASTParenExprListASTPointerLiteralASTPostfixArrayASTPostfixCallExprASTPostfixDecASTPostfixExprASTPostfixIncASTPostfixMemberASTPostfixMemberOfPointerASTPostfixOpASTRequiresClauseASTSizeofExprASTSizeofParamPackASTSizeofTypeASTStringLiteralASTTemplateArgConstantASTTemplateArgsASTTemplateDeclarationPrefixASTTemplateIntroduction ASTTemplateIntroductionParameter ASTTemplateKeyParamPackIdDefaultASTTemplateParam'ASTTemplateParamConstrainedTypeWithInitASTTemplateParamNonTypeASTTemplateParamsASTTemplateParamTemplateTypeASTTemplateParamTypeASTThisLiteralASTTrailingTypeSpecASTTrailingTypeSpecDecltypeASTTrailingTypeSpecDecltypeAutoASTTrailingTypeSpecFundamentalASTTrailingTypeSpecNameASTType	ASTTypeIdASTTypeUsingASTTypeWithInitASTUnaryOpExprASTUnionASTUserDefinedLiteralreturnr   c                  C  s    t tdd } t| gdgddS )NPhonyNameDueToErrorF)rooted)r   r   r   )nne r   O/home/ubuntu/.local/lib/python3.10/site-packages/sphinx/domains/cpp/__init__.py_make_phony_error_name   s   r   c                      s   e Zd ZU dZededdddgZded< ej	ej	ej	ej	ej	ej	ej	d	Z
d
ed< d7ddZd8ddZed9ddZed9ddZd:ddZd;d!d"Zd<d&d'Zd= fd)d*Zd>d+d,Zd?d-d.Zd?d/d0Zd@d3d4ZdAd5d6Z  ZS )B	CPPObjectz%Description of a C++ language object.template parameterzTemplate Parameters)tparamr   Tlabelnamescan_collapsezlist[Field]doc_field_types)no-index-entryzno-contents-entryzno-typesettingnoindexentrynocontentsentrytparam-line-specsingle-line-parameter-listClassVar[OptionSpec]option_specastr   r   Nonec              	   C  s   |j dksJ |j}|sJ |jd usJ |jd u sJ |jd u s#J |j}|s*J |jd u r1d S |j}|d u r:d S |j dkrAd S |jdkrHd S |j}|j|jdddd}|d ur[d S |j	 }||_
t||jd d || jj|  d d d S )N
enumeratorenumFT)	matchSelfrecurseInAnonsearchInSiblings   )parent	identOrOptemplateParamstemplateArgsdeclarationdocnameline)
objectTypesymbolr   r   r   r   r   directiveTypefind_identifiercloneenumeratorScopedSymbolr   envr   get_source_info)selfr   r   parentSymbol
parentDecltargetSymbols	declCloner   r   r   _add_enumerator_to_parent   s<   




z#CPPObject._add_enumerator_to_parentsigstrsignoder(   c              	   C  s  g }t dtd D ]}z|j|d}|| W q	 ty'   |tk s%J Y q	w |  |d }|s4J td|sGt	j
d|||  d |j  d}d}	|jj}
|
d urr|
j}|
j}
|d u rfqW|jd	krnd
}	n|
d us[|	sd| jvr|}| jjjD ]}||r|t|d  } nq| |}| jd d||dd f || jjjvr| jjd d }||vr|jj||< |sJ |d | |dd  D ]}|sq|| jjjvr|d | q| jj | d S d S )Nr   )versionr   z^[a-zA-Z0-9_]*$zMIndex id generation for C++ object "%s" failed, please report as bug (id=%s).location:FconceptTr   entriessingle cppr   ids)!ranger   get_idappendr   reverserecompilematchloggerwarningget_locationr   get_full_nested_nameget_display_stringlstripr   r   r   optionsr   configcpp_index_common_prefix
startswithlenget_index_text	indexnodestatedocumentr   
domaindatar   note_explicit_target)r   r   r   r   r   iidnewestIdnameisInConceptr   declstrippedNameprefix	indexTextr   r   r   r   add_target_and_index   sf   


zCPPObject.add_target_and_indexc                 C  s   t N)NotImplementedErrorr   r   r   r   object_type  s   zCPPObject.object_typec                 C  s   | j S r   )r   r   r   r   r   display_object_type  s   zCPPObject.display_object_typer   c                 C  s   t d|| jf S )Nz%s (C++ %s))r   r   )r   r   r   r   r   r     s   zCPPObject.get_index_textparserr   c                 C  s   | | j| jS r   )parse_declarationr   objtype)r   r   r   r   r   parse_definition  s   zCPPObject.parse_definitionr*   r   dictc                 C  s   | |d| j| d S )N
lastIsName)describe_signaturer   )r   r   r   r   r   r   r   r     s   zCPPObject.describe_signature
list[Node]c                   s   | j jjj}d|jvr|jd d }||jd< | |jd< |jd }|j}|d urX|j	dkrXd|
  d| j d| jd	  }tj||  d
 t }||}||jd< g S d |jd< t  S )Ncpp:parent_symbolr   root_symbolcpp:parent_keyfunctionzFC++ declarations inside functions are not supported. Parent function: z
Directive name: z
Directive arg: r   r   cpp:last_symbol)r   r   settingsr   	temp_datar   get_lookup_keyref_contextr   r   r   r   	argumentsr   r   r   r   add_namesuperrun)r   r   rootr   r   msgr   r   	__class__r   r   r    s,   






zCPPObject.runc              
   C  s  | j jd }| j jjp| j jjpd}d| jvo$t||  ko"dkn  |d< t||| j jd}z| |}|	  W n$ t
y_ } ztj||d t }||}	|	| j jd< t|d }~ww z<|j|| j j|  d d	}	|	jd u svJ |	jd u s}J | j jd |	_|	jd ur|	jjd u sJ |	|	j_|	| j jd< W n1 ty } z%|j| j jd< td
}
|
|jj|jj| j|f }
tj|
|d W Y d }~nd }~ww |jdkr| | t| j}d| jv |d< | ||| |S )Nr   r   r   multi_line_parameter_listr   r   r   r   r   )r   r   zRDuplicate C++ declaration, also defined at %s:%s.
Declaration is '.. cpp:%s:: %s'.r   r   )r   r   r   !cpp_maximum_signature_line_lengthmaximum_signature_line_lengthr   r   r   r   
assert_endr   r   r   r   r  
ValueErroradd_declarationr   r   siblingAbovesiblingBelowr   r   r   r   r   r   r   r   r   )r   r   r   r   max_lenr   r   er   r   r  r   r   r   r   handle_signatureA  s^   



	




zCPPObject.handle_signaturec                 C  sz   | j jd }|s
J | j jd | _| j jd | _|| j jd< | | j jd< g | j jdd|jt	R | j jd< d S )Nr   r   r   cpp:domain_namer   )
r   r   oldParentSymbolr  oldParentKeyr   getr   
_stringifyr   )r   
lastSymbolr   r   r   before_contentx  s   
zCPPObject.before_contentc                 C  s<   | j | jjd< | j| jjd< | jjd d d | jjd< d S )Nr   r   r  )r  r   r   r  r  r   r   r   r   after_content  s    zCPPObject.after_contentsig_nodetuple[str, ...]c                 C  s    t dd | jjd  jD S )Nc                 s  s    | ]	}|j tV  qd S r   )r   r  r   .0r   r   r   r   	<genexpr>  s    z4CPPObject._object_hierarchy_parts.<locals>.<genexpr>r   )tupler   r   r   r   )r   r  r   r   r   _object_hierarchy_parts  s   z!CPPObject._object_hierarchy_partsc                 C  s   | dsdS | jjj}|j d}|jr|dv rd}nd}|d ^ }}|jdkr<dg | jj dd	|| R S |jd
krE|| S |jdkrUdg ||| S dS )N
_toc_partsr   r   >   methodr   ()domain::r  r   hideall)	r  r   appr   r   add_function_parenthesestoc_object_entries_show_parentsjoinr   )r   r  r   r   parensparentsr   r   r   r   _toc_entry_name  s   


$

zCPPObject._toc_entry_name)r   r   r   r   )r   r   r   r   r   r(   r   r   r   r   )r   r   r   r   )r   r   r   r   )r   r*   r   r   r   r   r   r   r   r   )r   r   r   r*   r   r   )r   r   )r  r*   r   r   )r  r*   r   r   )__name__
__module____qualname____doc__r    r   r   __annotations__r   flagr   r   r   propertyr   r   r   r   r   r  r  r  r  r%  r3  __classcell__r   r   r  r   r      s<   
 



*8



#
7

r   c                   @     e Zd ZdZdS )CPPTypeObjecttypeNr6  r7  r8  r   r   r   r   r   r?        r?  c                   @  r>  )CPPConceptObjectr   NrA  r   r   r   r   rC    rB  rC  c                   @  r>  )CPPMemberObjectmemberNrA  r   r   r   r   rD    rB  rD  c                   @  sl   e Zd ZdZg ejededdddededd	d
ddededdddededdddZdS )CPPFunctionObjectr   	parameter
Parameters)paramrG  argargumentTr   
exceptionsThrowsexpr)throwsthrow	exception)r   rolenamer   r   retvalzReturn values)retvalsrS  returnvalueReturnsF)returnsr   )r   has_argr   N)	r6  r7  r8  r   r   r   r    r   r   r   r   r   r   rF    s:    rF  c                   @  s   e Zd ZdZedddZdS )CPPClassObjectclassr   r   c                 C  s   | j dv sJ | j S )N)rZ  struct)r   r   r   r   r   r     s   z"CPPClassObject.display_object_typeNr4  )r6  r7  r8  r   r<  r   r   r   r   r   rY    s    rY  c                   @  r>  )CPPUnionObjectunionNrA  r   r   r   r   r\    rB  r\  c                   @  r>  )CPPEnumObjectr   NrA  r   r   r   r   r^    rB  r^  c                   @  r>  )CPPEnumeratorObjectr   NrA  r   r   r   r   r_    rB  r_  c                   @  s8   e Zd ZU dZdZdZdZdZi Zde	d< dd
dZ
dS )CPPNamespaceObjectzb
    This directive is just to tell Sphinx that we're documenting stuff in
    namespace foo.
    Fr   r   Tr   r   r   r   c              
   C  s   | j jd d }| jd  dv r|}g }nFt| jd |  | jd}z
| }|  W n# t	yP } zt
j||  d t }t|d }W Y d }~nd }~ww ||j|j}|g}|| j jd< || j jd< | | j jd	< g S )
Nr   r   r   NULL0nullptrr  r   r   cpp:namespace_stackr   )r   r   r  stripr   r   r   parse_namespace_objectr  r   r   r   r   r   r  
nestedNametemplatePrefixr   r   r  )r   
rootSymbolr   stackr   r   r  r   r   r   r   r    s.   
zCPPNamespaceObject.runNr5  )r6  r7  r8  r9  has_contentrequired_argumentsoptional_argumentsfinal_argument_whitespacer   r:  r  r   r   r   r   r`    s   
 r`  c                   @  s4   e Zd ZU dZdZdZdZi Zded< dd	d
Z	dS )CPPNamespacePushObjectFr   r   Tr   r   r   r   c              
   C  s  | j d  dv rg S t| j d |  | jd}z
| }|  W n# tyE } ztj	||  d t
 }t|d }W Y d }~nd }~ww | jjdd }|sX| jjd d }||j|j}| jjdg }|| || jjd< || jjd< | | jjd	< g S )
Nr   ra  r  r   r   r   r   re  r   )r  rf  r   r   r   rg  r  r   r   r   r   r   r   r   r  r   r  rh  ri  r   r   r  )r   r   r   r  r   	oldParentr   rk  r   r   r   r  
  s2   

zCPPNamespacePushObject.runNr5  
r6  r7  r8  rl  rm  rn  ro  r   r:  r  r   r   r   r   rp       
 rp  c                   @  s4   e Zd ZU dZdZdZdZi Zded< ddd	Z	d
S )CPPNamespacePopObjectFr   Tr   r   r   r   c                 C  s   | j jdd }|rt|dkrtjd|  d g }n|  t|dkr+|d }n| j jd d }|| j jd< || j jd< |	 | j j
d	< g S )
Nre  r   z=C++ namespace pop on empty stack. Defaulting to global scope.r   r  r   r   r   r   )r   r   r  r   r   r   r   popr   r   r  )r   rk  r   r   r   r   r  *  s   
zCPPNamespacePopObject.runNr5  rr  r   r   r   r   rt  #  rs  rt  c                      s.   e Zd Z		dd fddZdddZ  ZS )	AliasNodeNr   r   aliasOptionsr   r   BuildEnvironment | None	parentKeyLookupKey | Noner   r   c                   st   t    || _|| _|d ur/d|jvr'|jd d }||jd< | |jd< |jd | _d S |d us5J || _d S )Nr   r   r   r   )	r  __init__r   rw  r   r   r   r  ry  )r   r   rw  r   ry  r  r  r   r   r{  =  s   



zAliasNode.__init__c                 C  s   | j | j| jd | jdS )N)r   ry  )r	  r   rw  ry  r   r   r   r   copyM  s   zAliasNode.copyNN)
r   r   rw  r   r   rx  ry  rz  r   r   )r   rv  )r6  r7  r8  r{  r|  r=  r   r   r  r   rv  <  s
    rv  c                   @  s*   e Zd Zejd ZdddZdddZdS )AliasTransformr   r   r   maxdepthintskipThisboolrw  r   renderOptionsr   r   r   r   c              	   C  s  |dkrd}n|dkrd}n|d8 }d}g }|s-t dd}	||	 |j|	d| j| |r|r4|}
n"t  }t  }|| ||_d|d< d	 |d
< |d< d|d< |}
|j	D ]}|jd u raqY|jj
dv rhqY| j||d|||d}|
| qY|st|jdkr|| |S )Nr   Tr   Fr   markNamer   r)  aliasr   desctypezno-index)templateParamfunctionParamr  r  rw  r  r   )r   r*   r   r   r   r   desc_contentdescr   	_childrenr   _render_symbolextendr   children)r   r   r  r  rw  r  r   recurser   r   childContainercontentr  sChild
childNodesr   r   r   r  U  sH   




zAliasTransform._render_symbolkwargsr   c                 K  st  | j tD ]0}|j}|j}zt||| jjd}| \}}|	  W n t
yA } ztj||d d\}}W Y d }~nd }~ww |d u r^t|d}	|	  |	t||7 }	||	 q| jjjjd }
|
|}|std| td| t|
d |sJ g }|rt|tsJ |}|j}|jr|jj}ng }|j||d	d
d
d
dd\}}|d u rg }nt|tsJ |}|j}|j |d	d
d
d
d}|d ur|!| dd |D }t"|dkrt|d}	|!|	 |	  |	t||7 }	tjd||d ||	 qg }ddi}|D ]#}|j#d usJ | j$||j%d |j%d |j%||j d}|&| q|| qd S )Nr  r   r}  r   r   
Target: %sParentKey: %sr   anyTF)rh  templateDeclstyptemplateShorthandr   r   r   r  r   r   c                 S  s   g | ]	}|j d ur|qS r   )r   r!  r   r   r   
<listcomp>  s    z(AliasTransform.apply.<locals>.<listcomp>r   z,Can not find C++ declaration for alias '%s'.r   r  norootr  )'r   findallrv  r   ry  r   r   r   parse_xref_objectr  r   r   r   r   r*   clear	desc_namereplace_selfdomains
cpp_domaindatadirect_lookupdebugdump
isinstancer   rh  ri  	templates	find_namer   r   find_declarationr   r   r   r  rw  r  )r   r  noder   ry  r   r   isShorthandr  r   rj  r   symbolsnsr   r  
failReasonr   r   r   r  resr   r   r   apply  s   






zAliasTransform.applyN)r   r   r  r  r  r  rw  r   r  r   r   r   r   r   )r  r   r   r   )r6  r7  r8  r   default_priorityr  r  r   r   r   r   r~  R  s    

.r~  c                   @  s.   e Zd ZU ejejdZded< d	ddZdS )
CPPAliasObjectr  r  r   r   r   r   c                 C  s  d| j v r| j dd\| _| _nd| j | _| _t }| jj|_| j|d< | j |d< |d< g | _| j	
ddd| j	v d	}|d rS|d dkrStjd
|  d |  }|D ]}|t||| jd qY|   tjdg|  R  }|| d| jjd< |   |gS )a   
        On purpose this doesn't call the ObjectDescription version, but is based on it.
        Each alias signature may expand into multiple real signatures (an overload set).
        The code is therefore based on the ObjectDescription version.
        r   r   r   r)  r   r  r  r  r  zError in C++ alias declaration. Requested 'noroot' but 'maxdepth' 1. When skipping the root declaration, need 'maxdepth' 0 for infinite or at least 2.r   )r   Nobject)r   splitr)  r   r   r  r   r   r   r   r  r   r   r   get_signaturesr   rv  r   r  r  parse_content_to_nodesr   r  )r   r  rw  
signaturesr   content_noder   r   r   r    s0   



zCPPAliasObject.runNr5  )	r6  r7  r8  r   nonnegative_intr;  r   r:  r  r   r   r   r   r    s
   
 r  c                   @  s   e Zd ZdddZdS )CPPXRefRoler   r/   refnoder&   has_explicit_titler  titler   targetr   tuple[str, str]c                 C  s   |j |j |stdt|}|d dkr#|s|d}|d}|sI|d}|d d dkrI|dd  }|d}|dkrI||d	 d  }||fS )
Nz[anonymous]reftyper  r(  ~r   r*  r     )	
attributesupdater  r   subr   removesuffixr   rfind)r   r   r  r  r  r  dcolonr   r   r   process_link  s   



zCPPXRefRole.process_linkN)r   r/   r  r&   r  r  r  r   r  r   r   r  )r6  r7  r8  r  r   r   r   r   r    s    r  c                      s(   e Zd Zd
 fddZddd	Z  ZS )CPPExprRoleasCoder  r   r   c                   s"   t    |rd| _d S d| _d S )Nzcpp-exprz	cpp-texpr)r  r{  
class_type)r   r  r  r   r   r{  $  s   


zCPPExprRole.__init__'tuple[list[Node], list[system_message]]c              
   C  s   | j dd}t||  | jd}z| }W n+ tyB } ztjd|||  d t	j
d||| jgdgg fW  Y d }~S d }~ww | jjdd }|d u rW| jjd d	 }t	j
d| jgd}||d
| j| |gg fS )N
 r  z!Unparseable C++ expression: %r
%sr   r   )classesr   r   markType)textreplacer   r   r   parse_expressionr   r   r   r   desc_inliner  r   r   r  r   r   )r   r  r   r   exr   r   r   r   r   r  -  s(   
(
zCPPExprRole.run)r  r  r   r   )r   r  )r6  r7  r8  r{  r  r=  r   r   r  r   r  #  s    	r  c                   @  s  e Zd ZdZdZdZeedddddeeddddeed	d
ddeeddddeedddeedddeeddddeedddeeddddeeddddddddd
Zi de	de	de
d	ededededededededededededeZe e e e edde e e e e e eddedddZedddddddi dZdMd$d%ZdNd*d+ZdOd.d/ZdPd4d5ZdQd?d@ZdRdBdCZ dSdEdFZ!dTdHdIZ"dUdKdLZ#dS )V	CPPDomaina  C++ language domain.

    There are two 'object type' attributes being used::

    - Each object created from directives gets an assigned .objtype from ObjectDescription.run.
      This is simply the directive name.
    - Each declaration (see the distinction in the directives dict below) has a nested .ast of
      type ASTDeclaration. That object has .objectType which corresponds to the keys in the
      object_types dict below. They are the core different types of declarations in C++ that
      one can document.
    r   zC++rZ  r[  
identifierr@  r]  r   funcrE  varr   r   r   zfunction parameterr   )
rZ  r]  r   rE  r@  r   r   r   r  r  zenum-structz
enum-class	namespaceznamespace-pushznamespace-popr  T)
fix_parens)r  F)r  rZ  r[  r]  r  rE  r  r@  r   r   r   rN  texprN)r   r   r   r   r   r   c                 C  s   t jrtd| td t| jd d td | jd }|| t jrFtd t| jd d td td| t| jd	  D ]\}}||kr]| jd	 |= qOd S )
Nzclear_doc: %sz	before:r   r   z	before endz	after:z
	after endzclear_doc end: %sr   )	r   debug_show_treer   r  r  r  	clear_doclistitems)r   r   rj  r   nDocnamer   r   r   r    s"   





zCPPDomain.clear_docr   r/   r   nodes.documentc                 C  s<   t jrtd| t| jd d td| d S d S )Nzprocess_doc: %sr   r   zprocess_doc end: %s)r   r  r   r  r  r  )r   r   r   r   r   r   r   process_doc  s
   zCPPDomain.process_docpnoder+   c                 C  s   |j | jj d S r   )r  r  r   r  )r   r  r   r   r   process_field_xref  s   zCPPDomain.process_field_xrefdocnamesSet[str]	otherdatadict[str, Any]c                 C  s   t jr1td td t| jd d td td t|d d td | jd |d || j | jd }|d  D ]\}}||v rY||vrY|||< qIt jrytd	 t| jd d td
 td d S d S )Nzmerge_domaindata:z	self:r   r   z		self endz	other:z
	other endr   z	result:z	result endzmerge_domaindata end)	r   r  r   r  r  r  
merge_withr   r  )r   r  r  ourNamesr   r   r   r   r   merge_domaindata  s.   







zCPPDomain.merge_domaindatafromdocnamebuilderr-   r  r  r  contnoder&   !tuple[Element | None, str | None]c           #   
     s  dv rd7 t jd}z| \}	}
W n, tyD } z d'fdd	}||\}}tjd
||d W Y d }~dS d }~ww dd }jd }|rs||}|snt	d t	d|j t	|
d |srJ n|}|
rt|	ts~J |	}|j}|jr|jj}ng }|j ot|jdk}|j||ddd|d\}}|d u rdkr|dkrtt|d }n|d }nt|	tsJ |	}|j}|j|dddd}|d u s|jd u rt|}|ds|dkrt|dS d|jj d( fdd}| stjd|jj| d |j}|
r*| }| d}n| }|j }|s6J dkr|!d" } d}!d d!s|jd"kr|
rjj#rbd#krb|!d7 }!jj#rvd$krv| $d%rv|!d7 }!dv r| $d&r|$d%r|!d7 }!n0jj#rd#kr|$dr|!d7 }!nd$kr|$ds| %d} n
|$dr|!d7 }!|!dkr| d|! 7 } |t&'| 7 }t(||||) |||jf}"|"S ))N)r  r  r(  r  r  	Exceptionr   tuple[str, Exception]c              
     sx   dkrdkr| fS t d d  jd}z	|  W | fS  ty; } zd d |fW  Y d }~S d }~ww )Nr  r  r  )r   r   r  r   )r  parser2e2)r   r  r  r  r   r   findWarning  s   
z2CPPDomain._resolve_xref_inner.<locals>.findWarningz&Unparseable C++ cross-reference: %r
%sr   r}  r   r   r  r  r   T)r  r   r   r   r  templateParamInQualifiedr   r  zstd::stdcpp:r  c                    s<   dkrdS  } | r | v S td d   t)Nr  TzType is z, declaration type is )objtypes_for_roler   r  AssertionError)objtypes)declTypr   r  r   r   	checkType  s   
z0CPPDomain._resolve_xref_inner.<locals>.checkTypezcpp:%s targets a %s (%s).r   refexplicitFr   r  r  z
operator()operator)r  r  r   r  )r   r  )*r   r   r  r   r   r   r  r  r  r  r  r  r   rh  ri  r  r   r   r   r  r   r   r   r   r  r   r   removeprefixr   r   r   r   r   ru  astextr.  endswithr  r   Textr#   get_newest_id)#r   r   r  r  r  r  r  r  r   r   r  r  r  tr  ry  rj  r   r  r   r  r   r  r  r   r   txtNamer  r   fullNestedNamedisplayNamer   r  addParenr  r   )r  r   r  r   r  r  r   _resolve_xref_inner  s   

















zCPPDomain._resolve_xref_innerElement | Nonec              	   C  s   |  |||||||d S )Nr   )r  )r   r   r  r  r  r  r  r  r   r   r   resolve_xrefT  s
   zCPPDomain.resolve_xreflist[tuple[str, Element]]c           	   
   C  sp   t   | |||d|||\}}W d    n1 sw   Y  |r6|dkr,d|fgS d| | |fgS g S )Nr  r  zcpp:templateParamr  )r   suppress_loggingr  role_for_objtype)	r   r   r  r  r  r  r  retnoder   r   r   r   resolve_any_xrefZ  s   



zCPPDomain.resolve_any_xref-Iterator[tuple[str, str, str, str, str, int]]c           	      c  s    | j d }| D ]4}|jd u rq
|jsJ | }t|d}| d}|jj}|j}|j	 }|||||dfV  q
d S )Nr   r   r   )
r  get_all_symbolsr   r   r   r   r   r   r   r  )	r   rj  r   r  r   dispnamer   r   r   r   r   r   get_objectsg  s   



zCPPDomain.get_objects
str | Nonec                 C  sh   | dd }|d u rd S | dd }|d u st|jdkrd S | jd }||}| }| d| S )N	reftargetr   r   r   r*  )r  r   r  r  r   )r   r  r  ry  rj  r   
parentNamer   r   r   get_full_qualified_nameu  s   

z!CPPDomain.get_full_qualified_name)r   r   r   r   )r   r/   r   r   r   r  r   r   )r  r+   r   r   )r  r  r  r  r   r   )r   r/   r  r   r  r-   r  r   r  r   r  r+   r  r&   r   r  )r   r/   r  r   r  r-   r  r   r  r   r  r+   r  r&   r   r  )r   r/   r  r   r  r-   r  r   r  r+   r  r&   r   r  )r   r  )r  r&   r   r  )$r6  r7  r8  r9  r   r   r   r   object_typesrY  r\  rF  rD  r?  rC  r^  r_  r`  rp  rt  r  r   r  r  rolesr   initial_datar  r  r  r  r  r  r  r  r   r   r   r   r   r  D  s    	





 


r  r-  r,   r0   c                 C  s   |  t | dg d | jdg dtthd | jdg dtthd | jdd dtd hd | t | ddd	 | d
dd	 ddd}| d| dddddS )Nr   r   cpp_id_attributes)typescpp_paren_attributesr  cpp_debug_lookupFr   cpp_debug_show_treer-  r,   r   r   c                 S  s(   | j jt_| j jt_| j jjdd d S )NT)r   )r   r'  r   debug_lookupr(  r  r   sort)r-  r   r   r   	initStuff  s   

zsetup.<locals>.initStuffzbuilder-initedbuiltin	   T)r   env_versionparallel_read_safeparallel_write_safe)r-  r,   r   r   )	
add_domainr  add_config_valuer  r$  r  add_post_transformr~  connect)r-  r+  r   r   r   setup  s   


r5  )r   r   )r-  r,   r   r0   )r9  
__future__r   r   typingr   r   r   docutilsr   docutils.parsers.rstr   sphinxr   sphinx.directivesr	   sphinx.domainsr
   r   sphinx.domains.cpp._astr   r   r   r   r   sphinx.domains.cpp._idsr   sphinx.domains.cpp._parserr   sphinx.domains.cpp._symbolr   r   sphinx.errorsr   sphinx.localer   r   sphinx.rolesr   sphinx.transformsr   !sphinx.transforms.post_transformsr   sphinx.utilr   sphinx.util.cfamilyr   r   r   sphinx.util.docfieldsr   r    sphinx.util.docutilsr!   r"   sphinx.util.nodesr#   collections.abcr$   r%   docutils.nodesr&   r'   r(   r)   sphinx.addnodesr*   r+   sphinx.applicationr,   sphinx.buildersr-   r.   sphinx.environmentr/   sphinx.util.typingr0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   rL   rM   rN   rO   rP   rQ   rR   rS   rT   rU   rV   rW   rX   rY   rZ   r[   r\   r]   r^   r_   r`   ra   rb   rc   rd   re   rf   rg   rh   ri   rj   rk   rl   rm   rn   ro   rp   rq   rr   rs   rt   ru   rv   rw   rx   ry   rz   r{   r|   r}   r~   r   r   r   r   r   r   r   r   r   r   	getLoggerr6  r   r   r   r?  rC  rD  rF  rY  r\  r^  r_  r`  rp  rt  rv  r~  r  r  r  r  r5  r   r   r   r   <module>   sx    f 
Z
  
$  .!  A