diff --git a/modules/utils/win-kblayout.js b/modules/utils/win-kblayout.js new file mode 100644 index 0000000..cfd3970 --- /dev/null +++ b/modules/utils/win-kblayout.js @@ -0,0 +1,93 @@ +/* +Copyright 2020 Intel Corporation + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +var table = require('fs').readFileSync(process.argv[0].split('\\win-kblayout.js').join('\\win-kblayout_table.txt')); +var lines = table.toString().split('\r\n'); + +var check = {}; +var buffer = Buffer.alloc(8); + +var str = ' switch(((int64_t*)val)[0])\r\n'; +str += ' {\r\n'; + +for (var i = 0; i < lines.length; ++i) +{ + var code = lines[i].split(' ')[0]; + var text = lines[i].substring(lines[i].indexOf(' ')).split(',')[0].trim(); + if (text.length < 8) + { + buffer.fill(0); + Buffer.from(text).copy(buffer); + var n = require('bignum').fromBuffer(buffer, { endian: 'little' }); + str += (' case ' + n.toString() + ': // ' + text + '\r\n'); + str += (' ret = "' + code + '";\r\n'); + str += (' break;\r\n'); + } +} + +var tst = {}; +for (var i = 0; i < lines.length; ++i) +{ + var code = lines[i].split(' ')[0]; + var text = lines[i].substring(lines[i].indexOf(' ')).split(',')[0].trim(); + if (text.length >= 8) + { + if (tst[text.substring(0, 8)] == null) { tst[text.substring(0, 8)] = []; } + + buffer.fill(0); + Buffer.from(text.substring(0,8)).copy(buffer); + var primary = require('bignum').fromBuffer(buffer, { endian: 'little' }).toString(); + buffer.fill(0); + Buffer.from(text.substring(8)).copy(buffer); + var secondary = require('bignum').fromBuffer(buffer, { endian: 'little' }).toString(); + + tst[text.substring(0, 8)].push({ code: code, text: text, primary: primary, secondary: secondary }); + } +} + +for (var i in tst) +{ + if(tst[i].length == 1) + { + var val = tst[i].pop(); + str += (' case ' + val.primary + ': // ' + val.text + '\r\n'); + str += (' ret = "' + val.code + '";\r\n'); + str += (' break;\r\n'); + } + else + { + var top = tst[i].peek(); + str += (' case ' + top.primary + ':\r\n'); + str += (' switch(((int64_t*)val)[1])\r\n'); + str += (' {\r\n'); + while (tst[i].length > 0) + { + top = tst[i].pop(); + str += (' case ' + top.secondary + ': // ' + top.text + '\r\n'); + str += (' ret = "' + top.code + '";\r\n'); + str += (' break;\r\n'); + } + str += (' }\r\n'); + str += (' break;\r\n'); + } +} + +str += ' }\r\n'; + +console.log('Value saved to clipboard...'); +require('clipboard')(str); +process.exit(); + diff --git a/modules/utils/win-kblayout_table.txt b/modules/utils/win-kblayout_table.txt new file mode 100644 index 0000000..0bd14c9 --- /dev/null +++ b/modules/utils/win-kblayout_table.txt @@ -0,0 +1,311 @@ +00000401 ar-SA +00000402 bg-BG +00000403 ca-ES +00000404 zh-TW +00000405 cs-CZ +00000406 da-DK +00000407 de-DE +00000408 el-GR +00000409 en-US +0000040A es-ES_tradnl +0000040B fi-FI +0000040C fr-FR +0000040D he-IL +0000040E hu-HU +0000040F is-IS +00000410 it-IT +00000411 ja-JP +00000412 ko-KR +00000413 nl-NL +00000414 nb-NO +00000415 pl-PL +00000416 pt-BR +00000417 rm-CH +00000418 ro-RO +00000419 ru-RU +0000041A hr-HR +0000041B sk-SK +0000041C sq-AL +0000041D sv-SE +0000041E th-TH +0000041F tr-TR +00000420 ur-PK +00000421 id-ID +00000422 uk-UA +00000423 be-BY +00000424 sl-SI +00000425 et-EE +00000426 lv-LV +00000427 lt-LT +00000428 tg-Cyrl-TJ +00000429 fa-IR +0000042A vi-VN +0000042B hy-AM +0000042C az-Latn-AZ +0000042D eu-ES +0000042E hsb-DE +0000042F mk-MK +00000430 st-ZA +00000431 ts-ZA +00000432 tn-ZA +00000433 ve-ZA +00000434 xh-ZA +00000435 zu-ZA +00000436 af-ZA +00000437 ka-GE +00000438 fo-FO +00000439 hi-IN +0000043A mt-MT +0000043B se-NO +0000043D yi-Hebr, reserved +0000043E ms-MY +0000043F kk-KZ +00000440 ky-KG +00000441 sw-KE +00000442 tk-TM +00000443 uz-Latn-UZ +00000444 tt-RU +00000445 bn-IN +00000446 pa-IN +00000447 gu-IN +00000448 or-IN +00000449 ta-IN +0000044A te-IN +0000044B kn-IN +0000044C ml-IN +0000044D as-IN +0000044E mr-IN +0000044F sa-IN +00000450 mn-MN +00000451 bo-CN +00000452 cy-GB +00000453 km-KH +00000454 lo-LA +00000455 my-MM +00000456 gl-ES +00000457 kok-IN +00000458 mni-IN, reserved +00000459 sd-Deva-IN, reserved +0000045A syr-SY +0000045B si-LK +0000045C chr-Cher-US +0000045D iu-Cans-CA +0000045E am-ET +0000045F tzm-Arab-MA, reserved +00000460 ks-Arab +00000461 ne-NP +00000462 fy-NL +00000463 ps-AF +00000464 fil-PH +00000465 dv-MV +00000466 bin-NG, reserved +00000467 fuv-NG, reserved +00000468 ha-Latn-NG +00000469 ibb-NG, reserved +0000046A yo-NG +0000046B quz-BO +0000046C nso-ZA +0000046D ba-RU +0000046E lb-LU +0000046F kl-GL +00000470 ig-NG +00000471 kr-NG, reserved +00000472 om-ET +00000473 ti-ET +00000474 gn-PY +00000475 haw-US +00000476 la-Latn, reserved +00000477 so-SO +00000478 ii-CN +00000479 pap-029, reserved +0000047A arn-CL +0000047C moh-CA +0000047E br-FR +00000480 ug-CN +00000481 mi-NZ +00000482 oc-FR +00000483 co-FR +00000484 gsw-FR +00000485 sah-RU +00000486 qut-GT +00000487 rw-RW +00000488 wo-SN +0000048C prs-AF +0000048D plt-MG, reserved +0000048E zh-yue-HK, reserved +0000048F tdd-Tale-CN, reserved +00000490 khb-Talu-CN, reserved +00000491 gd-GB +00000492 ku-Arab-IQ +00000493 quc-CO, reserved +00000501 qps-ploc +000005FE qps-ploca +00000801 ar-IQ +00000803 ca-ES-valencia +00000804 zh-CN +00000807 de-CH +00000809 en-GB +0000080A es-MX +0000080C fr-BE +00000810 it-CH +00000811 ja-Ploc-JP, reserved +00000813 nl-BE +00000814 nn-NO +00000816 pt-PT +00000818 ro-MD +00000819 ru-MD +0000081A sr-Latn-CS +0000081D sv-FI +00000820 ur-IN +0000082C az-Cyrl-AZ +0000082E dsb-DE +00000832 tn-BW +0000083B se-SE +0000083C ga-IE +0000083E ms-BN +00000843 uz-Cyrl-UZ +00000845 bn-BD +00000846 pa-Arab-PK +00000849 ta-LK +00000850 mn-Mong-CN +00000851 bo-BT, reserved +00000859 sd-Arab-PK +0000085D iu-Latn-CA +0000085F tzm-Latn-DZ +00000860 ks-Deva, reserved +00000861 ne-IN +00000867 ff-Latn-SN +0000086B quz-EC +00000873 ti-ER +000009FF qps-plocm +00000C01 ar-EG +00000C04 zh-HK +00000C07 de-AT +00000C09 en-AU +00000C0A es-ES +00000C0C fr-CA +00000C1A sr-Cyrl-CS +00000C3B se-FI +00000C50 mn-Mong-MN +00000C51 dz-BT +00000C5F tmz-MA, reserved +00000C6b quz-PE +00001001 ar-LY +00001004 zh-SG +00001007 de-LU +00001009 en-CA +0000100A es-GT +0000100C fr-CH +0000101A hr-BA +0000103B smj-NO +0000105F tzm-Tfng-MA +00001401 ar-DZ +00001404 zh-MO +00001407 de-LI +00001409 en-NZ +0000140A es-CR +0000140C fr-LU +0000141A bs-Latn-BA +0000143B smj-SE +00001801 ar-MA +00001809 en-IE +0000180A es-PA +0000180C fr-MC +0000181A sr-Latn-BA +0000183B sma-NO +00001C01 ar-TN +00001C09 en-ZA +00001C0A es-DO +00001C1A sr-Cyrl-BA +00001C3B sma-SE +00002001 ar-OM +00002009 en-JM +0000200A es-VE +0000200C fr-RE +0000201A bs-Cyrl-BA +0000203B sms-FI +00002401 ar-YE +00002409 en-029 +0000240A es-CO +0000240C fr-CD +0000241A sr-Latn-RS +0000243B smn-FI +00002801 ar-SY +00002809 en-BZ +0000280A es-PE +0000280C fr-SN +0000281A sr-Cyrl-RS +00002C01 ar-JO +00002C09 en-TT +00002C0A es-AR +00002C0C fr-CM +00002C1A sr-Latn-ME +00003001 ar-LB +00003009 en-ZW +0000300A es-EC +0000300C fr-CI +0000301A sr-Cyrl-ME +00003401 ar-KW +00003409 en-PH +0000340A es-CL +0000340C fr-ML +00003801 ar-AE +00003809 en-ID, reserved +0000380A es-UY +0000380C fr-MA +00003c01 ar-BH +00003c09 en-HK +00003c0A es-PY +00003c0C fr-HT +00004001 ar-QA +00004009 en-IN +0000400A es-BO +00004401 ar-Ploc-SA, reserved +00004409 en-MY +0000440A es-SV +00004801 ar-145, reserved +00004809 en-SG +0000480A es-HN +00004C09 en-AE, reserved +00004C0A es-NI +00005009 en-BH, reserved +0000500A es-PR +00005409 en-EG, reserved +0000540A es-US +00005809 en-JO, reserved +0000580A es-419 +00005C09 en-KW, reserved +00005C0A es-CU +00006009 en-TR, reserved +00006409 en-YE, reserved +0000641A bs-Cyrl +0000681A bs-Latn +00006C1A sr-Cyrl +0000701A sr-Latn +0000703B smn +0000742C az-Cyrl +0000743B sms +00007804 zh +00007814 nn +0000781A bs +0000782C az-Latn +0000783B sma +00007843 uz-Cyrl +00007850 mn-Cyrl +0000785D iu-Cans +0000785F tzm-Tfng +00007C04 zh-Hant +00007C14 nb +00007C1A sr +00007C28 tg-Cyrl +00007C2E dsb +00007C3B smj +00007C43 uz-Latn +00007C46 pa-Arab +00007C50 mn-Mong +00007C59 sd-Arab +00007C5C chr-Cher +00007C5D iu-Latn +00007C5F tzm-Latn +00007C67 ff-Latn +00007C68 ha-Latn \ No newline at end of file