/// <summary>
        /// Parse an <see cref="EffectComponent"/>.
        /// </summary>
        /// <param name="character"></param>
        /// <param name="component"></param>
        /// <param name="firstComponent"></param>
        /// <param name="addSpan"></param>
        /// <exception cref="ArgumentNullException">
        /// Neither <paramref name="character"/> nor <paramref name="component"/> can be null.
        /// </exception>
        private void ParseEffectComponent(Character character, EffectComponent component, bool firstComponent, Action<EffectSpan> addSpan)
        {
            if (character == null)
            {
                throw new ArgumentNullException("character");
            }
            if (component == null)
            {
                throw new ArgumentNullException("component");
            }
            if (addSpan == null)
            {
                throw new ArgumentNullException("addSpan");
            }

            ParseTarget(component.Target, firstComponent, addSpan);
            ParseComponent(character, component, addSpan);
        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="character"></param>
        /// <param name="component"></param>
        /// <param name="addSpan"></param>
        /// <returns></returns>
        /// <exception cref="ArgumentNullException">
        /// Neither <paramref name="character"/> nor <paramref name="component"/> can be null.
        /// </exception>
        private void ParseComponent(Character character, EffectComponent component, Action<EffectSpan> addSpan)
        {
            if (character == null)
            {
                throw new ArgumentNullException("character");
            }
            if (component == null)
            {
                throw new ArgumentNullException("component");
            }
            if (addSpan == null)
            {
                throw new ArgumentNullException("addSpan");
            }

            foreach (EffectSpan effectSpan in component.Parse(character))
            {
                addSpan(effectSpan);
            }
        }