示例#1
0
        protected void ProcessTemplate(string name, Tag tag)
        {
            if (customTags != null && customTags.ContainsKey(name))
            {
                ExecuteCustomTag(tag);
                return;
            }

            UserTemplate 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
            {
                ProcessElements(tag.InnerElements);

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

            UserTemplate saveTemplate = currentTemplate;

            variables = new VariableScope(variables);
            variables["innerText"] = content;

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

                currentTemplate = useTemplate;
                ProcessElements(currentTemplate.Elements);
            }
            finally
            {
                variables       = variables.Parent;
                currentTemplate = saveTemplate;
            }
        }
示例#2
0
 /// <summary>
 /// finds template matching name. If this template does not
 /// contain template called name, and parent != null then
 /// FindTemplate is called on the parent
 /// </summary>
 /// <param name="name"></param>
 /// <returns></returns>
 public virtual UserTemplate FindTemplate(string name)
 {
     if (m_templates.ContainsKey(name))
     {
         return(m_templates[name]);
     }
     else if (m_parent != null)
     {
         return(m_parent.FindTemplate(name));
     }
     else
     {
         return(null);
     }
 }