From da1fda73a794f78fbacc398e98188ed2879d34af Mon Sep 17 00:00:00 2001 From: Ali Mohammad Pur Date: Sun, 18 Jul 2021 00:21:53 +0430 Subject: [PATCH] LibRegex: Implement line splitting for Utf32View Co-authored-by: Timothy Flynn --- Userland/Libraries/LibRegex/RegexMatch.h | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/Userland/Libraries/LibRegex/RegexMatch.h b/Userland/Libraries/LibRegex/RegexMatch.h index b1da9a454b..33e3b58362 100644 --- a/Userland/Libraries/LibRegex/RegexMatch.h +++ b/Userland/Libraries/LibRegex/RegexMatch.h @@ -10,6 +10,7 @@ #include "AK/FlyString.h" #include "AK/HashMap.h" +#include "AK/MemMem.h" #include "AK/String.h" #include "AK/StringBuilder.h" #include "AK/StringView.h" @@ -88,9 +89,19 @@ public: return new_views; } - // FIXME: line splitting for Utf32View needed Vector views; - views.append(m_u32view.value()); + auto view = u32view(); + u32 newline = '\n'; + while (!view.is_empty()) { + auto position = AK::memmem_optional(view.code_points(), view.length() * sizeof(u32), &newline, sizeof(u32)); + if (!position.has_value()) + break; + auto offset = position.value() / sizeof(u32); + views.append(view.substring_view(0, offset)); + view = view.substring_view(offset + 1, view.length() - offset - 1); + } + if (!view.is_empty()) + views.append(view); return views; }