mirror of
				https://github.com/mfulz/qmk_firmware.git
				synced 2025-11-04 07:12:33 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			112 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			112 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
// Copyright 2022 David Kristoffersen (@davidkristoffersen)
 | 
						|
// SPDX-License-Identifier: GPL-3.0-or-later
 | 
						|
 | 
						|
#include "functions.h"
 | 
						|
 | 
						|
#ifndef NO_SPECIAL_SHIFT
 | 
						|
// Code set to swap struct
 | 
						|
typedef struct code_set {
 | 
						|
    uint16_t pre;
 | 
						|
    uint16_t post;
 | 
						|
} code_set_t;
 | 
						|
 | 
						|
// Shift codes conversion struct
 | 
						|
typedef struct shift_code {
 | 
						|
    int lang;
 | 
						|
    int size;
 | 
						|
    code_set_t* codes;
 | 
						|
} shift_code_t;
 | 
						|
 | 
						|
#ifdef LAYER_NO
 | 
						|
code_set_t NO_SHIFT_CODES [] = {
 | 
						|
   {NO_QUOT, NO_DQUO},
 | 
						|
   {NO_BSLS, NO_PIPE},
 | 
						|
};
 | 
						|
#endif
 | 
						|
 | 
						|
code_set_t EN_SHIFT_CODES [] = {
 | 
						|
    {KC_COMM, KC_SCLN},
 | 
						|
    {KC_DOT, KC_COLN},
 | 
						|
};
 | 
						|
 | 
						|
// Array of shift code conversions
 | 
						|
const shift_code_t SHIFT_CODES [] = {
 | 
						|
#ifdef LAYER_NO
 | 
						|
    {.lang = LAYER_NO,
 | 
						|
     .size = ARR_LEN(NO_SHIFT_CODES),
 | 
						|
     .codes = NO_SHIFT_CODES},
 | 
						|
#endif
 | 
						|
    {.lang = LAYER_EN,
 | 
						|
     .size = ARR_LEN(EN_SHIFT_CODES),
 | 
						|
     .codes = EN_SHIFT_CODES},
 | 
						|
};
 | 
						|
const int SHIFT_CODES_SIZE = ARR_LEN(SHIFT_CODES);
 | 
						|
#endif
 | 
						|
 | 
						|
#ifdef LAYER_NO
 | 
						|
// Array of English to Norwegian code translations
 | 
						|
const code_set_t EN2NO_CODES [] = {
 | 
						|
    {KC_QUOT, NO_QUOT},
 | 
						|
    {KC_MINS, NO_MINS},
 | 
						|
    {KC_BSLS, NO_BSLS},
 | 
						|
    {KC_LBRC, NO_LBRC},
 | 
						|
    {KC_LCBR, NO_LCBR},
 | 
						|
    {KC_LPRN, NO_LPRN},
 | 
						|
    {KC_LT,   NO_LESS},
 | 
						|
    {KC_GT,   NO_GRTR},
 | 
						|
    {KC_RPRN, NO_RPRN},
 | 
						|
    {KC_RCBR, NO_RCBR},
 | 
						|
    {KC_RBRC, NO_RBRC},
 | 
						|
    {KC_AMPR, NO_AMPR},
 | 
						|
    {KC_EQL,  NO_EQL},
 | 
						|
    {KC_PLUS, NO_PLUS},
 | 
						|
    {KC_ASTR, NO_ASTR},
 | 
						|
    {KC_SLSH, NO_SLSH},
 | 
						|
    {KC_TILD, NO_TILD},
 | 
						|
    {KC_AE,   NO_AE},
 | 
						|
    {KC_OE,   NO_OE},
 | 
						|
    {KC_AA,   NO_AA},
 | 
						|
    {KC_QUES, NO_QUES},
 | 
						|
    {KC_AT,   NO_AT},
 | 
						|
    {KC_CIRC, NO_CIRC},
 | 
						|
    {KC_DLR,  NO_DLR},
 | 
						|
    {KC_GRV,  NO_GRV}
 | 
						|
};
 | 
						|
const int EN2NO_CODES_SIZE = ARR_LEN(EN2NO_CODES);
 | 
						|
#endif
 | 
						|
 | 
						|
// Check if layer is an active default layer
 | 
						|
bool is_default_on(int layer) {
 | 
						|
    return layer == LAYER_DEFAULT
 | 
						|
        ? true
 | 
						|
        : layer_state_cmp(default_layer_state, layer);
 | 
						|
}
 | 
						|
 | 
						|
#ifndef NO_SPECIAL_SHIFT
 | 
						|
// Get special shifted code
 | 
						|
uint16_t get_special_shifted_code(uint16_t keycode) {
 | 
						|
    for (int i = 0; i < SHIFT_CODES_SIZE; i++) {
 | 
						|
        if (IS_DEFAULT_OFF(SHIFT_CODES[i].lang)) continue;
 | 
						|
        for (int j = 0; j < SHIFT_CODES[i].size; j++) {
 | 
						|
            if (keycode == SHIFT_CODES[i].codes[j].pre)
 | 
						|
                return SHIFT_CODES[i].codes[j].post;
 | 
						|
        }
 | 
						|
    }
 | 
						|
    return keycode;
 | 
						|
}
 | 
						|
#endif
 | 
						|
 | 
						|
#ifdef LAYER_NO
 | 
						|
// Get language specific code
 | 
						|
uint16_t get_norwegian_code(uint16_t keycode) {
 | 
						|
    if (IS_DEFAULT_ON(LAYER_NO)) {
 | 
						|
        for (int i = 0; i < EN2NO_CODES_SIZE; i++) {
 | 
						|
            if (keycode == EN2NO_CODES[i].pre) {
 | 
						|
                return EN2NO_CODES[i].post;
 | 
						|
            }
 | 
						|
        }
 | 
						|
    }
 | 
						|
    return keycode;
 | 
						|
}
 | 
						|
#endif
 |