public static ITemplateRule CreateRule(RuleMatchInfo info) { ITemplateRule rule = null; if (info.rule_type == eTemplateRule.METATEXT) { rule = new RuleMetaText(); } else if (info.rule_type == eTemplateRule.IF) { rule = new RuleIf(); } else if (info.rule_type == eTemplateRule.SWITCH) { rule = new RuleSwitch(); } else if (info.rule_type == eTemplateRule.FOREACH) { rule = new RuleForeach(); } if (rule != null) { rule.match_info = info; rule.rule_lines = new List <string>(); } return(rule); }
public static List <ITemplateRule> Parse(List <string> rule_lines) { List <ITemplateRule> extend_rules = new List <ITemplateRule>(); RuleMatchInfo info = null; ITemplateRule rule = null; for (int i = 0; i < rule_lines.Count; i++) { if (info == null || info.rule_type == eTemplateRule.METATEXT) { var match_info = MatchBegin(rule_lines[i]); if (match_info != info) { if (rule != null && rule.rule_lines.Count > 0) { extend_rules.Add(rule); } info = match_info; rule = CreateRule(info); if (info.rule_type != eTemplateRule.METATEXT) { //匹配行含有参数 rule.rule_param_line = rule_lines[i]; //跳过匹配行 continue; } } rule.rule_lines.Add(rule_lines[i]); continue; } if (MatchEnd(rule_lines[i], info)) { if (rule.rule_lines.Count > 0) { extend_rules.Add(rule); } info = null; rule = null; continue; } rule.rule_lines.Add(rule_lines[i]); } if (rule != null && rule.rule_lines.Count > 0) { extend_rules.Add(rule); } return(extend_rules); }