CharacterSet.h 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. /*
  2. * Copyright (c) 2021, The SerenityOS Developers.
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #pragma once
  7. #include <AK/Types.h>
  8. namespace VT {
  9. enum CharacterSet {
  10. Iso_8859_1,
  11. Null,
  12. UserDefined,
  13. VT100,
  14. };
  15. class CharacterSetTranslator {
  16. public:
  17. u32 translate_code_point(CharacterSet active_set, u32 code_point)
  18. {
  19. // Only translate 0x7F and lower
  20. if (code_point > 127)
  21. return code_point;
  22. // FIXME: implement other character sets
  23. if (active_set != CharacterSet::VT100)
  24. return code_point;
  25. // VT100 translation table - https://en.wikipedia.org/wiki/Box-drawing_character#Unix,_CP/M,_BBS
  26. switch (code_point) {
  27. case 0x6A:
  28. return 0x2518;
  29. case 0x6B:
  30. return 0x2510;
  31. case 0x6C:
  32. return 0x250C;
  33. case 0x6D:
  34. return 0x2514;
  35. case 0x6E:
  36. return 0x253C;
  37. case 0x71:
  38. return 0x2500;
  39. case 0x74:
  40. return 0x251C;
  41. case 0x75:
  42. return 0x2524;
  43. case 0x76:
  44. return 0x2534;
  45. case 0x77:
  46. return 0x252C;
  47. case 0x78:
  48. return 0x2502;
  49. }
  50. return code_point;
  51. }
  52. };
  53. }