18 void Parse(RawData& raw_data)
20 char* buff =
static_cast<char*
>(raw_data.addr_);
21 for (
size_t i = 0; i < raw_data.size_; i++)
23 HandleCharacter(buff[i]);
36 void HandleAnsiCharacter(
char data)
40 if (std::isprint(
static_cast<unsigned char>(data)))
49 else if (flag_ansi_ == 2)
54 if (history_index_ <
int(history_.Size()) - 1)
61 if (history_index_ >= 0)
68 if (history_index_ >= 0)
70 CopyHistoryToInputLine();
76 write_stream_ << ConstRawData(KEY_RIGHT,
sizeof(KEY_RIGHT) - 1);
81 if (history_index_ >= 0)
83 CopyHistoryToInputLine();
86 if (offset_ + input_line_.Size() > 0)
89 write_stream_ << ConstRawData(KEY_LEFT,
sizeof(KEY_LEFT) - 1);
110 void HandleControlCharacter(
char data)
112 if (data !=
'\r' && data !=
'\n')
114 linefeed_flag_ =
false;
115 linefeed_char_ =
'\0';
122 if (linefeed_flag_ && data != linefeed_char_)
124 linefeed_flag_ =
false;
125 linefeed_char_ =
'\0';
128 linefeed_flag_ =
true;
129 linefeed_char_ = data;
130 if (history_index_ >= 0)
132 CopyHistoryToInputLine();
135 if (input_line_.Size() > 0)
142 input_line_[0] =
'\0';
165 void HandleCharacter(
char data)
169 HandleAnsiCharacter(data);
171 else if (std::isprint(
static_cast<unsigned char>(data)))
177 HandleControlCharacter(data);
consteval Error Parse(std::string_view source, size_t &pos, IndexingState &indexing, Conversion &conversion)
在前导 % 之后解析一个完整 printf 转换项 / Parse one complete printf conversion after the leading %