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

Go to the source code of this file.

Macros

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

Functions

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

Macro Definition Documentation

◆ AUTO_TRACE

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

Definition at line 47 of file docparser.cpp.

◆ AUTO_TRACE_ADD

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

Definition at line 48 of file docparser.cpp.

◆ AUTO_TRACE_EXIT

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

Definition at line 49 of file docparser.cpp.

◆ CHECK_FOR_COMMAND

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

Definition at line 1806 of file docparser.cpp.

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

2222{
2223 DocParser *parser = dynamic_cast<DocParser*>(&parserIntf);
2224 assert(parser!=nullptr);
2225 if (parser==nullptr) return nullptr;
2226 if (!srcFile.isEmpty())
2227 {
2228 parser->context.fileName = srcFile;
2229 parser->tokenizer.setFileName(srcFile);
2230 parser->tokenizer.setLineNr(srcLine);
2231 }
2232 return std::make_unique<DocNodeAST>(DocRef(parser,nullptr,target,context));
2233}
DocTokenizer tokenizer
DocParserContext context
Node representing a reference to some item.
Definition docnode.h:778
void setLineNr(int lineno)
void setFileName(const QCString &fileName)
bool isEmpty() const
Returns TRUE iff the string is empty.
Definition qcstring.h:163
QCString fileName
Definition docparser_p.h:71

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

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

◆ docFindSections()

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

◆ extractCopyDocId()

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

Definition at line 1733 of file docparser.cpp.

1734{
1735 size_t s=j;
1736 int round=0;
1737 bool insideDQuote=FALSE;
1738 bool insideSQuote=FALSE;
1739 bool found=FALSE;
1740 while (j<len && !found)
1741 {
1742 if (!insideSQuote && !insideDQuote)
1743 {
1744 switch (data[j])
1745 {
1746 case '(': round++; break;
1747 case ')': round--; break;
1748 case '"': insideDQuote=TRUE; break;
1749 case '\'': insideSQuote=TRUE; break;
1750 case '\\': // fall through, begin of command
1751 case '@': // fall through, begin of command
1752 case '\t': // fall through
1753 case '\n':
1754 found=(round==0);
1755 break;
1756 case ' ': // allow spaces in cast operator (see issue #11169)
1757 found=(round==0) && (j<8 || !literal_at(data+j-8,"operator"));
1758 break;
1759 }
1760 }
1761 else if (insideSQuote) // look for single quote end
1762 {
1763 if (data[j]=='\'' && (j==0 || data[j]!='\\'))
1764 {
1765 insideSQuote=FALSE;
1766 }
1767 }
1768 else if (insideDQuote) // look for double quote end
1769 {
1770 if (data[j]=='"' && (j==0 || data[j]!='\\'))
1771 {
1772 insideDQuote=FALSE;
1773 }
1774 }
1775 if (!found) j++;
1776 }
1777
1778 // include const and volatile
1779 if (literal_at(data+j," const"))
1780 {
1781 j+=6;
1782 }
1783 else if (literal_at(data+j," volatile"))
1784 {
1785 j+=9;
1786 }
1787
1788 // allow '&' or '&&' or ' &' or ' &&' at the end
1789 size_t k=j;
1790 while (k<len && data[k]==' ') k++;
1791 if (k<len-1 && data[k]=='&' && data[k+1]=='&') j=k+2;
1792 else if (k<len && data[k]=='&' ) j=k+1;
1793
1794 // do not include punctuation added by Definition::_setBriefDescription()
1795 size_t e=j;
1796 if (j>0 && data[j-1]=='.') { e--; }
1797 QCString id(data+s,e-s);
1798 //printf("extractCopyDocId='%s' input='%s'\n",qPrint(id),&data[s]);
1799 return id;
1800}
This is an alternative implementation of QCString.
Definition qcstring.h:101
#define TRUE
Definition qcstring.h:37
#define FALSE
Definition qcstring.h:34

References FALSE, literal_at(), and TRUE.

Referenced by DocParser::processCopyDoc().

◆ isCopyBriefOrDetailsCmd()

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

Definition at line 1810 of file docparser.cpp.

1811{
1812 size_t j=0;
1813 if (i==0 || (data[i-1]!='@' && data[i-1]!='\\')) // not an escaped command
1814 {
1815 CHECK_FOR_COMMAND("copybrief",brief=TRUE); // @copybrief or \copybrief
1816 CHECK_FOR_COMMAND("copydetails",brief=FALSE); // @copydetails or \copydetails
1817 }
1818 return j;
1819}
#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 1821 of file docparser.cpp.

1822{
1823 size_t j=0;
1824 if (i==0 || (data[i-1]!='@' && data[i-1]!='\\')) // not an escaped command
1825 {
1826 CHECK_FOR_COMMAND("dot",endMarker="enddot");
1827 CHECK_FOR_COMMAND("icode",endMarker="endicode");
1828 CHECK_FOR_COMMAND("code",endMarker="endcode");
1829 CHECK_FOR_COMMAND("msc",endMarker="endmsc");
1830 CHECK_FOR_COMMAND("iverbatim",endMarker="endiverbatim");
1831 CHECK_FOR_COMMAND("verbatim",endMarker="endverbatim");
1832 CHECK_FOR_COMMAND("iliteral",endMarker="endiliteral");
1833 CHECK_FOR_COMMAND("latexonly",endMarker="endlatexonly");
1834 CHECK_FOR_COMMAND("htmlonly",endMarker="endhtmlonly");
1835 CHECK_FOR_COMMAND("xmlonly",endMarker="endxmlonly");
1836 CHECK_FOR_COMMAND("rtfonly",endMarker="endrtfonly");
1837 CHECK_FOR_COMMAND("manonly",endMarker="endmanonly");
1838 CHECK_FOR_COMMAND("docbookonly",endMarker="enddocbookonly");
1839 CHECK_FOR_COMMAND("startuml",endMarker="enduml");
1840 }
1841 //printf("isVerbatimSection(%s)=%d)\n",qPrint(QCString(&data[i]).left(10)),j);
1842 return j;
1843}

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

1846{
1847 while (i<len)
1848 {
1849 if ((data[i]=='@' || data[i]=='\\') && // start of command character
1850 (i==0 || (data[i-1]!='@' && data[i-1]!='\\'))) // that is not escaped
1851 {
1852 if (i+endMarker.length()+1<=len && qstrncmp(data+i+1,endMarker.data(),endMarker.length())==0)
1853 {
1854 return i+endMarker.length()+1;
1855 }
1856 }
1857 i++;
1858 }
1859 // oops no endmarker found...
1860 return i<len ? i+1 : len;
1861}
size_t length() const
Returns the length of the string, not counting the 0-terminator.
Definition qcstring.h:166
const char * data() const
Returns a pointer to the contents of the string in the form of a 0-terminated C string.
Definition qcstring.h:172
int qstrncmp(const char *str1, const char *str2, size_t len)
Definition qcstring.h:75

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

Referenced by DocParser::processCopyDoc().

◆ validatingParseDoc()

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

Main entry point for the comment block parser.

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

Definition at line 1977 of file docparser.cpp.

1984{
1985 DocParser *parser = dynamic_cast<DocParser*>(&parserIntf);
1986 assert(parser!=nullptr);
1987 if (parser==nullptr) return nullptr;
1988 //printf("validatingParseDoc(%s,%s)=[%s]\n",ctx?qPrint(ctx->name()):"<none>",
1989 // md?qPrint(md->name()):"<none>",
1990 // qPrint(input));
1991 //printf("========== validating %s at line %d\n",qPrint(fileName),startLine);
1992 //printf("---------------- input --------------------\n%s\n----------- end input -------------------\n",qPrint(input));
1993
1994 // set initial token
1995 parser->context.token = parser->tokenizer.resetToken();
1996
1997 if (ctx && ctx!=Doxygen::globalScope &&
2000 )
2001 )
2002 {
2004 }
2005 else if (ctx && ctx->definitionType()==Definition::TypePage)
2006 {
2007 const Definition *scope = (toPageDef(ctx))->getPageScope();
2008 if (scope && scope!=Doxygen::globalScope)
2009 {
2010 parser->context.context = substitute(scope->name(),getLanguageSpecificSeparator(scope->getLanguage(),true),"::");
2011 }
2012 }
2013 else if (ctx && ctx->definitionType()==Definition::TypeGroup)
2014 {
2015 const Definition *scope = (toGroupDef(ctx))->getGroupScope();
2016 if (scope && scope!=Doxygen::globalScope)
2017 {
2018 parser->context.context = substitute(scope->name(),getLanguageSpecificSeparator(scope->getLanguage(),true),"::");
2019 }
2020 }
2021 else
2022 {
2023 parser->context.context = "";
2024 }
2025 parser->context.scope = ctx;
2026 parser->context.lang = getLanguageFromFileName(fileName);
2027
2028 if (options.indexWords() && Doxygen::searchIndex.enabled())
2029 {
2030 if (md)
2031 {
2032 parser->context.searchUrl=md->getOutputFileBase();
2033 Doxygen::searchIndex.setCurrentDoc(md,md->anchor(),false);
2034 }
2035 else if (ctx)
2036 {
2037 parser->context.searchUrl=ctx->getOutputFileBase();
2038 Doxygen::searchIndex.setCurrentDoc(ctx,ctx->anchor(),false);
2039 }
2040 }
2041 else
2042 {
2043 parser->context.searchUrl="";
2044 }
2045
2046 parser->context.fileName = fileName;
2047 parser->context.relPath = (!options.linkFromIndex() && ctx) ?
2049 QCString("");
2050 //printf("ctx->name=%s relPath=%s\n",qPrint(ctx->name()),qPrint(parser->context.relPath));
2051 parser->context.memberDef = md;
2052 while (!parser->context.nodeStack.empty()) parser->context.nodeStack.pop();
2053 while (!parser->context.styleStack.empty()) parser->context.styleStack.pop();
2054 while (!parser->context.initialStyleStack.empty()) parser->context.initialStyleStack.pop();
2055 parser->context.inSeeBlock = FALSE;
2056 parser->context.inCodeStyle = FALSE;
2057 parser->context.xmlComment = FALSE;
2058 parser->context.insideHtmlLink = FALSE;
2059 parser->context.includeFileText = "";
2060 parser->context.includeFileOffset = 0;
2061 parser->context.includeFileLength = 0;
2062 parser->context.isExample = options.isExample();
2063 parser->context.exampleName = options.exampleName();
2064 parser->context.hasParamCommand = FALSE;
2065 parser->context.hasReturnCommand = FALSE;
2066 parser->context.retvalsFound.clear();
2067 parser->context.paramsFound.clear();
2068 parser->context.markdownSupport = options.markdownSupport();
2069 parser->context.autolinkSupport = options.autolinkSupport();
2070
2071 //printf("Starting comment block at %s:%d\n",qPrint(parser->context.fileName),startLine);
2072 parser->tokenizer.setFileName(fileName);
2073 parser->tokenizer.setLineNr(startLine);
2074 size_t ioLen = input.length();
2075 QCString inpStr = parser->processCopyDoc(input.data(),ioLen);
2076 if (inpStr.isEmpty() || inpStr.at(inpStr.length()-1)!='\n')
2077 {
2078 inpStr+='\n';
2079 }
2080 //printf("processCopyDoc(in='%s' out='%s')\n",qPrint(input),qPrint(inpStr));
2081 parser->tokenizer.init(inpStr.data(),parser->context.fileName,
2083
2084 // build abstract syntax tree
2085 auto ast = std::make_unique<DocNodeAST>(DocRoot(parser,md!=nullptr,options.singleLine()));
2086 std::get<DocRoot>(ast->root).parse();
2087
2089 {
2090 // pretty print the result
2091 std::visit(PrintDocVisitor{},ast->root);
2092 }
2093
2094 if (md && md->isFunction())
2095 {
2096 parser->checkUnOrMultipleDocumentedParams();
2097 }
2099
2100 // reset token
2101 parser->tokenizer.resetToken();
2102
2103 //printf(">>>>>> end validatingParseDoc(%s,%s)\n",ctx?qPrint(ctx->name()):"<none>",
2104 // md?qPrint(md->name()):"<none>");
2105
2106 return ast;
2107}
@ 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:77
virtual SrcLangExt getLanguage() const =0
Returns the programming language this definition was written in.
virtual DefType definitionType() const =0
virtual QCString anchor() const =0
virtual QCString qualifiedName() const =0
virtual QCString getOutputFileBase() const =0
virtual const QCString & name() const =0
QCString processCopyDoc(const char *data, size_t &len)
Root node of documentation tree.
Definition docnode.h:1311
void init(const char *input, const QCString &fileName, bool markdownSupport, bool insideHtmlLink)
TokenInfo * resetToken()
static NamespaceDefMutable * globalScope
Definition doxygen.h:120
static SearchIndexIntf searchIndex
Definition doxygen.h:123
virtual bool isFunction() const =0
virtual void detectUndocumentedParams(bool hasParamCommand, bool hasReturnCommand) const =0
GroupDef * toGroupDef(Definition *d)
PageDef * toPageDef(Definition *d)
Definition pagedef.cpp:502
QCString substitute(const QCString &s, const QCString &src, const QCString &dst)
substitute all occurrences of src in s by dst
Definition qcstring.cpp:571
bool autolinkSupport() const
Definition docoptions.h:32
bool linkFromIndex() const
Definition docoptions.h:30
bool markdownSupport() const
Definition docoptions.h:31
QCString exampleName() const
Definition docoptions.h:28
bool indexWords() const
Definition docoptions.h:26
bool singleLine() const
Definition docoptions.h:29
bool isExample() const
Definition docoptions.h:27
StringMultiSet retvalsFound
Definition docparser_p.h:76
DocStyleChangeStack styleStack
Definition docparser_p.h:68
size_t includeFileLength
Definition docparser_p.h:88
DocNodeStack nodeStack
Definition docparser_p.h:67
StringMultiSet paramsFound
Definition docparser_p.h:77
QCString exampleName
Definition docparser_p.h:80
const Definition * scope
Definition docparser_p.h:61
QCString includeFileText
Definition docparser_p.h:86
TokenInfo * token
Definition docparser_p.h:93
DocStyleChangeStack initialStyleStack
Definition docparser_p.h:69
SrcLangExt lang
Definition docparser_p.h:83
QCString searchUrl
Definition docparser_p.h:81
size_t includeFileOffset
Definition docparser_p.h:87
const MemberDef * memberDef
Definition docparser_p.h:78
SrcLangExt getLanguageFromFileName(const QCString &fileName, SrcLangExt defLang)
Definition util.cpp:5191
QCString relativePathToRoot(const QCString &name)
Definition util.cpp:3560
QCString getLanguageSpecificSeparator(SrcLangExt lang, bool classScope)
Returns the scope separator to use given the programming language lang.
Definition util.cpp:5897

References Definition::anchor(), QCString::at(), DocOptions::autolinkSupport(), DocParserContext::autolinkSupport, DocParser::checkUnOrMultipleDocumentedParams(), DocParser::context, DocParserContext::context, QCString::data(), Definition::definitionType(), MemberDef::detectUndocumentedParams(), DocOptions::exampleName(), DocParserContext::exampleName, FALSE, DocParserContext::fileName, Definition::getLanguage(), getLanguageFromFileName(), getLanguageSpecificSeparator(), Definition::getOutputFileBase(), Doxygen::globalScope, DocParserContext::hasParamCommand, DocParserContext::hasReturnCommand, DocParserContext::includeFileLength, DocParserContext::includeFileOffset, DocParserContext::includeFileText, DocParserContext::inCodeStyle, DocOptions::indexWords(), DocTokenizer::init(), DocParserContext::initialStyleStack, DocParserContext::inSeeBlock, DocParserContext::insideHtmlLink, QCString::isEmpty(), DocOptions::isExample(), DocParserContext::isExample, Debug::isFlagSet(), MemberDef::isFunction(), DocParserContext::lang, QCString::length(), DocOptions::linkFromIndex(), DocOptions::markdownSupport(), DocParserContext::markdownSupport, DocParserContext::memberDef, Definition::name(), DocParserContext::nodeStack, DocParserContext::paramsFound, Debug::PrintTree, DocParser::processCopyDoc(), Definition::qualifiedName(), relativePathToRoot(), DocParserContext::relPath, DocTokenizer::resetToken(), DocParserContext::retvalsFound, DocParserContext::scope, Doxygen::searchIndex, DocParserContext::searchUrl, DocTokenizer::setFileName(), DocTokenizer::setLineNr(), DocOptions::singleLine(), 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 2162 of file docparser.cpp.

2163{
2164 DocParser *parser = dynamic_cast<DocParser*>(&parserIntf);
2165 assert(parser!=nullptr);
2166 if (parser==nullptr) return nullptr;
2167
2168 // set initial token
2169 parser->context.token = parser->tokenizer.resetToken();
2170
2171 //printf("------------ input ---------\n%s\n"
2172 // "------------ end input -----\n",input);
2173 //parser->context.token = new TokenInfo;
2174 parser->context.context = "";
2175 parser->context.fileName = "<parseText>";
2176 parser->context.relPath = "";
2177 parser->context.memberDef = nullptr;
2178 while (!parser->context.nodeStack.empty()) parser->context.nodeStack.pop();
2179 while (!parser->context.styleStack.empty()) parser->context.styleStack.pop();
2180 while (!parser->context.initialStyleStack.empty()) parser->context.initialStyleStack.pop();
2181 parser->context.inSeeBlock = FALSE;
2182 parser->context.inCodeStyle = FALSE;
2183 parser->context.xmlComment = FALSE;
2184 parser->context.insideHtmlLink = FALSE;
2185 parser->context.includeFileText = "";
2186 parser->context.includeFileOffset = 0;
2187 parser->context.includeFileLength = 0;
2188 parser->context.isExample = FALSE;
2189 parser->context.exampleName = "";
2190 parser->context.hasParamCommand = FALSE;
2191 parser->context.hasReturnCommand = FALSE;
2192 parser->context.retvalsFound.clear();
2193 parser->context.paramsFound.clear();
2194 parser->context.searchUrl="";
2195 parser->context.lang = SrcLangExt::Unknown;
2196 parser->context.markdownSupport = Config_getBool(MARKDOWN_SUPPORT);
2197 parser->context.autolinkSupport = FALSE;
2198
2199
2200 auto ast = std::make_unique<DocNodeAST>(DocText(parser));
2201
2202 if (!input.isEmpty())
2203 {
2204 parser->tokenizer.setLineNr(1);
2205 parser->tokenizer.init(input.data(),parser->context.fileName,
2207
2208 // build abstract syntax tree
2209 std::get<DocText>(ast->root).parse();
2210
2212 {
2213 // pretty print the result
2214 std::visit(PrintDocVisitor{},ast->root);
2215 }
2216 }
2217
2218 return ast;
2219}
Root node of a text fragment.
Definition docnode.h:1302
#define Config_getBool(name)
Definition config.h:33

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

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

◆ validatingParseTitle()

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

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

Definition at line 2109 of file docparser.cpp.

2110{
2111 DocParser *parser = dynamic_cast<DocParser*>(&parserIntf);
2112 assert(parser!=nullptr);
2113 if (parser==nullptr) return nullptr;
2114
2115 // set initial token
2116 parser->context.token = parser->tokenizer.resetToken();
2117
2118 //printf("------------ input ---------\n%s\n"
2119 // "------------ end input -----\n",input);
2120 parser->context.context = "";
2121 parser->context.fileName = fileName;
2122 parser->context.relPath = "";
2123 parser->context.memberDef = nullptr;
2124 while (!parser->context.nodeStack.empty()) parser->context.nodeStack.pop();
2125 while (!parser->context.styleStack.empty()) parser->context.styleStack.pop();
2126 while (!parser->context.initialStyleStack.empty()) parser->context.initialStyleStack.pop();
2127 parser->context.inSeeBlock = FALSE;
2128 parser->context.inCodeStyle = FALSE;
2129 parser->context.xmlComment = FALSE;
2130 parser->context.insideHtmlLink = FALSE;
2131 parser->context.includeFileText = "";
2132 parser->context.includeFileOffset = 0;
2133 parser->context.includeFileLength = 0;
2134 parser->context.isExample = FALSE;
2135 parser->context.exampleName = "";
2136 parser->context.hasParamCommand = FALSE;
2137 parser->context.hasReturnCommand = FALSE;
2138 parser->context.retvalsFound.clear();
2139 parser->context.paramsFound.clear();
2140 parser->context.searchUrl="";
2141 parser->context.lang = SrcLangExt::Unknown;
2142 parser->context.markdownSupport = Config_getBool(MARKDOWN_SUPPORT);
2143 parser->context.autolinkSupport = false;
2144
2145 auto ast = std::make_unique<DocNodeAST>(DocTitle(parser,nullptr));
2146
2147 if (!input.isEmpty())
2148 {
2149 // build abstract syntax tree from title string
2150 std::get<DocTitle>(ast->root).parseFromString(nullptr,input);
2151
2153 {
2154 // pretty print the result
2155 std::visit(PrintDocVisitor{},ast->root);
2156 }
2157 }
2158
2159 return ast;
2160}
Node representing a simple section title.
Definition docnode.h:608

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

Referenced by parseCommentAsHtml().