From 4894240006352250f26027fb466e553c05002763 Mon Sep 17 00:00:00 2001 From: He4eT Date: Tue, 3 Aug 2021 11:52:59 +0500 Subject: [PATCH] Layout images generator --- Makefile | 12 +++ preview_generator/legends.js | 113 +++++++++++++++++++++++++ preview_generator/preview_generator.js | 30 +++++++ preview_generator/rows.js | 27 ++++++ 4 files changed, 182 insertions(+) create mode 100644 preview_generator/legends.js create mode 100644 preview_generator/preview_generator.js create mode 100644 preview_generator/rows.js diff --git a/Makefile b/Makefile index a3c5211..3fdf4bb 100644 --- a/Makefile +++ b/Makefile @@ -21,3 +21,15 @@ flash: @make keymap_copy @make qmk_flash @make keymap_clean + +preview_cmd = node \ + ./preview_generator/preview_generator.js \ + "${PWD}/keymap/keymap.c" + +preview: + @${preview_cmd} + +preview_and_copy: + @${preview_cmd} | xclip -sel clipboard + @echo 'Copied to the clipboard! Paste it in the "Raw data" tab:' + @echo 'http://www.keyboard-layout-editor.com/' diff --git a/preview_generator/legends.js b/preview_generator/legends.js new file mode 100644 index 0000000..46f0e68 --- /dev/null +++ b/preview_generator/legends.js @@ -0,0 +1,113 @@ +const legends = { + 'NO': '', + 'TRNS': 'ā–½', + + 'MO(1': 'FN1', + 'MO(2': 'Mouse\nmode', + + 'GRV': '~\n`', + '1': '!\n1', + '2': '@\n2', + '3': '#\n3', + '4': '$\n4', + '5': '%\n5', + '6': '^\n6', + '7': '&\n7', + '8': '*\n8', + '9': '(\n9', + '0': ')\n0', + + 'MINS': '_\nāˆ’', + 'EQL': '+\n=', + 'SLSH': '?\n/', + 'BSLS': '|\n\\', + 'LBRC': '{\n[', + 'RBRC': '}\n]', + 'SCLN': ':\n;', + 'QUOT': '"\n\'', + 'COMM': '<\n,', + 'DOT': '>\n.', + + 'GT': '>', + 'LT': '<', + 'LPRN': '(', + 'RPRN': ')', + 'LCBR': '{', + 'RCBR': '}', + 'PLUS': '+', + 'PMNS': 'āˆ’', + 'PAST': '*', + 'PSLS': '/', + 'PEQL': '=', + 'UNDS': '_', + + 'ESC': 'Esc', + 'ENT': 'Enter', + 'SPC': 'Space', + 'BSPC': 'Back\nSpace', + 'TAB': 'Tab', + + 'LCTRL': 'Ctrl', + 'RCTRL': 'Ctrl', + 'LALT': 'Alt', + 'RALT': 'Alt', + 'LSFT': 'Shift', + 'RSFT': 'Shift', + 'LGUI': 'OS', + 'RGUI': 'OS', + 'LCTL_T(ESC': 'Ctrl\nEsc', + 'RCTL_T(ESC': 'Ctrl\nEsc', + + 'HOME': 'Home', + 'INS': 'Insert', + 'DEL': 'Delete', + 'END': 'End', + 'PGDN': 'PgDn', + 'PGUP': 'PgUp', + 'PAUS': 'Pause', + 'PSCR': 'PrScr', + 'APP': 'Menu', + + 'LEFT': 'Left', + 'DOWN': 'Down', + 'RGHT': 'Right', + 'UP': 'Up', + + 'MUTE': 'Mute', + 'VOLD': 'Vol +', + 'VOLU': 'Vol āˆ’', + + 'ACL0': 'Slow', + 'ACL1': 'Usual', + 'ACL2': 'Fast', + 'BTN1': 'Click', + 'BTN2': 'Mouse\n2', + 'BTN3': 'Mouse\n3', + 'BTN4': 'Mouse\n4', + 'BTN5': 'Mouse\n5', + 'MS_D': 'Mouse\nDown', + 'MS_L': 'Mouse\nLeft', + 'MS_R': 'Mouse\nRight', + 'MS_U': 'Mouse\nUp', + 'WH_D': 'Wheel\ndown', + 'WH_U': 'Wheel\nup', +} + +const cleanKeys = keys => keys + .map(key => key + .replaceAll(')', '') + .trim()) + .filter(Boolean) + +const printLegends = keys => keys + .map(key => key.replace('KC_', '')) + .map(key => legends[key] ?? key) + .map(key => [{a: key.includes('\n') + ? 5 // 2 lines + : 3 // 1 line + }, key]) + +module.exports = { + cleanKeys, + printLegends +} diff --git a/preview_generator/preview_generator.js b/preview_generator/preview_generator.js new file mode 100644 index 0000000..d18d2c7 --- /dev/null +++ b/preview_generator/preview_generator.js @@ -0,0 +1,30 @@ +/** + * Convert the keymap.c file to the "Raw data" for + * http://www.keyboard-layout-editor.com/ + */ + +const fs = require('fs') + +const {buildRow} = require('./rows') +const {cleanKeys, printLegends} = require('./legends') + +const keymapFilePath = process.argv[2] +const fileContent = fs.readFileSync(keymapFilePath, 'utf8') + +const keymapToKLERawData = fileContent => + fileContent + .split('\n') + .map(row => row.split(',')) + .filter(key => key.length > 1) + .map(cleanKeys) + .map(printLegends) + .map(buildRow) + .map(JSON.stringify) + +const result = keymapToKLERawData(fileContent) +// .slice(0, 8) +// .slice(8, 16) +// .slice(16) + +console.log(result.join(',\n')) + diff --git a/preview_generator/rows.js b/preview_generator/rows.js new file mode 100644 index 0000000..cb41356 --- /dev/null +++ b/preview_generator/rows.js @@ -0,0 +1,27 @@ +const HALVES_GAP = 5 + +const row = (keys, start, gapOffset) => [ + {x: start}, + ...keys.slice(0, keys.length / 2), + {x: HALVES_GAP + gapOffset}, + ...keys.slice(keys.length / 2), +].flat() + +const row12 = keys => + row(keys, 0, 0) + +const row4 = (keys, rowIndex) => ({ + 4: row(keys, 2, 4), + 5: row(keys, 4, 0), + 6: row(keys, 6, -4), + 7: row(keys, 6, -4), +}[rowIndex % 8]) + +const buildRow = (keys, rowIndex) => ({ + 12: row12(keys), + 4: row4(keys, rowIndex) +}[keys.length] || ['Oh no...']) + +module.exports = { + buildRow +}