Doxygen
Loading...
Searching...
No Matches
docnode.cpp File Reference
#include "docnode.h"
#include "docparser_p.h"
#include "htmlentity.h"
#include "configimpl.h"
#include "configoptions.h"
#include "emoji.h"
#include "message.h"
#include "doxygen.h"
#include "cite.h"
#include "util.h"
#include "formula.h"
#include "markdown.h"
#include "pagedef.h"
#include "namespacedef.h"
#include "groupdef.h"
#include "cmdmapper.h"
#include "config.h"
#include "vhdldocgen.h"
#include "doctokenizer.h"
#include "plantuml.h"
#include "mermaid.h"
#include "language.h"
#include "datetime.h"
#include "trace.h"
#include "anchor.h"
#include "aliases.h"
#include "requirement.h"
Include dependency graph for docnode.cpp:

Go to the source code of this file.

Classes

struct  ActiveRowSpan
 Helper class to compute the grid for an HTML style table. More...

Macros

#define AUTO_TRACE(...)
#define AUTO_TRACE_ADD(...)
#define AUTO_TRACE_EXIT(...)
#define INTERNAL_ASSERT(x)

Typedefs

typedef std::vector< ActiveRowSpanRowSpanList
 List of ActiveRowSpan classes.

Functions

static void unescapeCRef (QCString &s)
static QCString stripKnownExtensions (const QCString &text)
static void setParent (DocNodeVariant *n, DocNodeVariant *newParent)
static void flattenParagraphs (DocNodeVariant *root, DocNodeList &children)
static Token skipSpacesForTable (DocParser *parser)
static bool findAttribute (const HtmlAttribList &tagHtmlAttribs, const char *attrName, QCString *result)
static bool checkIfHtmlEndTagEndsAutoList (DocParser *parser, const DocNodeVariant *n)

Variables

static const char * g_sectionLevelToName []
static const StringUnorderedSet g_plantumlEngine

Macro Definition Documentation

◆ AUTO_TRACE

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

Definition at line 48 of file docnode.cpp.

Referenced by MemberDefImpl::_computeLinkableInProject(), SymbolResolver::Private::accessibleViaUsingDefinition(), SymbolResolver::Private::accessibleViaUsingNamespace(), addClassAndNestedClasses(), addClassToContext(), ModuleDefImpl::addClassToModule(), addConceptToContext(), ModuleDefImpl::addConceptToModule(), ModuleManager::addDocs(), addEnumDocs(), addEnumValuesToEnums(), ModuleDefImpl::addExportedModule(), addGlobalFunction(), ModuleDefImpl::addHeader(), ModuleManager::addHeader(), ModuleDefImpl::addImport(), ModuleManager::addImport(), addInterfaceOrServiceToServiceOrSingleton(), addListReferences(), addLocalObjCMethod(), addMemberDocs(), addMemberFunction(), addMemberSpecialization(), ClassDefImpl::addMembersToTemplateInstance(), ClassDefImpl::addMemberToList(), ModuleDefImpl::addMemberToModule(), ClassDefImpl::addMemberToTemplateInstance(), addMethodToClass(), addRequirementReferences(), Markdown::Private::addStrEscapeUtf8Nbsp(), DirDefImpl::addUsesDependency(), addVariable(), addVariableToClass(), addVariableToFile(), adjustConfiguration(), buildClassDocList(), buildClassList(), buildConceptDocList(), buildConceptList(), buildDefineList(), buildDictionaryList(), buildDirectories(), buildFunctionList(), buildGroupListFiltered(), buildInterfaceAndServiceList(), buildNamespaceList(), buildSequenceList(), buildTypedefList(), buildVarList(), checkConfiguration(), ClassDefImpl::ClassDefImpl(), ModuleManager::collectExportedSymbols(), ModuleManager::collectExportedSymbolsRecursively(), combineDeclarationAndDefinition(), computeClassRelations(), computeCommonDirPrefix(), DirDefImpl::computeDependencies(), computeDirDependencies(), computeIndentExcludingListMarkers(), computeMemberReferences(), computeTemplateClassRelations(), ClassDefImpl::containsOverload(), ModuleManager::createModuleDef(), DirDefImpl::createNewDir(), createUsingMemberImportForClass(), ClassDefImpl::deepCopy(), DocParser::defaultHandleTitleAndSize(), DocParser::defaultHandleToken(), distributeConceptGroups(), DocRef::DocRef(), encodeDirName(), extractCanonicalType(), extractClassNameFromType(), Markdown::extractPageTitle(), Markdown::Private::extractTitleId(), filterMemberDocumentation(), findBaseClassesForClass(), CodeFragmentManager::Private::FragmentInfo::findBlockMarkers(), findClassRelation(), DocParser::findDocsForMemberOrCompound(), Markdown::Private::findEmphasisChar(), Markdown::Private::findEndOfLine(), findEnumDocumentation(), findEnums(), findFriends(), findFunctionPtr(), findGlobalMember(), findInheritedTemplateInstances(), findMember(), findMemberDocumentation(), findModuleDocumentation(), findObjCMethodDefinitions(), findTableColumns(), findTemplateInstanceRelation(), findUsedClassesForClass(), findUsedTemplateInstances(), findUsingDeclarations(), findUsingDeclImports(), findUsingDirectives(), SymbolResolver::Private::followPath(), generateDirDocs(), generateDocsForClassList(), generateOutput(), RequirementManager::generatePage(), generateXRefPages(), getCanonicalTemplateSpec(), getCanonicalTypeForIdentifier(), getDefs(), ClassDefImpl::getOutputFileBase(), DirDefImpl::getOutputFileBase(), SymbolResolver::Private::getResolvedSymbol(), SymbolResolver::Private::getResolvedSymbolRec(), SymbolResolver::Private::getResolvedType(), SymbolResolver::Private::getResolvedTypeRec(), DocParser::handleAHref(), DocParser::handleAnchor(), DocPara::handleCite(), DocPara::handleCommand(), handleCommentBlock(), DocPara::handleEmoji(), DocPara::handleFile(), DocPara::handleHtmlEndTag(), DocPara::handleHtmlHeader(), DocPara::handleHtmlStartTag(), DocParser::handleIFile(), DocParser::handleILine(), DocParser::handleImage(), DocParser::handleImg(), DocPara::handleInclude(), DocPara::handleIncludeOperator(), DocParser::handleInitialStyleCommands(), DocParser::handleInternalRef(), DocPara::handleLink(), DocParser::handleLinkedWord(), handleParametersCommentBlocks(), DocParser::handleParameterType(), DocPara::handleParamSection(), DocParser::handlePendingStyleCommands(), DocParser::handlePrefix(), DocParser::handleRef(), DocPara::handleSection(), DocPara::handleShowDate(), DocPara::handleSimpleSection(), DocPara::handleStartCode(), DocParser::handleStyleArgument(), DocParser::handleStyleEnter(), DocParser::handleStyleLeave(), DocParser::handleUnclosedStyleCommands(), DocPara::handleVhdlFlow(), DocPara::handleXRefItem(), hasLineBreak(), DocPara::injectToken(), ClassDefImpl::insertExplicitTemplateInstance(), ClassDefImpl::insertTemplateInstance(), ClassDefImpl::internalInsertMember(), DocParser::internalValidatingParseDoc(), SymbolResolver::isAccessibleFrom(), SymbolResolver::Private::isAccessibleFrom(), SymbolResolver::isAccessibleFromWithExpScope(), SymbolResolver::Private::isAccessibleFromWithExpScope(), Markdown::Private::isAtxHeader(), Markdown::Private::isBlockCommand(), isBlockQuote(), isCodeBlock(), isEmptyLine(), isEndOfList(), isExplicitPage(), isFencedCodeBlock(), Markdown::Private::isHeaderline(), isHRuler(), isLinkRef(), isListMarker(), Markdown::Private::isSpecialCommand(), isTableBlock(), isVarWithConstructor(), linkifyText(), makeTemplateInstanceRelation(), markdownFileNameToId(), matchArgument2(), matchArguments2(), matchCanonicalTypes(), matchTemplateArguments(), mergeArguments(), mergeCategories(), ClassDefImpl::mergeCategory(), DirDefImpl::mergeDirectoryInTree(), mergeScopes(), ModuleDefImpl::mergeSymbolsFrom(), SymbolResolver::Private::newResolveTypedef(), organizeSubGroupsFiltered(), DocAutoList::parse(), DocAutoListItem::parse(), DocHRef::parse(), DocHtmlBlockQuote::parse(), DocHtmlCaption::parse(), DocHtmlCell::parse(), DocHtmlDescData::parse(), DocHtmlDescList::parse(), DocHtmlDescTitle::parse(), DocHtmlDetails::parse(), DocHtmlHeader::parse(), DocHtmlList::parse(), DocHtmlListItem::parse(), DocHtmlRow::parse(), DocHtmlSummary::parse(), DocHtmlTable::parse(), DocInclude::parse(), DocIncOperator::parse(), DocIndexEntry::parse(), DocInternal::parse(), DocInternalRef::parse(), DocLink::parse(), DocPara::parse(), DocParamList::parse(), DocParamSect::parse(), DocParBlock::parse(), DocRef::parse(), DocRoot::parse(), DocSecRefItem::parse(), DocSecRefList::parse(), DocSection::parse(), DocSimpleSect::parse(), DocText::parse(), DocTitle::parse(), DocVhdlFlow::parse(), CodeFragmentManager::parseCodeFragment(), CommentScanner::parseCommentBlock(), parseCompounds(), parseFile(), parseFilesMultiThreading(), parseFilesSingleThreading(), COutlineParser::parseInput(), parseInput(), parseMain(), parsePrototype(), DocSimpleSect::parseRcs(), DocHtmlDetails::parseSummary(), DocHtmlCell::parseXml(), DocHtmlList::parseXml(), DocHtmlListItem::parseXml(), DocHtmlRow::parseXml(), DocHtmlTable::parseXml(), DocParamList::parseXml(), DocSimpleSect::parseXml(), Markdown::Private::processBlocks(), Markdown::Private::processCodeSpan(), DocParser::processCopyDoc(), Markdown::Private::processEmphasis(), Markdown::Private::processEmphasis1(), Markdown::Private::processEmphasis2(), Markdown::Private::processEmphasis3(), Preprocessor::processFile(), Markdown::Private::processHtmlTag(), Markdown::Private::processHtmlTagWrite(), Markdown::Private::processInline(), Markdown::Private::processLink(), Markdown::Private::processNmdash(), Markdown::Private::processQuotations(), Markdown::Private::processQuoted(), Markdown::Private::processSpecialCommand(), readIncludeFile(), DocParser::readTextFileByName(), readTextFileByName(), SymbolResolver::resolveClass(), ModuleManager::resolveImports(), resolveLink(), ModuleManager::resolvePartitions(), ModuleManager::resolvePartitionsRecursively(), resolveRef(), SymbolResolver::resolveSymbol(), resolveTemplateInstanceInType(), resolveTypeDef(), skipSpacesForTable(), stripIrrelevantString(), substituteTemplateArgumentsInString(), SymbolResolver::Private::substTypedef(), transferFunctionDocumentation(), transferFunctionReferences(), transferRelatedFunctionDocumentation(), transferStaticInstanceInitializers(), warnUndocumentedNamespaces(), Markdown::Private::writeBlockQuote(), DirDefImpl::writeBriefDescription(), Markdown::Private::writeCodeBlock(), DirDefImpl::writeDetailedDescription(), ClassDefImpl::writeDocumentation(), DirDefImpl::writeDocumentation(), DirRelation::writeDocumentation(), ModuleDefImpl::writeDocumentation(), ModuleDefImpl::writeExports(), Markdown::Private::writeFencedCodeBlock(), DirDefImpl::writeFileList(), ModuleDefImpl::writeFiles(), Markdown::Private::writeMarkdownImage(), Markdown::Private::writeOneLineHeaderOrRuler(), DirDefImpl::writeSubDirList(), and Markdown::Private::writeTableBlock().

◆ AUTO_TRACE_ADD

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

Definition at line 49 of file docnode.cpp.

Referenced by MemberDefImpl::_computeLinkableInProject(), SymbolResolver::Private::accessibleViaUsingDefinition(), SymbolResolver::Private::accessibleViaUsingNamespace(), addClassToContext(), addConceptToContext(), addEnumValuesToEnums(), ModuleManager::addHeader(), ModuleManager::addImport(), addLocalObjCMethod(), addMemberFunction(), DirDefImpl::addUsesDependency(), addVariable(), addVariableToClass(), addVariableToFile(), buildDefineList(), buildDirectories(), buildFunctionList(), buildGroupListFiltered(), buildNamespaceList(), buildTypedefList(), ModuleManager::collectExportedSymbols(), combineDeclarationAndDefinition(), computeCommonDirPrefix(), DirDefImpl::computeDependencies(), computeDirDependencies(), computeTemplateClassRelations(), DirDefImpl::createNewDir(), ClassDefImpl::deepCopy(), DocParser::defaultHandleToken(), distributeConceptGroups(), CodeFragmentManager::Private::FragmentInfo::findBlockMarkers(), findClassRelation(), findEnumDocumentation(), findEnums(), findFriends(), findGlobalMember(), findMember(), findTemplateInstanceRelation(), findUsedClassesForClass(), findUsingDeclarations(), findUsingDeclImports(), findUsingDirectives(), SymbolResolver::Private::followPath(), RequirementManager::generatePage(), getCanonicalTypeForIdentifier(), SymbolResolver::Private::getResolvedSymbol(), SymbolResolver::Private::getResolvedSymbolRec(), SymbolResolver::Private::getResolvedType(), SymbolResolver::Private::getResolvedTypeRec(), DocParser::handleImg(), DocParser::handleLinkedWord(), handleParametersCommentBlocks(), ClassDefImpl::internalInsertMember(), SymbolResolver::Private::isAccessibleFrom(), SymbolResolver::Private::isAccessibleFromWithExpScope(), isLinkRef(), makeTemplateInstanceRelation(), mergeArguments(), mergeCategories(), ClassDefImpl::mergeCategory(), SymbolResolver::Private::newResolveTypedef(), organizeSubGroupsFiltered(), DocIncOperator::parse(), DocPara::parse(), CodeFragmentManager::parseCodeFragment(), parseCompounds(), parseInput(), Markdown::Private::processCodeSpan(), Markdown::Private::processSpecialCommand(), readIncludeFile(), SymbolResolver::resolveClass(), ModuleManager::resolveImports(), ModuleManager::resolvePartitionsRecursively(), resolveRef(), resolveTemplateInstanceInType(), resolveTypeDef(), skipSpacesForTable(), substituteTemplateArgumentsInString(), transferFunctionReferences(), transferRelatedFunctionDocumentation(), transferStaticInstanceInitializers(), Markdown::Private::writeBlockQuote(), DirDefImpl::writeFileList(), and DirDefImpl::writeSubDirList().

◆ AUTO_TRACE_EXIT

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

Definition at line 50 of file docnode.cpp.

Referenced by SymbolResolver::Private::accessibleViaUsingDefinition(), SymbolResolver::Private::accessibleViaUsingNamespace(), ClassDefImpl::ClassDefImpl(), computeIndentExcludingListMarkers(), ClassDefImpl::containsOverload(), DocParser::defaultHandleTitleAndSize(), DocRef::DocRef(), encodeDirName(), extractCanonicalType(), extractClassNameFromType(), Markdown::extractPageTitle(), Markdown::Private::extractTitleId(), DocParser::findDocsForMemberOrCompound(), Markdown::Private::findEmphasisChar(), Markdown::Private::findEndOfLine(), findFunctionPtr(), findTableColumns(), SymbolResolver::Private::followPath(), getCanonicalTemplateSpec(), getCanonicalTypeForIdentifier(), SymbolResolver::Private::getResolvedSymbol(), SymbolResolver::Private::getResolvedSymbolRec(), SymbolResolver::Private::getResolvedType(), SymbolResolver::Private::getResolvedTypeRec(), DocPara::handleCommand(), DocPara::handleHtmlEndTag(), DocPara::handleHtmlStartTag(), DocPara::handleParamSection(), DocPara::handleStartCode(), DocParser::handleStyleArgument(), hasLineBreak(), DocParser::internalValidatingParseDoc(), SymbolResolver::isAccessibleFrom(), SymbolResolver::Private::isAccessibleFrom(), SymbolResolver::isAccessibleFromWithExpScope(), SymbolResolver::Private::isAccessibleFromWithExpScope(), Markdown::Private::isAtxHeader(), Markdown::Private::isBlockCommand(), isBlockQuote(), isCodeBlock(), isEmptyLine(), isEndOfList(), isExplicitPage(), isFencedCodeBlock(), Markdown::Private::isHeaderline(), isHRuler(), isLinkRef(), isListMarker(), Markdown::Private::isSpecialCommand(), isTableBlock(), isVarWithConstructor(), markdownFileNameToId(), matchArgument2(), matchTemplateArguments(), mergeScopes(), SymbolResolver::Private::newResolveTypedef(), DocAutoList::parse(), DocAutoListItem::parse(), DocHtmlBlockQuote::parse(), DocHtmlDetails::parse(), DocHtmlList::parse(), DocHtmlListItem::parse(), DocIndexEntry::parse(), DocInternal::parse(), DocPara::parse(), DocParamList::parse(), DocParamSect::parse(), DocParBlock::parse(), DocSection::parse(), DocSimpleSect::parse(), CommentScanner::parseCommentBlock(), DocHtmlList::parseXml(), DocHtmlListItem::parseXml(), DocParamList::parseXml(), DocSimpleSect::parseXml(), Markdown::Private::processCodeSpan(), DocParser::processCopyDoc(), Markdown::Private::processEmphasis(), Markdown::Private::processEmphasis1(), Markdown::Private::processEmphasis2(), Markdown::Private::processEmphasis3(), Markdown::Private::processHtmlTagWrite(), Markdown::Private::processLink(), Markdown::Private::processNmdash(), Markdown::Private::processQuoted(), Markdown::Private::processSpecialCommand(), SymbolResolver::resolveClass(), resolveLink(), SymbolResolver::resolveSymbol(), resolveTypeDef(), stripIrrelevantString(), substituteTemplateArgumentsInString(), SymbolResolver::Private::substTypedef(), Markdown::Private::writeBlockQuote(), Markdown::Private::writeCodeBlock(), and Markdown::Private::writeTableBlock().

◆ INTERNAL_ASSERT

#define INTERNAL_ASSERT ( x)
Value:
do {} while(0)

Definition at line 53 of file docnode.cpp.

Referenced by DocPara::handleCommand(), DocPara::parse(), and DocSection::parse().

Typedef Documentation

◆ RowSpanList

typedef std::vector<ActiveRowSpan> RowSpanList

List of ActiveRowSpan classes.

Definition at line 2414 of file docnode.cpp.

Function Documentation

◆ checkIfHtmlEndTagEndsAutoList()

bool checkIfHtmlEndTagEndsAutoList ( DocParser * parser,
const DocNodeVariant * n )
static

Definition at line 5732 of file docnode.cpp.

5733{
5734 // expected hierarchy:
5735 // 1. DocAutoListItem <- n
5736 // 2. DocAutoList <- parent(n)
5737 // 3. DocPara <- parent(parent(n))
5738
5739 // step 1
5740 if (!std::get_if<DocAutoListItem>(n)) // not inside a auto list item
5741 {
5742 return false;
5743 }
5744
5745 // step 2
5746 n = parent(n);
5747 int indent = 0;
5748 const auto docAutoList = std::get_if<DocAutoList>(n);
5749 if (docAutoList) // capture indent
5750 {
5751 indent = docAutoList->indent();
5752 }
5753 else
5754 {
5755 return false;
5756 }
5757
5758 // step 3
5759 n = parent(n);
5760 const auto docPara = std::get_if<DocPara>(n);
5761 if (docPara)
5762 {
5763 QCString tagNameLower = QCString(parser->context.token->name).lower();
5764 auto topStyleChange = [](const DocStyleChangeStack &stack) -> const DocStyleChange &
5765 {
5766 return std::get<DocStyleChange>(*stack.top());
5767 };
5768
5769 if (parser->context.styleStack.empty() || // no style change
5770 (topStyleChange(parser->context.styleStack).tagName()==tagNameLower && // correct style change
5771 topStyleChange(parser->context.styleStack).position()!=parser->context.nodeStack.size()) // wrong position, so normal close
5772 )
5773 {
5774 // insert an artificial 'end of autolist' marker and parse again
5775 QCString indentStr;
5776 indentStr.fill(' ',indent);
5777 parser->tokenizer.unputString("\\ilinebr "+indentStr+".\\ilinebr"+indentStr+"</"+parser->context.token->name+">");
5778 return true;
5779 }
5780 }
5781 return false;
5782}
DocTokenizer tokenizer
DocParserContext context
Node representing a style change.
Definition docnode.h:268
void unputString(const QCString &tag)
This is an alternative implementation of QCString.
Definition qcstring.h:101
QCString lower() const
Definition qcstring.h:249
QCString fill(char c, int len=-1)
Fills a string with a predefined character.
Definition qcstring.h:193
constexpr DocNodeVariant * parent(DocNodeVariant *n)
returns the parent node of a given node n or nullptr if the node has no parent.
Definition docnode.h:1336
IterableStack< const DocNodeVariant * > DocStyleChangeStack
Definition docparser_p.h:55
DocStyleChangeStack styleStack
Definition docparser_p.h:68
DocNodeStack nodeStack
Definition docparser_p.h:67
TokenInfo * token
Definition docparser_p.h:95
QCString name

References DocParser::context, QCString::fill(), QCString::lower(), TokenInfo::name, DocParserContext::nodeStack, parent(), DocParserContext::styleStack, DocParserContext::token, DocParser::tokenizer, and DocTokenizer::unputString().

Referenced by DocPara::parse().

◆ findAttribute()

bool findAttribute ( const HtmlAttribList & tagHtmlAttribs,
const char * attrName,
QCString * result )
static

Definition at line 5025 of file docnode.cpp.

5028{
5029
5030 for (const auto &opt : tagHtmlAttribs)
5031 {
5032 if (opt.name==attrName)
5033 {
5034 *result = opt.value;
5035 return TRUE;
5036 }
5037 }
5038 return FALSE;
5039}
#define TRUE
Definition qcstring.h:37
#define FALSE
Definition qcstring.h:34

References FALSE, and TRUE.

Referenced by DocPara::handleHtmlStartTag().

◆ flattenParagraphs()

void flattenParagraphs ( DocNodeVariant * root,
DocNodeList & children )
static

Definition at line 859 of file docnode.cpp.

860{
861 DocNodeList newChildren;
862 for (auto &dn : children)
863 {
864 DocPara *para = std::get_if<DocPara>(&dn);
865 if (para)
866 {
867 //// move the children of the paragraph to the end of the newChildren list
868 newChildren.move_append(para->children());
869 }
870 }
871
872 // replace the children list by the newChildren list
873 children.clear();
874 children.move_append(newChildren);
875 // reparent the children
876 for (auto &cn : children)
877 {
878 setParent(&cn,root);
879 // we also need to set the parent for each child of cn, as cn's address may have changed.
880 auto opt_children = call_method_children(&cn);
881 if (opt_children)
882 {
883 for (auto &ccn : *opt_children)
884 {
885 setParent(&ccn,&cn);
886 }
887 }
888 }
889}
DocNodeList & children()
Definition docnode.h:143
Node representing a paragraph in the documentation tree.
Definition docnode.h:1089
void clear()
clears the contents
Definition growvector.h:143
static void setParent(DocNodeVariant *n, DocNodeVariant *newParent)
Definition docnode.cpp:120
DocNodeList * call_method_children(DocNodeVariant *v)
Definition docnode.h:1391
void move_append(DocNodeList &l)
moves the element of list l at the end of this list.
Definition docnode.cpp:850

References call_method_children(), DocCompoundNode::children(), GrowVector< T >::clear(), DocNodeList::move_append(), and setParent().

Referenced by DocRef::parse(), and DocTitle::parseFromString().

◆ setParent()

void setParent ( DocNodeVariant * n,
DocNodeVariant * newParent )
static

Definition at line 120 of file docnode.cpp.

121{
122 std::visit([&](auto &&x)->decltype(auto) { return x.setParent(newParent); }, *n);
123}

Referenced by flattenParagraphs().

◆ skipSpacesForTable()

Token skipSpacesForTable ( DocParser * parser)
static

Definition at line 2017 of file docnode.cpp.

2018{
2019 AUTO_TRACE();
2020 // get next token
2021 Token tok=parser->tokenizer.lex();
2022 // skip whitespace and tbody, thead and tfoot tags
2023 while (tok.is_any_of(TokenRetval::TK_WHITESPACE,TokenRetval::TK_NEWPARA,TokenRetval::TK_HTMLTAG,
2024 TokenRetval::TK_COMMAND_AT,TokenRetval::TK_COMMAND_BS))
2025 {
2026 if (tok.is(TokenRetval::TK_HTMLTAG))
2027 {
2028 AUTO_TRACE_ADD("html_tag={}",parser->context.token->name);
2030 // skip over tbody, thead, tfoot tags
2031 if (tagId==HtmlTagType::HTML_TBODY ||
2032 tagId==HtmlTagType::HTML_THEAD ||
2034 {
2035 tok=parser->tokenizer.lex();
2036 }
2037 else
2038 {
2039 break;
2040 }
2041 }
2042 else if (tok.is_any_of(TokenRetval::TK_COMMAND_AT, TokenRetval::TK_COMMAND_BS))
2043 {
2044 QCString cmdName=parser->context.token->name;
2045 AUTO_TRACE_ADD("command={}",cmdName);
2046 auto cmdType = Mappers::cmdMapper->map(cmdName);
2047 if (cmdType==CommandType::CMD_ILINE)
2048 {
2049 parser->tokenizer.pushState();
2050 parser->tokenizer.setStateILine();
2051 tok = parser->tokenizer.lex();
2052 if (!tok.is(TokenRetval::TK_WORD))
2053 {
2054 warn_doc_error(parser->context.fileName,parser->tokenizer.getLineNr(),"invalid argument for command '{:c}{}'",
2055 tok.command_to_char(),cmdName);
2056 }
2057 parser->tokenizer.popState();
2058 tok = parser->tokenizer.lex();
2059 }
2060 else
2061 {
2062 break;
2063 }
2064 }
2065 else
2066 {
2067 AUTO_TRACE_ADD("skip whitespace");
2068 tok=parser->tokenizer.lex();
2069 }
2070 }
2071 return tok;
2072}
int getLineNr() const
void setStateILine()
bool is(TokenRetval rv) const
bool is_any_of(ARGS... args) const
char command_to_char() const
HtmlTagType
Definition cmdmapper.h:173
#define AUTO_TRACE_ADD(...)
Definition docnode.cpp:49
#define AUTO_TRACE(...)
Definition docnode.cpp:48
#define warn_doc_error(file, line, fmt,...)
Definition message.h:112
const Mapper< HtmlTagType > * htmlTagMapper
const Mapper< CommandType > * cmdMapper
QCString fileName
Definition docparser_p.h:71

References AUTO_TRACE, AUTO_TRACE_ADD, CMD_ILINE, Mappers::cmdMapper, Token::command_to_char(), DocParser::context, DocParserContext::fileName, DocTokenizer::getLineNr(), HTML_TBODY, HTML_TFOOT, HTML_THEAD, Mappers::htmlTagMapper, Token::is(), Token::is_any_of(), DocTokenizer::lex(), TokenInfo::name, DocTokenizer::popState(), DocTokenizer::pushState(), DocTokenizer::setStateILine(), DocParserContext::token, DocParser::tokenizer, and warn_doc_error.

Referenced by DocHtmlRow::parse(), and DocHtmlTable::parse().

◆ stripKnownExtensions()

QCString stripKnownExtensions ( const QCString & text)
static

Strips known html and tex extensions from text.

Definition at line 106 of file docnode.cpp.

107{
108 QCString result=text;
109 if (result.endsWith(".tex"))
110 {
111 result=result.left(result.length()-4);
112 }
114 {
115 result=result.left(result.length()-Doxygen::htmlFileExtension.length());
116 }
117 return result;
118}
static QCString htmlFileExtension
Definition doxygen.h:122
size_t length() const
Returns the length of the string, not counting the 0-terminator.
Definition qcstring.h:166
bool endsWith(const char *s) const
Definition qcstring.h:524
QCString right(size_t len) const
Definition qcstring.h:234
QCString left(size_t len) const
Definition qcstring.h:229

References QCString::endsWith(), Doxygen::htmlFileExtension, QCString::left(), QCString::length(), and QCString::right().

Referenced by DocLink::DocLink(), DocRef::DocRef(), and DocSecRefItem::parse().

◆ unescapeCRef()

void unescapeCRef ( QCString & s)
static

Definition at line 84 of file docnode.cpp.

85{
86 QCString result;
87 const char *p = s.data();
88 if (p)
89 {
90 char c = 0;
91 while ((c=*p++))
92 {
93 if (c=='{') c='<'; else if (c=='}') c='>';
94 result+=c;
95 }
96 }
97
98 result=substitute(result,"&lt;","<");
99 result=substitute(result,"&gt;",">");
100 s = result;
101}
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
QCString substitute(const QCString &s, const QCString &src, const QCString &dst)
substitute all occurrences of src in s by dst
Definition qcstring.cpp:571

References QCString::data(), and substitute().

Referenced by DocPara::handleHtmlStartTag().

Variable Documentation

◆ g_plantumlEngine

const StringUnorderedSet g_plantumlEngine
static
Initial value:
{
"uml", "bpm", "wire", "dot", "ditaa",
"salt", "math", "latex", "gantt", "mindmap",
"wbs", "yaml", "creole", "json", "flow",
"board", "git", "hcl", "regex", "ebnf",
"files", "chen", "chronology", "chart", "nwdiag",
"packetdiag", "project", "sprites"
}

Definition at line 71 of file docnode.cpp.

71 {
72 "uml", "bpm", "wire", "dot", "ditaa",
73 "salt", "math", "latex", "gantt", "mindmap",
74 "wbs", "yaml", "creole", "json", "flow",
75 "board", "git", "hcl", "regex", "ebnf",
76 "files", "chen", "chronology", "chart", "nwdiag",
77 "packetdiag", "project", "sprites"
78};

Referenced by DocPara::handleCommand().

◆ g_sectionLevelToName

const char* g_sectionLevelToName[]
static
Initial value:
=
{
"page",
"section",
"subsection",
"subsubsection",
"paragraph",
"subparagraph"
}

Definition at line 58 of file docnode.cpp.

58 {
59 "page",
60 "section",
61 "subsection",
62 "subsubsection",
63 "paragraph",
64 "subparagraph"
65};

Referenced by DocSection::parse().