Example #1
0
 /// <summary>
 /// 带变量字段的初始化
 /// </summary>
 /// <param name="ownerTemplate"></param>
 /// <param name="varExp"></param>
 internal DMEWeb_VariableTag(DMEWeb_Template ownerTemplate, DMEWeb_VariableExpression varExp)
     : base(ownerTemplate)
 {
     //注册添加属性时触发事件.用于设置自身的某些属性值
     this.Attributes = new DMEWeb_AttributeCollection(this);
     this.Attributes.Adding += OnAddingAttribute;
     this.VarExpression = varExp;
     this.CallFunctions = new List<DMEWeb_IExpression>();
 }
 /// <summary>
 /// 变量表达式
 /// </summary>
 /// <param name="parentExp"></param>
 /// <param name="fieldName"></param>
 /// <param name="isMethod"></param>
 internal DMEWeb_VariableExpression(DMEWeb_VariableExpression parentExp, string fieldName, bool isMethod)
 {
     parentExp.NextExpression = this;
     this.ParentExpression = parentExp;
     this.VariableId = parentExp.VariableId;
     this.FieldName = fieldName;
     this.IsMethod = isMethod;
     this.NeedCacheData = parentExp.NeedCacheData;
 }
 /// <summary>
 /// 克隆表达式
 /// </summary>
 /// <param name="ownerTemplate"></param>
 /// <returns></returns>
 public DMEWeb_IExpression Clone(DMEWeb_Template ownerTemplate)
 {
     DMEWeb_VariableIdentity variableId = this.VariableId.Clone(ownerTemplate);
     DMEWeb_VariableExpression exp = new DMEWeb_VariableExpression(variableId, this.FieldName, this.IsMethod, this.NeedCacheData);
     if (this.NextExpression != null)
     {
         exp.NextExpression = (DMEWeb_VariableExpression)(this.NextExpression.Clone(ownerTemplate));
         exp.NextExpression.ParentExpression = exp;
     }
     return exp;
 }
        /// <summary>
        /// 构建变量的字段列表
        /// </summary>
        /// <param name="variableId"></param>
        /// <param name="match"></param>
        /// <param name="needCacheData"></param>
        /// <returns></returns>
        internal static DMEWeb_VariableExpression CreateVariableExpression(DMEWeb_VariableIdentity variableId, Match match, bool needCacheData)
        {
            //解析变量字段列表
            DMEWeb_VariableExpression field = new DMEWeb_VariableExpression(variableId, needCacheData);
            CaptureCollection fields = match.Groups["field"].Captures;
            CaptureCollection methods = match.Groups["method"].Captures;
            DMEWeb_VariableExpression item = field;
            for (var i = 0; i < fields.Count; i++)
            {
                string fieldName = fields[i].Value;
                DMEWeb_VariableExpression exp = new DMEWeb_VariableExpression(item, fieldName, !string.IsNullOrEmpty(methods[i].Value));
                item = exp;
            }

            return field;
        }