/// <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) { }
/// <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)); } }
/// <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; }
/// <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; }