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

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

2315{
2316 DocParser *parser = dynamic_cast<DocParser*>(&parserIntf);
2317 assert(parser!=nullptr);
2318 if (parser==nullptr) return nullptr;
2319 if (!srcFile.isEmpty())
2320 {
2321 parser->context.fileName = srcFile;
2322 parser->tokenizer.setFileName(srcFile);
2323 parser->tokenizer.setLineNr(srcLine);
2324 }
2325 return std::make_unique<DocNodeAST>(DocRef(parser,nullptr,target,context));
2326}
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 1816 of file docparser.cpp.

1817{
1818 size_t s=j;
1819 int round=0;
1820 bool insideDQuote=FALSE;
1821 bool insideSQuote=FALSE;
1822 bool found=FALSE;
1823 while (j<len && !found)
1824 {
1825 if (!insideSQuote && !insideDQuote)
1826 {
1827 switch (data[j])
1828 {
1829 case '(': round++; break;
1830 case ')': round--; break;
1831 case '"': insideDQuote=TRUE; break;
1832 case '\'': insideSQuote=TRUE; break;
1833 case '\\': // fall through, begin of command
1834 case '@': // fall through, begin of command
1835 case '\t': // fall through
1836 case '\n':
1837 found=(round==0);
1838 break;
1839 case ' ': // allow spaces in cast operator (see issue #11169)
1840 found=(round==0) && (j<8 || !literal_at(data+j-8,"operator"));
1841 break;
1842 }
1843 }
1844 else if (insideSQuote) // look for single quote end
1845 {
1846 if (data[j]=='\'' && (j==0 || data[j]!='\\'))
1847 {
1848 insideSQuote=FALSE;
1849 }
1850 }
1851 else if (insideDQuote) // look for double quote end
1852 {
1853 if (data[j]=='"' && (j==0 || data[j]!='\\'))
1854 {
1855 insideDQuote=FALSE;
1856 }
1857 }
1858 if (!found) j++;
1859 }
1860
1861 // include const and volatile
1862 if (literal_at(data+j," const"))
1863 {
1864 j+=6;
1865 }
1866 else if (literal_at(data+j," volatile"))
1867 {
1868 j+=9;
1869 }
1870
1871 // allow '&' or '&&' or ' &' or ' &&' at the end
1872 size_t k=j;
1873 while (k<len && data[k]==' ') k++;
1874 if (k<len-1 && data[k]=='&' && data[k+1]=='&') j=k+2;
1875 else if (k<len && data[k]=='&' ) j=k+1;
1876
1877 // do not include punctuation added by Definition::_setBriefDescription()
1878 size_t e=j;
1879 if (j>0 && data[j-1]=='.') { e--; }
1880 QCString id(data+s,e-s);
1881 //printf("extractCopyDocId='%s' input='%s'\n",qPrint(id),&data[s]);
1882 return id;
1883}
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 1893 of file docparser.cpp.

1894{
1895 size_t j=0;
1896 if (i==0 || (data[i-1]!='@' && data[i-1]!='\\')) // not an escaped command
1897 {
1898 CHECK_FOR_COMMAND("copybrief",brief=TRUE); // @copybrief or \copybrief
1899 CHECK_FOR_COMMAND("copydetails",brief=FALSE); // @copydetails or \copydetails
1900 }
1901 return j;
1902}
#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 1904 of file docparser.cpp.

1905{
1906 size_t j=0;
1907 if (i==0 || (data[i-1]!='@' && data[i-1]!='\\')) // not an escaped command
1908 {
1909 CHECK_FOR_COMMAND("dot",endMarker="enddot");
1910 CHECK_FOR_COMMAND("icode",endMarker="endicode");
1911 CHECK_FOR_COMMAND("code",endMarker="endcode");
1912 CHECK_FOR_COMMAND("msc",endMarker="endmsc");
1913 CHECK_FOR_COMMAND("iverbatim",endMarker="endiverbatim");
1914 CHECK_FOR_COMMAND("verbatim",endMarker="endverbatim");
1915 CHECK_FOR_COMMAND("iliteral",endMarker="endiliteral");
1916 CHECK_FOR_COMMAND("latexonly",endMarker="endlatexonly");
1917 CHECK_FOR_COMMAND("htmlonly",endMarker="endhtmlonly");
1918 CHECK_FOR_COMMAND("xmlonly",endMarker="endxmlonly");
1919 CHECK_FOR_COMMAND("rtfonly",endMarker="endrtfonly");
1920 CHECK_FOR_COMMAND("manonly",endMarker="endmanonly");
1921 CHECK_FOR_COMMAND("docbookonly",endMarker="enddocbookonly");
1922 CHECK_FOR_COMMAND("startuml",endMarker="enduml");
1923 }
1924 //printf("isVerbatimSection(%s)=%d)\n",qPrint(QCString(&data[i]).left(10)),j);
1925 return j;
1926}

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

1929{
1930 while (i<len)
1931 {
1932 if ((data[i]=='@' || data[i]=='\\') && // start of command character
1933 (i==0 || (data[i-1]!='@' && data[i-1]!='\\'))) // that is not escaped
1934 {
1935 if (i+endMarker.length()+1<=len && qstrncmp(data+i+1,endMarker.data(),endMarker.length())==0)
1936 {
1937 return i+endMarker.length()+1;
1938 }
1939 }
1940 i++;
1941 }
1942 // oops no endmarker found...
1943 return i<len ? i+1 : len;
1944}
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 2060 of file docparser.cpp.

2067{
2068 DocParser *parser = dynamic_cast<DocParser*>(&parserIntf);
2069 assert(parser!=nullptr);
2070 if (parser==nullptr) return nullptr;
2071 //printf("validatingParseDoc(%s,%s)=[%s]\n",ctx?qPrint(ctx->name()):"<none>",
2072 // md?qPrint(md->name()):"<none>",
2073 // qPrint(input));
2074 //printf("========== validating %s at line %d\n",qPrint(fileName),startLine);
2075 //printf("---------------- input --------------------\n%s\n----------- end input -------------------\n",qPrint(input));
2076
2077 // set initial token
2078 parser->context.token = parser->tokenizer.resetToken();
2079
2080 if (ctx && ctx!=Doxygen::globalScope &&
2083 )
2084 )
2085 {
2087 }
2088 else if (ctx && ctx->definitionType()==Definition::TypePage)
2089 {
2090 const Definition *scope = (toPageDef(ctx))->getPageScope();
2091 if (scope && scope!=Doxygen::globalScope)
2092 {
2093 parser->context.context = substitute(scope->name(),getLanguageSpecificSeparator(scope->getLanguage(),true),"::");
2094 }
2095 }
2096 else if (ctx && ctx->definitionType()==Definition::TypeGroup)
2097 {
2098 const Definition *scope = (toGroupDef(ctx))->getGroupScope();
2099 if (scope && scope!=Doxygen::globalScope)
2100 {
2101 parser->context.context = substitute(scope->name(),getLanguageSpecificSeparator(scope->getLanguage(),true),"::");
2102 }
2103 }
2104 else
2105 {
2106 parser->context.context = "";
2107 }
2108 parser->context.scope = ctx;
2109 parser->context.lang = getLanguageFromFileName(fileName);
2110
2111 if (options.indexWords() && Doxygen::searchIndex.enabled())
2112 {
2113 if (md)
2114 {
2115 parser->context.searchUrl=md->getOutputFileBase();
2116 Doxygen::searchIndex.setCurrentDoc(md,md->anchor(),false);
2117 }
2118 else if (ctx)
2119 {
2120 parser->context.searchUrl=ctx->getOutputFileBase();
2121 Doxygen::searchIndex.setCurrentDoc(ctx,ctx->anchor(),false);
2122 }
2123 }
2124 else
2125 {
2126 parser->context.searchUrl="";
2127 }
2128
2129 parser->context.fileName = fileName;
2130 parser->context.relPath = (!options.linkFromIndex() && ctx) ?
2132 QCString("");
2133 //printf("ctx->name=%s relPath=%s\n",qPrint(ctx->name()),qPrint(parser->context.relPath));
2134 parser->context.memberDef = md;
2135 while (!parser->context.nodeStack.empty()) parser->context.nodeStack.pop();
2136 while (!parser->context.styleStack.empty()) parser->context.styleStack.pop();
2137 while (!parser->context.initialStyleStack.empty()) parser->context.initialStyleStack.pop();
2138 parser->context.inSeeBlock = FALSE;
2139 parser->context.inCodeStyle = FALSE;
2140 parser->context.xmlComment = FALSE;
2141 parser->context.insideHtmlLink = FALSE;
2142 parser->context.includeFileText = "";
2143 parser->context.includeFileOffset = 0;
2144 parser->context.includeFileLength = 0;
2145 parser->context.isExample = options.isExample();
2146 parser->context.exampleName = options.exampleName();
2147 parser->context.hasParamCommand = FALSE;
2148 parser->context.hasReturnCommand = FALSE;
2149 parser->context.retvalsFound.clear();
2150 parser->context.paramsFound.clear();
2151 parser->context.markdownSupport = options.markdownSupport();
2152 parser->context.autolinkSupport = options.autolinkSupport();
2153 if (md)
2154 {
2155 const ArgumentList &al=md->isDocsForDefinition() ? md->argumentList() : md->declArgumentList();
2156 parser->context.numParameters = static_cast<int>(al.size());
2157 }
2158 else
2159 {
2160 parser->context.numParameters = 0;
2161 }
2162 parser->context.paramPosition = 1;
2163
2164 //printf("Starting comment block at %s:%d\n",qPrint(parser->context.fileName),startLine);
2165 parser->tokenizer.setFileName(fileName);
2166 parser->tokenizer.setLineNr(startLine);
2167 size_t ioLen = input.length();
2168 QCString inpStr = parser->processCopyDoc(input.data(),ioLen);
2169 if (inpStr.isEmpty() || inpStr.at(inpStr.length()-1)!='\n')
2170 {
2171 inpStr+='\n';
2172 }
2173 //printf("processCopyDoc(in='%s' out='%s')\n",qPrint(input),qPrint(inpStr));
2174 parser->tokenizer.init(inpStr.data(),parser->context.fileName,
2176
2177 // build abstract syntax tree
2178 auto ast = std::make_unique<DocNodeAST>(DocRoot(parser,md!=nullptr,options.singleLine()));
2179 std::get<DocRoot>(ast->root).parse();
2180
2182 {
2183 // pretty print the result
2184 std::visit(PrintDocVisitor{},ast->root);
2185 }
2186
2187 if (md && md->isFunction())
2188 {
2189 parser->checkUnOrMultipleDocumentedParams();
2190 }
2192
2193 // reset token
2194 parser->tokenizer.resetToken();
2195
2196 //printf(">>>>>> end validatingParseDoc(%s,%s)\n",ctx?qPrint(ctx->name()):"<none>",
2197 // md?qPrint(md->name()):"<none>");
2198
2199 return ast;
2200}
This class represents an function or template argument list.
Definition arguments.h:65
size_t size() const
Definition arguments.h:100
@ 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:1310
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 const ArgumentList & argumentList() const =0
virtual bool isFunction() const =0
virtual bool isDocsForDefinition() const =0
virtual void detectUndocumentedParams(bool hasParamCommand, bool hasReturnCommand) const =0
virtual const ArgumentList & declArgumentList() const =0
char & at(size_t i)
Returns a reference to the character at index i.
Definition qcstring.h:593
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:90
DocNodeStack nodeStack
Definition docparser_p.h:67
StringMultiSet paramsFound
Definition docparser_p.h:77
QCString exampleName
Definition docparser_p.h:82
const Definition * scope
Definition docparser_p.h:61
QCString includeFileText
Definition docparser_p.h:88
TokenInfo * token
Definition docparser_p.h:95
DocStyleChangeStack initialStyleStack
Definition docparser_p.h:69
SrcLangExt lang
Definition docparser_p.h:85
QCString searchUrl
Definition docparser_p.h:83
size_t includeFileOffset
Definition docparser_p.h:89
const MemberDef * memberDef
Definition docparser_p.h:80
SrcLangExt getLanguageFromFileName(const QCString &fileName, SrcLangExt defLang)
Definition util.cpp:5214
QCString relativePathToRoot(const QCString &name)
Definition util.cpp:3583
QCString getLanguageSpecificSeparator(SrcLangExt lang, bool classScope)
Returns the scope separator to use given the programming language lang.
Definition util.cpp:5920

References Definition::anchor(), MemberDef::argumentList(), QCString::at(), DocOptions::autolinkSupport(), DocParserContext::autolinkSupport, DocParser::checkUnOrMultipleDocumentedParams(), DocParser::context, DocParserContext::context, QCString::data(), MemberDef::declArgumentList(), 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, MemberDef::isDocsForDefinition(), 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::numParameters, DocParserContext::paramPosition, 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(), ArgumentList::size(), DocParserContext::styleStack, substitute(), toGroupDef(), DocParserContext::token, DocParser::tokenizer, toPageDef(), Definition::TypeClass, Definition::TypeGroup, Definition::TypeNamespace, Definition::TypePage, and DocParserContext::xmlComment.

Referenced by addPerlModDocBlock(), generateBriefDoc(), OutputList::generateDoc(), generateHtmlOutput(), getSQLDocBlock(), parseCommentAsText(), ConceptDefImpl::writeBriefDescription(), DirDefImpl::writeBriefDescription(), FileDefImpl::writeBriefDescription(), GroupDefImpl::writeBriefDescription(), ModuleDefImpl::writeBriefDescription(), NamespaceDefImpl::writeBriefDescription(), MemberDefImpl::writeDeclaration(), ClassDefImpl::writeDeclarationLink(), ConceptDefImpl::writeDeclarationLink(), ModuleDefImpl::writeDeclarationLink(), MemberList::writePlainDeclarations(), and writeXMLDocBlock().

◆ validatingParseText()

IDocNodeASTPtr validatingParseText ( IDocParser & parser,
const QCString & input )

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

Definition at line 2255 of file docparser.cpp.

2256{
2257 DocParser *parser = dynamic_cast<DocParser*>(&parserIntf);
2258 assert(parser!=nullptr);
2259 if (parser==nullptr) return nullptr;
2260
2261 // set initial token
2262 parser->context.token = parser->tokenizer.resetToken();
2263
2264 //printf("------------ input ---------\n%s\n"
2265 // "------------ end input -----\n",input);
2266 //parser->context.token = new TokenInfo;
2267 parser->context.context = "";
2268 parser->context.fileName = "<parseText>";
2269 parser->context.relPath = "";
2270 parser->context.memberDef = nullptr;
2271 while (!parser->context.nodeStack.empty()) parser->context.nodeStack.pop();
2272 while (!parser->context.styleStack.empty()) parser->context.styleStack.pop();
2273 while (!parser->context.initialStyleStack.empty()) parser->context.initialStyleStack.pop();
2274 parser->context.inSeeBlock = FALSE;
2275 parser->context.inCodeStyle = FALSE;
2276 parser->context.xmlComment = FALSE;
2277 parser->context.insideHtmlLink = FALSE;
2278 parser->context.includeFileText = "";
2279 parser->context.includeFileOffset = 0;
2280 parser->context.includeFileLength = 0;
2281 parser->context.isExample = FALSE;
2282 parser->context.exampleName = "";
2283 parser->context.hasParamCommand = FALSE;
2284 parser->context.hasReturnCommand = FALSE;
2285 parser->context.retvalsFound.clear();
2286 parser->context.paramsFound.clear();
2287 parser->context.searchUrl="";
2288 parser->context.lang = SrcLangExt::Unknown;
2289 parser->context.markdownSupport = Config_getBool(MARKDOWN_SUPPORT);
2290 parser->context.autolinkSupport = FALSE;
2291
2292
2293 auto ast = std::make_unique<DocNodeAST>(DocText(parser));
2294
2295 if (!input.isEmpty())
2296 {
2297 parser->tokenizer.setLineNr(1);
2298 parser->tokenizer.init(input.data(),parser->context.fileName,
2300
2301 // build abstract syntax tree
2302 std::get<DocText>(ast->root).parse();
2303
2305 {
2306 // pretty print the result
2307 std::visit(PrintDocVisitor{},ast->root);
2308 }
2309 }
2310
2311 return ast;
2312}
Root node of a text fragment.
Definition docnode.h:1301
#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 2202 of file docparser.cpp.

2203{
2204 DocParser *parser = dynamic_cast<DocParser*>(&parserIntf);
2205 assert(parser!=nullptr);
2206 if (parser==nullptr) return nullptr;
2207
2208 // set initial token
2209 parser->context.token = parser->tokenizer.resetToken();
2210
2211 //printf("------------ input ---------\n%s\n"
2212 // "------------ end input -----\n",input);
2213 parser->context.context = "";
2214 parser->context.fileName = fileName;
2215 parser->context.relPath = "";
2216 parser->context.memberDef = nullptr;
2217 while (!parser->context.nodeStack.empty()) parser->context.nodeStack.pop();
2218 while (!parser->context.styleStack.empty()) parser->context.styleStack.pop();
2219 while (!parser->context.initialStyleStack.empty()) parser->context.initialStyleStack.pop();
2220 parser->context.inSeeBlock = FALSE;
2221 parser->context.inCodeStyle = FALSE;
2222 parser->context.xmlComment = FALSE;
2223 parser->context.insideHtmlLink = FALSE;
2224 parser->context.includeFileText = "";
2225 parser->context.includeFileOffset = 0;
2226 parser->context.includeFileLength = 0;
2227 parser->context.isExample = FALSE;
2228 parser->context.exampleName = "";
2229 parser->context.hasParamCommand = FALSE;
2230 parser->context.hasReturnCommand = FALSE;
2231 parser->context.retvalsFound.clear();
2232 parser->context.paramsFound.clear();
2233 parser->context.searchUrl="";
2234 parser->context.lang = SrcLangExt::Unknown;
2235 parser->context.markdownSupport = Config_getBool(MARKDOWN_SUPPORT);
2236 parser->context.autolinkSupport = false;
2237
2238 auto ast = std::make_unique<DocNodeAST>(DocTitle(parser,nullptr));
2239
2240 if (!input.isEmpty())
2241 {
2242 // build abstract syntax tree from title string
2243 std::get<DocTitle>(ast->root).parseFromString(nullptr,input);
2244
2246 {
2247 // pretty print the result
2248 std::visit(PrintDocVisitor{},ast->root);
2249 }
2250 }
2251
2252 return ast;
2253}
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().