diff options
| -rw-r--r-- | CMakeLists.txt | 9 | ||||
| -rw-r--r-- | ttwhy/io.cppm | 7 | ||||
| -rw-r--r-- | ttwhy/lib.cppm | 1 | ||||
| -rw-r--r-- | ttwhy/routers/echo.cppm | 21 | ||||
| -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.cppm | 18 | ||||
| -rw-r--r-- | ttwhy/scanners/events.cppm (renamed from ttwhy/event.cppm) | 6 | ||||
| -rw-r--r-- | ttwhy/scanners/mod.cppm | 5 |
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; |
