diff options
author | Peter Elliott <pelliott@ualberta.ca> | 2021-09-29 23:19:56 -0600 |
---|---|---|
committer | Ali Mohammad Pur <Ali.mpfard@gmail.com> | 2021-10-05 13:27:25 +0330 |
commit | 285038ebcfc1cf1f46de098d8ca95f615887be94 (patch) | |
tree | 77c9a84ad6ec174a330e61388ee552e6bda88013 /Userland/Libraries/LibMarkdown | |
parent | a76a23e33b1038687b644c33dff6e5c8955f7230 (diff) | |
download | serenity-285038ebcfc1cf1f46de098d8ca95f615887be94.zip |
LibMarkdown: Add start numbers for ordered lists
5. hey -> <ol start="5"><li>hey</li></ol>
Diffstat (limited to 'Userland/Libraries/LibMarkdown')
-rw-r--r-- | Userland/Libraries/LibMarkdown/List.cpp | 15 | ||||
-rw-r--r-- | Userland/Libraries/LibMarkdown/List.h | 4 |
2 files changed, 16 insertions, 3 deletions
diff --git a/Userland/Libraries/LibMarkdown/List.cpp b/Userland/Libraries/LibMarkdown/List.cpp index 5ddc8472e1..0b4df3584c 100644 --- a/Userland/Libraries/LibMarkdown/List.cpp +++ b/Userland/Libraries/LibMarkdown/List.cpp @@ -16,7 +16,12 @@ String List::render_to_html(bool) const StringBuilder builder; const char* tag = m_is_ordered ? "ol" : "ul"; - builder.appendff("<{}>\n", tag); + builder.appendff("<{}", tag); + + if (m_start_number != 1) + builder.appendff(" start=\"{}\"", m_start_number); + + builder.append(">\n"); for (auto& item : m_items) { builder.append("<li>"); @@ -59,6 +64,7 @@ OwnPtr<List> List::parse(LineIterator& lines) bool is_tight = true; bool has_trailing_blank_lines = false; + size_t start_number = 1; while (!lines.is_end()) { @@ -85,6 +91,11 @@ OwnPtr<List> List::parse(LineIterator& lines) continue; if (ch == '.' || ch == ')') if (i + 1 < line.length() && line[i + 1] == ' ') { + auto maybe_start_number = line.substring_view(offset, i - offset).to_uint<size_t>(); + if (!maybe_start_number.has_value()) + break; + if (first) + start_number = maybe_start_number.value(); appears_ordered = true; offset = i + 1; } @@ -124,7 +135,7 @@ OwnPtr<List> List::parse(LineIterator& lines) first = false; } - return make<List>(move(items), is_ordered, is_tight); + return make<List>(move(items), is_ordered, is_tight, start_number); } } diff --git a/Userland/Libraries/LibMarkdown/List.h b/Userland/Libraries/LibMarkdown/List.h index 90492f6654..2881902200 100644 --- a/Userland/Libraries/LibMarkdown/List.h +++ b/Userland/Libraries/LibMarkdown/List.h @@ -15,10 +15,11 @@ namespace Markdown { class List final : public Block { public: - List(Vector<OwnPtr<ContainerBlock>> items, bool is_ordered, bool is_tight) + List(Vector<OwnPtr<ContainerBlock>> items, bool is_ordered, bool is_tight, size_t start_number) : m_items(move(items)) , m_is_ordered(is_ordered) , m_is_tight(is_tight) + , m_start_number(start_number) { } virtual ~List() override { } @@ -32,6 +33,7 @@ private: Vector<OwnPtr<ContainerBlock>> m_items; bool m_is_ordered { false }; bool m_is_tight { false }; + size_t m_start_number { 1 }; }; } |