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