Doxygen
Loading...
Searching...
No Matches
DocRoot Class Reference

Root node of documentation tree. More...

#include <src/docnode.h>

+ Inheritance diagram for DocRoot:
+ Collaboration diagram for DocRoot:

Public Member Functions

 DocRoot (DocParser *parser, bool indent, bool sl)
 
void parse ()
 
bool indent () const
 
bool singleLine () const
 
bool isEmpty () const
 
- Public Member Functions inherited from DocCompoundNode
 DocCompoundNode (DocParser *parser, DocNodeVariant *parent)
 
DocNodeListchildren ()
 
const DocNodeListchildren () const
 
- Public Member Functions inherited from DocNode
 DocNode (DocParser *parser, DocNodeVariant *parent)
 
 ~DocNode ()=default
 
DocNodeVariantparent ()
 
const DocNodeVariantparent () const
 
DocNodeVariantthisVariant ()
 
const DocNodeVariantthisVariant () const
 
void setThisVariant (DocNodeVariant *thisVariant)
 
DocParserparser ()
 
const DocParserparser () const
 
void setParent (DocNodeVariant *parent)
 
bool isPreformatted () const
 

Private Attributes

bool m_indent = false
 
bool m_singleLine = false
 

Additional Inherited Members

- Protected Types inherited from DocNode
enum  RefType { Unknown , Anchor , Section , Table }
 
- Protected Member Functions inherited from DocNode
void setInsidePreformatted (bool p)
 

Detailed Description

Root node of documentation tree.

Definition at line 1306 of file docnode.h.

Constructor & Destructor Documentation

◆ DocRoot()

DocRoot::DocRoot ( DocParser * parser,
bool indent,
bool sl )
inline

Definition at line 1309 of file docnode.h.

DocCompoundNode(DocParser *parser, DocNodeVariant *parent)
Definition docnode.h:140
DocParser * parser()
Definition docnode.h:97
bool indent() const
Definition docnode.h:1312
bool m_singleLine
Definition docnode.h:1318
bool m_indent
Definition docnode.h:1317

References DocCompoundNode::DocCompoundNode(), indent(), m_indent, m_singleLine, and DocNode::parser().

Member Function Documentation

◆ indent()

bool DocRoot::indent ( ) const
inline

Definition at line 1312 of file docnode.h.

1312{ return m_indent; }

References m_indent.

Referenced by DocRoot(), and RTFDocVisitor::operator()().

◆ isEmpty()

bool DocRoot::isEmpty ( ) const
inline

Definition at line 1314 of file docnode.h.

1314{ return children().empty(); }
DocNodeList & children()
Definition docnode.h:142
bool empty() const
checks whether the container is empty
Definition growvector.h:140

References DocCompoundNode::children(), and GrowVector< T >::empty().

◆ parse()

void DocRoot::parse ( )

Definition at line 6048 of file docnode.cpp.

6049{
6050 AUTO_TRACE();
6051 auto ns = AutoNodeStack(parser(),thisVariant());
6053 Token retval = Token::make_TK_NONE();
6054
6055 // first parse any number of paragraphs
6056 bool isFirst=TRUE;
6057 DocPara *lastPar = nullptr;
6058 do
6059 {
6060 {
6061 children().append<DocPara>(parser(),thisVariant());
6062 DocPara *par = children().get_last<DocPara>();
6063 if (isFirst) { par->markFirst(); isFirst=FALSE; }
6064 retval=par->parse();
6065 if (par->isEmpty() && par->attribs().empty())
6066 {
6067 children().pop_back();
6068 }
6069 else
6070 {
6071 lastPar = par;
6072 }
6073 }
6074 auto checkParagraph = [this,&retval](Token t,int level,const char *sectionType,const char *parentSectionType) {
6075 if (retval == t)
6076 {
6077 if (!AnchorGenerator::instance().isGenerated(parser()->context.token->sectionId.str()))
6078 {
6079 warn_doc_error(parser()->context.fileName,
6080 parser()->tokenizer.getLineNr(),
6081 "found %s command (id: '%s') outside of %s context!",
6082 sectionType,qPrint(parser()->context.token->sectionId),parentSectionType);
6083 }
6084 while (retval==t)
6085 {
6086 if (!parser()->context.token->sectionId.isEmpty())
6087 {
6088 const SectionInfo *sec=SectionManager::instance().find(parser()->context.token->sectionId);
6089 if (sec)
6090 {
6091 children().append<DocSection>(parser(),thisVariant(),
6092 level,
6094 retval = children().get_last<DocSection>()->parse();
6095 }
6096 else
6097 {
6098 warn_doc_error(parser()->context.fileName,parser()->tokenizer.getLineNr(),"Invalid %s id '%s'; ignoring %s",
6099 sectionType,qPrint(parser()->context.token->sectionId),sectionType);
6100 retval = Token::make_TK_NONE();
6101 }
6102 }
6103 else
6104 {
6105 warn_doc_error(parser()->context.fileName,parser()->tokenizer.getLineNr(),"Missing id for %s; ignoring %s",sectionType,sectionType);
6106 retval = Token::make_TK_NONE();
6107 }
6108 }
6109 }
6110 };
6111 checkParagraph(Token::make_RetVal_SubSubParagraph(), 6, "subsubparagraph", "subparagraph" );
6112 checkParagraph(Token::make_RetVal_SubParagraph(), 5, "subparagraph", "paragraph" );
6113 checkParagraph(Token::make_RetVal_Paragraph(), 4, "paragraph", "subsubsection" );
6114 checkParagraph(Token::make_RetVal_Subsubsection(), 3, "subsubsection", "subsection" );
6115 checkParagraph(Token::make_RetVal_Subsection(), 2, "subsection", "section" );
6116
6117 if (retval.is(TokenRetval::TK_LISTITEM))
6118 {
6119 warn_doc_error(parser()->context.fileName,parser()->tokenizer.getLineNr(),"Invalid list item found");
6120 }
6121 if (retval.is(TokenRetval::RetVal_Internal))
6122 {
6123 children().append<DocInternal>(parser(),thisVariant());
6124 retval = children().get_last<DocInternal>()->parse(1);
6125 }
6126 } while (!retval.is_any_of(TokenRetval::TK_NONE,TokenRetval::TK_EOF,TokenRetval::RetVal_Section));
6127 if (lastPar) lastPar->markLast();
6128
6129 //printf("DocRoot::parse() retval=%d %d\n",retval,TokenRetval::RetVal_Section);
6130 // then parse any number of level1 sections
6131 while (retval.is(TokenRetval::RetVal_Section))
6132 {
6133 if (!parser()->context.token->sectionId.isEmpty())
6134 {
6135 const SectionInfo *sec=SectionManager::instance().find(parser()->context.token->sectionId);
6136 if (sec)
6137 {
6138 children().append<DocSection>(parser(),thisVariant(),
6139 1,
6141 retval = children().get_last<DocSection>()->parse();
6142 }
6143 else
6144 {
6145 warn_doc_error(parser()->context.fileName,parser()->tokenizer.getLineNr(),"Invalid section id '%s'; ignoring section",qPrint(parser()->context.token->sectionId));
6146 retval = Token::make_TK_NONE();
6147 }
6148 }
6149 else
6150 {
6151 warn_doc_error(parser()->context.fileName,parser()->tokenizer.getLineNr(),"Missing id for section; ignoring section");
6152 retval = Token::make_TK_NONE();
6153 }
6154 }
6155
6157}
static AnchorGenerator & instance()
Returns the singleton instance.
Definition anchor.cpp:38
DocNodeVariant * thisVariant()
Definition docnode.h:92
void markLast(bool v=TRUE)
Definition docnode.h:1080
DocTokenizer tokenizer
DocParserContext context
void handleUnclosedStyleCommands()
void parse()
Definition docnode.cpp:6048
void setStatePara()
void pop_back()
removes the last element
Definition growvector.h:115
const T * find(const std::string &key) const
Find an object given the key.
Definition linkedmap.h:47
static SectionManager & instance()
returns a reference to the singleton
Definition section.h:175
bool is(TokenRetval rv) const
bool is_any_of(ARGS... args) const
#define AUTO_TRACE(...)
Definition docnode.cpp:46
#define warn_doc_error(file, line, fmt,...)
Definition message.h:74
const char * qPrint(const char *s)
Definition qcstring.h:672
#define TRUE
Definition qcstring.h:37
#define FALSE
Definition qcstring.h:34
void append(Args &&... args)
Append a new DocNodeVariant to the list by constructing it with type T and parameters Args.
Definition docnode.h:1393
T * get_last()
Returns a pointer to the last element in the list if that element exists and holds a T,...
Definition docnode.h:1404
TokenInfo * token
Definition docparser_p.h:92
QCString sectionId

References DocNodeList::append(), AUTO_TRACE, DocCompoundNode::children(), DocParser::context, FALSE, LinkedMap< T, Hash, KeyEqual, Map >::find(), DocNodeList::get_last(), DocParser::handleUnclosedStyleCommands(), AnchorGenerator::instance(), SectionManager::instance(), Token::is(), Token::is_any_of(), DocPara::markLast(), parse(), DocNode::parser(), GrowVector< T >::pop_back(), qPrint(), TokenInfo::sectionId, DocTokenizer::setStatePara(), DocNode::thisVariant(), DocParserContext::token, DocParser::tokenizer, TRUE, and warn_doc_error.

Referenced by parse().

◆ singleLine()

bool DocRoot::singleLine ( ) const
inline

Definition at line 1313 of file docnode.h.

1313{ return m_singleLine; }

References m_singleLine.

Referenced by RTFDocVisitor::operator()().

Member Data Documentation

◆ m_indent

bool DocRoot::m_indent = false
private

Definition at line 1317 of file docnode.h.

Referenced by DocRoot(), and indent().

◆ m_singleLine

bool DocRoot::m_singleLine = false
private

Definition at line 1318 of file docnode.h.

Referenced by DocRoot(), and singleLine().


The documentation for this class was generated from the following files: