Doxygen
Loading...
Searching...
No Matches
DocSimpleSect Class Referencefinal

Node representing a simple section. More...

#include <src/docnode.h>

Inheritance diagram for DocSimpleSect:
Collaboration diagram for DocSimpleSect:

Public Types

enum  Type {
  Unknown , See , Return , Author ,
  Authors , Version , Since , Date ,
  Note , Warning , Copyright , Pre ,
  Post , Invar , Remark , Attention ,
  Important , User , Rcs
}

Public Member Functions

 DocSimpleSect (DocParser *parser, DocNodeVariant *parent, Type t)
Type type () const
DString typeString () const
Token parse (bool userTitle, bool needsSeparator)
Token parseRcs ()
Token parseXml ()
void appendLinkWord (const DString &word)
bool hasTitle () const
const DocNodeVarianttitle () 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

Type m_type = Unknown
std::unique_ptr< DocNodeVariantm_title

Additional Inherited Members

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

Detailed Description

Node representing a simple section.

Definition at line 1025 of file docnode.h.

Member Enumeration Documentation

◆ Type

Enumerator
Unknown 
See 
Return 
Author 
Authors 
Version 
Since 
Date 
Note 
Warning 
Copyright 
Pre 
Post 
Invar 
Remark 
Attention 
Important 
User 
Rcs 

Definition at line 1028 of file docnode.h.

Constructor & Destructor Documentation

◆ DocSimpleSect()

DocSimpleSect::DocSimpleSect ( DocParser * parser,
DocNodeVariant * parent,
Type t )

Definition at line 3143 of file docnode.cpp.

3143 :
3145{
3146}
DocCompoundNode(DocParser *parser, DocNodeVariant *parent)
Definition docnode.h:141
DocParser * parser()
Definition docnode.h:97
DocNodeVariant * parent()
Definition docnode.h:89

References DocCompoundNode::DocCompoundNode(), m_type, DocNode::parent(), and DocNode::parser().

Member Function Documentation

◆ appendLinkWord()

void DocSimpleSect::appendLinkWord ( const DString & word)

Definition at line 3243 of file docnode.cpp.

3244{
3245 DocPara *p=nullptr;
3246 if (children().empty() || (p=std::get_if<DocPara>(&children().back()))==nullptr)
3247 {
3248 children().append<DocPara>(parser(),thisVariant());
3249 p = children().get_last<DocPara>();
3250 }
3251 else
3252 {
3253 // Comma-separate <seealso> links.
3254 p->injectToken(Token::make_TK_WORD(),",");
3255 p->injectToken(Token::make_TK_WHITESPACE()," ");
3256 }
3257
3258 parser()->context.inSeeBlock=true;
3259 p->injectToken(Token::make_TK_LNKWORD(),word);
3260 parser()->context.inSeeBlock=false;
3261}
DocNodeList & children()
Definition docnode.h:143
DocNodeVariant * thisVariant()
Definition docnode.h:92
void append(Args &&... args)
Append a new DocNodeVariant to the list by constructing it with type T and parameters Args.
Definition docnode.h:1404
T * get_last()
Returns a pointer to the last element in the list if that element exists and holds a T,...
Definition docnode.h:1415
bool injectToken(Token tok, const DString &tokText)
Definition docnode.cpp:4051
DocParserContext context

References DocNodeList::append(), DocCompoundNode::children(), DocParser::context, DocNodeList::get_last(), DocPara::injectToken(), DocParserContext::inSeeBlock, DocNode::parser(), and DocNode::thisVariant().

◆ hasTitle()

bool DocSimpleSect::hasTitle ( ) const

Definition at line 3148 of file docnode.cpp.

3149{
3150 return m_title && std::get<DocTitle>(*m_title).hasTitle();
3151}
std::unique_ptr< DocNodeVariant > m_title
Definition docnode.h:1046

References m_title.

Referenced by DocbookDocVisitor::operator()().

◆ parse()

Token DocSimpleSect::parse ( bool userTitle,
bool needsSeparator )

Definition at line 3153 of file docnode.cpp.

3154{
3155 AUTO_TRACE();
3156 auto ns = AutoNodeStack(parser(),thisVariant());
3157
3158 // handle case for user defined title
3159 if (userTitle)
3160 {
3162 std::get_if<DocTitle>(m_title.get())->parse();
3163 }
3164
3165 // add new paragraph as child
3166 if (!children().empty() && std::holds_alternative<DocPara>(children().back()))
3167 {
3168 std::get<DocPara>(children().back()).markLast(false);
3169 }
3170 bool markFirst = children().empty();
3171 if (needsSeparator)
3172 {
3173 children().append<DocSimpleSectSep>(parser(),thisVariant());
3174 }
3175 children().append<DocPara>(parser(),thisVariant());
3176 DocPara *par = children().get_last<DocPara>();
3177 if (markFirst)
3178 {
3179 par->markFirst();
3180 }
3181 par->markLast();
3182
3183 // parse the contents of the paragraph
3184 Token retval = par->parse();
3185
3186 AUTO_TRACE_EXIT("retval={}",retval.to_string());
3187 return retval; // 0==EOF, TokenRetval::TK_NEWPARA, TokenRetval::TK_LISTITEM, TokenRetval::TK_ENDLIST, TokenRetval::RetVal_SimpleSec
3188}
AutoNodeStack(DocParser *parser, DocNodeVariant *node)
bool empty() const
checks whether the container is empty
Definition growvector.h:140
TOKEN_SPECIFICATIONS RETVAL_SPECIFICATIONS const char * to_string() const
#define AUTO_TRACE(...)
Definition docnode.cpp:51
#define AUTO_TRACE_EXIT(...)
Definition docnode.cpp:53
std::unique_ptr< DocNodeVariant > createDocNode(Args &&...args)
Definition docnode.h:1500

References DocNodeList::append(), AUTO_TRACE, AUTO_TRACE_EXIT, AutoNodeStack::AutoNodeStack(), DocCompoundNode::children(), createDocNode(), GrowVector< T >::empty(), DocNodeList::get_last(), m_title, DocPara::markLast(), DocNode::parser(), DocNode::thisVariant(), and Token::to_string().

Referenced by DocPara::handleSimpleSection().

◆ parseRcs()

Token DocSimpleSect::parseRcs ( )

Definition at line 3190 of file docnode.cpp.

3191{
3192 AUTO_TRACE();
3193 auto ns = AutoNodeStack(parser(),thisVariant());
3194
3196 DocTitle *title = &std::get<DocTitle>(*m_title);
3197 title->parseFromString(thisVariant(),parser()->context.token->name);
3198
3199 DString text = parser()->context.token->text;
3200 { DocParser::AutoSaveContext saveContext(*parser());
3202 }
3203
3204 return Token::make_RetVal_OK();
3205}
Token internalValidatingParseDoc(DocNodeVariant *parent, DocNodeList &children, const DString &doc)
const DocNodeVariant * title() const
Definition docnode.h:1042
void parseFromString(DocNodeVariant *, const DString &title)
Definition docnode.cpp:3130
DString text
TokenInfo * token
Definition docparser_p.h:94

References AUTO_TRACE, AutoNodeStack::AutoNodeStack(), DocCompoundNode::children(), DocParser::context, createDocNode(), DocParser::internalValidatingParseDoc(), m_title, DocTitle::parseFromString(), DocNode::parser(), TokenInfo::text, DocNode::thisVariant(), title(), and DocParserContext::token.

◆ parseXml()

Token DocSimpleSect::parseXml ( )

Definition at line 3207 of file docnode.cpp.

3208{
3209 AUTO_TRACE();
3210 auto ns = AutoNodeStack(parser(),thisVariant());
3211
3212 Token retval = Token::make_RetVal_OK();
3213 for (;;)
3214 {
3215 // add new paragraph as child
3216 if (!children().empty() && std::holds_alternative<DocPara>(children().back()))
3217 {
3218 std::get<DocPara>(children().back()).markLast(false);
3219 }
3220 bool markFirst = children().empty();
3221 children().append<DocPara>(parser(),thisVariant());
3222 DocPara *par = children().get_last<DocPara>();
3223 if (markFirst)
3224 {
3225 par->markFirst();
3226 }
3227 par->markLast();
3228
3229 // parse the contents of the paragraph
3230 retval = par->parse();
3231 if (retval.is_any_of(TokenRetval::TK_NONE,TokenRetval::TK_EOF)) break;
3232 if (retval.is(TokenRetval::RetVal_CloseXml))
3233 {
3234 retval = Token::make_RetVal_OK();
3235 break;
3236 }
3237 }
3238
3239 AUTO_TRACE_EXIT("retval={}",retval.to_string());
3240 return retval;
3241}
bool is(TokenRetval rv) const
bool is_any_of(ARGS... args) const

References DocNodeList::append(), AUTO_TRACE, AUTO_TRACE_EXIT, AutoNodeStack::AutoNodeStack(), DocCompoundNode::children(), GrowVector< T >::empty(), DocNodeList::get_last(), Token::is(), Token::is_any_of(), DocPara::markLast(), DocNode::parser(), DocNode::thisVariant(), and Token::to_string().

Referenced by DocPara::handleSimpleSection().

◆ title()

◆ type()

◆ typeString()

DString DocSimpleSect::typeString ( ) const

Definition at line 3263 of file docnode.cpp.

3264{
3265 switch (m_type)
3266 {
3267 case Unknown: break;
3268 case See: return "see";
3269 case Return: return "return";
3270 case Author: // fall through
3271 case Authors: return "author";
3272 case Version: return "version";
3273 case Since: return "since";
3274 case Date: return "date";
3275 case Note: return "note";
3276 case Warning: return "warning";
3277 case Pre: return "pre";
3278 case Post: return "post";
3279 case Copyright: return "copyright";
3280 case Invar: return "invariant";
3281 case Remark: return "remark";
3282 case Attention: return "attention";
3283 case Important: return "important";
3284 case User: return "user";
3285 case Rcs: return "rcs";
3286 }
3287 return "unknown";
3288}

References Attention, Author, Authors, Copyright, Date, Important, Invar, m_type, Note, Post, Pre, Rcs, Remark, Return, See, Since, Unknown, User, Version, and Warning.

Referenced by HtmlDocVisitor::operator()().

Member Data Documentation

◆ m_title

std::unique_ptr<DocNodeVariant> DocSimpleSect::m_title
private

Definition at line 1046 of file docnode.h.

Referenced by hasTitle(), parse(), parseRcs(), and title().

◆ m_type

Type DocSimpleSect::m_type = Unknown
private

Definition at line 1045 of file docnode.h.

Referenced by DocSimpleSect(), type(), and typeString().


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