Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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);
        }