diff options
| author | Joshua M. Boniface <joshua@boniface.me> | 2019-02-03 22:08:20 -0500 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2019-02-03 22:08:20 -0500 |
| commit | 56dcc45dc04de6be775551f14d1ad0bb235d72f9 (patch) | |
| tree | 427766dd086822efd96ba31460960145f3c1e409 /MediaBrowser.Controller/Extensions/StringExtensions.cs | |
| parent | 3ac75313854c6109b71d542e492594e434cb39ba (diff) | |
| parent | cabb824f2a095115ebbe79ca7fdfbcbab4db1e5f (diff) | |
Merge pull request #732 from Bond-009/locale
Reworked LocalizationManager to load data async
Diffstat (limited to 'MediaBrowser.Controller/Extensions/StringExtensions.cs')
| -rw-r--r-- | MediaBrowser.Controller/Extensions/StringExtensions.cs | 46 |
1 files changed, 42 insertions, 4 deletions
diff --git a/MediaBrowser.Controller/Extensions/StringExtensions.cs b/MediaBrowser.Controller/Extensions/StringExtensions.cs index 73f529fc0..b1aaf6534 100644 --- a/MediaBrowser.Controller/Extensions/StringExtensions.cs +++ b/MediaBrowser.Controller/Extensions/StringExtensions.cs @@ -1,4 +1,8 @@ -using MediaBrowser.Model.Globalization; +using System; +using System.Globalization; +using System.Linq; +using System.Text; +using System.Text.RegularExpressions; namespace MediaBrowser.Controller.Extensions { @@ -7,11 +11,45 @@ namespace MediaBrowser.Controller.Extensions /// </summary> public static class StringExtensions { - public static ILocalizationManager LocalizationManager { get; set; } - public static string RemoveDiacritics(this string text) { - return LocalizationManager.RemoveDiacritics(text); + if (text == null) + { + throw new ArgumentNullException(nameof(text)); + } + + var chars = Normalize(text, NormalizationForm.FormD) + .Where(ch => CharUnicodeInfo.GetUnicodeCategory(ch) != UnicodeCategory.NonSpacingMark); + + return Normalize(string.Concat(chars), NormalizationForm.FormC); + } + + private static string Normalize(string text, NormalizationForm form, bool stripStringOnFailure = true) + { + if (stripStringOnFailure) + { + try + { + return text.Normalize(form); + } + catch (ArgumentException) + { + // will throw if input contains invalid unicode chars + // https://mnaoumov.wordpress.com/2014/06/14/stripping-invalid-characters-from-utf-16-strings/ + text = Regex.Replace(text, "([\ud800-\udbff](?![\udc00-\udfff]))|((?<![\ud800-\udbff])[\udc00-\udfff])", ""); + return Normalize(text, form, false); + } + } + + try + { + return text.Normalize(form); + } + catch (ArgumentException) + { + // if it still fails, return the original text + return text; + } } } } |
