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, bool indexWords, bool isExample, const QCString &exampleName, bool singleLine, bool linkFromIndex, bool markdownSupport)
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 1752 of file docparser.cpp.

1752#define CHECK_FOR_COMMAND(str,action) \
1753 do if ((i+sizeof(str)<len) && literal_at(data+i+1,str)) \
1754 { 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 2109 of file docparser.cpp.

2110{
2111 DocParser *parser = dynamic_cast<DocParser*>(&parserIntf);
2112 assert(parser!=nullptr);
2113 if (parser==nullptr) return nullptr;
2114 if (!srcFile.isEmpty())
2115 {
2116 parser->context.fileName = srcFile;
2117 parser->tokenizer.setLineNr(srcLine);
2118 }
2119 return std::make_unique<DocNodeAST>(DocRef(parser,nullptr,target,context));
2120}
DocTokenizer tokenizer
DocParserContext context
Node representing a reference to some item.
Definition docnode.h:773
void setLineNr(int lineno)
bool isEmpty() const
Returns TRUE iff the string is empty.
Definition qcstring.h:150
QCString fileName
Definition docparser_p.h:70

References DocParser::context, DocParserContext::fileName, QCString::isEmpty(), 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 1679 of file docparser.cpp.

1680{
1681 size_t s=j;
1682 int round=0;
1683 bool insideDQuote=FALSE;
1684 bool insideSQuote=FALSE;
1685 bool found=FALSE;
1686 while (j<len && !found)
1687 {
1688 if (!insideSQuote && !insideDQuote)
1689 {
1690 switch (data[j])
1691 {
1692 case '(': round++; break;
1693 case ')': round--; break;
1694 case '"': insideDQuote=TRUE; break;
1695 case '\'': insideSQuote=TRUE; break;
1696 case '\\': // fall through, begin of command
1697 case '@': // fall through, begin of command
1698 case '\t': // fall through
1699 case '\n':
1700 found=(round==0);
1701 break;
1702 case ' ': // allow spaces in cast operator (see issue #11169)
1703 found=(round==0) && (j<8 || !literal_at(data+j-8,"operator"));
1704 break;
1705 }
1706 }
1707 else if (insideSQuote) // look for single quote end
1708 {
1709 if (data[j]=='\'' && (j==0 || data[j]!='\\'))
1710 {
1711 insideSQuote=FALSE;
1712 }
1713 }
1714 else if (insideDQuote) // look for double quote end
1715 {
1716 if (data[j]=='"' && (j==0 || data[j]!='\\'))
1717 {
1718 insideDQuote=FALSE;
1719 }
1720 }
1721 if (!found) j++;
1722 }
1723
1724 // include const and volatile
1725 if (literal_at(data+j," const"))
1726 {
1727 j+=6;
1728 }
1729 else if (literal_at(data+j," volatile"))
1730 {
1731 j+=9;
1732 }
1733
1734 // allow '&' or '&&' or ' &' or ' &&' at the end
1735 size_t k=j;
1736 while (k<len && data[k]==' ') k++;
1737 if (k<len-1 && data[k]=='&' && data[k+1]=='&') j=k+2;
1738 else if (k<len && data[k]=='&' ) j=k+1;
1739
1740 // do not include punctuation added by Definition::_setBriefDescription()
1741 size_t e=j;
1742 if (j>0 && data[j-1]=='.') { e--; }
1743 QCString id(data+s,e-s);
1744 //printf("extractCopyDocId='%s' input='%s'\n",qPrint(id),&data[s]);
1745 return id;
1746}
This is an alternative implementation of QCString.
Definition qcstring.h:101
#define TRUE
Definition qcstring.h:37
#define FALSE
Definition qcstring.h:34
bool found
Definition util.cpp:984

References FALSE, found, 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 1756 of file docparser.cpp.

1757{
1758 size_t j=0;
1759 if (i==0 || (data[i-1]!='@' && data[i-1]!='\\')) // not an escaped command
1760 {
1761 CHECK_FOR_COMMAND("copybrief",brief=TRUE); // @copybrief or \copybrief
1762 CHECK_FOR_COMMAND("copydetails",brief=FALSE); // @copydetails or \copydetails
1763 }
1764 return j;
1765}
#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 1767 of file docparser.cpp.

1768{
1769 size_t j=0;
1770 if (i==0 || (data[i-1]!='@' && data[i-1]!='\\')) // not an escaped command
1771 {
1772 CHECK_FOR_COMMAND("dot",endMarker="enddot");
1773 CHECK_FOR_COMMAND("icode",endMarker="endicode");
1774 CHECK_FOR_COMMAND("code",endMarker="endcode");
1775 CHECK_FOR_COMMAND("msc",endMarker="endmsc");
1776 CHECK_FOR_COMMAND("iverbatim",endMarker="endiverbatim");
1777 CHECK_FOR_COMMAND("verbatim",endMarker="endverbatim");
1778 CHECK_FOR_COMMAND("iliteral",endMarker="endiliteral");
1779 CHECK_FOR_COMMAND("latexonly",endMarker="endlatexonly");
1780 CHECK_FOR_COMMAND("htmlonly",endMarker="endhtmlonly");
1781 CHECK_FOR_COMMAND("xmlonly",endMarker="endxmlonly");
1782 CHECK_FOR_COMMAND("rtfonly",endMarker="endrtfonly");
1783 CHECK_FOR_COMMAND("manonly",endMarker="endmanonly");
1784 CHECK_FOR_COMMAND("docbookonly",endMarker="enddocbookonly");
1785 CHECK_FOR_COMMAND("startuml",endMarker="enduml");
1786 }
1787 //printf("isVerbatimSection(%s)=%d)\n",qPrint(QCString(&data[i]).left(10)),j);
1788 return j;
1789}

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 1791 of file docparser.cpp.

1792{
1793 while (i<len)
1794 {
1795 if ((data[i]=='@' || data[i]=='\\') && // start of command character
1796 (i==0 || (data[i-1]!='@' && data[i-1]!='\\'))) // that is not escaped
1797 {
1798 if (i+endMarker.length()+1<=len && qstrncmp(data+i+1,endMarker.data(),endMarker.length())==0)
1799 {
1800 return i+endMarker.length()+1;
1801 }
1802 }
1803 i++;
1804 }
1805 // oops no endmarker found...
1806 return i<len ? i+1 : len;
1807}
size_t length() const
Returns the length of the string, not counting the 0-terminator.
Definition qcstring.h:153
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
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,
bool indexWords,
bool isExample,
const QCString & exampleName,
bool singleLine,
bool linkFromIndex,
bool markdownSupport )

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.
indexWordsIndicates whether or not words should be put in the search index.
isExampleTRUE if the documentation belongs to an example.
exampleNameBase name of the example file (0 if isExample is FALSE).
singleLineOutput should be presented on a single line, so without starting a new paragraph at the end.
linkFromIndexTRUE if the documentation is generated from an index page. In this case context is not used to determine the relative path when making a link.
markdownSupportTRUE if the input needs to take markdown markup into account.
Returns
An object representing the abstract syntax tree. Ownership of the pointer is handed over to the caller.

Definition at line 1923 of file docparser.cpp.

1930{
1931 DocParser *parser = dynamic_cast<DocParser*>(&parserIntf);
1932 assert(parser!=nullptr);
1933 if (parser==nullptr) return nullptr;
1934 //printf("validatingParseDoc(%s,%s)=[%s]\n",ctx?qPrint(ctx->name()):"<none>",
1935 // md?qPrint(md->name()):"<none>",
1936 // qPrint(input));
1937 //printf("========== validating %s at line %d\n",qPrint(fileName),startLine);
1938 //printf("---------------- input --------------------\n%s\n----------- end input -------------------\n",qPrint(input));
1939
1940 // set initial token
1941 parser->context.token = parser->tokenizer.resetToken();
1942
1943 if (ctx && ctx!=Doxygen::globalScope &&
1946 )
1947 )
1948 {
1950 }
1951 else if (ctx && ctx->definitionType()==Definition::TypePage)
1952 {
1953 const Definition *scope = (toPageDef(ctx))->getPageScope();
1954 if (scope && scope!=Doxygen::globalScope)
1955 {
1956 parser->context.context = substitute(scope->name(),getLanguageSpecificSeparator(scope->getLanguage(),true),"::");
1957 }
1958 }
1959 else if (ctx && ctx->definitionType()==Definition::TypeGroup)
1960 {
1961 const Definition *scope = (toGroupDef(ctx))->getGroupScope();
1962 if (scope && scope!=Doxygen::globalScope)
1963 {
1964 parser->context.context = substitute(scope->name(),getLanguageSpecificSeparator(scope->getLanguage(),true),"::");
1965 }
1966 }
1967 else
1968 {
1969 parser->context.context = "";
1970 }
1971 parser->context.scope = ctx;
1972 parser->context.lang = getLanguageFromFileName(fileName);
1973
1974 if (indexWords && Doxygen::searchIndex.enabled())
1975 {
1976 if (md)
1977 {
1978 parser->context.searchUrl=md->getOutputFileBase();
1979 Doxygen::searchIndex.setCurrentDoc(md,md->anchor(),false);
1980 }
1981 else if (ctx)
1982 {
1983 parser->context.searchUrl=ctx->getOutputFileBase();
1984 Doxygen::searchIndex.setCurrentDoc(ctx,ctx->anchor(),false);
1985 }
1986 }
1987 else
1988 {
1989 parser->context.searchUrl="";
1990 }
1991
1992 parser->context.fileName = fileName;
1993 parser->context.relPath = (!linkFromIndex && ctx) ?
1995 QCString("");
1996 //printf("ctx->name=%s relPath=%s\n",qPrint(ctx->name()),qPrint(parser->context.relPath));
1997 parser->context.memberDef = md;
1998 while (!parser->context.nodeStack.empty()) parser->context.nodeStack.pop();
1999 while (!parser->context.styleStack.empty()) parser->context.styleStack.pop();
2000 while (!parser->context.initialStyleStack.empty()) parser->context.initialStyleStack.pop();
2001 parser->context.inSeeBlock = FALSE;
2002 parser->context.xmlComment = FALSE;
2003 parser->context.insideHtmlLink = FALSE;
2004 parser->context.includeFileText = "";
2005 parser->context.includeFileOffset = 0;
2006 parser->context.includeFileLength = 0;
2007 parser->context.isExample = isExample;
2008 parser->context.exampleName = exampleName;
2009 parser->context.hasParamCommand = FALSE;
2010 parser->context.hasReturnCommand = FALSE;
2011 parser->context.retvalsFound.clear();
2012 parser->context.paramsFound.clear();
2013 parser->context.markdownSupport = markdownSupport;
2014
2015 //printf("Starting comment block at %s:%d\n",qPrint(parser->context.fileName),startLine);
2016 parser->tokenizer.setLineNr(startLine);
2017 size_t ioLen = input.length();
2018 QCString inpStr = parser->processCopyDoc(input.data(),ioLen);
2019 if (inpStr.isEmpty() || inpStr.at(inpStr.length()-1)!='\n')
2020 {
2021 inpStr+='\n';
2022 }
2023 //printf("processCopyDoc(in='%s' out='%s')\n",input,qPrint(inpStr));
2024 parser->tokenizer.init(inpStr.data(),parser->context.fileName,
2026
2027 // build abstract syntax tree
2028 auto ast = std::make_unique<DocNodeAST>(DocRoot(parser,md!=nullptr,singleLine));
2029 std::get<DocRoot>(ast->root).parse();
2030
2032 {
2033 // pretty print the result
2034 std::visit(PrintDocVisitor{},ast->root);
2035 }
2036
2037 if (md && md->isFunction())
2038 {
2040 }
2042
2043 // reset token
2044 parser->tokenizer.resetToken();
2045
2046 //printf(">>>>>> end validatingParseDoc(%s,%s)\n",ctx?qPrint(ctx->name()):"<none>",
2047 // md?qPrint(md->name()):"<none>");
2048
2049 return ast;
2050}
@ PrintTree
Definition debug.h:34
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:76
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)
void checkUnOrMultipleDocumentedParams()
Root node of documentation tree.
Definition docnode.h:1308
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 bool isFunction() const =0
virtual void detectUndocumentedParams(bool hasParamCommand, bool hasReturnCommand) const =0
char & at(size_t i)
Returns a reference to the character at index i.
Definition qcstring.h:578
GroupDef * toGroupDef(Definition *d)
PageDef * toPageDef(Definition *d)
Definition pagedef.cpp:487
QCString substitute(const QCString &s, const QCString &src, const QCString &dst)
substitute all occurrences of src in s by dst
Definition qcstring.cpp:477
StringMultiSet retvalsFound
Definition docparser_p.h:75
DocStyleChangeStack styleStack
Definition docparser_p.h:67
size_t includeFileLength
Definition docparser_p.h:87
DocNodeStack nodeStack
Definition docparser_p.h:66
StringMultiSet paramsFound
Definition docparser_p.h:76
QCString exampleName
Definition docparser_p.h:79
const Definition * scope
Definition docparser_p.h:61
QCString includeFileText
Definition docparser_p.h:85
TokenInfo * token
Definition docparser_p.h:92
DocStyleChangeStack initialStyleStack
Definition docparser_p.h:68
SrcLangExt lang
Definition docparser_p.h:82
QCString searchUrl
Definition docparser_p.h:80
size_t includeFileOffset
Definition docparser_p.h:86
const MemberDef * memberDef
Definition docparser_p.h:77
SrcLangExt getLanguageFromFileName(const QCString &fileName, SrcLangExt defLang)
Definition util.cpp:5721
QCString relativePathToRoot(const QCString &name)
Definition util.cpp:4095
QCString getLanguageSpecificSeparator(SrcLangExt lang, bool classScope)
Returns the scope separator to use given the programming language lang.
Definition util.cpp:6376

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

Referenced by addPerlModDocBlock(), convertTitleToHtml(), 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 2052 of file docparser.cpp.

2053{
2054 DocParser *parser = dynamic_cast<DocParser*>(&parserIntf);
2055 assert(parser!=nullptr);
2056 if (parser==nullptr) return nullptr;
2057
2058 // set initial token
2059 parser->context.token = parser->tokenizer.resetToken();
2060
2061 //printf("------------ input ---------\n%s\n"
2062 // "------------ end input -----\n",input);
2063 //parser->context.token = new TokenInfo;
2064 parser->context.context = "";
2065 parser->context.fileName = "<parseText>";
2066 parser->context.relPath = "";
2067 parser->context.memberDef = nullptr;
2068 while (!parser->context.nodeStack.empty()) parser->context.nodeStack.pop();
2069 while (!parser->context.styleStack.empty()) parser->context.styleStack.pop();
2070 while (!parser->context.initialStyleStack.empty()) parser->context.initialStyleStack.pop();
2071 parser->context.inSeeBlock = FALSE;
2072 parser->context.xmlComment = FALSE;
2073 parser->context.insideHtmlLink = FALSE;
2074 parser->context.includeFileText = "";
2075 parser->context.includeFileOffset = 0;
2076 parser->context.includeFileLength = 0;
2077 parser->context.isExample = FALSE;
2078 parser->context.exampleName = "";
2079 parser->context.hasParamCommand = FALSE;
2080 parser->context.hasReturnCommand = FALSE;
2081 parser->context.retvalsFound.clear();
2082 parser->context.paramsFound.clear();
2083 parser->context.searchUrl="";
2084 parser->context.lang = SrcLangExt::Unknown;
2085 parser->context.markdownSupport = Config_getBool(MARKDOWN_SUPPORT);
2086
2087
2088 auto ast = std::make_unique<DocNodeAST>(DocText(parser));
2089
2090 if (!input.isEmpty())
2091 {
2092 parser->tokenizer.setLineNr(1);
2093 parser->tokenizer.init(input.data(),parser->context.fileName,
2095
2096 // build abstract syntax tree
2097 std::get<DocText>(ast->root).parse();
2098
2100 {
2101 // pretty print the result
2102 std::visit(PrintDocVisitor{},ast->root);
2103 }
2104 }
2105
2106 return ast;
2107}
Root node of a text fragment.
Definition docnode.h:1299
#define Config_getBool(name)
Definition config.h:33

References Config_getBool, DocParser::context, DocParserContext::context, QCString::data(), DocParserContext::exampleName, FALSE, DocParserContext::fileName, DocParserContext::hasParamCommand, DocParserContext::hasReturnCommand, DocParserContext::includeFileLength, DocParserContext::includeFileOffset, DocParserContext::includeFileText, 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().