public List <string> Apply(TemplateData data) { Regex reg = new Regex(@"@{SWITCH\((.+)\)}"); Match m = reg.Match(rule_param_line); if (!m.Success) { Console.WriteLine("{0}格式错误 {1}", match_info.rule_type, rule_param_line); return(null); } string condition = m.Groups[1].Value; condition = data.ExtraMetaData(condition) as string; Regex regcase = new Regex(@"@{CASE\((.+)\)}"); bool find_case = false; //寻找else List <string> extend_lines = new List <string>(); foreach (string s in rule_lines) { if (regcase.IsMatch(s)) { if (find_case) { break; } string casee = regcase.Match(s).Groups[1].Value; string[] ss = casee.Split(new[] { "||" }, StringSplitOptions.RemoveEmptyEntries); if (ss.Contains(condition)) { find_case = true; continue; } } if (find_case) { extend_lines.Add(s); } } //继续展开 List <string> result = new List <string>(); List <ITemplateRule> extend_rules = TemplateRuleParser.Parse(extend_lines); foreach (var rule in extend_rules) { var ss = rule.Apply(data); result.AddRange(ss); } return(result); }
public List <string> Apply(TemplateData data) { Regex reg = new Regex(@"@{FOREACH\((\w+)\s+IN\s+(.+)\)}"); Match m = reg.Match(rule_param_line); if (!m.Success) { Console.WriteLine("{0}格式错误 {1}", match_info.rule_type, rule_param_line); return(null); } string var_name = m.Groups[1].Value; string extra = m.Groups[2].Value; object[] var_array = data.ExtraMetaData(extra) as object[]; List <string> result = new List <string>(); int index = 0; foreach (object v in var_array) { data.SetLocalVariant(var_name, v); data.SetLocalVariant("ForeachIndex", index.ToString()); index++; List <string> res = new List <string>(); List <ITemplateRule> extend_rules = TemplateRuleParser.Parse(rule_lines); foreach (var rule in extend_rules) { var ss = rule.Apply(data); res.AddRange(ss); } result.AddRange(res); } return(result); }