示例#1
0
		protected virtual void _Init()
		{
			_Functions = new Dictionary<string, TemplateFunction>(StringComparer.InvariantCultureIgnoreCase);
			_Variables = new VariableScope();

			this.Reset();

			_Functions.Add("equals", new TemplateFunction(FuncEquals));
			_Functions.Add("notequals", new TemplateFunction(FuncNotEquals));
			_Functions.Add("iseven", new TemplateFunction(FuncIsEven));
			_Functions.Add("isodd", new TemplateFunction(FuncIsOdd));
			_Functions.Add("isempty", new TemplateFunction(FuncIsEmpty));
			_Functions.Add("isnotempty", new TemplateFunction(FuncIsNotEmpty));
			_Functions.Add("isnumber", new TemplateFunction(FuncIsNumber));
			_Functions.Add("toupper", new TemplateFunction(FuncToUpper));
			_Functions.Add("tolower", new TemplateFunction(FuncToLower));
			_Functions.Add("isdefined", new TemplateFunction(FuncIsDefined));
			_Functions.Add("ifdefined", new TemplateFunction(FuncIfDefined));
			_Functions.Add("len", new TemplateFunction(FuncLen));
			_Functions.Add("tolist", new TemplateFunction(FuncToList));
			_Functions.Add("isnull", new TemplateFunction(FuncIsNull));
			_Functions.Add("not", new TemplateFunction(FuncNot));
			_Functions.Add("iif", new TemplateFunction(FuncIif));
			_Functions.Add("format", new TemplateFunction(FuncFormat));
			_Functions.Add("trim", new TemplateFunction(FuncTrim));
			_Functions.Add("filter", new TemplateFunction(FuncFilter));
			_Functions.Add("isgt", new TemplateFunction(FuncGt));
			_Functions.Add("islt", new TemplateFunction(FuncLt));
			_Functions.Add("compare", new TemplateFunction(FuncCompare));
			_Functions.Add("ior", new TemplateFunction(FuncOr));
			_Functions.Add("iand", new TemplateFunction(FuncAnd));
			_Functions.Add("comparenocase", new TemplateFunction(FuncCompareNoCase));
			_Functions.Add("stripnewlines", new TemplateFunction(FuncStripNewLines));
			_Functions.Add("typeof", new TemplateFunction(FuncTypeOf));
			_Functions.Add("cbool", new TemplateFunction(FuncCBool));
			_Functions.Add("cint", new TemplateFunction(FuncCInt));
			_Functions.Add("cdouble", new TemplateFunction(FuncCDouble));
			_Functions.Add("cdate", new TemplateFunction(FuncCDate));
			_Functions.Add("now", new TemplateFunction(FuncNow));
			_Functions.Add("createtypereference", new TemplateFunction(FuncCreateTypeReference));
		}
示例#2
0
		/// <summary>
		/// 初始化变量视图,并为其指定父视图。
		/// </summary>
		/// <param name="parent"></param>
		public VariableScope(VariableScope parent)
		{
			_Parent = parent;
			_Values = new Dictionary<string, object>(StringComparer.InvariantCultureIgnoreCase);
		}
示例#3
0
		/// <summary>
		/// 处理模板。
		/// </summary>
		/// <param name="name">指定模板名。</param>
		/// <param name="tag">指定一个标签实例。</param>
		protected void ProcessTemplate(string name, Tag tag)
		{
			if (_CustomTags != null && _CustomTags.ContainsKey(name))
			{
				ExecuteCustomTag(tag);
				return;
			}

			Template useTemplate = _CurrentTemplate.FindTemplate(name);
			if (useTemplate == null)
			{
				string msg = string.Format("模板未找到:'{0}'", name);
				throw new TemplateRuntimeException(msg, tag.Line, tag.Col);
			}

			// process inner elements and save content
			TextWriter saveWriter = _Writer;
			_Writer = new StringWriter();
			string content = string.Empty;

			try
			{
				this.ProcessElements(tag.InnerElements);

				content = _Writer.ToString();
			}
			finally
			{
				_Writer = saveWriter;
			}

			Template saveTemplate = _CurrentTemplate;
			_Variables = new VariableScope(_Variables);
			_Variables["innerText"] = content;

			try
			{
				foreach (TagAttribute attrib in tag.Attributes)
				{
					object val = this.EvalExpression(attrib.Expression);
					_Variables[attrib.Name] = val;
				}

				_CurrentTemplate = useTemplate;
				this.ProcessElements(_CurrentTemplate.Elements);
			}
			finally
			{
				_Variables = _Variables.Parent;
				_CurrentTemplate = saveTemplate;
			}
		}