CodeBlock.h 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. /*
  2. * Copyright (c) 2019-2020, Sergey Bugaev <bugaevc@serenityos.org>
  3. * Copyright (c) 2022, the SerenityOS developers.
  4. *
  5. * SPDX-License-Identifier: BSD-2-Clause
  6. */
  7. #pragma once
  8. #include <AK/OwnPtr.h>
  9. #include <LibMarkdown/Block.h>
  10. #include <LibMarkdown/Heading.h>
  11. #include <LibMarkdown/LineIterator.h>
  12. #include <LibMarkdown/Text.h>
  13. namespace Markdown {
  14. class CodeBlock final : public Block {
  15. public:
  16. CodeBlock(ByteString const& language, ByteString const& style, ByteString const& code, Heading* current_section)
  17. : m_code(move(code))
  18. , m_language(language)
  19. , m_style(style)
  20. , m_current_section(current_section)
  21. {
  22. }
  23. virtual ~CodeBlock() override = default;
  24. virtual ByteString render_to_html(bool tight = false) const override;
  25. virtual Vector<ByteString> render_lines_for_terminal(size_t view_width = 0) const override;
  26. virtual RecursionDecision walk(Visitor&) const override;
  27. static OwnPtr<CodeBlock> parse(LineIterator& lines, Heading* current_section);
  28. private:
  29. ByteString m_code;
  30. ByteString m_language;
  31. ByteString m_style;
  32. Heading* m_current_section;
  33. static OwnPtr<CodeBlock> parse_backticks(LineIterator& lines, Heading* current_section);
  34. static OwnPtr<CodeBlock> parse_indent(LineIterator& lines);
  35. };
  36. }