/// <summary>
 /// 变量表达式
 /// </summary>
 /// <param name="variableId"></param>
 /// <param name="fieldName"></param>
 /// <param name="isMethod"></param>
 /// <param name="needCacheData"></param>
 internal DMEWeb_VariableExpression(DMEWeb_VariableIdentity variableId, string fieldName, bool isMethod, bool needCacheData)
 {
     this.VariableId = variableId;
     this.FieldName = fieldName;
     this.IsMethod = isMethod;
     this.NeedCacheData = needCacheData;
 }
 /// <summary>
 /// 变量表达式
 /// </summary>
 /// <param name="variableId"></param>
 /// <param name="needCacheData"></param>
 internal DMEWeb_VariableExpression(DMEWeb_VariableIdentity variableId, bool needCacheData)
     : this(variableId, null, false, needCacheData)
 {
 }
예제 #3
0
        /// <summary>
        /// 从变量表达式文本(如:name.age)中构建变量表达式
        /// </summary>
        /// <param name="ownerTemplate"></param>
        /// <param name="expressionText"></param>
        /// <param name="needCacheData"></param>
        /// <returns></returns>
        internal static DMEWeb_VariableExpression CreateVariableExpression(DMEWeb_Template ownerTemplate, string expressionText, bool needCacheData)
        {
            if (string.IsNullOrEmpty(expressionText)) return null;

            Match match = DMEWeb_ParserRegex.VarExpRegex.Match(expressionText);
            if (match.Success)
            {
                string prefix;
                DMEWeb_Variable variable = CreateVariable(ownerTemplate, match, out prefix);
                DMEWeb_VariableIdentity variableId = new DMEWeb_VariableIdentity(ownerTemplate, variable, prefix);

                return CreateVariableExpression(variableId, match, needCacheData);
            }
            else
            {
                //非变量表达式
                throw new DMEWeb_ParserException(string.Format("变量表达式\"{0}\"的定义格式错误", expressionText));
            }
        }
예제 #4
0
        /// <summary>
        /// 构建变量标签元素
        /// </summary>
        /// <param name="ownerTemplate">宿主模板</param>
        /// <param name="container">标签的容器</param>
        /// <param name="match"></param>
        internal static DMEWeb_VariableTag CreateVariableTag(DMEWeb_Template ownerTemplate, DMEWeb_Tag container, Match match)
        {
            string prefix;
            DMEWeb_Variable variable = CreateVariable(ownerTemplate, match, out prefix);
            DMEWeb_VariableIdentity variableId = new DMEWeb_VariableIdentity(ownerTemplate, variable, prefix);

            //变量标签元素则需要缓存表达式的值
            DMEWeb_VariableExpression varExp = CreateVariableExpression(variableId, match, true);

            DMEWeb_VariableTag tag = new DMEWeb_VariableTag(ownerTemplate, varExp);
            //解析属性列表
            ParseElementAttributes(tag, match);
            container.AppendChild(tag);

            return tag;
        }
예제 #5
0
        /// <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;
        }