cpp_type_re =
/\b(auto|bool|c(har|lass|o(mplex|nst))|double|e(num|xtern)|f(loat|riend)\
|in(line|t)|long|p(r(ivate|otected)|ublic)|register\
|s(hort|igned|t(atic|ruct))|t(emplate|ypedef)|un(ion|signed)\
|v(irtual|o(id|latile)))\b/;
state cpp extends c
{
BEGIN {
type_re = cpp_type_re;
}
/\/\// {
comment_face (true);
language_print ($0);
call (eat_one_line);
comment_face (false);
}
/\b(asm|catch|delete|new|o(perator|verload)|t(h(is|row)|ry))\b/ {
keyword_face (true);
language_print ($0);
keyword_face (false);
}
cpp_type_re {
type_face (true);
language_print ($0);
type_face (false);
}
/[a-zA-Z0-9_]+::/ {
language_print ($0);
}
/^([ \t]*)([a-zA-Z0-9_]+)(:)/ {
language_print ($1);
if (strcmp ($2, "public") == 0
|| strcmp ($2, "private") == 0
|| strcmp ($2, "protected") == 0)
{
type_face (true);
language_print ($2);
type_face (false);
}
else
{
reference_face (true);
language_print ($2);
reference_face (false);
}
language_print ($3);
}
/^([a-zA-Z_][a-zA-Z_0-9:~]*)([ \t]*\()/ {
function_name_face (true);
language_print ($1);
function_name_face (false);
language_print ($2);
}
/^([A-Za-z][a-zA-Z0-9_\&\* ]+)([ \*])([a-zA-Z_][a-zA-Z_0-9:~]*)([ \t]*\()/ {
garbage = $1;
middle_garbage = $2;
function_name = $3;
tail_garbage = $4;
highlight_types (garbage, cpp_type_re);
language_print (middle_garbage);
function_name_face (true);
language_print (function_name);
function_name_face (false);
language_print (tail_garbage);
}
}