Prechádzať zdrojové kódy

LibManual: Add SubsectionNode

kleines Filmröllchen 2 rokov pred
rodič
commit
a9fe80550d

+ 1 - 0
Userland/Libraries/LibManual/CMakeLists.txt

@@ -3,6 +3,7 @@ set(SOURCES
     PageNode.cpp
     Path.cpp
     SectionNode.cpp
+    SubsectionNode.cpp
 )
 
 serenity_lib(LibManual manual)

+ 26 - 0
Userland/Libraries/LibManual/SubsectionNode.cpp

@@ -0,0 +1,26 @@
+/*
+ * Copyright (c) 2022, kleines Filmröllchen <filmroellchen@serenityos.org>
+ *
+ * SPDX-License-Identifier: BSD-2-Clause
+ */
+
+#include "SubsectionNode.h"
+
+namespace Manual {
+
+SubsectionNode::SubsectionNode(NonnullRefPtr<SectionNode> parent, StringView name)
+    : SectionNode(name, name)
+    , m_parent(move(parent))
+{
+}
+
+Node const* SubsectionNode::parent() const { return m_parent; }
+
+ErrorOr<String> SubsectionNode::name() const { return m_name; }
+
+ErrorOr<String> SubsectionNode::path() const
+{
+    return String::formatted("{}/{}", TRY(m_parent->path()), m_section);
+}
+
+}

+ 27 - 0
Userland/Libraries/LibManual/SubsectionNode.h

@@ -0,0 +1,27 @@
+/*
+ * Copyright (c) 2022, kleines Filmröllchen <filmroellchen@serenityos.org>
+ *
+ * SPDX-License-Identifier: BSD-2-Clause
+ */
+
+#pragma once
+
+#include <LibManual/SectionNode.h>
+
+namespace Manual {
+
+// A non-toplevel (i.e. not numbered) manual section.
+class SubsectionNode : public SectionNode {
+public:
+    SubsectionNode(NonnullRefPtr<SectionNode> parent, StringView name);
+    virtual ~SubsectionNode() = default;
+
+    virtual Node const* parent() const override;
+    virtual ErrorOr<String> path() const override;
+    virtual ErrorOr<String> name() const override;
+
+protected:
+    NonnullRefPtr<SectionNode> m_parent;
+};
+
+}