Implement unicode on console, move readline into driver
This commit is contained in:
53
luprex/cpp/drv/readline.hpp
Normal file
53
luprex/cpp/drv/readline.hpp
Normal file
@@ -0,0 +1,53 @@
|
||||
|
||||
#ifndef READLINE_HPP
|
||||
#define READLINE_HPP
|
||||
|
||||
#include <string>
|
||||
#include <string_view>
|
||||
|
||||
using CodepointString = std::basic_string<char32_t>;
|
||||
|
||||
class ReadlineDevice {
|
||||
public:
|
||||
using print_callback = void (*)(const CodepointString &text);
|
||||
|
||||
private:
|
||||
print_callback print_cb_;
|
||||
CodepointString desired_command_;
|
||||
CodepointString current_command_;
|
||||
CodepointString desired_prompt_;
|
||||
CodepointString current_prompt_;
|
||||
char32_t readline_lastc_;
|
||||
|
||||
void echo_command();
|
||||
void erase_command();
|
||||
|
||||
public:
|
||||
ReadlineDevice();
|
||||
|
||||
// The callback must be set before using the readline device.
|
||||
void set_print_callback(print_callback cb);
|
||||
|
||||
// change the prompt.
|
||||
void set_prompt(const CodepointString &prompt);
|
||||
|
||||
// Use this to print anything on the console.
|
||||
void print(const CodepointString &cps);
|
||||
|
||||
// Whenever the user types a character, call 'putcode'. If the code is
|
||||
// newline, this returns the line of text that was entered, including the
|
||||
// newline. Otherwise returns empty string. Backspace is handled here.
|
||||
CodepointString putcode(char32_t codepoint);
|
||||
|
||||
// This can be used to convert a codepoint string into a
|
||||
// UTF8-string.
|
||||
static std::string to_utf8(const CodepointString &cps);
|
||||
|
||||
// This can be used to convert UTF8 to a codepoint string.
|
||||
// Some of the bytes may not be consumed. Returns the Codepoint
|
||||
// string and the number of bytes consumed.
|
||||
static CodepointString from_utf8(std::string_view source, int *consumed);
|
||||
};
|
||||
|
||||
|
||||
#endif // READLINE_HPP
|
||||
Reference in New Issue
Block a user