private void RuleSpecsChanged(object sender, NotifyCollectionChangedEventArgs e) { if (e.OldStartingIndex > -1) { PatternNode <TData, TOffset> startNode = _pattern.Children.ElementAt(e.OldStartingIndex); foreach (Pattern <TData, TOffset> node in startNode.GetNodes().Take(e.OldItems.Count).Cast <Pattern <TData, TOffset> >().ToArray()) { _ruleIds.Remove(node.Name); node.Remove(); } } if (e.NewStartingIndex > -1) { PatternNode <TData, TOffset> startNode = e.NewStartingIndex == 0 ? _pattern.Children.Begin : _pattern.Children.ElementAt(e.NewStartingIndex - 1); foreach (IPatternRuleSpec <TData, TOffset> rs in e.NewItems) { IPatternRuleSpec <TData, TOffset> ruleSpec = rs; string id = "rule" + _curRuleId++; _ruleIds[id] = ruleSpec; var subpattern = new Pattern <TData, TOffset>(id, ruleSpec.Pattern.Children.DeepClone()) { Acceptable = match => ruleSpec.IsApplicable(match.Input) && ruleSpec.Pattern.Acceptable(match) }; startNode.AddAfter(subpattern); startNode = subpattern; } } }
public PatternRule(SpanFactory <TOffset> spanFactory, IPatternRuleSpec <TData, TOffset> ruleSpec, MatcherSettings <TOffset> matcherSettings) { _spanFactory = spanFactory; _ruleSpec = ruleSpec; _matcher = new Matcher <TData, TOffset>(spanFactory, _ruleSpec.Pattern, matcherSettings); }
public TData ApplyRhs(PatternRule <TData, TOffset> rule, Match <TData, TOffset> match) { IPatternRuleSpec <TData, TOffset> ruleSpec = _ruleIds[match.PatternPath.First()]; var newMatch = new Match <TData, TOffset>(match.Matcher, match.Span, match.Input, match.GroupCaptures, match.PatternPath.Skip(1).ToArray(), match.VariableBindings, match.NextAnnotation); return(ruleSpec.ApplyRhs(rule, newMatch)); }
public MultiplePatternRule(SpanFactory <TOffset> spanFactory, IPatternRuleSpec <TData, TOffset> ruleSpec) : base(spanFactory, ruleSpec) { }
public MultiplePatternRule(SpanFactory <TOffset> spanFactory, IPatternRuleSpec <TData, TOffset> ruleSpec, MatcherSettings <TOffset> matcherSettings) : base(spanFactory, ruleSpec, matcherSettings) { }
public SimultaneousPatternRule(SpanFactory <TOffset> spanFactory, IPatternRuleSpec <TData, TOffset> ruleSpec) : base(spanFactory, ruleSpec) { }
public PatternRule(SpanFactory <TOffset> spanFactory, IPatternRuleSpec <TData, TOffset> ruleSpec) : this(spanFactory, ruleSpec, new MatcherSettings <TOffset>()) { }
public MultiplePatternRule(IPatternRuleSpec<TData, TOffset> ruleSpec) : base(ruleSpec) { }
public MultiplePatternRule(IPatternRuleSpec<TData, TOffset> ruleSpec, MatcherSettings<TOffset> matcherSettings) : base(ruleSpec, matcherSettings) { }
public PatternRule(IPatternRuleSpec <TData, TOffset> ruleSpec, MatcherSettings <TOffset> matcherSettings) { _ruleSpec = ruleSpec; _matcher = new Matcher <TData, TOffset>(_ruleSpec.Pattern, matcherSettings); }
public PatternRule(IPatternRuleSpec <TData, TOffset> ruleSpec) : this(ruleSpec, new MatcherSettings <TOffset>()) { }
public IterativePatternRule(SpanFactory <TOffset> spanFactory, IPatternRuleSpec <TData, TOffset> ruleSpec) : base(spanFactory, ruleSpec) { }