/// <summary> /// 克隆当前元素到新的宿主模板 /// </summary> /// <param name="ownerTemplate"></param> /// <returns></returns> public override Element Clone(Template ownerTemplate) { ForEachTag tag = new ForEachTag(ownerTemplate); this.CopyTo(tag); tag.Else = this.Else == null ? null : (ForEachElseTag)(this.Else.Clone(ownerTemplate)); tag.From = this.From == null ? null : (VariableExpression)this.From.Clone(ownerTemplate); tag.Index = this.Index == null ? null : this.Index.Clone(ownerTemplate); tag.Item = this.Item == null ? null : this.Item.Clone(ownerTemplate); return(tag); }
/// <summary> /// 开始解析标签数据 /// </summary> /// <param name="ownerTemplate">宿主模板</param> /// <param name="container">标签的容器</param> /// <param name="tagStack">标签堆栈</param> /// <param name="text"></param> /// <param name="match"></param> /// <param name="isClosedTag">是否闭合标签</param> /// <returns>如果需要继续处理EndTag则返回true.否则请返回false</returns> public override bool ProcessBeginTag(Template ownerTemplate, Tag container, Stack <Tag> tagStack, string text, ref Match match, bool isClosedTag) { //判断标签的容器是否为ForEach标签 if (!(container is ForEachTag)) { throw new ParserException(string.Format("未找到和{0}标签对应的{1}标签", this.TagName, this.EndTagName)); } ForEachTag foreachTag = (ForEachTag)container; if (foreachTag.Else != null) { throw new ParserException(string.Format("{0}标签不能定义多个{1}标签", this.EndTagName, this.TagName)); } foreachTag.Else = this; return(true); }
/// <summary> /// 克隆当前元素到新的宿主模板 /// </summary> /// <param name="ownerTemplate"></param> /// <returns></returns> internal override Element Clone(Template ownerTemplate) { ForEachTag tag = new ForEachTag(ownerTemplate); this.CopyTo(tag); tag.Else = this.Else == null ? null : (ForEachElseTag)(this.Else.Clone(ownerTemplate)); tag.From = this.From == null ? null : (VariableExpression)this.From.Clone(ownerTemplate); tag.Index = this.Index == null ? null : this.Index.Clone(ownerTemplate); tag.Item = this.Item == null ? null : this.Item.Clone(ownerTemplate); return tag; }