public ParseResult Parse(SupportSkillParserParameter parameter)
        {
            var(active, support) = parameter;
            if (!active.IsEnabled || !support.IsEnabled)
            {
                return(ParseResult.Empty);
            }

            var modifiers   = new List <Modifier>();
            var parsedStats = new List <UntranslatedStat>();

            var preParser      = new SkillPreParser(_skillDefinitions, _builderFactories.MetaStatBuilders);
            var preParseResult = preParser.ParseSupport(active, support);

            foreach (var partialParser in _partialParsers)
            {
                var(newlyParsedModifiers, newlyParsedStats) = partialParser.Parse(active, support, preParseResult);
                modifiers.AddRange(newlyParsedModifiers);
                parsedStats.AddRange(newlyParsedStats);
            }

            var translatingParser = new TranslatingSkillParser(_builderFactories, _statParserFactory);

            return(translatingParser.Parse(support, preParseResult,
                                           new PartialSkillParseResult(modifiers, parsedStats)));
        }
        public ParseResult Parse(Skill skill)
        {
            if (!skill.IsEnabled)
            {
                return(ParseResult.Empty);
            }

            var modifiers   = new List <Modifier>();
            var parsedStats = new List <UntranslatedStat>();

            var preParser      = new SkillPreParser(_skillDefinitions, _builderFactories.MetaStatBuilders);
            var preParseResult = preParser.ParseActive(skill);

            foreach (var partialParser in _partialParsers)
            {
                var(newlyParsedModifiers, newlyParsedStats) = partialParser.Parse(skill, skill, preParseResult);
                modifiers.AddRange(newlyParsedModifiers);
                parsedStats.AddRange(newlyParsedStats);
            }

            var translatingParser = new TranslatingSkillParser(_builderFactories, _statParserFactory);

            return(translatingParser.Parse(skill, preParseResult, new PartialSkillParseResult(modifiers, parsedStats)));
        }