Ejemplo n.º 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));
        }
Ejemplo n.º 2
0
 /// <summary>
 /// 初始化变量视图,并为其指定父视图。
 /// </summary>
 /// <param name="parent"></param>
 public VariableScope(VariableScope parent)
 {
     _Parent = parent;
     _Values = new Dictionary<string, object>(StringComparer.InvariantCultureIgnoreCase);
 }
Ejemplo n.º 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;
            }
        }