private void MapArguments(FormatRenderer renderer, IEnumerable<FormatArgumentNode> arguments)
        {
            if (!arguments.Any())
            {
                return;
            }

            // Get identifier to property mappings.
            var mappings = new Dictionary<string, PropertyInfo>(StringComparer.OrdinalIgnoreCase);
            foreach (PropertyInfo property in renderer.GetType().GetPublicProperties())
            {
                if (!mappings.ContainsKey(property.Name))
                {
                    mappings.Add(property.Name, property);
                }
            }

            // Iterate through all keys in the argument dictionary.
            foreach (FormatArgumentNode argument in arguments)
            {
                // Got a property mapping?
                if (mappings.ContainsKey(argument.Name))
                {
                    // Get the property's type.
                    Type propertyType = mappings[argument.Name].PropertyType;

                    // Get the type converter.
                    var typeConverter = TypeDescriptor.GetConverter(propertyType);
                    if (typeConverter != null && typeConverter.CanConvertFrom(typeof(string)))
                    {
                        object value = typeConverter.ConvertFromInvariantString(argument.Value);
                        mappings[argument.Name].SetValue(renderer, value, null);
                    }
                }
            }
        }