Doxygen
Loading...
Searching...
No Matches
docparser.cpp File Reference
#include <stdio.h>
#include <stdlib.h>
#include <cassert>
#include <ctype.h>
#include "classlist.h"
#include "cmdmapper.h"
#include "config.h"
#include "debug.h"
#include "dir.h"
#include "docparser.h"
#include "docparser_p.h"
#include "doxygen.h"
#include "filedef.h"
#include "fileinfo.h"
#include "groupdef.h"
#include "namespacedef.h"
#include "message.h"
#include "pagedef.h"
#include "portable.h"
#include "printdocvisitor.h"
#include "util.h"
#include "indexlist.h"
#include "trace.h"
#include "stringutil.h"
Include dependency graph for docparser.cpp:

Go to the source code of this file.

Macros

#define AUTO_TRACE(...)
#define AUTO_TRACE_ADD(...)
#define AUTO_TRACE_EXIT(...)
#define CHECK_FOR_COMMAND(str, action)

Functions

IDocParserPtr createDocParser ()
 factory function to create a parser
static QCString extractCopyDocId (const char *data, size_t &j, size_t len)
static size_t isCopyBriefOrDetailsCmd (const char *data, size_t i, size_t len, bool &brief)
static size_t isVerbatimSection (const char *data, size_t i, size_t len, QCString &endMarker)
static size_t skipToEndMarker (const char *data, size_t i, size_t len, const QCString &endMarker)
IDocNodeASTPtr validatingParseDoc (IDocParser &parserIntf, const QCString &fileName, int startLine, const Definition *ctx, const MemberDef *md, const QCString &input, const DocOptions &options)
IDocNodeASTPtr validatingParseTitle (IDocParser &parserIntf, const QCString &fileName, int lineNr, const QCString &input)
IDocNodeASTPtr validatingParseText (IDocParser &parserIntf, const QCString &input)
IDocNodeASTPtr createRef (IDocParser &parserIntf, const QCString &target, const QCString &context, const QCString &srcFile, int srcLine)
void docFindSections (const QCString &input, const Definition *d, const QCString &fileName)

Macro Definition Documentation

◆ AUTO_TRACE

#define AUTO_TRACE ( ...)
Value:
(void)0

Definition at line 47 of file docparser.cpp.

◆ AUTO_TRACE_ADD

#define AUTO_TRACE_ADD ( ...)
Value:
(void)0

Definition at line 48 of file docparser.cpp.

◆ AUTO_TRACE_EXIT

#define AUTO_TRACE_EXIT ( ...)
Value:
(void)0

Definition at line 49 of file docparser.cpp.

◆ CHECK_FOR_COMMAND

#define CHECK_FOR_COMMAND ( str,
action )
Value:
do if ((i+sizeof(str)<len) && literal_at(data+i+1,str)) \
{ j=i+sizeof(str); action; } while(0)
bool literal_at(const char *data, const char(&str)[N])
returns TRUE iff data points to a substring that matches string literal str
Definition stringutil.h:98

Definition at line 2006 of file docparser.cpp.

2006#define CHECK_FOR_COMMAND(str,action) \
2007 do if ((i+sizeof(str)<len) && literal_at(data+i+1,str)) \
2008 { j=i+sizeof(str); action; } while(0)

Referenced by isCopyBriefOrDetailsCmd(), and isVerbatimSection().

Function Documentation

◆ createDocParser()

◆ createRef()

IDocNodeASTPtr createRef ( IDocParser & parserIntf,
const QCString & target,
const QCString & context,
const QCString & srcFile,
int srcLine )

Definition at line 2431 of file docparser.cpp.

2432{
2433 DocParser *parser = dynamic_cast<DocParser*>(&parserIntf);
2434 assert(parser!=nullptr);
2435 if (parser==nullptr) return nullptr;
2436 if (!srcFile.isEmpty())
2437 {
2438 parser->context.fileName = srcFile;
2439 parser->tokenizer.setFileName(srcFile);
2440 parser->tokenizer.setLineNr(srcLine);
2441 }
2442 return std::make_unique<DocNodeAST>(DocRef(parser,nullptr,target,context));
2443}
DocTokenizer tokenizer
DocParserContext context
Node representing a reference to some item.
Definition docnode.h:787
void setLineNr(int lineno)
void setFileName(const QCString &fileName)
bool isEmpty() const
Returns TRUE iff the string is empty.
Definition qcstring.h:163
QCString fileName
Definition docparser_p.h:71

References DocParser::context, DocParserContext::fileName, QCString::isEmpty(), DocTokenizer::setFileName(), DocTokenizer::setLineNr(), and DocParser::tokenizer.

Referenced by convertMapFile(), replaceRef(), and LayoutNavEntry::url().

◆ docFindSections()

void docFindSections ( const QCString & input,
const Definition * d,
const QCString & fileName )

◆ extractCopyDocId()

QCString extractCopyDocId ( const char * data,
size_t & j,
size_t len )
static

Definition at line 1933 of file docparser.cpp.

1934{
1935 size_t s=j;
1936 int round=0;
1937 bool insideDQuote=FALSE;
1938 bool insideSQuote=FALSE;
1939 bool found=FALSE;
1940 while (j<len && !found)
1941 {
1942 if (!insideSQuote && !insideDQuote)
1943 {
1944 switch (data[j])
1945 {
1946 case '(': round++; break;
1947 case ')': round--; break;
1948 case '"': insideDQuote=TRUE; break;
1949 case '\'': insideSQuote=TRUE; break;
1950 case '\\': // fall through, begin of command
1951 case '@': // fall through, begin of command
1952 case '\t': // fall through
1953 case '\n':
1954 found=(round==0);
1955 break;
1956 case ' ': // allow spaces in cast operator (see issue #11169)
1957 found=(round==0) && (j<8 || !literal_at(data+j-8,"operator"));
1958 break;
1959 }
1960 }
1961 else if (insideSQuote) // look for single quote end
1962 {
1963 if (data[j]=='\'' && (j==0 || data[j]!='\\'))
1964 {
1965 insideSQuote=FALSE;
1966 }
1967 }
1968 else if (insideDQuote) // look for double quote end
1969 {
1970 if (data[j]=='"' && (j==0 || data[j]!='\\'))
1971 {
1972 insideDQuote=FALSE;
1973 }
1974 }
1975 if (!found) j++;
1976 }
1977
1978 // include const and volatile
1979 if (literal_at(data+j," const"))
1980 {
1981 j+=6;
1982 }
1983 else if (literal_at(data+j," volatile"))
1984 {
1985 j+=9;
1986 }
1987
1988 // allow '&' or '&&' or ' &' or ' &&' at the end
1989 size_t k=j;
1990 while (k<len && data[k]==' ') k++;
1991 if (k<len-1 && data[k]=='&' && data[k+1]=='&') j=k+2;
1992 else if (k<len && data[k]=='&' ) j=k+1;
1993
1994 // do not include punctuation added by Definition::_setBriefDescription()
1995 size_t e=j;
1996 if (j>0 && data[j-1]=='.') { e--; }
1997 QCString id(data+s,e-s);
1998 //printf("extractCopyDocId='%s' input='%s'\n",qPrint(id),&data[s]);
1999 return id;
2000}
This is an alternative implementation of QCString.
Definition qcstring.h:101
#define TRUE
Definition qcstring.h:37
#define FALSE
Definition qcstring.h:34

References FALSE, literal_at(), and TRUE.

Referenced by DocParser::processCopyDoc().

◆ isCopyBriefOrDetailsCmd()

size_t isCopyBriefOrDetailsCmd ( const char * data,
size_t i,
size_t len,
bool & brief )
static

Definition at line 2010 of file docparser.cpp.

2011{
2012 size_t j=0;
2013 if (i==0 || (data[i-1]!='@' && data[i-1]!='\\')) // not an escaped command
2014 {
2015 CHECK_FOR_COMMAND("copybrief",brief=TRUE); // @copybrief or \copybrief
2016 CHECK_FOR_COMMAND("copydetails",brief=FALSE); // @copydetails or \copydetails
2017 }
2018 return j;
2019}
#define CHECK_FOR_COMMAND(str, action)

References CHECK_FOR_COMMAND, FALSE, and TRUE.

Referenced by DocParser::processCopyDoc().

◆ isVerbatimSection()

size_t isVerbatimSection ( const char * data,
size_t i,
size_t len,
QCString & endMarker )
static

Definition at line 2021 of file docparser.cpp.

2022{
2023 size_t j=0;
2024 if (i==0 || (data[i-1]!='@' && data[i-1]!='\\')) // not an escaped command
2025 {
2026 CHECK_FOR_COMMAND("dot",endMarker="enddot");
2027 CHECK_FOR_COMMAND("icode",endMarker="endicode");
2028 CHECK_FOR_COMMAND("code",endMarker="endcode");
2029 CHECK_FOR_COMMAND("msc",endMarker="endmsc");
2030 CHECK_FOR_COMMAND("iverbatim",endMarker="endiverbatim");
2031 CHECK_FOR_COMMAND("verbatim",endMarker="endverbatim");
2032 CHECK_FOR_COMMAND("iliteral",endMarker="endiliteral");
2033 CHECK_FOR_COMMAND("latexonly",endMarker="endlatexonly");
2034 CHECK_FOR_COMMAND("htmlonly",endMarker="endhtmlonly");
2035 CHECK_FOR_COMMAND("xmlonly",endMarker="endxmlonly");
2036 CHECK_FOR_COMMAND("rtfonly",endMarker="endrtfonly");
2037 CHECK_FOR_COMMAND("manonly",endMarker="endmanonly");
2038 CHECK_FOR_COMMAND("docbookonly",endMarker="enddocbookonly");
2039 CHECK_FOR_COMMAND("startuml",endMarker="enduml");
2040 }
2041 //printf("isVerbatimSection(%s)=%d)\n",qPrint(QCString(&data[i]).left(10)),j);
2042 return j;
2043}

References CHECK_FOR_COMMAND.

Referenced by DocParser::processCopyDoc().

◆ skipToEndMarker()

size_t skipToEndMarker ( const char * data,
size_t i,
size_t len,
const QCString & endMarker )
static

Definition at line 2045 of file docparser.cpp.

2046{
2047 while (i<len)
2048 {
2049 if ((data[i]=='@' || data[i]=='\\') && // start of command character
2050 (i==0 || (data[i-1]!='@' && data[i-1]!='\\'))) // that is not escaped
2051 {
2052 if (i+endMarker.length()+1<=len && qstrncmp(data+i+1,endMarker.data(),endMarker.length())==0)
2053 {
2054 return i+endMarker.length()+1;
2055 }
2056 }
2057 i++;
2058 }
2059 // oops no endmarker found...
2060 return i<len ? i+1 : len;
2061}
size_t length() const
Returns the length of the string, not counting the 0-terminator.
Definition qcstring.h:166
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
int qstrncmp(const char *str1, const char *str2, size_t len)
Definition qcstring.h:75

References QCString::data(), QCString::length(), and qstrncmp().

Referenced by DocParser::processCopyDoc().

◆ validatingParseDoc()

IDocNodeASTPtr validatingParseDoc ( IDocParser & parserIntf,
const QCString & fileName,
int startLine,
const Definition * ctx,
const MemberDef * md,
const QCString & input,
const DocOptions & options )

Main entry point for the comment block parser.

Parameters
parserIntfThe parser object created via createDocParser()
fileNameFile in which the documentation block is found (or the name of the example file in case isExample is TRUE).
startLineLine at which the documentation block is found.
ctxClass or namespace to which this block belongs.
mdMember definition to which the documentation belongs. Can be 0.
inputString representation of the documentation block.
optionsOptional parameters.
Returns
An object representing the abstract syntax tree. Ownership of the pointer is handed over to the caller.

Definition at line 2177 of file docparser.cpp.

2184{
2185 DocParser *parser = dynamic_cast<DocParser*>(&parserIntf);
2186 assert(parser!=nullptr);
2187 if (parser==nullptr) return nullptr;
2188 //printf("validatingParseDoc(%s,%s)=[%s]\n",ctx?qPrint(ctx->name()):"<none>",
2189 // md?qPrint(md->name()):"<none>",
2190 // qPrint(input));
2191 //printf("========== validating %s at line %d\n",qPrint(fileName),startLine);
2192 //printf("---------------- input --------------------\n%s\n----------- end input -------------------\n",qPrint(input));
2193
2194 // set initial token
2195 parser->context.token = parser->tokenizer.resetToken();
2196
2197 if (ctx && ctx!=Doxygen::globalScope &&
2200 )
2201 )
2202 {
2204 }
2205 else if (ctx && ctx->definitionType()==Definition::TypePage)
2206 {
2207 const Definition *scope = (toPageDef(ctx))->getPageScope();
2208 if (scope && scope!=Doxygen::globalScope)
2209 {
2210 parser->context.context = substitute(scope->name(),getLanguageSpecificSeparator(scope->getLanguage(),true),"::");
2211 }
2212 }
2213 else if (ctx && ctx->definitionType()==Definition::TypeGroup)
2214 {
2215 const Definition *scope = (toGroupDef(ctx))->getGroupScope();
2216 if (scope && scope!=Doxygen::globalScope)
2217 {
2218 parser->context.context = substitute(scope->name(),getLanguageSpecificSeparator(scope->getLanguage(),true),"::");
2219 }
2220 }
2221 else
2222 {
2223 parser->context.context = "";
2224 }
2225 parser->context.scope = ctx;
2226 parser->context.lang = getLanguageFromFileName(fileName);
2227
2228 if (options.indexWords() && Doxygen::searchIndex.enabled())
2229 {
2230 if (md)
2231 {
2232 parser->context.searchUrl=md->getOutputFileBase();
2233 Doxygen::searchIndex.setCurrentDoc(md,md->anchor(),false);
2234 }
2235 else if (ctx)
2236 {
2237 parser->context.searchUrl=ctx->getOutputFileBase();
2238 Doxygen::searchIndex.setCurrentDoc(ctx,ctx->anchor(),false);
2239 }
2240 }
2241 else
2242 {
2243 parser->context.searchUrl="";
2244 }
2245
2246 parser->context.fileName = fileName;
2247 parser->context.relPath = (!options.linkFromIndex() && ctx) ?
2249 QCString("");
2250 //printf("ctx->name=%s relPath=%s\n",qPrint(ctx->name()),qPrint(parser->context.relPath));
2251 parser->context.memberDef = md;
2252 while (!parser->context.nodeStack.empty()) parser->context.nodeStack.pop();
2253 while (!parser->context.styleStack.empty()) parser->context.styleStack.pop();
2254 while (!parser->context.initialStyleStack.empty()) parser->context.initialStyleStack.pop();
2255 parser->context.inSeeBlock = FALSE;
2256 parser->context.inCodeStyle = FALSE;
2257 parser->context.xmlComment = FALSE;
2258 parser->context.insideHtmlLink = FALSE;
2259 parser->context.includeFileText = "";
2260 parser->context.includeFileOffset = 0;
2261 parser->context.includeFileLength = 0;
2262 parser->context.isExample = options.isExample();
2263 parser->context.exampleName = options.exampleName();
2264 parser->context.hasParamCommand = FALSE;
2265 parser->context.hasReturnCommand = FALSE;
2266 parser->context.retvalsFound.clear();
2267 parser->context.paramsFound.clear();
2268 parser->context.markdownSupport = options.markdownSupport();
2269 parser->context.autolinkSupport = options.autolinkSupport();
2270 if (md)
2271 {
2272 const ArgumentList &al=md->isDocsForDefinition() ? md->argumentList() : md->declArgumentList();
2273 parser->context.numParameters = static_cast<int>(al.size());
2274 }
2275 else
2276 {
2277 parser->context.numParameters = 0;
2278 }
2279 parser->context.paramPosition = 1;
2280
2281 //printf("Starting comment block at %s:%d\n",qPrint(parser->context.fileName),startLine);
2282 parser->tokenizer.setFileName(fileName);
2283 parser->tokenizer.setLineNr(startLine);
2284 size_t ioLen = input.length();
2285 QCString inpStr = parser->processCopyDoc(input.data(),ioLen);
2286 if (inpStr.isEmpty() || inpStr.at(inpStr.length()-1)!='\n')
2287 {
2288 inpStr+='\n';
2289 }
2290 //printf("processCopyDoc(in='%s' out='%s')\n",qPrint(input),qPrint(inpStr));
2291 parser->tokenizer.init(inpStr.data(),parser->context.fileName,
2293
2294 // build abstract syntax tree
2295 auto ast = std::make_unique<DocNodeAST>(DocRoot(parser,md!=nullptr,options.singleLine()));
2296 std::get<DocRoot>(ast->root).parse();
2297
2299 {
2300 // pretty print the result
2301 std::visit(PrintDocVisitor{},ast->root);
2302 }
2303
2304 if (md && md->isFunction())
2305 {
2306 parser->checkUnOrMultipleDocumentedParams();
2307 }
2309
2310 // reset token
2311 parser->tokenizer.resetToken();
2312
2313 //printf(">>>>>> end validatingParseDoc(%s,%s)\n",ctx?qPrint(ctx->name()):"<none>",
2314 // md?qPrint(md->name()):"<none>");
2315
2316 return ast;
2317}
This class represents an function or template argument list.
Definition arguments.h:65
size_t size() const
Definition arguments.h:100
@ PrintTree
Definition debug.h:34
static bool isFlagSet(const DebugMask mask)
Definition debug.cpp:133
The common base class of all entity definitions found in the sources.
Definition definition.h:77
virtual SrcLangExt getLanguage() const =0
Returns the programming language this definition was written in.
virtual DefType definitionType() const =0
virtual QCString anchor() const =0
virtual QCString qualifiedName() const =0
virtual QCString getOutputFileBase() const =0
virtual const QCString & name() const =0
QCString processCopyDoc(const char *data, size_t &len)
Root node of documentation tree.
Definition docnode.h:1318
void init(const char *input, const QCString &fileName, bool markdownSupport, bool insideHtmlLink)
TokenInfo * resetToken()
static NamespaceDefMutable * globalScope
Definition doxygen.h:121
static SearchIndexIntf searchIndex
Definition doxygen.h:124
virtual const ArgumentList & argumentList() const =0
virtual bool isFunction() const =0
virtual bool isDocsForDefinition() const =0
virtual void detectUndocumentedParams(bool hasParamCommand, bool hasReturnCommand) const =0
virtual const ArgumentList & declArgumentList() const =0
char & at(size_t i)
Returns a reference to the character at index i.
Definition qcstring.h:593
GroupDef * toGroupDef(Definition *d)
PageDef * toPageDef(Definition *d)
Definition pagedef.cpp:502
QCString substitute(const QCString &s, const QCString &src, const QCString &dst)
substitute all occurrences of src in s by dst
Definition qcstring.cpp:571
bool autolinkSupport() const
Definition docoptions.h:32
bool linkFromIndex() const
Definition docoptions.h:30
bool markdownSupport() const
Definition docoptions.h:31
QCString exampleName() const
Definition docoptions.h:28
bool indexWords() const
Definition docoptions.h:26
bool singleLine() const
Definition docoptions.h:29
bool isExample() const
Definition docoptions.h:27
StringMultiSet retvalsFound
Definition docparser_p.h:76
DocStyleChangeStack styleStack
Definition docparser_p.h:68
size_t includeFileLength
Definition docparser_p.h:90
DocNodeStack nodeStack
Definition docparser_p.h:67
StringMultiSet paramsFound
Definition docparser_p.h:77
QCString exampleName
Definition docparser_p.h:82
const Definition * scope
Definition docparser_p.h:61
QCString includeFileText
Definition docparser_p.h:88
TokenInfo * token
Definition docparser_p.h:95
DocStyleChangeStack initialStyleStack
Definition docparser_p.h:69
SrcLangExt lang
Definition docparser_p.h:85
QCString searchUrl
Definition docparser_p.h:83
size_t includeFileOffset
Definition docparser_p.h:89
const MemberDef * memberDef
Definition docparser_p.h:80
SrcLangExt getLanguageFromFileName(const QCString &fileName, SrcLangExt defLang)
Definition util.cpp:5231
QCString relativePathToRoot(const QCString &name)
Definition util.cpp:3600
QCString getLanguageSpecificSeparator(SrcLangExt lang, bool classScope)
Returns the scope separator to use given the programming language lang.
Definition util.cpp:5915

References Definition::anchor(), MemberDef::argumentList(), QCString::at(), DocOptions::autolinkSupport(), DocParserContext::autolinkSupport, DocParser::checkUnOrMultipleDocumentedParams(), DocParser::context, DocParserContext::context, QCString::data(), MemberDef::declArgumentList(), Definition::definitionType(), MemberDef::detectUndocumentedParams(), DocOptions::exampleName(), DocParserContext::exampleName, FALSE, DocParserContext::fileName, Definition::getLanguage(), getLanguageFromFileName(), getLanguageSpecificSeparator(), Definition::getOutputFileBase(), Doxygen::globalScope, DocParserContext::hasParamCommand, DocParserContext::hasReturnCommand, DocParserContext::includeFileLength, DocParserContext::includeFileOffset, DocParserContext::includeFileText, DocParserContext::inCodeStyle, DocOptions::indexWords(), DocTokenizer::init(), DocParserContext::initialStyleStack, DocParserContext::inSeeBlock, DocParserContext::insideHtmlLink, MemberDef::isDocsForDefinition(), QCString::isEmpty(), DocOptions::isExample(), DocParserContext::isExample, Debug::isFlagSet(), MemberDef::isFunction(), DocParserContext::lang, QCString::length(), DocOptions::linkFromIndex(), DocOptions::markdownSupport(), DocParserContext::markdownSupport, DocParserContext::memberDef, Definition::name(), DocParserContext::nodeStack, DocParserContext::numParameters, DocParserContext::paramPosition, DocParserContext::paramsFound, Debug::PrintTree, DocParser::processCopyDoc(), Definition::qualifiedName(), relativePathToRoot(), DocParserContext::relPath, DocTokenizer::resetToken(), DocParserContext::retvalsFound, DocParserContext::scope, Doxygen::searchIndex, DocParserContext::searchUrl, DocTokenizer::setFileName(), DocTokenizer::setLineNr(), DocOptions::singleLine(), ArgumentList::size(), DocParserContext::styleStack, substitute(), toGroupDef(), DocParserContext::token, DocParser::tokenizer, toPageDef(), Definition::TypeClass, Definition::TypeGroup, Definition::TypeNamespace, Definition::TypePage, and DocParserContext::xmlComment.

Referenced by addPerlModDocBlock(), generateBriefDoc(), OutputList::generateDoc(), generateHtmlOutput(), getSQLDocBlock(), parseCommentAsText(), ConceptDefImpl::writeBriefDescription(), DirDefImpl::writeBriefDescription(), FileDefImpl::writeBriefDescription(), GroupDefImpl::writeBriefDescription(), ModuleDefImpl::writeBriefDescription(), NamespaceDefImpl::writeBriefDescription(), MemberDefImpl::writeDeclaration(), ClassDefImpl::writeDeclarationLink(), ConceptDefImpl::writeDeclarationLink(), ModuleDefImpl::writeDeclarationLink(), MemberList::writePlainDeclarations(), and writeXMLDocBlock().

◆ validatingParseText()

IDocNodeASTPtr validatingParseText ( IDocParser & parser,
const QCString & input )

Main entry point for parsing simple text fragments. These fragments are limited to words, whitespace and symbols.

Definition at line 2372 of file docparser.cpp.

2373{
2374 DocParser *parser = dynamic_cast<DocParser*>(&parserIntf);
2375 assert(parser!=nullptr);
2376 if (parser==nullptr) return nullptr;
2377
2378 // set initial token
2379 parser->context.token = parser->tokenizer.resetToken();
2380
2381 //printf("------------ input ---------\n%s\n"
2382 // "------------ end input -----\n",input);
2383 //parser->context.token = new TokenInfo;
2384 parser->context.context = "";
2385 parser->context.fileName = "<parseText>";
2386 parser->context.relPath = "";
2387 parser->context.memberDef = nullptr;
2388 while (!parser->context.nodeStack.empty()) parser->context.nodeStack.pop();
2389 while (!parser->context.styleStack.empty()) parser->context.styleStack.pop();
2390 while (!parser->context.initialStyleStack.empty()) parser->context.initialStyleStack.pop();
2391 parser->context.inSeeBlock = FALSE;
2392 parser->context.inCodeStyle = FALSE;
2393 parser->context.xmlComment = FALSE;
2394 parser->context.insideHtmlLink = FALSE;
2395 parser->context.includeFileText = "";
2396 parser->context.includeFileOffset = 0;
2397 parser->context.includeFileLength = 0;
2398 parser->context.isExample = FALSE;
2399 parser->context.exampleName = "";
2400 parser->context.hasParamCommand = FALSE;
2401 parser->context.hasReturnCommand = FALSE;
2402 parser->context.retvalsFound.clear();
2403 parser->context.paramsFound.clear();
2404 parser->context.searchUrl="";
2405 parser->context.lang = SrcLangExt::Unknown;
2406 parser->context.markdownSupport = Config_getBool(MARKDOWN_SUPPORT);
2407 parser->context.autolinkSupport = FALSE;
2408
2409
2410 auto ast = std::make_unique<DocNodeAST>(DocText(parser));
2411
2412 if (!input.isEmpty())
2413 {
2414 parser->tokenizer.setLineNr(1);
2415 parser->tokenizer.init(input.data(),parser->context.fileName,
2417
2418 // build abstract syntax tree
2419 std::get<DocText>(ast->root).parse();
2420
2422 {
2423 // pretty print the result
2424 std::visit(PrintDocVisitor{},ast->root);
2425 }
2426 }
2427
2428 return ast;
2429}
Root node of a text fragment.
Definition docnode.h:1309
#define Config_getBool(name)
Definition config.h:33

References DocParserContext::autolinkSupport, Config_getBool, DocParser::context, DocParserContext::context, QCString::data(), DocParserContext::exampleName, FALSE, DocParserContext::fileName, DocParserContext::hasParamCommand, DocParserContext::hasReturnCommand, DocParserContext::includeFileLength, DocParserContext::includeFileOffset, DocParserContext::includeFileText, DocParserContext::inCodeStyle, DocTokenizer::init(), DocParserContext::initialStyleStack, DocParserContext::inSeeBlock, DocParserContext::insideHtmlLink, QCString::isEmpty(), DocParserContext::isExample, Debug::isFlagSet(), DocParserContext::lang, DocParserContext::markdownSupport, DocParserContext::memberDef, DocParserContext::nodeStack, DocParserContext::paramsFound, Debug::PrintTree, DocParserContext::relPath, DocTokenizer::resetToken(), DocParserContext::retvalsFound, DocParserContext::searchUrl, DocTokenizer::setLineNr(), DocParserContext::styleStack, DocParserContext::token, DocParser::tokenizer, and DocParserContext::xmlComment.

Referenced by RTFGenerator::endIndexSection(), and OutputList::parseText().

◆ validatingParseTitle()

IDocNodeASTPtr validatingParseTitle ( IDocParser & parserIntf,
const QCString & fileName,
int lineNr,
const QCString & input )

Main entry point for parsing titles. These allow limited markup commands

Definition at line 2319 of file docparser.cpp.

2320{
2321 DocParser *parser = dynamic_cast<DocParser*>(&parserIntf);
2322 assert(parser!=nullptr);
2323 if (parser==nullptr) return nullptr;
2324
2325 // set initial token
2326 parser->context.token = parser->tokenizer.resetToken();
2327
2328 //printf("------------ input ---------\n%s\n"
2329 // "------------ end input -----\n",input);
2330 parser->context.context = "";
2331 parser->context.fileName = fileName;
2332 parser->context.relPath = "";
2333 parser->context.memberDef = nullptr;
2334 while (!parser->context.nodeStack.empty()) parser->context.nodeStack.pop();
2335 while (!parser->context.styleStack.empty()) parser->context.styleStack.pop();
2336 while (!parser->context.initialStyleStack.empty()) parser->context.initialStyleStack.pop();
2337 parser->context.inSeeBlock = FALSE;
2338 parser->context.inCodeStyle = FALSE;
2339 parser->context.xmlComment = FALSE;
2340 parser->context.insideHtmlLink = FALSE;
2341 parser->context.includeFileText = "";
2342 parser->context.includeFileOffset = 0;
2343 parser->context.includeFileLength = 0;
2344 parser->context.isExample = FALSE;
2345 parser->context.exampleName = "";
2346 parser->context.hasParamCommand = FALSE;
2347 parser->context.hasReturnCommand = FALSE;
2348 parser->context.retvalsFound.clear();
2349 parser->context.paramsFound.clear();
2350 parser->context.searchUrl="";
2351 parser->context.lang = SrcLangExt::Unknown;
2352 parser->context.markdownSupport = Config_getBool(MARKDOWN_SUPPORT);
2353 parser->context.autolinkSupport = false;
2354
2355 auto ast = std::make_unique<DocNodeAST>(DocTitle(parser,nullptr));
2356
2357 if (!input.isEmpty())
2358 {
2359 // build abstract syntax tree from title string
2360 std::get<DocTitle>(ast->root).parseFromString(nullptr,input);
2361
2363 {
2364 // pretty print the result
2365 std::visit(PrintDocVisitor{},ast->root);
2366 }
2367 }
2368
2369 return ast;
2370}
Node representing a simple section title.
Definition docnode.h:608

References DocParserContext::autolinkSupport, Config_getBool, DocParser::context, DocParserContext::context, DocParserContext::exampleName, FALSE, DocParserContext::fileName, DocParserContext::hasParamCommand, DocParserContext::hasReturnCommand, DocParserContext::includeFileLength, DocParserContext::includeFileOffset, DocParserContext::includeFileText, DocParserContext::inCodeStyle, DocParserContext::initialStyleStack, DocParserContext::inSeeBlock, DocParserContext::insideHtmlLink, QCString::isEmpty(), DocParserContext::isExample, Debug::isFlagSet(), DocParserContext::lang, DocParserContext::markdownSupport, DocParserContext::memberDef, DocParserContext::nodeStack, DocParserContext::paramsFound, Debug::PrintTree, DocParserContext::relPath, DocTokenizer::resetToken(), DocParserContext::retvalsFound, DocParserContext::searchUrl, DocParserContext::styleStack, DocParserContext::token, DocParser::tokenizer, and DocParserContext::xmlComment.

Referenced by parseCommentAsHtml().