diff -r d8fccb2cd802 -r 468f4c8d3d5b Orb/Doxygen/src/commentscan.l --- a/Orb/Doxygen/src/commentscan.l Fri Apr 23 20:47:58 2010 +0100 +++ b/Orb/Doxygen/src/commentscan.l Wed Aug 11 14:49:30 2010 +0100 @@ -1,6 +1,6 @@ /***************************************************************************** * - * Copyright (C) 1997-2008 by Dimitri van Heesch. + * Copyright (C) 1997-2010 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby @@ -395,6 +395,8 @@ static int braceCount; static bool insidePre; static bool parseMore; +static int g_condCount; +static int g_sectionLevel; static int g_commentCount; @@ -692,7 +694,6 @@ stripTrailingWhiteSpace(current->doc); if (current->docFile.isEmpty()) { - //printf("Setting docFile to %s\n", yyFileName.data()); current->docFile = yyFileName; current->docLine = yyLineNr; } @@ -1030,13 +1031,25 @@ ".," { // . with comma such as "e.g.," addOutput(yytext); } +"...\\"[ \t] { // ellipsis with escaped space. + addOutput("... "); + } +".."[\.]?/[^ \t\n] { // internal ellipsis + addOutput(yytext); + } (\n|\\_linebr)({B}*(\n|\\_linebr))+ { // at least one blank line (or blank line command) - if (inContext!=OutputBrief) + if (inContext==OutputXRef) + { + // see bug 613024, we need to put the newlines after ending the XRef section. + setOutput(OutputDoc); + addOutput("\n\n"); + } + else if (inContext!=OutputBrief) { addOutput("\n\n"); setOutput(OutputDoc); } - else + else // inContext==OutputBrief { // only go to the detailed description if we have // found some brief description and not just whitespace endBrief(FALSE); @@ -1692,6 +1705,48 @@ if (*yytext=='\n') yyLineNr++; addOutput('\n'); } +[@\\]"if"/[ \t] { + g_condCount++; + } +[@\\]"ifnot"/[ \t] { + g_condCount++; + } +[@\\]/"endif" { + g_condCount--; + if (g_condCount<0) // handle conditional section around of \internal, see bug607743 + { + unput('\\'); + BEGIN(Comment); + } + } +[@\\]/"section"[ \t] { + if (g_sectionLevel>0) + { + unput('\\'); + BEGIN(Comment); + } + } +[@\\]/"subsection"[ \t] { + if (g_sectionLevel>1) + { + unput('\\'); + BEGIN(Comment); + } + } +[@\\]/"subsubsection"[ \t] { + if (g_sectionLevel>2) + { + unput('\\'); + BEGIN(Comment); + } + } +[@\\]/"paragraph"[ \t] { + if (g_sectionLevel>3) + { + unput('\\'); + BEGIN(Comment); + } + } [^ \\@\n]+ { // skip non-special characters } . { // any other character @@ -2135,6 +2190,10 @@ setOutput(OutputDoc); addOutput("@"+s+" "); BEGIN(SectionLabel); + if (s=="section") g_sectionLevel=1; + else if (s=="subsection") g_sectionLevel=2; + else if (s=="subsubsection") g_sectionLevel=3; + else if (s=="paragraph") g_sectionLevel=4; return FALSE; } @@ -2284,6 +2343,7 @@ { current->doc.resize(0); } + g_condCount=0; BEGIN( SkipInternal ); } else @@ -2388,7 +2448,7 @@ { //printf("parseCommentBlock() isBrief=%d isAutoBriefOn=%d lineNr=%d\n", // isBrief,isAutoBriefOn,lineNr); - //printf("parseCommentBlock() lineNr=%d file=%s\n", lineNr, fileName.data()); + initParser(); guards.setAutoDelete(TRUE); guards.clear(); @@ -2410,6 +2470,8 @@ outputXRef.resize(0); setOutput( isBrief || isAutoBriefOn ? OutputBrief : OutputDoc ); briefEndsAtDot = isAutoBriefOn; + g_condCount = 0; + g_sectionLevel = 0; if (!current->inbodyDocs.isEmpty() && isInbody) // separate in body fragments {