Doxygen
Loading...
Searching...
No Matches
commentcnv.h File Reference

First pass comment processing. More...

#include <string>
Include dependency graph for commentcnv.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Functions

void convertCppComments (const std::string &inBuf, std::string &outBuf, const std::string &fn)
 Converts the comments in a file.

Detailed Description

First pass comment processing.

Definition in file commentcnv.h.

Function Documentation

◆ convertCppComments()

void convertCppComments ( const std::string & inBuf,
std::string & outBuf,
const std::string & fn )

Converts the comments in a file.

Parameters
inBufinput buffer holding the file content.
outBufoutput buffer to which the results after conversion are written to.
fnthe name of the file from which the comments originate.

The following is converted:

  • C++ style multiline doxygen comments are converted to C style doxygen comments.
  • conditional sections are processed.
  • aliases are expanded.

This function does three things:

  1. It converts multi-line C++ style comment blocks (that are aligned) to C style comment blocks (if MULTILINE_CPP_IS_BRIEF is set to NO).
  2. It replaces aliases with their definition (see ALIASES)
  3. It handles conditional sections (cond...endcond blocks)

Definition at line 2089 of file commentcnv.l.

2090{
2091 QCString fileName { fn };
2092 yyscan_t yyscanner;
2093 commentcnvYY_state extra(&inBuf,outBuf);
2094 commentcnvYYlex_init_extra(&extra,&yyscanner);
2095#ifdef FLEX_DEBUG
2096 commentcnvYYset_debug(Debug::isFlagSet(Debug::Lex_commentcnv)?1:0,yyscanner);
2097#endif
2098 struct yyguts_t *yyg = (struct yyguts_t*)yyscanner;
2099 //printf("convertCppComments(%s)\n",qPrint(fileName));
2100 yyextra->inBufPos = 0;
2101 yyextra->col = 0;
2102 yyextra->mlBrief = Config_getBool(MULTILINE_CPP_IS_BRIEF);
2103 yyextra->skip = FALSE;
2104 yyextra->fileName = fileName;
2105 yyextra->lang = getLanguageFromFileName(fileName);
2106 yyextra->pythonDocString = FALSE;
2107 yyextra->lineNr = 1;
2108 yyextra->raiseLevel = 0;
2109 yyextra->raiseLabel = "";
2110 yyextra->raiseIncrement = 0;
2111 yyextra->raisePrefix = "";
2112 yyextra->insertCppCommentMarker=false;
2113 yyextra->expandedAliases.clear();
2114 while (!yyextra->condStack.empty()) yyextra->condStack.pop();
2115 clearCommentStack(yyscanner);
2116 yyextra->vhdl = FALSE;
2117
2118 DebugLex debugLex(Debug::Lex_commentcnv,__FILE__, qPrint(fileName));
2119 yyextra->isFixedForm = FALSE;
2120 if (yyextra->lang==SrcLangExt::Fortran)
2121 {
2123 yyextra->isFixedForm = recognizeFixedForm(inBuf,fmt);
2124 }
2125
2126 if (yyextra->lang==SrcLangExt::Markdown)
2127 {
2128 yyextra->nestingCount=0;
2129 BEGIN(CComment);
2130 yyextra->commentStack.push(yyextra->lineNr);
2131 }
2132 else
2133 {
2134 BEGIN(Scan);
2135 }
2136 yylex(yyscanner);
2137 while (!yyextra->condStack.empty())
2138 {
2139 const commentcnvYY_CondCtx &ctx = yyextra->condStack.top();
2140 QCString sectionInfo(" ");
2141 if (ctx.sectionId!=" ") sectionInfo.sprintf(" with label '%s' ",ctx.sectionId.stripWhiteSpace().data());
2142 warn(yyextra->fileName,ctx.lineNr,"Conditional section{}does not have "
2143 "a corresponding \\endcond command within this file.",sectionInfo.data());
2144 yyextra->condStack.pop();
2145 }
2146 if (yyextra->nestingCount>0 && yyextra->lang!=SrcLangExt::Markdown && yyextra->lang!=SrcLangExt::Fortran)
2147 {
2148 QCString lines;
2149 bool first = true;
2150 while (!yyextra->commentStack.empty())
2151 {
2152 int lineNr = yyextra->commentStack.top();
2153 if (!first) lines += ", ";
2154 lines += QCString().setNum(lineNr);
2155 first = false;
2156 yyextra->commentStack.pop();
2157 }
2158 warn(yyextra->fileName,yyextra->lineNr,"Reached end of file while still inside a (nested) comment. "
2159 "Nesting level {} (possible line reference(s): {})",yyextra->nestingCount,lines);
2160 }
2161 yyextra->nestingCount = 0;
2163 {
2164 Debug::print(Debug::CommentCnv,0,"-----------\nCommentCnv: {}\n"
2165 "output=[\n{}]\n-----------\n",fileName,yyextra->outBuf
2166 );
2167 }
2168 commentcnvYYlex_destroy(yyscanner);
2169}
@ Lex_commentcnv
Definition debug.h:53
@ CommentCnv
Definition debug.h:31
static bool isFlagSet(const DebugMask mask)
Definition debug.cpp:132
static void print(DebugMask mask, int prio, fmt::format_string< Args... > fmt, Args &&... args)
Definition debug.h:76
This is an alternative implementation of QCString.
Definition qcstring.h:101
QCString stripWhiteSpace() const
returns a copy of this string with leading and trailing whitespace removed
Definition qcstring.h:260
QCString & setNum(short n)
Definition qcstring.h:459
const char * data() const
Returns a pointer to the contents of the string in the form of a 0-terminated C string.
Definition qcstring.h:172
yyguts_t * yyscan_t
Definition code.l:24
static void clearCommentStack(yyscan_t yyscanner)
#define Config_getBool(name)
Definition config.h:33
int yylex(void)
#define warn(file, line, fmt,...)
Definition message.h:97
Definition message.h:144
const char * qPrint(const char *s)
Definition qcstring.h:687
#define FALSE
Definition qcstring.h:34
FortranFormat
Definition types.h:572
SrcLangExt getLanguageFromFileName(const QCString &fileName, SrcLangExt defLang)
Definition util.cpp:5724
bool recognizeFixedForm(const QCString &contents, FortranFormat format)
Definition util.cpp:6860
FortranFormat convertFileNameFortranParserCode(QCString fn)
Definition util.cpp:6913

References clearCommentStack(), Debug::CommentCnv, Config_getBool, convertFileNameFortranParserCode(), QCString::data(), FALSE, getLanguageFromFileName(), Debug::isFlagSet(), Debug::Lex_commentcnv, commentcnvYY_CondCtx::lineNr, Debug::print(), qPrint(), recognizeFixedForm(), commentcnvYY_CondCtx::sectionId, QCString::setNum(), QCString::sprintf(), QCString::stripWhiteSpace(), warn, and yylex().

Referenced by generateHtmlForComment(), and parseFile().