diff --git a/README.md b/README.md index 601fdcc6964..7519a4c052b 100644 --- a/README.md +++ b/README.md @@ -1,35 +1,29 @@ -![Keyman](https://keyman.com/cdn/dev/img/logo2.png) - -[Keyman](https://keyman.com) makes it possible for you to type in any language -on Windows, macOS, Linux, iPhone, iPad, Android tablets and phones, and even -instantly in your web browser. Create keyboard layouts with Keyman Developer and -share them with the community in the [keyboards -repository](https://github.com/keymanapp/keyboards). The [Keyman -Community](https://community.software.sil.org/c/keyman) have so far contributed -well over 1,000 keyboard layouts for over 2,500 languages! - -# License - -Copyright (c) SIL Global. - -Keyman is an open source project distributed under the [MIT license](LICENSE.md). - -# Get Involved - -* [Code of Conduct](CODE_OF_CONDUCT.md) -* [Contributing to the Keyman App](CONTRIBUTING.md) -* [Localize Keyman](https://translate.keyman.com/project/keyman) -* [Other Ways of Getting Involved](https://keyman.com/about/get-involved) - -# Development Status - -* [Development Status Site](https://status.keyman.com) - -# Important Links - -* [Keyman Home](https://keyman.com) -* [Downloads](https://keyman.com/downloads) -* [Keyboards](https://keyman.com/keyboards) -* [Documentation](https://help.keyman.com/) -* [Online Keyboard](https://keymanweb.com/) -* [SIL Language Technology - software.sil.org](https://software.sil.org/) +Karai-Karai Keyboard keyboard +============== + +Description +----------- +keyboard for Karai-Karai language with tones, digraphs, and special characters. + +Links +----- +Keyboard Homepage: https://keyman.com/keyboards/karai_karai_keyboard + +Copyright +--------- +See [LICENSE.md](LICENSE.md) + +Supported Platforms +------------------- + * Windows + * macOS + * Linux + * Web + * iPhone + * iPad + * Android phone + * Android tablet + * Mobile devices + * Desktop devices + * Tablet devices + diff --git a/karai-karai keyboard logo.jpg b/karai-karai keyboard logo.jpg new file mode 100644 index 00000000000..9d457482667 Binary files /dev/null and b/karai-karai keyboard logo.jpg differ diff --git a/karai_karai_keyboard.js b/karai_karai_keyboard.js new file mode 100644 index 00000000000..9a190c54f7a --- /dev/null +++ b/karai_karai_keyboard.js @@ -0,0 +1,315 @@ +if(typeof keyman === 'undefined') { + console.log('Keyboard requires KeymanWeb 10.0 or later'); + if(typeof tavultesoft !== 'undefined') tavultesoft.keymanweb.util.alert("This keyboard requires KeymanWeb 10.0 or later"); +} else { +KeymanWeb.KR(new Keyboard_karai_karai_keyboard()); +} +function Keyboard_karai_karai_keyboard() +{ + var modCodes = keyman.osk.modifierCodes; + var keyCodes = keyman.osk.keyCodes; + + this._v=(typeof keyman!="undefined"&&typeof keyman.version=="string")?parseInt(keyman.version,10):9; + this.KI="Keyboard_karai_karai_keyboard"; + this.KN="Karai-Karai Keyboard"; + this.KMINVER="10.0"; + this.KV=null; + this.KDU=0; + this.KH=''; + this.KM=0; + this.KBVER="1.1"; + this.KMBM=modCodes.RALT | modCodes.SHIFT /* 0x0018 */; + this.KRTL=1; + this.KVER="18.0.240.0"; + this.KVS=[]; + this.gs=function(t,e) { + return this.g_Main_0(t,e); + }; + this.gs=function(t,e) { + return this.g_Main_0(t,e); + }; + this.g_Main_0=function(t,e) { + var k=KeymanWeb,r=0,m=0; + if(k.KKM(e, modCodes.RALT | modCodes.VIRTUAL_KEY /* 0x4008 */, keyCodes.K_Q /* 0x51 */)) { + if(1){ + r=m=1; // Line 18 + k.KDC(0,t); + k.KO(-1,t,"á"); + } + } + else if(k.KKM(e, modCodes.RALT | modCodes.VIRTUAL_KEY /* 0x4008 */, keyCodes.K_W /* 0x57 */)) { + if(1){ + r=m=1; // Line 19 + k.KDC(0,t); + k.KO(-1,t,"é"); + } + } + else if(k.KKM(e, modCodes.RALT | modCodes.VIRTUAL_KEY /* 0x4008 */, keyCodes.K_Z /* 0x5A */)) { + if(1){ + r=m=1; // Line 20 + k.KDC(0,t); + k.KO(-1,t,"í"); + } + } + else if(k.KKM(e, modCodes.RALT | modCodes.VIRTUAL_KEY /* 0x4008 */, keyCodes.K_X /* 0x58 */)) { + if(1){ + r=m=1; // Line 21 + k.KDC(0,t); + k.KO(-1,t,"ó"); + } + } + else if(k.KKM(e, modCodes.RALT | modCodes.VIRTUAL_KEY /* 0x4008 */, keyCodes.K_V /* 0x56 */)) { + if(1){ + r=m=1; // Line 22 + k.KDC(0,t); + k.KO(-1,t,"ú"); + } + } + else if(k.KKM(e, modCodes.RALT | modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4018 */, keyCodes.K_Q /* 0x51 */)) { + if(1){ + r=m=1; // Line 24 + k.KDC(0,t); + k.KO(-1,t,"Á"); + } + } + else if(k.KKM(e, modCodes.RALT | modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4018 */, keyCodes.K_W /* 0x57 */)) { + if(1){ + r=m=1; // Line 25 + k.KDC(0,t); + k.KO(-1,t,"É"); + } + } + else if(k.KKM(e, modCodes.RALT | modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4018 */, keyCodes.K_Z /* 0x5A */)) { + if(1){ + r=m=1; // Line 26 + k.KDC(0,t); + k.KO(-1,t,"Í"); + } + } + else if(k.KKM(e, modCodes.RALT | modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4018 */, keyCodes.K_X /* 0x58 */)) { + if(1){ + r=m=1; // Line 27 + k.KDC(0,t); + k.KO(-1,t,"Ó"); + } + } + else if(k.KKM(e, modCodes.RALT | modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4018 */, keyCodes.K_V /* 0x56 */)) { + if(1){ + r=m=1; // Line 28 + k.KDC(0,t); + k.KO(-1,t,"Ú"); + } + } + else if(k.KKM(e, modCodes.RALT | modCodes.VIRTUAL_KEY /* 0x4008 */, keyCodes.K_A /* 0x41 */)) { + if(1){ + r=m=1; // Line 31 + k.KDC(0,t); + k.KO(-1,t,"à"); + } + } + else if(k.KKM(e, modCodes.RALT | modCodes.VIRTUAL_KEY /* 0x4008 */, keyCodes.K_E /* 0x45 */)) { + if(1){ + r=m=1; // Line 32 + k.KDC(0,t); + k.KO(-1,t,"è"); + } + } + else if(k.KKM(e, modCodes.RALT | modCodes.VIRTUAL_KEY /* 0x4008 */, keyCodes.K_I /* 0x49 */)) { + if(1){ + r=m=1; // Line 33 + k.KDC(0,t); + k.KO(-1,t,"ì"); + } + } + else if(k.KKM(e, modCodes.RALT | modCodes.VIRTUAL_KEY /* 0x4008 */, keyCodes.K_O /* 0x4F */)) { + if(1){ + r=m=1; // Line 34 + k.KDC(0,t); + k.KO(-1,t,"ò"); + } + } + else if(k.KKM(e, modCodes.RALT | modCodes.VIRTUAL_KEY /* 0x4008 */, keyCodes.K_U /* 0x55 */)) { + if(1){ + r=m=1; // Line 35 + k.KDC(0,t); + k.KO(-1,t,"ù"); + } + } + else if(k.KKM(e, modCodes.RALT | modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4018 */, keyCodes.K_A /* 0x41 */)) { + if(1){ + r=m=1; // Line 37 + k.KDC(0,t); + k.KO(-1,t,"À"); + } + } + else if(k.KKM(e, modCodes.RALT | modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4018 */, keyCodes.K_E /* 0x45 */)) { + if(1){ + r=m=1; // Line 38 + k.KDC(0,t); + k.KO(-1,t,"È"); + } + } + else if(k.KKM(e, modCodes.RALT | modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4018 */, keyCodes.K_I /* 0x49 */)) { + if(1){ + r=m=1; // Line 39 + k.KDC(0,t); + k.KO(-1,t,"Ì"); + } + } + else if(k.KKM(e, modCodes.RALT | modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4018 */, keyCodes.K_O /* 0x4F */)) { + if(1){ + r=m=1; // Line 40 + k.KDC(0,t); + k.KO(-1,t,"Ò"); + } + } + else if(k.KKM(e, modCodes.RALT | modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4018 */, keyCodes.K_U /* 0x55 */)) { + if(1){ + r=m=1; // Line 41 + k.KDC(0,t); + k.KO(-1,t,"Ù"); + } + } + else if(k.KKM(e, modCodes.RALT | modCodes.VIRTUAL_KEY /* 0x4008 */, keyCodes.K_P /* 0x50 */)) { + if(1){ + r=m=1; // Line 44 + k.KDC(0,t); + k.KO(-1,t,"â"); + } + } + else if(k.KKM(e, modCodes.RALT | modCodes.VIRTUAL_KEY /* 0x4008 */, keyCodes.K_J /* 0x4A */)) { + if(1){ + r=m=1; // Line 45 + k.KDC(0,t); + k.KO(-1,t,"ê"); + } + } + else if(k.KKM(e, modCodes.RALT | modCodes.VIRTUAL_KEY /* 0x4008 */, keyCodes.K_L /* 0x4C */)) { + if(1){ + r=m=1; // Line 46 + k.KDC(0,t); + k.KO(-1,t,"î"); + } + } + else if(k.KKM(e, modCodes.RALT | modCodes.VIRTUAL_KEY /* 0x4008 */, keyCodes.K_N /* 0x4E */)) { + if(1){ + r=m=1; // Line 47 + k.KDC(0,t); + k.KO(-1,t,"ô"); + } + } + else if(k.KKM(e, modCodes.RALT | modCodes.VIRTUAL_KEY /* 0x4008 */, keyCodes.K_M /* 0x4D */)) { + if(1){ + r=m=1; // Line 48 + k.KDC(0,t); + k.KO(-1,t,"û"); + } + } + else if(k.KKM(e, modCodes.RALT | modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4018 */, keyCodes.K_P /* 0x50 */)) { + if(1){ + r=m=1; // Line 50 + k.KDC(0,t); + k.KO(-1,t,"Â"); + } + } + else if(k.KKM(e, modCodes.RALT | modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4018 */, keyCodes.K_J /* 0x4A */)) { + if(1){ + r=m=1; // Line 51 + k.KDC(0,t); + k.KO(-1,t,"Ê"); + } + } + else if(k.KKM(e, modCodes.RALT | modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4018 */, keyCodes.K_L /* 0x4C */)) { + if(1){ + r=m=1; // Line 52 + k.KDC(0,t); + k.KO(-1,t,"Î"); + } + } + else if(k.KKM(e, modCodes.RALT | modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4018 */, keyCodes.K_N /* 0x4E */)) { + if(1){ + r=m=1; // Line 53 + k.KDC(0,t); + k.KO(-1,t,"Ô"); + } + } + else if(k.KKM(e, modCodes.RALT | modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4018 */, keyCodes.K_M /* 0x4D */)) { + if(1){ + r=m=1; // Line 54 + k.KDC(0,t); + k.KO(-1,t,"Û"); + } + } + else if(k.KKM(e, modCodes.RALT | modCodes.VIRTUAL_KEY /* 0x4008 */, keyCodes.K_B /* 0x42 */)) { + if(1){ + r=m=1; // Line 56 + k.KDC(0,t); + k.KO(-1,t,"ɓ"); + } + } + else if(k.KKM(e, modCodes.RALT | modCodes.VIRTUAL_KEY /* 0x4008 */, keyCodes.K_D /* 0x44 */)) { + if(1){ + r=m=1; // Line 57 + k.KDC(0,t); + k.KO(-1,t,"ɗ"); + } + } + else if(k.KKM(e, modCodes.RALT | modCodes.VIRTUAL_KEY /* 0x4008 */, keyCodes.K_K /* 0x4B */)) { + if(1){ + r=m=1; // Line 58 + k.KDC(0,t); + k.KO(-1,t,"ƙ"); + } + } + else if(k.KKM(e, modCodes.RALT | modCodes.VIRTUAL_KEY /* 0x4008 */, keyCodes.K_Y /* 0x59 */)) { + if(1){ + r=m=1; // Line 59 + k.KDC(0,t); + k.KO(-1,t,"ƴ"); + } + } + else if(k.KKM(e, modCodes.RALT | modCodes.VIRTUAL_KEY /* 0x4008 */, keyCodes.K_R /* 0x52 */)) { + if(1){ + r=m=1; // Line 60 + k.KDC(0,t); + k.KO(-1,t,"r̃"); + } + } + else if(k.KKM(e, modCodes.RALT | modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4018 */, keyCodes.K_B /* 0x42 */)) { + if(1){ + r=m=1; // Line 62 + k.KDC(0,t); + k.KO(-1,t,"Ɓ"); + } + } + else if(k.KKM(e, modCodes.RALT | modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4018 */, keyCodes.K_D /* 0x44 */)) { + if(1){ + r=m=1; // Line 63 + k.KDC(0,t); + k.KO(-1,t,"Ɗ"); + } + } + else if(k.KKM(e, modCodes.RALT | modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4018 */, keyCodes.K_K /* 0x4B */)) { + if(1){ + r=m=1; // Line 64 + k.KDC(0,t); + k.KO(-1,t,"Ƙ"); + } + } + else if(k.KKM(e, modCodes.RALT | modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4018 */, keyCodes.K_Y /* 0x59 */)) { + if(1){ + r=m=1; // Line 65 + k.KDC(0,t); + k.KO(-1,t,"Ƴ"); + } + } + else if(k.KKM(e, modCodes.RALT | modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4018 */, keyCodes.K_R /* 0x52 */)) { + if(1){ + r=m=1; // Line 66 + k.KDC(0,t); + k.KO(-1,t,"R̃"); + } + } + return r; + }; +} diff --git a/karai_karai_keyboard.kmp b/karai_karai_keyboard.kmp new file mode 100644 index 00000000000..45c229285fd Binary files /dev/null and b/karai_karai_keyboard.kmp differ diff --git a/karai_karai_keyboard.kmx b/karai_karai_keyboard.kmx new file mode 100644 index 00000000000..13c4e65f256 Binary files /dev/null and b/karai_karai_keyboard.kmx differ diff --git a/karai_karai_keyboard.kps/README.txt b/karai_karai_keyboard.kps/README.txt new file mode 100644 index 00000000000..33da35cc21c --- /dev/null +++ b/karai_karai_keyboard.kps/README.txt @@ -0,0 +1,92 @@ +Karai-Karai Keyboard Documentation +Project Overview +The Karai-Karai Keyboard is a Unicode-compliant Keyman keyboard designed to support +accurate digital writing of the Karai-Karai (Kai) language. It enables users to easily type +accented vowels and language-specific consonants that are not available on standard keyboards. +The keyboard is intended for use across multiple platforms, including desktop and mobile +environments. +Keyboard Name +Karai-Karai Keyboard +Author +Musaddam Idriss +Language +Karai-Karai (Kai) +Keyboard Version +1.1 +Keyman Engine Version +10.0 +Copyright +(c) 2025 Karai-Karai Wikimedia Foundation +Target Platforms +The keyboard is configured to work on the following platforms: +* Windows +* Desktop computers +Technical Description +The keyboard is written using the Keyman keyboard language and operates in Unicode mode. It +uses the Right Alt key (AltGr) and combinations with Shift to generate accented vowels and +special Karai-Karai characters. All rules are defined within the Main group, which processes +physical key presses. +Keyboard Structure +The keyboard begins by defining metadata such as name, version, supported targets, and +copyright information. It then enters Unicode mode and processes keystrokes using standard key +definitions. +Key Layout and Output +Acute Vowels +Right Alt combined with specific letter keys produces lowercase acute vowels. Adding Shift +produces uppercase forms. +Right Alt + Q ? +Right Alt + W ? +Right Alt + Z ? +Right Alt + X ? +Right Alt + V ? +Right Alt + Shift + Q ? +Right Alt + Shift + W ? +Right Alt + Shift + Z ? +Right Alt + Shift + X ? +Right Alt + Shift + V ? +Grave Vowels +Right Alt combined with vowel keys produces lowercase grave vowels. Adding Shift produces +uppercase forms. +Right Alt + A ? +Right Alt + E ? +Right Alt + I ? +Right Alt + O ? +Right Alt + U ? +Right Alt + Shift + A ? +Right Alt + Shift + E ? +Right Alt + Shift + I ? +Right Alt + Shift + O ? +Right Alt + Shift + U ? +Circumflex Vowels +Right Alt combined with specific consonant keys produces lowercase circumflex vowels. Adding +Shift produces uppercase forms. +Right Alt + P ? +Right Alt + J ? +Right Alt + L ? +Right Alt + N ? +Right Alt + M ? +Right Alt + Shift + P ? +Right Alt + Shift + J ? +Right Alt + Shift + L ? +Right Alt + Shift + N ? +Right Alt + Shift + M ? +Karai-Karai Special Letters +The keyboard provides direct access to special consonants used in Karai-Karai orthography. +Right Alt + B ? ? +Right Alt + D ? ? +Right Alt + K ? ? +Right Alt + Y ? ? +Right Alt + R ? r~ +Right Alt + Shift + B ? ? +Right Alt + Shift + D ? ? +Right Alt + Shift + K ? ? +Right Alt + Shift + Y ? ? +Right Alt + Shift + R ? R~ +Usage Notes +* The Right Alt (AltGr) key is essential for accessing all extended characters. +* On systems without a dedicated Right Alt key, AltGr is usually mapped to Ctrl + Alt. +* The keyboard follows Unicode standards, ensuring compatibility across applications and +platforms. + +1 + diff --git a/karai_karai_keyboard.kps/~$README.txt b/karai_karai_keyboard.kps/~$README.txt new file mode 100644 index 00000000000..c11a3fcc1c8 Binary files /dev/null and b/karai_karai_keyboard.kps/~$README.txt differ