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

◆ AUTO_TRACE_ADD

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

Definition at line 47 of file docparser.cpp.

◆ AUTO_TRACE_EXIT

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

Definition at line 48 of file docparser.cpp.

◆ CHECK_FOR_COMMAND

#define CHECK_FOR_COMMAND ( str,
action )
Value:
do if ((i+sizeof(str)<len) && qstrncmp(data+i+1,str,sizeof(str)-1)==0) \
{ j=i+sizeof(str); action; } while(0)
int qstrncmp(const char *str1, const char *str2, size_t len)
Definition qcstring.h:75

Definition at line 1831 of file docparser.cpp.

1831#define CHECK_FOR_COMMAND(str,action) \
1832 do if ((i+sizeof(str)<len) && qstrncmp(data+i+1,str,sizeof(str)-1)==0) \
1833 { 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 2188 of file docparser.cpp.

2189{
2190 DocParser *parser = dynamic_cast<DocParser*>(&parserIntf);
2191 assert(parser!=nullptr);
2192 if (parser==nullptr) return nullptr;
2193 if (!srcFile.isEmpty())
2194 {
2195 parser->context.fileName = srcFile;
2196 parser->tokenizer.setLineNr(srcLine);
2197 }
2198 return std::make_unique<DocNodeAST>(DocRef(parser,nullptr,target,context));
2199}
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()

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

Definition at line 1758 of file docparser.cpp.

1759{
1760 size_t s=j;
1761 int round=0;
1762 bool insideDQuote=FALSE;
1763 bool insideSQuote=FALSE;
1764 bool found=FALSE;
1765 while (j<len && !found)
1766 {
1767 if (!insideSQuote && !insideDQuote)
1768 {
1769 switch (data[j])
1770 {
1771 case '(': round++; break;
1772 case ')': round--; break;
1773 case '"': insideDQuote=TRUE; break;
1774 case '\'': insideSQuote=TRUE; break;
1775 case '\\': // fall through, begin of command
1776 case '@': // fall through, begin of command
1777 case '\t': // fall through
1778 case '\n':
1779 found=(round==0);
1780 break;
1781 case ' ': // allow spaces in cast operator (see issue #11169)
1782 found=(round==0) && (j<8 || qstrncmp(data+j-8,"operator",8)!=0);
1783 break;
1784 }
1785 }
1786 else if (insideSQuote) // look for single quote end
1787 {
1788 if (data[j]=='\'' && (j==0 || data[j]!='\\'))
1789 {
1790 insideSQuote=FALSE;
1791 }
1792 }
1793 else if (insideDQuote) // look for double quote end
1794 {
1795 if (data[j]=='"' && (j==0 || data[j]!='\\'))
1796 {
1797 insideDQuote=FALSE;
1798 }
1799 }
1800 if (!found) j++;
1801 }
1802
1803 // include const and volatile
1804 if (qstrncmp(data+j," const",6)==0)
1805 {
1806 j+=6;
1807 }
1808 else if (qstrncmp(data+j," volatile",9)==0)
1809 {
1810 j+=9;
1811 }
1812
1813 // allow '&' or '&&' or ' &' or ' &&' at the end
1814 size_t k=j;
1815 while (k<len && data[k]==' ') k++;
1816 if (k<len-1 && data[k]=='&' && data[k+1]=='&') j=k+2;
1817 else if (k<len && data[k]=='&' ) j=k+1;
1818
1819 // do not include punctuation added by Definition::_setBriefDescription()
1820 size_t e=j;
1821 if (j>0 && data[j-1]=='.') { e--; }
1822 QCString id(data+s,e-s);
1823 //printf("extractCopyDocId='%s' input='%s'\n",qPrint(id),&data[s]);
1824 return id;
1825}
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, qstrncmp(), and TRUE.

Referenced by DocParser::processCopyDoc().

◆ isCopyBriefOrDetailsCmd()

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

Definition at line 1835 of file docparser.cpp.

1836{
1837 size_t j=0;
1838 if (i==0 || (data[i-1]!='@' && data[i-1]!='\\')) // not an escaped command
1839 {
1840 CHECK_FOR_COMMAND("copybrief",brief=TRUE); // @copybrief or \copybrief
1841 CHECK_FOR_COMMAND("copydetails",brief=FALSE); // @copydetails or \copydetails
1842 }
1843 return j;
1844}
#define CHECK_FOR_COMMAND(str, action)

References CHECK_FOR_COMMAND, FALSE, and TRUE.

Referenced by DocParser::processCopyDoc().

◆ isVerbatimSection()

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

Definition at line 1846 of file docparser.cpp.

1847{
1848 size_t j=0;
1849 if (i==0 || (data[i-1]!='@' && data[i-1]!='\\')) // not an escaped command
1850 {
1851 CHECK_FOR_COMMAND("dot",endMarker="enddot");
1852 CHECK_FOR_COMMAND("icode",endMarker="endicode");
1853 CHECK_FOR_COMMAND("code",endMarker="endcode");
1854 CHECK_FOR_COMMAND("msc",endMarker="endmsc");
1855 CHECK_FOR_COMMAND("iverbatim",endMarker="endiverbatim");
1856 CHECK_FOR_COMMAND("verbatim",endMarker="endverbatim");
1857 CHECK_FOR_COMMAND("iliteral",endMarker="endiliteral");
1858 CHECK_FOR_COMMAND("latexonly",endMarker="endlatexonly");
1859 CHECK_FOR_COMMAND("htmlonly",endMarker="endhtmlonly");
1860 CHECK_FOR_COMMAND("xmlonly",endMarker="endxmlonly");
1861 CHECK_FOR_COMMAND("rtfonly",endMarker="endrtfonly");
1862 CHECK_FOR_COMMAND("manonly",endMarker="endmanonly");
1863 CHECK_FOR_COMMAND("docbookonly",endMarker="enddocbookonly");
1864 CHECK_FOR_COMMAND("startuml",endMarker="enduml");
1865 }
1866 //printf("isVerbatimSection(%s)=%d)\n",qPrint(QCString(&data[i]).left(10)),j);
1867 return j;
1868}

References CHECK_FOR_COMMAND.

Referenced by DocParser::processCopyDoc().

◆ skipToEndMarker()

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

Definition at line 1870 of file docparser.cpp.

1871{
1872 while (i<len)
1873 {
1874 if ((data[i]=='@' || data[i]=='\\') && // start of command character
1875 (i==0 || (data[i-1]!='@' && data[i-1]!='\\'))) // that is not escaped
1876 {
1877 if (i+endMarker.length()+1<=len && qstrncmp(data+i+1,endMarker.data(),endMarker.length())==0)
1878 {
1879 return i+endMarker.length()+1;
1880 }
1881 }
1882 i++;
1883 }
1884 // oops no endmarker found...
1885 return i<len ? i+1 : len;
1886}
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

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

2009{
2010 DocParser *parser = dynamic_cast<DocParser*>(&parserIntf);
2011 assert(parser!=nullptr);
2012 if (parser==nullptr) return nullptr;
2013 //printf("validatingParseDoc(%s,%s)=[%s]\n",ctx?qPrint(ctx->name()):"<none>",
2014 // md?qPrint(md->name()):"<none>",
2015 // input);
2016 //printf("========== validating %s at line %d\n",qPrint(fileName),startLine);
2017 //printf("---------------- input --------------------\n%s\n----------- end input -------------------\n",qPrint(input));
2018
2019 // set initial token
2020 parser->context.token = parser->tokenizer.resetToken();
2021
2022 if (ctx && ctx!=Doxygen::globalScope &&
2025 )
2026 )
2027 {
2029 }
2030 else if (ctx && ctx->definitionType()==Definition::TypePage)
2031 {
2032 const Definition *scope = (toPageDef(ctx))->getPageScope();
2033 if (scope && scope!=Doxygen::globalScope)
2034 {
2035 parser->context.context = substitute(scope->name(),getLanguageSpecificSeparator(scope->getLanguage(),true),"::");
2036 }
2037 }
2038 else if (ctx && ctx->definitionType()==Definition::TypeGroup)
2039 {
2040 const Definition *scope = (toGroupDef(ctx))->getGroupScope();
2041 if (scope && scope!=Doxygen::globalScope)
2042 {
2043 parser->context.context = substitute(scope->name(),getLanguageSpecificSeparator(scope->getLanguage(),true),"::");
2044 }
2045 }
2046 else
2047 {
2048 parser->context.context = "";
2049 }
2050 parser->context.scope = ctx;
2051 parser->context.lang = getLanguageFromFileName(fileName);
2052
2053 if (indexWords && Doxygen::searchIndex.enabled())
2054 {
2055 if (md)
2056 {
2057 parser->context.searchUrl=md->getOutputFileBase();
2058 Doxygen::searchIndex.setCurrentDoc(md,md->anchor(),false);
2059 }
2060 else if (ctx)
2061 {
2062 parser->context.searchUrl=ctx->getOutputFileBase();
2063 Doxygen::searchIndex.setCurrentDoc(ctx,ctx->anchor(),false);
2064 }
2065 }
2066 else
2067 {
2068 parser->context.searchUrl="";
2069 }
2070
2071 parser->context.fileName = fileName;
2072 parser->context.relPath = (!linkFromIndex && ctx) ?
2074 QCString("");
2075 //printf("ctx->name=%s relPath=%s\n",qPrint(ctx->name()),qPrint(parser->context.relPath));
2076 parser->context.memberDef = md;
2077 while (!parser->context.nodeStack.empty()) parser->context.nodeStack.pop();
2078 while (!parser->context.styleStack.empty()) parser->context.styleStack.pop();
2079 while (!parser->context.initialStyleStack.empty()) parser->context.initialStyleStack.pop();
2080 parser->context.inSeeBlock = FALSE;
2081 parser->context.xmlComment = FALSE;
2082 parser->context.insideHtmlLink = FALSE;
2083 parser->context.includeFileText = "";
2084 parser->context.includeFileOffset = 0;
2085 parser->context.includeFileLength = 0;
2086 parser->context.isExample = isExample;
2087 parser->context.exampleName = exampleName;
2088 parser->context.hasParamCommand = FALSE;
2089 parser->context.hasReturnCommand = FALSE;
2090 parser->context.retvalsFound.clear();
2091 parser->context.paramsFound.clear();
2092 parser->context.markdownSupport = markdownSupport;
2093
2094 //printf("Starting comment block at %s:%d\n",qPrint(parser->context.fileName),startLine);
2095 parser->tokenizer.setLineNr(startLine);
2096 size_t ioLen = input.length();
2097 QCString inpStr = parser->processCopyDoc(input.data(),ioLen);
2098 if (inpStr.isEmpty() || inpStr.at(inpStr.length()-1)!='\n')
2099 {
2100 inpStr+='\n';
2101 }
2102 //printf("processCopyDoc(in='%s' out='%s')\n",input,qPrint(inpStr));
2103 parser->tokenizer.init(inpStr.data(),parser->context.fileName,
2105
2106 // build abstract syntax tree
2107 auto ast = std::make_unique<DocNodeAST>(DocRoot(parser,md!=nullptr,singleLine));
2108 std::get<DocRoot>(ast->root).parse();
2109
2111 {
2112 // pretty print the result
2113 std::visit(PrintDocVisitor{},ast->root);
2114 }
2115
2116 if (md && md->isFunction())
2117 {
2119 }
2121
2122 // reset token
2123 parser->tokenizer.resetToken();
2124
2125 //printf(">>>>>> end validatingParseDoc(%s,%s)\n",ctx?qPrint(ctx->name()):"<none>",
2126 // md?qPrint(md->name()):"<none>");
2127
2128 return ast;
2129}
@ 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:5645
QCString relativePathToRoot(const QCString &name)
Definition util.cpp:4019
QCString getLanguageSpecificSeparator(SrcLangExt lang, bool classScope)
Returns the scope separator to use given the programming language lang.
Definition util.cpp:6326

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

2132{
2133 DocParser *parser = dynamic_cast<DocParser*>(&parserIntf);
2134 assert(parser!=nullptr);
2135 if (parser==nullptr) return nullptr;
2136
2137 // set initial token
2138 parser->context.token = parser->tokenizer.resetToken();
2139
2140 //printf("------------ input ---------\n%s\n"
2141 // "------------ end input -----\n",input);
2142 //parser->context.token = new TokenInfo;
2143 parser->context.context = "";
2144 parser->context.fileName = "<parseText>";
2145 parser->context.relPath = "";
2146 parser->context.memberDef = nullptr;
2147 while (!parser->context.nodeStack.empty()) parser->context.nodeStack.pop();
2148 while (!parser->context.styleStack.empty()) parser->context.styleStack.pop();
2149 while (!parser->context.initialStyleStack.empty()) parser->context.initialStyleStack.pop();
2150 parser->context.inSeeBlock = FALSE;
2151 parser->context.xmlComment = FALSE;
2152 parser->context.insideHtmlLink = FALSE;
2153 parser->context.includeFileText = "";
2154 parser->context.includeFileOffset = 0;
2155 parser->context.includeFileLength = 0;
2156 parser->context.isExample = FALSE;
2157 parser->context.exampleName = "";
2158 parser->context.hasParamCommand = FALSE;
2159 parser->context.hasReturnCommand = FALSE;
2160 parser->context.retvalsFound.clear();
2161 parser->context.paramsFound.clear();
2162 parser->context.searchUrl="";
2164 parser->context.markdownSupport = Config_getBool(MARKDOWN_SUPPORT);
2165
2166
2167 auto ast = std::make_unique<DocNodeAST>(DocText(parser));
2168
2169 if (!input.isEmpty())
2170 {
2171 parser->tokenizer.setLineNr(1);
2172 parser->tokenizer.init(input.data(),parser->context.fileName,
2174
2175 // build abstract syntax tree
2176 std::get<DocText>(ast->root).parse();
2177
2179 {
2180 // pretty print the result
2181 std::visit(PrintDocVisitor{},ast->root);
2182 }
2183 }
2184
2185 return ast;
2186}
Root node of a text fragment.
Definition docnode.h:1298
#define Config_getBool(name)
Definition config.h:33
@ Unknown
Definition types.h:43

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, Unknown, and DocParserContext::xmlComment.

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