Skip to content

Commit

Permalink
Added ToKebab case
Browse files Browse the repository at this point in the history
  • Loading branch information
Paymon Khamooshi committed Nov 19, 2024
1 parent dd066de commit e4c37b2
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 1 deletion.
23 changes: 23 additions & 0 deletions Olive/-Extensions/String.cs
Original file line number Diff line number Diff line change
Expand Up @@ -1548,6 +1548,29 @@ public static string ToSnakeCase(this string @this)
return string.Concat(@this.Select((x, i) => (i > 0 && char.IsUpper(x) ? "_" : "") + x)).ToLower();
}

/// <summary>
/// Returns a kebab-case converted string, the stndard naming convention for CSS, html attributes, urls, slugs, command-line arguments, etc.
/// </summary>
public static string ToKebabCase(this string str)
{
if (str.IsEmpty()) return str;

var r = new StringBuilder();
var wasPreviousUpper = false;

foreach (var c in str.Trim())
{
var isUpper = c.IsUpper();

if (isUpper && !wasPreviousUpper) r.Append('-');
if (c.IsLetterOrDigit()) r.Append(c.ToLower());
else r.Append('-');
wasPreviousUpper = isUpper;
}

return r.ToString().KeepReplacing("--", "-").Trim('-');
}

/// <summary>
/// Converts [hello world] to [Hello World].
/// </summary>
Expand Down
2 changes: 1 addition & 1 deletion Olive/Olive.csproj
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<Version>2.1.382.0</Version>
<Version>2.1.383.0</Version>
<OutputType>Library</OutputType>
<LangVersion>latest</LangVersion>
<!--<PackageId>Olive</PackageId>-->
Expand Down

0 comments on commit e4c37b2

Please sign in to comment.