in code/src/CoreTemplateStudio/CoreTemplateStudio.Core/Casing/StringCasingExtensions.cs [59:107]
private static string Transform(string name, char? separator, Func<char, int, char> firstLetterTreatment = null)
{
name = name.Trim();
var builder = new StringBuilder();
var lastChar = name[0];
for (var i = 0; i < name.Length; i++)
{
var currentCharacter = name[i];
if (Separators.Contains(currentCharacter))
{
if (!Separators.Contains(lastChar))
{
builder.Append(separator);
}
}
if (char.IsLetterOrDigit(currentCharacter))
{
if (IsNewWord(currentCharacter, lastChar, i))
{
// new word treatment
// do not insert duplicate separators and do not use separators at beginning
if (i != 0 && separator.HasValue && !Separators.Contains(lastChar))
{
builder.Append(separator);
}
if (firstLetterTreatment != null)
{
builder.Append(firstLetterTreatment(currentCharacter, i));
}
else
{
builder.Append(currentCharacter);
}
}
else
{
builder.Append(currentCharacter);
}
}
lastChar = name[i];
}
return builder.ToString();
}