From 603b2ada84164c9e740552cec052c01803bee383 Mon Sep 17 00:00:00 2001 From: albert-github Date: Mon, 27 Jul 2020 12:38:09 +0200 Subject: issue #7923 source line numbers in warnings output by parser are off by 1 Explicit counting of the removed newlines at the beginning of a documenation block (markdown.cpp) so this number can be added to get a better line number in case of warnings. --- src/fortranscanner.l | 4 +++- src/markdown.cpp | 8 +++++--- src/markdown.h | 2 +- src/pyscanner.l | 4 +++- src/scanner.l | 4 +++- src/vhdljjparser.cpp | 3 ++- 6 files changed, 17 insertions(+), 8 deletions(-) diff --git a/src/fortranscanner.l b/src/fortranscanner.l index 4d80d5f..81dcb16 100644 --- a/src/fortranscanner.l +++ b/src/fortranscanner.l @@ -2518,7 +2518,9 @@ static void handleCommentBlock(yyscan_t yyscanner,const QCString &doc,bool brief int position=0; bool needsEntry = FALSE; Markdown markdown(yyextra->fileName,lineNr); - QCString processedDoc = Config_getBool(MARKDOWN_SUPPORT) ? markdown.process(doc) : doc; + int startNewlines = 0; + QCString processedDoc = Config_getBool(MARKDOWN_SUPPORT) ? markdown.process(doc,startNewlines) : doc; + lineNr += startNewlines; while (yyextra->commentScanner.parseCommentBlock( yyextra->thisParser, yyextra->docBlockInBody ? yyextra->subrCurrent.back().get() : yyextra->current.get(), diff --git a/src/markdown.cpp b/src/markdown.cpp index 4f40f8d..6e9ac27 100644 --- a/src/markdown.cpp +++ b/src/markdown.cpp @@ -2457,7 +2457,7 @@ QCString Markdown::detab(const QCString &s,int &refIndent) //--------------------------------------------------------------------------- -QCString Markdown::process(const QCString &input) +QCString Markdown::process(const QCString &input, int &startNewlines) { if (input.isEmpty()) return input; int refIndent; @@ -2488,7 +2488,7 @@ QCString Markdown::process(const QCString &input) if (p) { while (*p==' ') p++; // skip over spaces - while (*p=='\n') p++; // skip over newlines + while (*p=='\n') {startNewlines++;p++;}; // skip over newlines if (qstrncmp(p,"
",4)==0) p+=4; // skip over
} if (p>result.data()) @@ -2576,7 +2576,9 @@ void MarkdownOutlineParser::parseInput(const char *fileName, Protection prot=Public; bool needsEntry = FALSE; int position=0; - QCString processedDocs = markdown.process(docs); + int startNewlines; + QCString processedDocs = markdown.process(docs,startNewlines); + lineNr += startNewlines; while (p->commentScanner.parseCommentBlock( this, current.get(), diff --git a/src/markdown.h b/src/markdown.h index 43a17cc..1210967 100644 --- a/src/markdown.h +++ b/src/markdown.h @@ -33,7 +33,7 @@ class Markdown { public: Markdown(const char *fileName,int lineNr,int indentLevel=0); - QCString process(const QCString &input); + QCString process(const QCString &input, int &startNewlines); QCString extractPageTitle(QCString &docs,QCString &id); void setIndentLevel(int level) { m_indentLevel = level; } diff --git a/src/pyscanner.l b/src/pyscanner.l index 07b39d6..6a80e34 100644 --- a/src/pyscanner.l +++ b/src/pyscanner.l @@ -1631,7 +1631,9 @@ static void handleCommentBlock(yyscan_t yyscanner,const QCString &doc,bool brief bool needsEntry; int lineNr = brief ? yyextra->current->briefLine : yyextra->current->docLine; Markdown markdown(yyextra->yyFileName,lineNr); - QCString processedDoc = Config_getBool(MARKDOWN_SUPPORT) ? markdown.process(doc) : doc; + int startNewlines = 0; + QCString processedDoc = Config_getBool(MARKDOWN_SUPPORT) ? markdown.process(doc,startNewlines) : doc; + lineNr += startNewlines; while (yyextra->commentScanner.parseCommentBlock( yyextra->thisParser, (yyextra->docBlockInBody && yyextra->previous) ? yyextra->previous.get() : yyextra->current.get(), diff --git a/src/scanner.l b/src/scanner.l index d9ad41c..c1d2ab6 100644 --- a/src/scanner.l +++ b/src/scanner.l @@ -7020,7 +7020,9 @@ static void handleCommentBlock(yyscan_t yyscanner,const QCString &doc,bool brief bool needsEntry=FALSE; Markdown markdown(yyextra->yyFileName,lineNr); QCString strippedDoc = stripIndentation(doc); - QCString processedDoc = Config_getBool(MARKDOWN_SUPPORT) ? markdown.process(strippedDoc) : strippedDoc; + int startNewlines = 0; + QCString processedDoc = Config_getBool(MARKDOWN_SUPPORT) ? markdown.process(strippedDoc,startNewlines) : strippedDoc; + lineNr += startNewlines; while (yyextra->commentScanner.parseCommentBlock( yyextra->thisParser, yyextra->docBlockInBody && yyextra->previous ? yyextra->previous.get() : yyextra->current.get(), diff --git a/src/vhdljjparser.cpp b/src/vhdljjparser.cpp index d3adad2..50790e8 100644 --- a/src/vhdljjparser.cpp +++ b/src/vhdljjparser.cpp @@ -400,7 +400,8 @@ void VHDLOutlineParser::handleCommentBlock(const char *doc1, bool brief) Markdown markdown(p->yyFileName,p->iDocLine); - QCString processedDoc = Config_getBool(MARKDOWN_SUPPORT) ? markdown.process(doc) : doc; + int startNewlines = 0; + QCString processedDoc = Config_getBool(MARKDOWN_SUPPORT) ? markdown.process(doc,startNewlines) : doc; while (p->commentScanner.parseCommentBlock( p->thisParser, -- cgit v0.12