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

1956{
1957 QCString fileName { fn };
1958 yyscan_t yyscanner;
1959 commentcnvYY_state extra(&inBuf,outBuf);
1960 commentcnvYYlex_init_extra(&extra,&yyscanner);
1961#ifdef FLEX_DEBUG
1962 commentcnvYYset_debug(Debug::isFlagSet(Debug::Lex_commentcnv)?1:0,yyscanner);
1963#endif
1964 struct yyguts_t *yyg = (struct yyguts_t*)yyscanner;
1965 //printf("convertCppComments(%s)\n",qPrint(fileName));
1966 yyextra->inBufPos = 0;
1967 yyextra->col = 0;
1968 yyextra->mlBrief = Config_getBool(MULTILINE_CPP_IS_BRIEF);
1969 yyextra->skip = FALSE;
1970 yyextra->fileName = fileName;
1971 yyextra->lang = getLanguageFromFileName(fileName);
1972 yyextra->pythonDocString = FALSE;
1973 yyextra->lineNr = 1;
1974 yyextra->raiseLevel = 0;
1975 yyextra->raiseLabel = "";
1976 yyextra->raiseIncrement = 0;
1977 yyextra->raisePrefix = "";
1978 yyextra->insertCppCommentMarker=false;
1979 yyextra->expandedAliases.clear();
1980 while (!yyextra->condStack.empty()) yyextra->condStack.pop();
1981 clearCommentStack(yyscanner);
1982 yyextra->vhdl = FALSE;
1983
1984 DebugLex debugLex(Debug::Lex_commentcnv,__FILE__, qPrint(fileName));
1985 yyextra->isFixedForm = FALSE;
1986 if (yyextra->lang==SrcLangExt::Fortran)
1987 {
1989 yyextra->isFixedForm = recognizeFixedForm(QCString(inBuf),fmt);
1990 }
1991
1992 if (yyextra->lang==SrcLangExt::Markdown)
1993 {
1994 yyextra->nestingCount=0;
1995 BEGIN(CComment);
1996 yyextra->commentStack.push(yyextra->lineNr);
1997 }
1998 else
1999 {
2000 BEGIN(Scan);
2001 }
2002 yylex(yyscanner);
2003 while (!yyextra->condStack.empty())
2004 {
2005 const commentcnvYY_CondCtx &ctx = yyextra->condStack.top();
2006 QCString sectionInfo(" ");
2007 if (ctx.sectionId!=" ") sectionInfo.sprintf(" with label '%s' ",ctx.sectionId.stripWhiteSpace().data());
2008 warn(yyextra->fileName,ctx.lineNr,"Conditional section{}does not have "
2009 "a corresponding \\endcond command within this file.",sectionInfo.data());
2010 yyextra->condStack.pop();
2011 }
2012 if (yyextra->nestingCount>0 && yyextra->lang!=SrcLangExt::Markdown && yyextra->lang!=SrcLangExt::Fortran)
2013 {
2014 QCString lines;
2015 bool first = true;
2016 while (!yyextra->commentStack.empty())
2017 {
2018 int lineNr = yyextra->commentStack.top();
2019 if (!first) lines += ", ";
2020 lines += QCString().setNum(lineNr);
2021 first = false;
2022 yyextra->commentStack.pop();
2023 }
2024 warn(yyextra->fileName,yyextra->lineNr,"Reached end of file while still inside a (nested) comment. "
2025 "Nesting level {} (possible line reference(s): {})",yyextra->nestingCount,lines);
2026 }
2027 yyextra->nestingCount = 0;
2029 {
2030 Debug::print(Debug::CommentCnv,0,"-----------\nCommentCnv: {}\n"
2031 "output=[\n{}]\n-----------\n",fileName,yyextra->outBuf
2032 );
2033 }
2034 commentcnvYYlex_destroy(yyscanner);
2035}
@ 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:5721
bool recognizeFixedForm(const QCString &contents, FortranFormat format)
Definition util.cpp:6820
FortranFormat convertFileNameFortranParserCode(QCString fn)
Definition util.cpp:6873

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