objc_type_re =
/\b(auto|by(copy|ref)|c(har|onst)|double|e(num|xtern)|float\
|i(d|n(|out|t))|long|o(neway|ut)|register|s(hort|igned|t(atic|ruct))\
|typedef|un(ion|signed)|vo(id|latile))\b/;
state objc_method_line extends CHighlight
{
/([ \t]*)([A-Za-z_][A-Za-z_0-9]*)?(:[ \t]*)(\(([^)\n]+)\))?([ \t]*)([A-Za-z_][A-Za-z_0-9]*)/ {
language_print ($1);
if (length ($2) > 0)
{
function_name_face (true);
language_print ($2);
function_name_face (false);
}
language_print ($3);
if (length ($4) > 0)
{
language_print ("(");
type_face (true);
language_print ($5);
type_face (false);
language_print (")");
}
language_print ($6);
variable_name_face (true);
language_print ($7);
variable_name_face (false);
}
/\n/ {
language_print ($0);
return;
}
}
state objc_method_continuation_line
{
/^([ \t]*)([A-Za-z_][A-Za-z_0-9]*)?(:[ \t]*)(\(([^)\n]+)\))?([ \t]*)\
([A-Za-z_][A-Za-z_0-9]*)/ {
language_print ($1);
if (length ($2) > 0)
{
function_name_face (true);
language_print ($2);
function_name_face (false);
}
language_print ($3);
if (length ($4) > 0)
{
language_print ("(");
type_face (true);
language_print ($5);
type_face (false);
language_print (")");
}
language_print ($6);
variable_name_face (true);
language_print ($7);
variable_name_face (false);
call (objc_method_line);
}
/()/ {
return;
}
}
state objc_compiler_directive_line
{
/([ \t:<(,]*)([A-Za-z_][A-Za-z_0-9]*)/ {
language_print ($1);
function_name_face (true);
language_print ($2);
function_name_face (false);
}
/()/ {
return;
}
}
state objc extends c
{
BEGIN {
type_re = objc_type_re;
}
/\/\// {
comment_face (true);
language_print ($0);
call (eat_one_line);
comment_face (false);
}
/(@)([A-Za-z][A-Za-z0-9]*)\>/ {
language_print ($1);
keyword_face (true);
language_print ($2);
keyword_face (false);
call (objc_compiler_directive_line);
}
/\b(BOOL|Class|IMP|N(O|il)|SEL|YES|_cmd|id|nil|s(elf|uper))\b/ {
keyword_face (true);
language_print ($0);
keyword_face (false);
}
objc_type_re {
type_face (true);
language_print ($0);
type_face (false);
}
/(^[+-][ \t]*)(PRIVATE)?([ \t]*)(\(([^)\n]+)\))?([ \t]*)([A-Za-z_]\
[A-Za-z_0-9]*)/ {
language_print ($1);
if (length ($2) > 0)
{
type_face (true);
language_print ($2);
type_face (false);
}
language_print ($3);
if (length ($4) > 0)
{
language_print ("(");
type_face (true);
language_print ($5);
type_face (false);
language_print (")");
}
language_print ($6);
function_name_face (true);
language_print ($7);
function_name_face (false);
call (objc_method_line);
call (objc_method_continuation_line);
}
/^([ \t]*)([a-zA-Z0-9_]+)(:[ \t]*)$/ {
language_print ($1);
reference_face (true);
language_print ($2);
reference_face (false);
language_print ($3);
}
}