a
    ;@b>                     @   s   d Z ddlZddlmZmZmZmZmZmZm	Z	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 ddgZG dd	 d	eZG d
d deZG dd deZdS )z
    pygments.lexers.c_cpp
    ~~~~~~~~~~~~~~~~~~~~~

    Lexers for C/C++ languages.

    :copyright: Copyright 2006-2021 by the Pygments team, see AUTHORS.
    :license: BSD, see LICENSE for details.
    N)
RegexLexerincludebygroupsusingthisinheritdefaultwords)get_bool_opt)	TextCommentOperatorKeywordNameStringNumberPunctuation
WhitespaceCLexerCppLexerc                   @   s(  e Zd ZdZdZdZdZdZdZdZ	de
jd	fd
e
jdfde d eeee
jd	fde d eeee
jdfde d eeeeejeefdefdefdefde
jfde
jfde
jfgededdeejedfdeejejejejfde d e d e d e d  e d! ejfd"e d e d e d e d# e d$ ejfd%e d& e d' e d( e d) ejfd*e e ejfd+e ejfd,e ejfd-e e ejfd.e fd/efd0ej!feefge"d1d2d3d4e#j$fe"d5d3d6e#j%fgd7ee#ed8fe"d9d3d6e#fe"d:d3d6e#j$fd;e#j$fe"d<d2d3d4e#j$fged=edd>e	 d? e	 d@ eeeej&eeeeedAfd>e	 d? e	 dB eeeej&eeeeefede'dCged=edDdEefdFedGfged=edDdHefdIedJfdEedGfgdKedGfdLej(fdMefdefdNefgd>e dO e dP eeee
jeee
j)e
jfd>e dO e dQ eeee
jeee
j)e
jfdRe
jfdSe
jfdTe
jdGfdUe
jfdVe
jfde
jdGfgdWe
jdJfdXe
jdGfdYe
jdGfdZe
fgeej*dGfd[edGfe'dGgd\Z+h d]Z,h d^Z-h d_Z.h d`Z/dadb Z0dcdd Z1deS )fCFamilyLexerzg
    For C family source code.  This is used as a base class to avoid repetitious
    definitions.
    z\s*(?:/[*].*?[*]/\s*)?z[0-9a-fA-F](\'?[0-9a-fA-F])*z
\d(\'?\d)*z!(([uU][lL]{0,2})|[lL]{1,2}[uU]?)?z4(?!\d)(?:[\w$]|\\u[0-9a-fA-F]{4}|\\U[0-9a-fA-F]{8})+z7(?!\d)(?:[\w$]|\\u[0-9a-fA-F]{4}|\\U[0-9a-fA-F]{8}|::)+z^#if\s+0if0z^#macroz^(z
)(#if\s+0)z)(#)z@(^[ \t]*)(?!(?:public|private|protected|default)\b)(case\b\s+)?(z)(\s*)(:)(?!:)z\nz[^\S\n]+z\\\nz//(\n|[\w\W]*?[^\\]\n)z/(\\\n)?[*][\w\W]*?[*](\\\n)?/z/(\\\n)?[*][\w\W]*keywordstypesz([LuU]|u8)?(")stringzA([LuU]|u8)?(')(\\.|\\[0-7]{1,3}|\\x[a-fA-F0-9]{1,2}|[^\\\'\n])(')z0[xX](z\.z|\.|z
)[pP][+-]?z[lL]?z(-)?(z
)[eE][+-]?z[fFlL]?z(-)?((z\.(z)?|\.z)[fFlL]?)|(z[fFlL])z	(-)?0[xX]z(-)?0[bB][01](\'?[01])*z(-)?0(\'?[0-7])+z(-)?z[~!%^&*+=|?:<>/-]z
[()\[\],.]z(true|false|NULL)\b)Zint8Zint16Zint32Zint64wchar_t__\bprefixsuffix)
boolintZlongfloatZshortZdoublecharZunsignedZsignedZvoidr"   z(struct|union)(\s+)	classname)asmautobreakZcaseconstcontinuer   ZdoelseenumZexternforZgotoifregisterZ
restrictedreturnZsizeofstructZstaticZswitchZtypedefZvolatilewhileunionZthread_localZalignasZalignofZstatic_assertZ_Pragma)ZinlineZ_inlineZ__inlineZnakedrestrictthreadz(__m(128i|128d|128|64))\b)r)   ZbasedexceptZstdcallZcdeclZfastcallZdeclspecfinallytryZleaveZw64Z	unalignedraiseZnoopZ
identifierZforceinlineZassume
whitespace(z(?:[&*\s])+)(z)(\s*\([^;]*?\))([^;{]*)(\{)functionz)(\s*\([^;]*?\))([^;]*)(;)	statement
statementsz\}z[{;]#pop;z\{z#push"zO\\([\\abfnrtv"\']|x[a-fA-F0-9]{2,4}|u[a-fA-F0-9]{4}|U[a-fA-F0-9]{8}|[0-7]{1,3})z	[^\\"\n]+z\\z)(include)(z)("[^"]+")([^\n]*)z)(<[^>]+>)([^\n]*)z[^/\n]+z/[*](.|\n)*?[*]/z//.*?\n/z	(?<=\\)\nz^\s*#if.*?(?<!\\)\nz^\s*#el(?:se|if).*\nz^\s*#endif.*?(?<!\\)\nz.*?\n\s*(?=>))r=   rA   r   r   rootr@   r?   r   r   r   r(   >   Z	ptrdiff_tZfpos_tr   Z	wctrans_tDIRZjmp_bufZwctype_tZdiv_tZtime_tZldiv_tZwint_tZclock_tZssize_tZva_listZ	mbstate_tFILEZsize_tZoff_tZsig_atomic_t>   Zuint_least32_tZuint_fast16_tZint16_tZint_fast8_tZint_least8_tZintptr_tZint_least64_tZint_fast32_tZuint_least16_tZuint16_tZuint_least8_tZuint64_tZint_least32_tZint_fast16_tZint8_tZuint_fast32_tZint_least16_tZuint8_tZint32_tZuint32_tZuint_least64_tZint64_tZuint_fast64_tZuint_fast8_tZ	uintmax_tZintmax_tZ	uintptr_tZint_fast64_t>   Z	clockid_tZ	cpu_set_tZtimer_tZ	cpumask_tZsighandler_tZdev_tZgid_tZ	siginfo_tZmode_tZrlim_tZ	socklen_tZino_tZsig_tZuid_tZpid_tZsigval_tZid_tZnfds_tZsigset_tZkey_t>%   Zatomic_boolZatomic_uint_least64_tZatomic_charZatomic_uint_fast32_tZatomic_uintptr_tZatomic_uint_fast8_tZatomic_int_fast16_tZatomic_ulongZatomic_char32_tZatomic_char16_tZatomic_int_least64_tZatomic_uintZatomic_llongZatomic_int_least32_tZatomic_int_least16_tZatomic_intptr_tZatomic_uint_least8_tZatomic_uint_fast16_tZatomic_ptrdiff_tZatomic_size_tZatomic_uint_fast64_tZatomic_int_fast32_tZatomic_intmax_tZatomic_uint_least16_tZatomic_uint_least32_tZatomic_scharZatomic_wchar_tZatomic_int_least8_tZatomic_int_fast64_tZatomic_ucharZatomic_shortZatomic_ullongZatomic_int_fast8_tZatomic_longZatomic_uintmax_tZatomic_ushortZ
atomic_intc                 K   sN   t |dd| _t |dd| _t |dd| _t |dd| _tj| fi | d S )NstdlibhighlightingTc99highlightingc11highlightingplatformhighlighting)r
   rJ   rK   rL   rM   r   __init__)selfoptions rQ   4lib/python3.9/site-packages/pygments/lexers/c_cpp.pyrN      s
    zCFamilyLexer.__init__c                 c   s   t | |D ]|\}}}|tu r|| jr6|| jv r6tj}nF| jrN|| jv rNtj}n.| j	rf|| j
v rftj}n| jr||| jv r|tj}|||fV  qd S )N)r   get_tokens_unprocessedr   rJ   stdlib_typesr   TyperK   	c99_typesrL   c11_atomic_typesrM   linux_types)rO   textindextokenvaluerQ   rQ   rR   rS      s    
z#CFamilyLexer.get_tokens_unprocessedN)2__name__
__module____qualname____doc__Z_ws1Z_hexpartZ_decpartZ
_intsuffix_identZ_namespaced_identr   ZPreprocr   r   r   r   r   ZLabelr   r   SingleZ	Multiliner   r   AffixZCharr   ZFloatZHexZBinZOctZIntegerr   ZBuiltinr	   r   ReservedrU   ZFunctionr   ZEscapeZPreprocFileClasstokensrT   rV   rX   rW   rN   rS   rQ   rQ   rQ   rR   r      s"  




00(

	





 r   c                   @   sb   e Zd ZdZdZdgZg dZg dZdZe	ddd	e
fege	d
dd	e
jfegdZdd ZdS )r   a  
    For C source code with preprocessor directives.

    Additional options accepted:

    `stdlibhighlighting`
        Highlight common types found in the C/C++ standard library (e.g. `size_t`).
        (default: ``True``).

    `c99highlighting`
        Highlight common types found in the C99 standard library (e.g. `int8_t`).
        Actually, this includes all fixed-width integer types.
        (default: ``True``).

    `c11highlighting`
        Highlight atomic types found in the C11 standard library (e.g. `atomic_bool`).
        (default: ``True``).

    `platformhighlighting`
        Highlight common types found in the platform SDK headers (e.g. `clockid_t` on Linux).
        (default: ``True``).
    Cc)z*.cz*.hz*.idcz*.x[bp]m)ztext/x-chdrztext/x-csrczimage/x-xbitmapzimage/x-xpixmap皙?)
Z_AlignasZ_AlignofZ	_NoreturnZ_GenericZ_Thread_localZ_Static_assertZ
_ImaginaryZnoreturnZ	imaginarycomplexr   r'   )Z_BoolZ_ComplexZ_Atomic)r   r   c                 C   s,   t d| t jrdS t d| t jr(dS d S )Nz^\s*#include [<"]ri   z^\s*#ifn?def )research	MULTILINErY   rQ   rQ   rR   analyse_text  s    zCLexer.analyse_textN)r]   r^   r_   r`   namealiases	filenames	mimetypespriorityr	   r   r   rU   rf   ro   rQ   rQ   rQ   rR   r      s$   c                
   @   s  e Zd ZdZdZddgZg dZddgZdZd	e	e
je
e
je
je
e
je
fegeed
dddejfdejfgededddefejejdfdedfedgde	eedfedddefdedfde	eedfegdejfegdedfdejfejejfedgd Zd!d" Zd#S )$r   a  
    For C++ source code with preprocessor directives.

    Additional options accepted:

    `stdlibhighlighting`
        Highlight common types found in the C/C++ standard library (e.g. `size_t`).
        (default: ``True``).

    `c99highlighting`
        Highlight common types found in the C99 standard library (e.g. `int8_t`).
        Actually, this includes all fixed-width integer types.
        (default: ``True``).

    `c11highlighting`
        Highlight atomic types found in the C11 standard library (e.g. `atomic_bool`).
        (default: ``True``).

    `platformhighlighting`
        Highlight common types found in the platform SDK headers (e.g. `clockid_t` on Linux).
        (default: ``True``).
    zC++Zcppzc++)z*.cppz*.hppz*.c++z*.h++z*.ccz*.hhz*.cxxz*.hxxz*.Cz*.Hz*.cpz*.CPPztext/x-c++hdrztext/x-c++srcri   z<((?:[LuU]|u8)?R)(")([^\\()\s]{,16})(\()((?:.|\n)*?)(\)\3)("))Zvirtual_inheritanceZuuidofsuperZsingle_inheritanceZmultiple_inheritanceZ	interfaceZeventr   r   r    z#__(offload|blockingoffload|outer)\br=   )classr4   r'   rB   rF   z(class|concept|typename)(\s+)r(   ))ZcatchZ
const_castdeleteZdynamic_castZexplicitZexportZfriendZmutablenewoperatorZprivateZ	protectedZpublicZreinterpret_castrv   r7   Zstatic_casttemplater   throwZthrowsr;   Ztypeidr   ZvirtualZ	constexprZnullptrZconceptZdecltypeZnoexceptoverridefinalZ	constinitZ	constevalZco_awaitZ	co_returnZco_yieldZrequiresimportmoduletypenameznamespace\b	namespacez(enum)(\s+)enumnamezchar(16_t|32_t|8_t)\bz[;{])rB   rG   zinline\br@   )rA   rG   r   r   r   r   c                 C   s$   t d| rdS t d| r dS d S )Nz#include <[a-z_]+>g?zusing namespace g?)rk   rl   rn   rQ   rQ   rR   ro   l  s    zCppLexer.analyse_textN)r]   r^   r_   r`   rp   rq   rr   rs   rt   r   r   rc   Z	Delimiterr   r	   r   rd   ZPseudor   r   ra   r   re   r   r   r   rU   r   	Namespacerf   ro   rQ   rQ   rQ   rR   r     s^   

		

6)r`   rk   Zpygments.lexerr   r   r   r   r   r   r   r	   Zpygments.utilr
   Zpygments.tokenr   r   r   r   r   r   r   r   r   __all__r   r   r   rQ   rQ   rQ   rR   <module>   s   
(, P2