private static IProductionRuleCaptureStructure BuildStructureFor(OilexerGrammarProductionRuleEntry entry, IProductionRuleSeries expressionSeries, IOilexerGrammarFile source)
        {
            IProductionRuleCaptureStructure result = null;
            HashList <HashList <string> >   currentResultVariants = new HashList <HashList <string> >();

            foreach (var expression in expressionSeries)
            {
                var current = BuildStructureFor(entry, expressionSeries, expression, source);
                if (result == null)
                {
                    result = current;
                }
                else
                {
                    result = result.Union(current);
                }
                var dataSet = new HashList <string>(current.Keys);
                if (!currentResultVariants.Any(k => k.SequenceEqual(dataSet)))
                {
                    currentResultVariants.Add(dataSet);
                }
            }
            foreach (var variant in currentResultVariants)
            {
                result.Structures.Add(variant);
            }
            if (expressionSeries == entry)
            {
                ((ControlledCollection <IProductionRuleSource>)result.Sources).baseList.Add(entry);
            }
            result.ResultedTypeName = string.Format("{0}{1}{2}", source.Options.RulePrefix, entry.Name, source.Options.RuleSuffix);
            return(result);
        }
Ejemplo n.º 2
0
 public bool IsPlayEligible(IEnumerable <WhiteCard> play)
 {
     return(play.Any(c => _triggerCards.Contains(c.Id)) || _triggerContent.Any(tc => play.Any(p => p.ContainsContentFlags(tc))));
 }