Loading src/pre.l +31 −4 Original line number Diff line number Diff line Loading @@ -59,6 +59,16 @@ #define DBG_CTX(x) do { } while(0) #define YY_NEVER_INTERACTIVE 1 struct CondCtx { CondCtx(int line,QCString id,bool b) : lineNr(line),sectionId(id), skip(b) {} int lineNr; QCString sectionId; bool skip; }; struct FileState { FileState(int size) : fileBuf(size), Loading Loading @@ -360,7 +370,7 @@ static bool g_isImported; static QCString g_blockName; static int g_condCtx; static bool g_skip; static QStack<bool> g_condStack; static QStack<CondCtx> g_condStack; static bool g_insideCS; // C# has simpler preprocessor static bool g_isSource; Loading Loading @@ -1613,7 +1623,7 @@ static void startCondSection(const char *sectId) //printf("startCondSection: skip=%d stack=%d\n",g_skip,g_condStack.count()); CondParser prs; bool expResult = prs.parse(g_yyFileName,g_yyLineNr,sectId); g_condStack.push(new bool(g_skip)); g_condStack.push(new CondCtx(g_yyLineNr,sectId,g_skip)); if (!expResult) { g_skip=TRUE; Loading @@ -1629,8 +1639,8 @@ static void endCondSection() } else { bool *ctx = g_condStack.pop(); g_skip=*ctx; CondCtx *ctx = g_condStack.pop(); g_skip=ctx->skip; } //printf("endCondSection: skip=%d stack=%d\n",g_skip,g_condStack.count()); } Loading Loading @@ -2457,6 +2467,9 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'")) } BEGIN(SkipVerbatim); } <SkipCComment,SkipCPPComment>[\\@][\\@]"cond"[ \t]+ { // escaped @cond outputArray(yytext,(int)yyleng); } <SkipCPPComment>[\\@]"cond"[ \t]+ { // conditional section g_ccomment=TRUE; g_condCtx=YY_START; Loading Loading @@ -2530,6 +2543,12 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'")) <SkipCond>[^\/\!*\\@\n]+ { } <SkipCond>"//"[/!] { g_ccomment=FALSE; } <SkipCond>"/*"[*!] { g_ccomment=TRUE; } <SkipCond,SkipCComment,SkipCPPComment>[\\@][\\@]"endcond"/[^a-z_A-Z0-9] { if (!g_skip) { outputArray(yytext,(int)yyleng); } } <SkipCond>[\\@]"endcond"/[^a-z_A-Z0-9] { bool oldSkip = g_skip; endCondSection(); Loading Loading @@ -3088,6 +3107,14 @@ void preprocessFile(const char *fileName,BufStr &input,BufStr &output) preYYlex(); g_lexInit=TRUE; while (!g_condStack.isEmpty()) { CondCtx *ctx = g_condStack.pop(); QCString sectionInfo = " "; if (ctx->sectionId!=" ") sectionInfo.sprintf(" with label %s ",ctx->sectionId.data()); warn(fileName,ctx->lineNr,"Conditional section%sdoes not have " "a corresponding \\endcond command within this file.",sectionInfo.data()); } // make sure we don't extend a \cond with missing \endcond over multiple files (see bug 624829) forceEndCondSection(); Loading Loading
src/pre.l +31 −4 Original line number Diff line number Diff line Loading @@ -59,6 +59,16 @@ #define DBG_CTX(x) do { } while(0) #define YY_NEVER_INTERACTIVE 1 struct CondCtx { CondCtx(int line,QCString id,bool b) : lineNr(line),sectionId(id), skip(b) {} int lineNr; QCString sectionId; bool skip; }; struct FileState { FileState(int size) : fileBuf(size), Loading Loading @@ -360,7 +370,7 @@ static bool g_isImported; static QCString g_blockName; static int g_condCtx; static bool g_skip; static QStack<bool> g_condStack; static QStack<CondCtx> g_condStack; static bool g_insideCS; // C# has simpler preprocessor static bool g_isSource; Loading Loading @@ -1613,7 +1623,7 @@ static void startCondSection(const char *sectId) //printf("startCondSection: skip=%d stack=%d\n",g_skip,g_condStack.count()); CondParser prs; bool expResult = prs.parse(g_yyFileName,g_yyLineNr,sectId); g_condStack.push(new bool(g_skip)); g_condStack.push(new CondCtx(g_yyLineNr,sectId,g_skip)); if (!expResult) { g_skip=TRUE; Loading @@ -1629,8 +1639,8 @@ static void endCondSection() } else { bool *ctx = g_condStack.pop(); g_skip=*ctx; CondCtx *ctx = g_condStack.pop(); g_skip=ctx->skip; } //printf("endCondSection: skip=%d stack=%d\n",g_skip,g_condStack.count()); } Loading Loading @@ -2457,6 +2467,9 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'")) } BEGIN(SkipVerbatim); } <SkipCComment,SkipCPPComment>[\\@][\\@]"cond"[ \t]+ { // escaped @cond outputArray(yytext,(int)yyleng); } <SkipCPPComment>[\\@]"cond"[ \t]+ { // conditional section g_ccomment=TRUE; g_condCtx=YY_START; Loading Loading @@ -2530,6 +2543,12 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'")) <SkipCond>[^\/\!*\\@\n]+ { } <SkipCond>"//"[/!] { g_ccomment=FALSE; } <SkipCond>"/*"[*!] { g_ccomment=TRUE; } <SkipCond,SkipCComment,SkipCPPComment>[\\@][\\@]"endcond"/[^a-z_A-Z0-9] { if (!g_skip) { outputArray(yytext,(int)yyleng); } } <SkipCond>[\\@]"endcond"/[^a-z_A-Z0-9] { bool oldSkip = g_skip; endCondSection(); Loading Loading @@ -3088,6 +3107,14 @@ void preprocessFile(const char *fileName,BufStr &input,BufStr &output) preYYlex(); g_lexInit=TRUE; while (!g_condStack.isEmpty()) { CondCtx *ctx = g_condStack.pop(); QCString sectionInfo = " "; if (ctx->sectionId!=" ") sectionInfo.sprintf(" with label %s ",ctx->sectionId.data()); warn(fileName,ctx->lineNr,"Conditional section%sdoes not have " "a corresponding \\endcond command within this file.",sectionInfo.data()); } // make sure we don't extend a \cond with missing \endcond over multiple files (see bug 624829) forceEndCondSection(); Loading