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 2040 of file commentcnv.l.

2041{
2042 QCString fileName { fn };
2043 yyscan_t yyscanner;
2044 commentcnvYY_state extra(&inBuf,outBuf);
2045 commentcnvYYlex_init_extra(&extra,&yyscanner);
2046#ifdef FLEX_DEBUG
2047 commentcnvYYset_debug(Debug::isFlagSet(Debug::Lex_commentcnv)?1:0,yyscanner);
2048#endif
2049 struct yyguts_t *yyg = (struct yyguts_t*)yyscanner;
2050 //printf("convertCppComments(%s)\n",qPrint(fileName));
2051 yyextra->inBufPos = 0;
2052 yyextra->col = 0;
2053 yyextra->mlBrief = Config_getBool(MULTILINE_CPP_IS_BRIEF);
2054 yyextra->skip = FALSE;
2055 yyextra->fileName = fileName;
2056 yyextra->lang = getLanguageFromFileName(fileName);
2057 yyextra->pythonDocString = FALSE;
2058 yyextra->lineNr = 1;
2059 yyextra->raiseLevel = 0;
2060 yyextra->raiseLabel = "";
2061 yyextra->raiseIncrement = 0;
2062 yyextra->raisePrefix = "";
2063 yyextra->insertCppCommentMarker=false;
2064 yyextra->expandedAliases.clear();
2065 while (!yyextra->condStack.empty()) yyextra->condStack.pop();
2066 clearCommentStack(yyscanner);
2067 yyextra->vhdl = FALSE;
2068
2069 DebugLex debugLex(Debug::Lex_commentcnv,__FILE__, qPrint(fileName));
2070 yyextra->isFixedForm = FALSE;
2071 if (yyextra->lang==SrcLangExt::Fortran)
2072 {
2074 yyextra->isFixedForm = recognizeFixedForm(QCString(inBuf),fmt);
2075 }
2076
2077 if (yyextra->lang==SrcLangExt::Markdown)
2078 {
2079 yyextra->nestingCount=0;
2080 BEGIN(CComment);
2081 yyextra->commentStack.push(yyextra->lineNr);
2082 }
2083 else
2084 {
2085 BEGIN(Scan);
2086 }
2087 yylex(yyscanner);
2088 while (!yyextra->condStack.empty())
2089 {
2090 const commentcnvYY_CondCtx &ctx = yyextra->condStack.top();
2091 QCString sectionInfo(" ");
2092 if (ctx.sectionId!=" ") sectionInfo.sprintf(" with label '%s' ",ctx.sectionId.stripWhiteSpace().data());
2093 warn(yyextra->fileName,ctx.lineNr,"Conditional section{}does not have "
2094 "a corresponding \\endcond command within this file.",sectionInfo.data());
2095 yyextra->condStack.pop();
2096 }
2097 if (yyextra->nestingCount>0 && yyextra->lang!=SrcLangExt::Markdown && yyextra->lang!=SrcLangExt::Fortran)
2098 {
2099 QCString lines;
2100 bool first = true;
2101 while (!yyextra->commentStack.empty())
2102 {
2103 int lineNr = yyextra->commentStack.top();
2104 if (!first) lines += ", ";
2105 lines += QCString().setNum(lineNr);
2106 first = false;
2107 yyextra->commentStack.pop();
2108 }
2109 warn(yyextra->fileName,yyextra->lineNr,"Reached end of file while still inside a (nested) comment. "
2110 "Nesting level {} (possible line reference(s): {})",yyextra->nestingCount,lines);
2111 }
2112 yyextra->nestingCount = 0;
2114 {
2115 Debug::print(Debug::CommentCnv,0,"-----------\nCommentCnv: {}\n"
2116 "output=[\n{}]\n-----------\n",fileName,yyextra->outBuf
2117 );
2118 }
2119 commentcnvYYlex_destroy(yyscanner);
2120}
@ 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:245
QCString & setNum(short n)
Definition qcstring.h:444
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:159
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:672
#define FALSE
Definition qcstring.h:34
FortranFormat
Definition types.h:572
SrcLangExt getLanguageFromFileName(const QCString &fileName, SrcLangExt defLang)
Definition util.cpp:5719
bool recognizeFixedForm(const QCString &contents, FortranFormat format)
Definition util.cpp:6855
FortranFormat convertFileNameFortranParserCode(QCString fn)
Definition util.cpp:6908

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().