functions.c 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. // Copyright 2022 David Kristoffersen (@davidkristoffersen)
  2. // SPDX-License-Identifier: GPL-3.0-or-later
  3. #include "functions.h"
  4. #ifndef NO_SPECIAL_SHIFT
  5. // Code set to swap struct
  6. typedef struct code_set {
  7. uint16_t pre;
  8. uint16_t post;
  9. } code_set_t;
  10. // Shift codes conversion struct
  11. typedef struct shift_code {
  12. int lang;
  13. int size;
  14. code_set_t* codes;
  15. } shift_code_t;
  16. #ifdef LAYER_NO
  17. code_set_t NO_SHIFT_CODES [] = {
  18. {NO_QUOT, NO_DQUO},
  19. {NO_BSLS, NO_PIPE},
  20. };
  21. #endif
  22. code_set_t EN_SHIFT_CODES [] = {
  23. {KC_COMM, KC_SCLN},
  24. {KC_DOT, KC_COLN},
  25. };
  26. // Array of shift code conversions
  27. const shift_code_t SHIFT_CODES [] = {
  28. #ifdef LAYER_NO
  29. {.lang = LAYER_NO,
  30. .size = ARRAY_SIZE(NO_SHIFT_CODES),
  31. .codes = NO_SHIFT_CODES},
  32. #endif
  33. {.lang = LAYER_EN,
  34. .size = ARRAY_SIZE(EN_SHIFT_CODES),
  35. .codes = EN_SHIFT_CODES},
  36. };
  37. const int SHIFT_CODES_SIZE = ARRAY_SIZE(SHIFT_CODES);
  38. #endif
  39. #ifdef LAYER_NO
  40. // Array of English to Norwegian code translations
  41. const code_set_t EN2NO_CODES [] = {
  42. {KC_QUOT, NO_QUOT},
  43. {KC_MINS, NO_MINS},
  44. {KC_BSLS, NO_BSLS},
  45. {KC_LBRC, NO_LBRC},
  46. {KC_LCBR, NO_LCBR},
  47. {KC_LPRN, NO_LPRN},
  48. {KC_LT, NO_LESS},
  49. {KC_GT, NO_GRTR},
  50. {KC_RPRN, NO_RPRN},
  51. {KC_RCBR, NO_RCBR},
  52. {KC_RBRC, NO_RBRC},
  53. {KC_AMPR, NO_AMPR},
  54. {KC_EQL, NO_EQL},
  55. {KC_PLUS, NO_PLUS},
  56. {KC_ASTR, NO_ASTR},
  57. {KC_SLSH, NO_SLSH},
  58. {KC_TILD, NO_TILD},
  59. {KC_AE, NO_AE},
  60. {KC_OE, NO_OE},
  61. {KC_AA, NO_AA},
  62. {KC_QUES, NO_QUES},
  63. {KC_AT, NO_AT},
  64. {KC_CIRC, NO_CIRC},
  65. {KC_DLR, NO_DLR},
  66. {KC_GRV, NO_GRV}
  67. };
  68. const int EN2NO_CODES_SIZE = ARRAY_SIZE(EN2NO_CODES);
  69. #endif
  70. // Check if layer is an active default layer
  71. bool is_default_on(int layer) {
  72. return layer == LAYER_DEFAULT
  73. ? true
  74. : layer_state_cmp(default_layer_state, layer);
  75. }
  76. #ifndef NO_SPECIAL_SHIFT
  77. // Get special shifted code
  78. uint16_t get_special_shifted_code(uint16_t keycode) {
  79. for (int i = 0; i < SHIFT_CODES_SIZE; i++) {
  80. if (IS_DEFAULT_OFF(SHIFT_CODES[i].lang)) continue;
  81. for (int j = 0; j < SHIFT_CODES[i].size; j++) {
  82. if (keycode == SHIFT_CODES[i].codes[j].pre)
  83. return SHIFT_CODES[i].codes[j].post;
  84. }
  85. }
  86. return keycode;
  87. }
  88. #endif
  89. #ifdef LAYER_NO
  90. // Get language specific code
  91. uint16_t get_norwegian_code(uint16_t keycode) {
  92. if (IS_DEFAULT_ON(LAYER_NO)) {
  93. for (int i = 0; i < EN2NO_CODES_SIZE; i++) {
  94. if (keycode == EN2NO_CODES[i].pre) {
  95. return EN2NO_CODES[i].post;
  96. }
  97. }
  98. }
  99. return keycode;
  100. }
  101. #endif