From 19b758ce8b238f0bd77790cc38f0708ed6c64142 Mon Sep 17 00:00:00 2001 From: Timothy Flynn Date: Thu, 6 Oct 2022 10:45:59 -0400 Subject: [PATCH] LibUnicode: Add to-and-from string converters for NormalizationForm --- Userland/Libraries/LibUnicode/Normalize.cpp | 28 +++++++++++++++++++++ Userland/Libraries/LibUnicode/Normalize.h | 3 +++ 2 files changed, 31 insertions(+) diff --git a/Userland/Libraries/LibUnicode/Normalize.cpp b/Userland/Libraries/LibUnicode/Normalize.cpp index c6792f5121..8f5a59f7c3 100644 --- a/Userland/Libraries/LibUnicode/Normalize.cpp +++ b/Userland/Libraries/LibUnicode/Normalize.cpp @@ -17,6 +17,34 @@ namespace Unicode { Optional __attribute__((weak)) code_point_decomposition(u32) { return {}; } Span __attribute__((weak)) code_point_decompositions() { return {}; } +NormalizationForm normalization_form_from_string(StringView form) +{ + if (form == "NFD"sv) + return NormalizationForm::NFD; + if (form == "NFC"sv) + return NormalizationForm::NFC; + if (form == "NFKD"sv) + return NormalizationForm::NFKD; + if (form == "NFKC"sv) + return NormalizationForm::NFKC; + VERIFY_NOT_REACHED(); +} + +StringView normalization_form_to_string(NormalizationForm form) +{ + switch (form) { + case NormalizationForm::NFD: + return "NFD"sv; + case NormalizationForm::NFC: + return "NFC"sv; + case NormalizationForm::NFKD: + return "NFKD"sv; + case NormalizationForm::NFKC: + return "NFKC"sv; + } + VERIFY_NOT_REACHED(); +} + ALWAYS_INLINE static bool is_starter(u32 code_point) { return Unicode::canonical_combining_class(code_point) == 0; diff --git a/Userland/Libraries/LibUnicode/Normalize.h b/Userland/Libraries/LibUnicode/Normalize.h index 57ae03426a..23531afefe 100644 --- a/Userland/Libraries/LibUnicode/Normalize.h +++ b/Userland/Libraries/LibUnicode/Normalize.h @@ -25,6 +25,9 @@ enum class NormalizationForm { NFKC }; +NormalizationForm normalization_form_from_string(StringView form); +StringView normalization_form_to_string(NormalizationForm form); + [[nodiscard]] String normalize(StringView string, NormalizationForm form); }