1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-02 23:42:13 +00:00

Help+LibManual: Move non-UI-specific manual handling to LibManual

This is a first step in deduplicating code within and across Help and
man.

Because LibManual also doesn't contain any DeprecatedString, some
adjustments to Help's string handling is included, just to interoperate
with LibManual better. Further work in this area mostly requires String
APIs in LibGUI.
This commit is contained in:
kleines Filmröllchen 2022-07-13 00:20:27 +02:00 committed by Linus Groh
parent 78353ec184
commit ad6a55e1f0
18 changed files with 339 additions and 265 deletions

View file

@ -0,0 +1,62 @@
/*
* Copyright (c) 2019-2020, Sergey Bugaev <bugaevc@serenityos.org>
*
* SPDX-License-Identifier: BSD-2-Clause
*/
#include "SectionNode.h"
#include "PageNode.h"
#include <AK/LexicalPath.h>
#include <AK/QuickSort.h>
#include <LibCore/DirIterator.h>
namespace Manual {
ErrorOr<String> SectionNode::path() const
{
return String::formatted("/usr/share/man/man{}", m_section);
}
ErrorOr<void> SectionNode::reify_if_needed() const
{
if (m_reified)
return {};
m_reified = true;
Core::DirIterator dir_iter { TRY(path()).to_deprecated_string(), Core::DirIterator::Flags::SkipDots };
Vector<String> page_names;
while (dir_iter.has_next()) {
LexicalPath lexical_path(dir_iter.next_path());
if (lexical_path.extension() != "md")
continue;
page_names.append(TRY(String::from_utf8(lexical_path.title())));
}
quick_sort(page_names);
for (auto& page_name : page_names)
m_children.append(TRY(try_make_ref_counted<PageNode>(*this, move(page_name))));
return {};
}
void SectionNode::set_open(bool open)
{
if (m_open == open)
return;
m_open = open;
}
Array<NonnullRefPtr<SectionNode>, number_of_sections> const sections = { {
make_ref_counted<SectionNode>("1"sv, "User Programs"sv),
make_ref_counted<SectionNode>("2"sv, "System Calls"sv),
make_ref_counted<SectionNode>("3"sv, "Library Functions"sv),
make_ref_counted<SectionNode>("4"sv, "Special Files"sv),
make_ref_counted<SectionNode>("5"sv, "File Formats"sv),
make_ref_counted<SectionNode>("6"sv, "Games"sv),
make_ref_counted<SectionNode>("7"sv, "Miscellanea"sv),
make_ref_counted<SectionNode>("8"sv, "Sysadmin Tools"sv),
} };
}