From e35a5e99a6cea0976fd1c28f919e7d0ac0338503 Mon Sep 17 00:00:00 2001 From: Steffen Date: Wed, 7 Aug 2024 11:44:39 +0200 Subject: [PATCH] fix(user): format userDisplayNames having umlaut substitutes with respect to userSurname correctly MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit we often have displayNames like "Steffen Joest" and surname "Jöst" which were previously displayed as "Steffen Joest (**Jöst**)" and which are now displayed as "Steffen **Jöst**". Also, the case of surname is left unchanged, while the displayName is converted to title --- src/Handler/Utils/Widgets.hs | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/src/Handler/Utils/Widgets.hs b/src/Handler/Utils/Widgets.hs index 88423194e..124b14ad1 100644 --- a/src/Handler/Utils/Widgets.hs +++ b/src/Handler/Utils/Widgets.hs @@ -94,12 +94,19 @@ nameHtml displayName surname | null surname = toHtml displayName | otherwise = case reverse $ T.splitOn surname displayName of [_notContained] - | (suffix:prefixes) <- reverse $ T.splitOn (T.toTitle surname) (T.toTitle displayName) -> + | (suffix:prefixes) <- reverse $ T.splitOn (T.toTitle surname) (T.toTitle displayName), notNull prefixes -> let prefix = T.intercalate surname $ reverse prefixes in [shamlet|$newline never - #{prefix} + #{prefix} # #{surname} - #{suffix} + \ #{suffix} + |] + | (suffix:prefixes) <- reverse $ T.splitOn (fullyNormalize surname) (fullyNormalize displayName), notNull prefixes -> + let prefix = T.intercalate surname $ reverse prefixes + in [shamlet|$newline never + #{prefix} # + #{surname} + \ #{suffix} |] | otherwise -> [shamlet|$newline never #{displayName} ( @@ -108,11 +115,14 @@ nameHtml displayName surname (suffix:prefixes) -> let prefix = T.intercalate surname $ reverse prefixes in [shamlet|$newline never - #{prefix} + #{prefix} # #{surname} - #{suffix} + \ #{suffix} |] [] -> error "Data.Text.splitOn returned empty list in violation of specification." + where + fullyNormalize :: Text -> Text + fullyNormalize = T.toTitle . T.unwords . map text2asciiAlphaNum . T.words nameHtml' :: HasUser u => u -> Html nameHtml' u = nameHtml (u ^. _userDisplayName) (u ^. _userSurname)