Doxygen
TemplateNodeRepeat类 参考

Class representing a 'for' tag in a template 更多...

+ 类 TemplateNodeRepeat 继承关系图:
+ TemplateNodeRepeat 的协作图:

Public 成员函数

 TemplateNodeRepeat (TemplateParser *parser, TemplateNode *parent, int line, const QCString &data)
 
void render (TextStream &ts, TemplateContext *c)
 
- Public 成员函数 继承自 TemplateNodeCreator< TemplateNodeRepeat >
 TemplateNodeCreator (TemplateParser *parser, TemplateNode *parent, int line)
 
TemplateImplgetTemplate ()
 
- Public 成员函数 继承自 TemplateNode
 TemplateNode (TemplateNode *parent)
 
virtual ~TemplateNode ()
 
TemplateNodeparent ()
 

Private 属性

TemplateNodeList m_repeatNodes
 
ExprAstPtr m_expr
 

额外继承的成员函数

- 静态 Public 成员函数 继承自 TemplateNodeCreator< TemplateNodeRepeat >
static TemplateNodePtr createInstance (TemplateParser *parser, TemplateNode *parent, int line, const QCString &data)
 
- Protected 成员函数 继承自 TemplateNodeCreator< TemplateNodeRepeat >
void mkpath (const TemplateContextImpl *ci, const std::string &fileName)
 
- Protected 属性 继承自 TemplateNodeCreator< TemplateNodeRepeat >
QCString m_templateName
 
int m_line
 

详细描述

Class representing a 'for' tag in a template

在文件 template.cpp3196 行定义.

构造及析构函数说明

◆ TemplateNodeRepeat()

TemplateNodeRepeat::TemplateNodeRepeat ( TemplateParser parser,
TemplateNode parent,
int  line,
const QCString data 
)
inline

在文件 template.cpp3199 行定义.

3201  {
3202  TRACE(("{TemplateNodeRepeat(%s)\n",qPrint(data)));
3203  ExpressionParser expParser(parser,line);
3204  m_expr = expParser.parse(data);
3205  StringVector stopAt = { "endrepeat" };
3206  parser->parse(this,line,stopAt,m_repeatNodes);
3207  parser->removeNextToken(); // skip over endrepeat
3208  TRACE(("}TemplateNodeRepeat(%s)\n",qPrint(data)));
3209  }

引用了 m_expr, m_repeatNodes, TemplateParser::parse(), ExpressionParser::parse(), qPrint(), TemplateParser::removeNextToken() , 以及 TRACE.

成员函数说明

◆ render()

void TemplateNodeRepeat::render ( TextStream ts,
TemplateContext c 
)
inlinevirtual

实现了 TemplateNode.

在文件 template.cpp3210 行定义.

3211  {
3212  TemplateContextImpl* ci = dynamic_cast<TemplateContextImpl*>(c);
3213  if (ci==0) return; // should not happen
3215  TemplateVariant v;
3216  if (m_expr && (v=m_expr->resolve(c)).isInt())
3217  {
3218  int i, n = v.toInt();
3219  for (i=0;i<n;i++)
3220  {
3222  s->set("counter0", (int)i);
3223  s->set("counter", (int)(i+1));
3224  s->set("revcounter", (int)(n-i));
3225  s->set("revcounter0", (int)(n-i-1));
3226  s->set("first",i==0);
3227  s->set("last", i==n-1);
3228  c->set("repeatloop",std::static_pointer_cast<TemplateStructIntf>(s));
3229  // render all items for this iteration of the loop
3230  m_repeatNodes.render(ts,c);
3231  }
3232  }
3233  else // simple type...
3234  {
3235  ci->warn(m_templateName,m_line,"for requires a variable of list type!");
3236  }
3237  }

引用了 TemplateStruct::alloc(), m_expr, TemplateNodeCreator< TemplateNodeRepeat >::m_line, m_repeatNodes, TemplateNodeCreator< TemplateNodeRepeat >::m_templateName, TemplateNodeList::render(), TemplateContext::set(), TemplateContextImpl::setLocation(), TemplateVariant::toInt() , 以及 TemplateContextImpl::warn().

类成员变量说明

◆ m_expr

ExprAstPtr TemplateNodeRepeat::m_expr
private

在文件 template.cpp3240 行定义.

被这些函数引用 render() , 以及 TemplateNodeRepeat().

◆ m_repeatNodes

TemplateNodeList TemplateNodeRepeat::m_repeatNodes
private

在文件 template.cpp3239 行定义.

被这些函数引用 render() , 以及 TemplateNodeRepeat().


该类的文档由以下文件生成:
StringVector
std::vector< std::string > StringVector
Definition: containers.h:32
TemplateContextImpl::warn
void warn(const QCString &fileName, int line, const char *fmt,...) const
Definition: template.cpp:2773
TemplateContextImpl::setLocation
void setLocation(const QCString &templateName, int line)
Definition: template.cpp:682
TemplateNodeCreator< TemplateNodeRepeat >
ExpressionParser
Recursive decent parser for Django style template expressions.
Definition: template.cpp:2010
TemplateParser::removeNextToken
void removeNextToken()
Definition: template.cpp:5153
TemplateVariant
Variant type which can hold one value of a fixed set of types.
Definition: template.h:98
TRACE
#define TRACE(x)
Definition: template.cpp:40
TemplateContext::set
virtual void set(const QCString &name, const TemplateVariant &v)=0
Sets a value in the current scope.
TemplateNodeList::render
void render(TextStream &ts, TemplateContext *c)
Definition: template.cpp:1971
TemplateNodeCreator< TemplateNodeRepeat >::m_templateName
QCString m_templateName
Definition: template.cpp:3095
TemplateNode::parent
TemplateNode * parent()
Definition: template.cpp:1941
TemplateParser::parse
void parse(TemplateNode *parent, int line, const StringVector &stopAt, TemplateNodeList &nodes)
Definition: template.cpp:5057
qPrint
const char * qPrint(const char *s)
Definition: qcstring.h:589
TemplateNodeRepeat::m_expr
ExprAstPtr m_expr
Definition: template.cpp:3240
TemplateVariant::toInt
int toInt() const
Returns the variant as an integer.
Definition: template.cpp:383
TemplateContextImpl
Internal class representing the implementation of a template context
Definition: template.cpp:640
TemplateNodeCreator< TemplateNodeRepeat >::m_line
int m_line
Definition: template.cpp:3096
TemplateNodeRepeat::m_repeatNodes
TemplateNodeList m_repeatNodes
Definition: template.cpp:3239
TemplateStructPtr
std::shared_ptr< TemplateStruct > TemplateStructPtr
Definition: template.cpp:147
TemplateStruct::alloc
static TemplateStructPtr alloc()
Creates an instance and returns a shared pointer to it
Definition: template.cpp:218