// Copyright (c) Epic Games Tools
// Licensed under the MIT license (https://opensource.org/license/mit/)

////////////////////////////////
//~ rjf: Tables

@table(name, display_string, cfg_string)
OS_KeyTable:
{
  {Null                 "Invalid Key"            "null"                                }
  {Esc                  "Escape"                 "esc"                                 }
  {F1                   "F1"                     "f1"                                  }
  {F2                   "F2"                     "f2"                                  }
  {F3                   "F3"                     "f3"                                  }
  {F4                   "F4"                     "f4"                                  }
  {F5                   "F5"                     "f5"                                  }
  {F6                   "F6"                     "f6"                                  }
  {F7                   "F7"                     "f7"                                  }
  {F8                   "F8"                     "f8"                                  }
  {F9                   "F9"                     "f9"                                  }
  {F10                  "F10"                    "f10"                                 }
  {F11                  "F11"                    "f11"                                 }
  {F12                  "F12"                    "f12"                                 }
  {F13                  "F13"                    "f13"                                 }
  {F14                  "F14"                    "f14"                                 }
  {F15                  "F15"                    "f15"                                 }
  {F16                  "F16"                    "f16"                                 }
  {F17                  "F17"                    "f17"                                 }
  {F18                  "F18"                    "f18"                                 }
  {F19                  "F19"                    "f19"                                 }
  {F20                  "F20"                    "f20"                                 }
  {F21                  "F21"                    "f21"                                 }
  {F22                  "F22"                    "f22"                                 }
  {F23                  "F23"                    "f23"                                 }
  {F24                  "F24"                    "f24"                                 }
  {Tick                 "Tick"                   "tick"                                }
  {0                    "0"                      "0"                                   }
  {1                    "1"                      "1"                                   }
  {2                    "2"                      "2"                                   }
  {3                    "3"                      "3"                                   }
  {4                    "4"                      "4"                                   }
  {5                    "5"                      "5"                                   }
  {6                    "6"                      "6"                                   }
  {7                    "7"                      "7"                                   }
  {8                    "8"                      "8"                                   }
  {9                    "9"                      "9"                                   }
  {Minus                "Minus"                  "minus"                               }
  {Equal                "Equal"                  "equal"                               }
  {Backspace            "Backspace"              "backspace"                           }
  {Tab                  "Tab"                    "tab"                                 }
  {Q                    "Q"                      "q"                                   }
  {W                    "W"                      "w"                                   }
  {E                    "E"                      "e"                                   }
  {R                    "R"                      "r"                                   }
  {T                    "T"                      "t"                                   }
  {Y                    "Y"                      "y"                                   }
  {U                    "U"                      "u"                                   }
  {I                    "I"                      "i"                                   }
  {O                    "O"                      "o"                                   }
  {P                    "P"                      "p"                                   }
  {LeftBracket          "Left Bracket"           "left_bracket"                        }
  {RightBracket         "Right Bracket"          "right_bracket"                       }
  {BackSlash            "Back Slash"             "backslash"                           }
  {CapsLock             "Caps Lock"              "caps_lock"                           }
  {A                    "A"                      "a"                                   }
  {S                    "S"                      "s"                                   }
  {D                    "D"                      "d"                                   }
  {F                    "F"                      "f"                                   }
  {G                    "G"                      "g"                                   }
  {H                    "H"                      "h"                                   }
  {J                    "J"                      "j"                                   }
  {K                    "K"                      "k"                                   }
  {L                    "L"                      "l"                                   }
  {Semicolon            "Semicolon"              "semicolon"                           }
  {Quote                "Quote"                  "quote"                               }
  {Return               "Return"                 "return"                              }
  {Shift                "Shift"                  "shift"                               }
  {Z                    "Z"                      "z"                                   }
  {X                    "X"                      "x"                                   }
  {C                    "C"                      "c"                                   }
  {V                    "V"                      "v"                                   }
  {B                    "B"                      "b"                                   }
  {N                    "N"                      "n"                                   }
  {M                    "M"                      "m"                                   }
  {Comma                "Comma"                  "comma"                               }
  {Period               "Period"                 "period"                              }
  {Slash                "Slash"                  "slash"                               }
  {Ctrl                 "Ctrl"                   "ctrl"                                }
  {Alt                  "Alt"                    "alt"                                 }
  {Space                "Space"                  "space"                               }
  {Menu                 "Menu"                   "menu"                                }
  {ScrollLock           "Scroll Lock"            "scroll_lock"                         }
  {Pause                "Pause"                  "pause"                               }
  {Insert               "Insert"                 "insert"                              }
  {Home                 "Home"                   "home"                                }
  {PageUp               "Page Up"                "page_up"                             }
  {Delete               "Delete"                 "delete"                              }
  {End                  "End"                    "end"                                 }
  {PageDown             "Page Down"              "page_down"                           }
  {Up                   "Up"                     "up"                                  }
  {Left                 "Left"                   "left"                                }
  {Down                 "Down"                   "down"                                }
  {Right                "Right"                  "right"                               }
  {Ex0                  "Ex0"                    "ex0"                                 }
  {Ex1                  "Ex1"                    "ex1"                                 }
  {Ex2                  "Ex2"                    "ex2"                                 }
  {Ex3                  "Ex3"                    "ex3"                                 }
  {Ex4                  "Ex4"                    "ex4"                                 }
  {Ex5                  "Ex5"                    "ex5"                                 }
  {Ex6                  "Ex6"                    "ex6"                                 }
  {Ex7                  "Ex7"                    "ex7"                                 }
  {Ex8                  "Ex8"                    "ex8"                                 }
  {Ex9                  "Ex9"                    "ex9"                                 }
  {Ex10                 "Ex10"                   "ex10"                                }
  {Ex11                 "Ex11"                   "ex11"                                }
  {Ex12                 "Ex12"                   "ex12"                                }
  {Ex13                 "Ex13"                   "ex13"                                }
  {Ex14                 "Ex14"                   "ex14"                                }
  {Ex15                 "Ex15"                   "ex15"                                }
  {Ex16                 "Ex16"                   "ex16"                                }
  {Ex17                 "Ex17"                   "ex17"                                }
  {Ex18                 "Ex18"                   "ex18"                                }
  {Ex19                 "Ex19"                   "ex19"                                }
  {Ex20                 "Ex20"                   "ex20"                                }
  {Ex21                 "Ex21"                   "ex21"                                }
  {Ex22                 "Ex22"                   "ex22"                                }
  {Ex23                 "Ex23"                   "ex23"                                }
  {Ex24                 "Ex24"                   "ex24"                                }
  {Ex25                 "Ex25"                   "ex25"                                }
  {Ex26                 "Ex26"                   "ex26"                                }
  {Ex27                 "Ex27"                   "ex27"                                }
  {Ex28                 "Ex28"                   "ex28"                                }
  {Ex29                 "Ex29"                   "ex29"                                }
  {NumLock              "Num Lock"               "num_lock"                            }
  {NumSlash             "Numpad Slash"           "numpad_slash"                        }
  {NumStar              "Numpad Star"            "numpad_star"                         }
  {NumMinus             "Numpad Minus"           "numpad_minus"                        }
  {NumPlus              "Numpad Plus"            "numpad_plus"                         }
  {NumPeriod            "Numpad Period"          "numpad_period"                       }
  {Num0                 "Numpad 0"               "numpad_0"                            }
  {Num1                 "Numpad 1"               "numpad_1"                            }
  {Num2                 "Numpad 2"               "numpad_2"                            }
  {Num3                 "Numpad 3"               "numpad_3"                            }
  {Num4                 "Numpad 4"               "numpad_4"                            }
  {Num5                 "Numpad 5"               "numpad_5"                            }
  {Num6                 "Numpad 6"               "numpad_6"                            }
  {Num7                 "Numpad 7"               "numpad_7"                            }
  {Num8                 "Numpad 8"               "numpad_8"                            }
  {Num9                 "Numpad 9"               "numpad_9"                            }
  {LeftMouseButton      "Left Mouse Button"      "left_mouse"                          }
  {MiddleMouseButton    "Middle Mouse Button"    "middle_mouse"                        }
  {RightMouseButton     "Right Mouse Button"     "right_mouse"                         }
}

////////////////////////////////
//~ rjf: Generators

@enum OS_Key:
{
  @expand(OS_KeyTable a) `$(a.name)`,
  COUNT,
}

@data(String8) os_g_key_display_string_table:
{
  @expand(OS_KeyTable a) `str8_lit_comp("$(a.display_string)")`;
}

@data(String8) os_g_key_cfg_string_table:
{
  @expand(OS_KeyTable a) `str8_lit_comp("$(a.cfg_string)")`;
}
