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-2017 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ErrorCLexerCppLexerc               @   s  e 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fdefdefdejfdejfdejfg
deejedfdeejejejejfdejfdejfdejfdejfdejfdefdefdefedddefdejfed ddejfd!ejfed"d#dd$ejfd%ejfd&eejeefd'efge d(d)ee	e
ej!e	e
e	e
ed*fd+ee	e
ej!e	e
e	e
efe"d,ge d(e d-d.efd/ed0fge d(e d-d/efd1ed2fd3ed0fgd4ed0fd5ej#fd6efdefd7efgd8e d9 eejeej$fd:ejfd;ejfd<ejd0fd=ejfd>ejfdejd0fgd?ejd2fd@ejd0fdAejd0fdBefgdCZ%e&dDZ'e&dEZ(e&dFZ)dGdH Z*dIdJ Z+dKS )LCFamilyLexerzg
    For C family source code.  This is used as a base class to avoid repetitious
    definitions.
    z(?:\s|//.*?\n|/[*].*?[*]/)+z\s*(?:/[*].*?[*]/\s*)?z^#if\s+0if0z^#macroz^(z
)(#if\s+0)z)(#)z\nz\s+z\\\nz//(\n|[\w\W]*?[^\\]\n)z/(\\\n)?[*][\w\W]*?[*](\\\n)?/z/(\\\n)?[*][\w\W]*z(L?)(")stringz:(L?)(')(\\.|\\[0-7]{1,3}|\\x[a-fA-F0-9]{1,2}|[^\\\'\n])(')z'(\d+\.\d*|\.\d+|\d+)[eE][+-]?\d+[LlUu]*z(\d+\.\d*|\.\d+|\d+[fF])[fF]?z0x[0-9a-fA-F]+[LlUu]*z0[0-7]+[LlUu]*z
\d+[LlUu]*z\*/z[~!%^&*+=|?:<>/-]z
[()\[\],.])asmautobreakZcaseZconstcontinuer   ZdoelseenumZexternforZgotoifregisterZ
restrictedreturnZsizeofZstaticZstructZswitchZtypedefunionZvolatilewhilez\b)suffixz>(bool|int|long|float|short|double|char|unsigned|signed|void)\b)ZinlineZ_inlineZ__inlineZnakedrestrictZthreadtypenamez(__m(128i|128d|128|64))\b)r   Zint8ZbasedexceptZint16ZstdcallZcdeclZfastcallZint32ZdeclspecfinallyZint64tryZleavewchar_tZw64Z	unalignedraiseZnoopZ
identifierZforceinlineZassume__)prefixr&   z(true|false|NULL)\bz([a-zA-Z_]\w*)(\s*)(:)(?!:)z[a-zA-Z_]\w*
whitespacezB((?:[\w*\s])+?(?:\s|[*]))([a-zA-Z_]\w*)(\s*\([^;]*?\))([^;{]*)(\{)functionz@((?:[\w*\s])+?(?:\s|[*]))([a-zA-Z_]\w*)(\s*\([^;]*?\))([^;]*)(;)	statement
statementsz[{}];z#popz\{z#pushz\}"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	(?<=\\)\nz^\s*#if.*?(?<!\\)\nz^\s*#el(?:se|if).*\nz^\s*#endif.*?(?<!\\)\nz.*?\n)r0   r3   rootr2   r1   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_bufZFILEZDIRZdiv_tZldiv_tZ	mbstate_tZ	wctrans_tZwint_tZwctype_t)Z_BoolZ_ComplexZ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_t)Z	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_tc             K   s<   t |dd| _t |dd| _t |dd| _tj| f| d S )NstdlibhighlightingTc99highlightingplatformhighlighting)r
   r8   r9   r:   r   __init__)selfZoptions r=   4lib/python3.7/site-packages/pygments/lexers/c_cpp.pyr;      s    zCFamilyLexer.__init__c             c   sz   xtt | |D ]d\}}}|tkrf| jr8|| jkr8tj}n.| jrP|| jkrPtj}n| j	rf|| j
krftj}|||fV  qW d S )N)r   get_tokens_unprocessedr   r8   stdlib_typesr   Typer9   	c99_typesr:   linux_types)r<   textindextokenvaluer=   r=   r>   r?      s    z#CFamilyLexer.get_tokens_unprocessedN),__name__
__module____qualname____doc__Z_wsZ_ws1r   ZPreprocr   r   r   r   SingleZ	Multiliner   AffixZCharr   ZFloatZHexZOctZIntegerr   r   r   r	   r   rA   Reservedr   ZBuiltinZLabelr   ZFunctionr   ZEscapeZPreprocFiletokenssetr@   rB   rC   r;   r?   r=   r=   r=   r>   r      s   












r   c               @   s8   e Zd ZdZdZdgZdddgZddgZd	Zd
d Z	dS )r   z9
    For C source code with preprocessor directives.
    Ccz*.cz*.hz*.idcztext/x-chdrztext/x-csrcg?c             C   s,   t d| t jrdS t d| t jr(dS d S )Nz^\s*#include [<"]g?z^\s*#ifn?def )research	MULTILINE)rD   r=   r=   r>   analyse_text   s    zCLexer.analyse_textN)
rH   rI   rJ   rK   namealiases	filenames	mimetypespriorityrV   r=   r=   r=   r>   r      s   
c               @   s   e Zd ZdZdZddgZddddd	d
ddddddgZddgZdZe	ddde
fde
jfdee
edfdeejeejejeejefdeejedfegee	dddde
jfd e
jfgd!ejd"fd#ed"fgd$Zd%d& Zd'S )(r   z;
    For C++ source code with preprocessor directives.
    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++srcg?)$ZcatchZ
const_castdeleteZdynamic_castZexplicitZexportZfriendZmutable	namespacenewoperatorZprivateZ	protectedZpublicZreinterpret_castr'   Zstatic_casttemplater   throwZthrowsr+   Ztypeidr(   r   ZvirtualZ	constexprZnullptrZdecltypeZthread_localZalignasZalignofZstatic_assertZnoexceptoverridefinalz\b)r&   zchar(16_t|32_t)\bz(class)(\s+)	classnamez/(R)(")([^\\()\s]{,16})(\()((?:.|\n)*?)(\)\3)(")z(u8|u|U)(")r   )Zvirtual_inheritanceZuuidofsuperZsingle_inheritanceZmultiple_inheritanceZ	interfaceZeventr.   )r/   r&   z#__(offload|blockingoffload|outer)\bz[a-zA-Z_]\w*z#popz\s*(?=>))r3   r7   rd   c             C   s$   t d| rdS t d| r dS d S )Nz#include <[a-z_]+>g?zusing namespace g?)rS   rT   )rD   r=   r=   r>   rV      s    zCppLexer.analyse_textN)rH   rI   rJ   rK   rW   rX   rY   rZ   r[   r	   r   rA   r   r   r   rM   Z	Delimiterr   rN   ZPseudor   ZClassrO   rV   r=   r=   r=   r>   r      s2   


)rK   rS   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   (,  