aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFelix Morgner <felix.morgner@gmail.com>2026-06-19 19:25:30 +0200
committerFelix Morgner <felix.morgner@gmail.com>2026-06-19 19:25:30 +0200
commit7da39cd68d2bed2f49452ac5f9a3c01c52d0c5ba (patch)
treea2c2adc18bc5bdaa1e1e2f80e75d1acbce78d7bb
parentb198d40e35050c8692296f06acedfaf5e3c8a023 (diff)
downloadttwhy-7da39cd68d2bed2f49452ac5f9a3c01c52d0c5ba.tar.xz
ttwhy-7da39cd68d2bed2f49452ac5f9a3c01c52d0c5ba.zip
lib: clean up structure
-rw-r--r--CMakeLists.txt9
-rw-r--r--ttwhy/io.cppm7
-rw-r--r--ttwhy/lib.cppm1
-rw-r--r--ttwhy/routers/echo.cppm21
-rw-r--r--ttwhy/routers/mod.cppm (renamed from ttwhy/routers.cppm)0
-rw-r--r--ttwhy/scanners/ansi.cppm (renamed from ttwhy/scanner.cppm)16
-rw-r--r--ttwhy/scanners/concepts.cppm18
-rw-r--r--ttwhy/scanners/events.cppm (renamed from ttwhy/event.cppm)6
-rw-r--r--ttwhy/scanners/mod.cppm5
9 files changed, 54 insertions, 29 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 00318e7..bb68832 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -48,14 +48,17 @@ target_sources("ttwhy-core" PUBLIC
FILE_SET CXX_MODULES
FILES
- "ttwhy/event.cppm"
"ttwhy/io.cppm"
"ttwhy/lib.cppm"
- "ttwhy/scanner.cppm"
"ttwhy/scoped_attributes.cppm"
- "ttwhy/routers.cppm"
"ttwhy/routers/echo.cppm"
+ "ttwhy/routers/mod.cppm"
+
+ "ttwhy/scanners/ansi.cppm"
+ "ttwhy/scanners/concepts.cppm"
+ "ttwhy/scanners/mod.cppm"
+ "ttwhy/scanners/events.cppm"
)
target_include_directories("ttwhy-core" PUBLIC
diff --git a/ttwhy/io.cppm b/ttwhy/io.cppm
index 09f16c8..5fd5e50 100644
--- a/ttwhy/io.cppm
+++ b/ttwhy/io.cppm
@@ -10,8 +10,7 @@ module;
export module ttwhy:io;
-import :event;
-import :scanner;
+import ttwhy.scanners;
namespace ttwhy::io
{
@@ -69,10 +68,10 @@ namespace ttwhy::io
auto executor = co_await asio::this_coro::executor;
auto timer = asio::steady_timer{executor};
- auto queue = std::vector<input_event>{};
+ auto queue = std::vector<scanners::input_event>{};
queue.reserve(16);
- auto scanner = ansi_scanner{queue};
+ auto scanner = scanners::ansi{queue};
auto raw_buffer = std::array<char, 64>{};
while (true)
diff --git a/ttwhy/lib.cppm b/ttwhy/lib.cppm
index b7766bd..14e0d5c 100644
--- a/ttwhy/lib.cppm
+++ b/ttwhy/lib.cppm
@@ -1,5 +1,4 @@
export module ttwhy;
-export import :event;
export import :io;
export import :scoped_attributes;
diff --git a/ttwhy/routers/echo.cppm b/ttwhy/routers/echo.cppm
index fb392d6..40e68d6 100644
--- a/ttwhy/routers/echo.cppm
+++ b/ttwhy/routers/echo.cppm
@@ -8,6 +8,7 @@ module;
export module ttwhy.routers:echo;
import ttwhy;
+import ttwhy.scanners;
namespace ttwhy::routers
{
@@ -25,21 +26,21 @@ namespace ttwhy::routers
: m_output_stream{stream}
{}
- auto process(ttwhy::input_event event) -> asio::awaitable<void>
+ auto process(scanners::input_event event) -> asio::awaitable<void>
{
co_await std::visit(
[&](auto && event) -> asio::awaitable<void> {
using event_type = std::decay_t<decltype(event)>;
- if constexpr (std::same_as<character_event, event_type>)
+ if constexpr (std::same_as<scanners::character_event, event_type>)
{
co_await process_character(event.value);
}
- else if constexpr (std::same_as<control_event, event_type>)
+ else if constexpr (std::same_as<scanners::control_event, event_type>)
{
co_await process_control_key(event.key);
}
- else if constexpr (std::same_as<navigation_event, event_type>)
+ else if constexpr (std::same_as<scanners::navigation_event, event_type>)
{
co_await process_navigation_key(event.key);
}
@@ -53,19 +54,19 @@ namespace ttwhy::routers
co_await asio::async_write(m_output_stream, asio::buffer(&character, 1), asio::as_tuple(asio::use_awaitable));
}
- auto process_control_key(control_key key) -> asio::awaitable<void>
+ auto process_control_key(scanners::control_key key) -> asio::awaitable<void>
{
switch (key)
{
- case control_key::backspace:
+ case scanners::control_key::backspace:
co_await asio::async_write(m_output_stream, asio::buffer(vte_backspace_sequence),
asio::as_tuple(asio::use_awaitable));
break;
- case control_key::enter:
+ case scanners::control_key::enter:
co_await asio::async_write(m_output_stream, asio::buffer(vte_newline_sequence),
asio::as_tuple(asio::use_awaitable));
break;
- case control_key::tab:
+ case scanners::control_key::tab:
co_await asio::async_write(m_output_stream, asio::buffer(vte_horizontal_tab_sequqnce),
asio::as_tuple(asio::use_awaitable));
break;
@@ -76,11 +77,11 @@ namespace ttwhy::routers
};
}
- auto process_navigation_key(navigation_key key) -> asio::awaitable<void>
+ auto process_navigation_key(scanners::navigation_key key) -> asio::awaitable<void>
{
switch (key)
{
- case navigation_key::delete_key:
+ case scanners::navigation_key::delete_key:
co_await asio::async_write(m_output_stream, asio::buffer("{DEL}"), asio::as_tuple(asio::use_awaitable));
break;
default:
diff --git a/ttwhy/routers.cppm b/ttwhy/routers/mod.cppm
index fbab282..fbab282 100644
--- a/ttwhy/routers.cppm
+++ b/ttwhy/routers/mod.cppm
diff --git a/ttwhy/scanner.cppm b/ttwhy/scanners/ansi.cppm
index 2257f5f..b248753 100644
--- a/ttwhy/scanner.cppm
+++ b/ttwhy/scanners/ansi.cppm
@@ -7,11 +7,11 @@ module;
#include <string>
#include <vector>
-export module ttwhy:scanner;
+export module ttwhy.scanners:ansi;
-import :event;
+import :events;
-namespace ttwhy::detail
+namespace ttwhy::scanners::detail
{
/// Events
@@ -226,14 +226,14 @@ namespace ttwhy::detail
}
};
-} // namespace ttwhy::detail
+} // namespace ttwhy::scanners::detail
-export namespace ttwhy
+export namespace ttwhy::scanners
{
- struct ansi_scanner
+ struct ansi
{
- explicit ansi_scanner(std::vector<input_event> & queue)
+ explicit ansi(std::vector<input_event> & queue)
: m_state_machine{queue, m_csi_buffer}
{}
@@ -259,4 +259,4 @@ export namespace ttwhy
boost::sml::sm<detail::transition_table> m_state_machine;
};
-} // namespace ttwhy
+} // namespace ttwhy::scanners
diff --git a/ttwhy/scanners/concepts.cppm b/ttwhy/scanners/concepts.cppm
new file mode 100644
index 0000000..003874c
--- /dev/null
+++ b/ttwhy/scanners/concepts.cppm
@@ -0,0 +1,18 @@
+module;
+
+#include <concepts>
+#include <span>
+
+export module ttwhy.scanners:concepts;
+
+namespace ttwhy
+{
+
+ export template<typename Candidate>
+ concept scanner = requires(Candidate a, std::span<char const> buffer) {
+ { a.process(buffer) } -> std::same_as<void>;
+ { a.timeout() } -> std::same_as<void>;
+ { a.is_pending() } -> std::same_as<bool>;
+ };
+
+} // namespace ttwhy
diff --git a/ttwhy/event.cppm b/ttwhy/scanners/events.cppm
index b37cc51..3e2f4f0 100644
--- a/ttwhy/event.cppm
+++ b/ttwhy/scanners/events.cppm
@@ -2,9 +2,9 @@ module;
#include <variant>
-export module ttwhy:event;
+export module ttwhy.scanners:events;
-namespace ttwhy
+namespace ttwhy::scanners
{
export enum class control_key
{
@@ -44,4 +44,4 @@ namespace ttwhy
};
export using input_event = std::variant<character_event, control_event, navigation_event>;
-} // namespace ttwhy
+} // namespace ttwhy::scanners
diff --git a/ttwhy/scanners/mod.cppm b/ttwhy/scanners/mod.cppm
new file mode 100644
index 0000000..8dc3009
--- /dev/null
+++ b/ttwhy/scanners/mod.cppm
@@ -0,0 +1,5 @@
+export module ttwhy.scanners;
+
+export import :ansi;
+export import :concepts;
+export import :events;