Skip to content

Commit

Permalink
generate all keymaps
Browse files Browse the repository at this point in the history
  • Loading branch information
nishio committed Jan 13, 2020
1 parent 0b898f8 commit cc7e2b1
Show file tree
Hide file tree
Showing 2 changed files with 116 additions and 44 deletions.
69 changes: 36 additions & 33 deletions Lacaille/AppDelegate.m
Expand Up @@ -1487,26 +1487,20 @@ static inline void fireTimer() {
[self_ timerFired:nil];
}

static inline NSData *getKeyDataForASCII_LTHUMB(CGKeyCode keycode){
unsigned char keymap[] = {0x5D, 0xFF, 0xFF, 0x2C, 0xFF, 0xFF, 0x38, 0x1B, 0xFF, 0x38, 0x1E, 0xFF, 0xFF, 0xFF, 0xFF, 0x38, 0x2A, 0xFF, 0x38, 0x2C, 0xFF, 0x38, 0x29, 0xFF, 0x1B, 0xFF, 0xFF, 0x1E, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x2A, 0xFF, 0xFF, 0x12, 0xFF, 0xFF, 0x13, 0xFF, 0xFF, 0x14, 0xFF, 0xFF, 0x15, 0xFF, 0xFF, 0x38, 0x5D, 0xFF, 0x17, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1C, 0xFF, 0xFF, 0x16, 0xFF, 0xFF, 0x1D, 0xFF, 0xFF, 0x1A, 0xFF, 0xFF, 0x19, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x31, 0xFF, 0xFF, 0x38, 0x1C, 0xFF, 0xFF, 0xFF, 0xFF, 0x38, 0x19, 0xFF, 0x38, 0x13, 0xFF, 0xFF, 0xFF, 0xFF, 0x5E, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x18, 0xFF, 0xFF, 0x38, 0x27, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x38, 0x14, 0xFF};
NSData *ret;
uint16_t index;
if(keycode < LAYOUT_KEY_COUNT - 2){
index = keycode;
}else if(keycode == kVK_JIS_Yen){
index = LAYOUT_KEY_COUNT - 2;
}else if(keycode == kVK_JIS_Underscore){
index = LAYOUT_KEY_COUNT - 1;
}else{
return [[NSData alloc] initWithBytes:(unsigned char[]){keycode} length:1];
}

ret = [[NSData alloc] initWithBytes: (keymap + index * 3) length:3];
return ret;
}
unsigned char keymap_ASCII_LTHUMB[] = {0x5D, 0xFF, 0xFF, 0x2C, 0xFF, 0xFF, 0x38, 0x1B, 0xFF, 0x38, 0x1E, 0xFF, 0xFF, 0xFF, 0xFF, 0x38, 0x2A, 0xFF, 0x38, 0x2C, 0xFF, 0x38, 0x29, 0xFF, 0x1B, 0xFF, 0xFF, 0x1E, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x2A, 0xFF, 0xFF, 0x12, 0xFF, 0xFF, 0x13, 0xFF, 0xFF, 0x14, 0xFF, 0xFF, 0x15, 0xFF, 0xFF, 0x38, 0x5D, 0xFF, 0x17, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1C, 0xFF, 0xFF, 0x16, 0xFF, 0xFF, 0x1D, 0xFF, 0xFF, 0x1A, 0xFF, 0xFF, 0x19, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x31, 0xFF, 0xFF, 0x38, 0x1C, 0xFF, 0xFF, 0xFF, 0xFF, 0x38, 0x19, 0xFF, 0x38, 0x13, 0xFF, 0xFF, 0xFF, 0xFF, 0x5E, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x18, 0xFF, 0xFF, 0x38, 0x27, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x38, 0x14, 0xFF};

unsigned char keymap_ASCII_RTHUMB[] = {0x38, 0x00, 0xFF, 0x38, 0x01, 0xFF, 0x38, 0x02, 0xFF, 0x38, 0x03, 0xFF, 0x5E, 0xFF, 0xFF, 0x38, 0x05, 0xFF, 0x38, 0x06, 0xFF, 0x38, 0x07, 0xFF, 0x38, 0x08, 0xFF, 0x38, 0x09, 0xFF, 0xFF, 0xFF, 0xFF, 0x38, 0x0B, 0xFF, 0x38, 0x0C, 0xFF, 0x38, 0x0D, 0xFF, 0x38, 0x0E, 0xFF, 0x38, 0x0F, 0xFF, 0x38, 0x16, 0xFF, 0x38, 0x11, 0xFF, 0x38, 0x12, 0xFF, 0x38, 0x13, 0xFF, 0x38, 0x14, 0xFF, 0x38, 0x15, 0xFF, 0xFF, 0xFF, 0xFF, 0x38, 0x17, 0xFF, 0x38, 0x1B, 0xFF, 0x38, 0x1C, 0xFF, 0x38, 0x16, 0xFF, 0x1D, 0xFF, 0xFF, 0x38, 0x1A, 0xFF, 0x38, 0x19, 0xFF, 0x38, 0x21, 0xFF, 0x38, 0x22, 0xFF, 0x38, 0x10, 0xFF, 0x38, 0x23, 0xFF, 0x38, 0x20, 0xFF, 0x38, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0x38, 0x28, 0xFF, 0x38, 0x04, 0xFF, 0x38, 0x29, 0xFF, 0x38, 0x26, 0xFF, 0x38, 0x25, 0xFF, 0x38, 0x27, 0xFF, 0x38, 0x2E, 0xFF, 0x2F, 0xFF, 0xFF, 0x38, 0x15, 0xFF, 0x38, 0x2D, 0xFF, 0x2B, 0xFF, 0xFF, 0x38, 0x18, 0xFF, 0x38, 0x2C, 0xFF};

static inline NSData *getKeyDataForASCII_RTHUMB(CGKeyCode keycode){
unsigned char keymap[] = {0x38, 0x00, 0xFF, 0x38, 0x01, 0xFF, 0x38, 0x02, 0xFF, 0x38, 0x03, 0xFF, 0x5E, 0xFF, 0xFF, 0x38, 0x05, 0xFF, 0x38, 0x06, 0xFF, 0x38, 0x07, 0xFF, 0x38, 0x08, 0xFF, 0x38, 0x09, 0xFF, 0xFF, 0xFF, 0xFF, 0x38, 0x0B, 0xFF, 0x38, 0x0C, 0xFF, 0x38, 0x0D, 0xFF, 0x38, 0x0E, 0xFF, 0x38, 0x0F, 0xFF, 0x38, 0x16, 0xFF, 0x38, 0x11, 0xFF, 0x38, 0x12, 0xFF, 0x38, 0x13, 0xFF, 0x38, 0x14, 0xFF, 0x38, 0x15, 0xFF, 0xFF, 0xFF, 0xFF, 0x38, 0x17, 0xFF, 0x38, 0x1B, 0xFF, 0x38, 0x1C, 0xFF, 0x38, 0x16, 0xFF, 0x1D, 0xFF, 0xFF, 0x38, 0x1A, 0xFF, 0x38, 0x19, 0xFF, 0x38, 0x21, 0xFF, 0x38, 0x22, 0xFF, 0x38, 0x10, 0xFF, 0x38, 0x23, 0xFF, 0x38, 0x20, 0xFF, 0x38, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0x38, 0x28, 0xFF, 0x38, 0x04, 0xFF, 0x38, 0x29, 0xFF, 0x38, 0x26, 0xFF, 0x38, 0x25, 0xFF, 0x38, 0x27, 0xFF, 0x38, 0x2E, 0xFF, 0x2F, 0xFF, 0xFF, 0x38, 0x15, 0xFF, 0x38, 0x2D, 0xFF, 0x2B, 0xFF, 0xFF, 0x38, 0x18, 0xFF, 0x38, 0x2C, 0xFF};
unsigned char keymap_ASCII_BASE[] = {0x00, 0xFF, 0xFF, 0x01, 0xFF, 0xFF, 0x02, 0xFF, 0xFF, 0x03, 0xFF, 0xFF, 0x1B, 0xFF, 0xFF, 0x05, 0xFF, 0xFF, 0x06, 0xFF, 0xFF, 0x07, 0xFF, 0xFF, 0x08, 0xFF, 0xFF, 0x09, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0B, 0xFF, 0xFF, 0x0C, 0xFF, 0xFF, 0x0D, 0xFF, 0xFF, 0x0E, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0x38, 0x12, 0xFF, 0x11, 0xFF, 0xFF, 0x12, 0xFF, 0xFF, 0x13, 0xFF, 0xFF, 0x14, 0xFF, 0xFF, 0x15, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x17, 0xFF, 0xFF, 0x1B, 0xFF, 0xFF, 0x1C, 0xFF, 0xFF, 0x16, 0xFF, 0xFF, 0x1D, 0xFF, 0xFF, 0x1A, 0xFF, 0xFF, 0x19, 0xFF, 0xFF, 0x21, 0xFF, 0xFF, 0x22, 0xFF, 0xFF, 0x10, 0xFF, 0xFF, 0x23, 0xFF, 0xFF, 0x20, 0xFF, 0xFF, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x28, 0xFF, 0xFF, 0x04, 0xFF, 0xFF, 0x29, 0xFF, 0xFF, 0x26, 0xFF, 0xFF, 0x25, 0xFF, 0xFF, 0x27, 0xFF, 0xFF, 0x2E, 0xFF, 0xFF, 0x2F, 0xFF, 0xFF, 0x21, 0xFF, 0xFF, 0x2D, 0xFF, 0xFF, 0x2B, 0xFF, 0xFF, 0x18, 0xFF, 0xFF, 0x2C, 0xFF, 0xFF};


unsigned char keymap_KANA_BASE[] = {0x20, 0xFF, 0xFF, 0x01, 0x04, 0x22, 0x11, 0x0E, 0xFF, 0x28, 0x0E, 0xFF, 0x2A, 0xFF, 0xFF, 0x01, 0x0E, 0xFF, 0x2D, 0x0E, 0xFF, 0x04, 0x22, 0xFF, 0x01, 0x20, 0xFF, 0x03, 0x20, 0xFF, 0xFF, 0xFF, 0xFF, 0x04, 0x0E, 0xFF, 0xFF, 0xFF, 0xFF, 0x28, 0x00, 0xFF, 0x11, 0x00, 0xFF, 0x28, 0x1F, 0xFF, 0x1E, 0xFF, 0xFF, 0x01, 0x00, 0xFF, 0x12, 0xFF, 0xFF, 0x13, 0xFF, 0xFF, 0x14, 0xFF, 0xFF, 0x15, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x17, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1C, 0xFF, 0xFF, 0x16, 0xFF, 0xFF, 0x1D, 0xFF, 0xFF, 0x1A, 0xFF, 0xFF, 0x19, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x28, 0x20, 0xFF, 0x0F, 0x00, 0xFF, 0x04, 0x1F, 0xFF, 0x08, 0x04, 0x22, 0x11, 0x01, 0x20, 0xFF, 0xFF, 0xFF, 0x28, 0x22, 0xFF, 0x04, 0x00, 0xFF, 0x2D, 0xFF, 0xFF, 0x11, 0x1F, 0xFF, 0x22, 0xFF, 0xFF, 0x27, 0xFF, 0xFF, 0x01, 0x1F, 0xFF, 0x2F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x2E, 0x0E, 0xFF, 0x2B, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x2C, 0xFF, 0xFF};

unsigned char keymap_KANA_LSHIFT[] = {0x0D, 0x1F, 0xFF, 0x00, 0xFF, 0xFF, 0x2D, 0x00, 0xFF, 0x07, 0x10, 0x20, 0xFF, 0xFF, 0xFF, 0x2E, 0x1F, 0xFF, 0x07, 0x20, 0xFF, 0x1B, 0xFF, 0xFF, 0x0F, 0x1F, 0xFF, 0x10, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x22, 0xFF, 0x07, 0x00, 0xFF, 0x0E, 0xFF, 0xFF, 0x0F, 0x22, 0xFF, 0x07, 0x10, 0x00, 0xFF, 0xFF, 0xFF, 0x0F, 0x0E, 0xFF, 0x38, 0x2C, 0xFF, 0x2C, 0xFF, 0xFF, 0x38, 0x18, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x05, 0x20, 0xFF, 0x23, 0x00, 0xFF, 0x0B, 0x1F, 0xFF, 0x02, 0x22, 0xFF, 0x02, 0x20, 0xFF, 0xFF, 0xFF, 0xFF, 0x05, 0x22, 0xFF, 0x0B, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x02, 0x1F, 0xFF, 0x23, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0x06, 0x1F, 0xFF, 0x23, 0x22, 0xFF, 0xFF, 0xFF, 0xFF, 0x23, 0x20, 0xFF, 0x23, 0x0E, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};

unsigned char keymap_KANA_RSHIFT[] = {0xFF, 0xFF, 0xFF, 0x26, 0x22, 0xFF, 0x02, 0x0E, 0xFF, 0x05, 0x0E, 0xFF, 0xFF, 0xFF, 0xFF, 0x06, 0x0E, 0xFF, 0xFF, 0xFF, 0xFF, 0x0B, 0x22, 0xFF, 0x06, 0x20, 0xFF, 0x0B, 0x20, 0xFF, 0xFF, 0xFF, 0xFF, 0x0B, 0x0E, 0xFF, 0xFF, 0xFF, 0xFF, 0x05, 0x00, 0xFF, 0x02, 0x00, 0xFF, 0x05, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0x06, 0x00, 0xFF, 0x38, 0x12, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x38, 0x1C, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x38, 0x19, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x20, 0xFF, 0x10, 0x1F, 0xFF, 0x07, 0x0E, 0xFF, 0x2D, 0x22, 0xFF, 0x2E, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x2D, 0x1F, 0xFF, 0x2E, 0x22, 0xFF, 0x07, 0x11, 0x20, 0x1F, 0xFF, 0xFF, 0x07, 0x10, 0x1F, 0xFF, 0xFF, 0xFF, 0x10, 0x20, 0xFF, 0x0D, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x2D, 0x20, 0xFF, 0x2E, 0x20, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x1F, 0xFF};

static inline NSData *getKeyDataForOya(CGKeyCode keycode, unsigned char oya) {
NSData *ret;
uint16_t index;
if(keycode < LAYOUT_KEY_COUNT - 2){
Expand All @@ -1518,25 +1512,34 @@ static inline void fireTimer() {
}else{
return [[NSData alloc] initWithBytes:(unsigned char[]){keycode} length:1];
}
unsigned char *keymap;

ret = [[NSData alloc] initWithBytes: (keymap + index * 3) length:3];
return ret;
}

static inline NSData *getKeyDataForOya(CGKeyCode keycode, unsigned char oya) {
NSData *ret;
if(oya == ASCII_L_THUMB){
ret = getKeyDataForASCII_LTHUMB(keycode);
keymap = keymap_ASCII_LTHUMB;
}else if(oya == ASCII_R_THUMB){
ret = getKeyDataForASCII_RTHUMB(keycode);
keymap = keymap_ASCII_RTHUMB;
}else if(oya == ASCII_NO_SHIFT){
keymap = keymap_ASCII_BASE;
}else if(oya == ASCII_OUTER_SHIFT){
// you can introduce another keymap
keymap = keymap_ASCII_RTHUMB;
}else if(oya == KANA_NO_SHIFT){
keymap = keymap_KANA_BASE;
}else if(oya == KANA_L_THUMB){
keymap = keymap_KANA_LSHIFT;
}else if(oya == KANA_R_THUMB){
keymap = keymap_KANA_RSHIFT;
}else if(oya == KANA_OUTER_SHIFT){
// you can introduce another keymap
keymap = keymap_ASCII_RTHUMB;
}else if(oya == WITH_MODIFIER){
// you can introduce another keymap
keymap = keymap_ASCII_BASE;
}else{
// original
ret = (
(keycode < LAYOUT_KEY_COUNT - 2) ? [(ViewDataModel *)prefLayout[keycode] getKeyData:oya] :
(keycode == kVK_JIS_Yen) ? [(ViewDataModel *)prefLayout[(LAYOUT_KEY_COUNT - 2)] getKeyData:oya] :
(keycode == kVK_JIS_Underscore) ? [(ViewDataModel *)prefLayout[(LAYOUT_KEY_COUNT - 1)] getKeyData:oya] :
[[NSData alloc] initWithBytes:(unsigned char[]){keycode} length:1]);
return [[NSData alloc] initWithBytes:(unsigned char[]){keycode} length:1];
}

ret = [[NSData alloc] initWithBytes: (keymap + index * 3) length:3];
debugOut(@"[getKeyDataForOya] Keycode=%d, oya=%d, ret=%@\n", keycode, oya, ret);
return ret;
}
Expand Down
91 changes: 80 additions & 11 deletions Lacaille/generate_keymap.py
Expand Up @@ -116,6 +116,8 @@ def strToKeyData(s):
"""
buf = bytearray([0xFF, 0xFF, 0xFF])
i = 0
if s in KANA_MAP:
s = KANA_MAP[s]
for c in s:
if c in REVERSE_SHIFT_MAP:
c = REVERSE_SHIFT_MAP[c]
Expand Down Expand Up @@ -160,19 +162,51 @@ def strToKeyData(s):
'A', 'S', 'D', 'F', 'G', '_', 'H', 'J', 'K', 'L', '+', '*',
'Z', 'X', 'C', 'V', 'B', '$', 'N', 'M', ',', '.', '?']

assert (sorted(FLAT_JIS_KEY_LAYOUT) ==
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
11, 12, 13, 14, 15, 16, 17, 18, 19,
20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
30, 31, 32, 33, 34, 35, 37, 38, 39,
40, 41, 42, 43, 44, 45, 46, 47, 93, 94])
keymap_for_KANA_BASE = [
'1', '2', '3', '4', '5', '', '6', '7', '8', '9', '0', '', '',
'', 'か', 'た', 'こ', 'さ', '「', 'ら', 'ち', 'く', 'つ', 'ほ', '',
'う', 'し', 'て', 'け', 'せ', '」', 'は', 'と', 'き', 'い', 'ん', ':',
'ね', 'ひ', 'す', 'ふ', 'へ', '', 'め', 'そ', '、', '。', '・']
keymap_for_KANA_LSHIFT = [
'?', '・', '〜', '', '', '', '', '', '', '', '', '', '',
'ぁ', 'え', 'り', 'ゃ', 'れ', '', 'ぱ', 'ぢ', 'ぐ', 'づ', 'ぼ', '',
'を', 'あ', 'な', 'ゅ', 'も', '', 'ば', 'ど', 'ぎ', 'ぽ', '', '',
'ぅ', 'ー', 'ろ', 'や', 'ぃ', '', 'ぷ', 'ぞ', 'ぺ', 'ぴ', '']
keymap_for_KANA_RSHIFT = [
'!', '', '', '', '', '', '', '', '(', ')', '', '', '',
'', 'が', 'だ', 'ご', 'ざ', '', 'よ', 'に', 'る', 'ま', 'ぇ', '',
'', 'じ', 'で', 'げ', 'ぜ', '', 'み', 'お', 'の', 'ょ', 'っ', '',
'', 'び', 'ず', 'ぶ', 'べ', '', 'ぬ', 'ゆ', 'む', 'わ', 'ぉ']

KANA = [
'、', '。', '「', '」', '〜', 'ぁ', 'あ', 'ぃ', 'い', 'ぅ', 'う', 'ぇ', 'え', 'ぉ', 'お',
'か', 'が', 'き', 'ぎ', 'く', 'ぐ', 'け', 'げ', 'こ', 'ご',
'さ', 'ざ', 'し', 'じ', 'す', 'ず', 'せ', 'ぜ', 'そ', 'ぞ',
'た', 'だ', 'ち', 'ぢ', 'っ', 'つ', 'づ', 'て', 'で', 'と', 'ど', 'な', 'に', 'ぬ', 'ね', 'の',
'は', 'ば', 'ぱ', 'ひ', 'び', 'ぴ', 'ふ', 'ぶ', 'ぷ', 'へ', 'べ', 'ぺ', 'ほ', 'ぼ', 'ぽ',
'ま', 'み', 'む', 'め', 'も', 'ゃ', 'や', 'ゅ', 'ゆ', 'ょ', 'よ',
'ら', 'り', 'る', 'れ', 'ろ', 'わ', 'を', 'ん',
'・', 'ー', '!', '(', ')', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', ':', '?']
ROMA = [
',', '.', '[', ']', '~', 'xa', 'a', 'xi', 'i', 'xu', 'u', 'xe', 'e', 'xo', 'o',
'ka', 'ga', 'ki', 'gi', 'ku', 'gu', 'ke', 'ge', 'ko', 'go',
'sa', 'za', 'shi', 'ji', 'su', 'zu', 'se', 'ze', 'so', 'zo',
'ta', 'da', 'chi', 'di', 'xtu', 'tsu', 'du', 'te', 'de', 'to', 'do', 'na', 'ni', 'nu', 'ne', 'no',
'ha', 'ba', 'pa', 'hi', 'bi', 'pi', 'fu', 'bu', 'pu', 'he', 'be', 'pe', 'ho', 'bo', 'po',
'ma', 'mi', 'mu', 'me', 'mo', 'xya', 'ya', 'xyu', 'yu', 'xyo', 'yo',
'ra', 'ri', 'ru', 're', 'ro', 'wa', 'wo', 'n',
'/', '-', '!', '(', ')',
'0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
':', '?']
KANA_MAP = dict(zip(KANA, ROMA))

LAYOUT_KEY_COUNT = 50

output = ["0xFF, 0xFF, 0xFF"] * LAYOUT_KEY_COUNT

def generate_objc(keymap, name="FOO"):
assert len(keymap) == len(original_keymap)

def generate_objc(keymap):
output = ["0xFF, 0xFF, 0xFF"] * LAYOUT_KEY_COUNT
if "\\" in keymap:
raise RuntimeError("use `¥` instead of `\\`")
if " " in keymap:
Expand All @@ -192,12 +226,47 @@ def generate_objc(keymap):

output[index] = newkey

print(", ".join(output))
output = ", ".join(output)
print(f"unsigned char keymap_{name}[] = {{{output}}};")


generate_objc(keymap_for_BASE, "ASCII_BASE")

generate_objc(keymap_for_LSHIFT, "ASCII_LSHIFT")

generate_objc(keymap_for_RSHIFT, "ASCII_RSHIFT")

generate_objc(keymap_for_KANA_BASE, "KANA_BASE")

generate_objc(keymap_for_KANA_LSHIFT, "KANA_LSHIFT")

generate_objc(keymap_for_KANA_RSHIFT, "KANA_RSHIFT")


def generate_keylayout(base, lshift, rshift):
def get(xs, i):
if xs[i]:
return xs[i]
return " "

def getTri(i):
return get(lshift, i) + get(rshift, i) + get(base, i)

row1 = [getTri(i) for i in range(13)]
row2 = [getTri(i) for i in range(13, 25)]
row3 = [getTri(i) for i in range(25, 37)]
row4 = [getTri(i) for i in range(37, 48)]
import json
print(json.dumps([row1, row2, row3, row4]))


generate_keylayout(keymap_for_BASE, keymap_for_LSHIFT, keymap_for_RSHIFT)

generate_objc(keymap_for_LSHIFT)

generate_objc(keymap_for_RSHIFT)
def keylayout_to_keymap(keylayout):
print([(x + " ")[2] for x in keylayout])
print([(x + " ")[0] for x in keylayout])
print([(x + " ")[1] for x in keylayout])


def test():
Expand Down

0 comments on commit cc7e2b1

Please sign in to comment.