Compare commits
No commits in common. "51943a5123d65de0440d94cb15bd2b44372bdc6b" and "8b0447668b527c0027bd16010e3bf959c14d37ff" have entirely different histories.
51943a5123
...
8b0447668b
@ -8,11 +8,9 @@ add_executable(${PROJECT_NAME}
|
|||||||
stringutil.hpp
|
stringutil.hpp
|
||||||
stringutil.cpp
|
stringutil.cpp
|
||||||
Tui.cpp
|
Tui.cpp
|
||||||
Tui.hpp
|
Tui.h
|
||||||
Command.hpp
|
Command.h
|
||||||
Command.cpp
|
Command.cpp
|
||||||
Pager.cpp
|
|
||||||
Pager.hpp
|
|
||||||
)
|
)
|
||||||
|
|
||||||
target_link_libraries(${PROJECT_NAME} PRIVATE LibXml2::LibXml2 cpr::cpr)
|
target_link_libraries(${PROJECT_NAME} PRIVATE LibXml2::LibXml2 cpr::cpr)
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
// Author: Love Billenius <lovebillenius@disroot.org>
|
// Author: Love Billenius <lovebillenius@disroot.org>
|
||||||
// License: GPL-3
|
// License: GPL-3
|
||||||
|
|
||||||
#include "Command.hpp"
|
#include "Command.h"
|
||||||
|
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
|
||||||
|
23
src/Page.cpp
23
src/Page.cpp
@ -48,6 +48,16 @@ void italize_numbers(std::string &content, size_t leave_chars = 0) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void pretty_format_page(std::string &content) {
|
||||||
|
content.insert(0, ansi::BOLD);
|
||||||
|
size_t line_end = content.find('\n');
|
||||||
|
if (line_end == std::string::npos)
|
||||||
|
line_end = content.size();
|
||||||
|
content.insert(line_end, ansi::CLEAR);
|
||||||
|
|
||||||
|
italize_numbers(content, line_end + ansi::CLEAR.size());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
Page::Page(const int number): m_number(number), m_subpage(fetchSubpage()) {
|
Page::Page(const int number): m_number(number), m_subpage(fetchSubpage()) {
|
||||||
}
|
}
|
||||||
@ -67,18 +77,6 @@ Page &Page::operator-=(int) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
std::string Page::str_pretty() const {
|
std::string Page::str_pretty() const {
|
||||||
std::string content = str();
|
|
||||||
content.insert(0, ansi::BOLD);
|
|
||||||
size_t line_end = content.find('\n');
|
|
||||||
if (line_end == std::string::npos)
|
|
||||||
line_end = content.size();
|
|
||||||
content.insert(line_end, ansi::CLEAR);
|
|
||||||
|
|
||||||
italize_numbers(content, line_end + ansi::CLEAR.size());
|
|
||||||
return content;
|
|
||||||
}
|
|
||||||
|
|
||||||
std::string Page::str() const {
|
|
||||||
std::string ret;
|
std::string ret;
|
||||||
|
|
||||||
std::istringstream stream(m_subpage);
|
std::istringstream stream(m_subpage);
|
||||||
@ -89,6 +87,7 @@ std::string Page::str() const {
|
|||||||
string_utils::limitConsecutiveWhitespace(ret, MAX_WHITESPACE);
|
string_utils::limitConsecutiveWhitespace(ret, MAX_WHITESPACE);
|
||||||
string_utils::removeTrailingWhitespace(ret);
|
string_utils::removeTrailingWhitespace(ret);
|
||||||
|
|
||||||
|
pretty_format_page(ret);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -33,8 +33,6 @@ public:
|
|||||||
|
|
||||||
[[nodiscard]] std::string str_pretty() const;
|
[[nodiscard]] std::string str_pretty() const;
|
||||||
|
|
||||||
[[nodiscard]] std::string str() const;
|
|
||||||
|
|
||||||
bool refresh();
|
bool refresh();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
@ -1,50 +0,0 @@
|
|||||||
// _____ _ _____
|
|
||||||
// |_ _|____ _| ||_ _|_ __
|
|
||||||
// | |/ _ \ \/ / __|| | \ \ / /
|
|
||||||
// | | __/> <| |_ | | \ V /
|
|
||||||
// |_|\___/_/\_\\__||_| \_/
|
|
||||||
// Author: Love Billenius <lovebillenius@disroot.org>
|
|
||||||
// License: GPL-3
|
|
||||||
|
|
||||||
|
|
||||||
#include "Pager.hpp"
|
|
||||||
|
|
||||||
Page &Pager::seek(const int number) {
|
|
||||||
Page &page = get_page_at(number);
|
|
||||||
m_page_number = number;
|
|
||||||
return page;
|
|
||||||
}
|
|
||||||
|
|
||||||
Pager &Pager::operator+=(const int number) {
|
|
||||||
seek(m_page_number + number);
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
|
|
||||||
Pager &Pager::operator-=(const int number) {
|
|
||||||
seek(m_page_number - number);
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
|
|
||||||
Page &Pager::operator*() {
|
|
||||||
return get_page_at(m_page_number);
|
|
||||||
}
|
|
||||||
|
|
||||||
Page *Pager::operator->() {
|
|
||||||
return &get_page_at(m_page_number);
|
|
||||||
}
|
|
||||||
|
|
||||||
void Pager::set(const int number) {
|
|
||||||
m_page_number = number;
|
|
||||||
}
|
|
||||||
|
|
||||||
void Pager::clear() {
|
|
||||||
m_pages.clear();
|
|
||||||
}
|
|
||||||
|
|
||||||
Page &Pager::get_page_at(const int number) {
|
|
||||||
if (!m_pages.contains(number)) {
|
|
||||||
const Page p(number);
|
|
||||||
m_pages[number] = p;
|
|
||||||
}
|
|
||||||
return m_pages.at(number);
|
|
||||||
}
|
|
@ -1,41 +0,0 @@
|
|||||||
// _____ _ _____
|
|
||||||
// |_ _|____ _| ||_ _|_ __
|
|
||||||
// | |/ _ \ \/ / __|| | \ \ / /
|
|
||||||
// | | __/> <| |_ | | \ V /
|
|
||||||
// |_|\___/_/\_\\__||_| \_/
|
|
||||||
// Author: Love Billenius <lovebillenius@disroot.org>
|
|
||||||
// License: GPL-3
|
|
||||||
|
|
||||||
#pragma once
|
|
||||||
|
|
||||||
#include <unordered_map>
|
|
||||||
|
|
||||||
#include "Page.hpp"
|
|
||||||
|
|
||||||
|
|
||||||
class Pager {
|
|
||||||
public:
|
|
||||||
Pager() = default;
|
|
||||||
|
|
||||||
Page &seek(int number);
|
|
||||||
|
|
||||||
Pager &operator+=(int number);
|
|
||||||
|
|
||||||
Pager &operator-=(int number);
|
|
||||||
|
|
||||||
Page &operator*();
|
|
||||||
Page *operator->();
|
|
||||||
|
|
||||||
void set(int number);
|
|
||||||
|
|
||||||
Page &get();
|
|
||||||
|
|
||||||
void clear();
|
|
||||||
|
|
||||||
private:
|
|
||||||
Page &get_page_at(int number);
|
|
||||||
|
|
||||||
private:
|
|
||||||
std::unordered_map<int, Page> m_pages{};
|
|
||||||
int m_page_number = 100;
|
|
||||||
};
|
|
26
src/Tui.cpp
26
src/Tui.cpp
@ -6,19 +6,19 @@
|
|||||||
// Author: Love Billenius <lovebillenius@disroot.org>
|
// Author: Love Billenius <lovebillenius@disroot.org>
|
||||||
// License: GPL-3
|
// License: GPL-3
|
||||||
|
|
||||||
#include "Tui.hpp"
|
#include "Tui.h"
|
||||||
|
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <optional>
|
#include <optional>
|
||||||
#include <ostream>
|
#include <ostream>
|
||||||
#include <utility>
|
#include <utility>
|
||||||
|
|
||||||
#include "Command.hpp"
|
#include "Command.h"
|
||||||
#include "Pager.hpp"
|
|
||||||
|
|
||||||
Tui::Tui(Pager pager) : m_pager(std::move(pager)) {
|
Tui::Tui(Page page) : m_page(std::move(page)) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
std::optional<int> get_page_number(const std::string_view line) {
|
std::optional<int> get_page_number(const std::string_view line) {
|
||||||
const size_t space = line.find_first_of(' ');
|
const size_t space = line.find_first_of(' ');
|
||||||
if (space == std::string::npos)
|
if (space == std::string::npos)
|
||||||
@ -50,7 +50,7 @@ void printHelp() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void Tui::run() {
|
void Tui::run() {
|
||||||
std::cout << m_pager->str_pretty() << std::endl;
|
std::cout << m_page.str_pretty() << std::endl;
|
||||||
for (;;) {
|
for (;;) {
|
||||||
std::cout << "Enter a command: ";
|
std::cout << "Enter a command: ";
|
||||||
std::flush(std::cout);
|
std::flush(std::cout);
|
||||||
@ -71,23 +71,23 @@ void Tui::run() {
|
|||||||
std::cout << "Invalid command!" << std::endl;
|
std::cout << "Invalid command!" << std::endl;
|
||||||
} else if constexpr (std::is_same_v<T, Command::Next>) {
|
} else if constexpr (std::is_same_v<T, Command::Next>) {
|
||||||
try {
|
try {
|
||||||
m_pager += 1;
|
m_page += 1;
|
||||||
} catch (const std::runtime_error &e) {
|
} catch (const std::runtime_error &e) {
|
||||||
std::cout << e.what() << std::endl;
|
std::cout << e.what() << std::endl;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
std::cout << m_pager->str_pretty() << std::endl;
|
std::cout << m_page.str_pretty() << std::endl;
|
||||||
} else if constexpr (std::is_same_v<T, Command::Previous>) {
|
} else if constexpr (std::is_same_v<T, Command::Previous>) {
|
||||||
try {
|
try {
|
||||||
m_pager -= 1;
|
m_page -= 1;
|
||||||
} catch (const std::runtime_error &e) {
|
} catch (const std::runtime_error &e) {
|
||||||
std::cout << e.what() << std::endl;
|
std::cout << e.what() << std::endl;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
std::cout << m_pager->str_pretty() << std::endl;
|
std::cout << m_page.str_pretty() << std::endl;
|
||||||
} else if constexpr (std::is_same_v<T, Command::Refresh>) {
|
} else if constexpr (std::is_same_v<T, Command::Refresh>) {
|
||||||
m_pager.clear();
|
m_page.refresh();
|
||||||
std::cout << m_pager->str_pretty() << std::endl;
|
std::cout << m_page.str_pretty() << std::endl;
|
||||||
} else if constexpr (std::is_same_v<T, Command::Exit>) {
|
} else if constexpr (std::is_same_v<T, Command::Exit>) {
|
||||||
should_exit = true;
|
should_exit = true;
|
||||||
} else if constexpr (std::is_same_v<T, Command::Help>) {
|
} else if constexpr (std::is_same_v<T, Command::Help>) {
|
||||||
@ -96,12 +96,12 @@ void Tui::run() {
|
|||||||
const Command::Seek &seek = arg;
|
const Command::Seek &seek = arg;
|
||||||
const int number = seek.number;
|
const int number = seek.number;
|
||||||
try {
|
try {
|
||||||
m_pager.seek(number);
|
m_page = Page(number);
|
||||||
} catch (const std::runtime_error &e) {
|
} catch (const std::runtime_error &e) {
|
||||||
std::cout << e.what() << std::endl;
|
std::cout << e.what() << std::endl;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
std::cout << m_pager->str_pretty() << std::endl;
|
std::cout << m_page.str_pretty() << std::endl;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
std::visit(visitor, command);
|
std::visit(visitor, command);
|
||||||
|
@ -7,15 +7,15 @@
|
|||||||
// License: GPL-3
|
// License: GPL-3
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
#include "Pager.hpp"
|
#include "Page.hpp"
|
||||||
|
|
||||||
|
|
||||||
class Tui {
|
class Tui {
|
||||||
public:
|
public:
|
||||||
Tui(Pager pager);
|
Tui(Page page);
|
||||||
|
|
||||||
void run();
|
void run();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Pager m_pager;
|
Page m_page;
|
||||||
};
|
};
|
@ -6,9 +6,10 @@
|
|||||||
// Author: Love Billenius <lovebillenius@disroot.org>
|
// Author: Love Billenius <lovebillenius@disroot.org>
|
||||||
// License: GPL-3
|
// License: GPL-3
|
||||||
|
|
||||||
#include "Tui.hpp"
|
#include "Page.hpp"
|
||||||
|
#include "Tui.h"
|
||||||
|
|
||||||
int main(int argc, char *argv[]) {
|
int main(int argc, char *argv[]) {
|
||||||
Tui tui(Pager{});
|
Tui tui = Page();
|
||||||
tui.run();
|
tui.run();
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user