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]; } } } } }
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); } } } }