%%%  pp-directives and operators  %%%

\catcode`#=\the\catcode`a
\MakeWord{#if}{PPDirective}
\MakeWord{#ifdef}{PPDirective}
\MakeWord{#ifndef}{PPDirective}
\MakeWord{#elif}{PPDirective}
\MakeWord{#elifdef}{PPDirective}
\MakeWord{#elifndef}{PPDirective}
\MakeWord{#else}{PPDirective}
\MakeWord{#endif}{PPDirective}
\MakeWord{#include}{PPDirective}
\MakeWord{#embed}{PPDirective}
\MakeWord{#define}{PPDirective}
\MakeWord{#undef}{PPDirective}
\MakeWord{#line}{PPDirective}
\MakeWord{#error}{PPDirective}
\MakeWord{#warning}{PPDirective}
\MakeWord{#pragma}{PPDirective}

\MakeWord{#}{PPPunctuator}
\MakeWord{##}{PPPunctuator}
\catcode`#=\string 6

% pp directives written wihtout the #
\MakeWord{ifdef}{PPDirective}
\MakeWord{ifndef}{PPDirective}
\MakeWord{elif}{PPDirective}
\MakeWord{elifdef}{PPDirective}
\MakeWord{elifndef}{PPDirective}
\MakeWord{endif}{PPDirective}
\MakeWord{include}{PPDirective}
\MakeWord{embed}{PPDirective}
\MakeWord{define}{PPDirective}
\MakeWord{undef}{PPDirective}
\MakeWord{line}{PPDirective}
\MakeWord{error}{PPDirective}
\MakeWord{warning}{PPDirective}
\MakeWord{pragma}{PPDirective}

% pp operators
\MakeWord{_Pragma}{PPOperator}
\MakeWord{defined}{PPOperator}
\MakeWord{__has_c_attribute}{PPOperator}
\MakeWord{__has_embed}{PPOperator}
\MakeWord{__has_include}{PPOperator}

% pp parameters of directives
\MakeWord{limit}{PPParameter}
\MakeWord{prefix}{PPParameter}
\MakeWord{suffix}{PPParameter}
\MakeWord{if_empty}{PPParameter}
\MakeWord{__limit__}{PPParameter}
\MakeWord{__prefix__}{PPParameter}
\MakeWord{__suffix__}{PPParameter}
\MakeWord{__if_empty__}{PPParameter}

% Pragmas
\MakeWord{STDC}{Pragma}
\MakeWord{CX_LIMITED_RANGE}{Pragma}
\MakeWord{FENV_ACCESS}{Pragma}
\MakeWord{FENV_DEC_ROUND}{Pragma}
\MakeWord{FENV_ROUND}{Pragma}
\MakeWord{FP_CONTRACT}{Pragma}

% Pragma values
\MakeWord{DEFAULT}{PragmaValue}
\MakeWord{FE_DOWNWARD}{PragmaValue}
\MakeWord{FE_TONEAREST}{PragmaValue}
\MakeWord{FE_TONEARESTFROMZERO}{PragmaValue}
\MakeWord{FE_TOWARDZERO}{PragmaValue}
\MakeWord{FE_UPWARD}{PragmaValue}
\MakeWord{FE_DYNAMIC}{PragmaValue}
\MakeWord{FE_DEC_DOWNWARD}{PragmaValue}
\MakeWord{FE_DEC_TONEAREST}{PragmaValue}
\MakeWord{FE_DEC_TONEARESTFROMZERO}{PragmaValue}
\MakeWord{FE_DEC_TOWARDZERO}{PragmaValue}
\MakeWord{FE_DEC_UPWARD}{PragmaValue}
\MakeWord{FE_DEC_DYNAMIC}{PragmaValue}
\MakeWord{OFF}{PragmaValue}
\MakeWord{ON}{PragmaValue}
