chore(windows): Merge branch 'beta' into fix/windows/5996/no-keystrokes-emoji-input

This commit is contained in:
Ross 2022-03-18 09:13:15 +10:00
commit 6d248d4e55
150 changed files with 10619 additions and 543 deletions

View file

@ -9,7 +9,7 @@ insert_final_newline = true
trim_trailing_whitespace = true
[*.md]
max_line_length = off
max_line_length = 160
[{Makefile,rules}]
indent_style = tab

View file

@ -115,7 +115,8 @@ Include details about your configuration and environment:
This section guides you through submitting an enhancement suggestion for Keyman, including completely new features and minor improvements to existing functionality. Following these guidelines helps maintainers and the community understand your suggestion :pencil: and find related suggestions :mag_right:.
Before creating enhancement suggestions, please check [this list](#before-submitting-an-enhancement-suggestion) as you might find out that you don't need to create one. When you are creating an enhancement suggestion, please [include as many details as possible](#how-do-i-submit-a-good-enhancement-suggestion). Fill in [the template](https://github.com/keymanapp/keyman/issues/new?assignees=&labels=feat&template=feature_request.md&title=feat%3A+), including the steps that you imagine you would take if the feature you're requesting existed.
Before creating enhancement suggestions, please check [this list](#before-submitting-an-enhancement-suggestion) as you might find out that you don't need to create one. When you are creating an enhancement suggestion, please [include as many details as possible](#how-do-i-submit-a-good-enhancement-suggestion).
Fill in [the template](https://github.com/keymanapp/keyman/issues/new?assignees=&labels=feat&template=feature_request.md&title=feat%3A+), including the steps that you imagine you would take if the feature you're requesting existed.
#### Before Submitting An Enhancement Suggestion

View file

@ -1,5 +1,36 @@
# Keyman Version History
## 15.0.215 beta 2022-03-17
* fix(web): crash on focus before init (#6393)
## 15.0.214 beta 2022-03-16
* feat(web): `&newLayer` and `&oldLayer` (#6366)
## 15.0.213 beta 2022-03-15
* feat(common): zip and index keyboard artifacts (#6367)
* fix(android/engine): Activate menu on globe longpress before release (#6356)
* fix(web): subkey touch position after scroll (#6340)
* fix(developer): warn on ncaps usage inconsistency (#6347)
* fix(web): caps state tracking for touch (#6351)
* chore(windows): Update license date (#6374)
* chore(android): Separate CI step to generate Play Store notes (#6375)
* chore(linux): Update changelog and copyright (#6372)
* fix(oem/fv/android): Consolidate dictionary and keyboard settings (#6369)
* fix(linux): Don't start ibus-daemon multiple times (#6283)
## 15.0.212 beta 2022-03-11
* chore(linux): Fix lintian warnings (#6360)
* fix(common): allow custom keyboard builds (#6358)
## 15.0.211 beta 2022-03-10
* fix(oem/fv/android): Check keyboard exists before registering a model (#6346)
* chore(common): cleanup sh global color variables (#6353)
## 15.0.210 beta 2022-03-10
* feat(common): build test keyboards via script (#6352)

View file

@ -1,6 +1,6 @@
# License
Copyright (c) 2017-2021 SIL International. All rights reserved.
Copyright (c) 2017-2022 SIL International. All rights reserved.
Licensed under the MIT License.
@ -10,7 +10,7 @@ Licensed under the MIT License.
The MIT License
Copyright (c) 2017-2021 SIL International
Copyright (c) 2017-2022 SIL International
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal

View file

@ -1 +1 @@
15.0.211
15.0.216

View file

@ -0,0 +1,48 @@
# Set sensible script defaults:
# set -e: Terminate script if a command returns an error
set -e
# set -u: Terminate script if an unset variable is used
set -u
## START STANDARD BUILD SCRIPT INCLUDE
# adjust relative paths as necessary
THIS_SCRIPT="$(greadlink -f "${BASH_SOURCE[0]}" 2>/dev/null || readlink -f "${BASH_SOURCE[0]}")"
. "$(dirname "$THIS_SCRIPT")/../../resources/build/build-utils.sh"
## END STANDARD BUILD SCRIPT INCLUDE
QUIET=0
. "$KEYMAN_ROOT/resources/shellHelperFunctions.sh"
THIS_DIR="$(dirname "$THIS_SCRIPT")"
#
# Copy release notes for Gradle Play Publisher to upload
# Reference: https://github.com/Triple-T/gradle-play-publisher#uploading-release-notes
#
PLAY_RELEASE_NOTES="$KEYMAN_ROOT/android/KMAPro/kMAPro/src/main/play/release-notes/en-US/$TIER.txt"
if [ $TIER = "stable" ]; then
PLAY_RELEASE_NOTES="$KEYMAN_ROOT/android/KMAPro/kMAPro/src/main/play/release-notes/en-US/default.txt"
fi
echo "Generating Play Store release notes to $PLAY_RELEASE_NOTES"
echo "" > "$PLAY_RELEASE_NOTES"
# Copy whatsnew.md to release notes 1 line at a time,
# filtering for lines that start with "*".
# Play Store release notes have a limit of 500 characters
FILTERED_LINES=`grep '^\s*\*.*$' "$KEYMAN_ROOT/android/help/about/whatsnew.md"`
IFS=$'\n' # Change IFS to new line
for line in $FILTERED_LINES
do
CHARS_IN_RELEASE_NOTES=$( wc -m < $PLAY_RELEASE_NOTES )
CHARS_IN_CURRENT_LINE=$( wc -m <<< $line )
if (( CHARS_IN_RELEASE_NOTES + CHARS_IN_CURRENT_LINE + 1 < 450 )); then
# Copy line to Play Store release notes
echo "$line" >> $PLAY_RELEASE_NOTES
else
# 450 chars reached
warn "Warning: Play Store release notes approaching 500 character limit"
echo '* Additional bug fixes and improvements' >> $PLAY_RELEASE_NOTES
break
fi
done

View file

@ -105,6 +105,13 @@ public class PackageActivity extends AppCompatActivity implements
return;
}
// Check minimum keyboard version to ensure current version of Keyman supports the features
String pkgMinimumKeyboardVersion = kmpProcessor.getPackageMinimumKeyboardVersion(pkgInfo);
if (FileUtils.compareVersions(pkgMinimumKeyboardVersion, KMManager.getMajorVersion()) == FileUtils.VERSION_GREATER) {
showErrorToast(context, getString(R.string.minimum_keyboard_version_not_supported));
return;
}
pkgName = kmpProcessor.getPackageName(pkgInfo);
final int keyboardCount = kmpProcessor.getKeyboardCount(pkgInfo);

View file

@ -241,4 +241,7 @@
<!-- Context: KMP Package strings -->
<string name="invalid_metadata" comment="kmp.json metadata file is invalid or missing in package">Invalid/Missing metadata in package</string>
<!-- Context: KMP Package strings -->
<string name="minimum_keyboard_version_not_supported" comment="Notification when keyboard has functionality not supported by current Keyman">
Keyboard requires a newer version of Keyman</string>
</resources>

View file

@ -190,6 +190,7 @@ final class KMKeyboard extends WebView {
return;
} else if (KMManager.getGlobeKeyState() == KMManager.GlobeKeyState.GLOBE_KEY_STATE_DOWN) {
KMManager.setGlobeKeyState(KMManager.GlobeKeyState.GLOBE_KEY_STATE_LONGPRESS);
KMManager.handleGlobeKeyAction(context, true, keyboardType);
return;
/* For future implementation
else if(suggestionJSON != null) {

View file

@ -1325,7 +1325,17 @@ public final class KMManager {
return true;
}
public static boolean setBannerOptions(boolean mayPredict) {
/**
* deleteLexicalModel - Remove lexical model from the installed list
* and deregister the model with KMW
* @param context
* @param position - int position in the models list
*/
public static void deleteLexicalModel(Context context, int position, boolean silenceNotification) {
KeyboardPickerActivity.deleteLexicalModel(context, position, silenceNotification);
}
public static boolean setBannerOptions(boolean mayPredict) {
String url = KMString.format("setBannerOptions(%s)", mayPredict);
if (InAppKeyboard != null) {
InAppKeyboard.loadJavascript(url);
@ -2099,21 +2109,30 @@ public final class KMManager {
globeKeyState = state;
}
/**
* Return if the lock screen is locked (prevents keyboard picker menu from being displayed)
* @return boolean
*/
private static boolean isLocked() {
KeyguardManager keyguardManager = (KeyguardManager) appContext.getSystemService(Context.KEYGUARD_SERVICE);
// inKeyguardRestrictedInputMode() deprecated, so check isKeyguardLocked() to determine if screen is locked
return keyguardManager.isKeyguardLocked();
}
/**
* Handle the globe key action
* @param globeKeyDown boolean if the globe key state is GLOBE_KEY_STATE_DOWN
* @param keyboardType KeyboardType KEYBOARD_TYPE_INAPP or KEYBOARD_TYPE_SYSTEM
*/
private static void handleGlobeKeyAction(Context context, boolean globeKeyDown, KeyboardType keyboardType) {
public static void handleGlobeKeyAction(Context context, boolean globeKeyDown, KeyboardType keyboardType) {
// Update globeKeyState
if (globeKeyState != GlobeKeyState.GLOBE_KEY_STATE_LONGPRESS) {
globeKeyState = globeKeyDown ? GlobeKeyState.GLOBE_KEY_STATE_DOWN : GlobeKeyState.GLOBE_KEY_STATE_UP;
}
if (KMManager.shouldAllowSetKeyboard()) {
KeyguardManager keyguardManager = (KeyguardManager) appContext.getSystemService(Context.KEYGUARD_SERVICE);
// inKeyguardRestrictedInputMode() deprecated, so check isKeyguardLocked() to determine if screen is locked
if (keyguardManager.isKeyguardLocked()) {
if (isLocked()) {
if (keyboardType == KeyboardType.KEYBOARD_TYPE_SYSTEM && globeKeyState == GlobeKeyState.GLOBE_KEY_STATE_UP) {
doGlobeKeyLockscreenAction(context);
}

View file

@ -275,7 +275,7 @@ public final class ModelPickerActivity extends BaseActivity {
// Uses the repo dataset's master lexical model list to create a filtered adapter for use here.
// As this one is specific to this class, we can implement Activity-specific functionality within it.
static private class FilteredLexicalModelAdapter extends NestedAdapter<LexicalModel, Dataset.LexicalModels, String> {
static public class FilteredLexicalModelAdapter extends NestedAdapter<LexicalModel, Dataset.LexicalModels, String> {
static final int RESOURCE = R.layout.models_list_row_layout;
private final Context context;

View file

@ -394,6 +394,22 @@ public class PackageProcessor {
}
}
/**
* Parse a kmp.json JSON object and return the package's minimum keyboard version (system.fileVersion).
* This is to avoid issues with app crashing if keyboard functionality is not supported.
* If undefined, return default version "7.0".
* @param json kmp.json as a JSON object.
* @return String of the package's minimum keyboard version
*/
public static String getPackageMinimumKeyboardVersion(JSONObject json) {
try {
return json.getJSONObject("system").getString("fileVersion");
} catch (Exception e) {
KMLog.LogException(TAG, "", e);
return "7.0";
}
}
/**
* Parse a kmp.json JSON object and return the package's target (keyboards vs lexical models).
* Only one can be valid. Otherwise, return "invalid"

View file

@ -97,7 +97,6 @@
<!-- Context: Keyboard Updates -->
<string name="dictionary_update_message">Updates available for dictionary %1$s: %2$s </string>
<!-- Context: Keyboard Info and Keyboard Settings -->
<string name="keyboard_version" comment="Label for keyboard version">Keyboard version</string>
@ -133,6 +132,9 @@
<!-- Context: Query for associated dictionary -->
<string name="query_associated_model" comment="Check if there's an available dictionary to download">Checking for associated dictionary to download</string>
<string name="cannot_query_associated_model" comment="Cannot reach server to check if there's an available dictionary to download">
Cannot connect to Keyman server to check for associated dictionary to download</string>
<!-- Context: Model Updates -->
<string name="confirm_download_model" comment="Confirmation to download a dictionary update">Would you like to download the latest version of this dictionary?</string>
@ -210,10 +212,14 @@
<!-- Context: Language Settings menu strings -->
<string name="model_label">Dictionary</string>
<plurals name="model_count">
<item quantity="one">Dictionary</item>
<item quantity="other">Dictionaries</item>
</plurals>
<!-- Context: Language Settings menu substring - Check for available dictionary -->
<string name="check_available_model" comment="Check for available dictionary">Check for available dictionary</string>
<string name="check_model_online" comment="Check for dictionaries online">Check for dictionaries online</string>
<!-- Context: Language Settings menu strings -->
<string name="model_info_header" comment="Dictionary name">Dictionary: %1$s</string>

View file

@ -107,34 +107,3 @@ if $DO_HTM; then
cp android_images/* "$DESTHTM/android_images/"
fi
#
# Copy release notes for Gradle Play Publisher to upload
# Reference: https://github.com/Triple-T/gradle-play-publisher#uploading-release-notes
#
PLAY_RELEASE_NOTES="$KEYMAN_ROOT/android/KMAPro/kMAPro/src/main/play/release-notes/en-US/$TIER.txt"
if [ $TIER = "stable" ]; then
PLAY_RELEASE_NOTES="$KEYMAN_ROOT/android/KMAPro/kMAPro/src/main/play/release-notes/en-US/default.txt"
fi
echo "Generating Play Store release notes to $PLAY_RELEASE_NOTES"
echo "" > "$PLAY_RELEASE_NOTES"
# Copy whatsnew.md to release notes 1 line at a time,
# filtering for lines that start with "*".
# Play Store release notes have a limit of 500 characters
FILTERED_LINES=`grep '^\s*\*.*$' "$KEYMAN_ROOT/android/help/about/whatsnew.md"`
IFS=$'\n' # Change IFS to new line
for line in $FILTERED_LINES
do
CHARS_IN_RELEASE_NOTES=$( wc -m < $PLAY_RELEASE_NOTES )
CHARS_IN_CURRENT_LINE=$( wc -m <<< $line )
if (( CHARS_IN_RELEASE_NOTES + CHARS_IN_CURRENT_LINE + 1 < 450 )); then
# Copy line to Play Store release notes
echo "$line" >> $PLAY_RELEASE_NOTES
else
# 450 chars reached
warn "Warning: Play Store release notes approaching 500 character limit"
echo '* Additional bug fixes and improvements' >> $PLAY_RELEASE_NOTES
break
fi
done

3
android/build-publish.sh Normal file → Executable file
View file

@ -75,6 +75,9 @@ echo "BUILD_FLAGS $BUILD_FLAGS"
# Publish Keyman for Android
if [ "$DO_KMAPRO" = true ]; then
cd "$KEYMAN_ROOT/android/KMAPro/"
# Copy Release Notes
./build-play-store-notes.sh
./gradlew $DAEMON_FLAG $BUILD_FLAGS
fi

View file

@ -15,6 +15,6 @@ Here are some of the new features we have added to Keyman 15.0 for Android:
| System | 1 | Quickly switch to previous system keyboard |
| System | 2+ | Quickly switch to next Keyman keyboard |
* Long press and release the globe key to bring up the keyboard picker menu. On a Keyman system keyboard, the bottom of this menu will also display other enabled system keyboards that can be selected.
* Long press the globe key to bring up the keyboard picker menu. On a Keyman system keyboard, the bottom of this menu will also display other enabled system keyboards that can be selected.
Note: On the lock screen, the keyboard picker menu is not displayed.

View file

@ -1,6 +1,6 @@
{
"name": "@keymanapp/input-processor",
"version": "15.0.211",
"version": "15.0.216",
"lockfileVersion": 2,
"requires": true,
"packages": {

View file

@ -1,6 +1,6 @@
{
"name": "@keymanapp/input-processor",
"version": "15.0.211",
"version": "15.0.216",
"description": "The core text and prediction processing engine for KeymanWeb",
"repository": {
"type": "git",
@ -18,8 +18,8 @@
},
"homepage": "https://github.com/keymanapp/keyman#readme",
"devDependencies": {
"@keymanapp/lexical-model-compiler": "^15.0.211",
"@keymanapp/resources-gosh": "^15.0.211",
"@keymanapp/lexical-model-compiler": "^15.0.216",
"@keymanapp/resources-gosh": "^15.0.216",
"@types/node": "^11.9.4",
"chai": "^4.3.4",
"mocha": "^8.4.0",
@ -34,11 +34,11 @@
"mocha": "mocha"
},
"dependencies": {
"@keymanapp/keyboard-processor": "^15.0.211",
"@keymanapp/lexical-model-layer": "^15.0.211",
"@keymanapp/models-types": "^15.0.211",
"@keymanapp/web-environment": "^15.0.211",
"@keymanapp/web-utils": "^15.0.211",
"@keymanapp/keyboard-processor": "^15.0.216",
"@keymanapp/lexical-model-layer": "^15.0.216",
"@keymanapp/models-types": "^15.0.216",
"@keymanapp/web-environment": "^15.0.216",
"@keymanapp/web-utils": "^15.0.216",
"eventemitter3": "^4.0.0"
}
}

View file

@ -54,7 +54,7 @@ if [ $FETCH_DEPS = true ]; then
fi
# Ensures that the lexical model compiler has been built locally.
echo "${TERM_HEADING}Preparing Lexical Model Compiler for test use${NORMAL}"
echo_heading "Preparing Lexical Model Compiler for test use"
pushd $WORKING_DIRECTORY/node_modules/@keymanapp/lexical-model-compiler
npm run build
popd
@ -75,5 +75,5 @@ if [ $FETCH_DEPS = true ]; then
fi
# Now we run our local tests.
echo "${TERM_HEADING}Running Input Processor test suite${NORMAL}"
echo_heading "Running Input Processor test suite"
test-headless || fail "Input Processor tests failed!"

View file

@ -1,6 +1,6 @@
{
"name": "@keymanapp/keyboard-processor",
"version": "15.0.211",
"version": "15.0.216",
"lockfileVersion": 2,
"requires": true,
"packages": {

View file

@ -1,6 +1,6 @@
{
"name": "@keymanapp/keyboard-processor",
"version": "15.0.211",
"version": "15.0.216",
"description": "Core module for Keyman keyboard support in KeymanWeb.",
"repository": {
"type": "git",
@ -18,7 +18,7 @@
},
"homepage": "https://github.com/keymanapp/keyman#readme",
"devDependencies": {
"@keymanapp/resources-gosh": "^15.0.211",
"@keymanapp/resources-gosh": "^15.0.216",
"chai": "^4.3.4",
"mocha": "^8.4.0",
"mocha-teamcity-reporter": "^4.0.0",
@ -32,9 +32,9 @@
"mocha": "mocha"
},
"dependencies": {
"@keymanapp/models-types": "^15.0.211",
"@keymanapp/web-environment": "^15.0.211",
"@keymanapp/web-utils": "^15.0.211",
"@keymanapp/models-types": "^15.0.216",
"@keymanapp/web-environment": "^15.0.216",
"@keymanapp/web-utils": "^15.0.216",
"@types/node": "^11.9.4"
}
}

View file

@ -421,16 +421,14 @@ namespace com.keyman.text {
* Function _UpdateVKShift
* Scope Private
* @param {Object} e OSK event
* @param {number} v keyboard shift state
* @param {(boolean|number)} d set (1) or clear(0) shift state bits
* @return {boolean} Always true
* Description Updates the current shift state within KMW, updating the OSK's visualization thereof.
*/
_UpdateVKShift(e: KeyEvent, v: number, d: boolean|number): boolean {
var keyShiftState=0, lockStates=0, i;
_UpdateVKShift(e: KeyEvent): boolean {
let keyShiftState=0;
var lockNames = ['CAPS', 'NUM_LOCK', 'SCROLL_LOCK'];
var lockKeys = ['K_CAPS', 'K_NUMLOCK', 'K_SCROLL'];
const lockNames = ['CAPS', 'NUM_LOCK', 'SCROLL_LOCK'];
const lockKeys = ['K_CAPS', 'K_NUMLOCK', 'K_SCROLL'];
if(!this.activeKeyboard) {
return true;
@ -439,7 +437,6 @@ namespace com.keyman.text {
if(e) {
// read shift states from Pevent
keyShiftState = e.Lmodifiers;
lockStates = e.Lstates;
// Are we simulating AltGr? If it's a simulation and not real, time to un-simulate for the OSK.
if(this.activeKeyboard.isChiral && (this.activeKeyboard.emulatesAltGr) &&
@ -448,25 +445,10 @@ namespace com.keyman.text {
keyShiftState &= ~Codes.modifierCodes['RALT'];
}
for(i=0; i < lockNames.length; i++) {
if(lockStates & Codes.stateBitmasks[lockNames[i]]) {
this.stateKeys[lockKeys[i]] = !!(lockStates & Codes.modifierCodes[lockNames[i]]);
}
}
} else if(d) {
keyShiftState |= v;
for(i=0; i < lockNames.length; i++) {
if(v & Codes.stateBitmasks[lockNames[i]]) {
this.stateKeys[lockKeys[i]] = true;
}
}
} else {
keyShiftState &= ~v;
for(i=0; i < lockNames.length; i++) {
if(v & Codes.stateBitmasks[lockNames[i]]) {
this.stateKeys[lockKeys[i]] = false;
// Set stateKeys where corresponding value is passed in e.Lstates
for(let i=0; i < lockNames.length; i++) {
if(e.Lstates & Codes.stateBitmasks[lockNames[i]]) {
this.stateKeys[lockKeys[i]] = !!(e.Lstates & Codes.modifierCodes[lockNames[i]]);
}
}
}
@ -700,6 +682,13 @@ namespace com.keyman.text {
this.layerId = 'default';
}
if(keyEvent.device.formFactor != utils.FormFactor.Desktop) {
// The caps layer works slightly differently on touch than on desktop.
// It's a single layer with no ability to mix with other modifiers
// We need to make sure that the state is kept in sync with the layer.
this.stateKeys['K_CAPS'] = this.layerId == 'caps';
}
let baseModifierState = text.KeyboardProcessor.getModifierState(this.layerId);
this.modStateFlags = baseModifierState | keyEvent.Lstates;
}
@ -729,10 +718,10 @@ namespace com.keyman.text {
// I3318 (always clear deadkeys after backspace)
outputTarget.deadkeys().clear();
} else if(KeyboardProcessor.isModifier(Levent)) {
// For eventual integration - we bypass an OSK update for physical keystrokes when in touch mode.
this.activeKeyboard.notify(Levent.Lcode, outputTarget, isKeyDown ? 1 : 0);
// For eventual integration - we bypass an OSK update for physical keystrokes when in touch mode.
if(!Levent.device.touchable) {
return this._UpdateVKShift(Levent, Levent.Lcode-15, 1); // I2187
return this._UpdateVKShift(Levent); // I2187
} else {
return true;
}
@ -740,7 +729,7 @@ namespace com.keyman.text {
if(Levent.LmodifierChange) {
this.activeKeyboard.notify(0, outputTarget, 1);
this._UpdateVKShift(Levent, 0, 1);
this._UpdateVKShift(Levent);
}
// No modifier keypresses detected.
@ -751,7 +740,7 @@ namespace com.keyman.text {
this.layerId = 'default';
this.keyboardInterface.resetContextCache();
this._UpdateVKShift(null, 15, 0);
this._UpdateVKShift(null);
};
setNumericLayer(device: utils.DeviceSpec) {

View file

@ -64,6 +64,6 @@ pushd "$KEYMAN_ROOT/common/core/web/tools/recorder/src"
popd
# Run headless (browserless) tests.
echo "${TERM_HEADING}Running Keyboard Processor test suite${NORMAL}"
echo_heading "Running Keyboard Processor test suite"
test-headless || fail "Keyboard Processor tests failed!"

View file

@ -1,6 +1,6 @@
{
"name": "@keymanapp/recorder-core",
"version": "15.0.211",
"version": "15.0.216",
"lockfileVersion": 2,
"requires": true,
"packages": {

View file

@ -1,6 +1,6 @@
{
"name": "@keymanapp/recorder-core",
"version": "15.0.211",
"version": "15.0.216",
"description": "Core classes used to develop KeymanWeb test cases based on keystrokes",
"main": "index.js",
"scripts": {
@ -17,10 +17,10 @@
},
"homepage": "https://github.com/keymanapp/keyman#readme",
"dependencies": {
"@keymanapp/keyboard-processor": "^15.0.211",
"@keymanapp/models-types": "^15.0.211",
"@keymanapp/web-environment": "^15.0.211",
"@keymanapp/web-utils": "^15.0.211",
"@keymanapp/keyboard-processor": "^15.0.216",
"@keymanapp/models-types": "^15.0.216",
"@keymanapp/web-environment": "^15.0.216",
"@keymanapp/web-utils": "^15.0.216",
"@types/node": "^11.9.4"
},
"devDependencies": {

View file

@ -1,6 +1,6 @@
{
"name": "@keymanapp/web-sentry-manager",
"version": "15.0.211",
"version": "15.0.216",
"lockfileVersion": 1,
"requires": true,
"dependencies": {

View file

@ -1,6 +1,6 @@
{
"name": "@keymanapp/web-sentry-manager",
"version": "15.0.211",
"version": "15.0.216",
"description": "Common setup for KeymanWeb's Sentry-based error reporting",
"main": "dist/index.js",
"scripts": {
@ -20,7 +20,7 @@
"typescript": "^3.8.3"
},
"dependencies": {
"@keymanapp/web-environment": "^15.0.211",
"@keymanapp/web-environment": "^15.0.216",
"@sentry/browser": "^5.27.4"
}
}

View file

@ -1,6 +1,6 @@
{
"name": "@keymanapp/web-utils",
"version": "15.0.211",
"version": "15.0.216",
"lockfileVersion": 1,
"requires": true,
"dependencies": {

View file

@ -1,6 +1,6 @@
{
"name": "@keymanapp/web-utils",
"version": "15.0.211",
"version": "15.0.216",
"description": "Common utility functions used throughout other Keyman packages",
"main": "./dist/index.js",
"types": "./dist/index.d.ts",
@ -20,8 +20,8 @@
},
"homepage": "https://github.com/keymanapp/keyman#readme",
"devDependencies": {
"@keymanapp/resources-gosh": "^15.0.211",
"@keymanapp/web-environment": "^15.0.211",
"@keymanapp/resources-gosh": "^15.0.216",
"@keymanapp/web-environment": "^15.0.216",
"@types/node": "^14.0.5",
"typescript": "^3.8.3"
}

View file

@ -1,6 +1,6 @@
{
"name": "@keymanapp/models-templates",
"version": "15.0.211",
"version": "15.0.216",
"lockfileVersion": 2,
"requires": true,
"packages": {

View file

@ -1,6 +1,6 @@
{
"name": "@keymanapp/models-templates",
"version": "15.0.211",
"version": "15.0.216",
"description": "Backing model implementations (templates) for Keyman's modelling layer",
"keywords": [
"lm",
@ -42,8 +42,8 @@
"url": "https://github.com/keymanapp/keyman/issues"
},
"devDependencies": {
"@keymanapp/models-types": "^15.0.211",
"@keymanapp/web-utils": "^15.0.211",
"@keymanapp/models-types": "^15.0.216",
"@keymanapp/web-utils": "^15.0.216",
"@types/chai": "^4.2.11",
"@types/mocha": "^7.0.2",
"@types/node": "^14.0.4",
@ -52,6 +52,6 @@
"typescript": "^3.8.3"
},
"dependencies": {
"@keymanapp/models-wordbreakers": "^15.0.211"
"@keymanapp/models-wordbreakers": "^15.0.216"
}
}

View file

@ -1,6 +1,6 @@
{
"name": "@keymanapp/models-types",
"version": "15.0.211",
"version": "15.0.216",
"lockfileVersion": 1,
"requires": true,
"dependencies": {

View file

@ -1,6 +1,6 @@
{
"name": "@keymanapp/models-types",
"version": "15.0.211",
"version": "15.0.216",
"description": "Type definitions in used in the modeling (lexical model/predictive text) component of Keyman.",
"types": "./index.d.ts",
"scripts": {

View file

@ -1,6 +1,6 @@
{
"name": "@keymanapp/models-wordbreakers",
"version": "15.0.211",
"version": "15.0.216",
"lockfileVersion": 2,
"requires": true,
"packages": {

View file

@ -1,6 +1,6 @@
{
"name": "@keymanapp/models-wordbreakers",
"version": "15.0.211",
"version": "15.0.216",
"description": "Word breakers bundled in the modeling layer",
"keywords": [
"lexical model",
@ -40,7 +40,7 @@
"url": "https://github.com/keymanapp/keyman/issues"
},
"devDependencies": {
"@keymanapp/models-types": "^15.0.211",
"@keymanapp/models-types": "^15.0.216",
"@types/chai": "^4.2.11",
"@types/mocha": "^7.0.2",
"chai": "^4.3.4",

View file

@ -1,6 +1,6 @@
{
"name": "@keymanapp/lexical-model-layer",
"version": "15.0.211",
"version": "15.0.216",
"lockfileVersion": 2,
"requires": true,
"packages": {

View file

@ -1,6 +1,6 @@
{
"name": "@keymanapp/lexical-model-layer",
"version": "15.0.211",
"version": "15.0.216",
"description": "Keyman/Predictive Text integration layer",
"main": "build/index.js",
"scripts": {
@ -21,8 +21,8 @@
},
"homepage": "https://github.com/keymanapp/keyman#readme",
"devDependencies": {
"@keymanapp/models-types": "^15.0.211",
"@keymanapp/resources-gosh": "^15.0.211",
"@keymanapp/models-types": "^15.0.216",
"@keymanapp/resources-gosh": "^15.0.216",
"@types/node": "^10.17.21",
"chai": "^4.3.4",
"karma": "^6.3.4",
@ -46,10 +46,10 @@
"typescript": "^3.8.3"
},
"dependencies": {
"@keymanapp/models-templates": "^15.0.211",
"@keymanapp/models-wordbreakers": "^15.0.211",
"@keymanapp/web-environment": "^15.0.211",
"@keymanapp/web-utils": "^15.0.211",
"@keymanapp/models-templates": "^15.0.216",
"@keymanapp/models-wordbreakers": "^15.0.216",
"@keymanapp/web-environment": "^15.0.216",
"@keymanapp/web-utils": "^15.0.216",
"es6-shim": "^0.35.5",
"string.prototype.codepointat": "^0.2.1",
"string.prototype.startswith": "^0.2.0"

View file

@ -1,33 +1,22 @@
#! /bin/bash
#!/usr/bin/env bash
#
# Compiles the Language Modeling Layer for common use in predictive text and autocorrective applications.
# Designed for optimal compatibility with the Keyman Suite.
#
## START STANDARD BUILD SCRIPT INCLUDE
# adjust relative paths as necessary
THIS_SCRIPT="$(greadlink -f "${BASH_SOURCE[0]}" 2>/dev/null || readlink -f "${BASH_SOURCE[0]}")"
. "$(dirname "$THIS_SCRIPT")/../../../../resources/build/build-utils.sh"
. "$KEYMAN_ROOT/resources/shellHelperFunctions.sh"
## END STANDARD BUILD SCRIPT INCLUDE
display_usage ( ) {
echo "build.sh [-clean]"
echo
echo " -clean to erase pre-existing build products before a re-build"
}
# Fails the build if a specified file does not exist.
assert ( ) {
if ! [ -f $1 ]; then
fail "Build failed."
exit 1
fi
}
# Prints a nice, common error message.
fail ( ) {
FAILURE_MSG="$1"
if [[ "$FAILURE_MSG" == "" ]]; then
FAILURE_MSG="Unknown failure."
fi
echo "${ERROR_RED}$FAILURE_MSG${NORMAL}"
exit 1
}
SOURCE="testing/one-stage-embedded-webworker"
echo "Node.js + dependencies check"

View file

@ -1,33 +1,22 @@
#! /bin/bash
#!/usr/bin/env bash
#
# Compiles the Language Modeling Layer for common use in predictive text and autocorrective applications.
# Designed for optimal compatibility with the Keyman Suite.
#
## START STANDARD BUILD SCRIPT INCLUDE
# adjust relative paths as necessary
THIS_SCRIPT="$(greadlink -f "${BASH_SOURCE[0]}" 2>/dev/null || readlink -f "${BASH_SOURCE[0]}")"
. "$(dirname "$THIS_SCRIPT")/../../../../resources/build/build-utils.sh"
. "$KEYMAN_ROOT/resources/shellHelperFunctions.sh"
## END STANDARD BUILD SCRIPT INCLUDE
display_usage ( ) {
echo "build.sh [-clean]"
echo
echo " -clean to erase pre-existing build products before a re-build"
}
# Fails the build if a specified file does not exist.
assert ( ) {
if ! [ -f $1 ]; then
fail "Build failed."
exit 1
fi
}
# Prints a nice, common error message.
fail ( ) {
FAILURE_MSG="$1"
if [[ "$FAILURE_MSG" == "" ]]; then
FAILURE_MSG="Unknown failure."
fi
echo "${ERROR_RED}$FAILURE_MSG${NORMAL}"
exit 1
}
SOURCE="testing/two-stage-embedded-webworker"
COMPILED_WORKER="worker.js"

View file

@ -1 +1,3 @@
*/build/
*/build/
*/*_source.zip
index.html

148
common/test/keyboards/build.sh Normal file → Executable file
View file

@ -21,6 +21,9 @@ display_usage() {
echo " --keyboard, -k Build only keyboards (not packages)"
echo " --kmcomp path Specify path to kmcomp.exe, defaults"
echo " to windows/bin/developer/kmcomp.exe"
echo " --zip-source Create zip file for source of each"
echo " keyboard for artifact tests"
echo " --index Build index.html for artifact tests"
echo
echo "Targets (all unless specified):"
@ -37,6 +40,9 @@ QUIET=false
DEBUG=false
CLEAN=false
KEYBOARDS_ONLY=false
CUSTOM_KMCOMP=
INDEX=false
ZIPSOURCE=false
KMCOMP="$KEYMAN_ROOT/windows/bin/developer/kmcomp.exe"
TARGETS=()
@ -61,9 +67,16 @@ while [[ $# -gt 0 ]] ; do
--keyboard|-k)
KEYBOARDS_ONLY=true
;;
--zip-source)
ZIPSOURCE=true
;;
--index)
INDEX=true
;;
--kmcomp)
shift
KMCOMP="$1"
CUSTOM_KMCOMP=true
;;
*)
TARGETS+=("$key")
@ -75,35 +88,35 @@ done
# don't currently have a binary version of kmcomp available
# during Linux and macOS builds, so that will need to be
# manually sourced.
KMCOMP_LAUNCHER=
case "${OSTYPE}" in
"cygwin")
KMCOMP_LAUNCHER=
;;
"msys")
KMCOMP_LAUNCHER=
;;
"darwin"*)
# For Catalina (10.15) onwards, must use wine64
base_macos_ver=10.15
macos_ver=$(sw_vers -productVersion)
if verlt "$macos_ver" "$base_macos_ver"; then
if ! $CUSTOM_KMCOMP; then
case "${OSTYPE}" in
"cygwin")
;;
"msys")
;;
"darwin"*)
# For Catalina (10.15) onwards, must use wine64
base_macos_ver=10.15
macos_ver=$(sw_vers -productVersion)
if verlt "$macos_ver" "$base_macos_ver"; then
KMCOMP_LAUNCHER=wine
else
# On Catalina, and later versions:
# wine-4.12.1 works; wine-5.0, wine-5.7 do not.
# retrieve these from:
# `brew tap gcenx/wine && brew install --cask --no-quarantine wine-crossover`
# may also need to `sudo spctl --master-disable`
KMCOMP_LAUNCHER=wine64
KMCOMP="$(dirname $KMCOMP)/kmcomp.x64.exe"
fi
;;
*)
KMCOMP_LAUNCHER=wine
else
# On Catalina, and later versions:
# wine-4.12.1 works; wine-5.0, wine-5.7 do not.
# retrieve these from:
# `brew tap gcenx/wine && brew install --cask --no-quarantine wine-crossover`
# may also need to `sudo spctl --master-disable`
KMCOMP_LAUNCHER=wine64
KMCOMP="$(dirname $KMCOMP)/kmcomp.x64.exe"
fi
;;
*)
KMCOMP_LAUNCHER=wine
;;
esac
;;
esac
fi
# Build list of available targets from subfolders, if none specified
if [ ${#TARGETS[@]} == 0 ]; then
@ -120,22 +133,30 @@ if ! $QUIET; then
"QUIET: $QUIET" \
"KEYBOARDS_ONLY: $KEYBOARDS_ONLY" \
"TARGETS: ${TARGETS[@]}" \
"ZIPSOURCE: $ZIPSOURCE" \
"INDEX: $INDEX" \
""
fi
clean() {
local kpj="$1.kpj" ss=
local kpj="$1.kpj" ss= s=
if $QUIET; then
ss=-ss
s=-s
fi
pushd "$1" > /dev/null
$KMCOMP_LAUNCHER "$KMCOMP" -c $ss "$kpj"
if [ -f build.sh ]; then
./build.sh -c $s
else
$KMCOMP_LAUNCHER "$KMCOMP" -c $ss "$kpj"
fi
popd > /dev/null
}
build() {
local kpj="$1.kpj" d= t= ss= target=
local kpj="$1.kpj" d= t= ss= target= s= k=
if $KEYBOARDS_ONLY; then
k=-k
t=-t
target="$1.kmn"
fi
@ -143,12 +164,24 @@ build() {
d=-d
fi
if $QUIET; then
s=-s
ss=-ss
fi
# -w - treat warnings as errors, we'll force this
# -cfc - check filename conventions
pushd "$1" > /dev/null
$KMCOMP_LAUNCHER "$KMCOMP" $d $ss -w -cfc "$kpj" $t "$target"
if [ -f build.sh ]; then
./build.sh $d $k $s
else
$KMCOMP_LAUNCHER "$KMCOMP" $d $ss -w -cfc "$kpj" $t "$target"
fi
popd > /dev/null
}
zipsource() {
local target="$1"
pushd "$1" > /dev/null
7z a -r -x!build -x"!$target.kpj.user" "${target}_source.zip" .
popd > /dev/null
}
@ -156,16 +189,57 @@ build() {
for TARGET in "${TARGETS[@]}"; do
if $CLEAN; then
echo
echo_heading "Cleaning target $TARGET"
echo
if ! $QUIET; then
echo
echo_heading "Cleaning target $TARGET"
echo
fi
clean "$TARGET"
else
echo
echo_heading "Building target $TARGET"
echo
if ! $QUIET; then
echo
echo_heading "Building target $TARGET"
echo
fi
build "$TARGET"
if $ZIPSOURCE; then
zipsource "$TARGET"
fi
fi
done
###
if $INDEX; then
if $CLEAN; then
rm -f "$THIS_DIR/index.html"
else
cat << EOF > "$THIS_DIR/index.html"
<!DOCTYPE html>
<html>
<head>
<meta charset='utf-8'>
<title>Test Keyboards - $VERSION_WITH_TAG</title>
</head>
<body>
<h1>Test Keyboards - $VERSION_WITH_TAG</h1>
<ul>
EOF
for TARGET in "${TARGETS[@]}"; do
if $ZIPSOURCE; then
echo " <li><a href='$TARGET/build/$TARGET.kmp'>$TARGET.kmp</a> (<a href='$TARGET/${TARGET}_source.zip'>source</a>)</li>" >> "$THIS_DIR/index.html"
else
echo " <li><a href='$TARGET/build/$TARGET.kmp'>$TARGET.kmp</a></li>" >> "$THIS_DIR/index.html"
fi
done
cat << 'EOF' >> "$THIS_DIR/index.html"
</ul>
</body>
</html>
EOF
fi
fi
exit 0

View file

@ -1,6 +1,6 @@
c full_caps_3620_3621 generated from template at 2021-12-01 08:45:15
c with name "full_caps_3620_3621"
store(&VERSION) '10.0'
store(&VERSION) '15.0'
store(&NAME) 'full_caps_3620_3621'
store(&COPYRIGHT) '©'
store(&KEYBOARDVERSION) '1.0'

View file

@ -0,0 +1,36 @@
Obolo Chwerty Keyboard Change History
====================
1.2.1 (2021-11-23)
----------------
* Removed accent key from numbers row on default layer, and from symbols row on shift layer.
1.2.0 (2021-07-05)
----------------
* Updated keycap for key 6 to match output on mobile shift layer, and added longpress for ^
* Activated spacebar on layer alt for mobile/tablet layout
* Updated documentation
* Miscellaneous minor updates
1.1.2 (2021-02-04)
----------------
* Updated output for keys CH and SH on SHIFT layer to match key cap on touchscreen and desktop.
* Resolved capslock issue for keys CH, SH, Ọ and N̄ on desktop.
* Added long press on touchscreen for frequently used accented letters.
* Added the Naira sign (₦) and Ñ (an alternative where software cannot render N̄ well, though Ñ is not part of the Obolo orthography.)
1.1.1 (2020-10-27)
----------------
* Increment version number to force recompile of touch layout
1.1 (2020-07-07)
----------------
* Moved the high tone (which is not required, except in primers) to long press on low tone button (for touchscreen).
* Changed backspace behavior for ch, sh, n̄.
* Added long press for Q, H, X and C keys on touchscreen.
* Added hyphen-dash (a frequently used mark) to default and shift layers for touchscreen.
* Fixed typo and omissions in documentation.
1.0 (2019-07-20)
----------------
* Created by Rogers Katelem Edeh

View file

@ -0,0 +1,21 @@
The MIT License (MIT)
© 2019 - 2021 Rogers Katelem Edeh
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

View file

@ -0,0 +1,36 @@
Obolo Chwerty keyboard
==============
© 2019 - 2021 Rogers Katelem Edeh
Version 1.2.0
Description
-----------
NOTE: This keyboard has been modified from the original for the purposes of testing https://github.com/keymanapp/keyman/issues/6347. It is not intended to be used for general purposes, and is not the final release version. Changes made:
* Files renamed
* Font and PHP help have been removed (reduce distribution size)
Obolo Chwerty Keyboard is a keyboard layout for the Obolo language of Nigeria. This layout covers the need of every dialect in that language.
On this keyboard, accents are typed after the base letters. So, to type Obolo language, simply tap the given latters and tap the appropriate accent key to place the accent on the letter.
Links
-----
https://keyman.com/keyboards/obolo_chwerty
Supported Platforms
-------------------
* Windows
* macOS
* Linux
* Web
* iPhone
* iPad
* Android phone
* Android tablet
* Mobile devices
* Desktop devices
* Tablet devices

View file

@ -0,0 +1,7 @@
{
"license": "mit",
"languages": [
"ann-Latn"
],
"description": "Obolo Chwerty Keyboard: A keyboard layout for the Obolo language of Nigeria. It covers the need of every dialect in that language"
}

View file

@ -0,0 +1,183 @@
<?xml version="1.0" encoding="utf-8"?>
<KeymanDeveloperProject>
<Options>
<BuildPath>$PROJECTPATH\build</BuildPath>
<CompilerWarningsAsErrors>True</CompilerWarningsAsErrors>
<WarnDeprecatedCode>True</WarnDeprecatedCode>
<CheckFilenameConventions>True</CheckFilenameConventions>
<ProjectType>keyboard</ProjectType>
</Options>
<Files>
<File>
<ID>id_e2041c991cdc20c570b342a5803447b0</ID>
<Filename>obolo_chwerty_6347.kmn</Filename>
<Filepath>source\obolo_chwerty_6347.kmn</Filepath>
<FileVersion>1.2.1</FileVersion>
<FileType>.kmn</FileType>
<Details>
<Name>Obolo Chwerty</Name>
<Copyright>© 2019-2022 Rogers Katelem Edeh</Copyright>
<Message>A keyboard layout (chwerty) for the Obolo language of Nigeria. The keyboard covers the need of every dialect in that language.</Message>
</Details>
</File>
<File>
<ID>id_4ed7acb803d5177bff445780f774fdb3</ID>
<Filename>obolo_chwerty_6347.kps</Filename>
<Filepath>source\obolo_chwerty_6347.kps</Filepath>
<FileVersion></FileVersion>
<FileType>.kps</FileType>
<Details>
<Name>Obolo Chwerty</Name>
<Copyright>© 2019-2022 Rogers Katelem Edeh</Copyright>
</Details>
</File>
<File>
<ID>id_ede98e4633e239f933cbfd1f4e1b766c</ID>
<Filename>HISTORY.md</Filename>
<Filepath>HISTORY.md</Filepath>
<FileVersion></FileVersion>
<FileType>.md</FileType>
</File>
<File>
<ID>id_53e892b8b41cc4caece1cfd5ef21d6e7</ID>
<Filename>LICENSE.md</Filename>
<Filepath>LICENSE.md</Filepath>
<FileVersion></FileVersion>
<FileType>.md</FileType>
</File>
<File>
<ID>id_0730bb7c2e8f9ea2438b52e419dd86c9</ID>
<Filename>README.md</Filename>
<Filepath>README.md</Filepath>
<FileVersion></FileVersion>
<FileType>.md</FileType>
</File>
<File>
<ID>id_fa9ac62e52c7671ac61602e3583305fd</ID>
<Filename>obolo_chwerty_6347.keyboard_info</Filename>
<Filepath>obolo_chwerty_6347.keyboard_info</Filepath>
<FileVersion></FileVersion>
<FileType>.keyboard_info</FileType>
</File>
<File>
<ID>id_ef2a383b75a0364689701ecbf2f6fefa</ID>
<Filename>obolo_chwerty_6347.ico</Filename>
<Filepath>source\obolo_chwerty_6347.ico</Filepath>
<FileVersion></FileVersion>
<FileType>.ico</FileType>
<ParentFileID>id_e2041c991cdc20c570b342a5803447b0</ParentFileID>
</File>
<File>
<ID>id_fa2b1b4a5977c1283d061d23611709ef</ID>
<Filename>obolo_chwerty_6347.kvk</Filename>
<Filepath>source\..\build\obolo_chwerty_6347.kvk</Filepath>
<FileVersion></FileVersion>
<FileType>.kvk</FileType>
<ParentFileID>id_4ed7acb803d5177bff445780f774fdb3</ParentFileID>
</File>
<File>
<ID>id_13adcc1b6b8e23edd35cfc6ab7c245b0</ID>
<Filename>obolo_chwerty_6347.kmx</Filename>
<Filepath>source\..\build\obolo_chwerty_6347.kmx</Filepath>
<FileVersion></FileVersion>
<FileType>.kmx</FileType>
<ParentFileID>id_4ed7acb803d5177bff445780f774fdb3</ParentFileID>
</File>
<File>
<ID>id_3ec4dad3d83c69fc4b33eb86d401d8cb</ID>
<Filename>obolo_chwerty_6347.js</Filename>
<Filepath>source\..\build\obolo_chwerty_6347.js</Filepath>
<FileVersion></FileVersion>
<FileType>.js</FileType>
<ParentFileID>id_4ed7acb803d5177bff445780f774fdb3</ParentFileID>
</File>
<File>
<ID>id_f6212220adf6c5eb0ae25c33cb973c64</ID>
<Filename>chwerty_default.png</Filename>
<Filepath>source\welcome\chwerty_default.png</Filepath>
<FileVersion></FileVersion>
<FileType>.png</FileType>
<ParentFileID>id_4ed7acb803d5177bff445780f774fdb3</ParentFileID>
</File>
<File>
<ID>id_cd62e578000692c9966c069950904d06</ID>
<Filename>chwerty_keycombi.png</Filename>
<Filepath>source\welcome\chwerty_keycombi.png</Filepath>
<FileVersion></FileVersion>
<FileType>.png</FileType>
<ParentFileID>id_4ed7acb803d5177bff445780f774fdb3</ParentFileID>
</File>
<File>
<ID>id_2d29737f21e65a75ca98a9c3ab1f4a6f</ID>
<Filename>chwerty_mobi_alt.png</Filename>
<Filepath>source\welcome\chwerty_mobi_alt.png</Filepath>
<FileVersion></FileVersion>
<FileType>.png</FileType>
<ParentFileID>id_4ed7acb803d5177bff445780f774fdb3</ParentFileID>
</File>
<File>
<ID>id_2d856489cc6083c4b74a1b8c2b528785</ID>
<Filename>chwerty_mobi_default.png</Filename>
<Filepath>source\welcome\chwerty_mobi_default.png</Filepath>
<FileVersion></FileVersion>
<FileType>.png</FileType>
<ParentFileID>id_4ed7acb803d5177bff445780f774fdb3</ParentFileID>
</File>
<File>
<ID>id_ee5bdb44f34cd08e1c6012f91790c302</ID>
<Filename>chwerty_mobi_shift.png</Filename>
<Filepath>source\welcome\chwerty_mobi_shift.png</Filepath>
<FileVersion></FileVersion>
<FileType>.png</FileType>
<ParentFileID>id_4ed7acb803d5177bff445780f774fdb3</ParentFileID>
</File>
<File>
<ID>id_743e9cd02f1d4004a5320b9faa355587</ID>
<Filename>chwerty_shift.png</Filename>
<Filepath>source\welcome\chwerty_shift.png</Filepath>
<FileVersion></FileVersion>
<FileType>.png</FileType>
<ParentFileID>id_4ed7acb803d5177bff445780f774fdb3</ParentFileID>
</File>
<File>
<ID>id_a81a3f903e8ce052259e09e4a6fbabb0</ID>
<Filename>chwertyftkey1.png</Filename>
<Filepath>source\welcome\chwertyftkey1.png</Filepath>
<FileVersion></FileVersion>
<FileType>.png</FileType>
<ParentFileID>id_4ed7acb803d5177bff445780f774fdb3</ParentFileID>
</File>
<File>
<ID>id_cb8167846a4ac07edd78e5a39a7cc587</ID>
<Filename>chwertyftkey2.png</Filename>
<Filepath>source\welcome\chwertyftkey2.png</Filepath>
<FileVersion></FileVersion>
<FileType>.png</FileType>
<ParentFileID>id_4ed7acb803d5177bff445780f774fdb3</ParentFileID>
</File>
<File>
<ID>id_7325a11eaf4f66357aa7185056091802</ID>
<Filename>chwertyftkey3.png</Filename>
<Filepath>source\welcome\chwertyftkey3.png</Filepath>
<FileVersion></FileVersion>
<FileType>.png</FileType>
<ParentFileID>id_4ed7acb803d5177bff445780f774fdb3</ParentFileID>
</File>
<File>
<ID>id_724e5b4c63f10bc0abf7077f7c3172fc</ID>
<Filename>welcome.htm</Filename>
<Filepath>source\welcome\welcome.htm</Filepath>
<FileVersion></FileVersion>
<FileType>.htm</FileType>
<ParentFileID>id_4ed7acb803d5177bff445780f774fdb3</ParentFileID>
</File>
<File>
<ID>id_8da344c4cea6f467013357fe099006f5</ID>
<Filename>readme.htm</Filename>
<Filepath>source\readme.htm</Filepath>
<FileVersion></FileVersion>
<FileType>.htm</FileType>
<ParentFileID>id_4ed7acb803d5177bff445780f774fdb3</ParentFileID>
</File>
</Files>
</KeymanDeveloperProject>

View file

@ -0,0 +1,7 @@
/* tone keys colour */
.android .kmw-keyboard-obolo_chwerty_6347 #default-T_GRV {color: #02ff02;}
.android .kmw-keyboard-obolo_chwerty_6347 #default-T_CCM {color: #02ff02;}
.android .kmw-keyboard-obolo_chwerty_6347 #shift-T_GRV {color: #02ff02;}
.android .kmw-keyboard-obolo_chwerty_6347 #shift-T_CCM {color: #02ff02;}
.android .kmw-keyboard-obolo_chwerty_6347 #caps-T_GRV {color: #02ff02;}
.android .kmw-keyboard-obolo_chwerty_6347 #caps-T_CCM {color: #02ff02;}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

View file

@ -0,0 +1,254 @@
store(&VERSION) '15.0'
store(&NAME) 'Obolo Chwerty #6347'
store(&COPYRIGHT) '© 2019-2022 Rogers Katelem Edeh'
store(&TARGETS) 'any'
store(&VISUALKEYBOARD) 'obolo_chwerty_6347.kvks'
store(&LAYOUTFILE) 'obolo_chwerty_6347.keyman-touch-layout'
store(&BITMAP) 'obolo_chwerty_6347.ico'
store(&MESSAGE) 'A keyboard layout (chwerty) for the Obolo language of Nigeria. The keyboard covers the need of every dialect in that language.'
store(&KMW_HELPTEXT) 'A simple keyboard layout (chwerty) to help you type very easily in Obolo language.'
store(&KEYBOARDVERSION) '1.2.1'
store(&KMW_EMBEDCSS) 'obolo_chwerty_6347.css'
begin Unicode > use(main)
begin NewContext > use(NewContext)
begin PostKeystroke > use(PostKeystroke)
c store(capskeys) [CAPS K_A] [CAPS K_B] [CAPS K_C] [CAPS K_D] [CAPS K_E] [CAPS K_F] [CAPS K_G] [CAPS K_H] [CAPS K_I] [CAPS K_J] [CAPS K_K] [CAPS K_L] [CAPS K_M] [CAPS K_N] [CAPS K_O] [CAPS K_P] [CAPS K_Q] [CAPS K_R] [CAPS K_S] [CAPS K_T] [CAPS K_U] [CAPS K_V] [CAPS K_W] [CAPS K_X] [CAPS K_Y] [CAPS K_Z]
c store(caps) 'A' 'B' 'N̄' 'D' 'E' 'F' 'G' 'SH' 'I' 'J' 'K' 'L' 'M' 'N' 'O' 'P' 'CH' 'R' 'S' 'T' 'U' 'V' 'W' 'Ọ' 'Y' 'Z'
store(digit) '0'..'9'
group(NewContext) readonly
nomatch > use(detectStartOfSentence)
group(PostKeystroke) readonly
if(&layerChanged = "0") if(&layer = 'numeric') any(digit) > context
if(&layer = 'caps') > context
if(&layerChanged = "0") > use(detectStartOfSentence)
group(detectStartOfSentence) readonly
store(sentencePunctuation) '.?!‽'
nul > layer('shift')
any(sentencePunctuation) ' ' > layer('shift')
any(sentencePunctuation) ' ' > layer('shift')
nomatch > layer('default')
c group(main) using keys
c + any(key) > index(out, 1)
store(accentibles) 'aeiọoumnAEIỌOUMNn̄'
store(accents) [T_GRV] [T_ACU] [T_CCM] [T_CRN] [SHIFT T_GRV] [SHIFT T_ACU] [SHIFT T_CCM] [SHIFT T_CRN] [CAPS T_GRV] [CAPS T_ACU] [CAPS T_CCM] [CAPS T_CRN] c [K_BKQUOTE] [K_BKSLASH]
store(nasals) 'mnMN'
store(nnas) [NCAPS T_CCM] [NCAPS T_CRN] [SHIFT NCAPS T_CCM] [SHIFT NCAPS T_CRN] [CAPS T_CCM] [CAPS T_CRN] c [K_BKSLASH] [SHIFT K_BKSLASH]
store(vow) 'aeiouAEIOU'
store(grave) 'àèìòùÀÈÌÒÙ'
store(acute) 'áéíóúÁÉÍÓÚ'
store(circum) 'âêîôûÂÊÎÔÛ'
store(caron) 'ǎěǐǒǔǍĚǏǑǓ'
store(acnasals) 'ḿńḾŃ'
store(spguy) 'mnọMNỌ'
store(spguyop) 'ḿǹộḾǸỘ'
store(erase) [NCAPS K_BKSP] [NCAPS SHIFT K_BKSP] [CAPS K_BKSP] [NCAPS ALT K_BKSP]
store(gravekeys) [NCAPS T_GRV] [SHIFT NCAPS T_GRV] [CAPS T_GRV] [K_BKQUOTE]
store(acutekeys) [NCAPS T_ACU] [SHIFT NCAPS T_ACU] [CAPS T_ACU] [SHIFT K_BKQUOTE]
store(circumflexkeys) [NCAPS T_CCM] [SHIFT NCAPS T_CCM] [CAPS T_CCM] [K_BKSLASH]
store(caronkeys) [NCAPS T_CRN] [SHIFT NCAPS T_CRN] [CAPS T_CRN] [SHIFT K_BKSLASH]
group(main) using keys
c + any(capskeys) > index(caps, 1) c by self to solve caps
+ [NCAPS T_ENG] > dk(1)
+ [SHIFT NCAPS T_ENG] > dk(2)
+ [CAPS T_ENG] > dk(3)
c caps
+ [CAPS K_A] > 'A'
+ [CAPS K_B] > 'B'
+ [CAPS K_D] > 'D'
+ [CAPS K_E] > 'E'
+ [CAPS K_F] > 'F'
+ [CAPS K_G] > 'G'
+ [CAPS K_I] > 'I'
+ [CAPS K_J] > 'J'
+ [CAPS K_K] > 'K'
+ [CAPS K_L] > 'L'
+ [CAPS K_M] > 'M'
+ [CAPS K_N] > 'N'
+ [CAPS K_O] > 'O'
+ [CAPS K_P] > 'P'
+ [CAPS K_R] > 'R'
+ [CAPS K_S] > 'S'
+ [CAPS K_T] > 'T'
+ [CAPS K_U] > 'U'
+ [CAPS K_V] > 'V'
+ [CAPS K_W] > 'W'
+ [CAPS K_Y] > 'Y'
+ [CAPS K_Z] > 'Z'
+ [CAPS K_Q] > 'CH'
+ [CAPS K_H] > 'SH'
+ [CAPS K_X] > 'Ọ'
+ [CAPS K_C] > 'N̄'
+ [NCAPS K_Q] > 'ch'
+ [NCAPS K_H] > 'sh'
+ [NCAPS K_X] > 'ọ'
+ [NCAPS K_C] > 'n̄'
+ [SHIFT CAPS K_Q] > 'Ch'
+ [SHIFT CAPS K_H] > 'Sh'
+ [SHIFT CAPS K_X] > 'ọ'
+ [SHIFT CAPS K_C] > 'n̄'
+ [SHIFT NCAPS K_Q] > 'Ch'
+ [SHIFT NCAPS K_H] > 'Sh'
+ [SHIFT NCAPS K_X] > 'Ọ'
+ [SHIFT NCAPS K_C] > 'N̄'
+ [SHIFT K_6] > '₦'
c (for touch layout)
+ [NCAPS T_Q] > 'ch'
+ [NCAPS SHIFT T_Q] > 'Ch'
+ [CAPS T_Q] > 'CH'
+ [NCAPS T_H] > 'sh'
+ [NCAPS SHIFT T_H] > 'Sh'
+ [CAPS T_H] > 'SH'
+ [NCAPS T_X] > 'ọ'
+ [NCAPS SHIFT T_X] > 'Ọ'
+ [CAPS T_X] > 'Ọ'
+ [NCAPS T_C] > 'n̄'
+ [NCAPS SHIFT T_C] > 'N̄'
+ [CAPS T_C] > 'N̄'
c for mobile longpress
c + [SHIFT T_MWG] > 'M̀'
c + [T_MWG] > 'm̀'
c + [SHIFT T_ORWG] > 'Ọ̀'
c + [T_ORWG] > 'ọ̀'
c English equivalent (for desktop)
']' + [CAPS K_C] > 'C'
']' + [NCAPS K_C] > 'c'
']' + [SHIFT NCAPS K_C] > 'C'
']' + [SHIFT CAPS K_C] > 'c'
']' + [CAPS K_X] > 'X'
']' + [NCAPS K_X] > 'x'
']' + [SHIFT NCAPS K_X] > 'X'
']' + [SHIFT CAPS K_X] > 'x'
']' + [CAPS K_H] > 'H'
']' + [NCAPS K_H] > 'h'
']' + [SHIFT NCAPS K_H] > 'H'
']' + [SHIFT CAPS K_H] > 'h'
']' + [CAPS K_Q] > 'Q'
']' + [NCAPS K_Q] > 'q'
']' + [NCAPS SHIFT K_Q] > 'Q'
']' + [SHIFT CAPS K_Q] > 'q'
']' + [SHIFT K_6] > '^'
c space modifier accents
']' + [K_BKQUOTE] > "`"
']' + [SHIFT K_BKQUOTE] > "´"
']' + [K_BKSLASH] > "ˆ"
']' + [SHIFT K_BKSLASH] > "ˇ"
c English equivalent (for touch layout)
dk(1) + [NCAPS T_Q] > 'q'
dk(2) + [NCAPS SHIFT T_Q] > 'Q'
dk(3) + [CAPS T_Q] > 'Q'
dk(1) + [NCAPS T_H] > 'h'
dk(2) + [SHIFT NCAPS T_H] > 'H'
dk(3) + [CAPS T_H] > 'H'
dk(1) + [NCAPS T_X] > 'x'
dk(2) + [SHIFT NCAPS T_X] > 'X'
dk(3) + [CAPS T_X] > 'X'
dk(1) + [NCAPS T_C] > 'c'
dk(2) + [SHIFT NCAPS T_C] > 'C'
dk(3) + [CAPS T_C] > 'C'
dk(1) + [NCAPS K_S] > 'ṣ'
dk(2) + [SHIFT NCAPS K_S] > 'Ṣ'
dk(3) + [CAPS K_S] > 'Ṣ'
c deadkey for tones (touch layout only)
dk(1) + [NCAPS T_GRV] > "`"
dk(2) + [SHIFT NCAPS T_GRV] > "`"
dk(3) + [CAPS T_GRV] > "`"
dk(1) + [NCAPS T_ACU] > "´"
dk(2) + [SHIFT NCAPS T_ACU] > "´"
dk(3) + [CAPS T_ACU] > "´"
dk(1) + [NCAPS T_CCM] > "ˆ"
dk(2) + [SHIFT NCAPS T_CCM] > "ˆ"
dk(3) + [CAPS T_CCM] > "ˆ"
dk(1) + [NCAPS T_CRN] > "ˇ"
dk(2) + [SHIFT NCAPS T_CRN] > "ˇ"
dk(3) + [CAPS T_CRN] > "ˇ"
dk(1) + [NCAPS K_HYPHEN] > "¯"
dk(2) + [SHIFT NCAPS K_HYPHEN] > "¯"
dk(3) + [CAPS K_HYPHEN] > "¯"
c make up for
'm' + any(gravekeys) > 'm̀'
'M' + any(gravekeys) > 'M̀'
'n' + any(gravekeys) > 'ǹ'
'N' + any(gravekeys) > 'Ǹ'
'ọ' + any(gravekeys) > 'ọ̀'
'Ọ' + any(gravekeys) > 'Ọ̀'
'ọ' + any(acutekeys) > 'ọ́'
'Ọ' + any(acutekeys) > 'Ọ́'
'ọ' + any(circumflexkeys) > 'ộ'
'Ọ' + any(circumflexkeys) > 'Ộ'
'ọ' + any(caronkeys) > 'ọ̌'
'Ọ' + any(caronkeys) > 'Ọ̌'
'n̄' + [K_BKSLASH] > 'ñ'
'N̄' + [K_BKSLASH] > 'Ñ'
's' + [K_BKSLASH] > 'ṣ'
'S' + [K_BKSLASH] > 'Ṣ'
c any and index
any(vow) + any(gravekeys) > index(grave,1)
any(vow) + any(acutekeys) > index(acute,1)
any(vow) + any(circumflexkeys) > index(circum,1)
any(vow) + any(caronkeys) > index(caron,1)
any(nasals) + any(acutekeys) > index(acnasals,1)
c change backspace behaviour for special diagraphs
'ch' + any(erase) > nul
'Ch' + any(erase) > nul
'CH' + any(erase) > nul
'sh' + any(erase) > nul
'Sh' + any(erase) > nul
'SH' + any(erase) > nul
'n̄' + any(erase) > nul
'N̄' + any(erase) > nul
c virtual keys
any(grave) + any(erase) > index(vow,1)
any(acute) + any(erase) > index(vow,1)
any(circum) + any(erase) > index(vow,1)
any(caron) + any(erase) > index(vow,1)
any(spguyop) + any(erase) > index(spguy,1)
any(nasals) + any(nnas) > context beep c prevent certain accents on nasal consonants
c notany(accentibles) + any(accents) > context beep c prevent diacritics (stacking, on empty space, and plain consonants)

View file

@ -0,0 +1,121 @@
<?xml version="1.0" encoding="utf-8"?>
<Package>
<System>
<KeymanDeveloperVersion>15.0.206.0</KeymanDeveloperVersion>
<FileVersion>7.0</FileVersion>
</System>
<Options>
<ExecuteProgram></ExecuteProgram>
<ReadMeFile>readme.htm</ReadMeFile>
<MSIFileName></MSIFileName>
<MSIOptions></MSIOptions>
<FollowKeyboardVersion/>
</Options>
<StartMenu>
<Folder></Folder>
<Items/>
</StartMenu>
<Info>
<Version URL=""></Version>
<Name URL="">Obolo Chwerty</Name>
<Copyright URL="">© 2019-2022 Rogers Katelem Edeh</Copyright>
<Author URL="">Rogers Katelem Edeh</Author>
</Info>
<Files>
<File>
<Name>..\build\obolo_chwerty_6347.kvk</Name>
<Description>File obolo_chwerty_6347.kvk</Description>
<CopyLocation>0</CopyLocation>
<FileType>.kvk</FileType>
</File>
<File>
<Name>..\build\obolo_chwerty_6347.kmx</Name>
<Description>Keyboard Obolo Chwerty</Description>
<CopyLocation>0</CopyLocation>
<FileType>.kmx</FileType>
</File>
<File>
<Name>..\build\obolo_chwerty_6347.js</Name>
<Description>File obolo_chwerty_6347.js</Description>
<CopyLocation>0</CopyLocation>
<FileType>.js</FileType>
</File>
<File>
<Name>welcome\chwerty_default.png</Name>
<Description>File chwerty_default.png</Description>
<CopyLocation>0</CopyLocation>
<FileType>.png</FileType>
</File>
<File>
<Name>welcome\chwerty_keycombi.png</Name>
<Description>File chwerty_keycombi.png</Description>
<CopyLocation>0</CopyLocation>
<FileType>.png</FileType>
</File>
<File>
<Name>welcome\chwerty_mobi_alt.png</Name>
<Description>File chwerty_mobi_alt.png</Description>
<CopyLocation>0</CopyLocation>
<FileType>.png</FileType>
</File>
<File>
<Name>welcome\chwerty_mobi_default.png</Name>
<Description>File chwerty_mobi_default.png</Description>
<CopyLocation>0</CopyLocation>
<FileType>.png</FileType>
</File>
<File>
<Name>welcome\chwerty_mobi_shift.png</Name>
<Description>File chwerty_mobi_shift.png</Description>
<CopyLocation>0</CopyLocation>
<FileType>.png</FileType>
</File>
<File>
<Name>welcome\chwerty_shift.png</Name>
<Description>File chwerty_shift.png</Description>
<CopyLocation>0</CopyLocation>
<FileType>.png</FileType>
</File>
<File>
<Name>welcome\chwertyftkey1.png</Name>
<Description>File chwertyftkey1.png</Description>
<CopyLocation>0</CopyLocation>
<FileType>.png</FileType>
</File>
<File>
<Name>welcome\chwertyftkey2.png</Name>
<Description>File chwertyftkey2.png</Description>
<CopyLocation>0</CopyLocation>
<FileType>.png</FileType>
</File>
<File>
<Name>welcome\chwertyftkey3.png</Name>
<Description>File chwertyftkey3.png</Description>
<CopyLocation>0</CopyLocation>
<FileType>.png</FileType>
</File>
<File>
<Name>welcome\welcome.htm</Name>
<Description>File welcome.htm</Description>
<CopyLocation>0</CopyLocation>
<FileType>.htm</FileType>
</File>
<File>
<Name>readme.htm</Name>
<Description>File readme.htm</Description>
<CopyLocation>0</CopyLocation>
<FileType>.htm</FileType>
</File>
</Files>
<Keyboards>
<Keyboard>
<Name>Obolo Chwerty</Name>
<ID>obolo_chwerty</ID>
<Version>1.2.1</Version>
<Languages>
<Language ID="ann-Latn">Obolo (Andoni)</Language>
</Languages>
</Keyboard>
</Keyboards>
<Strings/>
</Package>

View file

@ -0,0 +1,114 @@
<?xml version="1.0" encoding="utf-8"?>
<visualkeyboard>
<header>
<version>10.0</version>
<kbdname>obolo_chwerty</kbdname>
<flags>
<key102/>
</flags>
</header>
<encoding name="unicode" fontname="Tahoma" fontsize="12">
<layer shift="">
<key vkey="K_oDF">`</key>
<key vkey="K_1">1</key>
<key vkey="K_2">2</key>
<key vkey="K_3">3</key>
<key vkey="K_4">4</key>
<key vkey="K_5">5</key>
<key vkey="K_6">6</key>
<key vkey="K_7">7</key>
<key vkey="K_8">8</key>
<key vkey="K_9">9</key>
<key vkey="K_0">0</key>
<key vkey="K_HYPHEN">-</key>
<key vkey="K_EQUAL">=</key>
<key vkey="K_Q">ch</key>
<key vkey="K_W">w</key>
<key vkey="K_E">e</key>
<key vkey="K_R">r</key>
<key vkey="K_T">t</key>
<key vkey="K_Y">y</key>
<key vkey="K_U">u</key>
<key vkey="K_I">i</key>
<key vkey="K_O">o</key>
<key vkey="K_P">p</key>
<key vkey="K_LBRKT">[</key>
<key vkey="K_RBRKT">]</key>
<key vkey="K_A">a</key>
<key vkey="K_S">s</key>
<key vkey="K_D">d</key>
<key vkey="K_F">f</key>
<key vkey="K_G">g</key>
<key vkey="K_H">sh</key>
<key vkey="K_J">j</key>
<key vkey="K_K">k</key>
<key vkey="K_L">l</key>
<key vkey="K_COLON">;</key>
<key vkey="K_BKQUOTE">`</key>
<key vkey="K_Z">z</key>
<key vkey="K_X">ọ</key>
<key vkey="K_C">n̄</key>
<key vkey="K_V">v</key>
<key vkey="K_B">b</key>
<key vkey="K_N">n</key>
<key vkey="K_M">m</key>
<key vkey="K_COMMA">,</key>
<key vkey="K_PERIOD">.</key>
<key vkey="K_SLASH">/</key>
<key vkey="K_SPACE"></key>
<key vkey="K_QUOTE">'</key>
<key vkey="K_BKSLASH">\ˆ</key>
</layer>
<layer shift="S">
<key vkey="K_oDF">¬</key>
<key vkey="K_1">!</key>
<key vkey="K_2">@</key>
<key vkey="K_3">#</key>
<key vkey="K_4">$</key>
<key vkey="K_5">%</key>
<key vkey="K_7">&amp;</key>
<key vkey="K_8">*</key>
<key vkey="K_9">(</key>
<key vkey="K_0">)</key>
<key vkey="K_HYPHEN">_</key>
<key vkey="K_EQUAL">+</key>
<key vkey="K_Q">CH</key>
<key vkey="K_W">W</key>
<key vkey="K_E">E</key>
<key vkey="K_R">R</key>
<key vkey="K_T">T</key>
<key vkey="K_Y">Y</key>
<key vkey="K_U">U</key>
<key vkey="K_I">I</key>
<key vkey="K_O">O</key>
<key vkey="K_P">P</key>
<key vkey="K_LBRKT">{</key>
<key vkey="K_RBRKT">}</key>
<key vkey="K_QUOTE">"</key>
<key vkey="K_A">A</key>
<key vkey="K_S">S</key>
<key vkey="K_D">D</key>
<key vkey="K_F">F</key>
<key vkey="K_G">G</key>
<key vkey="K_H">SH</key>
<key vkey="K_J">J</key>
<key vkey="K_K">K</key>
<key vkey="K_L">L</key>
<key vkey="K_COLON">:</key>
<key vkey="K_Z">Z</key>
<key vkey="K_X">Ọ</key>
<key vkey="K_C">N̄</key>
<key vkey="K_V">V</key>
<key vkey="K_B">B</key>
<key vkey="K_N">N</key>
<key vkey="K_M">M</key>
<key vkey="K_COMMA">&lt;</key>
<key vkey="K_PERIOD">&gt;</key>
<key vkey="K_SLASH">?</key>
<key vkey="K_SPACE"></key>
<key vkey="K_BKQUOTE">~´</key>
<key vkey="K_BKSLASH">|ˇ</key>
<key vkey="K_6">₦</key>
</layer>
</encoding>
</visualkeyboard>

View file

@ -0,0 +1,28 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Obolo Chwerty</title>
<style type="text/css">
p { font: 10pt Tahoma; }
h1 { font: bold 16pt Tahoma; color: #4444cc; margin-bottom: 2px }
h2 { font: bold 12pt Tahoma; color: #4444cc; }
</style>
</head>
<body>
<h1>Obolo Chwerty</h1>
<p>This is a keyboard layout (chwerty) for the Obolo language of Nigeria. This layout covers the need of every dialect in that language.
<p>NOTE: This keyboard has been modified from the original for the purposes of
testing https://github.com/keymanapp/keyman/issues/6347. It is not intended to
be used for general purposes, and is not the final release version. Changes
made:</p>
<ul>
<li>Files renamed</li>
<li>Font and PHP help have been removed (reduce distribution size)</li>
</ul>
</body>
</html>

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.1 KiB

View file

@ -0,0 +1,97 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" keyword="Obolo, keyboard">
<title>Start Using Obolo Chwerty Keyboard</title>
<style type="text/css">
p { font: 10pt Tahoma; }
h1 { font: bold 16pt Tahoma; color: #000080; margin-bottom: 2px }
h2 { font: bold 12pt Tahoma; color: #000080; }
</style>
</head>
<body>
<body lang="en-GB" dir="ltr">
<p align="center" style="margin-top: 0.42cm; border-top: none; border-bottom: 1px dotted #000080; border-left: none; border-right: none; padding-top: 0cm; padding-bottom: 0.05cm; padding-left: 0cm; padding-right: 0cm; font-weight: light; page-break-after: avoid">
<font face="Tahoma"><font size="12" style="font-size: 28pt">Obolo Chwerty Keyboard</font></font></p>
<p align="center">Rogers Katelem Edeh</p><br/>
<h1>Onu! (Welcome!)</h1>
<p>
This is the Chwerty layout for writing Obolo language. In this keyboard, accents are typed after the base letters.
<p>
So, to type "usem Obolo" with this keyboard layout, simply tap the given letters and tap the appropriate accents to pace them on the letters.
<p>
<img src="chwerty_keycombi.png"
alt="Key Combination"
style="width:695px;height:189px;">
<h1>Keyboard Layout</h1>
<p>
The keyboard uses CHWERTY layout.
<p>
"Ebi Obolo" do not have 'C' and 'H' in their "abiche" (alphabet), but they have the 'CH' sound (as well as the 'SH' sound in some dialect).<br/>
This and other features make Obolo Language unique, hence this unique layout.
<p>
<h2>Desktop Layout</h2>
<!-- Insert Keyboard Layout Images or HTML here -->
<img src="chwerty_default.png"
alt="Keyboard Layout (default)"
style="width:695px;height:189px;">
<p>
<img src="chwerty_shift.png"
alt="Keyboard Layout (shift)"
style="width:695px;height:189px;">
<p>
<h2>Mobile/Tablet Layout</h2>
<p>Due to the size and number of keys, some characters are hidden in the long press. Press and hold on the key with a little dot on the top right to reveal and use them.</p>
<p>
<img src="chwerty_mobi_default.png"
alt="Keyboard Layout Mobile (default)"
style="width:695px;height:189px;">
<p>
<img src="chwerty_mobi_shift.png"
alt="Keyboard Layout Mobile (shift)"
style="width:695px;height:189px;">
<p>
<img src="chwerty_mobi_alt.png"
alt="Keyboard Layout Mobile (alt)"
style="width:695px;height:189px;">
<p>
In this language, note that:
<p>(1) Only one tone mark can sit on a letter. So, diacritic stacking is not allowed.
<p>(2) Some tones are not to be marked in writing; they are not required. They are only used in primers and for beginners.
<p>(3) Some letters do not accept some accents.
<p>(4) Others do not accept accents at all.
<p>
Except for the optional accents which are not required, the keyboard will notify you when you inadvertently go against the spelling rules.
<p>
On mobile devices, tap the deadkey (⨷) then the given key to get the English letter in that position.
<p>
On desktop, if what you are doing does not support 'n̄' or does not render it well, then you can tap the BACKSLASH key after the 'n̄' to get 'ñ'.
<p>
The position of your BACKSLASH key depends on type of keyboard you are using. You can tell where your BACKSLASH key is by looking at the shape of the ENTER/RETURN key on your keyboard
<p>The three keyboard types and the respective position of the BACKSLASH keys are shown below:
<p>
<img src="chwertyftkey1.png"
alt="ANSI Keyboard">
<p>
<img src="chwertyftkey2.png"
alt="ISO/JIS Keyboard">
<p>
<img src="chwertyftkey3.png"
alt="Backward-L Keyboard">
<p>
Use this sentence to test your keyboard and character set:
<p>
mkpinyọn̄ kè evion̄ îben nchat balì ije bûu kire ǹnàan̄ iraka òsô mè ùkộ fiâm ikilap mudim m̀fọ̀tọ̀ shishini me èwê ozugbo
<p>
MKPINYỌN̄ KÈ EVION̄ ÎBEN NCHAT BALÌ IJE BÛU KIRE ǸNÀAN̄ IRAKA ÒSÔ MÈ ÙKỘ FIÂM IKILAP MUDIM M̀FỌ̀TỌ̀ SHISHINI ME ÈWÊ OZUGBO
<p>
Keyman ... type to the world in your language.
<br/>
Obolo Chwerty ... ge inu me usem kwun̄ ria si ere geelek me linyọn̄.
<p>Onirọ-o!
<p>Itọn̄ ikup inyi Awaji!
</body>
</html>

View file

@ -0,0 +1,36 @@
Obolo Chwerty Keyboard Change History
====================
1.2.1 (2021-11-23)
----------------
* Removed accent key from numbers row on default layer, and from symbols row on shift layer.
1.2.0 (2021-07-05)
----------------
* Updated keycap for key 6 to match output on mobile shift layer, and added longpress for ^
* Activated spacebar on layer alt for mobile/tablet layout
* Updated documentation
* Miscellaneous minor updates
1.1.2 (2021-02-04)
----------------
* Updated output for keys CH and SH on SHIFT layer to match key cap on touchscreen and desktop.
* Resolved capslock issue for keys CH, SH, Ọ and N̄ on desktop.
* Added long press on touchscreen for frequently used accented letters.
* Added the Naira sign (₦) and Ñ (an alternative where software cannot render N̄ well, though Ñ is not part of the Obolo orthography.)
1.1.1 (2020-10-27)
----------------
* Increment version number to force recompile of touch layout
1.1 (2020-07-07)
----------------
* Moved the high tone (which is not required, except in primers) to long press on low tone button (for touchscreen).
* Changed backspace behavior for ch, sh, n̄.
* Added long press for Q, H, X and C keys on touchscreen.
* Added hyphen-dash (a frequently used mark) to default and shift layers for touchscreen.
* Fixed typo and omissions in documentation.
1.0 (2019-07-20)
----------------
* Created by Rogers Katelem Edeh

View file

@ -0,0 +1,21 @@
The MIT License (MIT)
© 2019 - 2021 Rogers Katelem Edeh
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

View file

@ -0,0 +1,37 @@
Obolo Chwerty keyboard
==============
© 2019 - 2021 Rogers Katelem Edeh
Version 1.2.0
Description
-----------
NOTE: This keyboard has been modified from the original for the purposes of testing https://github.com/keymanapp/keyman/issues/6351. It is not intended to be used for general purposes, and is not the final release version. Changes made:
* NCAPS mismatches have been resolved
* Files renamed
* Font and PHP help have been removed (reduce distribution size)
Obolo Chwerty Keyboard is a keyboard layout for the Obolo language of Nigeria. This layout covers the need of every dialect in that language.
On this keyboard, accents are typed after the base letters. So, to type Obolo language, simply tap the given latters and tap the appropriate accent key to place the accent on the letter.
Links
-----
https://keyman.com/keyboards/obolo_chwerty
Supported Platforms
-------------------
* Windows
* macOS
* Linux
* Web
* iPhone
* iPad
* Android phone
* Android tablet
* Mobile devices
* Desktop devices
* Tablet devices

View file

@ -0,0 +1,7 @@
{
"license": "mit",
"languages": [
"ann-Latn"
],
"description": "Obolo Chwerty Keyboard: A keyboard layout for the Obolo language of Nigeria. It covers the need of every dialect in that language"
}

View file

@ -0,0 +1,183 @@
<?xml version="1.0" encoding="utf-8"?>
<KeymanDeveloperProject>
<Options>
<BuildPath>$PROJECTPATH\build</BuildPath>
<CompilerWarningsAsErrors>True</CompilerWarningsAsErrors>
<WarnDeprecatedCode>True</WarnDeprecatedCode>
<CheckFilenameConventions>True</CheckFilenameConventions>
<ProjectType>keyboard</ProjectType>
</Options>
<Files>
<File>
<ID>id_e2041c991cdc20c570b342a5803447b0</ID>
<Filename>obolo_chwerty_6351.kmn</Filename>
<Filepath>source\obolo_chwerty_6351.kmn</Filepath>
<FileVersion>1.2.1</FileVersion>
<FileType>.kmn</FileType>
<Details>
<Name>Obolo Chwerty</Name>
<Copyright>© 2019-2022 Rogers Katelem Edeh</Copyright>
<Message>A keyboard layout (chwerty) for the Obolo language of Nigeria. The keyboard covers the need of every dialect in that language.</Message>
</Details>
</File>
<File>
<ID>id_4ed7acb803d5177bff445780f774fdb3</ID>
<Filename>obolo_chwerty_6351.kps</Filename>
<Filepath>source\obolo_chwerty_6351.kps</Filepath>
<FileVersion></FileVersion>
<FileType>.kps</FileType>
<Details>
<Name>Obolo Chwerty</Name>
<Copyright>© 2019-2022 Rogers Katelem Edeh</Copyright>
</Details>
</File>
<File>
<ID>id_ede98e4633e239f933cbfd1f4e1b766c</ID>
<Filename>HISTORY.md</Filename>
<Filepath>HISTORY.md</Filepath>
<FileVersion></FileVersion>
<FileType>.md</FileType>
</File>
<File>
<ID>id_53e892b8b41cc4caece1cfd5ef21d6e7</ID>
<Filename>LICENSE.md</Filename>
<Filepath>LICENSE.md</Filepath>
<FileVersion></FileVersion>
<FileType>.md</FileType>
</File>
<File>
<ID>id_0730bb7c2e8f9ea2438b52e419dd86c9</ID>
<Filename>README.md</Filename>
<Filepath>README.md</Filepath>
<FileVersion></FileVersion>
<FileType>.md</FileType>
</File>
<File>
<ID>id_fa9ac62e52c7671ac61602e3583305fd</ID>
<Filename>obolo_chwerty_6351.keyboard_info</Filename>
<Filepath>obolo_chwerty_6351.keyboard_info</Filepath>
<FileVersion></FileVersion>
<FileType>.keyboard_info</FileType>
</File>
<File>
<ID>id_ef2a383b75a0364689701ecbf2f6fefa</ID>
<Filename>obolo_chwerty_6351.ico</Filename>
<Filepath>source\obolo_chwerty_6351.ico</Filepath>
<FileVersion></FileVersion>
<FileType>.ico</FileType>
<ParentFileID>id_e2041c991cdc20c570b342a5803447b0</ParentFileID>
</File>
<File>
<ID>id_fa2b1b4a5977c1283d061d23611709ef</ID>
<Filename>obolo_chwerty_6351.kvk</Filename>
<Filepath>source\..\build\obolo_chwerty_6351.kvk</Filepath>
<FileVersion></FileVersion>
<FileType>.kvk</FileType>
<ParentFileID>id_4ed7acb803d5177bff445780f774fdb3</ParentFileID>
</File>
<File>
<ID>id_13adcc1b6b8e23edd35cfc6ab7c245b0</ID>
<Filename>obolo_chwerty_6351.kmx</Filename>
<Filepath>source\..\build\obolo_chwerty_6351.kmx</Filepath>
<FileVersion></FileVersion>
<FileType>.kmx</FileType>
<ParentFileID>id_4ed7acb803d5177bff445780f774fdb3</ParentFileID>
</File>
<File>
<ID>id_3ec4dad3d83c69fc4b33eb86d401d8cb</ID>
<Filename>obolo_chwerty_6351.js</Filename>
<Filepath>source\..\build\obolo_chwerty_6351.js</Filepath>
<FileVersion></FileVersion>
<FileType>.js</FileType>
<ParentFileID>id_4ed7acb803d5177bff445780f774fdb3</ParentFileID>
</File>
<File>
<ID>id_f6212220adf6c5eb0ae25c33cb973c64</ID>
<Filename>chwerty_default.png</Filename>
<Filepath>source\welcome\chwerty_default.png</Filepath>
<FileVersion></FileVersion>
<FileType>.png</FileType>
<ParentFileID>id_4ed7acb803d5177bff445780f774fdb3</ParentFileID>
</File>
<File>
<ID>id_cd62e578000692c9966c069950904d06</ID>
<Filename>chwerty_keycombi.png</Filename>
<Filepath>source\welcome\chwerty_keycombi.png</Filepath>
<FileVersion></FileVersion>
<FileType>.png</FileType>
<ParentFileID>id_4ed7acb803d5177bff445780f774fdb3</ParentFileID>
</File>
<File>
<ID>id_2d29737f21e65a75ca98a9c3ab1f4a6f</ID>
<Filename>chwerty_mobi_alt.png</Filename>
<Filepath>source\welcome\chwerty_mobi_alt.png</Filepath>
<FileVersion></FileVersion>
<FileType>.png</FileType>
<ParentFileID>id_4ed7acb803d5177bff445780f774fdb3</ParentFileID>
</File>
<File>
<ID>id_2d856489cc6083c4b74a1b8c2b528785</ID>
<Filename>chwerty_mobi_default.png</Filename>
<Filepath>source\welcome\chwerty_mobi_default.png</Filepath>
<FileVersion></FileVersion>
<FileType>.png</FileType>
<ParentFileID>id_4ed7acb803d5177bff445780f774fdb3</ParentFileID>
</File>
<File>
<ID>id_ee5bdb44f34cd08e1c6012f91790c302</ID>
<Filename>chwerty_mobi_shift.png</Filename>
<Filepath>source\welcome\chwerty_mobi_shift.png</Filepath>
<FileVersion></FileVersion>
<FileType>.png</FileType>
<ParentFileID>id_4ed7acb803d5177bff445780f774fdb3</ParentFileID>
</File>
<File>
<ID>id_743e9cd02f1d4004a5320b9faa355587</ID>
<Filename>chwerty_shift.png</Filename>
<Filepath>source\welcome\chwerty_shift.png</Filepath>
<FileVersion></FileVersion>
<FileType>.png</FileType>
<ParentFileID>id_4ed7acb803d5177bff445780f774fdb3</ParentFileID>
</File>
<File>
<ID>id_a81a3f903e8ce052259e09e4a6fbabb0</ID>
<Filename>chwertyftkey1.png</Filename>
<Filepath>source\welcome\chwertyftkey1.png</Filepath>
<FileVersion></FileVersion>
<FileType>.png</FileType>
<ParentFileID>id_4ed7acb803d5177bff445780f774fdb3</ParentFileID>
</File>
<File>
<ID>id_cb8167846a4ac07edd78e5a39a7cc587</ID>
<Filename>chwertyftkey2.png</Filename>
<Filepath>source\welcome\chwertyftkey2.png</Filepath>
<FileVersion></FileVersion>
<FileType>.png</FileType>
<ParentFileID>id_4ed7acb803d5177bff445780f774fdb3</ParentFileID>
</File>
<File>
<ID>id_7325a11eaf4f66357aa7185056091802</ID>
<Filename>chwertyftkey3.png</Filename>
<Filepath>source\welcome\chwertyftkey3.png</Filepath>
<FileVersion></FileVersion>
<FileType>.png</FileType>
<ParentFileID>id_4ed7acb803d5177bff445780f774fdb3</ParentFileID>
</File>
<File>
<ID>id_724e5b4c63f10bc0abf7077f7c3172fc</ID>
<Filename>welcome.htm</Filename>
<Filepath>source\welcome\welcome.htm</Filepath>
<FileVersion></FileVersion>
<FileType>.htm</FileType>
<ParentFileID>id_4ed7acb803d5177bff445780f774fdb3</ParentFileID>
</File>
<File>
<ID>id_8da344c4cea6f467013357fe099006f5</ID>
<Filename>readme.htm</Filename>
<Filepath>source\readme.htm</Filepath>
<FileVersion></FileVersion>
<FileType>.htm</FileType>
<ParentFileID>id_4ed7acb803d5177bff445780f774fdb3</ParentFileID>
</File>
</Files>
</KeymanDeveloperProject>

View file

@ -0,0 +1,7 @@
/* tone keys colour */
.android .kmw-keyboard-obolo_chwerty_6351 #default-T_GRV {color: #02ff02;}
.android .kmw-keyboard-obolo_chwerty_6351 #default-T_CCM {color: #02ff02;}
.android .kmw-keyboard-obolo_chwerty_6351 #shift-T_GRV {color: #02ff02;}
.android .kmw-keyboard-obolo_chwerty_6351 #shift-T_CCM {color: #02ff02;}
.android .kmw-keyboard-obolo_chwerty_6351 #caps-T_GRV {color: #02ff02;}
.android .kmw-keyboard-obolo_chwerty_6351 #caps-T_CCM {color: #02ff02;}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

View file

@ -0,0 +1,254 @@
store(&VERSION) '15.0'
store(&NAME) 'Obolo Chwerty #6351'
store(&COPYRIGHT) '© 2019-2022 Rogers Katelem Edeh'
store(&TARGETS) 'any'
store(&VISUALKEYBOARD) 'obolo_chwerty_6351.kvks'
store(&LAYOUTFILE) 'obolo_chwerty_6351.keyman-touch-layout'
store(&BITMAP) 'obolo_chwerty_6351.ico'
store(&MESSAGE) 'A keyboard layout (chwerty) for the Obolo language of Nigeria. The keyboard covers the need of every dialect in that language.'
store(&KMW_HELPTEXT) 'A simple keyboard layout (chwerty) to help you type very easily in Obolo language.'
store(&KEYBOARDVERSION) '1.2.1'
store(&KMW_EMBEDCSS) 'obolo_chwerty_6351.css'
begin Unicode > use(main)
begin NewContext > use(NewContext)
begin PostKeystroke > use(PostKeystroke)
c store(capskeys) [CAPS K_A] [CAPS K_B] [CAPS K_C] [CAPS K_D] [CAPS K_E] [CAPS K_F] [CAPS K_G] [CAPS K_H] [CAPS K_I] [CAPS K_J] [CAPS K_K] [CAPS K_L] [CAPS K_M] [CAPS K_N] [CAPS K_O] [CAPS K_P] [CAPS K_Q] [CAPS K_R] [CAPS K_S] [CAPS K_T] [CAPS K_U] [CAPS K_V] [CAPS K_W] [CAPS K_X] [CAPS K_Y] [CAPS K_Z]
c store(caps) 'A' 'B' 'N̄' 'D' 'E' 'F' 'G' 'SH' 'I' 'J' 'K' 'L' 'M' 'N' 'O' 'P' 'CH' 'R' 'S' 'T' 'U' 'V' 'W' 'Ọ' 'Y' 'Z'
store(digit) '0'..'9'
group(NewContext) readonly
nomatch > use(detectStartOfSentence)
group(PostKeystroke) readonly
if(&layerChanged = "0") if(&layer = 'numeric') any(digit) > context
if(&layer = 'caps') > context
if(&layerChanged = "0") > use(detectStartOfSentence)
group(detectStartOfSentence) readonly
store(sentencePunctuation) '.?!‽'
nul > layer('shift')
any(sentencePunctuation) ' ' > layer('shift')
any(sentencePunctuation) ' ' > layer('shift')
nomatch > layer('default')
c group(main) using keys
c + any(key) > index(out, 1)
store(accentibles) 'aeiọoumnAEIỌOUMNn̄'
store(accents) [T_GRV] [T_ACU] [T_CCM] [T_CRN] [SHIFT T_GRV] [SHIFT T_ACU] [SHIFT T_CCM] [SHIFT T_CRN] [CAPS T_GRV] [CAPS T_ACU] [CAPS T_CCM] [CAPS T_CRN] c [K_BKQUOTE] [K_BKSLASH]
store(nasals) 'mnMN'
store(nnas) [NCAPS T_CCM] [NCAPS T_CRN] [SHIFT NCAPS T_CCM] [SHIFT NCAPS T_CRN] [CAPS T_CCM] [CAPS T_CRN] c [K_BKSLASH] [SHIFT K_BKSLASH]
store(vow) 'aeiouAEIOU'
store(grave) 'àèìòùÀÈÌÒÙ'
store(acute) 'áéíóúÁÉÍÓÚ'
store(circum) 'âêîôûÂÊÎÔÛ'
store(caron) 'ǎěǐǒǔǍĚǏǑǓ'
store(acnasals) 'ḿńḾŃ'
store(spguy) 'mnọMNỌ'
store(spguyop) 'ḿǹộḾǸỘ'
store(erase) [NCAPS K_BKSP] [NCAPS SHIFT K_BKSP] [CAPS K_BKSP] [NCAPS ALT K_BKSP]
store(gravekeys) [NCAPS T_GRV] [SHIFT NCAPS T_GRV] [CAPS T_GRV] [K_BKQUOTE]
store(acutekeys) [NCAPS T_ACU] [SHIFT NCAPS T_ACU] [CAPS T_ACU] [SHIFT K_BKQUOTE]
store(circumflexkeys) [NCAPS T_CCM] [SHIFT NCAPS T_CCM] [CAPS T_CCM] [K_BKSLASH]
store(caronkeys) [NCAPS T_CRN] [SHIFT NCAPS T_CRN] [CAPS T_CRN] [SHIFT K_BKSLASH]
group(main) using keys
c + any(capskeys) > index(caps, 1) c by self to solve caps
+ [NCAPS T_ENG] > dk(1)
+ [SHIFT NCAPS T_ENG] > dk(2)
+ [CAPS T_ENG] > dk(3)
c caps
+ [CAPS K_A] > 'A'
+ [CAPS K_B] > 'B'
+ [CAPS K_D] > 'D'
+ [CAPS K_E] > 'E'
+ [CAPS K_F] > 'F'
+ [CAPS K_G] > 'G'
+ [CAPS K_I] > 'I'
+ [CAPS K_J] > 'J'
+ [CAPS K_K] > 'K'
+ [CAPS K_L] > 'L'
+ [CAPS K_M] > 'M'
+ [CAPS K_N] > 'N'
+ [CAPS K_O] > 'O'
+ [CAPS K_P] > 'P'
+ [CAPS K_R] > 'R'
+ [CAPS K_S] > 'S'
+ [CAPS K_T] > 'T'
+ [CAPS K_U] > 'U'
+ [CAPS K_V] > 'V'
+ [CAPS K_W] > 'W'
+ [CAPS K_Y] > 'Y'
+ [CAPS K_Z] > 'Z'
+ [CAPS K_Q] > 'CH'
+ [CAPS K_H] > 'SH'
+ [CAPS K_X] > 'Ọ'
+ [CAPS K_C] > 'N̄'
+ [NCAPS K_Q] > 'ch'
+ [NCAPS K_H] > 'sh'
+ [NCAPS K_X] > 'ọ'
+ [NCAPS K_C] > 'n̄'
+ [SHIFT CAPS K_Q] > 'Ch'
+ [SHIFT CAPS K_H] > 'Sh'
+ [SHIFT CAPS K_X] > 'ọ'
+ [SHIFT CAPS K_C] > 'n̄'
+ [SHIFT NCAPS K_Q] > 'Ch'
+ [SHIFT NCAPS K_H] > 'Sh'
+ [SHIFT NCAPS K_X] > 'Ọ'
+ [SHIFT NCAPS K_C] > 'N̄'
+ [SHIFT K_6] > '₦'
c (for touch layout)
+ [NCAPS T_Q] > 'ch'
+ [NCAPS SHIFT T_Q] > 'Ch'
+ [CAPS T_Q] > 'CH'
+ [NCAPS T_H] > 'sh'
+ [NCAPS SHIFT T_H] > 'Sh'
+ [CAPS T_H] > 'SH'
+ [NCAPS T_X] > 'ọ'
+ [NCAPS SHIFT T_X] > 'Ọ'
+ [CAPS T_X] > 'Ọ'
+ [NCAPS T_C] > 'n̄'
+ [NCAPS SHIFT T_C] > 'N̄'
+ [CAPS T_C] > 'N̄'
c for mobile longpress
c + [SHIFT T_MWG] > 'M̀'
c + [T_MWG] > 'm̀'
c + [SHIFT T_ORWG] > 'Ọ̀'
c + [T_ORWG] > 'ọ̀'
c English equivalent (for desktop)
']' + [CAPS K_C] > 'C'
']' + [NCAPS K_C] > 'c'
']' + [SHIFT NCAPS K_C] > 'C'
']' + [SHIFT CAPS K_C] > 'c'
']' + [CAPS K_X] > 'X'
']' + [NCAPS K_X] > 'x'
']' + [SHIFT NCAPS K_X] > 'X'
']' + [SHIFT CAPS K_X] > 'x'
']' + [CAPS K_H] > 'H'
']' + [NCAPS K_H] > 'h'
']' + [SHIFT NCAPS K_H] > 'H'
']' + [SHIFT CAPS K_H] > 'h'
']' + [CAPS K_Q] > 'Q'
']' + [NCAPS K_Q] > 'q'
']' + [NCAPS SHIFT K_Q] > 'Q'
']' + [SHIFT CAPS K_Q] > 'q'
']' + [SHIFT K_6] > '^'
c space modifier accents
']' + [K_BKQUOTE] > "`"
']' + [SHIFT K_BKQUOTE] > "´"
']' + [K_BKSLASH] > "ˆ"
']' + [SHIFT K_BKSLASH] > "ˇ"
c English equivalent (for touch layout)
dk(1) + [NCAPS T_Q] > 'q'
dk(2) + [NCAPS SHIFT T_Q] > 'Q'
dk(3) + [CAPS T_Q] > 'Q'
dk(1) + [NCAPS T_H] > 'h'
dk(2) + [SHIFT NCAPS T_H] > 'H'
dk(3) + [CAPS T_H] > 'H'
dk(1) + [NCAPS T_X] > 'x'
dk(2) + [SHIFT NCAPS T_X] > 'X'
dk(3) + [CAPS T_X] > 'X'
dk(1) + [NCAPS T_C] > 'c'
dk(2) + [SHIFT NCAPS T_C] > 'C'
dk(3) + [CAPS T_C] > 'C'
dk(1) + [NCAPS K_S] > 'ṣ'
dk(2) + [SHIFT NCAPS K_S] > 'Ṣ'
dk(3) + [CAPS K_S] > 'Ṣ'
c deadkey for tones (touch layout only)
dk(1) + [NCAPS T_GRV] > "`"
dk(2) + [SHIFT NCAPS T_GRV] > "`"
dk(3) + [CAPS T_GRV] > "`"
dk(1) + [NCAPS T_ACU] > "´"
dk(2) + [SHIFT NCAPS T_ACU] > "´"
dk(3) + [CAPS T_ACU] > "´"
dk(1) + [NCAPS T_CCM] > "ˆ"
dk(2) + [SHIFT NCAPS T_CCM] > "ˆ"
dk(3) + [CAPS T_CCM] > "ˆ"
dk(1) + [NCAPS T_CRN] > "ˇ"
dk(2) + [SHIFT NCAPS T_CRN] > "ˇ"
dk(3) + [CAPS T_CRN] > "ˇ"
dk(1) + [NCAPS K_HYPHEN] > "¯"
dk(2) + [SHIFT NCAPS K_HYPHEN] > "¯"
dk(3) + [CAPS K_HYPHEN] > "¯"
c make up for
'm' + any(gravekeys) > 'm̀'
'M' + any(gravekeys) > 'M̀'
'n' + any(gravekeys) > 'ǹ'
'N' + any(gravekeys) > 'Ǹ'
'ọ' + any(gravekeys) > 'ọ̀'
'Ọ' + any(gravekeys) > 'Ọ̀'
'ọ' + any(acutekeys) > 'ọ́'
'Ọ' + any(acutekeys) > 'Ọ́'
'ọ' + any(circumflexkeys) > 'ộ'
'Ọ' + any(circumflexkeys) > 'Ộ'
'ọ' + any(caronkeys) > 'ọ̌'
'Ọ' + any(caronkeys) > 'Ọ̌'
'n̄' + [K_BKSLASH] > 'ñ'
'N̄' + [K_BKSLASH] > 'Ñ'
's' + [K_BKSLASH] > 'ṣ'
'S' + [K_BKSLASH] > 'Ṣ'
c any and index
any(vow) + any(gravekeys) > index(grave,1)
any(vow) + any(acutekeys) > index(acute,1)
any(vow) + any(circumflexkeys) > index(circum,1)
any(vow) + any(caronkeys) > index(caron,1)
any(nasals) + any(acutekeys) > index(acnasals,1)
c change backspace behaviour for special diagraphs
'ch' + any(erase) > nul
'Ch' + any(erase) > nul
'CH' + any(erase) > nul
'sh' + any(erase) > nul
'Sh' + any(erase) > nul
'SH' + any(erase) > nul
'n̄' + any(erase) > nul
'N̄' + any(erase) > nul
c virtual keys
any(grave) + any(erase) > index(vow,1)
any(acute) + any(erase) > index(vow,1)
any(circum) + any(erase) > index(vow,1)
any(caron) + any(erase) > index(vow,1)
any(spguyop) + any(erase) > index(spguy,1)
any(nasals) + any(nnas) > context beep c prevent certain accents on nasal consonants
c notany(accentibles) + any(accents) > context beep c prevent diacritics (stacking, on empty space, and plain consonants)

View file

@ -0,0 +1,121 @@
<?xml version="1.0" encoding="utf-8"?>
<Package>
<System>
<KeymanDeveloperVersion>15.0.206.0</KeymanDeveloperVersion>
<FileVersion>7.0</FileVersion>
</System>
<Options>
<ExecuteProgram></ExecuteProgram>
<ReadMeFile>readme.htm</ReadMeFile>
<MSIFileName></MSIFileName>
<MSIOptions></MSIOptions>
<FollowKeyboardVersion/>
</Options>
<StartMenu>
<Folder></Folder>
<Items/>
</StartMenu>
<Info>
<Version URL=""></Version>
<Name URL="">Obolo Chwerty</Name>
<Copyright URL="">© 2019-2022 Rogers Katelem Edeh</Copyright>
<Author URL="">Rogers Katelem Edeh</Author>
</Info>
<Files>
<File>
<Name>..\build\obolo_chwerty_6351.kvk</Name>
<Description>File obolo_chwerty_6351.kvk</Description>
<CopyLocation>0</CopyLocation>
<FileType>.kvk</FileType>
</File>
<File>
<Name>..\build\obolo_chwerty_6351.kmx</Name>
<Description>Keyboard Obolo Chwerty</Description>
<CopyLocation>0</CopyLocation>
<FileType>.kmx</FileType>
</File>
<File>
<Name>..\build\obolo_chwerty_6351.js</Name>
<Description>File obolo_chwerty_6351.js</Description>
<CopyLocation>0</CopyLocation>
<FileType>.js</FileType>
</File>
<File>
<Name>welcome\chwerty_default.png</Name>
<Description>File chwerty_default.png</Description>
<CopyLocation>0</CopyLocation>
<FileType>.png</FileType>
</File>
<File>
<Name>welcome\chwerty_keycombi.png</Name>
<Description>File chwerty_keycombi.png</Description>
<CopyLocation>0</CopyLocation>
<FileType>.png</FileType>
</File>
<File>
<Name>welcome\chwerty_mobi_alt.png</Name>
<Description>File chwerty_mobi_alt.png</Description>
<CopyLocation>0</CopyLocation>
<FileType>.png</FileType>
</File>
<File>
<Name>welcome\chwerty_mobi_default.png</Name>
<Description>File chwerty_mobi_default.png</Description>
<CopyLocation>0</CopyLocation>
<FileType>.png</FileType>
</File>
<File>
<Name>welcome\chwerty_mobi_shift.png</Name>
<Description>File chwerty_mobi_shift.png</Description>
<CopyLocation>0</CopyLocation>
<FileType>.png</FileType>
</File>
<File>
<Name>welcome\chwerty_shift.png</Name>
<Description>File chwerty_shift.png</Description>
<CopyLocation>0</CopyLocation>
<FileType>.png</FileType>
</File>
<File>
<Name>welcome\chwertyftkey1.png</Name>
<Description>File chwertyftkey1.png</Description>
<CopyLocation>0</CopyLocation>
<FileType>.png</FileType>
</File>
<File>
<Name>welcome\chwertyftkey2.png</Name>
<Description>File chwertyftkey2.png</Description>
<CopyLocation>0</CopyLocation>
<FileType>.png</FileType>
</File>
<File>
<Name>welcome\chwertyftkey3.png</Name>
<Description>File chwertyftkey3.png</Description>
<CopyLocation>0</CopyLocation>
<FileType>.png</FileType>
</File>
<File>
<Name>welcome\welcome.htm</Name>
<Description>File welcome.htm</Description>
<CopyLocation>0</CopyLocation>
<FileType>.htm</FileType>
</File>
<File>
<Name>readme.htm</Name>
<Description>File readme.htm</Description>
<CopyLocation>0</CopyLocation>
<FileType>.htm</FileType>
</File>
</Files>
<Keyboards>
<Keyboard>
<Name>Obolo Chwerty</Name>
<ID>obolo_chwerty</ID>
<Version>1.2.1</Version>
<Languages>
<Language ID="ann-Latn">Obolo (Andoni)</Language>
</Languages>
</Keyboard>
</Keyboards>
<Strings/>
</Package>

View file

@ -0,0 +1,114 @@
<?xml version="1.0" encoding="utf-8"?>
<visualkeyboard>
<header>
<version>10.0</version>
<kbdname>obolo_chwerty</kbdname>
<flags>
<key102/>
</flags>
</header>
<encoding name="unicode" fontname="Tahoma" fontsize="12">
<layer shift="">
<key vkey="K_oDF">`</key>
<key vkey="K_1">1</key>
<key vkey="K_2">2</key>
<key vkey="K_3">3</key>
<key vkey="K_4">4</key>
<key vkey="K_5">5</key>
<key vkey="K_6">6</key>
<key vkey="K_7">7</key>
<key vkey="K_8">8</key>
<key vkey="K_9">9</key>
<key vkey="K_0">0</key>
<key vkey="K_HYPHEN">-</key>
<key vkey="K_EQUAL">=</key>
<key vkey="K_Q">ch</key>
<key vkey="K_W">w</key>
<key vkey="K_E">e</key>
<key vkey="K_R">r</key>
<key vkey="K_T">t</key>
<key vkey="K_Y">y</key>
<key vkey="K_U">u</key>
<key vkey="K_I">i</key>
<key vkey="K_O">o</key>
<key vkey="K_P">p</key>
<key vkey="K_LBRKT">[</key>
<key vkey="K_RBRKT">]</key>
<key vkey="K_A">a</key>
<key vkey="K_S">s</key>
<key vkey="K_D">d</key>
<key vkey="K_F">f</key>
<key vkey="K_G">g</key>
<key vkey="K_H">sh</key>
<key vkey="K_J">j</key>
<key vkey="K_K">k</key>
<key vkey="K_L">l</key>
<key vkey="K_COLON">;</key>
<key vkey="K_BKQUOTE">`</key>
<key vkey="K_Z">z</key>
<key vkey="K_X">ọ</key>
<key vkey="K_C">n̄</key>
<key vkey="K_V">v</key>
<key vkey="K_B">b</key>
<key vkey="K_N">n</key>
<key vkey="K_M">m</key>
<key vkey="K_COMMA">,</key>
<key vkey="K_PERIOD">.</key>
<key vkey="K_SLASH">/</key>
<key vkey="K_SPACE"></key>
<key vkey="K_QUOTE">'</key>
<key vkey="K_BKSLASH">\ˆ</key>
</layer>
<layer shift="S">
<key vkey="K_oDF">¬</key>
<key vkey="K_1">!</key>
<key vkey="K_2">@</key>
<key vkey="K_3">#</key>
<key vkey="K_4">$</key>
<key vkey="K_5">%</key>
<key vkey="K_7">&amp;</key>
<key vkey="K_8">*</key>
<key vkey="K_9">(</key>
<key vkey="K_0">)</key>
<key vkey="K_HYPHEN">_</key>
<key vkey="K_EQUAL">+</key>
<key vkey="K_Q">CH</key>
<key vkey="K_W">W</key>
<key vkey="K_E">E</key>
<key vkey="K_R">R</key>
<key vkey="K_T">T</key>
<key vkey="K_Y">Y</key>
<key vkey="K_U">U</key>
<key vkey="K_I">I</key>
<key vkey="K_O">O</key>
<key vkey="K_P">P</key>
<key vkey="K_LBRKT">{</key>
<key vkey="K_RBRKT">}</key>
<key vkey="K_QUOTE">"</key>
<key vkey="K_A">A</key>
<key vkey="K_S">S</key>
<key vkey="K_D">D</key>
<key vkey="K_F">F</key>
<key vkey="K_G">G</key>
<key vkey="K_H">SH</key>
<key vkey="K_J">J</key>
<key vkey="K_K">K</key>
<key vkey="K_L">L</key>
<key vkey="K_COLON">:</key>
<key vkey="K_Z">Z</key>
<key vkey="K_X">Ọ</key>
<key vkey="K_C">N̄</key>
<key vkey="K_V">V</key>
<key vkey="K_B">B</key>
<key vkey="K_N">N</key>
<key vkey="K_M">M</key>
<key vkey="K_COMMA">&lt;</key>
<key vkey="K_PERIOD">&gt;</key>
<key vkey="K_SLASH">?</key>
<key vkey="K_SPACE"></key>
<key vkey="K_BKQUOTE">~´</key>
<key vkey="K_BKSLASH">|ˇ</key>
<key vkey="K_6">₦</key>
</layer>
</encoding>
</visualkeyboard>

View file

@ -0,0 +1,29 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Obolo Chwerty</title>
<style type="text/css">
p { font: 10pt Tahoma; }
h1 { font: bold 16pt Tahoma; color: #4444cc; margin-bottom: 2px }
h2 { font: bold 12pt Tahoma; color: #4444cc; }
</style>
</head>
<body>
<h1>Obolo Chwerty</h1>
<p>This is a keyboard layout (chwerty) for the Obolo language of Nigeria. This layout covers the need of every dialect in that language.
<p>NOTE: This keyboard has been modified from the original for the purposes of
testing https://github.com/keymanapp/keyman/issues/6351. It is not intended to
be used for general purposes, and is not the final release version. Changes
made:</p>
<ul>
<li>Files renamed</li>
<li>NCAPS mismatches have been resolved</li>
<li>Font and PHP help have been removed (reduce distribution size)</li>
</ul>
</body>
</html>

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.1 KiB

View file

@ -0,0 +1,97 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" keyword="Obolo, keyboard">
<title>Start Using Obolo Chwerty Keyboard</title>
<style type="text/css">
p { font: 10pt Tahoma; }
h1 { font: bold 16pt Tahoma; color: #000080; margin-bottom: 2px }
h2 { font: bold 12pt Tahoma; color: #000080; }
</style>
</head>
<body>
<body lang="en-GB" dir="ltr">
<p align="center" style="margin-top: 0.42cm; border-top: none; border-bottom: 1px dotted #000080; border-left: none; border-right: none; padding-top: 0cm; padding-bottom: 0.05cm; padding-left: 0cm; padding-right: 0cm; font-weight: light; page-break-after: avoid">
<font face="Tahoma"><font size="12" style="font-size: 28pt">Obolo Chwerty Keyboard</font></font></p>
<p align="center">Rogers Katelem Edeh</p><br/>
<h1>Onu! (Welcome!)</h1>
<p>
This is the Chwerty layout for writing Obolo language. In this keyboard, accents are typed after the base letters.
<p>
So, to type "usem Obolo" with this keyboard layout, simply tap the given letters and tap the appropriate accents to pace them on the letters.
<p>
<img src="chwerty_keycombi.png"
alt="Key Combination"
style="width:695px;height:189px;">
<h1>Keyboard Layout</h1>
<p>
The keyboard uses CHWERTY layout.
<p>
"Ebi Obolo" do not have 'C' and 'H' in their "abiche" (alphabet), but they have the 'CH' sound (as well as the 'SH' sound in some dialect).<br/>
This and other features make Obolo Language unique, hence this unique layout.
<p>
<h2>Desktop Layout</h2>
<!-- Insert Keyboard Layout Images or HTML here -->
<img src="chwerty_default.png"
alt="Keyboard Layout (default)"
style="width:695px;height:189px;">
<p>
<img src="chwerty_shift.png"
alt="Keyboard Layout (shift)"
style="width:695px;height:189px;">
<p>
<h2>Mobile/Tablet Layout</h2>
<p>Due to the size and number of keys, some characters are hidden in the long press. Press and hold on the key with a little dot on the top right to reveal and use them.</p>
<p>
<img src="chwerty_mobi_default.png"
alt="Keyboard Layout Mobile (default)"
style="width:695px;height:189px;">
<p>
<img src="chwerty_mobi_shift.png"
alt="Keyboard Layout Mobile (shift)"
style="width:695px;height:189px;">
<p>
<img src="chwerty_mobi_alt.png"
alt="Keyboard Layout Mobile (alt)"
style="width:695px;height:189px;">
<p>
In this language, note that:
<p>(1) Only one tone mark can sit on a letter. So, diacritic stacking is not allowed.
<p>(2) Some tones are not to be marked in writing; they are not required. They are only used in primers and for beginners.
<p>(3) Some letters do not accept some accents.
<p>(4) Others do not accept accents at all.
<p>
Except for the optional accents which are not required, the keyboard will notify you when you inadvertently go against the spelling rules.
<p>
On mobile devices, tap the deadkey (⨷) then the given key to get the English letter in that position.
<p>
On desktop, if what you are doing does not support 'n̄' or does not render it well, then you can tap the BACKSLASH key after the 'n̄' to get 'ñ'.
<p>
The position of your BACKSLASH key depends on type of keyboard you are using. You can tell where your BACKSLASH key is by looking at the shape of the ENTER/RETURN key on your keyboard
<p>The three keyboard types and the respective position of the BACKSLASH keys are shown below:
<p>
<img src="chwertyftkey1.png"
alt="ANSI Keyboard">
<p>
<img src="chwertyftkey2.png"
alt="ISO/JIS Keyboard">
<p>
<img src="chwertyftkey3.png"
alt="Backward-L Keyboard">
<p>
Use this sentence to test your keyboard and character set:
<p>
mkpinyọn̄ kè evion̄ îben nchat balì ije bûu kire ǹnàan̄ iraka òsô mè ùkộ fiâm ikilap mudim m̀fọ̀tọ̀ shishini me èwê ozugbo
<p>
MKPINYỌN̄ KÈ EVION̄ ÎBEN NCHAT BALÌ IJE BÛU KIRE ǸNÀAN̄ IRAKA ÒSÔ MÈ ÙKỘ FIÂM IKILAP MUDIM M̀FỌ̀TỌ̀ SHISHINI ME ÈWÊ OZUGBO
<p>
Keyman ... type to the world in your language.
<br/>
Obolo Chwerty ... ge inu me usem kwun̄ ria si ere geelek me linyọn̄.
<p>Onirọ-o!
<p>Itọn̄ ikup inyi Awaji!
</body>
</html>

View file

@ -0,0 +1,34 @@
the 99 keyboard
==============
Version 1.0
Description
-----------
the 99 generated from template. kmp.json manually edited to have system.fileVersion = "99.0"
to validate the minimum keyboard version is checked before package installation.
Links
-----
See Github issue #6254
https://github.com/keymanapp/keyman/issues/6254
Copyright
---------
See [LICENSE.md](LICENSE.md)
Supported Platforms
-------------------
* Windows
* macOS
* Linux
* Web
* iPhone
* iPad
* Android phone
* Android tablet
* Mobile devices
* Desktop devices
* Tablet devices

View file

@ -0,0 +1,63 @@
#!/usr/bin/env bash
set -e
set -u
## START STANDARD BUILD SCRIPT INCLUDE
# adjust relative paths as necessary
THIS_SCRIPT="$(greadlink -f "${BASH_SOURCE[0]}" 2>/dev/null || readlink -f "${BASH_SOURCE[0]}")"
. "$(dirname "$THIS_SCRIPT")/../../../../resources/build/build-utils.sh"
# . "$KEYMAN_ROOT/resources/shellHelperFunctions.sh"
## END STANDARD BUILD SCRIPT INCLUDE
THIS_DIR="$(dirname "$THIS_SCRIPT")"
display_usage() {
echo "Usage: build.sh [-c]"
exit $1
}
# Parse args
shopt -s nocasematch
CLEAN=false
DEBUG=false
QUIET=false
KEYBOARDS_ONLY=false
while [[ $# -gt 0 ]] ; do
key="$1"
case $key in
--help|-h|-\?)
display_usage 0
;;
--clean|-c)
CLEAN=true
;;
--debug|-d)
DEBUG=true
;;
--silent|-s)
QUIET=true
;;
--keyboard|-k)
KEYBOARDS_ONLY=true
;;
*)
display_usage 1
;;
esac
shift
done
if $CLEAN; then
if ! $QUIET; then
echo Cleaning the_99.kmp from build/
fi
rm -rf "$THIS_DIR"/build
else
if ! $QUIET; then
echo Copying the_99.kmp to build/
fi
mkdir -p "$THIS_DIR"/build
cp "$THIS_DIR"/the_99.kmp build/the_99.kmp
fi

Binary file not shown.

View file

@ -1,6 +1,6 @@
{
"name": "@keymanapp/lexical-model-compiler",
"version": "15.0.211",
"version": "15.0.216",
"lockfileVersion": 2,
"requires": true,
"packages": {

View file

@ -1,6 +1,6 @@
{
"name": "@keymanapp/lexical-model-compiler",
"version": "15.0.211",
"version": "15.0.216",
"description": "Keyman Developer lexical model compiler",
"keywords": [
"keyboard",
@ -37,14 +37,14 @@
"node": ">=12.0.0"
},
"dependencies": {
"@keymanapp/models-types": "^15.0.211",
"@keymanapp/models-types": "^15.0.216",
"commander": "^3.0.0",
"typescript": "^3.8.3",
"xml2js": "^0.4.19"
},
"devDependencies": {
"@keymanapp/models-templates": "^15.0.211",
"@keymanapp/models-wordbreakers": "^15.0.211",
"@keymanapp/models-templates": "^15.0.216",
"@keymanapp/models-wordbreakers": "^15.0.216",
"@types/chai": "^4.1.7",
"@types/mocha": "^5.2.7",
"@types/node": "^10.14.6",

View file

@ -1,6 +1,6 @@
{
"name": "@keymanapp/developer-server",
"version": "15.0.211",
"version": "15.0.216",
"lockfileVersion": 2,
"requires": true,
"packages": {

View file

@ -1,6 +1,6 @@
{
"name": "@keymanapp/developer-server",
"version": "15.0.211",
"version": "15.0.216",
"description": "Keyman Developer backend server",
"main": "dist/index.js",
"scripts": {

View file

@ -287,7 +287,7 @@ open class InputViewController: UIInputViewController, KeymanWebDelegate {
return
}
// What the actual heck, Apple. Apparently, in system-keyboard mode, this is also self-triggered if we erase back to a newline.
// Apparently, in system-keyboard mode, this is also self-triggered if we erase back to a newline.
// Refer to https://github.com/keymanapp/keyman/pull/2770 for context.
if self.swallowBackspaceTextChange && Manager.shared.isSystemKeyboard && textDocumentProxy.documentContextBeforeInput == "\n" {
self.swallowBackspaceTextChange = false
@ -333,6 +333,11 @@ open class InputViewController: UIInputViewController, KeymanWebDelegate {
return
}
if numCharsToDelete > 0 && textDocumentProxy.documentContextBeforeInput == nil {
textDocumentProxy.deleteBackward()
return
}
for _ in 0..<numCharsToDelete {
let oldContext = textDocumentProxy.documentContextBeforeInput ?? ""
textDocumentProxy.deleteBackward()

View file

@ -19,7 +19,7 @@ verify_on_mac
#xcodebuild -exportLocalizations -project "engine/KMEI/KeymanEngine.xcodeproj"
#xcodebuild -exportLocalizations -project "keyman/Keyman/Keyman.xcodeproj"
#xcodebuild -exportLocalizations -project "keyman/Keyman/Keyman.xcodeproj"
BASE_EXPORT_FOLDER="build/crowdin"
START_DIRECTORY=`pwd`
@ -52,8 +52,8 @@ echo ""
echo "---------------------------------------------"
echo "iOS base i18n files have been exported."
echo "Examine the contents of the folder at"
echo "${SUCCESS_GREEN}$KEYMAN_ROOT/ios/$BASE_EXPORT_FOLDER${NORMAL}"
echo "${COLOR_GREEN}$KEYMAN_ROOT/ios/$BASE_EXPORT_FOLDER${COLOR_RESET}"
echo "and compare against the iOS entries within"
echo "${SUCCESS_GREEN}$KEYMAN_ROOT/crowdin.yml${NORMAL}"
echo "${COLOR_GREEN}$KEYMAN_ROOT/crowdin.yml${COLOR_RESET}"
echo "---------------------------------------------"

View file

@ -207,7 +207,7 @@ update_bundle ( ) {
downloadKeyboardPackage "$DEFAULT_KBD_ID" "$base_dir/$BUNDLE_PATH/$DEFAULT_KBD_ID.kmp"
downloadModelPackage "$DEFAULT_LM_ID" "$base_dir/$BUNDLE_PATH/$DEFAULT_LM_ID.model.kmp"
echo "${SUCCESS_GREEN}Packages successfully updated${NORMAL}"
echo "${COLOR_GREEN}Packages successfully updated${COLOR_RESET}"
# If we aren't downloading resources, make sure copies of them already exist!
fi
@ -317,7 +317,7 @@ if [ $DO_KEYMANAPP = true ]; then
VERSION=$VERSION \
VERSION_WITH_TAG=$VERSION_WITH_TAG \
VERSION_ENVIRONMENT=$VERSION_ENVIRONMENT \
UPLOAD_SENTRY=$UPLOAD_SENTRY
UPLOAD_SENTRY=$UPLOAD_SENTRY
fi
echo ""

View file

@ -21,5 +21,5 @@
"ts-node",
"typescript"
],
"version": "15.0.211"
"version": "15.0.216"
}

View file

@ -1,9 +1,17 @@
keyman (15.0.90-1) UNRELEASED; urgency=medium
* Consolidate source packages
Closes: #1007123
-- Eberhard Beilharz <eb1@sil.org> Mon, 02 Aug 2021 18:13:58 +0200
keyman-config (14.0.287-1) unstable; urgency=medium
* New upstream release
* Re-release to Debian
-- Eberhard Beilharz <eb1@sil.org> Fri, 11 Mar 2022 12:32:34 +0100
keyman-config (14.0.284-3) unstable; urgency=medium
* Team upload

View file

@ -36,17 +36,19 @@ Build-Depends:
xvfb,
metacity,
gawk,
Standards-Version: 4.5.1
Standards-Version: 4.6.0
Vcs-Git: https://github.com/keymanapp/keyman.git
Vcs-Browser: https://github.com/keymanapp/keyman
Homepage: https://www.keyman.com
Rules-Requires-Root: binary-targets
Package: keyman
Architecture: all
Depends:
libglib2.0-bin,
python3-keyman-config (= ${binary:Version}),
ibus-keyman (= ${binary:Version}),
ibus-keyman (>= ${binary:Version}),
ibus-keyman (<< ${binary:Version}.1~),
${misc:Depends},
Recommends:
onboard-keyman,

View file

@ -1,27 +1,105 @@
Format: http://anonscm.debian.org/viewvc/dep/web/deps/dep5.mdwn?view=markup&pathrev=174
Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
Upstream-Name: keyman
Upstream-Contact: Keyman team <support@keyman.com>
Source: https://github.com/keymanapp/keyman
Files: *
Copyright: Copyright (C) 2018-2021 SIL International
Copyright: 2018-2022 SIL International
License: MIT
Files: linux/ibus-keyman/*
Copyright: 2004-2021 SIL International
Copyright: 2004-2022 SIL International
License: GPL-2+
Files: linux/ibus-keyman/src/keymanutil.c
linux/ibus-keyman/src/keymanutil.h
linux/ibus-keyman/src/kmpdetails.c
linux/ibus-keyman/src/kmpdetails.h
Copyright: 2009-2021 SIL International
Copyright: 2009-2022 SIL International
License: GPL-2+ or MIT
Files: linux/ibus-keyman/src/keyman-service.c
linux/ibus-keyman/src/keyman-service.h
Copyright: 2018-2021 SIL International
linux/keyman-config/buildtools/help2md
Copyright: 2018-2022 SIL International
License: GPL-3+
Files: linux/ibus-keyman/config.rpath
linux/ibus-keyman/m4/*
Copyright: 1996-2003, 2009-2015, Free Software Foundation, Inc.
License: FSFULLR
Files: linux/ibus-keyman/Makefile.am
linux/ibus-keyman/Makefile.in
linux/ibus-keyman/compile
linux/ibus-keyman/configure.ac
linux/ibus-keyman/depcomp
linux/ibus-keyman/m4/Makefile.am
linux/ibus-keyman/m4/Makefile.in
linux/ibus-keyman/missing
linux/ibus-keyman/src/Makefile.am
linux/ibus-keyman/src/Makefile.in
linux/ibus-keyman/src/engine.c
linux/ibus-keyman/src/engine.h
linux/ibus-keyman/src/main.c
linux/ibus-keyman/src/test/Makefile.am
linux/ibus-keyman/src/test/Makefile.in
linux/ibus-keyman/tap-driver.sh
linux/ibus-keyman/test-driver
linux/ibus-keyman/tests/Makefile.am
linux/ibus-keyman/tests/Makefile.in
Copyright: 1994-2017, Free Software Foundation, Inc.
2009-2022, SIL International
License: GPL-2+
Files: linux/ibus-keyman/m4/gettext.m4
linux/ibus-keyman/m4/intl.m4
linux/ibus-keyman/m4/intldir.m4
linux/ibus-keyman/m4/intlmacosx.m4
linux/ibus-keyman/m4/lcmessage.m4
linux/ibus-keyman/m4/nls.m4
linux/ibus-keyman/m4/po.m4
linux/ibus-keyman/m4/progtest.m4
Copyright: 1995-2014, Free Software Foundation, Inc.
License: FSFULLR or GPL-3 or LGPL-3
Files: linux/ibus-keyman/install-sh
Copyright: 1994, X Consortium
2018, SIL International
License: MIT
Files: linux/ibus-keyman/INSTALL
linux/ibus-keyman/po/Makefile.in.in
Copyright: 1994-1996, 1999-2002, 2004-2016, Free Software Foundation, Inc.
1995-1997, 2000-2007, 2009-2010, Ulrich Drepper <drepper@gnu.ai.mit.edu>
License: FSFAP
Files: linux/ibus-keyman/icons/Makefile.am
linux/ibus-keyman/icons/Makefile.in
Copyright: 1994-2017, Free Software Foundation, Inc.
2018, SIL International
License: LGPL-2+
Files: linux/ibus-keyman/tests/ibusimcontext.c
linux/ibus-keyman/tests/ibusimcontext.h
Copyright: 2008-2010, Peng Huang <shawn.p.huang@gmail.com>
2008-2010, Red Hat, Inc.
2008-2013, Peng Huang <shawn.p.huang@gmail.com>
2008-2021, Red Hat, Inc.
2015-2021, Takao Fujiwara <takao.fujiwara1@gmail.com>
2021-2022, SIL International
License: LGPL-2.1+
Files: linux/keyman-config/buildtools/help2man
Copyright: 1997-2005, 2009-2017, 2020-2021, Free Software Foundation, Inc.
License: GPL-3+
Files: debian/com.keyman.config.appdata.xml
debian/com.keyman.ibus_keyman.metainfo.xml
Copyright: 2019 Daniel Glassey <wdg@debian.org>
2022 SIL International
License: MIT
License: MIT
Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
@ -61,6 +139,24 @@ License: GPL-2+
License version 2 can be found in the file
`/usr/share/common-licenses/GPL-2'.
License: GPL-3
This package is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, version 3.
.
This package is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
.
You should have received a copy of the GNU General Public License
along with this package; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
.
On Debian systems, the full text of the GNU General Public
License version 3 can be found in the file
`/usr/share/common-licenses/GPL-3'.
License: GPL-3+
This package is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@ -79,3 +175,55 @@ License: GPL-3+
On Debian systems, the full text of the GNU General Public
License version 3 can be found in the file
`/usr/share/common-licenses/GPL-3'.
License: FSFULLR
This file is free software; the Free Software Foundation gives unlimited
permission to copy and/or distribute it, with or without modifications, as long
as this notice is preserved.
License: FSFAP
Copying and distribution of this file, with or without modification, are
permitted in any medium without royalty provided the copyright notice and this
notice are preserved. This file is offered as-is, without any warranty.
License: LGPL-2+
This library is free software; you can redistribute it and/or modify it under
the terms of the GNU Library General Public License as published by the Free
Software Foundation; either version 2 of the License, or (at your option)
any later version.
.
This library is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more
details.
.
You should have received a copy of the GNU Library General Public License
along with this library; if not, write to the Free Software Foundation, Inc.,
51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
.
On Debian systems, the full text of the GNU Library General Public
License version 2 can be found in the file
`/usr/share/common-licenses/LGPL-2'.
License: LGPL-2.1+
This library is free software; you can redistribute it and/or modify it under
the terms of the GNU Lesser General Public License as published by the Free
Software Foundation; either version 2.1 of the License, or (at your option)
any later version.
.
This library is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
details.
.
You should have received a copy of the GNU Lesser General Public License
along with this library; if not, write to the Free Software Foundation, Inc.,
51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
.
On Debian systems, the full text of the GNU Lesser General Public
License version 2.1 can be found in the file
`/usr/share/common-licenses/LGPL-2.1'.
License: LGPL-3
On Debian systems, the full text of the GNU Lesser General Public
License version 3 can be found in `/usr/share/common-licenses/LGPL-3'.

Some files were not shown because too many files have changed in this diff Show more