Beispiel #1
0
        public void AddRule(Rule rule)
        {
            if (rule is KeywordRule)
            {
                keyWordRuleDic.Add(rule.start, rule);
            }
            else
            {
                //if((rule as MultiLineRule)!=null){
                if (rule is MultiLineRule && !(rule is ScanRule))
                {
                    multiruleDic.Add(((MultiLineRule)rule).end, (MultiLineRule)rule);
                }

                if ((rule as KeywordRules) != null)
                {
                    KeywordRules ks    = rule as KeywordRules;
                    var          rules = ks.Rules();
                    foreach (var item in rules)
                    {
                        ruleDic.Add(item.start, item);
                    }
                }
                else
                {
                    ruleDic.Add(rule.start, rule);
                }


                foreach (var item in ruleDic.Values)
                {
                    if (!ruleFirstKeys.Contains(item.start[0]))
                    {
                        ruleFirstKeys += item.start[0];
                    }
                }
                //foreach (var item in ruleDic.Values) {
                foreach (var item in multiruleDic.Values)
                {
                    MultiLineRule mrule = item as MultiLineRule;
                    if (mrule != null)
                    {
                        if (!ruleEndKeys.Contains(mrule.end[0]))
                        {
                            ruleEndKeys += mrule.end[0];
                        }
                    }
                }
            }
        }
Beispiel #2
0
        public void AddHighlight(string id, IHighlight highlight)
        {
            if (partitionDic.ContainsKey(id))
            {
                var part = partitionDic[id];
                //part.Highlight = highlight;
                part.Highlight.getRules().AddRange(highlight.getRules());

                var rules = part.Highlight.getRules();


                foreach (var rule in rules)
                {
                    if (rule is MultiLineRule)
                    {
                        MultiLineRule prule   = rule as MultiLineRule;
                        var           partid  = prule.id;
                        var           newpart = new Partition(prule, new DefaultHighlight(prule.attr));
                        part.AddPartition(newpart);
                        partitionDic.Add(partid, newpart);
                    }
                }
            }
            else
            {
                var part = new Partition(id, highlight);
                partitionDic.Add(id, part);

                var rules = highlight.getRules();
                foreach (var rule in rules)
                {
                    if (rule is MultiLineRule)
                    {
                        MultiLineRule prule   = rule as MultiLineRule;
                        var           partid  = prule.id;
                        var           newpart = new Partition(prule, new DefaultHighlight(prule.attr));
                        part.AddPartition(newpart);
                        partitionDic.Add(partid, newpart);
                    }
                }
            }
        }