public string Format(T obj, string formatString, bool ignoreEmpty = false) { var arguments = new List <object>(); var matches = FormatRegex.Matches(formatString); var netFormatString = formatString; foreach (Match match in matches) { var index = 0; do { var keyword = match.Value.Trim('{'); index = netFormatString.IndexOf(keyword, StringComparison.Ordinal); if (index != -1) { var templateName = GetTemplate(index, keyword, netFormatString); var replace = keyword; if (!string.IsNullOrEmpty(templateName)) { replace += ":" + templateName; } else { templateName = ""; } netFormatString = netFormatString.Replace(replace, arguments.Count.ToString()); var separator = ""; var itemFormat = ""; if (_templates != null && _templates.TryGetValue(templateName.TrimStart('$'), out var template)) { separator = template.Separator; itemFormat = template.ItemFormat; } else { itemFormat = templateName; } var templateFormatter = new TemplateFormatter <T>(_keywordProvider, _templates, _contextFactory); var formattedArguments = GetFormattedArguments(obj, keyword, separator, itemFormat, templateFormatter); if (!string.IsNullOrEmpty(formattedArguments) || ignoreEmpty) { arguments.Add(formattedArguments); } else { arguments.Add('{' + replace + '}'); } } } while (index != -1); } return(string.Format(CultureInfo.CurrentUICulture, netFormatString, arguments.ToArray())); }
protected virtual string GetFormattedArguments(T obj, string keyword, string separator, string itemFormat, TemplateFormatter <T> templateFormatter) { var value = _keywordProvider.GetValue(obj, keyword); return(templateFormatter.Format(new List <object> { value }, separator, itemFormat)); }
protected override string GetFormattedArguments(T obj, string keyword, string separator, string itemFormat, TemplateFormatter <T> templateFormatter) { var values = _keywordProvider.GetValues(obj, keyword).ToList(); return(templateFormatter.Format(values, separator, itemFormat)); }