Example #1
0
        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);
        }
Example #2
0
        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);
        }