diff -Naur doxygen-1.7.3.orig/src/scanner.l doxygen-1.7.3/src/scanner.l --- doxygen-1.7.3.orig/src/scanner.l 2010-11-30 22:45:51.000000000 +0100 +++ doxygen-1.7.3/src/scanner.l 2011-11-20 05:25:20.494000106 +0100 @@ -1436,6 +1436,7 @@ } lineCount() ; if (yytext[yyleng-1]=='{') unput('{'); + if (yytext[yyleng-1]=='(') unput('('); if (insidePHP && current->spec&Entry::Abstract) { // convert Abstract to AbstractClass @@ -1507,6 +1508,7 @@ } } {B}*{TYPEDEFPREFIX}"struct{" | +{B}*{TYPEDEFPREFIX}"CLASS(" | {B}*{TYPEDEFPREFIX}"struct"/{BN}+ { isTypedef=((QCString)yytext).find("typedef")!=-1; current->section = Entry::CLASS_SEC ; @@ -1514,7 +1516,12 @@ // bug 582676: can be a struct nested in an interface so keep insideObjC state //current->objc = insideObjC = FALSE; addType( current ) ; - current->type += " struct" ; + if (yytext[yyleng-1]=='(') { + unput('('); + current->type += " class" ; + } else { + current->type += " struct" ; + } current->fileName = yyFileName; current->startLine = yyLineNr; current->bodyLine = yyLineNr; @@ -4540,6 +4547,7 @@ // e.g. @protocol A,B; current->reset(); } +{ID} | {SCOPENAME} { current->name = yytext ; lineCount(); @@ -4806,6 +4814,7 @@ BEGIN( ReadBodyIntf ); } } +")"{BN}*"{"{BN}* | {B}*"{"{B}* { current->fileName = yyFileName ; current->startLine = yyLineNr ;