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

#include <src/docparser.h>

Include dependency graph for docparser.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

class  IDocParser
 opaque parser interface More...
class  IDocNodeAST
 opaque representation of the abstract syntax tree (AST) More...

Typedefs

using IDocParserPtr = std::unique_ptr<IDocParser>
 pointer to parser interface
using IDocNodeASTPtr = std::unique_ptr<IDocNodeAST>

Functions

IDocParserPtr createDocParser ()
 factory function to create a parser
IDocNodeASTPtr validatingParseDoc (IDocParser &parserIntf, const DString &fileName, int startLine, const Definition *ctx, const MemberDef *md, const DString &input, const DocOptions &options)
IDocNodeASTPtr validatingParseText (IDocParser &parser, const DString &input)
IDocNodeASTPtr validatingParseTitle (IDocParser &parserIntf, const DString &fileName, int lineNr, const DString &input)
IDocNodeASTPtr createRef (IDocParser &parser, const DString &target, const DString &context, const DString &srcFile="", int srcLine=-1)
void docFindSections (const DString &input, const Definition *d, const DString &fileName)
DString parseCommentAsText (const Definition *scope, const MemberDef *md, const DString &doc, const DString &fileName, int lineNr)
DString parseCommentAsHtml (const Definition *scope, const MemberDef *member, const DString &doc, const DString &fileName, int lineNr)

Typedef Documentation

◆ IDocNodeASTPtr

using IDocNodeASTPtr = std::unique_ptr<IDocNodeAST>

Definition at line 57 of file docparser.h.

◆ IDocParserPtr

using IDocParserPtr = std::unique_ptr<IDocParser>

pointer to parser interface

Definition at line 41 of file docparser.h.

Function Documentation

◆ createDocParser()

◆ createRef()

IDocNodeASTPtr createRef ( IDocParser & parser,
const DString & target,
const DString & context,
const DString & srcFile = "",
int srcLine = -1 )

Definition at line 2459 of file docparser.cpp.

2460{
2461 DocParser *parser = dynamic_cast<DocParser*>(&parserIntf);
2462 ASSERT(parser!=nullptr);
2463 if (parser==nullptr) return nullptr;
2464 if (!srcFile.empty())
2465 {
2466 parser->context.fileName = srcFile;
2467 parser->tokenizer.setFileName(srcFile);
2468 parser->tokenizer.setLineNr(srcLine);
2469 }
2470 return std::make_unique<DocNodeAST>(DocRef(parser,nullptr,target,context));
2471}
bool empty() const
Returns true iff the string is empty (std::string compatible alias for isEmpty()).
Definition dstring.h:148
DocTokenizer tokenizer
DocParserContext context
Node representing a reference to some item.
Definition docnode.h:787
void setLineNr(int lineno)
void setFileName(const DString &fileName)
#define ASSERT(x)
Definition message.h:142

References ASSERT, DocParser::context, DString::empty(), DocParserContext::fileName, DocTokenizer::setFileName(), DocTokenizer::setLineNr(), and DocParser::tokenizer.

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

◆ docFindSections()

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

◆ parseCommentAsHtml()

DString parseCommentAsHtml ( const Definition * scope,
const MemberDef * member,
const DString & doc,
const DString & fileName,
int lineNr )

Definition at line 2592 of file docparser.cpp.

2594{
2595 static std::mutex s_docCacheMutex;
2596 static std::unordered_map<std::string,DString> s_docCache;
2597
2598 std::lock_guard lock(s_docCacheMutex);
2599 auto it = s_docCache.find(doc.str());
2600 if (it != s_docCache.end())
2601 {
2602 //printf("Cache: [%s]->[%s]\n",qPrint(doc),qPrint(it->second));
2603 return it->second;
2604 }
2605 auto parser { createDocParser() };
2606 auto ast { validatingParseTitle(*parser.get(),fileName,lineNr,doc) };
2607 auto astImpl = dynamic_cast<const DocNodeAST*>(ast.get());
2608 DString result;
2609 if (astImpl)
2610 {
2611 TextStream t;
2612 OutputCodeList codeList;
2613 codeList.add<HtmlCodeGenerator>(&t);
2614 HtmlDocVisitor visitor(t,codeList,scope,fileName);
2615 std::visit(visitor,astImpl->root);
2616 result = t.str();
2617 }
2618 else // fallback, should not happen
2619 {
2620 result = filterTitle(doc);
2621 }
2622 //printf("Conversion: [%s]->[%s]\n",qPrint(doc),qPrint(result));
2623 s_docCache.insert(std::make_pair(doc.str(),result));
2624 return result;
2625}
A String class for use with Doxygen wrapping std::string and adding some additional functionality off...
Definition dstring.h:84
const std::string & str() const
Definition dstring.h:645
DString & insert(size_t index, const DString &s)
Definition dstring.h:425
Class representing the abstract syntax tree of a documentation block.
Definition docnode.h:1471
Generator for HTML code fragments.
Definition htmlgen.h:23
Concrete visitor implementation for HTML output.
Class representing a list of different code generators.
Definition outputlist.h:162
void add(OutputCodeIntfPtr &&p)
Definition outputlist.h:192
Text streaming class that buffers data.
Definition textstream.h:36
std::string str() const
Return the contents of the buffer as a std::string object.
Definition textstream.h:232
IDocNodeASTPtr validatingParseTitle(IDocParser &parserIntf, const DString &fileName, int lineNr, const DString &input)
IDocParserPtr createDocParser()
factory function to create a parser
Definition docparser.cpp:59
DString filterTitle(const DString &title)
Definition util.cpp:4463

References OutputCodeList::add(), createDocParser(), filterTitle(), DString::insert(), DString::str(), TextStream::str(), and validatingParseTitle().

Referenced by PageDefImpl::addSectionsToIndex(), SearchTerm::makeTitle(), DefinitionImpl::navigationPathAsString(), LayoutNavEntry::titleAsHtml(), and writeJavasScriptSearchDataPage().

◆ parseCommentAsText()

DString parseCommentAsText ( const Definition * scope,
const MemberDef * md,
const DString & doc,
const DString & fileName,
int lineNr )

Definition at line 2528 of file docparser.cpp.

2530{
2531 if (doc.empty()) return "";
2532 static std::mutex s_docCacheMutex;
2533 static std::unordered_map<std::string,DString> s_docCache;
2534
2535 std::lock_guard lock(s_docCacheMutex);
2536 auto it = s_docCache.find(doc.str());
2537 if (it != s_docCache.end())
2538 {
2539 //printf("Cache: [%s]->[%s]\n",qPrint(doc),qPrint(it->second));
2540 return it->second;
2541 }
2542 //printf("parseCommentAsText(%s)\n",qPrint(doc));
2543 TextStream t;
2544 auto parser { createDocParser() };
2545 auto ast { validatingParseDoc(*parser.get(),
2546 fileName,
2547 lineNr,
2548 scope,
2549 md,
2550 doc,
2551 DocOptions()
2552 .setAutolinkSupport(false))
2553 };
2554 auto astImpl = dynamic_cast<const DocNodeAST*>(ast.get());
2555 if (astImpl)
2556 {
2557 TextDocVisitor visitor(t);
2558 std::visit(visitor,astImpl->root);
2559 }
2561 int i=0;
2562 int charCnt=0;
2563 int l=static_cast<int>(result.length());
2564 while ((i=nextUTF8CharPosition(result,l,i))<l)
2565 {
2566 charCnt++;
2567 if (charCnt>=80) break;
2568 }
2569 if (charCnt>=80) // try to truncate the string
2570 {
2571 while ((i=nextUTF8CharPosition(result,l,i))<l && charCnt<100)
2572 {
2573 charCnt++;
2574 if (result.at(i)==',' ||
2575 result.at(i)=='.' ||
2576 result.at(i)=='!' ||
2577 result.at(i)=='?' ||
2578 result.at(i)=='}') // good for UTF-16 characters and } otherwise also a good point to stop the string
2579 {
2580 i++; // we want to be "behind" last inspected character
2581 break;
2582 }
2583 }
2584 }
2585 if ( i < l) result=result.left(i)+"...";
2586 s_docCache.insert(std::make_pair(doc.str(),result));
2587 return result.data();
2588}
char & at(size_t i)
Returns a reference to the character at index i.
Definition dstring.h:686
DString stripWhiteSpace() const
returns a copy of this string with leading and trailing whitespace removed
Definition dstring.h:337
DString left(size_t len) const
Definition dstring.h:306
const char * data() const
Returns a pointer to the contents of the string in the form of a 0-terminated C string.
Definition dstring.h:157
size_t length() const
Returns the length of the string, not counting the 0-terminator.
Definition dstring.h:151
static HtmlEntityMapper & instance()
Returns the one and only instance of the HTML entity mapper.
DString convertCharEntitiesToUTF8(const DString &s) const
Concrete visitor implementation for TEXT output.
static int nextUTF8CharPosition(const DString &utf8Str, uint32_t len, uint32_t startPos)
IDocNodeASTPtr validatingParseDoc(IDocParser &parserIntf, const DString &fileName, int startLine, const Definition *ctx, const MemberDef *md, const DString &input, const DocOptions &options)
Helper class to pass options when calling OutputList::generateDoc().
Definition docoptions.h:24

References DString::at(), HtmlEntityMapper::convertCharEntitiesToUTF8(), createDocParser(), DString::data(), DString::empty(), DString::insert(), HtmlEntityMapper::instance(), DString::left(), DString::length(), nextUTF8CharPosition(), DString::str(), TextStream::str(), DString::stripWhiteSpace(), and validatingParseDoc().

Referenced by RequirementManager::addRequirement(), PageDefImpl::addSectionsToIndex(), DefinitionImpl::computeTooltip(), GroupDefImpl::setGroupTitleLocal(), PageDefImpl::setTitle(), LayoutNavEntry::title(), and RequirementManager::writeRef().

◆ validatingParseDoc()

IDocNodeASTPtr validatingParseDoc ( IDocParser & parserIntf,
const DString & fileName,
int startLine,
const Definition * ctx,
const MemberDef * md,
const DString & 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 2205 of file docparser.cpp.

2212{
2213 DocParser *parser = dynamic_cast<DocParser*>(&parserIntf);
2214 ASSERT(parser!=nullptr);
2215 if (parser==nullptr) return nullptr;
2216 //printf("validatingParseDoc(%s,%s)=[%s]\n",ctx?qPrint(ctx->name()):"<none>",
2217 // md?qPrint(md->name()):"<none>",
2218 // qPrint(input));
2219 //printf("========== validating %s at line %d\n",qPrint(fileName),startLine);
2220 //printf("---------------- input --------------------\n%s\n----------- end input -------------------\n",qPrint(input));
2221
2222 // set initial token
2223 parser->context.token = parser->tokenizer.resetToken();
2224
2225 if (ctx && ctx!=Doxygen::globalScope &&
2228 )
2229 )
2230 {
2232 }
2233 else if (ctx && ctx->definitionType()==Definition::TypePage)
2234 {
2235 const Definition *scope = (toPageDef(ctx))->getPageScope();
2236 if (scope && scope!=Doxygen::globalScope)
2237 {
2238 parser->context.context = substitute(scope->name(),getLanguageSpecificSeparator(scope->getLanguage(),true),"::");
2239 }
2240 }
2241 else if (ctx && ctx->definitionType()==Definition::TypeGroup)
2242 {
2243 const Definition *scope = (toGroupDef(ctx))->getGroupScope();
2244 if (scope && scope!=Doxygen::globalScope)
2245 {
2246 parser->context.context = substitute(scope->name(),getLanguageSpecificSeparator(scope->getLanguage(),true),"::");
2247 }
2248 }
2249 else
2250 {
2251 parser->context.context = "";
2252 }
2253 parser->context.scope = ctx;
2254 parser->context.lang = getLanguageFromFileName(fileName);
2255
2256 if (options.indexWords() && Doxygen::searchIndex.enabled())
2257 {
2258 if (md)
2259 {
2260 parser->context.searchUrl=md->getOutputFileBase();
2262 }
2263 else if (ctx)
2264 {
2265 parser->context.searchUrl=ctx->getOutputFileBase();
2266 Doxygen::searchIndex.setCurrentDoc(ctx,ctx->anchor(),false);
2267 }
2268 }
2269 else
2270 {
2271 parser->context.searchUrl="";
2272 }
2273
2274 parser->context.fileName = fileName;
2275 parser->context.relPath = (!options.linkFromIndex() && ctx) ?
2277 DString("");
2278 //printf("ctx->name=%s relPath=%s\n",qPrint(ctx->name()),qPrint(parser->context.relPath));
2279 parser->context.memberDef = md;
2280 while (!parser->context.nodeStack.empty()) parser->context.nodeStack.pop();
2281 while (!parser->context.styleStack.empty()) parser->context.styleStack.pop();
2282 while (!parser->context.initialStyleStack.empty()) parser->context.initialStyleStack.pop();
2283 parser->context.inSeeBlock = false;
2284 parser->context.inCodeStyle = false;
2285 parser->context.xmlComment = false;
2286 parser->context.insideHtmlLink = false;
2287 parser->context.includeFileText = "";
2288 parser->context.includeFileOffset = 0;
2289 parser->context.includeFileLength = 0;
2290 parser->context.isExample = options.isExample();
2291 parser->context.exampleName = options.exampleName();
2292 parser->context.hasParamCommand = false;
2293 parser->context.hasReturnCommand = false;
2294 parser->context.retvalsFound.clear();
2295 parser->context.paramsFound.clear();
2296 parser->context.markdownSupport = options.markdownSupport();
2297 parser->context.autolinkSupport = options.autolinkSupport();
2298 if (md)
2299 {
2300 const ArgumentList &al=md->isDocsForDefinition() ? md->argumentList() : md->declArgumentList();
2301 parser->context.numParameters = static_cast<int>(al.size());
2302 }
2303 else
2304 {
2305 parser->context.numParameters = 0;
2306 }
2307 parser->context.paramPosition = 1;
2308
2309 //printf("Starting comment block at %s:%d\n",qPrint(parser->context.fileName),startLine);
2310 parser->tokenizer.setFileName(fileName);
2311 parser->tokenizer.setLineNr(startLine);
2312 size_t ioLen = input.length();
2313 DString inpStr = parser->processCopyDoc(input.data(),ioLen);
2314 if (inpStr.empty() || inpStr.at(inpStr.length()-1)!='\n')
2315 {
2316 inpStr+='\n';
2317 }
2318 //printf("processCopyDoc(in='%s' out='%s')\n",qPrint(input),qPrint(inpStr));
2319 parser->tokenizer.init(inpStr.data(),parser->context.fileName,
2321
2322 // build abstract syntax tree
2323 auto ast = std::make_unique<DocNodeAST>(DocRoot(parser,md!=nullptr,options.singleLine()));
2324 std::get<DocRoot>(ast->root).parse();
2325
2327 {
2328 // pretty print the result
2329 std::visit(PrintDocVisitor{},ast->root);
2330 }
2331
2332 if (md && md->isFunction())
2333 {
2334 parser->checkUnOrMultipleDocumentedParams();
2335 }
2337
2338 // reset token
2339 parser->tokenizer.resetToken();
2340
2341 //printf(">>>>>> end validatingParseDoc(%s,%s)\n",ctx?qPrint(ctx->name()):"<none>",
2342 // md?qPrint(md->name()):"<none>");
2343
2344 return ast;
2345}
This class represents an function or template argument list.
Definition arguments.h:66
size_t size() const
Definition arguments.h:101
@ PrintTree
Definition debug.h:35
static bool isFlagSet(const DebugMask mask)
Definition debug.cpp:132
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 const DString & name() const =0
virtual DString qualifiedName() const =0
virtual DString anchor() const =0
virtual DString getOutputFileBase() const =0
DString processCopyDoc(const char *data, size_t &len)
Root node of documentation tree.
Definition docnode.h:1318
void init(const char *input, const DString &fileName, bool markdownSupport, bool insideHtmlLink)
TokenInfo * resetToken()
static NamespaceDefMutable * globalScope
Definition doxygen.h:114
static SearchIndexIntf searchIndex
Definition doxygen.h:117
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
void setCurrentDoc(const Definition *ctx, const DString &anchor, bool isSourceFile)
bool enabled() const
DString substitute(const DString &s, const DString &src, const DString &dst)
substitute all occurrences of src in s by dst
Definition dstring.cpp:485
GroupDef * toGroupDef(Definition *d)
PageDef * toPageDef(Definition *d)
Definition pagedef.cpp:656
bool autolinkSupport() const
Definition docoptions.h:33
DString exampleName() const
Definition docoptions.h:29
bool linkFromIndex() const
Definition docoptions.h:31
bool markdownSupport() const
Definition docoptions.h:32
bool indexWords() const
Definition docoptions.h:27
bool singleLine() const
Definition docoptions.h:30
bool isExample() const
Definition docoptions.h:28
StringMultiSet retvalsFound
Definition docparser_p.h:75
DocStyleChangeStack styleStack
Definition docparser_p.h:67
size_t includeFileLength
Definition docparser_p.h:89
DString includeFileText
Definition docparser_p.h:87
DocNodeStack nodeStack
Definition docparser_p.h:66
StringMultiSet paramsFound
Definition docparser_p.h:76
const Definition * scope
Definition docparser_p.h:60
TokenInfo * token
Definition docparser_p.h:94
DocStyleChangeStack initialStyleStack
Definition docparser_p.h:68
SrcLangExt lang
Definition docparser_p.h:84
size_t includeFileOffset
Definition docparser_p.h:88
const MemberDef * memberDef
Definition docparser_p.h:79
DString exampleName
Definition docparser_p.h:81
SrcLangExt getLanguageFromFileName(const DString &fileName, SrcLangExt defLang)
Definition util.cpp:4177
DString relativePathToRoot(const DString &name)
Definition util.cpp:2921
DString getLanguageSpecificSeparator(SrcLangExt lang, bool classScope)
Definition util.cpp:4638

References Definition::anchor(), MemberDef::argumentList(), ASSERT, DString::at(), DocOptions::autolinkSupport(), DocParserContext::autolinkSupport, DocParser::checkUnOrMultipleDocumentedParams(), DocParser::context, DocParserContext::context, DString::data(), MemberDef::declArgumentList(), Definition::definitionType(), MemberDef::detectUndocumentedParams(), DString::empty(), SearchIndexIntf::enabled(), DocOptions::exampleName(), DocParserContext::exampleName, 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(), DocOptions::isExample(), DocParserContext::isExample, Debug::isFlagSet(), MemberDef::isFunction(), DocParserContext::lang, DString::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, SearchIndexIntf::setCurrentDoc(), 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 DString & input )

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

Definition at line 2400 of file docparser.cpp.

2401{
2402 DocParser *parser = dynamic_cast<DocParser*>(&parserIntf);
2403 ASSERT(parser!=nullptr);
2404 if (parser==nullptr) return nullptr;
2405
2406 // set initial token
2407 parser->context.token = parser->tokenizer.resetToken();
2408
2409 //printf("------------ input ---------\n%s\n"
2410 // "------------ end input -----\n",input);
2411 //parser->context.token = new TokenInfo;
2412 parser->context.context = "";
2413 parser->context.fileName = "<parseText>";
2414 parser->context.relPath = "";
2415 parser->context.memberDef = nullptr;
2416 while (!parser->context.nodeStack.empty()) parser->context.nodeStack.pop();
2417 while (!parser->context.styleStack.empty()) parser->context.styleStack.pop();
2418 while (!parser->context.initialStyleStack.empty()) parser->context.initialStyleStack.pop();
2419 parser->context.inSeeBlock = false;
2420 parser->context.inCodeStyle = false;
2421 parser->context.xmlComment = false;
2422 parser->context.insideHtmlLink = false;
2423 parser->context.includeFileText = "";
2424 parser->context.includeFileOffset = 0;
2425 parser->context.includeFileLength = 0;
2426 parser->context.isExample = false;
2427 parser->context.exampleName = "";
2428 parser->context.hasParamCommand = false;
2429 parser->context.hasReturnCommand = false;
2430 parser->context.retvalsFound.clear();
2431 parser->context.paramsFound.clear();
2432 parser->context.searchUrl="";
2433 parser->context.lang = SrcLangExt::Unknown;
2434 parser->context.markdownSupport = Config_getBool(MARKDOWN_SUPPORT);
2435 parser->context.autolinkSupport = false;
2436
2437
2438 auto ast = std::make_unique<DocNodeAST>(DocText(parser));
2439
2440 if (!input.empty())
2441 {
2442 parser->tokenizer.setLineNr(1);
2443 parser->tokenizer.init(input.data(),parser->context.fileName,
2445
2446 // build abstract syntax tree
2447 std::get<DocText>(ast->root).parse();
2448
2450 {
2451 // pretty print the result
2452 std::visit(PrintDocVisitor{},ast->root);
2453 }
2454 }
2455
2456 return ast;
2457}
Root node of a text fragment.
Definition docnode.h:1309
#define Config_getBool(name)
Definition config.h:33

References ASSERT, DocParserContext::autolinkSupport, Config_getBool, DocParser::context, DocParserContext::context, DString::data(), DString::empty(), DocParserContext::exampleName, DocParserContext::fileName, DocParserContext::hasParamCommand, DocParserContext::hasReturnCommand, DocParserContext::includeFileLength, DocParserContext::includeFileOffset, DocParserContext::includeFileText, DocParserContext::inCodeStyle, DocTokenizer::init(), DocParserContext::initialStyleStack, DocParserContext::inSeeBlock, DocParserContext::insideHtmlLink, 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 DString & fileName,
int lineNr,
const DString & input )

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

Definition at line 2347 of file docparser.cpp.

2348{
2349 DocParser *parser = dynamic_cast<DocParser*>(&parserIntf);
2350 ASSERT(parser!=nullptr);
2351 if (parser==nullptr) return nullptr;
2352
2353 // set initial token
2354 parser->context.token = parser->tokenizer.resetToken();
2355
2356 //printf("------------ input ---------\n%s\n"
2357 // "------------ end input -----\n",input);
2358 parser->context.context = "";
2359 parser->context.fileName = fileName;
2360 parser->context.relPath = "";
2361 parser->context.memberDef = nullptr;
2362 while (!parser->context.nodeStack.empty()) parser->context.nodeStack.pop();
2363 while (!parser->context.styleStack.empty()) parser->context.styleStack.pop();
2364 while (!parser->context.initialStyleStack.empty()) parser->context.initialStyleStack.pop();
2365 parser->context.inSeeBlock = false;
2366 parser->context.inCodeStyle = false;
2367 parser->context.xmlComment = false;
2368 parser->context.insideHtmlLink = false;
2369 parser->context.includeFileText = "";
2370 parser->context.includeFileOffset = 0;
2371 parser->context.includeFileLength = 0;
2372 parser->context.isExample = false;
2373 parser->context.exampleName = "";
2374 parser->context.hasParamCommand = false;
2375 parser->context.hasReturnCommand = false;
2376 parser->context.retvalsFound.clear();
2377 parser->context.paramsFound.clear();
2378 parser->context.searchUrl="";
2379 parser->context.lang = SrcLangExt::Unknown;
2380 parser->context.markdownSupport = Config_getBool(MARKDOWN_SUPPORT);
2381 parser->context.autolinkSupport = false;
2382
2383 auto ast = std::make_unique<DocNodeAST>(DocTitle(parser,nullptr));
2384
2385 if (!input.empty())
2386 {
2387 // build abstract syntax tree from title string
2388 std::get<DocTitle>(ast->root).parseFromString(nullptr,input);
2389
2391 {
2392 // pretty print the result
2393 std::visit(PrintDocVisitor{},ast->root);
2394 }
2395 }
2396
2397 return ast;
2398}
Node representing a simple section title.
Definition docnode.h:608

References ASSERT, DocParserContext::autolinkSupport, Config_getBool, DocParser::context, DocParserContext::context, DString::empty(), DocParserContext::exampleName, DocParserContext::fileName, DocParserContext::hasParamCommand, DocParserContext::hasReturnCommand, DocParserContext::includeFileLength, DocParserContext::includeFileOffset, DocParserContext::includeFileText, DocParserContext::inCodeStyle, DocParserContext::initialStyleStack, DocParserContext::inSeeBlock, DocParserContext::insideHtmlLink, 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().