From da8a3f9ff26826bce71ab5333eca56a450bf49b8 Mon Sep 17 00:00:00 2001 From: Gurkirat Singh Date: Thu, 28 Sep 2023 00:28:32 +0530 Subject: [PATCH] LibMarkdown: Render slugified anchor tag in heading Because slugify function accepts AK::String, which can hold unicode code_points as well, heading text is normalised to ensure with NFD form to ensure same binary respresentation of a particular string. --- Userland/Libraries/LibMarkdown/CMakeLists.txt | 2 +- Userland/Libraries/LibMarkdown/Heading.cpp | 6 +++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/Userland/Libraries/LibMarkdown/CMakeLists.txt b/Userland/Libraries/LibMarkdown/CMakeLists.txt index 40571c5208..ef316fbdac 100644 --- a/Userland/Libraries/LibMarkdown/CMakeLists.txt +++ b/Userland/Libraries/LibMarkdown/CMakeLists.txt @@ -15,4 +15,4 @@ set(SOURCES ) serenity_lib(LibMarkdown markdown) -target_link_libraries(LibMarkdown PRIVATE LibJS LibRegex LibSyntax) +target_link_libraries(LibMarkdown PRIVATE LibUnicode LibJS LibRegex LibSyntax) diff --git a/Userland/Libraries/LibMarkdown/Heading.cpp b/Userland/Libraries/LibMarkdown/Heading.cpp index 1e2b0c3121..cd3b215be3 100644 --- a/Userland/Libraries/LibMarkdown/Heading.cpp +++ b/Userland/Libraries/LibMarkdown/Heading.cpp @@ -4,15 +4,19 @@ * SPDX-License-Identifier: BSD-2-Clause */ +#include #include #include #include +#include namespace Markdown { DeprecatedString Heading::render_to_html(bool) const { - return DeprecatedString::formatted("{}\n", m_level, m_text.render_to_html(), m_level); + auto input = Unicode::normalize(m_text.render_for_raw_print().view(), Unicode::NormalizationForm::NFD); + auto slugified = MUST(AK::slugify(input)); + return DeprecatedString::formatted("# {}\n", m_level, slugified, slugified, m_text.render_to_html(), m_level); } Vector Heading::render_lines_for_terminal(size_t) const