diff --git a/README.md b/README.md index fad16aa..413b16c 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,10 @@ # Keyboard Encoding Thingy -Are your text files to easy to read? Is plain-text to optimized for you? +Are your text files too easy to read? Is plain-text too optimized for you? -THEN THIS PROGRAM IS MADE FOR YOU!! +**THEN THIS PROGRAM IS MADE FOR YOU!!** -This Python program allows you to 'encode' and 'decode' text using various keyboard layouts. It supports multiple -layouts and can handle both individual text input and text files. +This Python program allows you to 'encode' and 'decode' text using various keyboard layouts. It supports multiple layouts and can handle both individual text input and text files. # Features @@ -16,53 +15,47 @@ layouts and can handle both individual text input and text files. # Examples -_Unless stated otherwise, QWERTY was used._ - -## Encode and Decode - -**in**: The quick brown fox jumps over the lazy dog.!? -**out**: 12x05 03x06 02x03 00x00 02x01 02x07 02x08 04x03 03x08 00x00 04x05 02x04 02x09 02x02 04x06 00x00 03x04 02x09 -04x02 00x00 03x07 02x07 04x07 02x10 03x02 00x00 02x09 04x04 02x03 02x04 00x00 02x05 03x06 02x03 00x00 03x09 03x01 04x01 -02x06 00x00 03x03 02x09 03x05 04x09 11x02 14x10 - -**in**: 04x06 02x03 00x02 02x03 04x08 00x00 02x03 04x06 02x05 02x04 02x03 02x10 02x09 00x03 02x05 04x08 00x00 14x01 -02x09 02x03 00x09 04x08 00x00 03x04 03x01 04x03 00x13 03x01 03x03 02x03 04x08 00x00 13x02 02x03 04x06 00x04 02x09 02x04 -04x08 00x00 03x06 03x01 00x02 04x03 00x0D 02x03 03x08 -**out**: née, entrepôt, Zoë, façade, Señor, háček +Unless stated otherwise, QWERTY was used. ## Switching layout -**in**: 13x03 02x08 03x03 00x00 02x06 02x09 02x07 00x00 03x08 04x06 02x09 02x02 00x00 ru 00x00 02x01 02x02 02x03 02x04 -02x05 02x06 00x00 qy 00x00 02x08 03x02 00x00 04x06 02x09 02x05 00x00 03x01 00x00 02x02 02x09 02x04 03x03 14x10 -**out**: Did you know ~jn~ йцукен ~qy~ is not a word? +in: The quick brown fox jumps over the lazy dog.!? +out: 12x05 03x06 02x03 00x00 02x01 02x07 02x08 04x03 03x08 00x00 04x05 02x04 02x09 02x02 04x06 00x00 03x04 02x09 04x02 00x00 03x07 02x07 04x07 02x10 03x02 00x00 02x09 04x04 02x03 02x04 00x00 02x05 03x06 02x03 00x00 03x09 03x01 04x01 02x06 00x00 03x03 02x09 03x05 04x09 11x02 14x10 -**in**: Did you know ~jn~ йцукен ~qy~ is not a word? -**out**: 13x03 02x08 03x03 00x00 02x06 02x09 02x07 00x00 03x08 04x06 02x09 02x02 00x00 ru 00x00 02x01 02x02 02x03 02x04 -02x05 02x06 00x00 qy 00x00 02x08 03x02 00x00 04x06 02x09 02x05 00x00 03x01 00x00 02x02 02x09 02x04 03x03 14x10 +... other examples omitted for brevity ... # Requirements * Python 3.x * layouts.json file containing keyboard layout definitions * special_layouts.json file containing special mappings +* Flask +* Usage # Usage ## Starting the Program -To start the program, run one of the following commands: +To install requirements: +``` sh +pip install -r requirements.txt +``` To start the program: - ``` sh python app.py ``` -## Main Menu +## Web Interface -_At the moment this is the only menu, but Main Menu sound better._ +The Flask-based web interface is available at http://127.0.0.1:5000/. Accessing this will allow you to interact with the encoding/decoding features through a graphical interface, including: -When running the program, you will be prompted to select a keyboard layout. Currently available options are: +* Selecting a keyboard layout +* Viewing selected layout +* Encoding or decoding text +* Adding custom layouts + +When running the program, you will be asked to select a keyboard layout. Available options include: * ay: AZERTY * ck: Colemak @@ -72,17 +65,6 @@ When running the program, you will be prompted to select a keyboard layout. Curr * qz: QWERTZ * wn: Workman -After selecting a layout, the main menu will provide the following options: - -1. encode -2. decode -3. switch layout -4. add layout -5. switch to GUI -6. Exit (My favorite) - -When either Encode or Decode is chosen you will be prompted if you want to encode/decode text or text from a file. - # Documentation ## Layouts @@ -92,19 +74,20 @@ each layout. ``` json "qy": { - "name": "QWERTY", - "lowercase": [ - ["`", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "-", "="], - ["q", "w", "e", "r", "t", "y", "u", "i", "o", "p", "[", "]", "\\"], - ["a", "s", "d", "f", "g", "h", "j", "k", "l", ";", "'", " "], - ["z", "x", "c", "v", "b", "n", "m", ",", ".", "/", " ", " "] + "name": "QWERTY", + "lowercase": [ + ["`", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "-", "="], + ["q", "w", "e", "r", "t", "y", "u", "i", "o", "p", "[", "]", "\\"], + ["a", "s", "d", "f", "g", "h", "j", "k", "l", ";", "'"], + ["z", "x", "c", "v", "b", "n", "m", ",", ".", "/"] + ], + "uppercase": [ + ["~", "!", "@", "#", "$", "%", "^", "&", "*", "(", ")", "_", "+"], + ["Q", "W", "E", "R", "T", "Y", "U", "I", "O", "P", "{", "}", "|"], + ["A", "S", "D", "F", "G", "H", "J", "K", "L", ":", "\"" ], - "uppercase": [ - ["~", "!", "@", "#", "$", "%", "^", "&", "*", "(", ")", "_", "+"], - ["Q", "W", "E", "R", "T", "Y", "U", "I", "O", "P", "{", "}", "|"], - ["A", "S", "D", "F", "G", "H", "J", "K", "L", ":", "\"", " "], - ["Z", "X", "C", "V", "B", "N", "M", "<", ">", "?", " ", " "] - ] + ["Z", "X", "C", "V", "B", "N", "M", "<", ">", "?"] + ] }, ``` @@ -122,20 +105,20 @@ Special characters can be found in special_mappings.json and are structured as s ``` json { - " ": "00x00", - "\n": "10x00", - "\t": "10x01", - "\r": "10x02", - "\b": "10x03", - "\f": "10x04", - "\u0300": "00x01", - "\u0301": "00x02", - "\u0302": "00x03", - "\u0303": "00x04", - "\u0304": "00x05", - "\u0305": "00x06", - - // And so on... + " ": "00x00", + "\n": "10x00", + "\t": "10x01", + "\r": "10x02", + "\b": "10x03", + "\f": "10x04", + "\u0300": "00x01", + "\u0301": "00x02", + "\u0302": "00x03", + "\u0303": "00x04", + "\u0304": "00x05", + "\u0305": "00x06", + + // And so on... } ``` @@ -155,8 +138,6 @@ Enter row 3 for lowercase: ["a", "s", "d", "f", "g", "h", "j", "k", "l", ";", "' Enter row 4 for lowercase: ["z", "x", "c", "v", "b", "n", "m", ",", ".", "/", " ", " "] Enter row 1 for uppercase: ["~", "!", "@", "#", "$", "%", "^", "&", "*", "(", ")", "_", "+"] Enter row 2 for uppercase: ["Q", "W", "E", "R", "T", "Y", "U", "I", "O", "P", "{", "}", "|"] -Enter row 3 for uppercase: ["A", "S", "D", "F", "G", "H", "J", "K", "L", ":", "\"", " "] -Enter row 4 for uppercase: ["Z", "X", "C", "V", "B", "N", "M", "<", ">", "?", " ", " "] +Enter row 3 for uppercase: ["A", "S", "D", "F", "G", "H", "J", "K", "L", ":", "\""] +Enter row 4 for uppercase: ["Z", "X", "C", "V", "B", "N", "M", "<", ">", "?"] ``` - -To get to the add_layout() function, simply type 'add layout' when prompted for a layout or choose 4 in the main menu. \ No newline at end of file diff --git a/layouts.json b/layouts.json index 0d797fb..5ae5d6e 100644 --- a/layouts.json +++ b/layouts.json @@ -1,948 +1,127 @@ { - "ay": { - "name": "AZERTY", - "lowercase": [ - [ - "\\u00b2", - "&", - "\\u00e9", - "\"", - "'", - "(", - "-", - "\\u00e8", - "_", - "\\u00e7", - "\\u00e0", - ")", - "=" - ], - [ - "a", - "z", - "e", - "r", - "t", - "y", - "u", - "i", - "o", - "p", - "^", - "$", - "\\" - ], - [ - "q", - "s", - "d", - "f", - "g", - "h", - "j", - "k", - "l", - "m", - "\\u00f9", - "*" - ], - [ - "w", - "x", - "c", - "v", - "b", - "n", - ",", - ";", - ":", - "!" - ] - ], - "uppercase": [ - [ - "\\u00b3", - "1", - "2", - "3", - "4", - "5", - "6", - "7", - "8", - "9", - "0", - "\\u00b0", - "+" - ], - [ - "A", - "Z", - "E", - "R", - "T", - "Y", - "U", - "I", - "O", - "P", - "\\u00a8", - "\\u00a3", - "\\u00b5" - ], - [ - "Q", - "S", - "D", - "F", - "G", - "H", - "J", - "K", - "L", - "M", - "%", - "\\u00a4" - ], - [ - "W", - "X", - "C", - "V", - "B", - "N", - "?", - ".", - "/", - "\\u00a7" - ] - ] - }, - "ck": { - "name": "Colemak", - "lowercase": [ - [ - "`", - "1", - "2", - "3", - "4", - "5", - "6", - "7", - "8", - "9", - "0", - "-", - "=" - ], - [ - "q", - "w", - "f", - "p", - "g", - "j", - "l", - "u", - "y", - ";", - "[", - "]", - "\\" - ], - [ - "a", - "r", - "s", - "t", - "d", - "h", - "n", - "e", - "i", - "o", - "'" - ], - [ - "z", - "x", - "c", - "v", - "b", - "k", - "m", - ",", - ".", - "/" - ] - ], - "uppercase": [ - [ - "~", - "!", - "@", - "#", - "$", - "%", - "^", - "&", - "*", - "(", - ")", - "_", - "+" - ], - [ - "Q", - "W", - "F", - "P", - "G", - "J", - "L", - "U", - "Y", - ":", - "{", - "}", - "|" - ], - [ - "A", - "R", - "S", - "T", - "D", - "H", - "N", - "E", - "I", - "O", - "\"" - ], - [ - "Z", - "X", - "C", - "V", - "B", - "K", - "M", - "<", - ">", - "?" - ] - ] - }, - "dk": { - "name": "Dvorak", - "lowercase": [ - [ - "`", - "1", - "2", - "3", - "4", - "5", - "6", - "7", - "8", - "9", - "0", - "[", - "]" - ], - [ - "'", - ",", - ".", - "p", - "y", - "f", - "g", - "c", - "r", - "l", - "/", - "=", - "\\" - ], - [ - "a", - "o", - "e", - "u", - "i", - "d", - "h", - "t", - "n", - "s", - "-" - ], - [ - ";", - "q", - "j", - "k", - "x", - "b", - "m", - "w", - "v", - "z" - ] - ], - "uppercase": [ - [ - "~", - "!", - "@", - "#", - "$", - "%", - "^", - "&", - "*", - "(", - ")", - "{", - "}" - ], - [ - "\"", - "<", - ">", - "P", - "Y", - "F", - "G", - "C", - "R", - "L", - "?", - "+", - "|" - ], - [ - "A", - "O", - "E", - "U", - "I", - "D", - "H", - "T", - "N", - "S", - "_" - ], - [ - ":", - "Q", - "J", - "K", - "X", - "B", - "M", - "W", - "V", - "Z" - ] - ] - }, - "hr": { - "name": "HCESAR", - "lowercase": [ - [ - "\\", - "1", - "2", - "3", - "4", - "5", - "6", - "7", - "8", - "9", - "0", - "'", - "=" - ], - [ - "c", - "h", - "e", - "s", - "a", - "r", - "u", - "i", - "d", - "o", - "p", - "\\u00b4", - "~" - ], - [ - "~", - "q", - "j", - "k", - "x", - "b", - "m", - "w", - "v", - "z", - "\\u00e7", - "^" - ], - [ - "t", - "n", - "r", - "l", - "m", - "g", - "j", - "v", - "k", - "f", - ",", - "." - ] - ], - "uppercase": [ - [ - "|", - "!", - "\"", - "#", - "$", - "%", - "&", - "/", - "(", - ")", - "=", - "?", - "" - ], - [ - "C", - "H", - "E", - "S", - "A", - "R", - "U", - "I", - "D", - "O", - "P", - "`", - "^" - ], - [ - "^", - "Q", - "J", - "K", - "X", - "B", - "M", - "W", - "V", - "Z", - "\\u00c7", - "" - ], - [ - "T", - "N", - "R", - "L", - "M", - "G", - "J", - "V", - "K", - "F", - ";", - ":" - ] - ] - }, - "jn": { - "name": "JCUKEN", - "lowercase": [ - [ - "\\u0451", - "1", - "2", - "3", - "4", - "5", - "6", - "7", - "8", - "9", - "0", - "-", - "=" - ], - [ - "\\u0439", - "\\u0446", - "\\u0443", - "\\u043a", - "\\u0435", - "\\u043d", - "\\u0433", - "\\u0448", - "\\u0449", - "\\u0437", - "\\u0445", - "\\u044a", - "\\" - ], - [ - "\\u0444", - "\\u044b", - "\\u0432", - "\\u0430", - "\\u043f", - "\\u0440", - "\\u043e", - "\\u043b", - "\\u0434", - "\\u0436", - "\\u044d" - ], - [ - "\\u044f", - "\\u0447", - "\\u0441", - "\\u043c", - "\\u0438", - "\\u0442", - "\\u044c", - "\\u0431", - "\\u044e", - "." - ] - ], - "uppercase": [ - [ - "\\u0401", - "!", - "\"", - "\\u2116", - ";", - "%", - ":", - "?", - "*", - "(", - ")", - "_", - "+" - ], - [ - "\\u0419", - "\\u0426", - "\\u0423", - "\\u041a", - "\\u0415", - "\\u041d", - "\\u0413", - "\\u0428", - "\\u0429", - "\\u0417", - "\\u0425", - "\\u042a", - "/" - ], - [ - "\\u0424", - "\\u042b", - "\\u0412", - "\\u0410", - "\\u041f", - "\\u0420", - "\\u041e", - "\\u041b", - "\\u0414", - "\\u0416", - "\\u042d" - ], - [ - "\\u042f", - "\\u0427", - "\\u0421", - "\\u041c", - "\\u0418", - "\\u0422", - "\\u042c", - "\\u0411", - "\\u042e", - "," - ] - ] - }, - "qy": { - "name": "QWERTY", - "lowercase": [ - [ - "`", - "1", - "2", - "3", - "4", - "5", - "6", - "7", - "8", - "9", - "0", - "-", - "=" - ], - [ - "q", - "w", - "e", - "r", - "t", - "y", - "u", - "i", - "o", - "p", - "[", - "]", - "\\" - ], - [ - "a", - "s", - "d", - "f", - "g", - "h", - "j", - "k", - "l", - ";", - "'" - ], - [ - "z", - "x", - "c", - "v", - "b", - "n", - "m", - ",", - ".", - "/" - ] - ], - "uppercase": [ - [ - "~", - "!", - "@", - "#", - "$", - "%", - "^", - "&", - "*", - "(", - ")", - "_", - "+" - ], - [ - "Q", - "W", - "E", - "R", - "T", - "Y", - "U", - "I", - "O", - "P", - "{", - "}", - "|" - ], - [ - "A", - "S", - "D", - "F", - "G", - "H", - "J", - "K", - "L", - ":", - "\"" - ], - [ - "Z", - "X", - "C", - "V", - "B", - "N", - "M", - "<", - ">", - "?" - ] - ] - }, - "qz": { - "name": "QWERTZ", - "lowercase": [ - [ - "^", - "1", - "2", - "3", - "4", - "5", - "6", - "7", - "8", - "9", - "0", - "\\u00df", - "=" - ], - [ - "q", - "w", - "e", - "r", - "t", - "z", - "u", - "i", - "o", - "p", - "\\u00fc", - "+", - "\\" - ], - [ - "a", - "s", - "d", - "f", - "g", - "h", - "j", - "k", - "l", - "\\u00f6", - "\\u00e4", - "#" - ], - [ - "y", - "x", - "c", - "v", - "b", - "n", - "m", - ",", - ".", - "-" - ] - ], - "uppercase": [ - [ - "\\u00b0", - "!", - "\"", - "\\u00a7", - "$", - "%", - "&", - "/", - "(", - ")", - "=", - "?", - "`" - ], - [ - "Q", - "W", - "E", - "R", - "T", - "Z", - "U", - "I", - "O", - "P", - "\\u00dc", - "*", - "|" - ], - [ - "A", - "S", - "D", - "F", - "G", - "H", - "J", - "K", - "L", - "\\u00d6", - "\\u00c4", - "'" - ], - [ - "Y", - "X", - "C", - "V", - "B", - "N", - "M", - ";", - ":", - "_" - ] - ] - }, - "wn": { - "name": "Workman", - "lowercase": [ - [ - "`", - "1", - "2", - "3", - "4", - "5", - "6", - "7", - "8", - "9", - "0", - "-", - "=" - ], - [ - "q", - "d", - "r", - "w", - "b", - "j", - "f", - "u", - "p", - ";", - "[", - "]", - "\\" - ], - [ - "a", - "s", - "h", - "t", - "g", - "y", - "n", - "e", - "o", - "i", - "'" - ], - [ - "z", - "x", - "m", - "c", - "v", - "k", - "l", - ",", - ".", - "/" - ] - ], - "uppercase": [ - [ - "~", - "!", - "@", - "#", - "$", - "%", - "^", - "&", - "*", - "(", - ")", - "_", - "+" - ], - [ - "Q", - "D", - "R", - "W", - "B", - "J", - "F", - "U", - "P", - ":", - "{", - "}", - "|" - ], - [ - "A", - "S", - "H", - "T", - "G", - "Y", - "N", - "E", - "O", - "I", - "\"" - ], - [ - "Z", - "X", - "M", - "C", - "V", - "K", - "L", - "<", - ">", - "?" - ] - ] - } + "ay": { + "name": "AZERTY", + "lowercase": [ + ["\\u00b2", "&", "\\u00e9", "\"", "'", "(", "-", "\\u00e8", "_", "\\u00e7", "\\u00e0", ")", "="], + ["a", "z", "e", "r", "t", "y", "u", "i", "o", "p", "^", "$", "\\"], + ["q", "s", "d", "f", "g", "h", "j", "k", "l", "m", "\\u00f9", "*"], + ["w", "x", "c", "v", "b", "n", ",", ";", ":", "!"] + ], + "uppercase": [ + ["\\u00b3", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "\\u00b0", "+"], + ["A", "Z", "E", "R", "T", "Y", "U", "I", "O", "P", "\\u00a8", "\\u00a3", "\\u00b5"], + ["Q", "S", "D", "F", "G", "H", "J", "K", "L", "M", "%", "\\u00a4"], + ["W", "X", "C", "V", "B", "N", "?", ".", "/", "\\u00a7"] + ] + }, + "ck": { + "name": "Colemak", + "lowercase": [ + ["`", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "-", "="], + ["q", "w", "f", "p", "g", "j", "l", "u", "y", ";", "[", "]", "\\"], + ["a", "r", "s", "t", "d", "h", "n", "e", "i", "o", "'"], + ["z", "x", "c", "v", "b", "k", "m", ",", ".", "/"] + ], + "uppercase": [ + ["~", "!", "@", "#", "$", "%", "^", "&", "*", "(", ")", "_", "+"], + ["Q", "W", "F", "P", "G", "J", "L", "U", "Y", ":", "{", "}", "|"], + ["A", "R", "S", "T", "D", "H", "N", "E", "I", "O", "\"" + ], + ["Z", "X", "C", "V", "B", "K", "M", "<", ">", "?"] + ] + }, + "dk": { + "name": "Dvorak", + "lowercase": [ + ["`", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "[", "]"], + ["'", ",", ".", "p", "y", "f", "g", "c", "r", "l", "/", "=", "\\"], + ["a", "o", "e", "u", "i", "d", "h", "t", "n", "s", "-"], + [";", "q", "j", "k", "x", "b", "m", "w", "v", "z"] + ], + "uppercase": [ + ["~", "!", "@", "#", "$", "%", "^", "&", "*", "(", ")", "{", "}"], + ["\"", "<", ">", "P", "Y", "F", "G", "C", "R", "L", "?", "+", "|"], + ["A", "O", "E", "U", "I", "D", "H", "T", "N", "S", "_"], + [":", "Q", "J", "K", "X", "B", "M", "W", "V", "Z"] + ] + }, + "hr": { + "name": "HCESAR", + "lowercase": [ + ["\\", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "'", "="], + ["c", "h", "e", "s", "a", "r", "u", "i", "d", "o", "p", "\\u00b4", "~"], + ["~", "q", "j", "k", "x", "b", "m", "w", "v", "z", "\\u00e7", "^"], + ["t", "n", "r", "l", "m", "g", "j", "v", "k", "f", ",", "."] + ], + "uppercase": [ + ["|", "!", "\"", "#", "$", "%", "&", "/", "(", ")", "=", "?", "" + ], + ["C", "H", "E", "S", "A", "R", "U", "I", "D", "O", "P", "`", "^"], + ["^", "Q", "J", "K", "X", "B", "M", "W", "V", "Z", "\\u00c7", "" + ], + ["T", "N", "R", "L", "M", "G", "J", "V", "K", "F", ";", ":"] + ] + }, + "jn": { + "name": "JCUKEN", + "lowercase": [ + ["\\u0451", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "-", "="], + ["\\u0439", "\\u0446", "\\u0443", "\\u043a", "\\u0435", "\\u043d", "\\u0433", "\\u0448", "\\u0449", "\\u0437", "\\u0445", "\\u044a", "\\"], + ["\\u0444", "\\u044b", "\\u0432", "\\u0430", "\\u043f", "\\u0440", "\\u043e", "\\u043b", "\\u0434", "\\u0436", "\\u044d"], + ["\\u044f", "\\u0447", "\\u0441", "\\u043c", "\\u0438", "\\u0442", "\\u044c", "\\u0431", "\\u044e", "."] + ], + "uppercase": [ + ["\\u0401", "!", "\"", "\\u2116", ";", "%", ":", "?", "*", "(", ")", "_", "+"], + ["\\u0419", "\\u0426", "\\u0423", "\\u041a", "\\u0415", "\\u041d", "\\u0413", "\\u0428", "\\u0429", "\\u0417", "\\u0425", "\\u042a", "/"], + ["\\u0424", "\\u042b", "\\u0412", "\\u0410", "\\u041f", "\\u0420", "\\u041e", "\\u041b", "\\u0414", "\\u0416", "\\u042d"], + ["\\u042f", "\\u0427", "\\u0421", "\\u041c", "\\u0418", "\\u0422", "\\u042c", "\\u0411", "\\u042e", ","] + ] + }, + "qy": { + "name": "QWERTY", + "lowercase": [ + ["`", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "-", "="], + ["q", "w", "e", "r", "t", "y", "u", "i", "o", "p", "[", "]", "\\"], + ["a", "s", "d", "f", "g", "h", "j", "k", "l", ";", "'"], + ["z", "x", "c", "v", "b", "n", "m", ",", ".", "/"] + ], + "uppercase": [ + ["~", "!", "@", "#", "$", "%", "^", "&", "*", "(", ")", "_", "+"], + ["Q", "W", "E", "R", "T", "Y", "U", "I", "O", "P", "{", "}", "|"], + ["A", "S", "D", "F", "G", "H", "J", "K", "L", ":", "\"" + ], + ["Z", "X", "C", "V", "B", "N", "M", "<", ">", "?"] + ] + }, + "qz": { + "name": "QWERTZ", + "lowercase": [ + ["^", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "\\u00df", "="], + ["q", "w", "e", "r", "t", "z", "u", "i", "o", "p", "\\u00fc", "+", "\\"], + ["a", "s", "d", "f", "g", "h", "j", "k", "l", "\\u00f6", "\\u00e4", "#"], + ["y", "x", "c", "v", "b", "n", "m", ",", ".", "-"] + ], + "uppercase": [ + ["\\u00b0", "!", "\"", "\\u00a7", "$", "%", "&", "/", "(", ")", "=", "?", "`"], + ["Q", "W", "E", "R", "T", "Z", "U", "I", "O", "P", "\\u00dc", "*", "|"], + ["A", "S", "D", "F", "G", "H", "J", "K", "L", "\\u00d6", "\\u00c4", "'"], + ["Y", "X", "C", "V", "B", "N", "M", ";", ":", "_"] + ] + }, + "wn": { + "name": "Workman", + "lowercase": [ + ["`", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "-", "="], + ["q", "d", "r", "w", "b", "j", "f", "u", "p", ";", "[", "]", "\\"], + ["a", "s", "h", "t", "g", "y", "n", "e", "o", "i", "'"], + ["z", "x", "m", "c", "v", "k", "l", ",", ".", "/"] + ], + "uppercase": [ + ["~", "!", "@", "#", "$", "%", "^", "&", "*", "(", ")", "_", "+"], + ["Q", "D", "R", "W", "B", "J", "F", "U", "P", ":", "{", "}", "|"], + ["A", "S", "H", "T", "G", "Y", "N", "E", "O", "I", "\"" + ], + ["Z", "X", "M", "C", "V", "K", "L", "<", ">", "?"] + ] + } } \ No newline at end of file