o
    Ni@                     @  s  U d Z ddlm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 erTdd	lmZmZ dd
lmZmZ ddlmZ ddlmZ eegef Zded< eeZedZedZejdej dZ!edZ"edZ#edZ$edZ%ejdej dZ&ejdej dZ'edZ(ejdej dZ)d;dd Z*G d!d" d"e+Z,G d#d$ d$Z-G d%d& d&e-Z.G d'd( d(e.Z/G d)d* d*e-Z0G d+d, d,e.Z1G d-d. d.e.Z2G d/d0 d0e.Z3G d1d2 d2e-Z4G d3d4 d4e-Z5G d5d6 d6e+Z6G d7d8 d8e+Z7G d9d: d:Z8dS )<z2Utility functions common to the C and C++ domains.    )annotationsNdeepcopy)TYPE_CHECKING)nodes)addnodes)logging)CallableSequence)Any	TypeAlias)TextElement)Configr   StringifyTransformz\s+z(@[a-zA-Z0-9_])[a-zA-Z0-9_]*\ba  
    (   # This 'extends' _anon_identifier_re with the ordinary identifiers,
        # make sure they are in sync.
        (~?\b[a-zA-Z_])  # ordinary identifiers
    |   (@[a-zA-Z0-9_])  # our extension for names of anonymous entities
    )
    [a-zA-Z0-9_]*\b
)flagsz[1-9][0-9]*(\'[0-9]+)*z0[0-7]*(\'[0-7]+)*z"0[xX][0-9a-fA-F]+(\'[0-9a-fA-F]+)*z0[bB][01]+(\'[01]+)*a!  
    # unsigned and/or (long) long, in any order, but at least one of them
    (
        ([uU]    ([lL]  |  (ll)  |  (LL))?)
        |
        (([lL]  |  (ll)  |  (LL))    [uU]?)
    )\b
    # the ending word boundary is important for distinguishing
    # between suffixes and UDLs in C++
a
  
    [+-]?(
    # decimal
      ([0-9]+(\'[0-9]+)*[eE][+-]?[0-9]+(\'[0-9]+)*)
    | (([0-9]+(\'[0-9]+)*)?\.[0-9]+(\'[0-9]+)*([eE][+-]?[0-9]+(\'[0-9]+)*)?)
    | ([0-9]+(\'[0-9]+)*\.([eE][+-]?[0-9]+(\'[0-9]+)*)?)
    # hex
    | (0[xX][0-9a-fA-F]+(\'[0-9a-fA-F]+)*[pP][+-]?[0-9a-fA-F]+(\'[0-9a-fA-F]+)*)
    | (0[xX]([0-9a-fA-F]+(\'[0-9a-fA-F]+)*)?\.
        [0-9a-fA-F]+(\'[0-9a-fA-F]+)*([pP][+-]?[0-9a-fA-F]+(\'[0-9a-fA-F]+)*)?)
    | (0[xX][0-9a-fA-F]+(\'[0-9a-fA-F]+)*\.([pP][+-]?[0-9a-fA-F]+(\'[0-9a-fA-F]+)*)?)
    )
z[fFlL]\bz
    ((?:u8)|u|U|L)?
    '(
      (?:[^\\'])
    | (\\(
        (?:['"?\\abfnrtv])
      | (?:[0-7]{1,3})
      | (?:x[0-9a-fA-F]{2})
      | (?:u[0-9a-fA-F]{4})
      | (?:U[0-9a-fA-F]{8})
      ))
    )'
modestrreturnNonec                 C  s   | dvr
t d|  d S )N)
lastIsName
noneIsNamemarkTypemarkNameparamudlz!Description mode '%s' is invalid.)	Exception)r    r   G/home/ubuntu/.local/lib/python3.10/site-packages/sphinx/util/cfamily.pyverify_description_mode\   s   r   c                   @     e Zd ZdS )NoOldIdErrorN__name__
__module____qualname__r   r   r   r   r    a   s    r    c                   @  sH   e Zd ZdddZddd	ZdddZdddZdddZdddZdS )ASTBaseBaseotherobjectr   boolc                 C  s8   t | t |ur
tS z| j|jkW S  ty   Y dS w )NF)typeNotImplemented__dict__AttributeErrorselfr&   r   r   r   __eq__g   s   zASTBaseBase.__eq__r   c                 C  s   t | S Nr   r.   r   r   r   cloneo   s   zASTBaseBase.clone	transformr   r   c                 C     t t| r0   NotImplementedErrorreprr.   r3   r   r   r   
_stringifyr      zASTBaseBase._stringifyc                 C  
   |  tS r0   )r9   r   r1   r   r   r   __str__u      
zASTBaseBase.__str__c                 C  s   |  dd S )Nc                 S  s   |   S r0   )get_display_string)astr   r   r   <lambda>y   s    z0ASTBaseBase.get_display_string.<locals>.<lambda>)r9   r1   r   r   r   r>   x      zASTBaseBase.get_display_stringc                 C  s   d| j j d| t dS )N<z: >)	__class__r"   r9   r7   r1   r   r   r   __repr__{   s   zASTBaseBase.__repr__Nr&   r'   r   r(   )r   r   r3   r   r   r   r   r   )	r"   r#   r$   r/   r2   r9   r<   r>   rE   r   r   r   r   r%   f   s    




r%   c                   @  s   e Zd ZdddZdS )	ASTAttributesignoder   r   r   c                 C  r4   r0   r5   r.   rJ   r   r   r   describe_signature   r:   zASTAttribute.describe_signatureNrJ   r   r   r   )r"   r#   r$   rL   r   r   r   r   rI      s    rI   c                   @  s>   e Zd ZdddZdd
dZdddZdddZdddZdS )ASTCPPAttributeargr   r   r   c                 C  
   || _ d S r0   rO   )r.   rO   r   r   r   __init__   r=   zASTCPPAttribute.__init__r&   r'   r(   c                 C     t |tstS | j|jkS r0   )
isinstancerN   r*   rO   r-   r   r   r   r/         
zASTCPPAttribute.__eq__intc                 C  
   t | jS r0   )hashrO   r1   r   r   r   __hash__   r=   zASTCPPAttribute.__hash__r3   r   c                 C  s   d| j  dS Nz[[z]]rQ   r8   r   r   r   r9      rA   zASTCPPAttribute._stringifyrJ   r   c                 C  s:   | tdd | t| j | tdd d S rZ   )appendr   desc_sig_punctuationr   TextrO   rK   r   r   r   rL      s   z"ASTCPPAttribute.describe_signatureN)rO   r   r   r   rF   r   rV   rG   rM   r"   r#   r$   rR   r/   rY   r9   rL   r   r   r   r   rN      s    



rN   c                   @  s4   e Zd ZdddZdddZdddZdddZdS )ASTGnuAttributenamer   argsASTBaseParenExprList | Noner   r   c                 C     || _ || _d S r0   )ra   rb   )r.   ra   rb   r   r   r   rR         
zASTGnuAttribute.__init__r&   r'   r(   c                 C  &   t |tstS | j|jko| j|jkS r0   )rT   r`   r*   ra   rb   r-   r   r   r   r/         
zASTGnuAttribute.__eq__rV   c                 C     t | j| jfS r0   )rX   ra   rb   r1   r   r   r   rY         zASTGnuAttribute.__hash__r3   r   c                 C  s   | j r| j|| j  S | jS r0   )rb   ra   r8   r   r   r   r9      s   zASTGnuAttribute._stringifyN)ra   r   rb   rc   r   r   rF   r^   rG   )r"   r#   r$   rR   r/   rY   r9   r   r   r   r   r`      s
    


r`   c                   @  s>   e Zd ZdddZdd
dZdddZdddZdddZdS )ASTGnuAttributeListattrslist[ASTGnuAttribute]r   r   c                 C  rP   r0   rk   r.   rk   r   r   r   rR      r=   zASTGnuAttributeList.__init__r&   r'   r(   c                 C  rS   r0   )rT   rj   r*   rk   r-   r   r   r   r/      rU   zASTGnuAttributeList.__eq__rV   c                 C  rW   r0   rX   rk   r1   r   r   r   rY      r=   zASTGnuAttributeList.__hash__r3   r   r   c                 C  s   d t|| j}d| dS )Nz, z__attribute__((z))joinmaprk   )r.   r3   rk   r   r   r   r9      s   zASTGnuAttributeList._stringifyrJ   r   c                 C     | tt|  d S r0   r[   r   r]   r   rK   r   r   r   rL         z&ASTGnuAttributeList.describe_signatureN)rk   rl   r   r   rF   r^   rG   rM   r_   r   r   r   r   rj      s    



rj   c                   @  sB   e Zd ZdZdddZdddZdddZdddZdddZdS )ASTIdAttributez*For simple attributes defined by the user.idr   r   r   c                 C  rP   r0   rw   )r.   rw   r   r   r   rR      r=   zASTIdAttribute.__init__r&   r'   r(   c                 C  rS   r0   )rT   rv   r*   rw   r-   r   r   r   r/      rU   zASTIdAttribute.__eq__rV   c                 C  rW   r0   )rX   rw   r1   r   r   r   rY      r=   zASTIdAttribute.__hash__r3   r   c                 C  s   | j S r0   rx   r8   r   r   r   r9      s   zASTIdAttribute._stringifyrJ   r   c                 C  s   | t| j d S r0   )r[   r   r]   rw   rK   r   r   r   rL      s   z!ASTIdAttribute.describe_signatureN)rw   r   r   r   rF   r^   rG   rM   	r"   r#   r$   __doc__rR   r/   rY   r9   rL   r   r   r   r   rv      s    



rv   c                   @  sB   e Zd ZdZdddZdddZdddZdddZdddZdS )ASTParenAttributez)For paren attributes defined by the user.rw   r   rO   r   r   c                 C  rd   r0   rw   rO   )r.   rw   rO   r   r   r   rR      re   zASTParenAttribute.__init__r&   r'   r(   c                 C  rf   r0   )rT   r{   r*   rw   rO   r-   r   r   r   r/      rg   zASTParenAttribute.__eq__rV   c                 C  rh   r0   )rX   rw   rO   r1   r   r   r   rY      ri   zASTParenAttribute.__hash__r3   r   c                 C  s   | j  d| j dS )N()r|   r8   r   r   r   r9         zASTParenAttribute._stringifyrJ   r   c                 C  rs   r0   rt   rK   r   r   r   rL      ru   z$ASTParenAttribute.describe_signatureN)rw   r   rO   r   r   r   rF   r^   rG   rM   ry   r   r   r   r   r{      s    



r{   c                   @  sR   e Zd ZdddZdd
dZdddZdddZd ddZd!ddZd"ddZ	dS )#ASTAttributeListrk   list[ASTAttribute]r   r   c                 C  rP   r0   rm   rn   r   r   r   rR      r=   zASTAttributeList.__init__r&   r'   r(   c                 C  rS   r0   )rT   r   r*   rk   r-   r   r   r   r/      rU   zASTAttributeList.__eq__rV   c                 C  rW   r0   ro   r1   r   r   r   rY      r=   zASTAttributeList.__hash__c                 C  rW   r0   )lenrk   r1   r   r   r   __len__   r=   zASTAttributeList.__len__c                 C  s   t | j|j S r0   )r   rk   r-   r   r   r   __add__   ri   zASTAttributeList.__add__r3   r   r   c                 C  s   d t|| jS )N rp   r8   r   r   r   r9     s   zASTAttributeList._stringifyrJ   r   c                 C  sd   t | jdkr	d S | jd | t | jdkrd S | jdd  D ]}|t  || q!d S )Nr      )r   rk   rL   r[   r   desc_sig_space)r.   rJ   attrr   r   r   rL     s   z#ASTAttributeList.describe_signatureN)rk   r   r   r   rF   r^   )r&   r   r   r   rG   rM   )
r"   r#   r$   rR   r/   rY   r   r   r9   rL   r   r   r   r   r      s    





r   c                   @  r   )ASTBaseParenExprListNr!   r   r   r   r   r         r   c                   @  r   )$UnsupportedMultiCharacterCharLiteralNr!   r   r   r   r   r     r   r   c                   @  r   )DefinitionErrorNr!   r   r   r   r   r     r   r   c                   @  s  e Zd ZdKd	d
ZdLddZedMddZdNddZdNddZdNddZ	dOddZ
dPd d!ZdQd#d$ZdRd%d&ZdQd'd(ZdPd)d*ZedRd+d,ZedMd-d.ZedMd/d0ZdMd1d2Zd3d4dSd6d7ZedTd9d:ZedTd;d<ZdUd?d@ZdVdBdCZdWdEdFZdXdHdIZdJS )Y
BaseParser
definitionr   location"nodes.Node | tuple[str, int] | strconfigr   r   r   c                C  sD   |  | _|| _|| _d| _t| j| _d | _d| _g | _	d| _
d S )Nr   )r   NT)stripr   r   r   posr   end
last_match_previous_stateotherErrorsallowFallbackExpressionParsing)r.   r   r   r   r   r   r   rR   #  s   

zBaseParser.__init__errors	list[Any]headerr   c                 C  s   t |dkr$t |dkrt|d t|d d  S tt|d d S |dg}|D ]:}t |d dkr[d}||d df t|d dD ]}t |dkrQqH|||df qHq*|t|d  q*td|S )Nr   r   
z  z:
 )r   r   r   extendsplitr[   rq   )r.   r   r   resulteindentliner   r   r   _make_multi_error7  s    zBaseParser._make_multi_errorc                 C     t r0   r6   r1   r   r   r   languageJ     zBaseParser.languagemsgc                 C  s.   d| j  d }t| d| j d|  d S )N-^r   )r   loggerdebugr   )r.   r   	indicatorr   r   r   statusN  s    zBaseParser.statusc              
   C  sx   g }d| j  d }d| j d| d| j  d| j d| 
}t|}||df |d	d
 | jD  g | _| |d)Nr   r   zInvalid z declaration: z [error at z]
  z
  z
Main errorc                 s  s    | ]}|d fV  qdS )zPotential other errorNr   ).0errr   r   r   	<genexpr>]  s    z"BaseParser.fail.<locals>.<genexpr>r   )r   r   r   r   r[   r   r   r   )r.   r   r   r   exc_mainr   r   r   failS  s   zBaseParser.failc                 C  s   t j|| jd d S )N)r   )r   warningr   )r.   r   r   r   r   warna  r   zBaseParser.warnregexre.Pattern[str]r(   c                 C  s>   | | j| j}|d ur| j| jf| _| | _|| _dS dS NTF)matchr   r   r   r   r   )r.   r   r   r   r   r   r   d  s   
zBaseParser.matchstringc                 C  s8   t |}| j| j| j|  |kr|  j|7  _dS dS r   )r   r   r   )r.   r   strlenr   r   r   skip_stringm  s
   zBaseParser.skip_stringwordc                 C  s   |  tdt| S )Nz\b%s\b)r   recompileescaper.   r   r   r   r   	skip_wordt  s   zBaseParser.skip_wordc                 C  r;   r0   )r   _whitespace_rer1   r   r   r   skip_wsw  r=   zBaseParser.skip_wsc                 C     |  |r|   dS dS r   )r   r   r   r   r   r   skip_word_and_wsz     
zBaseParser.skip_word_and_wsc                 C  r   r   )r   r   )r.   r   r   r   r   skip_string_and_ws  r   zBaseParser.skip_string_and_wsc                 C  s   | j | jkS r0   )r   r   r1   r   r   r   eof  s   zBaseParser.eofc                 C  s$   z| j | j W S  ty   Y dS w )NEOF)r   r   
IndexErrorr1   r   r   r   current_char  s
   zBaseParser.current_charc                 C  s   | j d ur
| j  S dS )Nr   )r   groupr1   r   r   r   matched_text  s   

zBaseParser.matched_textc                 C  s   | j | jd  }| j| _|S r0   )r   r   r   )r.   rvr   r   r   	read_rest  s   zBaseParser.read_restF)allowSemicolonr   c                C  sT   |    |r| js| j| jd  dkr| d d S d S d S | js(| d d S d S )N;z Expected end of definition or ;.zExpected end of definition.)r   r   r   r   r   )r.   r   r   r   r   
assert_end  s   zBaseParser.assert_endSequence[str]c                 C  r   r0   r   r1   r   r   r   id_attributes  r   zBaseParser.id_attributesc                 C  r   r0   r   r1   r   r   r   paren_attributes  r   zBaseParser.paren_attributesr   	list[str]c                 C  s   dddd}| j }g }| jsQt|dkr| j|v rn7| j|v r(||| j  nt|dkr:| j|d kr:|  n| jdv rG| d| j  |  j d	7  _ | jr| jr]| d
| d | j|| j  S )Nr~   ]})r}   [{r   z)]}z&Unexpected '%s' in balanced-token-seq.r   z5Could not find end of balanced-token-seq starting at .)r   r   r   r   r[   popr   r   )r.   r   bracketsstartPossymbolsr   r   r   _parse_balanced_token_seq  s&   




z$BaseParser._parse_balanced_token_seqASTAttribute | Nonec                 C  s  |    | j}| dr4| ds|| _n| jdgd}| ds&| d | ds0| d t|S | dr| dsC| d | dsM| d	 g }	 | t	rd| j
}|  }|t|| | drjqO| drpn| d qP| ds| d t|S | jD ]}| |rt|  S q| jD ])}| |sq| ds| d | jdgd}| ds| d t||  S d S )Nr   r   )r   z!Expected ']' in end of attribute.z-Expected ']' in end of attribute after [[...]__attribute__r}   z#Expected '(' after '__attribute__'.z$Expected '(' after '__attribute__('.r   ,r~   z2Expected identifier, ')', or ',' in __attribute__.z(Expected ')' after '__attribute__((...)'z0Expected '(' after user-defined paren-attribute.z1Expected ')' to end user-defined paren-attribute.)r   r   r   r   r   r   rN   r   r   identifier_rer   _parse_paren_expression_listr[   r`   rj   r   rv   r   r{   )r.   r   rO   rk   ra   exprsrw   r   r   r   _parse_attribute  sZ   

























zBaseParser._parse_attributer   c                 C  s,   g }	 |   }|d u r	 t|S || qr0   )r   r[   r   )r.   resr   r   r   r   _parse_attribute_list  s   
z BaseParser._parse_attribute_listrc   c                 C  r   r0   r   r1   r   r   r   r     s   z'BaseParser._parse_paren_expression_listN)r   r   r   r   r   r   r   r   )r   r   r   r   r   r   rH   )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   rc   )r"   r#   r$   rR   r   propertyr   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   "  s<    






	







7	r   )r   r   r   r   )9rz   
__future__r   r   copyr   typingr   docutilsr   sphinxr   sphinx.utilr   collections.abcr	   r
   r   r   docutils.nodesr   sphinx.configr   r   r   __annotations__	getLoggerr"   r   r   r   anon_identifier_reVERBOSEr   integer_literal_reoctal_literal_rehex_literal_rebinary_literal_reintegers_literal_suffix_refloat_literal_refloat_literal_suffix_rechar_literal_rer   r   r    r%   rI   rN   r`   rj   rv   r{   r   r   r   r   r   r   r   r   r   <module>   sh    









#