public override String Render(Dictionary <String, Object> args) { StringBuilder sb = new StringBuilder(); Match m = Regex.Match(Content, Constants.FOR_BEGIN_REGEX); if (m.Success) { String variable = GetVariable(m.Value); if (args.ContainsKey(variable) && args[variable] is List <Dictionary <String, Object> > ) { List <Dictionary <String, Object> > loopArgs = args[variable] as List <Dictionary <String, Object> >; int firstIndex = Content.IndexOf(m.Value); String endFor = String.Format(@"$endfor{0}{1}{2}", "{", variable, "}"); int lastIndex = Content.LastIndexOf(endFor) + endFor.Length; if (firstIndex >= 0 && lastIndex >= 0) { if (firstIndex >= 0) { SimpleTemplate prevFor = new SimpleTemplate(Content.Substring(0, firstIndex)); sb.Append(prevFor.Render(args)); } String loopBody = RemoveForTag(Content.Substring(firstIndex, lastIndex - firstIndex), variable); foreach (var argItem in loopArgs) { if (Regex.IsMatch(loopBody, Constants.FOR_BEGIN_REGEX)) { LoopTemplate lt = new LoopTemplate(loopBody); sb.Append(lt.Render(argItem)); } else { SimpleTemplate st = new SimpleTemplate(loopBody); sb.Append(st.Render(argItem)); } } if (lastIndex >= 0) { SimpleTemplate afterFor = new SimpleTemplate(Content.Substring(lastIndex)); sb.Append(afterFor.Render(args)); } } } } return(sb.ToString()); }
/// <summary> /// 解析include模版 /// </summary> /// <param name="tpl"></param> /// <returns></returns> protected String AnalyzeTemplate(String tpl, Dictionary <String, Object> args) { String result = tpl; MatchCollection mc = Regex.Matches(result, Constants.INCLUDE_REGEX); foreach (Match m in mc) { String variable = GetVariable(m.Value); SimpleTemplate template = TemplateFactory.GetTemplate <SimpleTemplate>(variable); String value = null; if (template != null) { value = template.Render(args); } else { value = String.Format(" [can't find template \"{0}\"] ", variable); } result = result.Replace(m.Value, value); } return(result); }