mirror of
https://github.com/rmcrackan/Libation.git
synced 2026-03-30 12:53:45 -04:00
63 lines
2.0 KiB
C#
63 lines
2.0 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Globalization;
|
|
using System.Text.RegularExpressions;
|
|
|
|
namespace FileManager.NamingTemplate;
|
|
|
|
public static partial class CommonFormatters
|
|
{
|
|
public const string DefaultDateFormat = "yyyy-MM-dd";
|
|
|
|
public delegate string PropertyFormatter<in T>(ITemplateTag templateTag, T value, string formatString);
|
|
|
|
public static string StringFormatter(ITemplateTag _, string? value, string formatString)
|
|
{
|
|
if (value is null) return "";
|
|
var culture = CultureInfo.CurrentCulture;
|
|
|
|
return formatString switch
|
|
{
|
|
"u" or "U" => value.ToUpper(culture),
|
|
"l" or "L" => value.ToLower(culture),
|
|
_ => value,
|
|
};
|
|
}
|
|
|
|
public static string FormattableFormatter(ITemplateTag _, IFormattable? value, string formatString)
|
|
=> value?.ToString(formatString, null) ?? "";
|
|
|
|
public static string IntegerFormatter(ITemplateTag templateTag, int value, string formatString)
|
|
=> FloatFormatter(templateTag, value, formatString);
|
|
|
|
public static string FloatFormatter(ITemplateTag _, float value, string formatString)
|
|
{
|
|
var culture = CultureInfo.CurrentCulture;
|
|
if (!int.TryParse(formatString, out var numDigits) || numDigits <= 0) return value.ToString(formatString, culture);
|
|
//Zero-pad the integer part
|
|
var strValue = value.ToString(culture);
|
|
var decIndex = culture.CompareInfo.IndexOf(strValue, culture.NumberFormat.NumberDecimalSeparator);
|
|
var zeroPad = decIndex == -1 ? int.Max(0, numDigits - strValue.Length) : int.Max(0, numDigits - decIndex);
|
|
|
|
return new string('0', zeroPad) + strValue;
|
|
}
|
|
|
|
public static string DateTimeFormatter(ITemplateTag _, DateTime value, string formatString)
|
|
{
|
|
var culture = CultureInfo.CurrentCulture;
|
|
if (string.IsNullOrEmpty(formatString))
|
|
formatString = CommonFormatters.DefaultDateFormat;
|
|
return value.ToString(formatString, culture);
|
|
}
|
|
|
|
public static string LanguageShortFormatter(string? language)
|
|
{
|
|
if (language is null)
|
|
return "";
|
|
|
|
language = language.Trim();
|
|
if (language.Length <= 3)
|
|
return language.ToUpper();
|
|
return language[..3].ToUpper();
|
|
}
|
|
} |