7#include "keyboard_modifiers.hpp"
9#include "../exception.hpp"
10#include "../strings.hpp"
11#include <unordered_map>
13namespace hi::inline v1 {
15enum class keyboard_virtual_key : uint8_t {
152 {
"0", keyboard_virtual_key::_0},
153 {
"1", keyboard_virtual_key::_1},
154 {
"2", keyboard_virtual_key::_2},
155 {
"3", keyboard_virtual_key::_3},
156 {
"4", keyboard_virtual_key::_4},
157 {
"5", keyboard_virtual_key::_5},
158 {
"6", keyboard_virtual_key::_6},
159 {
"7", keyboard_virtual_key::_7},
160 {
"8", keyboard_virtual_key::_8},
161 {
"9", keyboard_virtual_key::_9},
162 {
"a", keyboard_virtual_key::A},
163 {
"b", keyboard_virtual_key::B},
164 {
"c", keyboard_virtual_key::C},
165 {
"d", keyboard_virtual_key::D},
166 {
"e", keyboard_virtual_key::E},
167 {
"f", keyboard_virtual_key::F},
168 {
"g", keyboard_virtual_key::G},
169 {
"h", keyboard_virtual_key::H},
170 {
"i", keyboard_virtual_key::I},
171 {
"j", keyboard_virtual_key::J},
172 {
"k", keyboard_virtual_key::K},
173 {
"l", keyboard_virtual_key::L},
174 {
"m", keyboard_virtual_key::M},
175 {
"n", keyboard_virtual_key::N},
176 {
"o", keyboard_virtual_key::O},
177 {
"p", keyboard_virtual_key::P},
178 {
"q", keyboard_virtual_key::Q},
179 {
"r", keyboard_virtual_key::R},
180 {
"s", keyboard_virtual_key::S},
181 {
"t", keyboard_virtual_key::T},
182 {
"u", keyboard_virtual_key::U},
183 {
"v", keyboard_virtual_key::V},
184 {
"w", keyboard_virtual_key::W},
185 {
"x", keyboard_virtual_key::X},
186 {
"y", keyboard_virtual_key::Y},
187 {
"z", keyboard_virtual_key::Z},
188 {
"plus", keyboard_virtual_key::Plus},
189 {
"-", keyboard_virtual_key::Minus},
190 {
"*", keyboard_virtual_key::Star},
191 {
"/", keyboard_virtual_key::Slash},
192 {
"%", keyboard_virtual_key::Percent},
193 {
"~", keyboard_virtual_key::Tilde},
194 {
"&", keyboard_virtual_key::Ampersant},
195 {
"|", keyboard_virtual_key::Pipe},
196 {
"^", keyboard_virtual_key::Caret},
197 {
"<", keyboard_virtual_key::Less},
198 {
"=", keyboard_virtual_key::Equal},
199 {
">", keyboard_virtual_key::Greater},
200 {
"(", keyboard_virtual_key::OpenParentheses},
201 {
")", keyboard_virtual_key::CloseParentheses},
202 {
"[", keyboard_virtual_key::OpenBracket},
203 {
"]", keyboard_virtual_key::CloseBracket},
204 {
"{", keyboard_virtual_key::OpenBrace},
205 {
"}", keyboard_virtual_key::CloseBrace},
206 {
"backslash", keyboard_virtual_key::Backslash},
207 {
".", keyboard_virtual_key::Period},
208 {
",", keyboard_virtual_key::Comma},
209 {
":", keyboard_virtual_key::Colon},
210 {
";", keyboard_virtual_key::SemiColon},
211 {
"!", keyboard_virtual_key::Bang},
212 {
"?", keyboard_virtual_key::Question},
213 {
"space", keyboard_virtual_key::Space},
214 {
"tab", keyboard_virtual_key::Tab},
215 {
"enter", keyboard_virtual_key::Enter},
216 {
"`", keyboard_virtual_key::Backtick},
217 {
"quote", keyboard_virtual_key::Quote},
218 {
"dquote", keyboard_virtual_key::DoubleQuote},
219 {
"@", keyboard_virtual_key::At},
220 {
"#", keyboard_virtual_key::Hash},
221 {
"$", keyboard_virtual_key::Dollar},
222 {
"_", keyboard_virtual_key::Underscore},
223 {
"left", keyboard_virtual_key::Left},
224 {
"right", keyboard_virtual_key::Right},
225 {
"up", keyboard_virtual_key::Up},
226 {
"down", keyboard_virtual_key::Down},
227 {
"pageup", keyboard_virtual_key::PageUp},
228 {
"pagedown", keyboard_virtual_key::PageDown},
229 {
"home", keyboard_virtual_key::Home},
230 {
"end", keyboard_virtual_key::End},
231 {
"backspace", keyboard_virtual_key::Backspace},
232 {
"insert", keyboard_virtual_key::Insert},
233 {
"delete", keyboard_virtual_key::Delete},
234 {
"clear", keyboard_virtual_key::Clear},
235 {
"escape", keyboard_virtual_key::Escape},
236 {
"print", keyboard_virtual_key::PrintScreen},
237 {
"pause", keyboard_virtual_key::PauseBreak},
238 {
"menu", keyboard_virtual_key::Menu},
239 {
"f1", keyboard_virtual_key::F1},
240 {
"f2", keyboard_virtual_key::F2},
241 {
"f3", keyboard_virtual_key::F3},
242 {
"f4", keyboard_virtual_key::F4},
243 {
"f5", keyboard_virtual_key::F5},
244 {
"f6", keyboard_virtual_key::F6},
245 {
"f7", keyboard_virtual_key::F7},
246 {
"f8", keyboard_virtual_key::F8},
247 {
"f9", keyboard_virtual_key::F9},
248 {
"f10", keyboard_virtual_key::F10},
249 {
"f11", keyboard_virtual_key::F11},
250 {
"f12", keyboard_virtual_key::F12},
251 {
"f13", keyboard_virtual_key::F13},
252 {
"f14", keyboard_virtual_key::F14},
253 {
"f15", keyboard_virtual_key::F15},
254 {
"f16", keyboard_virtual_key::F16},
255 {
"f17", keyboard_virtual_key::F17},
256 {
"f18", keyboard_virtual_key::F18},
257 {
"f19", keyboard_virtual_key::F19},
258 {
"f20", keyboard_virtual_key::F20},
259 {
"f21", keyboard_virtual_key::F21},
260 {
"f22", keyboard_virtual_key::F22},
261 {
"f23", keyboard_virtual_key::F23},
262 {
"f24", keyboard_virtual_key::F24},
263 {
"media-next", keyboard_virtual_key::MediaNextTrack},
264 {
"media-prev", keyboard_virtual_key::MediaPrevTrack},
265 {
"media-stop", keyboard_virtual_key::MediaStop},
266 {
"media-play", keyboard_virtual_key::MediaPlayPause},
267 {
"browser-back", keyboard_virtual_key::BrowserBack},
268 {
"browser-forward", keyboard_virtual_key::BrowserForward},
269 {
"browser-refresh", keyboard_virtual_key::BrowserRefresh},
270 {
"browser-stop", keyboard_virtual_key::BrowserStop},
271 {
"browser-search", keyboard_virtual_key::BrowserSearch},
272 {
"browser-favorites", keyboard_virtual_key::BrowserFavorites},
273 {
"browser-home", keyboard_virtual_key::BrowserHome},
274 {
"volume-mute", keyboard_virtual_key::VolumeMute},
275 {
"volume-up", keyboard_virtual_key::VolumeUp},
276 {
"volume-down", keyboard_virtual_key::VolumeDown},
279inline keyboard_virtual_key to_keyboard_virtual_key(std::string_view s)
281 hilet lower_s = to_lower(s);
282 hilet i = string_to_keyboard_virtual_key_table.find(lower_s);
283 if (i != string_to_keyboard_virtual_key_table.cend()) {
286 throw parse_error(std::format(
"Could not find virtual key '{}'", s));
289keyboard_virtual_key to_keyboard_virtual_key(
int key_code,
bool extended, keyboard_modifiers modifiers);
291constexpr char const *to_const_string(keyboard_virtual_key key)
noexcept
294 case keyboard_virtual_key::_0:
return "0";
295 case keyboard_virtual_key::_1:
return "1";
296 case keyboard_virtual_key::_2:
return "2";
297 case keyboard_virtual_key::_3:
return "3";
298 case keyboard_virtual_key::_4:
return "4";
299 case keyboard_virtual_key::_5:
return "5";
300 case keyboard_virtual_key::_6:
return "6";
301 case keyboard_virtual_key::_7:
return "7";
302 case keyboard_virtual_key::_8:
return "8";
303 case keyboard_virtual_key::_9:
return "9";
304 case keyboard_virtual_key::A:
return "a";
305 case keyboard_virtual_key::B:
return "b";
306 case keyboard_virtual_key::C:
return "c";
307 case keyboard_virtual_key::D:
return "d";
308 case keyboard_virtual_key::E:
return "e";
309 case keyboard_virtual_key::F:
return "f";
310 case keyboard_virtual_key::G:
return "g";
311 case keyboard_virtual_key::H:
return "h";
312 case keyboard_virtual_key::I:
return "i";
313 case keyboard_virtual_key::J:
return "j";
314 case keyboard_virtual_key::K:
return "k";
315 case keyboard_virtual_key::L:
return "l";
316 case keyboard_virtual_key::M:
return "m";
317 case keyboard_virtual_key::N:
return "n";
318 case keyboard_virtual_key::O:
return "o";
319 case keyboard_virtual_key::P:
return "p";
320 case keyboard_virtual_key::Q:
return "q";
321 case keyboard_virtual_key::R:
return "r";
322 case keyboard_virtual_key::S:
return "s";
323 case keyboard_virtual_key::T:
return "t";
324 case keyboard_virtual_key::U:
return "u";
325 case keyboard_virtual_key::V:
return "v";
326 case keyboard_virtual_key::W:
return "w";
327 case keyboard_virtual_key::X:
return "x";
328 case keyboard_virtual_key::Y:
return "y";
329 case keyboard_virtual_key::Z:
return "z";
330 case keyboard_virtual_key::Plus:
return "plus";
331 case keyboard_virtual_key::Minus:
return "-";
332 case keyboard_virtual_key::Star:
return "*";
333 case keyboard_virtual_key::Slash:
return "/";
334 case keyboard_virtual_key::Percent:
return "%";
335 case keyboard_virtual_key::Tilde:
return "~";
336 case keyboard_virtual_key::Ampersant:
return "&";
337 case keyboard_virtual_key::Pipe:
return "|";
338 case keyboard_virtual_key::Caret:
return "^";
339 case keyboard_virtual_key::Less:
return "<";
340 case keyboard_virtual_key::Equal:
return "=";
341 case keyboard_virtual_key::Greater:
return ">";
342 case keyboard_virtual_key::OpenParentheses:
return "(";
343 case keyboard_virtual_key::CloseParentheses:
return ")";
344 case keyboard_virtual_key::OpenBracket:
return "[";
345 case keyboard_virtual_key::CloseBracket:
return "]";
346 case keyboard_virtual_key::OpenBrace:
return "{";
347 case keyboard_virtual_key::CloseBrace:
return "}";
348 case keyboard_virtual_key::Backslash:
return "backslash";
349 case keyboard_virtual_key::Period:
return ".";
350 case keyboard_virtual_key::Comma:
return ",";
351 case keyboard_virtual_key::Colon:
return ":";
352 case keyboard_virtual_key::SemiColon:
return ";";
353 case keyboard_virtual_key::Bang:
return "!";
354 case keyboard_virtual_key::Question:
return "?";
355 case keyboard_virtual_key::Space:
return "space";
356 case keyboard_virtual_key::Tab:
return "tab";
357 case keyboard_virtual_key::Enter:
return "enter";
358 case keyboard_virtual_key::Backtick:
return "`";
359 case keyboard_virtual_key::Quote:
return "quote";
360 case keyboard_virtual_key::DoubleQuote:
return "dquote";
361 case keyboard_virtual_key::At:
return "@";
362 case keyboard_virtual_key::Hash:
return "#";
363 case keyboard_virtual_key::Dollar:
return "$";
364 case keyboard_virtual_key::Underscore:
return "_";
365 case keyboard_virtual_key::Left:
return "left";
366 case keyboard_virtual_key::Right:
return "right";
367 case keyboard_virtual_key::Up:
return "up";
368 case keyboard_virtual_key::Down:
return "down";
369 case keyboard_virtual_key::PageUp:
return "pageup";
370 case keyboard_virtual_key::PageDown:
return "pagedown";
371 case keyboard_virtual_key::Home:
return "home";
372 case keyboard_virtual_key::End:
return "end";
373 case keyboard_virtual_key::Backspace:
return "backspace";
374 case keyboard_virtual_key::Insert:
return "insert";
375 case keyboard_virtual_key::Delete:
return "delete";
376 case keyboard_virtual_key::Clear:
return "clear";
377 case keyboard_virtual_key::Escape:
return "escape";
378 case keyboard_virtual_key::PrintScreen:
return "print";
379 case keyboard_virtual_key::PauseBreak:
return "pause";
380 case keyboard_virtual_key::Menu:
return "menu";
381 case keyboard_virtual_key::F1:
return "f1";
382 case keyboard_virtual_key::F2:
return "f2";
383 case keyboard_virtual_key::F3:
return "f3";
384 case keyboard_virtual_key::F4:
return "f4";
385 case keyboard_virtual_key::F5:
return "f5";
386 case keyboard_virtual_key::F6:
return "f6";
387 case keyboard_virtual_key::F7:
return "f7";
388 case keyboard_virtual_key::F8:
return "f8";
389 case keyboard_virtual_key::F9:
return "f9";
390 case keyboard_virtual_key::F10:
return "f10";
391 case keyboard_virtual_key::F11:
return "f11";
392 case keyboard_virtual_key::F12:
return "f12";
393 case keyboard_virtual_key::F13:
return "f13";
394 case keyboard_virtual_key::F14:
return "f14";
395 case keyboard_virtual_key::F15:
return "f15";
396 case keyboard_virtual_key::F16:
return "f16";
397 case keyboard_virtual_key::F17:
return "f17";
398 case keyboard_virtual_key::F18:
return "f18";
399 case keyboard_virtual_key::F19:
return "f19";
400 case keyboard_virtual_key::F20:
return "f20";
401 case keyboard_virtual_key::F21:
return "f21";
402 case keyboard_virtual_key::F22:
return "f22";
403 case keyboard_virtual_key::F23:
return "f23";
404 case keyboard_virtual_key::F24:
return "f24";
405 case keyboard_virtual_key::MediaNextTrack:
return "media-next";
406 case keyboard_virtual_key::MediaPrevTrack:
return "media-prev";
407 case keyboard_virtual_key::MediaStop:
return "media-stop";
408 case keyboard_virtual_key::MediaPlayPause:
return "media-play";
409 case keyboard_virtual_key::BrowserBack:
return "browser-back";
410 case keyboard_virtual_key::BrowserForward:
return "browser-forward";
411 case keyboard_virtual_key::BrowserRefresh:
return "browser-refresh";
412 case keyboard_virtual_key::BrowserStop:
return "browser-stop";
413 case keyboard_virtual_key::BrowserSearch:
return "browser-search";
414 case keyboard_virtual_key::BrowserFavorites:
return "browser-favourite";
415 case keyboard_virtual_key::BrowserHome:
return "browser-home";
416 case keyboard_virtual_key::VolumeMute:
return "volume-mute";
417 case keyboard_virtual_key::VolumeUp:
return "volume-up";
418 case keyboard_virtual_key::VolumeDown:
return "volume-down";
419 default: hi_no_default();
443template<
typename CharT>
444struct std::formatter<hi::keyboard_virtual_key, CharT> : std::formatter<char const *, CharT> {
445 auto format(hi::keyboard_virtual_key
const &t,
auto &fc)
447 return std::formatter<char const *, CharT>::format(hi::to_const_string(t), fc);
This file includes required definitions.
#define hilet
Invariant should be the default for variables.
Definition required.hpp:23