summaryrefslogtreecommitdiffstats
path: root/src/IOL.Helpers/SlugGenerator.cs
diff options
context:
space:
mode:
authorivarlovlie <git@ivarlovlie.no>2021-11-20 21:31:30 +0100
committerivarlovlie <git@ivarlovlie.no>2021-11-20 21:31:30 +0100
commit7ff7f3902e5bdcc33bfc07fa6ad71a5798d7f8d6 (patch)
tree6e7eaaed636558c4feb88f2bb18bbb7d4c0c87be /src/IOL.Helpers/SlugGenerator.cs
parent4e41b1f31a7309b299398fd9dd53d499204fa6cf (diff)
downloaddotnet-helpers-7ff7f3902e5bdcc33bfc07fa6ad71a5798d7f8d6.tar.xz
dotnet-helpers-7ff7f3902e5bdcc33bfc07fa6ad71a5798d7f8d6.zip
Change to file-scoped namespaces.
Add ConditionalWhere to QueryableHelpers.cs
Diffstat (limited to 'src/IOL.Helpers/SlugGenerator.cs')
-rw-r--r--src/IOL.Helpers/SlugGenerator.cs151
1 files changed, 75 insertions, 76 deletions
diff --git a/src/IOL.Helpers/SlugGenerator.cs b/src/IOL.Helpers/SlugGenerator.cs
index 3f53dd6..6e669c0 100644
--- a/src/IOL.Helpers/SlugGenerator.cs
+++ b/src/IOL.Helpers/SlugGenerator.cs
@@ -1,98 +1,98 @@
using System.Text;
-namespace IOL.Helpers
-{
- public static class Slug
- {
- public static string Generate(bool toLower, params string[] values) {
- return Create(string.Join("-", values), toLower);
- }
+namespace IOL.Helpers;
- /// <summary>
- /// Creates a slug.
- /// References:
- /// http://www.unicode.org/reports/tr15/tr15-34.html
- /// https://meta.stackexchange.com/questions/7435/non-us-ascii-characters-dropped-from-full-profile-url/7696#7696
- /// https://stackoverflow.com/questions/25259/how-do-you-include-a-webpage-title-as-part-of-a-webpage-url/25486#25486
- /// https://stackoverflow.com/questions/3769457/how-can-i-remove-accents-on-a-string
- /// </summary>
- /// <param name="value"></param>
- /// <param name="toLower"></param>
- /// <returns>Slugified string</returns>
- public static string Create(string value, bool toLower) {
- if (string.IsNullOrWhiteSpace(value))
- return value;
+public static class Slug
+{
+ public static string Generate(bool toLower, params string[] values) {
+ return Create(string.Join("-", values), toLower);
+ }
- var normalised = value.Normalize(NormalizationForm.FormKD);
+ /// <summary>
+ /// Creates a slug.
+ /// References:
+ /// http://www.unicode.org/reports/tr15/tr15-34.html
+ /// https://meta.stackexchange.com/questions/7435/non-us-ascii-characters-dropped-from-full-profile-url/7696#7696
+ /// https://stackoverflow.com/questions/25259/how-do-you-include-a-webpage-title-as-part-of-a-webpage-url/25486#25486
+ /// https://stackoverflow.com/questions/3769457/how-can-i-remove-accents-on-a-string
+ /// </summary>
+ /// <param name="value"></param>
+ /// <param name="toLower"></param>
+ /// <returns>Slugified string</returns>
+ public static string Create(string value, bool toLower) {
+ if (string.IsNullOrWhiteSpace(value))
+ return value;
- const int MAXLEN = 80;
- var len = normalised.Length;
- var prevDash = false;
- var sb = new StringBuilder(len);
+ var normalised = value.Normalize(NormalizationForm.FormKD);
- for (var i = 0; i < len; i++) {
- var c = normalised[i];
- switch (c) {
- case >= 'a' and <= 'z':
- case >= '0' and <= '9': {
- if (prevDash) {
- sb.Append('-');
- prevDash = false;
- }
+ const int MAXLEN = 80;
+ var len = normalised.Length;
+ var prevDash = false;
+ var sb = new StringBuilder(len);
- sb.Append(c);
- break;
+ for (var i = 0; i < len; i++) {
+ var c = normalised[i];
+ switch (c) {
+ case >= 'a' and <= 'z':
+ case >= '0' and <= '9': {
+ if (prevDash) {
+ sb.Append('-');
+ prevDash = false;
}
- case >= 'A' and <= 'Z': {
- if (prevDash) {
- sb.Append('-');
- prevDash = false;
- }
- // Tricky way to convert to lowercase
- if (toLower)
- sb.Append((char) (c | 32));
- else
- sb.Append(c);
- break;
+ sb.Append(c);
+ break;
+ }
+ case >= 'A' and <= 'Z': {
+ if (prevDash) {
+ sb.Append('-');
+ prevDash = false;
}
- case ' ':
- case ',':
- case '.':
- case '/':
- case '\\':
- case '-':
- case '_':
- case '=': {
- if (!prevDash && sb.Length > 0) {
- prevDash = true;
- }
- break;
+ // Tricky way to convert to lowercase
+ if (toLower)
+ sb.Append((char)(c | 32));
+ else
+ sb.Append(c);
+ break;
+ }
+ case ' ':
+ case ',':
+ case '.':
+ case '/':
+ case '\\':
+ case '-':
+ case '_':
+ case '=': {
+ if (!prevDash && sb.Length > 0) {
+ prevDash = true;
}
- default: {
- var swap = ConvertEdgeCases(c, toLower);
- if (swap != null) {
- if (prevDash) {
- sb.Append('-');
- prevDash = false;
- }
- sb.Append(swap);
+ break;
+ }
+ default: {
+ var swap = ConvertEdgeCases(c, toLower);
+ if (swap != null) {
+ if (prevDash) {
+ sb.Append('-');
+ prevDash = false;
}
- break;
+ sb.Append(swap);
}
- }
- if (sb.Length == MAXLEN)
break;
+ }
}
- return sb.ToString();
+ if (sb.Length == MAXLEN)
+ break;
}
- private static string ConvertEdgeCases(char c, bool toLower) => c switch {
+ return sb.ToString();
+ }
+
+ private static string ConvertEdgeCases(char c, bool toLower) => c switch {
'ı' => "i",
'ł' => "l",
'Ł' => toLower ? "l" : "L",
@@ -103,6 +103,5 @@ namespace IOL.Helpers
'æ' => "ae",
'Þ' => "th",
_ => null
- };
- }
-} \ No newline at end of file
+ };
+}