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

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

2107{
2108 DocParser *parser = dynamic_cast<DocParser*>(&parserIntf);
2109 assert(parser!=nullptr);
2110 if (parser==nullptr) return nullptr;
2111 if (!srcFile.isEmpty())
2112 {
2113 parser->context.fileName = srcFile;
2114 parser->tokenizer.setLineNr(srcLine);
2115 }
2116 return std::make_unique<DocNodeAST>(DocRef(parser,nullptr,target,context));
2117}
DocTokenizer tokenizer
DocParserContext context
Node representing a reference to some item.
Definition docnode.h:772
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 1676 of file docparser.cpp.

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

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

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

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

1789{
1790 while (i<len)
1791 {
1792 if ((data[i]=='@' || data[i]=='\\') && // start of command character
1793 (i==0 || (data[i-1]!='@' && data[i-1]!='\\'))) // that is not escaped
1794 {
1795 if (i+endMarker.length()+1<=len && qstrncmp(data+i+1,endMarker.data(),endMarker.length())==0)
1796 {
1797 return i+endMarker.length()+1;
1798 }
1799 }
1800 i++;
1801 }
1802 // oops no endmarker found...
1803 return i<len ? i+1 : len;
1804}
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 1920 of file docparser.cpp.

1927{
1928 DocParser *parser = dynamic_cast<DocParser*>(&parserIntf);
1929 assert(parser!=nullptr);
1930 if (parser==nullptr) return nullptr;
1931 //printf("validatingParseDoc(%s,%s)=[%s]\n",ctx?qPrint(ctx->name()):"<none>",
1932 // md?qPrint(md->name()):"<none>",
1933 // qPrint(input));
1934 //printf("========== validating %s at line %d\n",qPrint(fileName),startLine);
1935 //printf("---------------- input --------------------\n%s\n----------- end input -------------------\n",qPrint(input));
1936
1937 // set initial token
1938 parser->context.token = parser->tokenizer.resetToken();
1939
1940 if (ctx && ctx!=Doxygen::globalScope &&
1943 )
1944 )
1945 {
1947 }
1948 else if (ctx && ctx->definitionType()==Definition::TypePage)
1949 {
1950 const Definition *scope = (toPageDef(ctx))->getPageScope();
1951 if (scope && scope!=Doxygen::globalScope)
1952 {
1953 parser->context.context = substitute(scope->name(),getLanguageSpecificSeparator(scope->getLanguage(),true),"::");
1954 }
1955 }
1956 else if (ctx && ctx->definitionType()==Definition::TypeGroup)
1957 {
1958 const Definition *scope = (toGroupDef(ctx))->getGroupScope();
1959 if (scope && scope!=Doxygen::globalScope)
1960 {
1961 parser->context.context = substitute(scope->name(),getLanguageSpecificSeparator(scope->getLanguage(),true),"::");
1962 }
1963 }
1964 else
1965 {
1966 parser->context.context = "";
1967 }
1968 parser->context.scope = ctx;
1969 parser->context.lang = getLanguageFromFileName(fileName);
1970
1971 if (indexWords && Doxygen::searchIndex.enabled())
1972 {
1973 if (md)
1974 {
1975 parser->context.searchUrl=md->getOutputFileBase();
1976 Doxygen::searchIndex.setCurrentDoc(md,md->anchor(),false);
1977 }
1978 else if (ctx)
1979 {
1980 parser->context.searchUrl=ctx->getOutputFileBase();
1981 Doxygen::searchIndex.setCurrentDoc(ctx,ctx->anchor(),false);
1982 }
1983 }
1984 else
1985 {
1986 parser->context.searchUrl="";
1987 }
1988
1989 parser->context.fileName = fileName;
1990 parser->context.relPath = (!linkFromIndex && ctx) ?
1992 QCString("");
1993 //printf("ctx->name=%s relPath=%s\n",qPrint(ctx->name()),qPrint(parser->context.relPath));
1994 parser->context.memberDef = md;
1995 while (!parser->context.nodeStack.empty()) parser->context.nodeStack.pop();
1996 while (!parser->context.styleStack.empty()) parser->context.styleStack.pop();
1997 while (!parser->context.initialStyleStack.empty()) parser->context.initialStyleStack.pop();
1998 parser->context.inSeeBlock = FALSE;
1999 parser->context.xmlComment = FALSE;
2000 parser->context.insideHtmlLink = FALSE;
2001 parser->context.includeFileText = "";
2002 parser->context.includeFileOffset = 0;
2003 parser->context.includeFileLength = 0;
2004 parser->context.isExample = isExample;
2005 parser->context.exampleName = exampleName;
2006 parser->context.hasParamCommand = FALSE;
2007 parser->context.hasReturnCommand = FALSE;
2008 parser->context.retvalsFound.clear();
2009 parser->context.paramsFound.clear();
2010 parser->context.markdownSupport = markdownSupport;
2011
2012 //printf("Starting comment block at %s:%d\n",qPrint(parser->context.fileName),startLine);
2013 parser->tokenizer.setLineNr(startLine);
2014 size_t ioLen = input.length();
2015 QCString inpStr = parser->processCopyDoc(input.data(),ioLen);
2016 if (inpStr.isEmpty() || inpStr.at(inpStr.length()-1)!='\n')
2017 {
2018 inpStr+='\n';
2019 }
2020 //printf("processCopyDoc(in='%s' out='%s')\n",input,qPrint(inpStr));
2021 parser->tokenizer.init(inpStr.data(),parser->context.fileName,
2023
2024 // build abstract syntax tree
2025 auto ast = std::make_unique<DocNodeAST>(DocRoot(parser,md!=nullptr,singleLine));
2026 std::get<DocRoot>(ast->root).parse();
2027
2029 {
2030 // pretty print the result
2031 std::visit(PrintDocVisitor{},ast->root);
2032 }
2033
2034 if (md && md->isFunction())
2035 {
2037 }
2039
2040 // reset token
2041 parser->tokenizer.resetToken();
2042
2043 //printf(">>>>>> end validatingParseDoc(%s,%s)\n",ctx?qPrint(ctx->name()):"<none>",
2044 // md?qPrint(md->name()):"<none>");
2045
2046 return ast;
2047}
@ 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:1307
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:467
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:5714
QCString relativePathToRoot(const QCString &name)
Definition util.cpp:4088
QCString getLanguageSpecificSeparator(SrcLangExt lang, bool classScope)
Returns the scope separator to use given the programming language lang.
Definition util.cpp:6375

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(), 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 2049 of file docparser.cpp.

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