public IEnumerable <TransformedNodeModifier> ApplyTransformation(
            string jewelModifier, IEnumerable <PassiveNodeDefinition> nodesInRadius)
        {
            jewelModifier = StringNormalizer.MergeWhiteSpace(jewelModifier);
            var jewelMatch = _jewelData.JewelModifierRegex.Match(jewelModifier);

            if (!jewelMatch.Success)
            {
                yield break;
            }

            var valueMultiplier = _jewelData.GetValueMultiplier(jewelMatch);
            var nodeRegexes     = _jewelData.GetNodeModifierRegexes(jewelMatch).ToList();

            foreach (var node in nodesInRadius)
            {
                var effectiveness        = _createEffectivenessForNode(node.Id);
                var transformedModifiers = node.Modifiers
                                           .Select(StringNormalizer.MergeWhiteSpace)
                                           .SelectMany(m => TransformNodeModifier(m, nodeRegexes, valueMultiplier, effectiveness));
                foreach (var transformedNodeModifier in transformedModifiers)
                {
                    yield return(transformedNodeModifier);
                }
            }
        }
        public StringParseResult <TResult> Parse(string modifierLine)
        {
            var normalized = StringNormalizer.MergeWhiteSpace(modifierLine.Trim());

            return(_inner.Parse(normalized));
        }
 public bool IsTransformationJewelModifier(string jewelModifier)
 => _jewelData.JewelModifierRegex.IsMatch(StringNormalizer.MergeWhiteSpace(jewelModifier));