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

Node representing a parameter list. More...

#include <src/docnode.h>

Inheritance diagram for DocParamList:
Collaboration diagram for DocParamList:

Public Member Functions

 DocParamList (DocParser *parser, DocNodeVariant *parent, DocParamSect::Type t, DocParamSect::Direction d)
const DocNodeListparameters () const
const DocNodeListparamTypes () const
const DocNodeListparagraphs () const
DocParamSect::Type type () const
DocParamSect::Direction direction () const
void markFirst (bool b=true)
void markLast (bool b=true)
bool isFirst () const
bool isLast () const
Token parse (const DString &cmdName)
Token parseXml (const DString &paramName)
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

DocNodeList m_paragraphs
DocNodeList m_params
DocNodeList m_paramTypes
DocParamSect::Type m_type = DocParamSect::Unknown
DocParamSect::Direction m_dir = DocParamSect::Unspecified
bool m_isFirst = false
bool m_isLast = false

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 parameter list.

Definition at line 1129 of file docnode.h.

Constructor & Destructor Documentation

◆ DocParamList()

DocParamList::DocParamList ( DocParser * parser,
DocNodeVariant * parent,
DocParamSect::Type t,
DocParamSect::Direction d )
inline

Definition at line 1132 of file docnode.h.

1133 : DocNode(parser,parent), m_type(t), m_dir(d) {}
DocNode(DocParser *parser, DocNodeVariant *parent)
Definition docnode.h:84
DocParser * parser()
Definition docnode.h:97
DocNodeVariant * parent()
Definition docnode.h:89
DocParamSect::Direction m_dir
Definition docnode.h:1151
DocParamSect::Type m_type
Definition docnode.h:1150

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

Member Function Documentation

◆ direction()

◆ isFirst()

bool DocParamList::isFirst ( ) const
inline

Definition at line 1141 of file docnode.h.

1141{ return m_isFirst; }
bool m_isFirst
Definition docnode.h:1152

References m_isFirst.

◆ isLast()

bool DocParamList::isLast ( ) const
inline

Definition at line 1142 of file docnode.h.

1142{ return m_isLast; }
bool m_isLast
Definition docnode.h:1153

References m_isLast.

Referenced by ManDocVisitor::operator()().

◆ markFirst()

void DocParamList::markFirst ( bool b = true)
inline

Definition at line 1139 of file docnode.h.

1139{ m_isFirst=b; }

References m_isFirst.

Referenced by parseXml().

◆ markLast()

void DocParamList::markLast ( bool b = true)
inline

Definition at line 1140 of file docnode.h.

1140{ m_isLast=b; }

References m_isLast.

Referenced by DocParamSect::parse(), and parseXml().

◆ paragraphs()

◆ parameters()

◆ paramTypes()

const DocNodeList & DocParamList::paramTypes ( ) const
inline

◆ parse()

Token DocParamList::parse ( const DString & cmdName)

Definition at line 3373 of file docnode.cpp.

3374{
3375 AUTO_TRACE();
3376 Token retval = Token::make_RetVal_OK();
3377 auto ns = AutoNodeStack(parser(),thisVariant());
3378 DocPara *par=nullptr;
3379 DString saveCmdName = cmdName;
3380 DocParserContext &context = parser()->context;
3381 DocTokenizer &tokenizer = parser()->tokenizer;
3382
3383 Token tok=tokenizer.lex();
3384 if (!tok.is(TokenRetval::TK_WHITESPACE))
3385 {
3386 warn_doc_error(context.fileName,tokenizer.getLineNr(),"expected whitespace after \\{} command",
3387 saveCmdName);
3388 retval = Token::make_RetVal_EndParBlock();
3389 goto endparamlist;
3390 }
3391 tokenizer.setStateParam();
3392 tok=tokenizer.lex();
3393 while (tok.is(TokenRetval::TK_WORD)) /* there is a parameter name */
3394 {
3396 {
3397 size_t typeSeparator = context.token->name.find('#'); // explicit type position
3398 if (typeSeparator!=DString::npos)
3399 {
3400 parser()->handleParameterType(thisVariant(),m_paramTypes,context.token->name.left(typeSeparator));
3401 context.token->name = context.token->name.mid(typeSeparator+1);
3402 context.hasParamCommand=true;
3403 if (parent() && std::holds_alternative<DocParamSect>(*parent()))
3404 {
3405 std::get<DocParamSect>(*parent()).m_hasTypeSpecifier=true;
3406 }
3407 }
3408 else
3409 {
3410 context.hasParamCommand=true;
3411 }
3413 }
3414 else if (m_type==DocParamSect::RetVal)
3415 {
3416 context.hasReturnCommand=true;
3418 }
3419 context.inSeeBlock=true;
3421 context.inSeeBlock=false;
3422 tok=tokenizer.lex();
3423 }
3424 tokenizer.setStatePara();
3425 if (tok.is_any_of(TokenRetval::TK_NONE,TokenRetval::TK_EOF)) // premature end of comment
3426 {
3427 warn_doc_error(context.fileName,tokenizer.getLineNr(),"unexpected end of comment block while parsing the "
3428 "argument of command {}",saveCmdName);
3429 retval = Token::make_RetVal_EndParBlock();
3430 goto endparamlist;
3431 }
3432 if (!tok.is(TokenRetval::TK_WHITESPACE)) /* premature end of comment block */
3433 {
3434 if (!tok.is(TokenRetval::TK_NEWPARA)) /* empty param description */
3435 {
3436 warn_doc_error(context.fileName,tokenizer.getLineNr(),"unexpected token {} in comment block while parsing the "
3437 "argument of command {}",tok.to_string(),saveCmdName);
3438 }
3439 retval = Token::make_RetVal_EndParBlock();
3440 goto endparamlist;
3441 }
3442
3443 m_paragraphs.append<DocPara>(parser(),thisVariant());
3444 par = m_paragraphs.get_last<DocPara>();
3445 retval = par->parse();
3446 par->markFirst();
3447 par->markLast();
3448
3449endparamlist:
3450 AUTO_TRACE_EXIT("retval={}",retval.to_string());
3451 return retval;
3452}
DString mid(size_t index, size_t len=npos) const
Definition dstring.h:318
static constexpr size_t npos
value used to indicate 'not found' or 'to the end of the string', matching std::string::npos
Definition dstring.h:178
size_t find(char c, size_t pos=0) const
Definition dstring.h:239
DString left(size_t len) const
Definition dstring.h:306
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
void markFirst(bool v=true)
Definition docnode.h:1094
Token parse()
Definition docnode.cpp:5769
void markLast(bool v=true)
Definition docnode.h:1095
DocTokenizer tokenizer
void checkRetvalName()
void handleParameterType(DocNodeVariant *parent, DocNodeList &children, const DString &paramTypes)
void handleLinkedWord(DocNodeVariant *parent, DocNodeList &children, bool ignoreAutoLinkFlag=false, bool typeLinkOnly=false)
void checkArgumentName()
DocParserContext context
void setStateParam()
int getLineNr() const
void setStatePara()
bool is(TokenRetval rv) const
TOKEN_SPECIFICATIONS RETVAL_SPECIFICATIONS const char * to_string() const
bool is_any_of(ARGS... args) const
DString name
#define AUTO_TRACE(...)
Definition docnode.cpp:53
#define AUTO_TRACE_EXIT(...)
Definition docnode.cpp:55
#define warn_doc_error(file, line, fmt,...)
Definition message.h:112
TokenInfo * token
Definition docparser_p.h:94

References DocNodeList::append(), AUTO_TRACE, AUTO_TRACE_EXIT, DocParser::checkArgumentName(), DocParser::checkRetvalName(), DocParser::context, DocParserContext::fileName, DString::find(), DocNodeList::get_last(), DocTokenizer::getLineNr(), DocParser::handleLinkedWord(), DocParser::handleParameterType(), DocParserContext::hasParamCommand, DocParserContext::hasReturnCommand, DocParserContext::inSeeBlock, Token::is(), Token::is_any_of(), DString::left(), DocTokenizer::lex(), m_paragraphs, m_params, m_paramTypes, m_type, DocPara::markFirst(), DocPara::markLast(), DString::mid(), TokenInfo::name, DString::npos, DocParamSect::Param, DocNode::parent(), DocPara::parse(), DocNode::parser(), DocParamSect::RetVal, DocTokenizer::setStatePara(), DocTokenizer::setStateParam(), DocNode::thisVariant(), Token::to_string(), DocParserContext::token, DocParser::tokenizer, and warn_doc_error.

◆ parseXml()

Token DocParamList::parseXml ( const DString & paramName)

Definition at line 3454 of file docnode.cpp.

3455{
3456 AUTO_TRACE();
3457 Token retval = Token::make_RetVal_OK();
3458 auto ns = AutoNodeStack(parser(),thisVariant());
3459
3460 parser()->context.token->name = paramName;
3462 {
3465 }
3466 else if (m_type==DocParamSect::RetVal)
3467 {
3470 }
3471
3473
3474 do
3475 {
3476 m_paragraphs.append<DocPara>(parser(),thisVariant());
3477 DocPara *par = m_paragraphs.get_last<DocPara>();
3478 retval = par->parse();
3479 if (par->empty()) // avoid adding an empty paragraph for the whitespace
3480 // after </para> and before </param>
3481 {
3483 break;
3484 }
3485 else // append the paragraph to the list
3486 {
3487 if (!m_paragraphs.empty())
3488 {
3489 m_paragraphs.get_last<DocPara>()->markLast(false);
3490 }
3491 bool markFirst = m_paragraphs.empty();
3492 par = &std::get<DocPara>(m_paragraphs.back());
3493 if (markFirst)
3494 {
3495 par->markFirst();
3496 }
3497 par->markLast();
3498 }
3499
3500 if (retval.is_any_of(TokenRetval::TK_NONE,TokenRetval::TK_EOF)) break;
3501
3502 } while (retval.is(TokenRetval::RetVal_CloseXml) &&
3503 Mappers::htmlTagMapper->map(parser()->context.token->name)!=HtmlTagType::XML_PARAM &&
3504 Mappers::htmlTagMapper->map(parser()->context.token->name)!=HtmlTagType::XML_TYPEPARAM &&
3505 Mappers::htmlTagMapper->map(parser()->context.token->name)!=HtmlTagType::XML_EXCEPTION);
3506
3507 if (retval.is_any_of(TokenRetval::TK_NONE,TokenRetval::TK_EOF)) /* premature end of comment block */
3508 {
3509 warn_doc_error(parser()->context.fileName,parser()->tokenizer.getLineNr(),"unterminated param or exception tag");
3510 }
3511 else
3512 {
3513 retval = Token::make_RetVal_OK();
3514 }
3515
3516 AUTO_TRACE_EXIT("retval={}",retval.to_string());
3517 return retval;
3518}
void markFirst(bool b=true)
Definition docnode.h:1139
void markLast(bool b=true)
Definition docnode.h:1140
T & back()
access the last element
Definition growvector.h:135
void pop_back()
removes the last element
Definition growvector.h:115
bool empty() const
checks whether the container is empty
Definition growvector.h:140
const Mapper< HtmlTagType > * htmlTagMapper

References DocNodeList::append(), AUTO_TRACE, AUTO_TRACE_EXIT, GrowVector< T >::back(), DocParser::checkArgumentName(), DocParser::checkRetvalName(), DocParser::context, GrowVector< T >::empty(), DocNodeList::get_last(), DocParser::handleLinkedWord(), DocParserContext::hasParamCommand, DocParserContext::hasReturnCommand, Mappers::htmlTagMapper, Token::is(), Token::is_any_of(), m_paragraphs, m_params, m_type, markFirst(), markLast(), TokenInfo::name, DocParamSect::Param, DocNode::parser(), GrowVector< T >::pop_back(), DocParamSect::RetVal, DocNode::thisVariant(), Token::to_string(), DocParserContext::token, warn_doc_error, XML_EXCEPTION, XML_PARAM, and XML_TYPEPARAM.

◆ type()

DocParamSect::Type DocParamList::type ( ) const
inline

Definition at line 1137 of file docnode.h.

1137{ return m_type; }

References m_type.

Member Data Documentation

◆ m_dir

DocParamSect::Direction DocParamList::m_dir = DocParamSect::Unspecified
private

Definition at line 1151 of file docnode.h.

Referenced by direction(), and DocParamList().

◆ m_isFirst

bool DocParamList::m_isFirst = false
private

Definition at line 1152 of file docnode.h.

Referenced by isFirst(), and markFirst().

◆ m_isLast

bool DocParamList::m_isLast = false
private

Definition at line 1153 of file docnode.h.

Referenced by isLast(), and markLast().

◆ m_paragraphs

DocNodeList DocParamList::m_paragraphs
private

Definition at line 1147 of file docnode.h.

Referenced by paragraphs(), parse(), and parseXml().

◆ m_params

DocNodeList DocParamList::m_params
private

Definition at line 1148 of file docnode.h.

Referenced by parameters(), parse(), and parseXml().

◆ m_paramTypes

DocNodeList DocParamList::m_paramTypes
private

Definition at line 1149 of file docnode.h.

Referenced by paramTypes(), and parse().

◆ m_type

DocParamSect::Type DocParamList::m_type = DocParamSect::Unknown
private

Definition at line 1150 of file docnode.h.

Referenced by DocParamList(), parse(), parseXml(), and type().


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