U
    lufF                     @   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-2023 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Z
d	Zd
e
 de 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jeefdefdefdefe
ejfe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d0e e ej"fd1e#fd2efd3ej$feefge%d4d5d6d7e&j'fe%d8d6d9e&j(fgd:ee&ed;fd<e&d=fe%d>d6d9e&fe%d?d6d9e&j'fd@e&j'fe%dAd5d6d7e&j'fgedBeddCe	 dD e dE e	 dE e dF e dG eeeeedBdHej)eedBdHeeeedBdHeeedIfdCe	 dD e dE e	 dE e dF e dJ eeeeedBdHej)eedBdHeeeedBdHeeefede*dKgedBedLdMefdNedOfgedBedLdPefdQedRfdMedOfgdSedOfdTej+fdUefdefdVefgdCe dW e dX eeeejeeej,ejfdCe dW e dY eeeejeeej,ejfdZejfd[ejfd\ejdOfd]ejfd^ejfdejdOfgd_ejdRfd`ejdOfdaejdOfdbefgeej-dOfdcedOfe*dOgddedOfeej.fedBedLgdeZ/dfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxhZ0dydzd{d|d}d~ddddddddddddddddddddddhZ1ddddddddddddddddddddhZ2dddddddddddddddddddddddddddddddddddddh%Z3ddτ Z4ddd҄Z5dS )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//(?:.|(?<=\\)\n)*\nz5/(?:\\\n)?[*](?:[^*]|[*](?!(?:\\\n)?/))*[*](?:\\\n)?/z\s*(?:(?:(?:z)|(?:z))\s*)*z^#if\s+0if0z^#macroz^(z
)(#if\s+0)z)(#)z4(^[ \t]*)(?!(?:public|private|protected|default)\b)(z)(\s*)(:)(?!:)z\nz[^\S\n]+z\\\nz/(\\\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intlongfloatshortdoublecharZunsignedsignedvoidZ_BitIntZ__int128r"   z(struct|union)(\s+)	classnamezcase\b
case-value)asmautobreakconstcontinuer   ZdoelseenumexternforgotoifregisterZ
restrictedreturnsizeofstructZstaticswitchZtypedefZvolatilewhileunionZthread_localZalignasZalignofZstatic_assertZ_Pragma)inlineZ_inlineZ__inlineZnakedZrestrictthreadz(__m(128i|128d|128|64))\b)r/   ZbasedexceptZstdcallZcdeclZfastcallZdeclspecfinallytryZleaveZw64Z	unalignedraiseZnoop
identifierZforceinlineZassume
whitespace(z(?:[&*\s])+)(z)(z)(\([^;"\')]*?\))(z)([^;{/"\']*)(\{))statefunctionz)([^;/"\']*)(;)	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*(?=>)z(?<!:)(:)(?!:))rH   rM   r   r   rootrL   rK   r   r   r   r-   r.   Zsize_tZssize_tZoff_tr   Z	ptrdiff_tZsig_atomic_tZfpos_tZclock_tZtime_tZva_listZjmp_bufFILEZDIRZdiv_tZldiv_tZ	mbstate_tZ	wctrans_tZwint_tZwctype_tZint8_tZint16_tZint32_tZint64_tZuint8_tZuint16_tZuint32_tZuint64_tZint_least8_tZint_least16_tZint_least32_tZint_least64_tZuint_least8_tZuint_least16_tZuint_least32_tZuint_least64_tZint_fast8_tZint_fast16_tZint_fast32_tZint_fast64_tZuint_fast8_tZuint_fast16_tZuint_fast32_tZuint_fast64_tZintptr_tZ	uintptr_tZintmax_tZ	uintmax_tZ	clockid_tZ	cpu_set_tZ	cpumask_tZdev_tZgid_tZid_tZino_tZkey_tZmode_tZnfds_tZpid_tZrlim_tZsig_tZsighandler_tZ	siginfo_tZsigset_tZsigval_tZ	socklen_tZtimer_tZuid_tZatomic_boolZatomic_charZatomic_scharZatomic_ucharZatomic_shortZatomic_ushortZ
atomic_intZatomic_uintZatomic_longZatomic_ulongZatomic_llongZatomic_ullongZatomic_char16_tZatomic_char32_tZatomic_wchar_tZatomic_int_least8_tZatomic_uint_least8_tZatomic_int_least16_tZatomic_uint_least16_tZatomic_int_least32_tZatomic_uint_least32_tZatomic_int_least64_tZatomic_uint_least64_tZatomic_int_fast8_tZatomic_uint_fast8_tZatomic_int_fast16_tZatomic_uint_fast16_tZatomic_int_fast32_tZatomic_uint_fast32_tZatomic_int_fast64_tZatomic_uint_fast64_tZatomic_intptr_tZatomic_uintptr_tZatomic_size_tZatomic_ptrdiff_tZatomic_intmax_tZatomic_uintmax_tc                 K   sJ   t |dd| _t |dd| _t |dd| _t |dd| _tj| f| d S )NstdlibhighlightingTc99highlightingc11highlightingplatformhighlighting)r
   rU   rV   rW   rX   r   __init__)selfoptions r\   9/tmp/pip-unpacked-wheel-7eq1ciah/pygments/lexers/c_cpp.pyrY      s
    zCFamilyLexer.__init__rS   c                 c   s   t | ||D ]|\}}}|tkr~| jr8|| jkr8tj}nF| jrP|| jkrPtj}n.| j	rh|| j
krhtj}n| jr~|| jkr~tj}|||fV  qd S )N)r   get_tokens_unprocessedr   rU   stdlib_typesr   TyperV   	c99_typesrW   c11_atomic_typesrX   linux_types)rZ   textstackindextokenvaluer\   r\   r]   r_      s    z#CFamilyLexer.get_tokens_unprocessedN)r^   )6__name__
__module____qualname____doc__Z_ws1Z_hexpartZ_decpartZ
_intsuffix_identZ_namespaced_identZ_comment_singleZ_comment_multilineZ_possible_commentsr   ZPreprocr   r   r   r   r   ZLabelr   r   SingleZ	Multiliner   r   AffixCharr   ZFloatZHexZBinOctZIntegerr   ZBuiltinr	   r   Reservedra   ZFunctionr   ZEscapeZPreprocFileClassConstanttokensr`   rb   rd   rc   rY   r_   r\   r\   r\   r]   r      s  


 
  
 
 
 
 
 
  	  





  '                                                                                  r   c                   @   sj   e Zd ZdZdZdgZddddgZdd	d
dg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cz*.cz*.hz*.idcz*.x[bp]mz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 [<"]ry   z^\s*#ifn?def )research	MULTILINEre   r\   r\   r]   analyse_text9  s    zCLexer.analyse_textN)rj   rk   rl   rm   namealiases	filenames	mimetypespriorityr	   r   r   ra   rv   r   r\   r\   r\   r]   r     s$   c                   @   s,  e Zd ZdZdZdZddgZdddd	d
ddddddddg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d0S )1r   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https://isocpp.org/cppzc++z*.cppz*.hppz*.c++z*.h++z*.ccz*.hhz*.cxxz*.hxxz*.Cz*.Hz*.cpz*.CPPz*.tppztext/x-c++hdrztext/x-c++srcry   z<((?:[LuU]|u8)?R)(")([^\\()\s]{,16})(\()((?:.|\n)*?)(\)\3)("))Zvirtual_inheritanceZuuidofsuperZsingle_inheritanceZmultiple_inheritanceZ	interfaceeventr   r   r    z#__(offload|blockingoffload|outer)\brH   )classr=   r,   rN   rR   z(class|concept|typename)(\s+)r-   )4ZcatchZ
const_castdeleteZdynamic_castexplicitexportZfriendZmutablenewoperatorprivateZ	protectedpublicZreinterpret_castr   Z
__restrictZstatic_casttemplater   throwZthrowsrE   Ztypeidr   ZvirtualZ	constexprZnullptrZconceptdecltypeZnoexceptoverridefinalZ	constinitZ	constevalZco_awaitZ	co_returnZco_yieldrequiresimportmoduletypenameandZand_eqZbitandZbitorZcomplnotZnot_eqorZor_eqxorZxor_eqznamespace\b	namespacez(enum)(\s+)enumnamezchar(16_t|32_t|8_t)\bz[;{])rN   rS   zinline\brL   )rM   rS   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?)r{   r|   r~   r\   r\   r]   r     s    zCppLexer.analyse_textN) rj   rk   rl   rm   r   urlr   r   r   r   r   r   rp   Z	Delimiterr   r	   r   rs   ZPseudor   r   rn   r   rt   r   r   r   ra   r   	Namespacerv   r   r\   r\   r\   r]   r   @  sz             




7)rm   r{   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   r\   r\   r\   r]   <module>   s   
(, y2