chore(ios): Merge branch 'master' into chore/ios/handled-error-logging

This commit is contained in:
jahorton 2021-05-28 07:17:15 +07:00
commit fcdb04ec14
125 changed files with 2375 additions and 2633 deletions

View file

@ -1,5 +1,37 @@
# Keyman Version History
## 15.0.56 alpha 2021-05-27
* fix(ios): link, but NOT embed KeymanEngine.xcframework in app exs (#5164)
* feat(common): offline help css (#5157)
* change(ios): help always offline (#5158)
## 15.0.55 alpha 2021-05-27
* fix(ios): artifact upload preparation (#5160)
## 15.0.54 alpha 2021-05-26
* docs(windows): Initial commit - README.md (#5119)
* chore(windows): Update Sentry to 0.4.9 (#5144)
* chore(web): Add CI script to kill BrowserStack tunnel (#5136)
* docs(linux): Update readme (#5147)
* chore(linux): Update changelogs 🍒 (#5146)
* fix(ios): re-enable SKIP_INSTALL (#5155)
## 15.0.53 alpha 2021-05-25
* fix(developer): buffer size for range expansions (#4831)
* feat(web): basic promise wrapper on cloud api call (#5121)
* feat(android/app): Auto-generate Play Store release notes (#5132)
* fix(web): active element selection in multi-touch scenarios (#5134)
* chore(windows): cleanup old .dof, .bdsproj and .cfg files (#5131)
* chore(ios): shift to use of XCFrameworks (#5107)
* chore(ios): imports iOS artifact-upload script for CI use (#5140)
* refactor(ios/engine): "should reload keyboard" now a property of the keyboard (#4847)
* docs(windows): Initial commit - README.md (#5119)
* chore(windows): move to vc++ 2019 (#5143)
## 15.0.52 alpha 2021-05-24
* chore(android): Update targetSDKVersion to 30 (#5126)

View file

@ -1 +1 @@
15.0.53
15.0.57

View file

@ -72,6 +72,7 @@ displayInfo "" \
cd $KEYMAN_ROOT/android/help
MDLUA="$KEYMAN_ROOT/resources/build/html-link.lua"
CSS="../../resources/build/offline-help-style-spec.txt"
MD=`find . -name "*.md"`
DESTHTM="$THIS_DIR/KMAPro/kMAPro/src/main/assets/info"
@ -94,7 +95,7 @@ if $DO_HTM; then
OUTFILE="$DESTHTM/${INFILE%.md}.html"
echo "Processing $INFILE to $(basename "$OUTFILE")"
mkdir -p "$(dirname "$OUTFILE")"
pandoc -s --lua-filter="$MDLUA" -t html -o "$OUTFILE" $INFILE
pandoc -s -H "$CSS" --lua-filter="$MDLUA" -t html -o "$OUTFILE" $INFILE
done
fi

View file

@ -1,3 +1,9 @@
keyman-keyboardprocessor (14.0.273-1) unstable; urgency=medium
* Keyman 14
-- Eberhard Beilharz <eb1@sil.org> Mon, 26 Apr 2021 18:24:41 +0200
keyman-keyboardprocessor (11.0.101-3) unstable; urgency=medium
* Team upload.

View file

@ -3,8 +3,8 @@
## Prerequisites
- Python 3
- Meson build system.
- C++14 or later compiler (VC++ 2017 or later for Windows).
- Meson build system 0.50 or later.
- C++14 or later compiler (VC++ 2019 or later for Windows).
- lib std::fs
- kmcomp (for tests) -- must be added to path

View file

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

View file

@ -1,6 +1,6 @@
{
"name": "@keymanapp/input-processor",
"version": "15.0.53",
"version": "15.0.57",
"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.53",
"@keymanapp/resources-gosh": "^15.0.53",
"@keymanapp/lexical-model-compiler": "^15.0.57",
"@keymanapp/resources-gosh": "^15.0.57",
"@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.53",
"@keymanapp/lexical-model-layer": "^15.0.53",
"@keymanapp/models-types": "^15.0.53",
"@keymanapp/web-environment": "^15.0.53",
"@keymanapp/web-utils": "^15.0.53",
"@keymanapp/keyboard-processor": "^15.0.57",
"@keymanapp/lexical-model-layer": "^15.0.57",
"@keymanapp/models-types": "^15.0.57",
"@keymanapp/web-environment": "^15.0.57",
"@keymanapp/web-utils": "^15.0.57",
"eventemitter3": "^4.0.0"
}
}

View file

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

View file

@ -1,6 +1,6 @@
{
"name": "@keymanapp/keyboard-processor",
"version": "15.0.53",
"version": "15.0.57",
"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.53",
"@keymanapp/resources-gosh": "^15.0.57",
"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.53",
"@keymanapp/web-environment": "^15.0.53",
"@keymanapp/web-utils": "^15.0.53",
"@keymanapp/models-types": "^15.0.57",
"@keymanapp/web-environment": "^15.0.57",
"@keymanapp/web-utils": "^15.0.57",
"@types/node": "^11.9.4"
}
}

View file

@ -1,6 +1,6 @@
{
"name": "@keymanapp/recorder-core",
"version": "15.0.53",
"version": "15.0.57",
"lockfileVersion": 1,
"requires": true,
"dependencies": {

View file

@ -1,6 +1,6 @@
{
"name": "@keymanapp/recorder-core",
"version": "15.0.53",
"version": "15.0.57",
"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.53",
"@keymanapp/models-types": "^15.0.53",
"@keymanapp/web-environment": "^15.0.53",
"@keymanapp/web-utils": "^15.0.53"
"@keymanapp/keyboard-processor": "^15.0.57",
"@keymanapp/models-types": "^15.0.57",
"@keymanapp/web-environment": "^15.0.57",
"@keymanapp/web-utils": "^15.0.57"
},
"devDependencies": {
"typescript": "^3.8.3"

View file

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

View file

@ -1,6 +1,6 @@
{
"name": "@keymanapp/web-sentry-manager",
"version": "15.0.53",
"version": "15.0.57",
"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.53",
"@keymanapp/web-environment": "^15.0.57",
"@sentry/browser": "^5.27.4"
}
}

View file

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

View file

@ -1,6 +1,6 @@
{
"name": "@keymanapp/web-utils",
"version": "15.0.53",
"version": "15.0.57",
"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.53",
"@keymanapp/web-environment": "^15.0.53",
"@keymanapp/resources-gosh": "^15.0.57",
"@keymanapp/web-environment": "^15.0.57",
"@types/node": "^14.0.5",
"typescript": "^3.8.3"
}

View file

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

View file

@ -1,6 +1,6 @@
{
"name": "@keymanapp/models-templates",
"version": "15.0.53",
"version": "15.0.57",
"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.53",
"@keymanapp/web-utils": "^15.0.53",
"@keymanapp/models-types": "^15.0.57",
"@keymanapp/web-utils": "^15.0.57",
"@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.53"
"@keymanapp/models-wordbreakers": "^15.0.57"
}
}

View file

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

View file

@ -1,6 +1,6 @@
{
"name": "@keymanapp/models-types",
"version": "15.0.53",
"version": "15.0.57",
"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.53",
"version": "15.0.57",
"lockfileVersion": 2,
"requires": true,
"packages": {

View file

@ -1,6 +1,6 @@
{
"name": "@keymanapp/models-wordbreakers",
"version": "15.0.53",
"version": "15.0.57",
"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.53",
"@keymanapp/models-types": "^15.0.57",
"@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.53",
"version": "15.0.57",
"lockfileVersion": 2,
"requires": true,
"packages": {

View file

@ -1,6 +1,6 @@
{
"name": "@keymanapp/lexical-model-layer",
"version": "15.0.53",
"version": "15.0.57",
"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.53",
"@keymanapp/resources-gosh": "^15.0.53",
"@keymanapp/models-types": "^15.0.57",
"@keymanapp/resources-gosh": "^15.0.57",
"@types/node": "^10.17.21",
"chai": "^4.3.4",
"karma": "^6.3.2",
@ -46,10 +46,10 @@
"typescript": "^3.8.3"
},
"dependencies": {
"@keymanapp/models-templates": "^15.0.53",
"@keymanapp/models-wordbreakers": "^15.0.53",
"@keymanapp/web-environment": "^15.0.53",
"@keymanapp/web-utils": "^15.0.53",
"@keymanapp/models-templates": "^15.0.57",
"@keymanapp/models-wordbreakers": "^15.0.57",
"@keymanapp/web-environment": "^15.0.57",
"@keymanapp/web-utils": "^15.0.57",
"es6-shim": "^0.35.5",
"string.prototype.codepointat": "^0.2.1",
"string.prototype.startswith": "^0.2.0"

View file

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

View file

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

3
ios/.gitignore vendored
View file

@ -19,6 +19,9 @@ engine/KMEI/KeymanEngine/resources/Keyman.bundle/Contents/Resources/keyman-sentr
Keyman 2*
Carthage
# Path for build artifact upload preparation
upload
# Default resource packages (which may be downloaded automatically via build-script
engine/KMEI/KeymanEngine/resources/Keyman.bundle/Contents/Resources/*.kmp

View file

@ -11,6 +11,7 @@
* Coreutils (`brew install coreutils`)
* sentry-cli (`brew install getsentry/tools/sentry-cli`) to utilize Sentry-based error reporting
* jq (`brew install jq`)
* `bash` (`brew install bash`)
Note that the `brew` command mentioned above is Homebrew, which may be found at https://brew.sh/.
While not strictly necessary, it certainly simplifies installing the prerequisites above.

View file

@ -72,6 +72,7 @@ displayInfo "" \
cd $KEYMAN_ROOT/ios/help
MDLUA="$KEYMAN_ROOT/resources/build/html-link.lua"
CSS="../../resources/build/offline-help-style-spec.txt"
MD=`find . -name "*.md"`
DESTHTM="$THIS_DIR/keyman/Keyman/resources/OfflineHelp.bundle/Contents/Resources"
@ -94,7 +95,7 @@ if $DO_HTM; then
OUTFILE="$DESTHTM/${INFILE%.md}.html"
echo "Processing $INFILE to $(basename "$OUTFILE")"
mkdir -p "$(dirname "$OUTFILE")"
pandoc -s --lua-filter="$MDLUA" -t html -o "$OUTFILE" $INFILE
pandoc -s -H "$CSS" --lua-filter="$MDLUA" -t html -o "$OUTFILE" $INFILE
done
fi

View file

@ -1704,7 +1704,7 @@
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
INFOPLIST_FILE = SystemKeyboard/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 9.0;
IPHONEOS_DEPLOYMENT_TARGET = 12.1;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
@ -1750,7 +1750,7 @@
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
INFOPLIST_FILE = SystemKeyboard/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 9.0;
IPHONEOS_DEPLOYMENT_TARGET = 12.1;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
@ -1893,7 +1893,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
INFOPLIST_FILE = KeymanEngine/Info.plist;
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
IPHONEOS_DEPLOYMENT_TARGET = 9.0;
IPHONEOS_DEPLOYMENT_TARGET = 12.1;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
@ -1904,7 +1904,6 @@
PRODUCT_BUNDLE_IDENTIFIER = org.sil.Keyman.ios.Engine;
PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
PROVISIONING_PROFILE_SPECIFIER = "";
SKIP_INSTALL = NO;
STRIP_INSTALLED_PRODUCT = NO;
STRIP_SWIFT_SYMBOLS = NO;
SUPPORTS_MACCATALYST = NO;
@ -1949,7 +1948,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
INFOPLIST_FILE = KeymanEngine/Info.plist;
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
IPHONEOS_DEPLOYMENT_TARGET = 9.0;
IPHONEOS_DEPLOYMENT_TARGET = 12.1;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
@ -1960,7 +1959,6 @@
PRODUCT_BUNDLE_IDENTIFIER = org.sil.Keyman.ios.Engine;
PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
PROVISIONING_PROFILE_SPECIFIER = "";
SKIP_INSTALL = NO;
SUPPORTS_MACCATALYST = NO;
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2";
@ -2016,7 +2014,7 @@
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
INFOPLIST_FILE = "KeymanEngine/resources/Keyman.bundle/Contents/Resources/KeymanEngine-Info.plist";
IPHONEOS_DEPLOYMENT_TARGET = 13.2;
IPHONEOS_DEPLOYMENT_TARGET = 12.1;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
@ -2053,7 +2051,7 @@
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
INFOPLIST_FILE = "KeymanEngine/resources/Keyman.bundle/Contents/Resources/KeymanEngine-Info.plist";
IPHONEOS_DEPLOYMENT_TARGET = 13.2;
IPHONEOS_DEPLOYMENT_TARGET = 12.1;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
@ -2107,6 +2105,7 @@
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 9.0;
KEYMAN_ROOT = "$(SRCROOT)/../../..";
SKIP_INSTALL = YES;
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
};
name = "Debug + Sentry";
@ -2145,7 +2144,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
INFOPLIST_FILE = KeymanEngine/Info.plist;
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
IPHONEOS_DEPLOYMENT_TARGET = 9.0;
IPHONEOS_DEPLOYMENT_TARGET = 12.1;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
@ -2156,7 +2155,6 @@
PRODUCT_BUNDLE_IDENTIFIER = org.sil.Keyman.ios.Engine;
PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
PROVISIONING_PROFILE_SPECIFIER = "";
SKIP_INSTALL = NO;
SUPPORTS_MACCATALYST = NO;
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
SWIFT_VERSION = 5.0;
@ -2189,7 +2187,7 @@
DEFINES_MODULE = YES;
DEVELOPMENT_TEAM = 3YE4W86L3G;
ENABLE_BITCODE = NO;
IPHONEOS_DEPLOYMENT_TARGET = 9.0;
IPHONEOS_DEPLOYMENT_TARGET = 12.1;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
@ -2239,7 +2237,7 @@
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
INFOPLIST_FILE = SystemKeyboard/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 9.0;
IPHONEOS_DEPLOYMENT_TARGET = 12.1;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
@ -2328,7 +2326,7 @@
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
INFOPLIST_FILE = "KeymanEngine/resources/Keyman.bundle/Contents/Resources/KeymanEngine-Info.plist";
IPHONEOS_DEPLOYMENT_TARGET = 13.2;
IPHONEOS_DEPLOYMENT_TARGET = 12.1;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
@ -2382,6 +2380,7 @@
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 9.0;
KEYMAN_ROOT = "$(SRCROOT)/../../..";
SKIP_INSTALL = YES;
SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG NO_SENTRY";
};
name = Debug;
@ -2424,6 +2423,7 @@
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 9.0;
KEYMAN_ROOT = "$(SRCROOT)/../../..";
SKIP_INSTALL = YES;
SWIFT_COMPILATION_MODE = wholemodule;
SWIFT_OPTIMIZATION_LEVEL = "-O";
};
@ -2442,7 +2442,7 @@
DEFINES_MODULE = YES;
DEVELOPMENT_TEAM = 3YE4W86L3G;
ENABLE_BITCODE = NO;
IPHONEOS_DEPLOYMENT_TARGET = 9.0;
IPHONEOS_DEPLOYMENT_TARGET = 12.1;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
@ -2475,7 +2475,7 @@
DEFINES_MODULE = YES;
DEVELOPMENT_TEAM = 3YE4W86L3G;
ENABLE_BITCODE = NO;
IPHONEOS_DEPLOYMENT_TARGET = 9.0;
IPHONEOS_DEPLOYMENT_TARGET = 12.1;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",

View file

@ -24,95 +24,50 @@ extension Colors {
// The primary color used for selected UI elements in the settings menu.
public static var selectionPrimary: UIColor {
get {
if #available(iOS 11.0, *) {
return UIColor(named: "SelectionPrimary")!
} else {
return UIColor(red: 204.0 / 255.0,
green: 136.0 / 255.0,
blue: 34.0 / 255.0,
alpha: 1.0)
}
return UIColor(named: "SelectionPrimary")!
}
}
// The primary color used for selected UI elements in Get Started menu.
public static var selectionSecondary: UIColor {
get {
if #available(iOS 11.0, *) {
return UIColor(named: "SelectionSecondary")!
} else {
return UIColor(red: 95.0 / 255.0,
green: 196.0 / 255.0,
blue: 217.0 / 255.0,
alpha: 1.0)
}
return UIColor(named: "SelectionSecondary")!
}
}
public static var statusToolbar: UIColor {
get {
if #available(iOS 11.0, *) {
return UIColor(named: "StatusToolbar")!
} else {
return UIColor(red: 0.5,
green: 0.75,
blue: 0.25,
alpha: 0.9)
}
return UIColor(named: "StatusToolbar")!
}
}
public static var statusResourceUpdateButton: UIColor {
get {
if #available(iOS 11.0, *) {
return UIColor(named: "StatusResourceUpdateButton")!
} else {
return UIColor(red: 0.75,
green: 1.0,
blue: 0.5,
alpha: 1.0)
}
return UIColor(named: "StatusResourceUpdateButton")!
}
}
public static var spinnerBackground: UIColor {
get {
if #available(iOS 11.0, *) {
return UIColor(named: "SpinnerBackground")!
} else {
return UIColor(white: 0.5,
alpha: 0.8)
}
return UIColor(named: "SpinnerBackground")!
}
}
public static var labelNormal: UIColor {
get {
if #available(iOS 11.0, *) {
return UIColor(named: "LabelNormal")!
} else {
return UIColor.lightGray
}
return UIColor(named: "LabelNormal")!
}
}
public static var labelHighlighted: UIColor {
get {
if #available(iOS 11.0, *) {
return UIColor(named: "LabelHighlighted")!
} else {
return UIColor.darkGray
}
return UIColor(named: "LabelHighlighted")!
}
}
public static var listSeparator: UIColor {
get {
if #available(iOS 11.0, *) {
return UIColor(named: "ListSeparator")!
} else {
return UIColor.lightGray
}
return UIColor(named: "ListSeparator")!
}
}
}

View file

@ -32,103 +32,50 @@ public class Colors {
public static var popupKey: UIColor {
get {
if #available(iOSApplicationExtension 11.0, *) {
return UIColor(named: "KeyPrimary", in: engineBundle, compatibleWith: nil)!
} else {
return UIColor(red: 244.0 / 255.0,
green: 244.0 / 255.0,
blue: 244.0 / 255.0,
alpha: 1.0)
}
return UIColor(named: "KeyPrimary", in: engineBundle, compatibleWith: nil)!
}
}
public static var keyText: UIColor {
get {
if #available(iOSApplicationExtension 11.0, *) {
return UIColor(named: "KeyText", in: engineBundle, compatibleWith: nil)!
} else {
return UIColor.black
}
return UIColor(named: "KeyText", in: engineBundle, compatibleWith: nil)!
}
}
public static var popupKeyHighlighted: UIColor {
get {
if #available(iOSApplicationExtension 11.0, *) {
return UIColor(named: "SelectedKey", in: engineBundle, compatibleWith: nil)!
} else {
return UIColor(red: 136.0 / 255.0,
green: 136.0 / 255.0,
blue: 1.0,
alpha: 1.0)
}
return UIColor(named: "SelectedKey", in: engineBundle, compatibleWith: nil)!
}
}
// I'm not 100% on the distinction, but this should be fine for now.
public static var popupKeyTint: UIColor {
get {
if #available(iOSApplicationExtension 11.0, *) {
return UIColor(named: "SelectedKey", in: engineBundle, compatibleWith: nil)!
} else {
return UIColor(red: 181.0 / 255.0,
green: 181.0 / 255.0,
blue: 181.0 / 255.0,
alpha: 1.0)
}
return UIColor(named: "SelectedKey", in: engineBundle, compatibleWith: nil)!
}
}
public static var keyboardBackground: UIColor {
get {
if #available(iOSApplicationExtension 11.0, *) {
return UIColor(named: "KeyboardBackground", in: engineBundle, compatibleWith: nil)!
} else {
return UIColor(red: 210.0 / 255.0,
green: 214.0 / 255.0,
blue: 220.0 / 255.0,
alpha: 1.0)
}
return UIColor(named: "KeyboardBackground", in: engineBundle, compatibleWith: nil)!
}
}
public static var keyboardSelectionPrimary: UIColor {
get {
if #available(iOS 11.0, *) {
return UIColor(named: "KeyboardSelectionPrimary", in: engineBundle, compatibleWith: nil)!
} else {
return UIColor(red: 204.0 / 255.0,
green: 136.0 / 255.0,
blue: 34.0 / 255.0,
alpha: 1.0)
}
return UIColor(named: "KeyboardSelectionPrimary", in: engineBundle, compatibleWith: nil)!
}
}
public static var helpBubbleGradient1: UIColor {
get {
if #available(iOSApplicationExtension 11.0, *) {
return UIColor(named: "HelpBubbleGradient1", in: engineBundle, compatibleWith: nil)!
} else {
return UIColor(red: 253.0 / 255.0,
green: 244.0 / 255.0,
blue: 196.0 / 255.0,
alpha: 1.0)
}
return UIColor(named: "HelpBubbleGradient1", in: engineBundle, compatibleWith: nil)!
}
}
public static var helpBubbleGradient2: UIColor {
get {
if #available(iOSApplicationExtension 11.0, *) {
return UIColor(named: "HelpBubbleGradient2", in: engineBundle, compatibleWith: nil)!
} else {
return UIColor(red: 233.0 / 255.0,
green: 224.0 / 255.0,
blue: 176.0 / 255.0,
alpha: 1.0)
}
return UIColor(named: "HelpBubbleGradient2", in: engineBundle, compatibleWith: nil)!
}
}
}

View file

@ -16,13 +16,7 @@ extension JSONDecoder.DateDecodingStrategy {
return .formatted(formatter)
}
static var ios8601WithFallback: JSONDecoder.DateDecodingStrategy {
if #available(iOS 10.0, *) {
return .iso8601
}
let formatter = DateFormatter()
formatter.locale = Locale(identifier: "en_US_POSIX")
formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZZZZZ"
return .formatted(formatter)
return .iso8601
}
static var ios8601WithMilliseconds: JSONDecoder.DateDecodingStrategy {

View file

@ -73,34 +73,18 @@ private class CustomInputView: UIInputView, UIInputViewAudioFeedback {
func setConstraints() {
let innerView = keymanWeb.view!
var guide: UILayoutGuide
var conditionalGuide: Bool = false
if #available(iOSApplicationExtension 11.0, *) {
guide = self.safeAreaLayoutGuide
conditionalGuide = true
} else {
guide = self.layoutMarginsGuide
}
let guide = self.safeAreaLayoutGuide
// Fallback on earlier versions
innerView.topAnchor.constraint(equalTo: guide.topAnchor).isActive = true
innerView.bottomAnchor.constraint(equalTo: guide.bottomAnchor).isActive = true
if conditionalGuide {
innerView.leftAnchor.constraint(equalTo: guide.leftAnchor).isActive = true
innerView.rightAnchor.constraint(equalTo: guide.rightAnchor).isActive = true
} else {
innerView.leftAnchor.constraint(equalTo: self.leftAnchor).isActive = true
innerView.rightAnchor.constraint(equalTo: self.rightAnchor).isActive = true
}
innerView.leftAnchor.constraint(equalTo: guide.leftAnchor).isActive = true
innerView.rightAnchor.constraint(equalTo: guide.rightAnchor).isActive = true
// Allow these to be broken if/as necessary to resolve layout issues.
var kbdWidthConstraint: NSLayoutConstraint
if conditionalGuide {
kbdWidthConstraint = innerView.widthAnchor.constraint(equalTo: guide.widthAnchor)
} else {
kbdWidthConstraint = innerView.widthAnchor.constraint(equalTo: self.widthAnchor)
}
let kbdWidthConstraint = innerView.widthAnchor.constraint(equalTo: guide.widthAnchor)
kbdWidthConstraint.priority = .defaultHigh
kbdWidthConstraint.isActive = true
@ -166,7 +150,6 @@ open class InputViewController: UIInputViewController, KeymanWebDelegate {
var landscapeConstraint: NSLayoutConstraint?
private var keymanWeb: KeymanWebViewController
private var swallowBackspaceTextChange: Bool = false
open class var isPortrait: Bool {
@ -179,14 +162,6 @@ open class InputViewController: UIInputViewController, KeymanWebDelegate {
return scaling?.bannerHeight ?? 38 // default for iPhone SE, older/smaller devices
}
open override var hasFullAccess: Bool {
if #available(iOS 11.0, *) {
// Nice and straight-forward here!
return super.hasFullAccess
}
return Storage.shared != nil
}
private var keyboardListCount: Int {
return Storage.active.userDefaults.userKeyboards?.count ?? 0
}
@ -267,8 +242,8 @@ open class InputViewController: UIInputViewController, KeymanWebDelegate {
if (!Manager.shared.didSynchronize || shouldSynchronize) && Storage.shared != nil {
Manager.shared.synchronizeSWKeyboard()
if Manager.shared.currentKeyboardID != nil || Manager.shared.shouldReloadKeyboard {
Manager.shared.shouldReloadKeyboard = true
if Manager.shared.currentKeyboardID != nil || keymanWeb.shouldReload {
keymanWeb.shouldReload = true
reload()
}
Manager.shared.didSynchronize = true
@ -280,10 +255,7 @@ open class InputViewController: UIInputViewController, KeymanWebDelegate {
open override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
if Manager.shared.shouldReloadKeyboard {
self.reload()
}
self.reloadIfNeeded()
}
open override func viewDidAppear(_ animated: Bool) {
@ -304,7 +276,7 @@ open class InputViewController: UIInputViewController, KeymanWebDelegate {
// Necessary for existing infrastructure to resend info for the keyboard after reloading
// as system keyboard. Do NOT perform if in-app, as this unnecessarily resets the WebView.
if(Manager.shared.isSystemKeyboard) {
Manager.shared.shouldReloadKeyboard = true
keymanWeb.shouldReload = true
}
}
@ -356,11 +328,9 @@ open class InputViewController: UIInputViewController, KeymanWebDelegate {
// A full-context deletion will report numCharsToDelete == 0 and won't
// otherwise delete selected text.
if #available(iOSApplicationExtension 11.0, *) {
if let selected = textDocumentProxy.selectedText {
if selected.count > 0 {
textDocumentProxy.deleteBackward()
}
if let selected = textDocumentProxy.selectedText {
if selected.count > 0 {
textDocumentProxy.deleteBackward()
}
}
return
@ -455,12 +425,7 @@ open class InputViewController: UIInputViewController, KeymanWebDelegate {
// These require the view to appear - parent and our relationship with it must exist!
private func setOuterConstraints() {
var baseWidthConstraint: NSLayoutConstraint
if #available(iOSApplicationExtension 11.0, *) {
baseWidthConstraint = self.inputView!.widthAnchor.constraint(equalTo: parent!.view.safeAreaLayoutGuide.widthAnchor)
} else {
//baseWidthConstraint = self.inputView!.widthAnchor.constraint(equalTo: parent!.view.layoutMarginsGuide.widthAnchor)
baseWidthConstraint = self.inputView!.widthAnchor.constraint(equalTo: parent!.view.widthAnchor)
}
baseWidthConstraint = self.inputView!.widthAnchor.constraint(equalTo: parent!.view.safeAreaLayoutGuide.widthAnchor)
baseWidthConstraint.priority = UILayoutPriority(rawValue: 999)
baseWidthConstraint.isActive = true
}
@ -528,10 +493,25 @@ open class InputViewController: UIInputViewController, KeymanWebDelegate {
func reload() {
keymanWeb.reloadKeyboard()
}
func reloadIfNeeded() {
if keymanWeb.shouldReload {
reload()
keymanWeb.shouldReload = false
}
}
func setKeyboard(_ kb: InstallableKeyboard) {
keymanWeb.setKeyboard(kb)
}
public func setShouldReload() {
keymanWeb.shouldReload = true
}
internal var shouldReload: Bool {
return keymanWeb.shouldReload
}
func registerLexicalModel(_ lm: InstallableLexicalModel) {
keymanWeb.registerLexicalModel(lm)

View file

@ -61,6 +61,7 @@ class KeymanWebViewController: UIViewController {
/// when predictive text is not active
private var bannerImgPath: String = ""
var shouldReload: Bool = true
var isLoading: Bool = false
private var currentText: String = ""
@ -569,17 +570,12 @@ extension KeymanWebViewController: WKScriptMessageHandler {
// Not usable by older iPhone models.
AudioServicesPlaySystemSound(kSystemSoundID_MediumVibrate)
} else { // if vibrationSupport == .taptic
if #available(iOSApplicationExtension 10.0, *) {
// Available with iPhone 7 and beyond, we can now produce nicely customized haptic feedback.
// We use this style b/c it's short, and in essence it is a minor UI element collision -
// a single key with blocked (erroneous) output.
// Oddly, is a closer match to SystemSoundID 1520 than 1521.
let vibrator = UIImpactFeedbackGenerator(style: UIImpactFeedbackGenerator.FeedbackStyle.heavy)
vibrator.impactOccurred()
} else {
// Fallback on earlier feedback style
AudioServicesPlaySystemSound(kSystemSoundID_MediumVibrate)
}
// Available with iPhone 7 and beyond, we can now produce nicely customized haptic feedback.
// We use this style b/c it's short, and in essence it is a minor UI element collision -
// a single key with blocked (erroneous) output.
// Oddly, is a closer match to SystemSoundID 1520 than 1521.
let vibrator = UIImpactFeedbackGenerator(style: UIImpactFeedbackGenerator.FeedbackStyle.heavy)
vibrator.impactOccurred()
}
}
}
@ -616,11 +612,10 @@ extension KeymanWebViewController: KeymanWebDelegate {
}
setDeviceType(UIDevice.current.userInterfaceIdiom)
let shouldReloadKeyboard = Manager.shared.shouldReloadKeyboard
var newKb = Manager.shared.currentKeyboard
if !shouldReloadKeyboard { // otherwise, we automatically reload anyway.
if !shouldReload { // otherwise, we automatically reload anyway.
let userData = Manager.shared.isSystemKeyboard ? UserDefaults.standard : Storage.active.userDefaults
if newKb == nil {
if let id = userData.currentKeyboardID {
@ -642,7 +637,7 @@ extension KeymanWebViewController: KeymanWebDelegate {
_ = Manager.shared.setKeyboard(newKb!)
}
// in case `shouldReloadKeyboard == true`. Is set otherwise above.
// in case `shouldReload == true`. Is set otherwise above.
if(newKb == nil) {
newKb = Defaults.keyboard
}
@ -655,10 +650,10 @@ extension KeymanWebViewController: KeymanWebDelegate {
fixLayout()
NotificationCenter.default.post(name: Notifications.keyboardLoaded, object: self, value: newKb!)
if shouldReloadKeyboard {
if shouldReload {
NSObject.cancelPreviousPerformRequests(withTarget: self, selector: #selector(self.resetKeyboard), object: nil)
perform(#selector(self.resetKeyboard), with: nil, afterDelay: 0.25)
Manager.shared.shouldReloadKeyboard = false
shouldReload = false
}
}

View file

@ -141,9 +141,6 @@ public class Manager: NSObject, UIGestureRecognizerDelegate {
}
}
// Set to true on init - this allows other engine consumers to set the
// keyboard before it displays.
var shouldReloadKeyboard = true
var shouldReloadLexicalModel = false
var _inputViewController: InputViewController?
@ -279,7 +276,7 @@ public class Manager: NSObject, UIGestureRecognizerDelegate {
//
// We MUST NOT shortcut this method as a result; doing so may (rarely) result in the infamous
// blank keyboard bug!
if kb.fullID == currentKeyboardID && !self.isSystemKeyboard && !self.shouldReloadKeyboard {
if kb.fullID == currentKeyboardID && !self.isSystemKeyboard && !inputViewController.shouldReload {
SentryManager.breadcrumbAndLog("Keyboard unchanged: \(kb.fullID)")
return false
// throw KeyboardError.unchanged
@ -754,6 +751,7 @@ public class Manager: NSObject, UIGestureRecognizerDelegate {
// true source of the problems.
viewController.dismiss(animated: false)
showKeyboard()
inputViewController.reloadIfNeeded()
NotificationCenter.default.post(name: Notifications.keyboardPickerDismissed, object: self, value: ())
}

View file

@ -352,11 +352,11 @@ public class PackageInstallViewController<Resource: LanguageResource>: UIViewCon
let selectedResources = self.package.installableResourceSets.flatMap { $0.filter { selectedLanguageCodes.contains($0.languageID) }} as! [Resource]
// Always reload after installing or updating resources.
Manager.shared.shouldReloadKeyboard = true
Manager.shared.inputViewController.setShouldReload()
self.pickingCompletionHandler(selectedResources.map { $0.typedFullID })
// Prevent swipe dismissal.
if #available(iOSApplicationExtension 13.0, *) {
if #available(iOS 13.0, *) {
self.isModalInPresentation = true
}
@ -375,7 +375,7 @@ public class PackageInstallViewController<Resource: LanguageResource>: UIViewCon
// First, show the package's welcome - if it exists.
if let welcomeVC = PackageWebViewController(for: package, page: .welcome) {
// Prevent swipe dismissal.
if #available(iOSApplicationExtension 13.0, *) {
if #available(iOS 13.0, *) {
welcomeVC.isModalInPresentation = true
}
@ -467,11 +467,7 @@ public class PackageInstallViewController<Resource: LanguageResource>: UIViewCon
} else {
let selectionColor = UIView()
if #available(iOSApplicationExtension 11.0, *) {
selectionColor.backgroundColor = UIColor(named: "SelectionPrimary")
} else {
selectionColor.backgroundColor = Colors.selectionPrimary
}
selectionColor.backgroundColor = Colors.selectionPrimary
cell = UITableViewCell(style: .subtitle, reuseIdentifier: cellIdentifier)
cell.selectedBackgroundView = selectionColor

View file

@ -197,11 +197,7 @@ public class InstalledLanguagesViewController: UITableViewController, UIAlertVie
} else {
let selectionColor = UIView()
if #available(iOSApplicationExtension 11.0, *) {
selectionColor.backgroundColor = UIColor(named: "SelectionPrimary")
} else {
selectionColor.backgroundColor = Colors.selectionPrimary
}
selectionColor.backgroundColor = Colors.selectionPrimary
if keyboards.count < 2 {
cell = KeyboardNameTableViewCell(style: .subtitle, reuseIdentifier: cellIdentifier)
@ -310,6 +306,7 @@ public class InstalledLanguagesViewController: UITableViewController, UIAlertVie
switch(package.resourceType()) {
case .keyboard:
Manager.shared.inputViewController.setShouldReload()
msg = NSLocalizedString("notification-download-success-keyboard", bundle: engineBundle, comment: "")
case .lexicalModel:
msg = NSLocalizedString("notification-download-success-lexical-model", bundle: engineBundle, comment: "")

View file

@ -151,10 +151,9 @@ class LanguageSettingsViewController: UITableViewController {
doPredictionsSwitch!.isOn = userDefaults.predictSettingForLanguage(languageID: self.language.id)
doPredictionsSwitch!.addTarget(self, action: #selector(self.predictionSwitchValueChanged), for: .valueChanged)
cell.addSubview(doPredictionsSwitch!)
if #available(iOSApplicationExtension 9.0, *) {
doPredictionsSwitch!.rightAnchor.constraint(equalTo: cell.layoutMarginsGuide.rightAnchor).isActive = true
doPredictionsSwitch!.centerYAnchor.constraint(equalTo: cell.layoutMarginsGuide.centerYAnchor).isActive = true
}
doPredictionsSwitch!.rightAnchor.constraint(equalTo: cell.layoutMarginsGuide.rightAnchor).isActive = true
doPredictionsSwitch!.centerYAnchor.constraint(equalTo: cell.layoutMarginsGuide.centerYAnchor).isActive = true
} else if 1 == indexPath.row {
correctionsCell = cell
cell.accessoryType = .none
@ -167,10 +166,9 @@ class LanguageSettingsViewController: UITableViewController {
doCorrectionsSwitch!.isOn = userDefaults.correctSettingForLanguage(languageID: self.language.id)
doCorrectionsSwitch!.addTarget(self, action: #selector(self.correctionSwitchValueChanged), for: .valueChanged)
cell.addSubview(doCorrectionsSwitch!)
if #available(iOSApplicationExtension 9.0, *) {
doCorrectionsSwitch!.rightAnchor.constraint(equalTo: cell.layoutMarginsGuide.rightAnchor).isActive = true
doCorrectionsSwitch!.centerYAnchor.constraint(equalTo: cell.layoutMarginsGuide.centerYAnchor).isActive = true
}
doCorrectionsSwitch!.rightAnchor.constraint(equalTo: cell.layoutMarginsGuide.rightAnchor).isActive = true
doCorrectionsSwitch!.centerYAnchor.constraint(equalTo: cell.layoutMarginsGuide.centerYAnchor).isActive = true
// Disable interactivity if the prediction toggle is set to 'off'.
doCorrectionsSwitch!.isHidden = !userDefaults.predictSettingForLanguage(languageID: self.language.id)

View file

@ -78,31 +78,28 @@ open class SettingsViewController: UITableViewController {
"reuseid": "enablecrashreporting"
])
// The iOS Files app is only available with 11.0+.
if #available(iOS 11.0, *) {
if let _ = URL(string: UIApplication.openSettingsURLString) {
itemsArray.append([
"title": NSLocalizedString("menu-settings-system-keyboard-menu", bundle: engineBundle, comment: ""),
"subtitle": "",
"reuseid": "systemkeyboardsettings"
])
}
if let _ = URL(string: UIApplication.openSettingsURLString) {
itemsArray.append([
"title": NSLocalizedString("menu-settings-install-from-file", bundle: engineBundle, comment: ""),
"subtitle": NSLocalizedString("menu-settings-install-from-file-description", bundle: engineBundle, comment: ""),
"reuseid" : "installfile"
"title": NSLocalizedString("menu-settings-system-keyboard-menu", bundle: engineBundle, comment: ""),
"subtitle": "",
"reuseid": "systemkeyboardsettings"
])
#if DEBUG && !NO_SENTRY
itemsArray.append([
"title": "Force a crash",
"subtitle": "Test Sentry error-reporting integration",
"reuseid" : "forcederror"
])
#endif
}
itemsArray.append([
"title": NSLocalizedString("menu-settings-install-from-file", bundle: engineBundle, comment: ""),
"subtitle": NSLocalizedString("menu-settings-install-from-file-description", bundle: engineBundle, comment: ""),
"reuseid" : "installfile"
])
#if DEBUG && !NO_SENTRY
itemsArray.append([
"title": "Force a crash",
"subtitle": "Test Sentry error-reporting integration",
"reuseid" : "forcederror"
])
#endif
_ = view
}
@ -158,11 +155,9 @@ open class SettingsViewController: UITableViewController {
showBannerSwitch.addTarget(self, action: #selector(self.bannerSwitchValueChanged),
for: .valueChanged)
cell.addSubview(showBannerSwitch)
if #available(iOSApplicationExtension 9.0, *) {
showBannerSwitch.rightAnchor.constraint(equalTo: cell.layoutMarginsGuide.rightAnchor).isActive = true
showBannerSwitch.centerYAnchor.constraint(equalTo: cell.layoutMarginsGuide.centerYAnchor).isActive = true
}
showBannerSwitch.rightAnchor.constraint(equalTo: cell.layoutMarginsGuide.rightAnchor).isActive = true
showBannerSwitch.centerYAnchor.constraint(equalTo: cell.layoutMarginsGuide.centerYAnchor).isActive = true
case "showgetstarted":
let showAgainSwitch = UISwitch()
showAgainSwitch.translatesAutoresizingMaskIntoConstraints = false
@ -174,11 +169,9 @@ open class SettingsViewController: UITableViewController {
showAgainSwitch.addTarget(self, action: #selector(self.showGetStartedSwitchValueChanged),
for: .valueChanged)
cell.addSubview(showAgainSwitch)
if #available(iOSApplicationExtension 9.0, *) {
showAgainSwitch.rightAnchor.constraint(equalTo: cell.layoutMarginsGuide.rightAnchor).isActive = true
showAgainSwitch.centerYAnchor.constraint(equalTo: cell.layoutMarginsGuide.centerYAnchor).isActive = true
}
showAgainSwitch.rightAnchor.constraint(equalTo: cell.layoutMarginsGuide.rightAnchor).isActive = true
showAgainSwitch.centerYAnchor.constraint(equalTo: cell.layoutMarginsGuide.centerYAnchor).isActive = true
case "enablecrashreporting":
let enableReportingSwitch = UISwitch()
enableReportingSwitch.translatesAutoresizingMaskIntoConstraints = false
@ -191,10 +184,9 @@ open class SettingsViewController: UITableViewController {
for: .valueChanged)
cell.addSubview(enableReportingSwitch)
if #available(iOSApplicationExtension 9.0, *) {
enableReportingSwitch.rightAnchor.constraint(equalTo: cell.layoutMarginsGuide.rightAnchor).isActive = true
enableReportingSwitch.centerYAnchor.constraint(equalTo: cell.layoutMarginsGuide.centerYAnchor).isActive = true
}
enableReportingSwitch.rightAnchor.constraint(equalTo: cell.layoutMarginsGuide.rightAnchor).isActive = true
enableReportingSwitch.centerYAnchor.constraint(equalTo: cell.layoutMarginsGuide.centerYAnchor).isActive = true
case "systemkeyboardsettings", "installfile", "forcederror":
break
default:
@ -222,7 +214,7 @@ open class SettingsViewController: UITableViewController {
// Necessary for the keyboard to visually update to match
// the new setting.
Manager.shared.shouldReloadKeyboard = true
Manager.shared.inputViewController.setShouldReload()
}
@objc func showGetStartedSwitchValueChanged(_ sender: Any) {

View file

@ -46,10 +46,8 @@ public class TextField: UITextField, KeymanResponder {
delegateProxy = TextFieldDelegateProxy(self)
delegate = delegateProxy
if #available(iOS 9.0, *) {
inputAssistantItem.leadingBarButtonGroups = []
inputAssistantItem.trailingBarButtonGroups = []
}
inputAssistantItem.leadingBarButtonGroups = []
inputAssistantItem.trailingBarButtonGroups = []
self.inputView = Manager.shared.inputViewController.view

View file

@ -45,10 +45,8 @@ public class TextView: UITextView, KeymanResponder {
delegateProxy = TextViewDelegateProxy(self)
delegate = delegateProxy
if #available(iOS 9.0, *) {
inputAssistantItem.leadingBarButtonGroups = []
inputAssistantItem.trailingBarButtonGroups = []
}
inputAssistantItem.leadingBarButtonGroups = []
inputAssistantItem.trailingBarButtonGroups = []
self.inputView = Manager.shared.inputViewController.view

View file

@ -2,7 +2,7 @@
title: Version History
---
A frequent updated changelog for Keyman is kept at [help.keyman.com/version-history](https://help.keyman.com/version-history/) on the Keyman Help website.
A frequently-updated changelog for Keyman is kept at [help.keyman.com/version-history](https://help.keyman.com/version-history/) on the Keyman Help website.
## Related Topics
* [What's New](whatsnew)

View file

@ -1,5 +1,5 @@
---
title: Keyman for iPhone and iPad 14.0 Help
title: Keyman for iPhone and iPad 15.0 Help
---
## [About Keyman](about/)

View file

@ -145,7 +145,6 @@
CE80AD33257F2B4A008D2150 /* KeymanEngine.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CE80AD32257F2B4A008D2150 /* KeymanEngine.framework */; };
CE80AD34257F2B4B008D2150 /* KeymanEngine.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = CE80AD32257F2B4A008D2150 /* KeymanEngine.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
CEBD34322654FE3500EB2EA8 /* KeymanEngine.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CE80AD32257F2B4A008D2150 /* KeymanEngine.framework */; };
CEBD34332654FE3500EB2EA8 /* KeymanEngine.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = CE80AD32257F2B4A008D2150 /* KeymanEngine.framework */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
CEBD343B2654FEB400EB2EA8 /* DeviceKit.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEBD34352654FEB400EB2EA8 /* DeviceKit.xcframework */; };
CEBD343C2654FEB400EB2EA8 /* DeviceKit.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = CEBD34352654FEB400EB2EA8 /* DeviceKit.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
CEBD343D2654FEB400EB2EA8 /* ObjcExceptionBridging.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEBD34362654FEB400EB2EA8 /* ObjcExceptionBridging.xcframework */; };
@ -193,17 +192,6 @@
name = "Embed Frameworks";
runOnlyForDeploymentPostprocessing = 0;
};
CEBD34342654FE3500EB2EA8 /* Embed Frameworks */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 2147483647;
dstPath = "";
dstSubfolderSpec = 10;
files = (
CEBD34332654FE3500EB2EA8 /* KeymanEngine.framework in Embed Frameworks */,
);
name = "Embed Frameworks";
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXCopyFilesBuildPhase section */
/* Begin PBXFileReference section */
@ -344,13 +332,13 @@
CEACC90E25F07D58006EAB45 /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/Localizable.strings; sourceTree = "<group>"; };
CEACC90F25F07D5A006EAB45 /* km */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = km; path = km.lproj/Localizable.strings; sourceTree = "<group>"; };
CEACC91225F07D77006EAB45 /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/Localizable.strings; sourceTree = "<group>"; };
CEBD3458265511B700EB2EA8 /* am */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = am; path = am.lproj/Localizable.strings; sourceTree = "<group>"; };
CEBD34352654FEB400EB2EA8 /* DeviceKit.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = DeviceKit.xcframework; path = ../../Carthage/Build/DeviceKit.xcframework; sourceTree = "<absolute>"; };
CEBD34362654FEB400EB2EA8 /* ObjcExceptionBridging.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = ObjcExceptionBridging.xcframework; path = ../../Carthage/Build/ObjcExceptionBridging.xcframework; sourceTree = "<absolute>"; };
CEBD34372654FEB400EB2EA8 /* Reachability.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = Reachability.xcframework; path = ../../Carthage/Build/Reachability.xcframework; sourceTree = "<absolute>"; };
CEBD34382654FEB400EB2EA8 /* Sentry.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = Sentry.xcframework; path = ../../Carthage/Build/Sentry.xcframework; sourceTree = "<absolute>"; };
CEBD34392654FEB400EB2EA8 /* XCGLogger.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = XCGLogger.xcframework; path = ../../Carthage/Build/XCGLogger.xcframework; sourceTree = "<absolute>"; };
CEBD343A2654FEB400EB2EA8 /* Zip.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = Zip.xcframework; path = ../../Carthage/Build/Zip.xcframework; sourceTree = "<absolute>"; };
CEBD3458265511B700EB2EA8 /* am */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = am; path = am.lproj/Localizable.strings; sourceTree = "<group>"; };
CEF4E55523E95B7B0065B9C7 /* ImageBanner.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = ImageBanner.xib; sourceTree = "<group>"; };
CEF4E55823E967140065B9C7 /* ImageBannerViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ImageBannerViewController.swift; sourceTree = "<group>"; };
/* End PBXFileReference section */
@ -748,7 +736,6 @@
98CD125A19CA85710089385F /* Resources */,
CED3CFDA240E49DF001540A1 /* ShellScript */,
37BC8FFD1DE83BBD006AEBFF /* Headers */,
CEBD34342654FE3500EB2EA8 /* Embed Frameworks */,
);
buildRules = (
);
@ -1118,7 +1105,7 @@
GCC_PREFIX_HEADER = "Keyman/Keyman-Prefix.pch";
GCC_PREPROCESSOR_DEFINITIONS = "$(inherited)";
INFOPLIST_FILE = "Keyman-Info.plist";
IPHONEOS_DEPLOYMENT_TARGET = 9.0;
IPHONEOS_DEPLOYMENT_TARGET = 12.1;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
@ -1153,7 +1140,7 @@
GCC_PRECOMPILE_PREFIX_HEADER = YES;
GCC_PREFIX_HEADER = "Keyman/Keyman-Prefix.pch";
INFOPLIST_FILE = "Keyman-Info.plist";
IPHONEOS_DEPLOYMENT_TARGET = 9.0;
IPHONEOS_DEPLOYMENT_TARGET = 12.1;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
@ -1310,7 +1297,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
INFOPLIST_FILE = SWKeyboard/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 9.0;
IPHONEOS_DEPLOYMENT_TARGET = 12.1;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
@ -1354,7 +1341,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
INFOPLIST_FILE = SWKeyboard/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 9.0;
IPHONEOS_DEPLOYMENT_TARGET = 12.1;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
@ -1449,7 +1436,7 @@
GCC_PREFIX_HEADER = "Keyman/Keyman-Prefix.pch";
GCC_PREPROCESSOR_DEFINITIONS = "$(inherited)";
INFOPLIST_FILE = "Keyman-Info.plist";
IPHONEOS_DEPLOYMENT_TARGET = 9.0;
IPHONEOS_DEPLOYMENT_TARGET = 12.1;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
@ -1494,7 +1481,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
INFOPLIST_FILE = SWKeyboard/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 9.0;
IPHONEOS_DEPLOYMENT_TARGET = 12.1;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",

View file

@ -64,7 +64,7 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
_ = KeymanEngine.log
UniversalLinks.externalLinkLauncher = { url in
UIApplication.shared.openURL(url)
UIApplication.shared.open(url)
}
Manager.applicationGroupIdentifier = "group.KM4I"
@ -170,11 +170,9 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
}
// Workaround to display overlay window above keyboard
if #available(iOS 9.0, *) {
let windows = UIApplication.shared.windows
if let lastWindow = windows.last {
_overlayWindow!.windowLevel = lastWindow.windowLevel + 1
}
let windows = UIApplication.shared.windows
if let lastWindow = windows.last {
_overlayWindow!.windowLevel = lastWindow.windowLevel + 1
}
return _overlayWindow!
}

View file

@ -114,17 +114,14 @@ class GetStartedViewController: UIViewController, UITableViewDelegate, UITableVi
}
case 1:
cell.textLabel?.text = NSLocalizedString("tutorial-system-keyboard", comment: "")
if #available(iOS 11.0, *) {
// We can expedite this via near-direct settings link.
// So, let's add the one extra needed detail to our detail text.
let keyboardsMenuText = NSLocalizedString("ios-settings-keyboards", comment: "")
let enableText = String.init(format: NSLocalizedString("toggle-to-enable", comment: ""), "Keyman")
// Probably needs to be i18n-adjusted too.
let menuBreadcrumbing = NSLocalizedString("menu-breadcrumbing", comment: "")
cell.detailTextLabel?.text = String.init(format: menuBreadcrumbing, keyboardsMenuText, enableText)
} else {
cell.detailTextLabel?.text = ""
}
// We can expedite this via near-direct settings link.
// So, let's add the one extra needed detail to our detail text.
let keyboardsMenuText = NSLocalizedString("ios-settings-keyboards", comment: "")
let enableText = String.init(format: NSLocalizedString("toggle-to-enable", comment: ""), "Keyman")
// Probably needs to be i18n-adjusted too.
let menuBreadcrumbing = NSLocalizedString("menu-breadcrumbing", comment: "")
cell.detailTextLabel?.text = String.init(format: menuBreadcrumbing, keyboardsMenuText, enableText)
if !AppDelegate.isKeymanEnabledSystemWide() {
cell.accessoryType = .none
} else {
@ -155,8 +152,7 @@ class GetStartedViewController: UIViewController, UITableViewDelegate, UITableVi
mainViewController.dismissGetStartedView(nil)
mainViewController.showInstalledLanguages()
case 1:
if #available(iOS 11.0, *), // if "Keyboards" is an option in our app's settings menu
let appSettings = URL(string: UIApplication.openSettingsURLString) {
if let appSettings = URL(string: UIApplication.openSettingsURLString) {
UniversalLinks.externalLinkLauncher?(appSettings)
} else {
let setUpVC = SetUpViewController()

View file

@ -43,16 +43,7 @@ class InfoViewController: UIViewController, UIWebViewDelegate {
}
func reloadKeymanHelp() {
if let networkStatus = networkReachable?.connection {
switch networkStatus {
case Reachability.Connection.none, Reachability.Connection.unavailable:
loadFromLocal()
default:
loadFromServer()
}
} else {
loadFromLocal()
}
loadFromLocal()
}
private func loadFromLocal() {
@ -63,6 +54,8 @@ class InfoViewController: UIViewController, UIWebViewDelegate {
webView.loadRequest(URLRequest(url: URL.init(fileURLWithPath: filePath!)))
}
// Currently unused, as we haven't yet added a toggle to allow users to choose online
// over the default of offline.
private func loadFromServer() {
let appVersion = Version.current.majorMinor
let url = "\(KeymanHosts.HELP_KEYMAN_COM)/products/iphone-and-ipad/\(appVersion.plainString)/"

View file

@ -83,11 +83,13 @@ class MainViewController: UIViewController, TextViewDelegate, UIActionSheetDeleg
super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
// Setup Notifications
NotificationCenter.default.addObserver(self, selector: #selector(self.keyboardWillShow),
NotificationCenter.default.addObserver(self, selector: #selector(self.onKeyboardWillShow),
name: UIResponder.keyboardWillShowNotification, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(self.keyboardDidShow),
// `keyboardDidShow` apparently matches an internal Apple API and will fail an app submission.
// So, cheap workaround: just prefix the thing.
NotificationCenter.default.addObserver(self, selector: #selector(self.onKeyboardDidShow),
name: UIResponder.keyboardDidShowNotification, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(self.keyboardWillHide),
NotificationCenter.default.addObserver(self, selector: #selector(self.onKeyboardWillHide),
name: UIResponder.keyboardWillHideNotification, object: nil)
keyboardLoadedObserver = NotificationCenter.default.addObserver(
forName: Notifications.keyboardLoaded,
@ -109,16 +111,14 @@ class MainViewController: UIViewController, TextViewDelegate, UIActionSheetDeleg
// Unfortunately, it's the main app with the file definitions.
// We have to gerry-rig this so that the framework-based SettingsViewController
// can launch the app-based DocumentViewController.
if #available(iOS 11.0, *) {
Manager.shared.fileBrowserLauncher = { navVC in
let vc = PackageBrowserViewController(documentTypes: ["com.keyman.kmp"],
in: .import,
navVC: navVC)
Manager.shared.fileBrowserLauncher = { navVC in
let vc = PackageBrowserViewController(documentTypes: ["com.keyman.kmp"],
in: .import,
navVC: navVC)
// Present the "install from file" browser within the specified navigation view controller.
// (Allows displaying from within the Settings menu)
navVC.present(vc, animated: true)
}
// Present the "install from file" browser within the specified navigation view controller.
// (Allows displaying from within the Settings menu)
navVC.present(vc, animated: true)
}
}
@ -130,7 +130,6 @@ class MainViewController: UIViewController, TextViewDelegate, UIActionSheetDeleg
super.viewDidLoad()
extendedLayoutIncludesOpaqueBars = true
automaticallyAdjustsScrollViewInsets = false
let systemFonts = Set<String>(UIFont.familyNames)
@ -144,13 +143,7 @@ class MainViewController: UIViewController, TextViewDelegate, UIActionSheetDeleg
ResourceDownloadManager.shared.queryKeysForUpdatablePackages { _, _ in }
}
// Implement a default color...
var bgColor = UIColor(red: 1.0, green: 1.0, blue: 207.0 / 255.0, alpha: 1.0)
// And if the iOS version is current enough, override it from the palette.
if #available(iOS 11.0, *) {
bgColor = UIColor(named: "InputBackground")!
}
view?.backgroundColor = bgColor
view?.backgroundColor = UIColor(named: "InputBackground")!
// Check for configuration profiles/fonts to install
FontManager.shared.registerCustomFonts()
@ -192,7 +185,7 @@ class MainViewController: UIViewController, TextViewDelegate, UIActionSheetDeleg
textView = TextView(frame: view.frame)
textView.setKeymanDelegate(self)
textView.viewController = self
textView.backgroundColor = bgColor
textView.backgroundColor = UIColor(named: "InputBackground")!
textView.isScrollEnabled = true
textView.isUserInteractionEnabled = true
textView.font = textView.font?.withSize(textSize)
@ -206,7 +199,7 @@ class MainViewController: UIViewController, TextViewDelegate, UIActionSheetDeleg
}
infoView.view?.isHidden = true
infoView.view?.backgroundColor = bgColor
infoView.view?.backgroundColor = UIColor(named: "InputBackground")!
view?.addSubview(infoView!.view)
resizeViews(withKeyboardVisible: textView.isFirstResponder)
@ -396,21 +389,19 @@ class MainViewController: UIViewController, TextViewDelegate, UIActionSheetDeleg
return navigationController!.navigationBar.frame.height
}
@objc func keyboardWillShow(_ notification: Notification) {
@objc func onKeyboardWillShow(_ notification: Notification) {
_ = dismissDropDownMenu()
resizeViews(withKeyboardVisible: true)
}
@objc func keyboardDidShow(_ notification: Notification) {
@objc func onKeyboardDidShow(_ notification: Notification) {
// Workaround to display overlay window above keyboard
if #available(iOS 9.0, *) {
let windows = UIApplication.shared.windows
let lastWindow = windows.last
overlayWindow.windowLevel = lastWindow!.windowLevel + 1
}
let windows = UIApplication.shared.windows
let lastWindow = windows.last
overlayWindow.windowLevel = lastWindow!.windowLevel + 1
}
@objc func keyboardWillHide(_ notification: Notification) {
@objc func onKeyboardWillHide(_ notification: Notification) {
resizeViews(withKeyboardVisible: false)
}
@ -474,7 +465,7 @@ class MainViewController: UIViewController, TextViewDelegate, UIActionSheetDeleg
navigationItem.rightBarButtonItem = nil
setNavBarButtons()
if wasKeyboardVisible {
perform(#selector(self.showKeyboard), with: nil, afterDelay: 0.75)
perform(#selector(self.displayKeyboard), with: nil, afterDelay: 0.75)
}
if shouldShowGetStarted {
perform(#selector(self.showGetStartedView), with: nil, afterDelay: 0.75)
@ -827,7 +818,8 @@ class MainViewController: UIViewController, TextViewDelegate, UIActionSheetDeleg
}
}
@objc func showKeyboard() {
// showKeyboard matches an internal Apple API, so it's not available for use as a selector.
@objc func displayKeyboard() {
textView.becomeFirstResponder()
}
@ -856,7 +848,7 @@ class MainViewController: UIViewController, TextViewDelegate, UIActionSheetDeleg
userData.synchronize()
if action.style == .default {
UIApplication.shared.openURL(URL(string: "\(baseUri)\(profileName)")!)
UIApplication.shared.open(URL(string: "\(baseUri)\(profileName)")!)
}
self.profileName = nil
}

View file

@ -1,4 +1,4 @@
#!/bin/sh
#!/usr/bin/env bash
# set -e: Terminate script if a command returns an error
set -e
@ -60,6 +60,7 @@ CLEAN_ONLY=false
CONFIG=Release
DO_KMP_DOWNLOADS=false
CODE_SIGN=
DO_CODE_SIGN=true
# Parse args
while [[ $# -gt 0 ]] ; do
@ -77,7 +78,7 @@ while [[ $# -gt 0 ]] ; do
;;
-no-codesign)
CODE_SIGN="CODE_SIGN_IDENTITY= CODE_SIGNING_REQUIRED=NO ${DEV_TEAM:-} CODE_SIGN_ENTITLEMENTS= CODE_SIGNING_ALLOWED=NO"
DO_ARCHIVE=false
DO_CODE_SIGN=false
;;
-no-archive)
DO_ARCHIVE=false
@ -283,8 +284,8 @@ if [ $DO_KEYMANAPP = true ]; then
else
# Time to prepare the deployment archive data.
echo ""
echo "Preparing .ipa file for deployment."
xcodebuild $XCODEFLAGS_EXT -scheme Keyman \
echo "Preparing .xcarchive."
xcodebuild $XCODEFLAGS_EXT $CODE_SIGN -scheme Keyman \
-archivePath $ARCHIVE_PATH \
archive -allowProvisioningUpdates \
VERSION=$VERSION \
@ -294,9 +295,12 @@ if [ $DO_KEYMANAPP = true ]; then
assertDirExists "$ARCHIVE_PATH"
xcodebuild $XCODEFLAGS -exportArchive -archivePath $ARCHIVE_PATH \
-exportOptionsPlist exportAppStore.plist \
-exportPath $BUILD_PATH/${CONFIG}-iphoneos -allowProvisioningUpdates
if [ $DO_CODE_SIGN == true ]; then
echo "Preparing .ipa file for deployment"
xcodebuild $XCODEFLAGS -exportArchive -archivePath $ARCHIVE_PATH \
-exportOptionsPlist exportAppStore.plist \
-exportPath $BUILD_PATH/${CONFIG}-iphoneos -allowProvisioningUpdates
fi
fi
echo ""

View file

@ -377,7 +377,7 @@
"$(SRCROOT)/../../Carthage/Build/",
);
INFOPLIST_FILE = KMSample1/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 9.0;
IPHONEOS_DEPLOYMENT_TARGET = 12.1;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
@ -402,7 +402,7 @@
"$(SRCROOT)/../../Carthage/Build/",
);
INFOPLIST_FILE = KMSample1/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 9.0;
IPHONEOS_DEPLOYMENT_TARGET = 12.1;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",

View file

@ -553,7 +553,7 @@
CODE_SIGN_IDENTITY = "iPhone Developer";
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
INFOPLIST_FILE = KMSample2/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 9.0;
IPHONEOS_DEPLOYMENT_TARGET = 12.1;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
@ -578,7 +578,7 @@
CODE_SIGN_IDENTITY = "iPhone Developer";
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
INFOPLIST_FILE = KMSample2/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 9.0;
IPHONEOS_DEPLOYMENT_TARGET = 12.1;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
@ -604,7 +604,7 @@
"$(inherited)",
);
INFOPLIST_FILE = SWKeyboard/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 9.0;
IPHONEOS_DEPLOYMENT_TARGET = 12.1;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
@ -629,7 +629,7 @@
CODE_SIGN_IDENTITY = "iPhone Developer";
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
INFOPLIST_FILE = SWKeyboard/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 9.0;
IPHONEOS_DEPLOYMENT_TARGET = 12.1;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",

View file

@ -1,4 +1,4 @@
#!/bin/sh
#!/usr/bin/env bash
# set -e: Terminate script if a command returns an error
set -e

View file

@ -1,4 +1,4 @@
#!/bin/sh
#!/usr/bin/env bash
set -e
set -u

118
ios/tools/prepRelease.sh Executable file
View file

@ -0,0 +1,118 @@
#!/usr/bin/env bash
## Note - this script is designed solely for use within our Continuous
## Integration processes with `pwd` as this script's parent folder.
# Exit if program call fails
set -e
# Exit if unset variable used
## set -u (causes history-utils.sh to fail)
## 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
# This script runs from its parent's folder
cd "$(dirname "$THIS_SCRIPT")/.."
# Only allow one upload artifact set to exist.
if [ -d "upload" ]; then
rm -rf upload
fi
#Include script dependency
. $KEYMAN_ROOT/resources/build/history/history-utils.sh #includes the following
#. ../resources/shellHelperFunctions.sh
BUILD_NUMBER=`cat ../VERSION.md`
TIER=`cat ../TIER.md`
KEYMAN_CHANGELOG="changelog-${BUILD_NUMBER}-${TIER}.txt"
CHANGELOG_PATH="upload/$BUILD_NUMBER/$KEYMAN_CHANGELOG"
WORK_DIR=`pwd`
BUILD_COUNTER="$((${BUILD_NUMBER##*.}))"
UPLOAD_BASE="upload"
UPLOAD_FOLDER="${BUILD_NUMBER}"
UPLOAD_DIR="${UPLOAD_BASE}/${UPLOAD_FOLDER}"
mkdir -p "${UPLOAD_DIR}"
# First, we prep the files for publication: write changelog
echo "Writing changelog to $CHANGELOG_PATH"
get_version_notes "ios" "${BUILD_NUMBER}" "$TIER" > $CHANGELOG_PATH
echo "* Minor fixes and performance improvements" >> $CHANGELOG_PATH
assertFileExists "${CHANGELOG_PATH}"
# Strip emoji to make Apple happy
emoji="\U1f300-\U1f5ff\U1f900-\U1f9ff\U1f600-\U1f64f\U1f680-\U1f6ff\U2600-\U26ff\U2700-\U27bf\U1f1e6-\U1f1ff\U1f191-\U1f251\U1f004\U1f0cf\U1f170-\U1f171\U1f17e-\U1f17f\U1f18e\U3030\U2b50\U2b55\U2934-\U2935\U2b05-\U2b07\U2b1b-\U2b1c\U3297\U3299\U303d\U00a9\U00ae\U2122\U23f3\U24c2\U23e9-\U23ef\U25b6\U23f8-\U23fa"
LC_ALL=UTF-8 sed -e "s/[$(printf $emoji)]//g" < "$CHANGELOG_PATH" > "$CHANGELOG_PATH.1"
mv -f "$CHANGELOG_PATH.1" "$CHANGELOG_PATH"
assertFileExists "${CHANGELOG_PATH}"
#
# Keyman Engine
#
KMEI_DST_NAME="keyman-engine-ios-${BUILD_NUMBER}.zip"
KMEI_DST="${WORK_DIR}/${UPLOAD_DIR}/${KMEI_DST_NAME}"
KMEI_FRAMEWORK_BASE="build/Build/Products/Release/"
FRAMEWORK="KeymanEngine.xcframework"
KEYMAN_SAMPLES="samples"
echo "engine dest: $KMEI_DST"
echo "Zipping ${UNI_FRAMEWORK} => ${UPLOAD_DIR}/${KMEI_DST}..."
cd "${KMEI_FRAMEWORK_BASE}"
zip -qrX ${KMEI_DST} ${FRAMEWORK}
cd $WORK_DIR
echo "Copying Keyman Engine samples into ${UPLOAD_DIR}/${KMEI_DST_NAME}..."
cp -rf "${KEYMAN_SAMPLES}" "${UPLOAD_DIR}/samples"
cd "${UPLOAD_DIR}"
zip -qr "${KMEI_DST_NAME}" "samples"
rm -rf "samples"
cd $WORK_DIR
#
# Keyman app
#
KEYMANAPP_IPA="build/Build/Products/Release-iphoneos/Keyman.ipa"
KEYMANAPP_IPA_DST="keyman-ios-${BUILD_NUMBER}.ipa"
echo "Copying Keyman IPA ${KEYMANAPP_IPA} => ${UPLOAD_DIR}/${KEYMANAPP_IPA/DST}..."
cp "${KEYMANAPP_IPA}" "${WORK_DIR}/${UPLOAD_DIR}/${KEYMANAPP_IPA_DST}"
#
# FirstVoices app
#
if [ ${RELEASE_OEM_FIRSTVOICES} = true ]; then
FIRSTVOICESAPP_IPA="../oem/firstvoices/ios/build/Build/Products/Release-iphoneos/FirstVoices.ipa"
FIRSTVOICESAPP_IPA_DST="firstvoices-ios-${BUILD_NUMBER}.ipa"
echo "Copying FirstVoices IPA ${FIRSTVOICESAPP_IPA} => ${UPLOAD_DIR}/${FIRSTVOICESAPP_IPA/DST}..."
cp "${FIRSTVOICESAPP_IPA}" "${WORK_DIR}/${UPLOAD_DIR}/${FIRSTVOICESAPP_IPA_DST}"
fi
#
# Write download info files
#
cd "${UPLOAD_DIR}"
write_download_info "Keyman Engine for iOS" "${KMEI_DST_NAME}" "${BUILD_NUMBER}" "${TIER}" "ios"
write_download_info "Keyman for iPhone and iPad" "${KEYMANAPP_IPA_DST}" "${BUILD_NUMBER}" "${TIER}" "ios"
if [ ${RELEASE_OEM_FIRSTVOICES} = true ]; then
write_download_info "FirstVoices Keyboards" "${FIRSTVOICESAPP_IPA_DST}" "${BUILD_NUMBER}" "${TIER}" "ios"
fi

View file

@ -20,5 +20,5 @@
"ts-node",
"typescript"
],
"version": "15.0.53"
"version": "15.0.57"
}

View file

@ -9,7 +9,6 @@
- [kmflcomp](./kmflcomp) - KMFL keyboard compiler
- [libkmfl](./libkmfl) - older KMFL core library
- [ibus-kmfl](./ibus-kmfl) - IBUS integration to use KMFL
- scim\_kmfl\_imengine - deprecated SCIM engine to use KMFL
See [license information](./LICENSE.md) about licensing.
@ -18,7 +17,15 @@ See [license information](./LICENSE.md) about licensing.
- It is helpful to be using the [packages.sil.org](http://packages.sil.org) repo
- Install packages required for building and developing KMFL and Keyman for Linux
`sudo apt install cdbs debhelper libx11-dev autotools-dev build-essential dh-autoreconf flex bison libibus-1.0-dev python3-setuptools meson libjson-glib-dev libgtk-3-dev libxml2-utils help2man python3-lxml python3-magic python3-numpy python3-pil python3-pip python3-qrcode python3-requests python3-requests-cache python3 python3-gi dconf-cli dconf-editor`
```bash
sudo apt install cdbs debhelper libx11-dev autotools-dev build-essential \
dh-autoreconf flex bison libibus-1.0-dev python3-setuptools meson \
libjson-glib-dev libgtk-3-dev libxml2-utils help2man python3-lxml \
python3-magic python3-numpy python3-pil python3-pip python3-qrcode \
python3-requests python3-requests-cache python3 python3-gi dconf-cli \
dconf-editor
```
## Compiling from Command Line

View file

@ -1,3 +1,9 @@
ibus-keyman (14.0.273-1) unstable; urgency=medium
* Keyman 14
-- Eberhard Beilharz <eb1@sil.org> Mon, 26 Apr 2021 18:24:41 +0200
ibus-keyman (11.0.103-4) unstable; urgency=medium
* don't attempt to restart ibus without sudo and ps

View file

@ -1,3 +1,9 @@
ibus-kmfl (14.0.273-1) unstable; urgency=medium
* Keyman 14
-- Eberhard Beilharz <eb1@sil.org> Mon, 26 Apr 2021 18:24:41 +0200
ibus-kmfl (11.0.101-1) unstable; urgency=medium
* New upstream Keyman for Linux 11.0 beta 1

View file

@ -1,3 +1,9 @@
keyman-config (14.0.273-1) unstable; urgency=medium
* Keyman 14
-- Eberhard Beilharz <eb1@sil.org> Mon, 26 Apr 2021 18:24:41 +0200
keyman-config (11.0.103-3) unstable; urgency=medium
* Update maintainer to Debian Input Method Team

View file

@ -1,3 +1,9 @@
kmflcomp (14.0.273-1) unstable; urgency=medium
* Keyman 14
-- Eberhard Beilharz <eb1@sil.org> Mon, 26 Apr 2021 18:24:41 +0200
kmflcomp (11.0.101-1) unstable; urgency=medium
* New upstream beta 1 of Keyman for Linux 11.0

View file

@ -1,3 +1,9 @@
libkmfl (14.0.273-1) unstable; urgency=medium
* Keyman 14
-- Eberhard Beilharz <eb1@sil.org> Mon, 26 Apr 2021 18:24:41 +0200
libkmfl (11.0.101-1) unstable; urgency=medium
* New upstream - Keyman for Linux 11.0 beta 1

View file

@ -72,6 +72,7 @@ displayInfo "" \
cd $KEYMAN_ROOT/mac/help
MDLUA="$KEYMAN_ROOT/resources/build/html-link.lua"
CSS="../../resources/build/offline-help-style-spec.txt"
MD=`find . -name "*.md"`
DESTHTM="$THIS_DIR/Keyman4MacIM/Keyman4MacIM/Help"
@ -94,7 +95,7 @@ if $DO_HTM; then
OUTFILE="$DESTHTM/${INFILE%.md}.html"
echo "Processing $INFILE to $(basename "$OUTFILE")"
mkdir -p "$(dirname "$OUTFILE")"
pandoc -s --lua-filter="$MDLUA" -t html -o "$OUTFILE" $INFILE
pandoc -s -H "$CSS" --lua-filter="$MDLUA" -t html -o "$OUTFILE" $INFILE
done
fi

View file

@ -1,5 +1,5 @@
github "marmelroy/Zip"
github "DaveWoodCom/XCGLogger" ~> 6.1.0
github "dennisweissmann/DeviceKit" ~> 2.3
github "devicekit/DeviceKit" ~> 2.3
github "ashleymills/Reachability.swift"
github "getsentry/sentry-cocoa" ~> 6.2.1

View file

@ -1,5 +1,5 @@
github "DaveWoodCom/XCGLogger" "6.1.0"
github "ashleymills/Reachability.swift" "v5.0.0"
github "dennisweissmann/DeviceKit" "2.3.0"
github "devicekit/DeviceKit" "2.3.0"
github "getsentry/sentry-cocoa" "6.2.1"
github "marmelroy/Zip" "2.0.0"

View file

@ -55,7 +55,6 @@
CEBD34272654D76E00EB2EA8 /* Zip.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEBD340B2654D5AA00EB2EA8 /* Zip.xcframework */; };
CEBD34282654D76E00EB2EA8 /* Zip.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = CEBD340B2654D5AA00EB2EA8 /* Zip.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
CEBD34472654FF3300EB2EA8 /* KeymanEngine.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEBD34012654D41200EB2EA8 /* KeymanEngine.xcframework */; };
CEBD34482654FF3300EB2EA8 /* KeymanEngine.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = CEBD34012654D41200EB2EA8 /* KeymanEngine.xcframework */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
CEDB327F265C9C58000A2009 /* DeviceKit.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEBD34052654D4EB00EB2EA8 /* DeviceKit.xcframework */; };
CEDB3280265C9C58000A2009 /* ObjcExceptionBridging.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEBD34082654D5AA00EB2EA8 /* ObjcExceptionBridging.xcframework */; };
CEDB3281265C9C58000A2009 /* Reachability.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEBD340C2654D5AB00EB2EA8 /* Reachability.xcframework */; };
@ -93,17 +92,6 @@
name = "Embed App Extensions";
runOnlyForDeploymentPostprocessing = 0;
};
CEBD34492654FF3300EB2EA8 /* Embed Frameworks */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 2147483647;
dstPath = "";
dstSubfolderSpec = 10;
files = (
CEBD34482654FF3300EB2EA8 /* KeymanEngine.xcframework in Embed Frameworks */,
);
name = "Embed Frameworks";
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXCopyFilesBuildPhase section */
/* Begin PBXFileReference section */
@ -331,7 +319,6 @@
98C9A8B91BFBF23C009E9A4F /* Frameworks */,
98C9A8BA1BFBF23C009E9A4F /* Resources */,
37B453EF245C09CE008877E5 /* ShellScript */,
CEBD34492654FF3300EB2EA8 /* Embed Frameworks */,
);
buildRules = (
);
@ -568,10 +555,6 @@
ENABLE_BITCODE = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_TESTABILITY = YES;
FRAMEWORK_SEARCH_PATHS = (
"$(PROJECT_DIR)",
"$(SRCROOT)/../../../ios/Carthage/Build/",
);
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_DYNAMIC_NO_PIC = NO;
GCC_NO_COMMON_BLOCKS = YES;
@ -630,10 +613,6 @@
ENABLE_BITCODE = NO;
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
FRAMEWORK_SEARCH_PATHS = (
"$(PROJECT_DIR)",
"$(SRCROOT)/../../../ios/Carthage/Build/",
);
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_NO_COMMON_BLOCKS = YES;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
@ -663,7 +642,7 @@
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
DEVELOPMENT_TEAM = D7TR486TEH;
INFOPLIST_FILE = FirstVoices/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 9.0;
IPHONEOS_DEPLOYMENT_TARGET = 12.1;
KEYMAN_ROOT = "$(SRCROOT)/../../..";
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
@ -692,7 +671,7 @@
CODE_SIGN_STYLE = Manual;
DEVELOPMENT_TEAM = D7TR486TEH;
INFOPLIST_FILE = FirstVoices/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 9.0;
IPHONEOS_DEPLOYMENT_TARGET = 12.1;
KEYMAN_ROOT = "$(SRCROOT)/../../..";
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
@ -717,13 +696,9 @@
CODE_SIGN_STYLE = Manual;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
DEVELOPMENT_TEAM = D7TR486TEH;
FRAMEWORK_SEARCH_PATHS = (
"$(inherited)",
"$(PROJECT_DIR)/Carthage/Build/iOS",
);
HEADER_SEARCH_PATHS = "";
INFOPLIST_FILE = SWKeyboard/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 9.0;
IPHONEOS_DEPLOYMENT_TARGET = 12.1;
KEYMAN_ROOT = "$(SRCROOT)/../../..";
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
@ -752,13 +727,9 @@
CODE_SIGN_IDENTITY = "iPhone Distribution";
CODE_SIGN_STYLE = Manual;
DEVELOPMENT_TEAM = D7TR486TEH;
FRAMEWORK_SEARCH_PATHS = (
"$(inherited)",
"$(PROJECT_DIR)/Carthage/Build/iOS",
);
HEADER_SEARCH_PATHS = "";
INFOPLIST_FILE = SWKeyboard/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 9.0;
IPHONEOS_DEPLOYMENT_TARGET = 12.1;
KEYMAN_ROOT = "$(SRCROOT)/../../..";
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",

View file

@ -1,4 +1,4 @@
#!/bin/sh
#!/usr/bin/env bash
## START STANDARD BUILD SCRIPT INCLUDE
# adjust relative paths as necessary

View file

@ -0,0 +1,288 @@
<style>
/**************************************
* CSS RESET
* ***********************************/
/* http://meyerweb.com/eric/tools/css/reset/
v2.0 | 20110126
License: none (public domain)
*/
html, body, div, span, applet, object, iframe,
h1, h2, h3, h4, h5, h6, p, blockquote, pre,
a, abbr, acronym, address, big, cite, code,
del, dfn, em, img, ins, kbd, q, s, samp,
small, strike, strong, sub, sup, tt, var,
b, u, i, center,
dl, dt, dd, ol, ul, li,
fieldset, form, label, legend,
table, caption, tbody, tfoot, thead, tr, th, td,
article, aside, canvas, details, embed,
figure, figcaption, footer, header, hgroup,
menu, nav, output, ruby, section, summary,
time, mark, audio, video {
margin: 0;
padding: 0;
border: 0;
font-size: 100%;
font: inherit;
vertical-align: baseline;
}
/* HTML5 display-role reset for older browsers */
article, aside, details, figcaption, figure,
footer, header, hgroup, menu, nav, section {
display: block;
}
body {
line-height: 1;
}
ol, ul {
list-style: none;
padding-left: 10px;
}
blockquote, q {
quotes: none;
}
blockquote:before, blockquote:after,
q:before, q:after {
content: '';
content: none;
}
table {
border-collapse: collapse;
}
tbody {
display: table-row-group;
vertical-align: middle;
}
table td{
padding: 4px;
}
html{
font-family: 'Cabin', sans-serif;
color: #333;
}
html p,
html dd,
html li {
font-family: 'Calibri', sans-serif;
font-size: 14pt;
}
body {
line-height: inherit;
}
/**************************************
* Page Layout CSS
* ***********************************/
html{
cursor: default;
background: #fff;
}
:not(div.interface-hierarchy) blockquote {
margin-left: 32px;
margin-bottom: 16px;
background: rgba(242,242,242,0.9);
padding: 4px;
border-radius: 4px;
}
h1{
text-align: left;
font-size: 28pt;
padding: 40px 10px 10px 10px;
}
h2{
font-size: 20pt;
line-height: 1.4;
padding: 32px 10px 10px 10px;
}
h3{
font-size: 16pt;
font-weight: 600;
padding: 16px 10px 10px 10px;
}
h3, h2, h1 {
color: #B92034;
margin-top: 10px;
}
h1 a, h2 a, h3 a {
color: #B92034;
}
h1 a:visited, h2 a:visited, h3 a:visited {
color: #B92034;
}
h4{
font-size: 14pt;
font-weight: 600;
padding: 4px 10px 4px 10px;
}
p, dl, .itemizedlist {
padding: 0px 10px 10px 10px;
line-height: 1.4;
font-size: 14pt;
}
p a{
color: #B92034;
text-decoration: underline;
cursor: pointer;
font-weight: 600;
line-height: 1.4;
}
li{
margin-left: 30px;
list-style: disc;
list-style-position: outside;
line-height: 1.4;
font-size: 14pt;
}
img.center{
margin-left: auto;
margin-right: auto;
display: block;
}
img.inline {
margin: 0;
}
.itemizedlist li{
list-style-position: outside;
}
li {
margin-bottom: 12px;
}
/* TODO: deprecate this since prismjs handles it. This also conflicts with the line-numbers plugin */
pre {
margin-left: 9px;
margin-right: 9px;
padding: 9px;
line-height: 1.4;
}
pre code {
line-height: 1.4;
}
ol li a{
color: #B92034;
}
code {
font-family: Consolas, Courier, "Courier New", mono;
font-size: 10.5pt;
}
strong, b {
font-weight: bold;
}
i, cite, em, var, address, dfn {
font-style: italic;
}
dt {
margin-top: 16px;
}
dt:first-child {
margin-top: 0;
}
dd {
margin-left: 32pt;
}
table.standard-table td,
table.standard-table th {
border: solid #e0e0dc;
border-width: 0 1px 1px 0;
padding: 6px;
text-align: left;
}
table.standard-table th {
border: 2px solid #fff;
border-bottom: 2px solid #d4dde4;
background: #eaeff2;
background: rgba(212,221,228,.5);
font-family: 'Open Sans Light',sans-serif;
font-size: 14px;
padding: 2px 8px 4px;
font-weight: 700;
}
table.standard-table td {
background-color: #f9fafb;
background-color: rgba(212,221,228,.15);
border: 2px solid #fff;
box-shadow: inset 0 -1px 0 0 #eaeff2;
box-shadow: inset 0 -1px 0 0 rgba(212,221,228,.5);
}
article dl dt span.readonly {
background-color: #666769;
font-size: 13px;
color: white;
padding: 1px 6px 3px;
border-radius: 6px;
}
article dl dd span.optional {
background-color: #9c9c9c;
font-size: 13px;
font-style: italic;
font-weight: lighter;
color: white;
padding: 1px 6px 3px;
border-radius: 6px;
}
/* Font styling limited to Ascii characters */
kbd {
background: none repeat scroll 0 0 #CCCCD0;
border: 1px solid #808080;
border-right: 2px solid #606060;
border-bottom: 2px solid #606060;
border-radius: 4px;
color: #000000;
font-family: "NotoSans-Regular-Ascii";
font-size: 13px;
font-weight: bold;
margin: 0;
padding: 1px 4px;
min-width: 1.5em;
text-align: center;
display: inline-block;
}
/* Make the <kbd> element look like an iOS key. */
kbd.ios {
background-color: #fafafa; /* faaa fa fa fa fa faaaa far better... */
border: 0;
box-shadow: /* Hard shadow */ 0 1px rgba(0,0,0,0.4),
/* Diffuse shadow */ 0 1px 4px rgba(0,0,0,0.2),
/* Highlight */ inset 0 1px white;
border-radius: 4px;
font-weight: 500;
}
</style>

View file

@ -1,5 +1,5 @@
{
"name": "@keymanapp/resources-gosh",
"version": "15.0.53",
"version": "15.0.57",
"lockfileVersion": 1
}

View file

@ -1,6 +1,6 @@
{
"name": "@keymanapp/resources-gosh",
"version": "15.0.53",
"version": "15.0.57",
"description": "Good Ol' Shell",
"author": "Marc Durdin <marc@keyman.com> (https://github.com/mcdurdin)",
"contributors": [

View file

@ -1,5 +1,5 @@
{
"name": "@keymanapp/web-environment",
"version": "15.0.53",
"version": "15.0.57",
"lockfileVersion": 1
}

View file

@ -1,6 +1,6 @@
{
"name": "@keymanapp/web-environment",
"version": "15.0.53",
"version": "15.0.57",
"description": "A compilation utility for passing select environment variables into our TS builds",
"author": "Joshua Horton <joshua_horton@sil.org> (https://github.com/jahorton)",
"homepage": "https://github.com/keymanapp/keyman",
@ -17,6 +17,6 @@
"url": "https://github.com/keymanapp/keyman/issues"
},
"devDependencies": {
"@keymanapp/resources-gosh": "^15.0.53"
"@keymanapp/resources-gosh": "^15.0.57"
}
}

2
web/package-lock.json generated
View file

@ -1,6 +1,6 @@
{
"name": "keyman",
"version": "15.0.53",
"version": "15.0.57",
"lockfileVersion": 2,
"requires": true,
"packages": {

View file

@ -1,6 +1,6 @@
{
"name": "keyman",
"version": "15.0.53",
"version": "15.0.57",
"description": "Facilitates text input in any language.",
"repository": {
"type": "git",
@ -18,8 +18,8 @@
},
"homepage": "https://github.com/keymanapp/keyman#readme",
"devDependencies": {
"@keymanapp/resources-gosh": "^15.0.53",
"@keymanapp/web-sentry-manager": "^15.0.53",
"@keymanapp/resources-gosh": "^15.0.57",
"@keymanapp/web-sentry-manager": "^15.0.57",
"@sentry/cli": "^1.52.3",
"chai": "^4.3.4",
"google-closure-compiler-java": "^20200224.0.0",
@ -52,13 +52,13 @@
"sentry-cli": "sentry-cli"
},
"dependencies": {
"@keymanapp/input-processor": "^15.0.53",
"@keymanapp/keyboard-processor": "^15.0.53",
"@keymanapp/lexical-model-layer": "^15.0.53",
"@keymanapp/models-types": "^15.0.53",
"@keymanapp/recorder-core": "^15.0.53",
"@keymanapp/web-environment": "^15.0.53",
"@keymanapp/web-utils": "^15.0.53",
"@keymanapp/input-processor": "^15.0.57",
"@keymanapp/keyboard-processor": "^15.0.57",
"@keymanapp/lexical-model-layer": "^15.0.57",
"@keymanapp/models-types": "^15.0.57",
"@keymanapp/recorder-core": "^15.0.57",
"@keymanapp/web-environment": "^15.0.57",
"@keymanapp/web-utils": "^15.0.57",
"@types/node": "^11.9.4",
"es6-shim": "^0.35.5",
"eventemitter3": "^4.0.0"

View file

@ -0,0 +1,19 @@
#! /usr/bin/env bash
#
# CI script to kill BrowserStack testing tunnel (Windows only)
#
set -eu
## 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
get_builder_OS
if [ ${os_id} == 'win' ]; then
taskkill //f //im BrowserStackLocal.exe
fi

View file

@ -524,6 +524,34 @@ namespace com.keyman.dom {
super(keyman);
}
private static selectTouch(e: TouchEvent): Touch {
/**
* During multi-touch event's, it's possible for one or more touches of said multi-touch
* to be against irrelevant parts of the page. We only want to consider touches against
* valid OutputTargets - against elements of the page that KMW can attach to.
* With touch active... that's a TouchAliasElement.
*/
let isValidTouch = function(touch: Touch, target: EventTarget): boolean {
return e.target == target && !!(findTouchAliasTarget(touch.target as HTMLElement));
}
// The event at least tells us the event's target, which can be used to help check
// whether or not individual `Touch`es may be related to this specific event for
// an ongoing multitouch scenario.
let target = e.target;
// Find the first touch affected by this event that matches the current target.
for(let i=0; i < e.changedTouches.length; i++) {
if(isValidTouch(e.changedTouches[i], target)) {
return e.changedTouches[i];
}
}
// Shouldn't be possible. Just in case, we'd prefer a silent failure that allows
// callers to silently abort.
throw new Error("Could not select valid Touch for event.");
}
/**
* Handle receiving focus by simulated input field
*
@ -538,7 +566,12 @@ namespace com.keyman.dom {
};
if(e && dom.Utils.instanceof(e, "TouchEvent")) {
tEvent=(e as TouchEvent).touches[0];
try {
tEvent=DOMTouchHandlers.selectTouch(e as TouchEvent);
} catch(err) {
console.warn(err);
return;
}
} else { // Allow external code to set focus and thus display the OSK on touch devices if required (KMEW-123)
tEvent={clientX:0, clientY:0}
@ -796,9 +829,16 @@ namespace com.keyman.dom {
// Identify the target from the touch list or the event argument (IE 10 only)
var target: HTMLElement;
let touch: Touch;
if(dom.Utils.instanceof(e, "TouchEvent")) {
target = (e as TouchEvent).targetTouches[0].target as HTMLElement;
try {
touch=DOMTouchHandlers.selectTouch(e as TouchEvent);
} catch(err) {
console.warn(err);
return;
}
target = touch.target as HTMLElement;
} else {
target = e.target as HTMLElement;
}
@ -816,8 +856,8 @@ namespace com.keyman.dom {
var x, y;
if(dom.Utils.instanceof(e, "TouchEvent")) {
x = (e as TouchEvent).touches[0].screenX;
y = (e as TouchEvent).touches[0].screenY;
x = touch.screenX;
y = touch.screenY;
} else {
x = (e as MouseEvent).screenX;
y = (e as MouseEvent).screenY;

View file

@ -34,52 +34,6 @@ namespace com.keyman.dom {
// Not to be confused with the simulated scrollbar.
let scroller: HTMLElement;
// Designed to 'breadcrumb' elements to assist in diagnosis of an evasive known issue.
let elementLogger = function() {
let elementDescriber = function(element: HTMLElement) {
if(element) {
let childIndex = undefined;
let parent = element.parentElement;
if(parent) {
for(let child = parent.firstChild, i = 0; child; child = child.nextSibling, i++) {
if(child == element) {
childIndex = i;
break;
}
}
}
// ID: should never be specified for TouchAliasElement components
// Class: specified for the root TouchAliasElement and for its text spans
// index: useful for identifying elements with no class info
return `tag type ${element.tagName}, class '${element.classList}', index under parent: '${childIndex}', id '${element.id}'`;
} else {
return `null`;
}
};
// Very rough breadcrumbs for use with any Sentry logs.
// We'd expect to see the telltale 'keymanweb-input' appear as the class for one of the
// three elements logged here... at least, normally.
console.info(`(For diagnosing https://github.com/keymanapp/keyman/issues/4797)`);
// We don't use .innerHTML because that would tell us what the user's been typing.
// No keylogging!
console.info(`Original target: ${elementDescriber(target)}`);
if(target.previousSibling && target.previousSibling instanceof HTMLElement) {
console.info(`Previous sibling: ${elementDescriber(target.previousSibling)}`);
}
if(target.nextSibling && target.nextSibling instanceof HTMLElement) {
console.info(`Next sibling: ${elementDescriber(target.nextSibling)}`);
}
console.info(`Target's parent: ${elementDescriber(target.parentElement)}`);
if(target.parentElement instanceof HTMLElement) {
console.info(`Target's grandparent: ${elementDescriber(target.parentElement.parentElement)}`);
}
// Triggers the actual Sentry log (on pages that include Sentry logging)
//throw new Error(`Unexpected touch-start event target.`);
};
// Identify the scroller element
if(target && dom.Utils.instanceof(target, "HTMLSpanElement")) {
scroller=target.parentNode as HTMLElement;
@ -101,12 +55,6 @@ namespace com.keyman.dom {
return target['kmw_ip'] as TouchAliasElement;
} else {
// If it's not in any way related to a TouchAliasElement, simply return null.
// NOTE: At present, this method should only be called in places that actually EXPECT a TouchAliasElement...
// So if we fail to find one, something's gone wrong, and we'd like more details.
// There's an evasive error related to this at present so we'll temporarily console-log info
// that may help us determine why we couldn't find the expected element.
elementLogger();
return null;
}
@ -115,7 +63,6 @@ namespace com.keyman.dom {
if(root['base'] !== undefined) {
return root as TouchAliasElement;
} else {
elementLogger();
return null;
}
}

View file

@ -11,6 +11,9 @@
**/obj
**/x64
# Temporary build files for VC++
**/*.FileListAbsolute.txt
# KeymanWeb is copied from /web/src during Developer build
developer/TIKE/xml/kmw/resource

View file

@ -112,9 +112,9 @@ DELPHIWARNINGS=-W+MESSAGE_DIRECTIVE -W+IMPLICIT_STRING_CAST -W+IMPLICIT_STRING_C
DELPHIWARNINGS=-W-MESSAGE_DIRECTIVE -W-IMPLICIT_STRING_CAST -W-IMPLICIT_STRING_CAST_LOSS -W-EXPLICIT_STRING_CAST -W-EXPLICIT_STRING_CAST_LOSS -W-CVT_WCHAR_TO_ACHAR -W-CVT_NARROWING_STRING_LOST -W-CVT_ACHAR_TO_WCHAR -W-CVT_WIDENING_STRING_LOST -W-UNICODE_TO_LOCALE -W-LOCALE_TO_UNICODE -W-IMPLICIT_VARIANTS -W-IMPLICIT_INTEGER_CAST_LOSS -W-IMPLICIT_CONVERSION_LOSS -W-COMBINING_SIGNED_UNSIGNED64 -W-COMBINING_SIGNED_UNSIGNED64
!ENDIF
DELPHIDPRPARAMS=-Q -B -GD -H -VT -$C+ -$D+ -$L+ -$O+ -$Q- -$R- -$W+ -$Y+ -E. $(DELPHIWARNINGS) -I$(DELPHIINCLUDES) -U$(DELPHIINCLUDES) -R$(DELPHIINCLUDES) -NSVcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;System;Xml;Web;Soap;Winapi;System.Win
DELPHIDPRPARAMS64=-Q -B -GD -H -VT -$C+ -$D+ -$L+ -$O+ -$Q- -$R- -$W+ -$Y+ -E. $(DELPHIWARNINGS) -I$(DELPHIINCLUDES) -U$(DELPHIINCLUDES) -R$(DELPHIINCLUDES) -NSVcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;System;Xml;Web;Soap;Winapi;System.Win
DELPHIDPKPARAMS=-Q -B -GD -VT -$C+ -$D+ -$L+ -$O+ -$Q- -$R- -$W+ -$Y+ -E. $(DELPHIWARNINGS) -I$(DELPHIINCLUDES) -U$(DELPHIINCLUDES) -R$(DELPHIINCLUDES) -NSVcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;System;Xml;Web;Soap;Winapi;System.Win -LE$(OUTLIB) -LN$(OUTLIB) -NSData
DELPHIDPRPARAMS=-Q -B -GD -H -VT -$C+ -$D+ -$J+ -$L+ -$O+ -$Q- -$R- -$W+ -$Y+ -E. $(DELPHIWARNINGS) -I$(DELPHIINCLUDES) -U$(DELPHIINCLUDES) -R$(DELPHIINCLUDES) -NSVcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;System;Xml;Web;Soap;Winapi;System.Win
DELPHIDPRPARAMS64=-Q -B -GD -H -VT -$C+ -$D+ -$J+ -$L+ -$O+ -$Q- -$R- -$W+ -$Y+ -E. $(DELPHIWARNINGS) -I$(DELPHIINCLUDES) -U$(DELPHIINCLUDES) -R$(DELPHIINCLUDES) -NSVcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;System;Xml;Web;Soap;Winapi;System.Win
DELPHIDPKPARAMS=-Q -B -GD -VT -$C+ -$D+ -$J+ -$L+ -$O+ -$Q- -$R- -$W+ -$Y+ -E. $(DELPHIWARNINGS) -I$(DELPHIINCLUDES) -U$(DELPHIINCLUDES) -R$(DELPHIINCLUDES) -NSVcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;System;Xml;Web;Soap;Winapi;System.Win -LE$(OUTLIB) -LN$(OUTLIB) -NSData
!IFDEF NOUI
DCC32="$(DCC32PATH)\dcc32.exe" $(DELPHIDPRPARAMS)

View file

@ -2,7 +2,7 @@
## Build Prerequisites
1. Install [VS2017 Community Edition](#visual-studio-2017-community-edition-setup-requirements).
1. Install [VS2019 Community Edition](#visual-studio-2019-community-edition-setup-requirements).
2. Install [Delphi 10.3](#delphi-setup-requirements).
3. Install [git](https://git-scm.com/download/win).
4. Install [nodejs](https://nodejs.org/en/download/).
@ -29,7 +29,7 @@ For local development you do not need to perform a release build so these are op
## Building Keyman for Windows and Keyman Developer
1. Start 'x64_x86 Cross Tools Command Prompt for VS 2017'.
1. Start 'Developer Command Prompt for VS 2019'.
2. Run `make build` from the **windows/src** folder.
3. Artifacts from a successful build will be placed in **windows/bin** folder.
@ -50,7 +50,7 @@ To perform a release build, you will need to obtain valid certificates. A releas
unnecessary for local development. Release builds are currently run from a TeamCity CI
environment.
1. Start 'x64_x86 Cross Tools Command Prompt for VS 2017'.
1. Start 'Developer Command Prompt for VS 2019'.
2. Run `make release` from the **windows/src** folder.
3. Artifacts from a successful build will be placed in **windows/release** folder.
4. **buildtools/help-keyman-com.sh** will push updated documentation to help.keyman.com.
@ -76,22 +76,22 @@ These steps are only required the first time you install Keyman:
'Trusted Root Certification Authorities'. Click Next and finish the wizard.
To deploy a development build of Keyman and Keyman Developer,
1. Start 'x64_x86 Cross Tools Command Prompt for VS 2017'.
1. Start 'Developer Command Prompt for VS 2019'.
2. Run `make signcode` from the **windows/src** folder.
3. Ensure that Keyman and Keyman Developer are not running.
4. Run `make install` in **windows/src/engine**, **windows/src/desktop** and **windows/src/developer**.
## Detailed Prerequisite Notes
### Visual Studio 2017 Community Edition setup requirements
### Visual Studio 2019 Community Edition setup requirements
In Visual Studio 2017, you need to have the following installed:
In Visual Studio 2019, you need to have the following installed:
#### Workloads
* Desktop development with C++
* Universal Windows Platform development
#### Individual components
* Windows Universal CRT SDK
--* Windows Universal CRT SDK
* Windows 10.0.17763.0 SDK
Configure Visual Studio to use two-space tab stops:

View file

@ -0,0 +1,35 @@
# Keyman for Windows
Formerly called "Keyman Desktop", now called "Keyman" to harmonize with other platforms.
# help
Contains all the help documents in Markdown format for Keyman for Windows. It can build both compiled help chm or HTML format.
# inst - keymandesktop.msi
Building and signing of the installation archive keymandesktop.msi
# insthelp - insthelp.exe
Builds a helper executable to do various installation tasks - insthelp.exe.
# kmbrowserhost - kmbrowserhost.exe
kmbrowserhost.exe is the chromium embedded framework (CEF) host process executable. CEF uses a multi-process model and subprocesses are hosted in kmbrowserhost.exe.
# kmconfig
Used for configuration of advanced Keyman settings. Configuration can be imported from a json file or exported to a json file. Individual settings can be set.
# kmshell - Kmshell.exe
Keyman configuration tool that can be run from the command line with arguments to automate a number of tasks.
For example installing and uninstalling keyboards.
# locale
User interface strings in various languages
# setup
Installation program for installing and initial setup of Keyman. A wrapper for keymandesktop.msi that also automates keyboard downloads and update downloads.

3
windows/src/desktop/help/build.sh Normal file → Executable file
View file

@ -137,6 +137,7 @@ build_hhc() {
#
MDLUA="$KEYMAN_ROOT/resources/build/htm-link.lua"
CSS="../../../../resources/build/offline-help-style-spec.txt"
MD=`find -name "*.md"`
DESTCHM="$THIS_DIR/../../../bin/help/desktop"
@ -159,7 +160,7 @@ if $DO_CHM; then
OUTFILE="$DESTCHM/${INFILE%.md}.htm"
echo "Processing $INFILE to $(basename "$OUTFILE")"
mkdir -p "$(dirname "$OUTFILE")"
pandoc -s --lua-filter="$MDLUA" -t html -o "$OUTFILE" $INFILE
pandoc -s -H "$CSS" --lua-filter="$MDLUA" -t html -o "$OUTFILE" $INFILE
done
fi

View file

@ -64,8 +64,7 @@ Here's how to download and install a Keyman keyboard within Keyman:
computer.
**Note:** If a keyboard with the same name is already installed, Keyman will
ask you if you want to replace the old keyboard or cancel the
installation.
automatically replace it.
9. You may be prompted by User Account Control to allow
Keyman to make changes to your computer -- click 'Yes'.
@ -118,8 +117,7 @@ how:
**Note:** Install installs the keyboard for anyone who can log on to your computer.
**Note:** If a keyboard with the same name is already installed, Keyman will
ask you if you want to replace the old keyboard or cancel the
installation.
automatically replace it.
8. Click OK to save your settings and exit Keyman Configuration.

View file

@ -1,46 +0,0 @@
-$A1
-$B-
-$C-
-$D+
-$E-
-$F-
-$G+
-$H+
-$I-
-$J+
-$K-
-$L+
-$M-
-$N+
-$O+
-$P+
-$Q-
-$R-
-$S-
-$T-
-$U-
-$V+
-$W+
-$X+
-$Y+
-$Z1
-GD
-cg
-vn
-vr
-AWinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
-H+
-W+
-M
-$M16384,1048576
-K$2C400000
-LE"C:\Users\mcdurdin.TAVULTESOFT\Documents\Borland Studio Projects\Bpl"
-LN"C:\Users\mcdurdin.TAVULTESOFT\Documents\Borland Studio Projects\Bpl"
-U"C:\temp\EmbeddedWB_D5-D2009_Version_14.67.8\Source;C:\keyman\8.0\src\global\delphi\jedi\"
-O"C:\temp\EmbeddedWB_D5-D2009_Version_14.67.8\Source;C:\keyman\8.0\src\global\delphi\jedi\"
-I"C:\temp\EmbeddedWB_D5-D2009_Version_14.67.8\Source;C:\keyman\8.0\src\global\delphi\jedi\"
-R"C:\temp\EmbeddedWB_D5-D2009_Version_14.67.8\Source;C:\keyman\8.0\src\global\delphi\jedi\"
-DVISUALKEYBOARD_NOCUSTOMBITMAP;VERSION_KEYMAN_REDIST;RELEASE_KEYMAN;EXCMAGIC_GUI
-w-UNSAFE_TYPE
-w-UNSAFE_CODE
-w-UNSAFE_CAST

View file

@ -1,82 +0,0 @@
[Compiler]
A=1
B=0
C=0
D=1
E=0
F=0
G=1
H=1
I=0
J=1
K=0
L=1
M=0
N=1
O=1
P=1
Q=0
R=0
S=0
T=0
U=0
V=1
W=0
X=1
Y=2
Z=1
ShowHints=1
ShowWarnings=1
UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
[Linker]
MapFile=3
OutputObjs=0
ConsoleApp=1
DebugInfo=1
RemoteSymbols=1
MinStackSize=16384
MaxStackSize=1048576
ImageBase=4194304
ExeDescription=
[Directories]
OutputDir=
UnitOutputDir=
PackageDLLOutputDir=
PackageDCPOutputDir=
SearchPath=c:\keyman\5.1\src\global\delphi\vclzip;c:\keyman\5.1\src\global\delphi\folderdlg
Packages=Vcl40;Vclx40;vcljpg40;comp51;VCLZipD4;dclkmn;Vcl50;Vclx50;keyman_components;vclie50;Inetdb50;Inet50;Vcldb50
Conditionals=VISUALKEYBOARD_NOCUSTOMBITMAP;VERSION_KEYMAN_REDIST;RELEASE_KEYMAN;EXCMAGIC_GUI
DebugSourceDirs=C:\keyman\5.1\src\dist\kmcomapi\;C:\keyman\5.1\src\dist\kmcomapi\util\;$(DELPHI)\source\vcl;C:\keyman\5.1\src\dist\kmcomapi\com\;C:\keyman\5.1\src\dist\kmcomapi\com\products\;C:\keyman\5.1\src\dist\kmcomapi\com\customisation\;C:\keyman\5.1\src\dist\kmcomapi\com\packages\;C:\keyman\5.1\src\global\delphi\general\;C:\keyman\5.1\src\dist\kmcomapi\com\keyboards\
UsePackages=0
[Parameters]
RunParams=
HostApplication=
[Language]
ActiveLang=
ProjectLang=$00000C09
RootDir=
[Version Info]
IncludeVerInfo=0
AutoIncBuild=1
MajorVer=5
MinorVer=0
Release=0
Build=17
Debug=0
PreRelease=0
Special=0
Private=0
DLL=0
Locale=3081
CodePage=1252
[Version Info Keys]
CompanyName=
FileDescription=Tavultesoft Keyboard Manager
FileVersion=5.0.0.17
InternalName=
LegalCopyright=
LegalTrademarks=
OriginalFilename=
ProductName=
ProductVersion=1.0.0.0
Comments=

View file

@ -1,45 +0,0 @@
-$A1
-$B-
-$C+
-$D+
-$E-
-$F-
-$G+
-$H+
-$I+
-$J+
-$K-
-$L+
-$M-
-$N+
-$O+
-$P+
-$Q+
-$R+
-$S-
-$T-
-$U-
-$V+
-$W+
-$X+
-$Y+
-$Z1
-GD
-cg
-vn
-AWinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
-H+
-W+
-M
-$M16384,1048576
-K$00400000
-LE"C:\Users\mcdurdin.TAVULTESOFT\Documents\Borland Studio Projects\Bpl"
-LN"C:\Users\mcdurdin.TAVULTESOFT\Documents\Borland Studio Projects\Bpl"
-U"C:\keyman\8.0\src\global\delphi\jedi\;C:\keyman\8.0\cmpsrc\EmbeddedWB\Source"
-O"C:\keyman\8.0\src\global\delphi\jedi\;C:\keyman\8.0\cmpsrc\EmbeddedWB\Source"
-I"C:\keyman\8.0\src\global\delphi\jedi\;C:\keyman\8.0\cmpsrc\EmbeddedWB\Source"
-R"C:\keyman\8.0\src\global\delphi\jedi\;C:\keyman\8.0\cmpsrc\EmbeddedWB\Source"
-DVERSION_KEYMAN_DEVELOPER;DaoCheck;DaoNamedEx;DaoDebug;DaoMessageEx;DAOIdent
-w-UNSAFE_TYPE
-w-UNSAFE_CODE
-w-UNSAFE_CAST

View file

@ -0,0 +1,48 @@
# Keyman Developer for Windows
This is the current home for Keyman Developer except for the Lexical Model Compiler.
The Lexical Model Compiler is found at the root level /developer folder.
## inst - keymandeveloper.msi
Building and signing of the installation archive keymandeveloper.msi
## kmanalyze - kmanalyze.exe
A keyboard source analysis and automated regression test tool. Testing for logical errors of a keyboard.
## kcmpdll - kmcmpdll.dll & kmcmpdll.x64.dll
This is the main source code for the keyboard compiler, packaged as dynamic linked library. The consumers will call 'CompileKeyboardFile'
## kcframe.exe & kcframe.x64.exe
Located under kmcomp folder this is used for debugging in Visual Studio. A command line program compiler for a keyboard file 'kmn' into a binary format 'kmx'. Has hardcoded default arguments.
## kmcomp - kmcomp.exe & kmcomp.x64.exe
The main command line compiler for a keyboard. It compiles keyboards (.kmn), packages (.kps), and projects (.kpj).
## kmconvert - kmconvert.exe & kmconvert.x64.exe
KMConvert converts keyboard layouts between different formats. KMConvert will generate a full Keyman template project from the imported layout or data, in a new folder named with the ID of the keyboard. It will not overwrite an existing folder.
## kmdecomp - kmdecomp.exe
Unsupported utility decompiles a Keyman .kmx keyboard. It will produce a .kmn source file and optionally a .ico or
.bmp image. see kmdecomp/kmdecomp.md for details.
## samples
Contains sample keyboards and sample developer projects. See readme.txt for details.
## setup - setup.exe
Installation program for Keyman Developer.
## TIKE - Tavultesoft Integrated Keyboard Editor
This is the designer side of the Developer. Used for designing, developing, testing and packing keyboards for distribution.

File diff suppressed because one or more lines are too long

View file

@ -1,45 +0,0 @@
-$A1
-$B-
-$C+
-$D+
-$E-
-$F-
-$G+
-$H+
-$I+
-$J+
-$K-
-$L+
-$M-
-$N+
-$O-
-$P+
-$Q+
-$R+
-$S-
-$T-
-$U-
-$V+
-$W+
-$X+
-$Y+
-$Z1
-GD
-cg
-vn
-AWinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
-H+
-W+
-M
-$M16384,1048576
-K$00400000
-LE"C:\Users\mcdurdin.TAVULTESOFT\Documents\Borland Studio Projects\Bpl"
-LN"C:\Users\mcdurdin.TAVULTESOFT\Documents\Borland Studio Projects\Bpl"
-U"c:\program files\borland\bds\4.0\lib\Debug;c:\program files\borland\bds\4.0\Lib\Debug\Indy10;c:\program files\borland\bds\4.0\lib;c:\keyman\8.0\src\global\delphi\jedi;C:\keyman\8.0\src\global\delphi\vcl;\keyman\8.0\cmpsrc\mbcolor;C:\keyman\8.0\cmpsrc\embeddedwb\source"
-O"c:\program files\borland\bds\4.0\lib\Debug;c:\program files\borland\bds\4.0\Lib\Debug\Indy10;c:\program files\borland\bds\4.0\lib;c:\keyman\8.0\src\global\delphi\jedi;C:\keyman\8.0\src\global\delphi\vcl;\keyman\8.0\cmpsrc\mbcolor;C:\keyman\8.0\cmpsrc\embeddedwb\source"
-I"c:\program files\borland\bds\4.0\lib\Debug;c:\program files\borland\bds\4.0\Lib\Debug\Indy10;c:\program files\borland\bds\4.0\lib;c:\keyman\8.0\src\global\delphi\jedi;C:\keyman\8.0\src\global\delphi\vcl;\keyman\8.0\cmpsrc\mbcolor;C:\keyman\8.0\cmpsrc\embeddedwb\source"
-R"c:\program files\borland\bds\4.0\lib\Debug;c:\program files\borland\bds\4.0\Lib\Debug\Indy10;c:\program files\borland\bds\4.0\lib;c:\keyman\8.0\src\global\delphi\jedi;C:\keyman\8.0\src\global\delphi\vcl;\keyman\8.0\cmpsrc\mbcolor;C:\keyman\8.0\cmpsrc\embeddedwb\source"
-DVERSION_KEYMAN_DEVELOPER;DaoCheck;DaoNamedEx;DaoDebug;DaoMessageEx;DAOIdent
-w-UNSAFE_TYPE
-w-UNSAFE_CODE
-w-UNSAFE_CAST

View file

@ -1,82 +0,0 @@
[Compiler]
A=1
B=0
C=1
D=1
E=0
F=0
G=1
H=1
I=1
J=1
K=0
L=1
M=0
N=1
O=0
P=1
Q=1
R=1
S=0
T=0
U=0
V=1
W=1
X=1
Y=2
Z=1
ShowHints=1
ShowWarnings=1
UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
[Linker]
MapFile=3
OutputObjs=0
ConsoleApp=1
DebugInfo=1
RemoteSymbols=0
MinStackSize=16384
MaxStackSize=1048576
ImageBase=4194304
ExeDescription=
[Directories]
OutputDir=
UnitOutputDir=
PackageDLLOutputDir=
PackageDCPOutputDir=
SearchPath=$(DELPHI)\lib;$(DELPHI)\source\vcl;\keyman\8.0\src\global\delphi\jedi
Packages=Vcl40;Vclx40;comp51;VCLZipD4;PMemoPack4;dclkmn;vcljpg40;Vcl50;Vclx50
Conditionals=VERSION_KEYMAN_DEVELOPER;DaoCheck;DaoNamedEx;DaoDebug;DaoMessageEx;DAOIdent
DebugSourceDirs=
UsePackages=0
[Parameters]
RunParams=
HostApplication=
[Language]
ActiveLang=
ProjectLang=$00000C09
RootDir=
[Version Info]
IncludeVerInfo=0
AutoIncBuild=1
MajorVer=5
MinorVer=0
Release=0
Build=23
Debug=0
PreRelease=0
Special=0
Private=0
DLL=0
Locale=3081
CodePage=1252
[Version Info Keys]
CompanyName=
FileDescription=Tavultesoft IKE
FileVersion=5.0.0.23
InternalName=
LegalCopyright=
LegalTrademarks=
OriginalFilename=
ProductName=
ProductVersion=5.0.0.0
Comments=

View file

@ -23,32 +23,32 @@
<ProjectGuid>{4EAE6DFD-E18A-493D-A00F-4846A2593F56}</ProjectGuid>
<Keyword>Win32Proj</Keyword>
<RootNamespace>kmanalyze</RootNamespace>
<WindowsTargetPlatformVersion>10.0.17763.0</WindowsTargetPlatformVersion>
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v141</PlatformToolset>
<PlatformToolset>v142</PlatformToolset>
<CharacterSet>MultiByte</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v141</PlatformToolset>
<PlatformToolset>v142</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>MultiByte</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v141</PlatformToolset>
<PlatformToolset>v142</PlatformToolset>
<CharacterSet>MultiByte</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v141</PlatformToolset>
<PlatformToolset>v142</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>MultiByte</CharacterSet>
</PropertyGroup>

View file

@ -21,28 +21,28 @@
<PropertyGroup Label="Globals">
<ProjectGuid>{7E26FE08-721E-424B-9DA0-4A0DCA88A86E}</ProjectGuid>
<RootNamespace>kmcmpdll</RootNamespace>
<WindowsTargetPlatformVersion>10.0.17763.0</WindowsTargetPlatformVersion>
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseOfMfc>false</UseOfMfc>
<PlatformToolset>v141</PlatformToolset>
<PlatformToolset>v142</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseOfMfc>false</UseOfMfc>
<PlatformToolset>v141</PlatformToolset>
<PlatformToolset>v142</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseOfMfc>false</UseOfMfc>
<PlatformToolset>v141</PlatformToolset>
<PlatformToolset>v142</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseOfMfc>false</UseOfMfc>
<PlatformToolset>v141</PlatformToolset>
<PlatformToolset>v142</PlatformToolset>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">

View file

@ -1,175 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<BorlandProject>
<PersonalityInfo>
<Option>
<Option Name="Personality">Delphi.Personality</Option>
<Option Name="ProjectType">VCLApplication</Option>
<Option Name="Version">1.0</Option>
<Option Name="GUID">{CB0DF7C0-19BB-4F2B-AFCC-2E51DAB3A1AA}</Option>
</Option>
</PersonalityInfo>
<Delphi.Personality>
<Source>
<Source Name="MainSource">kmcomp.dpr</Source>
</Source>
<FileVersion>
<FileVersion Name="Version">7.0</FileVersion>
</FileVersion>
<Compiler>
<Compiler Name="A">1</Compiler>
<Compiler Name="B">0</Compiler>
<Compiler Name="C">0</Compiler>
<Compiler Name="D">1</Compiler>
<Compiler Name="E">0</Compiler>
<Compiler Name="F">0</Compiler>
<Compiler Name="G">1</Compiler>
<Compiler Name="H">1</Compiler>
<Compiler Name="I">0</Compiler>
<Compiler Name="J">1</Compiler>
<Compiler Name="K">0</Compiler>
<Compiler Name="L">1</Compiler>
<Compiler Name="M">0</Compiler>
<Compiler Name="N">1</Compiler>
<Compiler Name="O">1</Compiler>
<Compiler Name="P">1</Compiler>
<Compiler Name="Q">0</Compiler>
<Compiler Name="R">0</Compiler>
<Compiler Name="S">0</Compiler>
<Compiler Name="T">0</Compiler>
<Compiler Name="U">0</Compiler>
<Compiler Name="V">1</Compiler>
<Compiler Name="W">1</Compiler>
<Compiler Name="X">1</Compiler>
<Compiler Name="Y">2</Compiler>
<Compiler Name="Z">1</Compiler>
<Compiler Name="ShowHints">True</Compiler>
<Compiler Name="ShowWarnings">True</Compiler>
<Compiler Name="UnitAliases">WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;</Compiler>
<Compiler Name="NamespacePrefix"></Compiler>
<Compiler Name="GenerateDocumentation">False</Compiler>
<Compiler Name="DefaultNamespace"></Compiler>
<Compiler Name="SymbolDeprecated">True</Compiler>
<Compiler Name="SymbolLibrary">True</Compiler>
<Compiler Name="SymbolPlatform">True</Compiler>
<Compiler Name="SymbolExperimental">True</Compiler>
<Compiler Name="UnitLibrary">True</Compiler>
<Compiler Name="UnitPlatform">True</Compiler>
<Compiler Name="UnitDeprecated">True</Compiler>
<Compiler Name="UnitExperimental">True</Compiler>
<Compiler Name="HResultCompat">True</Compiler>
<Compiler Name="HidingMember">True</Compiler>
<Compiler Name="HiddenVirtual">True</Compiler>
<Compiler Name="Garbage">True</Compiler>
<Compiler Name="BoundsError">True</Compiler>
<Compiler Name="ZeroNilCompat">True</Compiler>
<Compiler Name="StringConstTruncated">True</Compiler>
<Compiler Name="ForLoopVarVarPar">True</Compiler>
<Compiler Name="TypedConstVarPar">True</Compiler>
<Compiler Name="AsgToTypedConst">True</Compiler>
<Compiler Name="CaseLabelRange">True</Compiler>
<Compiler Name="ForVariable">True</Compiler>
<Compiler Name="ConstructingAbstract">True</Compiler>
<Compiler Name="ComparisonFalse">True</Compiler>
<Compiler Name="ComparisonTrue">True</Compiler>
<Compiler Name="ComparingSignedUnsigned">True</Compiler>
<Compiler Name="CombiningSignedUnsigned">True</Compiler>
<Compiler Name="UnsupportedConstruct">True</Compiler>
<Compiler Name="FileOpen">True</Compiler>
<Compiler Name="FileOpenUnitSrc">True</Compiler>
<Compiler Name="BadGlobalSymbol">True</Compiler>
<Compiler Name="DuplicateConstructorDestructor">True</Compiler>
<Compiler Name="InvalidDirective">True</Compiler>
<Compiler Name="PackageNoLink">True</Compiler>
<Compiler Name="PackageThreadVar">True</Compiler>
<Compiler Name="ImplicitImport">True</Compiler>
<Compiler Name="HPPEMITIgnored">True</Compiler>
<Compiler Name="NoRetVal">True</Compiler>
<Compiler Name="UseBeforeDef">True</Compiler>
<Compiler Name="ForLoopVarUndef">True</Compiler>
<Compiler Name="UnitNameMismatch">True</Compiler>
<Compiler Name="NoCFGFileFound">True</Compiler>
<Compiler Name="ImplicitVariants">True</Compiler>
<Compiler Name="UnicodeToLocale">True</Compiler>
<Compiler Name="LocaleToUnicode">True</Compiler>
<Compiler Name="ImagebaseMultiple">True</Compiler>
<Compiler Name="SuspiciousTypecast">True</Compiler>
<Compiler Name="PrivatePropAccessor">True</Compiler>
<Compiler Name="UnsafeType">False</Compiler>
<Compiler Name="UnsafeCode">False</Compiler>
<Compiler Name="UnsafeCast">False</Compiler>
<Compiler Name="OptionTruncated">True</Compiler>
<Compiler Name="WideCharReduced">True</Compiler>
<Compiler Name="DuplicatesIgnored">True</Compiler>
<Compiler Name="UnitInitSeq">True</Compiler>
<Compiler Name="LocalPInvoke">True</Compiler>
<Compiler Name="MessageDirective">True</Compiler>
<Compiler Name="CodePage"></Compiler>
</Compiler>
<Linker>
<Linker Name="MapFile">3</Linker>
<Linker Name="OutputObjs">0</Linker>
<Linker Name="GenerateHpps">False</Linker>
<Linker Name="ConsoleApp">0</Linker>
<Linker Name="DebugInfo">True</Linker>
<Linker Name="RemoteSymbols">False</Linker>
<Linker Name="GenerateDRC">False</Linker>
<Linker Name="MinStackSize">16384</Linker>
<Linker Name="MaxStackSize">1048576</Linker>
<Linker Name="ImageBase">4194304</Linker>
<Linker Name="ExeDescription"></Linker>
</Linker>
<Directories>
<Directories Name="OutputDir"></Directories>
<Directories Name="UnitOutputDir"></Directories>
<Directories Name="PackageDLLOutputDir"></Directories>
<Directories Name="PackageDCPOutputDir"></Directories>
<Directories Name="SearchPath">..\..\global\delphi\vclzip;..\..\resellers;C:\keyman\8.0\src\global\delphi\jedi</Directories>
<Directories Name="Packages">VCL40;VCLX40;VCLDB40;VCLDBX40;VCLSMP40;QRPT40;TEEUI40;TEEDB40;TEE40;ibevnt40;nmfast40;bcutil;VCLJPG40;bccomp;bcdb;bcacct;bcappt</Directories>
<Directories Name="Conditionals">KPSMALL;VERSION_KEYMAN_DEVELOPER</Directories>
<Directories Name="DebugSourceDirs"></Directories>
<Directories Name="UsePackages">False</Directories>
</Directories>
<Parameters>
<Parameters Name="RunParams">ktunaxa3.kps</Parameters>
<Parameters Name="HostApplication"></Parameters>
<Parameters Name="Launcher"></Parameters>
<Parameters Name="UseLauncher">False</Parameters>
<Parameters Name="DebugCWD">S:\Tavultesoft\Customers\FirstVoices\Keyman for FV 70\keyboards\Ktunaxa3</Parameters>
<Parameters Name="Debug Symbols Search Path"></Parameters>
<Parameters Name="LoadAllSymbols">True</Parameters>
<Parameters Name="LoadUnspecifiedSymbols">False</Parameters>
</Parameters>
<Language>
<Language Name="ActiveLang"></Language>
<Language Name="ProjectLang">$00000C09</Language>
<Language Name="RootDir"></Language>
</Language>
<VersionInfo>
<VersionInfo Name="IncludeVerInfo">False</VersionInfo>
<VersionInfo Name="AutoIncBuild">False</VersionInfo>
<VersionInfo Name="MajorVer">0</VersionInfo>
<VersionInfo Name="MinorVer">8</VersionInfo>
<VersionInfo Name="Release">0</VersionInfo>
<VersionInfo Name="Build">14</VersionInfo>
<VersionInfo Name="Debug">False</VersionInfo>
<VersionInfo Name="PreRelease">False</VersionInfo>
<VersionInfo Name="Special">False</VersionInfo>
<VersionInfo Name="Private">False</VersionInfo>
<VersionInfo Name="DLL">False</VersionInfo>
<VersionInfo Name="Locale">3081</VersionInfo>
<VersionInfo Name="CodePage">1252</VersionInfo>
</VersionInfo>
<VersionInfoKeys>
<VersionInfoKeys Name="CompanyName">CASEG Practice Computing</VersionInfoKeys>
<VersionInfoKeys Name="FileDescription">Blue Chip</VersionInfoKeys>
<VersionInfoKeys Name="FileVersion">0.8.0.14</VersionInfoKeys>
<VersionInfoKeys Name="InternalName">BlueChip</VersionInfoKeys>
<VersionInfoKeys Name="LegalCopyright">Copyright © 1997-1999 CASEG Practice Computing</VersionInfoKeys>
<VersionInfoKeys Name="LegalTrademarks"></VersionInfoKeys>
<VersionInfoKeys Name="OriginalFilename">BlueChip.exe</VersionInfoKeys>
<VersionInfoKeys Name="ProductName">Blue Chip</VersionInfoKeys>
<VersionInfoKeys Name="ProductVersion">1.0.0.0</VersionInfoKeys>
<VersionInfoKeys Name="Comments"></VersionInfoKeys>
</VersionInfoKeys>
</Delphi.Personality>
</BorlandProject>

View file

@ -1,92 +0,0 @@
[Compiler]
A=1
B=0
C=0
D=1
E=0
F=0
G=1
H=1
I=0
J=1
K=0
L=1
M=0
N=1
O=1
P=1
Q=0
R=0
S=0
T=0
U=0
V=1
W=1
X=1
Y=2
Z=1
ShowHints=1
ShowWarnings=1
UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
[Linker]
MapFile=3
OutputObjs=0
ConsoleApp=0
DebugInfo=1
RemoteSymbols=0
MinStackSize=16384
MaxStackSize=1048576
ImageBase=4194304
ExeDescription=
[Directories]
OutputDir=
UnitOutputDir=
PackageDLLOutputDir=
PackageDCPOutputDir=
SearchPath=..\..\global\delphi\vclzip;..\..\resellers;C:\keyman\8.0\src\global\delphi\jedi
Packages=VCL40;VCLX40;VCLDB40;VCLDBX40;VCLSMP40;QRPT40;TEEUI40;TEEDB40;TEE40;ibevnt40;nmfast40;bcutil;VCLJPG40;bccomp;bcdb;bcacct;bcappt
Conditionals=KPSMALL;VERSION_KEYMAN_DEVELOPER
DebugSourceDirs=
UsePackages=0
[Parameters]
RunParams=-Pc:\keyman\8.0\bin\keyman c:\keyman\8.0\src\addins\inst\wordlink.kps
HostApplication=
[Language]
ActiveLang=
ProjectLang=$00000C09
RootDir=
[Version Info]
IncludeVerInfo=1
AutoIncBuild=0
MajorVer=0
MinorVer=8
Release=0
Build=14
Debug=0
PreRelease=0
Special=0
Private=0
DLL=0
Locale=3081
CodePage=1252
[Version Info Keys]
CompanyName=CASEG Practice Computing
FileDescription=Blue Chip
FileVersion=0.8.0.14
InternalName=BlueChip
LegalCopyright=Copyright © 1997-1999 CASEG Practice Computing
LegalTrademarks=
OriginalFilename=BlueChip.exe
ProductName=Blue Chip
ProductVersion=1.0.0.0
Comments=
[HistoryLists\hlConditionals]
Count=1
Item0=KPSMALL;VERSION_KEYMAN_DEVELOPER
[HistoryLists\hlUnitAliases]
Count=1
Item0=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
[HistoryLists\hlSearchPath]
Count=2
Item0=..\..\global\delphi\vclzip;..\..\resellers;C:\keyman\8.0\src\global\delphi\jedi
Item1=..\..\global\delphi\vclzip;..\..\resellers

View file

@ -12,20 +12,20 @@
</ItemGroup>
<PropertyGroup Label="Globals">
<ProjectGuid>{963D608A-6689-469C-AE42-F56696DD42CC}</ProjectGuid>
<WindowsTargetPlatformVersion>10.0.17763.0</WindowsTargetPlatformVersion>
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseOfMfc>false</UseOfMfc>
<CharacterSet>MultiByte</CharacterSet>
<PlatformToolset>v141</PlatformToolset>
<PlatformToolset>v142</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseOfMfc>false</UseOfMfc>
<CharacterSet>MultiByte</CharacterSet>
<PlatformToolset>v141</PlatformToolset>
<PlatformToolset>v142</PlatformToolset>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">

View file

@ -1,177 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<BorlandProject>
<PersonalityInfo>
<Option>
<Option Name="Personality">Delphi.Personality</Option>
<Option Name="ProjectType"></Option>
<Option Name="Version">1.0</Option>
<Option Name="GUID">{6199E379-0539-4702-AD8B-97B3859C16EC}</Option>
</Option>
</PersonalityInfo>
<Delphi.Personality>
<Source>
<Source Name="MainSource">setup.dpr</Source>
</Source>
<FileVersion>
<FileVersion Name="Version">7.0</FileVersion>
</FileVersion>
<Compiler>
<Compiler Name="A">1</Compiler>
<Compiler Name="B">0</Compiler>
<Compiler Name="C">1</Compiler>
<Compiler Name="D">1</Compiler>
<Compiler Name="E">0</Compiler>
<Compiler Name="F">0</Compiler>
<Compiler Name="G">1</Compiler>
<Compiler Name="H">1</Compiler>
<Compiler Name="I">1</Compiler>
<Compiler Name="J">1</Compiler>
<Compiler Name="K">0</Compiler>
<Compiler Name="L">1</Compiler>
<Compiler Name="M">0</Compiler>
<Compiler Name="N">1</Compiler>
<Compiler Name="O">1</Compiler>
<Compiler Name="P">1</Compiler>
<Compiler Name="Q">1</Compiler>
<Compiler Name="R">1</Compiler>
<Compiler Name="S">0</Compiler>
<Compiler Name="T">0</Compiler>
<Compiler Name="U">0</Compiler>
<Compiler Name="V">1</Compiler>
<Compiler Name="W">1</Compiler>
<Compiler Name="X">1</Compiler>
<Compiler Name="Y">2</Compiler>
<Compiler Name="Z">1</Compiler>
<Compiler Name="ShowHints">True</Compiler>
<Compiler Name="ShowWarnings">True</Compiler>
<Compiler Name="UnitAliases">WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;</Compiler>
<Compiler Name="NamespacePrefix"></Compiler>
<Compiler Name="GenerateDocumentation">False</Compiler>
<Compiler Name="DefaultNamespace"></Compiler>
<Compiler Name="SymbolDeprecated">True</Compiler>
<Compiler Name="SymbolLibrary">True</Compiler>
<Compiler Name="SymbolPlatform">True</Compiler>
<Compiler Name="SymbolExperimental">True</Compiler>
<Compiler Name="UnitLibrary">True</Compiler>
<Compiler Name="UnitPlatform">True</Compiler>
<Compiler Name="UnitDeprecated">True</Compiler>
<Compiler Name="UnitExperimental">True</Compiler>
<Compiler Name="HResultCompat">True</Compiler>
<Compiler Name="HidingMember">True</Compiler>
<Compiler Name="HiddenVirtual">True</Compiler>
<Compiler Name="Garbage">True</Compiler>
<Compiler Name="BoundsError">True</Compiler>
<Compiler Name="ZeroNilCompat">True</Compiler>
<Compiler Name="StringConstTruncated">True</Compiler>
<Compiler Name="ForLoopVarVarPar">True</Compiler>
<Compiler Name="TypedConstVarPar">True</Compiler>
<Compiler Name="AsgToTypedConst">True</Compiler>
<Compiler Name="CaseLabelRange">True</Compiler>
<Compiler Name="ForVariable">True</Compiler>
<Compiler Name="ConstructingAbstract">True</Compiler>
<Compiler Name="ComparisonFalse">True</Compiler>
<Compiler Name="ComparisonTrue">True</Compiler>
<Compiler Name="ComparingSignedUnsigned">True</Compiler>
<Compiler Name="CombiningSignedUnsigned">True</Compiler>
<Compiler Name="UnsupportedConstruct">True</Compiler>
<Compiler Name="FileOpen">True</Compiler>
<Compiler Name="FileOpenUnitSrc">True</Compiler>
<Compiler Name="BadGlobalSymbol">True</Compiler>
<Compiler Name="DuplicateConstructorDestructor">True</Compiler>
<Compiler Name="InvalidDirective">True</Compiler>
<Compiler Name="PackageNoLink">True</Compiler>
<Compiler Name="PackageThreadVar">True</Compiler>
<Compiler Name="ImplicitImport">True</Compiler>
<Compiler Name="HPPEMITIgnored">True</Compiler>
<Compiler Name="NoRetVal">True</Compiler>
<Compiler Name="UseBeforeDef">True</Compiler>
<Compiler Name="ForLoopVarUndef">True</Compiler>
<Compiler Name="UnitNameMismatch">True</Compiler>
<Compiler Name="NoCFGFileFound">True</Compiler>
<Compiler Name="ImplicitVariants">True</Compiler>
<Compiler Name="UnicodeToLocale">True</Compiler>
<Compiler Name="LocaleToUnicode">True</Compiler>
<Compiler Name="ImagebaseMultiple">True</Compiler>
<Compiler Name="SuspiciousTypecast">True</Compiler>
<Compiler Name="PrivatePropAccessor">True</Compiler>
<Compiler Name="UnsafeType">False</Compiler>
<Compiler Name="UnsafeCode">False</Compiler>
<Compiler Name="UnsafeCast">False</Compiler>
<Compiler Name="OptionTruncated">True</Compiler>
<Compiler Name="WideCharReduced">True</Compiler>
<Compiler Name="DuplicatesIgnored">True</Compiler>
<Compiler Name="UnitInitSeq">True</Compiler>
<Compiler Name="LocalPInvoke">True</Compiler>
<Compiler Name="MessageDirective">True</Compiler>
<Compiler Name="CodePage"></Compiler>
</Compiler>
<Linker>
<Linker Name="MapFile">3</Linker>
<Linker Name="OutputObjs">0</Linker>
<Linker Name="GenerateHpps">False</Linker>
<Linker Name="ConsoleApp">1</Linker>
<Linker Name="DebugInfo">True</Linker>
<Linker Name="RemoteSymbols">False</Linker>
<Linker Name="GenerateDRC">False</Linker>
<Linker Name="MinStackSize">16384</Linker>
<Linker Name="MaxStackSize">1048576</Linker>
<Linker Name="ImageBase">4194304</Linker>
<Linker Name="ExeDescription"></Linker>
</Linker>
<Directories>
<Directories Name="OutputDir"></Directories>
<Directories Name="UnitOutputDir"></Directories>
<Directories Name="PackageDLLOutputDir"></Directories>
<Directories Name="PackageDCPOutputDir"></Directories>
<Directories Name="SearchPath">C:\keyman\8.0\src\global\delphi\jedi</Directories>
<Directories Name="Packages">Vcl40;Vclx40;comp51;VCLZipD4;PMemoPack4;dclkmn;vcljpg40;Vcl50;Vclx50;vcl;rtl;vclactnband;vclx;dbrtl;adortl;vcldb;bdertl;vcldbx;dbxcds;dbexpress;vclib;ibxpress;xmlrtl;vclie;inet;inetdbbde;inetdbxpress;dsnap;VclSmp;soaprtl;keyman_components;TntUnicodeVcl;tb2k_d10;tbx_d10;SpTBXLib_d10;SpTBXMemoPackage;IndyCore;IndySystem;IndyProtocols;IntrawebDB_80_100;Intraweb_80_100;dclOfficeXP;mbColorLibD9D;marcscancomponents;teeui;teedb;tee</Directories>
<Directories Name="Conditionals">VERSION_KEYMAN_DEVELOPER;DaoCheck;DaoNamedEx;DaoDebug;DaoMessageEx;DAOIdent</Directories>
<Directories Name="DebugSourceDirs"></Directories>
<Directories Name="UsePackages">False</Directories>
</Directories>
<Parameters>
<Parameters Name="RunParams"></Parameters>
<Parameters Name="HostApplication"></Parameters>
<Parameters Name="Launcher"></Parameters>
<Parameters Name="UseLauncher">False</Parameters>
<Parameters Name="DebugCWD"></Parameters>
<Parameters Name="Debug Symbols Search Path"></Parameters>
<Parameters Name="LoadAllSymbols">True</Parameters>
<Parameters Name="LoadUnspecifiedSymbols">False</Parameters>
</Parameters>
<Language>
<Language Name="ActiveLang"></Language>
<Language Name="ProjectLang">$00000C09</Language>
<Language Name="RootDir"></Language>
</Language>
<VersionInfo>
<VersionInfo Name="IncludeVerInfo">False</VersionInfo>
<VersionInfo Name="AutoIncBuild">True</VersionInfo>
<VersionInfo Name="MajorVer">5</VersionInfo>
<VersionInfo Name="MinorVer">0</VersionInfo>
<VersionInfo Name="Release">0</VersionInfo>
<VersionInfo Name="Build">32</VersionInfo>
<VersionInfo Name="Debug">False</VersionInfo>
<VersionInfo Name="PreRelease">False</VersionInfo>
<VersionInfo Name="Special">False</VersionInfo>
<VersionInfo Name="Private">False</VersionInfo>
<VersionInfo Name="DLL">False</VersionInfo>
<VersionInfo Name="Locale">3081</VersionInfo>
<VersionInfo Name="CodePage">1252</VersionInfo>
</VersionInfo>
<VersionInfoKeys>
<VersionInfoKeys Name="CompanyName"></VersionInfoKeys>
<VersionInfoKeys Name="FileDescription">Tavultesoft IKE</VersionInfoKeys>
<VersionInfoKeys Name="FileVersion">5.0.0.32</VersionInfoKeys>
<VersionInfoKeys Name="InternalName"></VersionInfoKeys>
<VersionInfoKeys Name="LegalCopyright"></VersionInfoKeys>
<VersionInfoKeys Name="LegalTrademarks"></VersionInfoKeys>
<VersionInfoKeys Name="OriginalFilename"></VersionInfoKeys>
<VersionInfoKeys Name="ProductName"></VersionInfoKeys>
<VersionInfoKeys Name="ProductVersion">5.0.0.0</VersionInfoKeys>
<VersionInfoKeys Name="Comments"></VersionInfoKeys>
</VersionInfoKeys>
</Delphi.Personality>
<StarTeamAssociation></StarTeamAssociation>
<StarTeamNonRelativeFiles></StarTeamNonRelativeFiles>
</BorlandProject>

View file

@ -1,45 +0,0 @@
-$A1
-$B-
-$C+
-$D+
-$E-
-$F-
-$G+
-$H+
-$I+
-$J+
-$K-
-$L+
-$M-
-$N+
-$O+
-$P+
-$Q+
-$R+
-$S-
-$T-
-$U-
-$V+
-$W+
-$X+
-$Y+
-$Z1
-GD
-cg
-vn
-AWinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
-H+
-W+
-M
-$M16384,1048576
-K$00400000
-LE"C:\Users\mcdurdin.TAVULTESOFT\Documents\Borland Studio Projects\Bpl"
-LN"C:\Users\mcdurdin.TAVULTESOFT\Documents\Borland Studio Projects\Bpl"
-U"C:\keyman\8.0\src\global\delphi\jedi"
-O"C:\keyman\8.0\src\global\delphi\jedi"
-I"C:\keyman\8.0\src\global\delphi\jedi"
-R"C:\keyman\8.0\src\global\delphi\jedi"
-DVERSION_KEYMAN_DEVELOPER;DaoCheck;DaoNamedEx;DaoDebug;DaoMessageEx;DAOIdent
-w-UNSAFE_TYPE
-w-UNSAFE_CODE
-w-UNSAFE_CAST

View file

@ -0,0 +1,36 @@
# Keyman Engine for Windows
There are a number of build artifacts that make up the Keyman Engine. This is a brief description of each artifact's purpose.
## inst - keymanengine.msm
The installation merge module database for the Keyman Engine.
## keyman - keyman.exe
Host application for the Keyman Engine. Shows the Keyman icon, Keyman menu, OSK, and handles language switching etc, as well as running the windows hooks to capture and translate keystrokes.
## keymanx64 - keymanx64.exe
64-bit version of keyman.exe. All UI is in keyman.exe, so this is a thin wrapper around the keyman32 build.
## kmcomapi - kmcomapi.dll | kmcomapi.x64.dll
This is the public COM API library, used by keyman.exe, kmshell.exe, and various other Keyman and 3rd party programs.
## kmrefresh - kmrefresh.x86.exe & kmrefresh.x64.exe
A helper app to refresh Windows language settings, due to a bug in Windows; read ../kmrefresh/kmrefresh.cpp for details.
## kmtip - kmtip.dll | kmtip64.dll
Implementation of a Text Service for the Text Services Framework (TSF). This implementation is named Keyman TIP.
Architecturally it sits between the TSF Manager and Keyman.exe
## mcompile - mcompile.exe
A tool to recompile keyboard layouts after install to map to various European Latin script keyboard layouts
## tsysinfo - tsysinfo.exe & tsysinfox64.exe
Diagnostics

View file

@ -1,176 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<BorlandProject>
<PersonalityInfo>
<Option>
<Option Name="Personality">Delphi.Personality</Option>
<Option Name="ProjectType">VCLApplication</Option>
<Option Name="Version">1.0</Option>
<Option Name="GUID">{47B3274B-FC3D-4BB6-94B6-98F61D2CD47B}</Option>
</Option>
</PersonalityInfo>
<Delphi.Personality>
<Source>
<Source Name="MainSource">insthelper.dpr</Source>
</Source>
<FileVersion>
<FileVersion Name="Version">7.0</FileVersion>
</FileVersion>
<Compiler>
<Compiler Name="A">1</Compiler>
<Compiler Name="B">0</Compiler>
<Compiler Name="C">1</Compiler>
<Compiler Name="D">1</Compiler>
<Compiler Name="E">0</Compiler>
<Compiler Name="F">0</Compiler>
<Compiler Name="G">1</Compiler>
<Compiler Name="H">1</Compiler>
<Compiler Name="I">0</Compiler>
<Compiler Name="J">1</Compiler>
<Compiler Name="K">0</Compiler>
<Compiler Name="L">1</Compiler>
<Compiler Name="M">0</Compiler>
<Compiler Name="N">1</Compiler>
<Compiler Name="O">1</Compiler>
<Compiler Name="P">1</Compiler>
<Compiler Name="Q">0</Compiler>
<Compiler Name="R">0</Compiler>
<Compiler Name="S">0</Compiler>
<Compiler Name="T">0</Compiler>
<Compiler Name="U">0</Compiler>
<Compiler Name="V">1</Compiler>
<Compiler Name="W">1</Compiler>
<Compiler Name="X">1</Compiler>
<Compiler Name="Y">1</Compiler>
<Compiler Name="Z">1</Compiler>
<Compiler Name="ShowHints">True</Compiler>
<Compiler Name="ShowWarnings">True</Compiler>
<Compiler Name="UnitAliases">WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;</Compiler>
<Compiler Name="NamespacePrefix"></Compiler>
<Compiler Name="GenerateDocumentation">False</Compiler>
<Compiler Name="DefaultNamespace"></Compiler>
<Compiler Name="SymbolDeprecated">True</Compiler>
<Compiler Name="SymbolLibrary">True</Compiler>
<Compiler Name="SymbolPlatform">True</Compiler>
<Compiler Name="SymbolExperimental">True</Compiler>
<Compiler Name="UnitLibrary">True</Compiler>
<Compiler Name="UnitPlatform">True</Compiler>
<Compiler Name="UnitDeprecated">True</Compiler>
<Compiler Name="UnitExperimental">True</Compiler>
<Compiler Name="HResultCompat">True</Compiler>
<Compiler Name="HidingMember">True</Compiler>
<Compiler Name="HiddenVirtual">True</Compiler>
<Compiler Name="Garbage">True</Compiler>
<Compiler Name="BoundsError">True</Compiler>
<Compiler Name="ZeroNilCompat">True</Compiler>
<Compiler Name="StringConstTruncated">True</Compiler>
<Compiler Name="ForLoopVarVarPar">True</Compiler>
<Compiler Name="TypedConstVarPar">True</Compiler>
<Compiler Name="AsgToTypedConst">True</Compiler>
<Compiler Name="CaseLabelRange">True</Compiler>
<Compiler Name="ForVariable">True</Compiler>
<Compiler Name="ConstructingAbstract">True</Compiler>
<Compiler Name="ComparisonFalse">True</Compiler>
<Compiler Name="ComparisonTrue">True</Compiler>
<Compiler Name="ComparingSignedUnsigned">True</Compiler>
<Compiler Name="CombiningSignedUnsigned">True</Compiler>
<Compiler Name="UnsupportedConstruct">True</Compiler>
<Compiler Name="FileOpen">True</Compiler>
<Compiler Name="FileOpenUnitSrc">True</Compiler>
<Compiler Name="BadGlobalSymbol">True</Compiler>
<Compiler Name="DuplicateConstructorDestructor">True</Compiler>
<Compiler Name="InvalidDirective">True</Compiler>
<Compiler Name="PackageNoLink">True</Compiler>
<Compiler Name="PackageThreadVar">True</Compiler>
<Compiler Name="ImplicitImport">True</Compiler>
<Compiler Name="HPPEMITIgnored">True</Compiler>
<Compiler Name="NoRetVal">True</Compiler>
<Compiler Name="UseBeforeDef">True</Compiler>
<Compiler Name="ForLoopVarUndef">True</Compiler>
<Compiler Name="UnitNameMismatch">True</Compiler>
<Compiler Name="NoCFGFileFound">True</Compiler>
<Compiler Name="ImplicitVariants">True</Compiler>
<Compiler Name="UnicodeToLocale">True</Compiler>
<Compiler Name="LocaleToUnicode">True</Compiler>
<Compiler Name="ImagebaseMultiple">True</Compiler>
<Compiler Name="SuspiciousTypecast">True</Compiler>
<Compiler Name="PrivatePropAccessor">True</Compiler>
<Compiler Name="UnsafeType">False</Compiler>
<Compiler Name="UnsafeCode">False</Compiler>
<Compiler Name="UnsafeCast">False</Compiler>
<Compiler Name="OptionTruncated">True</Compiler>
<Compiler Name="WideCharReduced">True</Compiler>
<Compiler Name="DuplicatesIgnored">True</Compiler>
<Compiler Name="UnitInitSeq">True</Compiler>
<Compiler Name="LocalPInvoke">True</Compiler>
<Compiler Name="MessageDirective">True</Compiler>
<Compiler Name="CodePage"></Compiler>
</Compiler>
<Linker>
<Linker Name="MapFile">3</Linker>
<Linker Name="OutputObjs">0</Linker>
<Linker Name="GenerateHpps">False</Linker>
<Linker Name="ConsoleApp">1</Linker>
<Linker Name="DebugInfo">True</Linker>
<Linker Name="RemoteSymbols">True</Linker>
<Linker Name="GenerateDRC">False</Linker>
<Linker Name="MinStackSize">16384</Linker>
<Linker Name="MaxStackSize">1048576</Linker>
<Linker Name="ImageBase">4194304</Linker>
<Linker Name="ExeDescription">Keyman Engine Installer Functions</Linker>
</Linker>
<Directories>
<Directories Name="OutputDir"></Directories>
<Directories Name="UnitOutputDir"></Directories>
<Directories Name="PackageDLLOutputDir"></Directories>
<Directories Name="PackageDCPOutputDir"></Directories>
<Directories Name="SearchPath">c:\keyman\8.0\src\global\delphi\jedi</Directories>
<Directories Name="Packages">vclie50;Vcl50;Inetdb50;Inet50;Vcldb50;Vclx50;Vclbde50;proide50</Directories>
<Directories Name="Conditionals"></Directories>
<Directories Name="DebugSourceDirs"></Directories>
<Directories Name="UsePackages">False</Directories>
</Directories>
<Parameters>
<Parameters Name="RunParams">-path c:\keyman\7.0\test -pri -pi c:\keyman\7.0\test\keyman.kce</Parameters>
<Parameters Name="HostApplication">C:\keyman\5.1\src\dist\kmshell\kmshell.exe</Parameters>
<Parameters Name="Launcher"></Parameters>
<Parameters Name="UseLauncher">False</Parameters>
<Parameters Name="DebugCWD"></Parameters>
<Parameters Name="Debug Symbols Search Path"></Parameters>
<Parameters Name="LoadAllSymbols">True</Parameters>
<Parameters Name="LoadUnspecifiedSymbols">False</Parameters>
</Parameters>
<Language>
<Language Name="ActiveLang"></Language>
<Language Name="ProjectLang">$00000C09</Language>
<Language Name="RootDir"></Language>
</Language>
<VersionInfo>
<VersionInfo Name="IncludeVerInfo">False</VersionInfo>
<VersionInfo Name="AutoIncBuild">False</VersionInfo>
<VersionInfo Name="MajorVer">1</VersionInfo>
<VersionInfo Name="MinorVer">0</VersionInfo>
<VersionInfo Name="Release">0</VersionInfo>
<VersionInfo Name="Build">0</VersionInfo>
<VersionInfo Name="Debug">False</VersionInfo>
<VersionInfo Name="PreRelease">False</VersionInfo>
<VersionInfo Name="Special">False</VersionInfo>
<VersionInfo Name="Private">False</VersionInfo>
<VersionInfo Name="DLL">False</VersionInfo>
<VersionInfo Name="Locale">3081</VersionInfo>
<VersionInfo Name="CodePage">1252</VersionInfo>
</VersionInfo>
<VersionInfoKeys>
<VersionInfoKeys Name="CompanyName"></VersionInfoKeys>
<VersionInfoKeys Name="FileDescription">Tavultesoft IKE</VersionInfoKeys>
<VersionInfoKeys Name="FileVersion">5.0.0.23</VersionInfoKeys>
<VersionInfoKeys Name="InternalName"></VersionInfoKeys>
<VersionInfoKeys Name="LegalCopyright"></VersionInfoKeys>
<VersionInfoKeys Name="LegalTrademarks"></VersionInfoKeys>
<VersionInfoKeys Name="OriginalFilename"></VersionInfoKeys>
<VersionInfoKeys Name="ProductName"></VersionInfoKeys>
<VersionInfoKeys Name="ProductVersion">5.0.0.0</VersionInfoKeys>
<VersionInfoKeys Name="Comments"></VersionInfoKeys>
</VersionInfoKeys>
</Delphi.Personality>
<ModelSupport>True</ModelSupport>
</BorlandProject>

View file

@ -1,45 +0,0 @@
-$A1
-$B-
-$C+
-$D+
-$E-
-$F-
-$G+
-$H+
-$I-
-$J+
-$K-
-$L+
-$M-
-$N+
-$O+
-$P+
-$Q-
-$R-
-$S-
-$T-
-$U-
-$V+
-$W+
-$X+
-$YD
-$Z1
-GD
-cg
-vn
-vr
-AWinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
-H+
-W+
-M
-$M16384,1048576
-K$00400000
-LE"C:\Users\mcdurdin.TAVULTESOFT\Documents\Borland Studio Projects\Bpl"
-LN"C:\Users\mcdurdin.TAVULTESOFT\Documents\Borland Studio Projects\Bpl"
-U"c:\keyman\8.0\src\global\delphi\jedi"
-O"c:\keyman\8.0\src\global\delphi\jedi"
-I"c:\keyman\8.0\src\global\delphi\jedi"
-R"c:\keyman\8.0\src\global\delphi\jedi"
-w-UNSAFE_TYPE
-w-UNSAFE_CODE
-w-UNSAFE_CAST

View file

@ -1,92 +0,0 @@
[Compiler]
A=1
B=0
C=1
D=1
E=0
F=0
G=1
H=1
I=0
J=1
K=0
L=1
M=0
N=1
O=1
P=1
Q=0
R=0
S=0
T=0
U=0
V=1
W=1
X=1
Y=1
Z=1
ShowHints=1
ShowWarnings=1
UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
[Linker]
MapFile=0
OutputObjs=0
ConsoleApp=1
DebugInfo=1
RemoteSymbols=1
MinStackSize=16384
MaxStackSize=1048576
ImageBase=4194304
ExeDescription=Greatis Form Designer Design-Time Package
[Directories]
OutputDir=
UnitOutputDir=
PackageDLLOutputDir=
PackageDCPOutputDir=
SearchPath=c:\keyman\8.0\src\global\delphi\jedi
Packages=vclie50;Vcl50;Inetdb50;Inet50;Vcldb50;Vclx50;Vclbde50;proide50
Conditionals=
DebugSourceDirs=
UsePackages=0
[Parameters]
RunParams=-path c:\keyman\8.0\test -pri -pi c:\keyman\8.0\test\keyman.kce
HostApplication=C:\keyman\5.1\src\dist\kmshell\kmshell.exe
[Language]
ActiveLang=
ProjectLang=$00000C09
RootDir=
[Version Info]
IncludeVerInfo=0
AutoIncBuild=0
MajorVer=1
MinorVer=0
Release=0
Build=0
Debug=0
PreRelease=0
Special=0
Private=0
DLL=0
Locale=3081
CodePage=1252
[Excluded Packages]
$(DELPHI)\Bin\stride50.bpl=String Resource Editor IDE Package
[HistoryLists\hlDebugSourcePath]
Count=1
Item0=$(DELPHI)\source\vcl
[HistoryLists\hlConditionals]
Count=2
Item0=KPSMALL
Item1=VISUALKEYBOARD_NOCUSTOMBITMAP;VERSION_KEYMAN_REDIST;RELEASE_KEYMAN
[HistoryLists\hlUnitAliases]
Count=1
Item0=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
[HistoryLists\hlSearchPath]
Count=4
Item0=c:\keyman\8.0\src\global\delphi\jedi
Item1=$(DELPHI)\source\vcl;c:\keyman\5.1\src\global\delphi\vclzip
Item2=$(DELPHI)\source\rtl\sys;$(DELPHI)\source\vcl;c:\keyman\5.1\src\global\delphi\vclzip
Item3=c:\keyman\5.1\src\global\delphi\vclzip;c:\keyman\5.1\src\global\delphi\folderdlg
[HistoryLists\hlOutputDirectorry]
Count=1
Item0=c:\temp\kmshell-test

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