mirror of
https://github.com/keymanapp/keyman.git
synced 2026-10-07 22:47:29 +00:00
Merge branch 'refactor/web/pred-context-state' into refactor/web/init-state-from-reset
This commit is contained in:
commit
8a1ae2d460
526 changed files with 20711 additions and 4085 deletions
|
|
@ -17,12 +17,15 @@ jobs:
|
|||
if: ${{ github.repository == 'keymanapp/keyman' && github.actor == 'keyman-server' && startsWith(github.event.pull_request.title, 'auto:') }}
|
||||
steps:
|
||||
- name: auto approve PR from keyman-server
|
||||
uses: hmarr/auto-approve-action@v3
|
||||
with:
|
||||
github-token: "${{ secrets.GITHUB_TOKEN }}"
|
||||
- name: auto merge PR from keyman-server
|
||||
uses: "pascalgn/automerge-action@7854d3bd607dccdaf0b2c134b699a812c8960213"
|
||||
shell: bash
|
||||
env:
|
||||
GITHUB_TOKEN: "${{ secrets.AUTOINC_GITHUB_TOKEN }}"
|
||||
MERGE_LABELS: ""
|
||||
MERGE_FORKS: false
|
||||
GH_TOKEN: "${{ github.token }}"
|
||||
run: |
|
||||
gh pr review -R keymanapp/keyman --approve ${{ github.event.pull_request.number }}
|
||||
- name: mark PR for auto-merge from keyman-server
|
||||
shell: bash
|
||||
if: contains(github.event.pull_request.labels.*.name, 'automerge')
|
||||
env:
|
||||
GH_TOKEN: "${{ secrets.AUTOINC_GITHUB_TOKEN }}"
|
||||
run: |
|
||||
gh pr merge -R keymanapp/keyman --merge --auto ${{ github.event.pull_request.number }}
|
||||
|
|
|
|||
13
.github/workflows/deb-packaging.yml
vendored
13
.github/workflows/deb-packaging.yml
vendored
|
|
@ -86,7 +86,14 @@ jobs:
|
|||
shell: bash
|
||||
run: |
|
||||
THIS_SCRIPT="$GITHUB_WORKSPACE/.github/workflows/deb-packaging.yml"
|
||||
. "${THIS_SCRIPT%/*}/../../resources/build/build-utils.sh"
|
||||
if [[ -f "${THIS_SCRIPT%/*}/../../resources/build/builder-basic.inc.sh" ]]; then
|
||||
. "${THIS_SCRIPT%/*}/../../resources/build/builder-basic.inc.sh"
|
||||
else
|
||||
# TODO: remove following block post v19 release (file was renamed in v19 alpha)
|
||||
if [[ -f "${THIS_SCRIPT%/*}/../../resources/build/build-utils.sh" ]]; then
|
||||
. "${THIS_SCRIPT%/*}/../../resources/build/build-utils.sh"
|
||||
fi
|
||||
fi
|
||||
echo "KEYMAN_VERSION=${KEYMAN_VERSION:-${VERSION}}" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Set prerelease tag as output parameter
|
||||
|
|
@ -127,7 +134,7 @@ jobs:
|
|||
strategy:
|
||||
fail-fast: true
|
||||
matrix:
|
||||
dist: [jammy, noble, oracular]
|
||||
dist: [jammy, noble, plucky]
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
|
|
@ -153,7 +160,7 @@ jobs:
|
|||
strategy:
|
||||
fail-fast: true
|
||||
matrix:
|
||||
dist: [plucky]
|
||||
dist: [questing]
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
|
|
|
|||
208
.github/workflows/pr-build-status.yml
vendored
Normal file
208
.github/workflows/pr-build-status.yml
vendored
Normal file
|
|
@ -0,0 +1,208 @@
|
|||
# GENERATED FILE - DO NOT EDIT!
|
||||
#
|
||||
# Keyman is copyright (C) SIL Global. MIT License.
|
||||
#
|
||||
# Do not modify the script in .github/workflows/pr-build-status.yml directly;
|
||||
# instead work on the sources in resources/build/pr-build-status and use the
|
||||
# build.sh script to rebuild the .github/workflows/pr-build-status.yml file from
|
||||
# them.
|
||||
#
|
||||
# build.sh will append the relevant portions of
|
||||
# resources/build/pr-build-status/pr-build-status.mjs to the content in
|
||||
# resources/build/pr-build-status/pr-build-status.prefix.yml to form the .github
|
||||
# workflow file.
|
||||
#
|
||||
name: Keyman Build Summary
|
||||
on:
|
||||
status:
|
||||
push:
|
||||
branches-ignore:
|
||||
- master
|
||||
- beta
|
||||
- stable-*
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
commit:
|
||||
description: 'Commit sha'
|
||||
required: true
|
||||
type: string
|
||||
jobs:
|
||||
run_pr_build_status:
|
||||
name: Summarize build status checks
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Check PR build status
|
||||
id: run_pr_build_status_script
|
||||
uses: actions/github-script@v7
|
||||
with:
|
||||
script: |
|
||||
// This code is copied out of resources/build/pr-build-status/pr-build-status.mjs
|
||||
// where it is tested. It is copied inline here in order to avoid requiring the
|
||||
// repository to be checked out, which dramatically reduces the run time of the
|
||||
// check.
|
||||
//
|
||||
// Note: we don't currently look at check runs, only statuses
|
||||
//
|
||||
// Verify the following statuses:
|
||||
// 'user_testing'
|
||||
// 'API Verification' (github-actions[bot])
|
||||
//
|
||||
// At least 1 of the following statuses must be found:
|
||||
// 'Test*' (keyman-server), e.g. 'Test Build (Keyman)'
|
||||
// 'Ubuntu Packaging' (github-actions[bot])
|
||||
//
|
||||
// Ignore the following statuses:
|
||||
// check/web/file-size
|
||||
//
|
||||
|
||||
function reduceStatuses(statuses) {
|
||||
const filtered_statuses = statuses.reduce((o, status) => {
|
||||
if(status.creator?.login == 'keyman-server' && status.context.startsWith('Test')) {
|
||||
if(!o[status.context]) o[status.context] = {type: 'build', state: status.state};
|
||||
} else if(status.creator?.login == 'keymanapp-test-bot[bot]' && status.context == 'user_testing') {
|
||||
if(!o[status.context]) o[status.context] = {type: 'user-test', state: status.state};;
|
||||
} else if(status.context == 'API Verification') {
|
||||
if(!o[status.context]) o[status.context] = {type: 'check', state: status.state};
|
||||
} else if(status.context == 'Ubuntu Packaging') {
|
||||
if(!o[status.context]) o[status.context] = {type: 'build', state: status.state};
|
||||
} else if(status.context == 'check/web/file-size') {
|
||||
// Ignore check/web/file-size -- we won't block automerge for this at this point
|
||||
} else {
|
||||
// We fail with an 'unknown status' response if we get a new status check
|
||||
// so we can be sure we are not skipping known status checks
|
||||
o[status.context] = {type: 'unknown', state: status.state};
|
||||
}
|
||||
return o;
|
||||
|
||||
}, {});
|
||||
return filtered_statuses;
|
||||
}
|
||||
|
||||
//
|
||||
// Given the collection of status checks we care about, return
|
||||
// an aggregate status -- error, failed, pending, or success,
|
||||
// and a summary description
|
||||
//
|
||||
function calculateFinalStatus(filtered_statuses) {
|
||||
const counts = {};
|
||||
let hasBuilds = false;
|
||||
for(const context of Object.keys(filtered_statuses)) {
|
||||
const { state, type } = filtered_statuses[context];
|
||||
if(type == 'unknown') {
|
||||
// We special-case for unknown status checks, and never permit them
|
||||
return [
|
||||
'error', `An unknown context ${context} was found, cannot calculate build status.`
|
||||
];
|
||||
}
|
||||
if(type == 'build') {
|
||||
hasBuilds = true;
|
||||
}
|
||||
counts[state] = counts[state] ? counts[state] + 1 : 1;
|
||||
}
|
||||
|
||||
// If we do not have any statuses yet, we wait
|
||||
if(Object.keys(filtered_statuses).length == 0 || !hasBuilds) {
|
||||
return ['pending', 'Builds have not yet been triggered ⌛'];
|
||||
}
|
||||
|
||||
const state =
|
||||
counts.error ? 'error' :
|
||||
counts.failed ? 'failed' :
|
||||
counts.pending ? 'pending' :
|
||||
'success';
|
||||
|
||||
let description = '';
|
||||
function appendDescription(count, state) {
|
||||
if(!count) return;
|
||||
if(description != '') description += '; ';
|
||||
description += `${count} check${count == 1 ? '' : 's'} ${state}`;
|
||||
}
|
||||
appendDescription(counts.error, 'in an error state ❌');
|
||||
appendDescription(counts.failed, 'failed ❌');
|
||||
appendDescription(counts.pending, 'pending ⌛');
|
||||
appendDescription(counts.success, 'completed successfully ✅');
|
||||
|
||||
return [ state, description ];
|
||||
}
|
||||
|
||||
async function getCommitStatuses(github, owner, repo, sha) {
|
||||
const statuses = await github.paginate('GET /repos/{owner}/{repo}/commits/{sha}/statuses', {
|
||||
owner,
|
||||
repo,
|
||||
sha,
|
||||
headers: {
|
||||
'X-GitHub-Api-Version': '2022-11-28'
|
||||
}
|
||||
});
|
||||
return statuses;
|
||||
}
|
||||
|
||||
async function getCommitCheckRuns(github, owner, repo, sha) {
|
||||
const statuses = await github.paginate('GET /repos/{owner}/{repo}/commits/{sha}/check-runs', {
|
||||
owner,
|
||||
repo,
|
||||
sha,
|
||||
headers: {
|
||||
'X-GitHub-Api-Version': '2022-11-28'
|
||||
}
|
||||
});
|
||||
return statuses;
|
||||
}
|
||||
|
||||
function calculateCheckResult(statuses) {
|
||||
if(!Array.isArray(statuses)) {
|
||||
return ['error', 'Failed to retrieve status checks from GitHub ❌'];
|
||||
}
|
||||
|
||||
const filtered_statuses = reduceStatuses(statuses);
|
||||
|
||||
const result = calculateFinalStatus(filtered_statuses);
|
||||
return result;
|
||||
}
|
||||
|
||||
async function test(github, owner, repo, sha) {
|
||||
// Get statuses from sha
|
||||
const statuses = await getCommitStatuses(github, owner, repo, sha);
|
||||
return calculateCheckResult(statuses);
|
||||
}
|
||||
|
||||
async function createCheck(github, owner, repo, sha) {
|
||||
const check = await github.rest.checks.create({
|
||||
owner,
|
||||
repo,
|
||||
head_sha: sha,
|
||||
name: 'Build Outcome',
|
||||
status: 'in_progress',
|
||||
});
|
||||
return check.data.id;
|
||||
}
|
||||
|
||||
async function updateCheck(github, owner, repo, checkRunId, status, description) {
|
||||
const checkStatus = status == 'pending' ? 'in_progress' : 'completed';
|
||||
const conclusion = checkStatus == 'in_progress' ? undefined : (status == 'success' ? 'success' : 'failure');
|
||||
|
||||
await github.rest.checks.update({
|
||||
owner,
|
||||
repo,
|
||||
check_run_id: checkRunId,
|
||||
status: checkStatus,
|
||||
conclusion,
|
||||
output: {
|
||||
title: description,
|
||||
summary: ''
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
const { owner, repo } = context.repo;
|
||||
const sha =
|
||||
context.payload?.check_suite?.sha || /* check run completed */
|
||||
context.payload?.inputs?.commit || /* manual run */
|
||||
context.payload?.after || /* push */
|
||||
context.payload?.commit?.sha || /* status */
|
||||
context.sha; /* probably 'master'! */
|
||||
|
||||
const checkRunId = await createCheck(github, owner, repo, sha);
|
||||
const res = await test(github, owner, repo, sha);
|
||||
await updateCheck(github, owner, repo, checkRunId, res[0], res[1]);
|
||||
|
||||
2
.gitignore
vendored
2
.gitignore
vendored
|
|
@ -164,7 +164,7 @@ tsconfig.tsbuildinfo
|
|||
# Windows system files
|
||||
Thumbs.db
|
||||
|
||||
# Temporary file for logging scripts in xcode runs, see build-utils.sh for
|
||||
# Temporary file for logging scripts in xcode runs, see builder-basic.inc.sh for
|
||||
# details
|
||||
/xcodebuild-scripts.log
|
||||
|
||||
|
|
|
|||
224
HISTORY.md
224
HISTORY.md
|
|
@ -1,5 +1,229 @@
|
|||
# Keyman Version History
|
||||
|
||||
## 19.0.99 alpha 2025-08-14
|
||||
|
||||
* maint(web): skip unnecessary steps for `build` buildLevel (#14516)
|
||||
|
||||
## 19.0.98 alpha 2025-08-14
|
||||
|
||||
* maint(resources): specify `keymanapp/keyman` for gh in automerge (#14524)
|
||||
|
||||
## 19.0.97 alpha 2025-08-14
|
||||
|
||||
* maint(resources): use GH_TOKEN variable for gh calls (#14522)
|
||||
|
||||
## 19.0.96 alpha 2025-08-14
|
||||
|
||||
* maint(resources): add build-bot commands to increment-version auto PRs (#14504)
|
||||
* maint(resources): use GH builtin automerge for auto PRs (#14519)
|
||||
|
||||
## 19.0.95 alpha 2025-08-13
|
||||
|
||||
* fix(web): use actual legacy model for legacy-model support unit tests (#14460)
|
||||
* chore(common): Update Crowdin strings for Spanish (#14464)
|
||||
* fix(android): Get default sizes before initializing keyboard (#14472)
|
||||
* docs(resources): clarify Build-bot usage (#14282)
|
||||
* maint(resources): build.sh-style commands for build-bot (#14461)
|
||||
* chore(android): Update keycode test app dependencies (#14474)
|
||||
* maint(common): update npm modules brace-expansion to 1.1.12, form-data to 4.0.4 (#14479)
|
||||
* chore(android): Specify Java language version 21 (#14491)
|
||||
* maint(ios): skip unnecessary network steps when buildLevel is build (#14466)
|
||||
* maint(common): rename shellHelperFunctions.sh to utils.inc.sh (#14446)
|
||||
* maint(common): consolidate builder scripts (#14449)
|
||||
* maint(common): rename and move node-related script functions into node.inc.sh (#14451)
|
||||
* maint(common): move typescript script functions into typescript.inc.sh (#14452)
|
||||
* maint(common): reorganize mac/ios build script includes (#14458)
|
||||
* docs(resources): add note on builder-basic vs builder-full (#14507)
|
||||
|
||||
## 19.0.94 alpha 2025-08-01
|
||||
|
||||
* maint(common): use `cpp_std=c++17` in meson project default_options (#14433)
|
||||
|
||||
## 19.0.93 alpha 2025-07-29
|
||||
|
||||
* test(developer): add unit tests for `isValidUtf8` (#14381)
|
||||
* maint(linux): fix stopping of test server (#14403)
|
||||
|
||||
## 19.0.92 alpha 2025-07-28
|
||||
|
||||
* build(deps): bump multer from 2.0.1 to 2.0.2 (#14373)
|
||||
* refactor(linux): remove shellcheck warnings (#14409)
|
||||
* refactor(linux): move dbus defines to common include (#14407)
|
||||
* docs(linux): update readme for test service (#14408)
|
||||
* fix(windows): add check a fix for registry datatypes (#14358)
|
||||
|
||||
## 19.0.91 alpha 2025-07-26
|
||||
|
||||
* maint(windows): fix calls of renamed functions (#14413)
|
||||
|
||||
## 19.0.90 alpha 2025-07-25
|
||||
|
||||
* maint(common): fix standalone use of `resources/builder.inc.sh` (#14399)
|
||||
* maint(resources): use `tc_` prefix for all `tc-*.inc.sh` functions (#14267)
|
||||
|
||||
## 19.0.89 alpha 2025-07-24
|
||||
|
||||
* docs(common): Document minimum version of Chrome 95.0 for Android (#14385)
|
||||
* refactor(android): Update minimum target Chrome version to 95.0 and refactor to use constants (#14391)
|
||||
|
||||
## 19.0.88 alpha 2025-07-23
|
||||
|
||||
* maint(windows): consider `GO_FAST` env variable in `add_zip_files` (#14338)
|
||||
* maint(common): add unit tests for `locate_emscripten.inc.sh` (#14346)
|
||||
* refactor(android): create functions for actions (#14351)
|
||||
* maint(linux): fix `locate_emscripten` if `$EMSCRIPTEN_BASE` dir missing (#14347)
|
||||
* maint(android): consolidate creating zip file (#14353)
|
||||
|
||||
## 19.0.87 alpha 2025-07-22
|
||||
|
||||
* refactor(common): use test framework for zip tests (#14380)
|
||||
* maint(common): fix use of `jq.inc.sh` in git hooks (#14382)
|
||||
* test(common): improve zip tests (#14386)
|
||||
* maint(common): fix `add_zip_files` if flags come before zip filename (#14387)
|
||||
|
||||
## 19.0.86 alpha 2025-07-21
|
||||
|
||||
* maint(common): fail build if adding relative file to zip (#14352)
|
||||
* maint(common): set C++17 in standard.meson.build (#14355)
|
||||
* fix(linux): add `python3-pkg-resources` as explicit dependency (#14356)
|
||||
* docs(developer): add ansi and iso context and image, change img tags, and polish for readability (#14243)
|
||||
* maint(mac): consolidate `write-download_info` (#14325)
|
||||
* maint(common): add simple unit testing framework for bash (#14345)
|
||||
* maint(common): consolidate functions to determine OS (#14324)
|
||||
* fix(android): use correct path to zip.inc.sh for CI (#14377)
|
||||
* test(common): add unit test for reporting test failures (#14379)
|
||||
|
||||
## 19.0.85 alpha 2025-07-18
|
||||
|
||||
* refactor(common): remove warnings (#14368)
|
||||
* refactor(developer): replace deprecated std::codecvt_utf8_utf16 (#14369)
|
||||
* refactor(linux): move defines to common header files (#14372)
|
||||
|
||||
## 19.0.84 alpha 2025-07-15
|
||||
|
||||
* maint(common): add support for inline file exclusions to `add_zip_files` and unit tests (#14333)
|
||||
* maint(developer): use `add_zip_files` function (#14334)
|
||||
|
||||
## 19.0.83 alpha 2025-07-14
|
||||
|
||||
* maint(resources): add `build.sh` to run all `resource/build/test` tests (#14335)
|
||||
* maint(developer): consolidate creating KMC_ZIP file (#14309)
|
||||
|
||||
## 19.0.82 alpha 2025-07-10
|
||||
|
||||
* maint(android): fix Android release build (#14329)
|
||||
* maint(mac): fix end of blocks (#14330)
|
||||
* maint(mac): don't run `build.sh publish` twice (#14331)
|
||||
|
||||
## 19.0.81 alpha 2025-07-09
|
||||
|
||||
* docs(developer): explanation of the Description field added in Details section. (#14304)
|
||||
* fix(ios): restore keyboard scale map for iPad Air 2 (#14305)
|
||||
* maint(linux): remove Oracular, add Questing (#14319)
|
||||
* maint(android): remove `--ci` parameter from Android release builds (#14320)
|
||||
* maint(android): use absolute paths (#14308)
|
||||
* maint(windows): fix platform name for Windows (#14321)
|
||||
* maint(developer): include missing shellHelperFunctions.sh file (#14322)
|
||||
* maint(windows): replace hardcoded `symbols` paths with parameters (#14323)
|
||||
|
||||
## 19.0.80 alpha 2025-07-08
|
||||
|
||||
* maint(common): remove include of deleted `tc-download-info.inc.sh` (#14311)
|
||||
* maint(resources): fix triggering of builds (#14314)
|
||||
|
||||
## 19.0.79 alpha 2025-07-07
|
||||
|
||||
* maint(android): use `--release` for release builds (#14307)
|
||||
* refactor(common): some reformattings in `shellHelperFunctions.sh` (#14269)
|
||||
* maint(common): consolidate `write_download_info` functions (#14270)
|
||||
|
||||
## 19.0.78 alpha 2025-07-04
|
||||
|
||||
* docs(developer): Fix links in gestures guide (#14297)
|
||||
|
||||
## 19.0.77 alpha 2025-07-04
|
||||
|
||||
* maint(mac): rename `_do_publish` function to `do_publish` to fix release build (#14273)
|
||||
* maint(ios): remove extra `cd` command from ios release builds (#14272)
|
||||
* maint(android): remove `--ci` parameter from android builds (#14264)
|
||||
* refactor(resources): replace shebang for TC include files (#14265)
|
||||
* fix(core): fix failing `common-test-core.sh` script (#14271)
|
||||
* maint(common): match OSTYPE correctly on macOS (#14277)
|
||||
* fix(common): fix triggering builds if no builds to start (#14274)
|
||||
* maint(common): trigger common builds for resources/teamcity/common changes (#14279)
|
||||
|
||||
## 19.0.76 alpha 2025-07-03
|
||||
|
||||
* maint(common): move TC configuration for common tests (#14205)
|
||||
* refactor(common): improve downloads include script (#14253)
|
||||
* maint(web): move rsync code to shared functions (#14254)
|
||||
* maint(developer): replace Powershell scripts (#14255)
|
||||
* maint(windows): move TC configuration for Keyman Windows to scripts (#14186)
|
||||
* feat(windows): human text message for 413 error (#14055)
|
||||
* refactor(web): move helper functions to beginning of function (#14252)
|
||||
* maint(android): add TC build scripts for Keyman for Android (#14222)
|
||||
* maint(linux): use `tc_rsync_upload` and `write_download_info` functions (#14258)
|
||||
* maint(ios): add TC build scripts for iOS (#14229)
|
||||
* maint(mac): add TC build scripts for macOS (#14239)
|
||||
|
||||
## 19.0.75 alpha 2025-07-02
|
||||
|
||||
* feat(resources): support ignoring unknown options in builder (#14216)
|
||||
* maint(common): consolidate 7Z_HOME, SEVENZ_HOME, SEVEN_Z_HOME env vars (#14162)
|
||||
|
||||
## 19.0.74 alpha 2025-07-01
|
||||
|
||||
* maint(web): adjust rsync path (#14249)
|
||||
|
||||
## 19.0.73 alpha 2025-07-01
|
||||
|
||||
* fix(web): deploy `web/build/publish` folder (#14237)
|
||||
* fix(web): change env variable name (#14244)
|
||||
|
||||
## 19.0.72 alpha 2025-07-01
|
||||
|
||||
* maint(web): cleanup rsync call from bash for Windows agents and refactor (#14236)
|
||||
|
||||
## 19.0.71 alpha 2025-06-30
|
||||
|
||||
* refactor(linux): rename linux agent specific functions (#14231)
|
||||
|
||||
## 19.0.70 alpha 2025-06-27
|
||||
|
||||
* docs(developer): Add details on Template choices (#14228)
|
||||
* chore(common,developer): expand 'x' to 'compileContext' (#14218)
|
||||
|
||||
## 19.0.69 alpha 2025-06-25
|
||||
|
||||
* maint(resources): support additional workflow events for pr-build-status (#14219)
|
||||
* chore: add tips and caution of gestures for Keyman Developer + update license + removal of span tag (#14204)
|
||||
|
||||
## 19.0.68 alpha 2025-06-24
|
||||
|
||||
* maint(resources): Build-bot now available to control test builds (#14125)
|
||||
* maint(developer): support buildLevel (#14196)
|
||||
* fix(resources): allow branch names in run-required-test-builds shortcut call (#14217)
|
||||
* maint(resources): add pr-build-status GitHub Action to summarize build status (#14199)
|
||||
|
||||
## 19.0.67 alpha 2025-06-22
|
||||
|
||||
* chore(developer): ldml: additional line numbers (#14104)
|
||||
|
||||
## 19.0.66 alpha 2025-06-16
|
||||
|
||||
* fix(windows): add values wucUpdateAvailable and wucNotChecked to TRemoteUpdateCheckResult enum (#14123)
|
||||
|
||||
## 19.0.65 alpha 2025-06-13
|
||||
|
||||
* maint(developer): fix developer release build (#14185)
|
||||
* maint(developer,web): use double quotes inside `--rsync-path` again (#14194)
|
||||
|
||||
## 19.0.64 alpha 2025-06-13
|
||||
|
||||
* fix(windows): fix download failing when cache.json missing (#14095)
|
||||
* maint(resources): only automatically merge keyman-server PRs with automerge label (#14171)
|
||||
* maint(developer,web): use braces for variables in powershell scripts (#14184)
|
||||
|
||||
## 19.0.63 alpha 2025-06-12
|
||||
|
||||
* maint(web): add some more arguments for web release build script (#14167)
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
19.0.64
|
||||
19.0.100
|
||||
|
|
@ -3,10 +3,10 @@
|
|||
## START STANDARD BUILD SCRIPT INCLUDE
|
||||
# adjust relative paths as necessary
|
||||
THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")"
|
||||
. "${THIS_SCRIPT%/*}/../../resources/build/builder.inc.sh"
|
||||
. "${THIS_SCRIPT%/*}/../../resources/build/builder-full.inc.sh"
|
||||
## END STANDARD BUILD SCRIPT INCLUDE
|
||||
|
||||
. "$KEYMAN_ROOT/resources/shellHelperFunctions.sh"
|
||||
. "$KEYMAN_ROOT/resources/build/utils.inc.sh"
|
||||
. "$KEYMAN_ROOT/resources/build/build-utils-ci.inc.sh"
|
||||
. "$KEYMAN_ROOT/resources/build/build-help.inc.sh"
|
||||
. "$KEYMAN_ROOT/resources/build/build-download-resources.sh"
|
||||
|
|
|
|||
|
|
@ -11,6 +11,12 @@ apply from: "$rootPath/version.gradle"
|
|||
|
||||
String tier = new File('../../TIER.md').getText('UTF-8').trim();
|
||||
|
||||
java {
|
||||
toolchain {
|
||||
languageVersion = JavaLanguageVersion.of(21)
|
||||
}
|
||||
}
|
||||
|
||||
android {
|
||||
compileSdk 34
|
||||
namespace="com.tavultesoft.kmapro"
|
||||
|
|
@ -24,11 +30,6 @@ android {
|
|||
buildConfig = true
|
||||
}
|
||||
|
||||
compileOptions {
|
||||
sourceCompatibility = JavaVersion.VERSION_21
|
||||
targetCompatibility = JavaVersion.VERSION_21
|
||||
}
|
||||
|
||||
defaultConfig {
|
||||
applicationId "com.tavultesoft.kmapro"
|
||||
minSdkVersion 21
|
||||
|
|
|
|||
|
|
@ -864,6 +864,9 @@ public class MainActivity extends BaseActivity implements OnKeyboardEventListene
|
|||
|
||||
private void displayUpdateChrome() {
|
||||
// TextView's default string is to update Chrome
|
||||
TextView textView = (TextView)findViewById(R.id.kmWebViewChromeTextView);
|
||||
textView.setText(String.format(getString(R.string.text_require_chrome_version),
|
||||
WebViewUtils.KEYMAN_MIN_TARGET_VERSION_ANDROID_CHROME));
|
||||
|
||||
Button button = (Button)findViewById(R.id.webViewChromeButton);
|
||||
button.setText(getString(R.string.button_update_chrome));
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@
|
|||
android:background="@android:color/white"
|
||||
android:gravity="start"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:text="@string/text_require_chrome_57"
|
||||
android:text="@string/text_require_chrome_version"
|
||||
android:layout_marginStart="@dimen/button_playstore_margin"
|
||||
android:textSize="@dimen/update_chrome_label_textsize" />
|
||||
|
||||
|
|
|
|||
|
|
@ -30,10 +30,13 @@
|
|||
<!-- Context: Title -->
|
||||
<string name="title_version" comment="Title of Keyman for Android version">Version: %1$s</string>
|
||||
|
||||
<!-- Context: Text label when old Chrome version installed -->
|
||||
<!-- Context: Text label when old Chrome version installed. Label replaced in Keyman 19.0 -->
|
||||
<string name="text_require_chrome_57" comment="Banner text when old version of Chrome is installed">
|
||||
Keyman requires Chrome version 57 or newer.</string>
|
||||
|
||||
<string name="text_require_chrome_version" comment="Banner text when old version of Chrome is installed">
|
||||
Keyman requires Chrome version %1$s or newer.</string>
|
||||
|
||||
<!-- Context: Button label -->
|
||||
<string name="button_update_chrome" comment="Prompt to upgrade Chrome in the Play Store">Update Chrome</string>
|
||||
|
||||
|
|
|
|||
|
|
@ -12,6 +12,12 @@ base {
|
|||
archivesName = "keyman-engine"
|
||||
}
|
||||
|
||||
java {
|
||||
toolchain {
|
||||
languageVersion = JavaLanguageVersion.of(21)
|
||||
}
|
||||
}
|
||||
|
||||
android {
|
||||
compileSdk 34
|
||||
namespace "com.keyman.engine"
|
||||
|
|
@ -21,11 +27,6 @@ android {
|
|||
buildConfig = true
|
||||
}
|
||||
|
||||
compileOptions {
|
||||
sourceCompatibility = JavaVersion.VERSION_21
|
||||
targetCompatibility = JavaVersion.VERSION_21
|
||||
}
|
||||
|
||||
defaultConfig {
|
||||
minSdkVersion 21
|
||||
targetSdkVersion 34
|
||||
|
|
|
|||
|
|
@ -495,6 +495,11 @@ public final class KMManager {
|
|||
didCopyAssets = true;
|
||||
}
|
||||
|
||||
calculateDefaultKeyboardHeights(context);
|
||||
SharedPreferences prefs = context.getSharedPreferences(KMManager.KMEngine_PrefsKey, Context.MODE_PRIVATE);
|
||||
KeyboardHeight_Context_Portrait_Current = prefs.getInt(KMManager.KMKey_KeyboardHeightPortrait, KMManager.KeyboardHeight_Context_Portrait_Default);
|
||||
KeyboardHeight_Context_Landscape_Current = prefs.getInt(KMManager.KMKey_KeyboardHeightLandscape, KMManager.KeyboardHeight_Context_Landscape_Default);
|
||||
|
||||
if (keyboardType == KeyboardType.KEYBOARD_TYPE_UNDEFINED) {
|
||||
String msg = "Cannot initialize: Invalid keyboard type";
|
||||
KMLog.LogError(TAG, msg);
|
||||
|
|
@ -508,12 +513,6 @@ public final class KMManager {
|
|||
migrateCloudKeyboards(appContext);
|
||||
|
||||
CloudDownloadMgr.getInstance().initialize(appContext);
|
||||
|
||||
calculateDefaultKeyboardHeights(context);
|
||||
SharedPreferences prefs = context.getSharedPreferences(KMManager.KMEngine_PrefsKey, Context.MODE_PRIVATE);
|
||||
KeyboardHeight_Context_Portrait_Current = prefs.getInt(KMManager.KMKey_KeyboardHeightPortrait, KMManager.KeyboardHeight_Context_Portrait_Default);
|
||||
KeyboardHeight_Context_Landscape_Current = prefs.getInt(KMManager.KMKey_KeyboardHeightLandscape, KMManager.KeyboardHeight_Context_Landscape_Default);
|
||||
|
||||
}
|
||||
|
||||
public static void executeResourceUpdate(Context aContext)
|
||||
|
|
|
|||
|
|
@ -32,6 +32,13 @@ public final class WebViewUtils {
|
|||
FULL; // WebView installed and enabled
|
||||
}
|
||||
|
||||
// Min version of Chrome for Keyman for Android for EngineWebViewVersionStatus.DEGRADED
|
||||
public static final String KEYMAN_MIN_TARGET_VERSION_DEGRADED_ANDROID_CHROME = "37.0";
|
||||
|
||||
// Min version of Chrome for Keyman for Android (EngineWebViewVersionStatus.FULL)
|
||||
// TODO: Keep this version in sync with resources/build/minimum-versions.inc.sh
|
||||
public static final String KEYMAN_MIN_TARGET_VERSION_ANDROID_CHROME = "95.0";
|
||||
|
||||
private static final String CHROME_INSTALL_PATTERN_FORMATSTR = "^.*Chrome/([\\d.]+).*$";
|
||||
private static final Pattern installPattern = Pattern.compile(CHROME_INSTALL_PATTERN_FORMATSTR);
|
||||
|
||||
|
|
@ -52,9 +59,11 @@ public final class WebViewUtils {
|
|||
chromeVersion = getChromeVersion(context, webView);
|
||||
}
|
||||
|
||||
if (FileUtils.compareVersions("37.0", chromeVersion) == FileUtils.VERSION_GREATER) {
|
||||
if (FileUtils.compareVersions(KEYMAN_MIN_TARGET_VERSION_DEGRADED_ANDROID_CHROME, chromeVersion)
|
||||
== FileUtils.VERSION_GREATER) {
|
||||
return EngineWebViewVersionStatus.DISABLED;
|
||||
} else if (FileUtils.compareVersions("57.0", chromeVersion) == FileUtils.VERSION_GREATER) {
|
||||
} else if (FileUtils.compareVersions(KEYMAN_MIN_TARGET_VERSION_ANDROID_CHROME, chromeVersion)
|
||||
== FileUtils.VERSION_GREATER) {
|
||||
return EngineWebViewVersionStatus.DEGRADED;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -83,13 +83,13 @@
|
|||
<!-- Context: Fatal keyboard error. -->
|
||||
<string name="fatal_keyboard_error_short" comment="Error in keyboard (keyboard ID::packageID for language)."> Error en el teclado %1$s:%2$s para %3$s idioma.</string>
|
||||
<!-- Context: Alert Dialog body: System WebView not installed -->
|
||||
<string name="body_install_webview" comment="Notification when WebView not installed"> Keyman requires WebView to be installed.\"</string>
|
||||
<string name="body_install_webview" comment="Notification when WebView not installed"> Keyman requiere que WebView esté instalado.\"</string>
|
||||
<!-- Context: Alert Dialog body: System WebView installed but not enabled -->
|
||||
<string name="body_enable_webview" comment="Notification when WebView installed but not enabled"> Keyman requires WebView to be enabled.\"</string>
|
||||
<string name="body_enable_webview" comment="Notification when WebView installed but not enabled"> Keyman requiere que WebView esté habilitado.\"</string>
|
||||
<!-- Context Button label: Install WebView -->
|
||||
<string name="label_install_webview" comment="Button label to install webview">Install WebView</string>
|
||||
<string name="label_install_webview" comment="Button label to install webview">Instalar WebView</string>
|
||||
<!-- Context Button label: Enable WebView -->
|
||||
<string name="label_enable_webview" comment="Button label to enable webview">Enable WebView</string>
|
||||
<string name="label_enable_webview" comment="Button label to enable webview">Habilitar WebView</string>
|
||||
<!-- Context: Query for associated dictionary -->
|
||||
<string name="query_associated_model" comment="Check if there's an available dictionary to download">Comprobando si hay un diccionario asociado para descargar</string>
|
||||
<string name="cannot_query_associated_model" comment="Cannot reach server to check if there's an available dictionary to download"> No se puede conectar al servidor Keyman para comprobar si hay un diccionario asociado para descargar</string>
|
||||
|
|
@ -124,7 +124,7 @@
|
|||
<!-- Context: General Updates -->
|
||||
<string name="update_check_unavailable" comment="Error message when a Keyman server can't be reached">¡Falló al acceder al servidor!</string>
|
||||
<!-- Context: Update-check failure notification -->
|
||||
<string name="update_check_download_manager_disabled" comment="Notification that a system service needed for updates is disabled">DownloadManager disabled - cannot check for updates</string>
|
||||
<string name="update_check_download_manager_disabled" comment="Notification that a system service needed for updates is disabled">Descargador deshabilitado: no se pueden comprobar actualizaciones</string>
|
||||
<!-- Context: General Updates -->
|
||||
<string name="update_check_current" comment="Notification that all resources are up to date">"¡Todos los recursos están actualizados!"</string>
|
||||
<!-- Context: General Updates -->
|
||||
|
|
|
|||
|
|
@ -32,28 +32,30 @@ public class WebViewUtilsTest {
|
|||
|
||||
@Test
|
||||
public void test_Chrome36_EngineWebViewVersionStatusDisabled() {
|
||||
String chromeVersion = "36.0";
|
||||
double chromeVersionFloat = Float.parseFloat(WebViewUtils.KEYMAN_MIN_TARGET_VERSION_DEGRADED_ANDROID_CHROME) - 1.0;
|
||||
String chromeVersion = String.valueOf(chromeVersionFloat);
|
||||
Assert.assertEquals(WebViewUtils.getEngineWebViewVersionStatus(context, null, chromeVersion),
|
||||
WebViewUtils.EngineWebViewVersionStatus.DISABLED);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void test_Chrome37_EngineWebViewVersionStatusDegraded() {
|
||||
String chromeVersion = "37.0";
|
||||
String chromeVersion = WebViewUtils.KEYMAN_MIN_TARGET_VERSION_DEGRADED_ANDROID_CHROME;
|
||||
Assert.assertEquals(WebViewUtils.getEngineWebViewVersionStatus(context, null, chromeVersion),
|
||||
WebViewUtils.EngineWebViewVersionStatus.DEGRADED);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void test_Chrome56_EngineWebViewVersionStatusDegraded() {
|
||||
String chromeVersion = "56.0";
|
||||
public void test_Chrome94_EngineWebViewVersionStatusDegraded() {
|
||||
double chromeVersionFloat = Float.parseFloat(WebViewUtils.KEYMAN_MIN_TARGET_VERSION_ANDROID_CHROME) - 1.0;
|
||||
String chromeVersion = String.valueOf(chromeVersionFloat);
|
||||
Assert.assertEquals(WebViewUtils.getEngineWebViewVersionStatus(context, null, chromeVersion),
|
||||
WebViewUtils.EngineWebViewVersionStatus.DEGRADED);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void test_Chrome57_EngineWebViewVersionStatusFull() {
|
||||
String chromeVersion = "57.0";
|
||||
public void test_Chrome95_EngineWebViewVersionStatusFull() {
|
||||
String chromeVersion = WebViewUtils.KEYMAN_MIN_TARGET_VERSION_ANDROID_CHROME;
|
||||
Assert.assertEquals(WebViewUtils.getEngineWebViewVersionStatus(context, null, chromeVersion),
|
||||
WebViewUtils.EngineWebViewVersionStatus.FULL);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,10 +4,10 @@
|
|||
## START STANDARD BUILD SCRIPT INCLUDE
|
||||
# adjust relative paths as necessary
|
||||
THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")"
|
||||
. "${THIS_SCRIPT%/*}/../../resources/build/builder.inc.sh"
|
||||
. "${THIS_SCRIPT%/*}/../../resources/build/builder-full.inc.sh"
|
||||
## END STANDARD BUILD SCRIPT INCLUDE
|
||||
|
||||
. "$KEYMAN_ROOT/resources/shellHelperFunctions.sh"
|
||||
. "$KEYMAN_ROOT/resources/build/utils.inc.sh"
|
||||
. "$KEYMAN_ROOT/resources/build/build-utils-ci.inc.sh"
|
||||
|
||||
# ################################ Main script ################################
|
||||
|
|
|
|||
|
|
@ -2,6 +2,12 @@ plugins {
|
|||
id 'com.android.application'
|
||||
}
|
||||
|
||||
java {
|
||||
toolchain {
|
||||
languageVersion = JavaLanguageVersion.of(21)
|
||||
}
|
||||
}
|
||||
|
||||
android {
|
||||
compileSdk 34
|
||||
namespace="com.keyman.kmsample1"
|
||||
|
|
|
|||
|
|
@ -4,10 +4,10 @@
|
|||
## START STANDARD BUILD SCRIPT INCLUDE
|
||||
# adjust relative paths as necessary
|
||||
THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")"
|
||||
. "${THIS_SCRIPT%/*}/../../../resources/build/builder.inc.sh"
|
||||
. "${THIS_SCRIPT%/*}/../../../resources/build/builder-full.inc.sh"
|
||||
## END STANDARD BUILD SCRIPT INCLUDE
|
||||
|
||||
. "$KEYMAN_ROOT/resources/shellHelperFunctions.sh"
|
||||
. "$KEYMAN_ROOT/resources/build/utils.inc.sh"
|
||||
. "$KEYMAN_ROOT/resources/build/build-utils-ci.inc.sh"
|
||||
|
||||
################################ Main script ################################
|
||||
|
|
@ -23,7 +23,7 @@ builder_describe "Build KMSample1 app for Android." \
|
|||
"configure" \
|
||||
"build" \
|
||||
"test" \
|
||||
":app KMSample1"
|
||||
":app KMSample1"
|
||||
|
||||
# parse before describe_outputs to check debug flags
|
||||
builder_parse "$@"
|
||||
|
|
|
|||
|
|
@ -2,6 +2,12 @@ plugins {
|
|||
id 'com.android.application'
|
||||
}
|
||||
|
||||
java {
|
||||
toolchain {
|
||||
languageVersion = JavaLanguageVersion.of(21)
|
||||
}
|
||||
}
|
||||
|
||||
android {
|
||||
compileSdk 34
|
||||
namespace="com.keyman.kmsample2"
|
||||
|
|
|
|||
|
|
@ -4,10 +4,10 @@
|
|||
## START STANDARD BUILD SCRIPT INCLUDE
|
||||
# adjust relative paths as necessary
|
||||
THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")"
|
||||
. "${THIS_SCRIPT%/*}/../../../resources/build/builder.inc.sh"
|
||||
. "${THIS_SCRIPT%/*}/../../../resources/build/builder-full.inc.sh"
|
||||
## END STANDARD BUILD SCRIPT INCLUDE
|
||||
|
||||
. "$KEYMAN_ROOT/resources/shellHelperFunctions.sh"
|
||||
. "$KEYMAN_ROOT/resources/build/utils.inc.sh"
|
||||
. "$KEYMAN_ROOT/resources/build/build-utils-ci.inc.sh"
|
||||
|
||||
################################ Main script ################################
|
||||
|
|
@ -23,7 +23,7 @@ builder_describe "Build KMSample2 app for Android." \
|
|||
"configure" \
|
||||
"build" \
|
||||
"test" \
|
||||
":app KMSample2"
|
||||
":app KMSample2"
|
||||
|
||||
# parse before describe_outputs to check debug flags
|
||||
builder_parse "$@"
|
||||
|
|
|
|||
|
|
@ -5,8 +5,14 @@ plugins {
|
|||
ext.rootPath = '../../../'
|
||||
apply from: "$rootPath/version.gradle"
|
||||
|
||||
java {
|
||||
toolchain {
|
||||
languageVersion = JavaLanguageVersion.of(21)
|
||||
}
|
||||
}
|
||||
|
||||
android {
|
||||
compileSdk 34
|
||||
compileSdk 35
|
||||
namespace="com.keyman.android.tests.keyboardHarness"
|
||||
|
||||
// Don't compress kmp files so they can be copied via AssetManager
|
||||
|
|
@ -21,7 +27,7 @@ android {
|
|||
defaultConfig {
|
||||
applicationId "com.keyman.android.tests.keyboardHarness"
|
||||
minSdkVersion 21
|
||||
targetSdkVersion 34
|
||||
targetSdkVersion 35
|
||||
|
||||
// KEYMAN_VERSION_CODE and KEYMAN_VERSION_NAME from version.gradle
|
||||
versionCode KEYMAN_VERSION_CODE as Integer
|
||||
|
|
|
|||
|
|
@ -15,8 +15,8 @@ buildscript {
|
|||
|
||||
allprojects {
|
||||
repositories {
|
||||
maven { url uri("${projectDir}/libs") }
|
||||
google()
|
||||
jcenter()
|
||||
mavenCentral()
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,10 +4,10 @@
|
|||
## START STANDARD BUILD SCRIPT INCLUDE
|
||||
# adjust relative paths as necessary
|
||||
THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")"
|
||||
. "${THIS_SCRIPT%/*}/../../../resources/build/builder.inc.sh"
|
||||
. "${THIS_SCRIPT%/*}/../../../resources/build/builder-full.inc.sh"
|
||||
## END STANDARD BUILD SCRIPT INCLUDE
|
||||
|
||||
. "$KEYMAN_ROOT/resources/shellHelperFunctions.sh"
|
||||
. "$KEYMAN_ROOT/resources/build/utils.inc.sh"
|
||||
. "$KEYMAN_ROOT/resources/build/build-utils-ci.inc.sh"
|
||||
|
||||
################################ Main script ################################
|
||||
|
|
@ -23,7 +23,7 @@ builder_describe "Build KeyboardHarness test app for Android." \
|
|||
"configure" \
|
||||
"build" \
|
||||
"test" \
|
||||
":app KeyboardHarness"
|
||||
":app KeyboardHarness"
|
||||
|
||||
# parse before describe outputs to check debug flags
|
||||
builder_parse "$@"
|
||||
|
|
|
|||
|
|
@ -1,11 +1,18 @@
|
|||
apply plugin: 'com.android.application'
|
||||
plugins {
|
||||
id 'com.android.application'
|
||||
}
|
||||
|
||||
ext.rootPath = '../../../'
|
||||
apply from: "$rootPath/version.gradle"
|
||||
|
||||
android {
|
||||
compileSdk 34
|
||||
namespace="com.keyman.android.tests.keycode"
|
||||
namespace "com.keyman.android.tests.keycode"
|
||||
|
||||
buildFeatures {
|
||||
// needed for custom BuildConfigField values in defaultConfig
|
||||
buildConfig = true
|
||||
}
|
||||
|
||||
defaultConfig {
|
||||
applicationId "com.keyman.android.tests.keycode"
|
||||
|
|
@ -27,11 +34,10 @@ android {
|
|||
|
||||
dependencies {
|
||||
implementation fileTree(dir: 'libs', include: ['*.jar'])
|
||||
implementation 'androidx.appcompat:appcompat:1.6.1'
|
||||
implementation 'androidx.appcompat:appcompat:1.7.0'
|
||||
implementation 'androidx.constraintlayout:constraintlayout:2.2.1'
|
||||
implementation 'com.google.android.material:material:1.12.0'
|
||||
implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
|
||||
|
||||
testImplementation 'androidx.test:core:1.5.0'
|
||||
testImplementation 'androidx.test.ext:junit:1.1.5'
|
||||
testImplementation 'org.robolectric:robolectric:4.10.3'
|
||||
testImplementation 'androidx.test.ext:junit:1.2.1'
|
||||
testImplementation 'org.robolectric:robolectric:4.14.1'
|
||||
testImplementation 'androidx.test:core:1.6.1'
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,25 +1,25 @@
|
|||
package com.keyman.android.tests.keycode;
|
||||
|
||||
import android.content.Context;
|
||||
import android.support.test.InstrumentationRegistry;
|
||||
import android.support.test.runner.AndroidJUnit4;
|
||||
import androidx.test.core.app.ApplicationProvider;
|
||||
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import android.content.Context;
|
||||
|
||||
import static org.junit.Assert.*;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.robolectric.RobolectricTestRunner;
|
||||
|
||||
/**
|
||||
* Instrumented test, which will execute on an Android device.
|
||||
*
|
||||
* @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
|
||||
*/
|
||||
@RunWith(AndroidJUnit4.class)
|
||||
@RunWith(RobolectricTestRunner.class)
|
||||
public class ExampleInstrumentedTest {
|
||||
@Test
|
||||
public void useAppContext() {
|
||||
// Context of the app under test.
|
||||
Context appContext = InstrumentationRegistry.getTargetContext();
|
||||
Context appContext = ApplicationProvider.getApplicationContext();
|
||||
|
||||
assertEquals("com.keyman.android.tests.keycode", appContext.getPackageName());
|
||||
}
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package com.example.darcy.keycode;
|
||||
package com.keyman.android.tests.keycode;
|
||||
|
||||
import org.junit.Test;
|
||||
|
||||
|
|
|
|||
|
|
@ -4,10 +4,10 @@ buildscript {
|
|||
|
||||
repositories {
|
||||
google()
|
||||
jcenter()
|
||||
mavenCentral()
|
||||
}
|
||||
dependencies {
|
||||
classpath 'com.android.tools.build:gradle:7.4.2'
|
||||
classpath 'com.android.tools.build:gradle:8.9.2'
|
||||
|
||||
|
||||
// NOTE: Do not place your application dependencies here; they belong
|
||||
|
|
@ -18,10 +18,6 @@ buildscript {
|
|||
allprojects {
|
||||
repositories {
|
||||
google()
|
||||
jcenter()
|
||||
mavenCentral()
|
||||
}
|
||||
}
|
||||
|
||||
task clean(type: Delete) {
|
||||
delete rootProject.buildDir
|
||||
}
|
||||
|
|
|
|||
|
|
@ -14,4 +14,6 @@ org.gradle.jvmargs=-Xmx1024m
|
|||
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
|
||||
# org.gradle.parallel=true
|
||||
|
||||
# AGP 8.0 generates R classes for resources defined in the current module only.
|
||||
android.nonTransitiveRClass=false
|
||||
|
||||
|
|
|
|||
113
android/build.sh
113
android/build.sh
|
|
@ -10,12 +10,13 @@
|
|||
## START STANDARD BUILD SCRIPT INCLUDE
|
||||
# adjust relative paths as necessary
|
||||
THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")"
|
||||
. "${THIS_SCRIPT%/*}/../resources/build/builder.inc.sh"
|
||||
. "${THIS_SCRIPT%/*}/../resources/build/builder-full.inc.sh"
|
||||
## END STANDARD BUILD SCRIPT INCLUDE
|
||||
|
||||
. "$KEYMAN_ROOT/resources/shellHelperFunctions.sh"
|
||||
. "$KEYMAN_ROOT/resources/build/build-utils-ci.inc.sh"
|
||||
. "$KEYMAN_ROOT/resources/build/zip.inc.sh"
|
||||
# shellcheck disable=SC2154
|
||||
. "${KEYMAN_ROOT}/resources/build/utils.inc.sh"
|
||||
. "${KEYMAN_ROOT}/resources/build/build-utils-ci.inc.sh"
|
||||
. "${KEYMAN_ROOT}/resources/build/zip.inc.sh"
|
||||
|
||||
################################ Main script ################################
|
||||
|
||||
|
|
@ -24,8 +25,8 @@ THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")"
|
|||
#
|
||||
|
||||
oemtargets=()
|
||||
if [ ! -z "${RELEASE_OEM+x}" ]; then
|
||||
if [ "${RELEASE_OEM_FIRSTVOICES-false}" = true ]; then
|
||||
if [[ ! -z "${RELEASE_OEM+x}" ]]; then
|
||||
if [[ "${RELEASE_OEM_FIRSTVOICES-false}" = true ]]; then
|
||||
oemtargets+=(":fv=../oem/firstvoices/android OEM FirstVoices for Android app")
|
||||
fi
|
||||
fi
|
||||
|
|
@ -38,8 +39,7 @@ builder_describe \
|
|||
build \
|
||||
test \
|
||||
"publish Publishes symbols to Sentry and the APKs to the Play Store." \
|
||||
"archive Copy release artifacts to upload/ and rsync to downloads.keyman" \
|
||||
"--ci+ Deprecated build option. Remove in 20.0" \
|
||||
"archive Copy release artifacts to upload/ and create zip" \
|
||||
--upload-sentry+ \
|
||||
":engine=KMEA Keyman Engine for Android" \
|
||||
":app=KMAPro Keyman for Android" \
|
||||
|
|
@ -51,72 +51,85 @@ builder_describe \
|
|||
|
||||
builder_parse "$@"
|
||||
|
||||
# Override JAVA_HOME to OpenJDK 11
|
||||
set_java_home
|
||||
|
||||
# This script also responsible for cleaning up /android/upload
|
||||
builder_run_child_actions clean
|
||||
|
||||
if builder_start_action clean; then
|
||||
function do_clean() {
|
||||
builder_heading "Cleanup /android/upload"
|
||||
rm -rf "$KEYMAN_ROOT/android/upload"
|
||||
builder_finish_action success clean
|
||||
fi
|
||||
|
||||
builder_run_child_actions configure build test
|
||||
|
||||
function do_test_help() {
|
||||
check-markdown "$KEYMAN_ROOT/android/docs/help"
|
||||
check-markdown "$KEYMAN_ROOT/android/docs/engine"
|
||||
rm -rf "${KEYMAN_ROOT}/android/upload"
|
||||
}
|
||||
|
||||
builder_run_action test:help do_test_help
|
||||
function do_test_help() {
|
||||
check-markdown "${KEYMAN_ROOT}/android/docs/help"
|
||||
check-markdown "${KEYMAN_ROOT}/android/docs/engine"
|
||||
}
|
||||
|
||||
builder_run_child_actions publish
|
||||
function archive_artifacts() {
|
||||
local UPLOAD_PATH KEYMAN_ENGINE_ANDROID_ZIP KEYMAN_APK FIRSTVOICES_APK
|
||||
|
||||
# Copy release artifacts to upload/ and rsync to downloads.keyman.com
|
||||
if builder_start_action archive; then
|
||||
UPLOAD_PATH="$KEYMAN_ROOT/android/upload/${KEYMAN_VERSION}"
|
||||
UPLOAD_PATH="${KEYMAN_ROOT}/android/upload/${KEYMAN_VERSION}"
|
||||
KEYMAN_ENGINE_ANDROID_ZIP="keyman-engine-android-${KEYMAN_VERSION}.zip"
|
||||
KEYMAN_APK="keyman-${KEYMAN_VERSION}.apk"
|
||||
FIRSTVOICES_APK="firstvoices-${KEYMAN_VERSION}.apk"
|
||||
ZIP_FILE="${UPLOAD_PATH}/${KEYMAN_ENGINE_ANDROID_ZIP}"
|
||||
ZIP_FLAGS=("-q" "-r") # quiet, recursive
|
||||
|
||||
rm -rf "${UPLOAD_PATH}"
|
||||
mkdir -p "${UPLOAD_PATH}"
|
||||
|
||||
# Create Keyman Engine for Android archive
|
||||
builder_echo "Copying Keyman Engine for Android into ${UPLOAD_PATH}..."
|
||||
cd "${UPLOAD_PATH}"
|
||||
cp "${KEYMAN_ROOT}/android/KMAPro/kMAPro/libs/keyman-engine.aar" ./
|
||||
add_zip_files "${ZIP_FILE}" "${ZIP_FLAGS[@]}" "keyman-engine.aar"
|
||||
rm -f "keyman-engine.aar"
|
||||
builder_echo "Adding Keyman Engine for Android to zip..."
|
||||
(
|
||||
# shellcheck disable=SC2164
|
||||
cd "${KEYMAN_ROOT}/android/KMAPro/kMAPro/libs"
|
||||
add_zip_files -q -r "${UPLOAD_PATH}/${KEYMAN_ENGINE_ANDROID_ZIP}" keyman-engine.aar
|
||||
)
|
||||
|
||||
builder_echo "Copying Keyman Engine for Android Sample projects into ${UPLOAD_PATH}..."
|
||||
cp -rf "${KEYMAN_ROOT}/android/Samples" ./
|
||||
add_zip_files "${ZIP_FILE}" "-x@../../zip-excludes" "${ZIP_FLAGS[@]}" "Samples"
|
||||
rm -rf "Samples"
|
||||
builder_echo "Adding Keyman Engine for Android Sample projects to zip..."
|
||||
(
|
||||
# shellcheck disable=SC2164
|
||||
cd "${KEYMAN_ROOT}/android"
|
||||
add_zip_files -q -r -xr!build.sh "${UPLOAD_PATH}/${KEYMAN_ENGINE_ANDROID_ZIP}" Samples
|
||||
)
|
||||
|
||||
# Copy release APK
|
||||
cp "${KEYMAN_ROOT}/android/KMAPro/kMAPro/build/outputs/apk/release/${KEYMAN_APK}" ./
|
||||
cp "${KEYMAN_ROOT}/android/KMAPro/kMAPro/build/outputs/apk/release/${KEYMAN_APK}" "${UPLOAD_PATH}"
|
||||
|
||||
# FirstVoices app
|
||||
|
||||
if [ "${RELEASE_OEM_FIRSTVOICES-false}" = true ]; then
|
||||
cp "${KEYMAN_ROOT}/oem/firstvoices/android/app/build/outputs/apk/release/${FIRSTVOICES_APK}" ./
|
||||
if [[ "${RELEASE_OEM_FIRSTVOICES-false}" = true ]]; then
|
||||
cp "${KEYMAN_ROOT}/oem/firstvoices/android/app/build/outputs/apk/release/${FIRSTVOICES_APK}" "${UPLOAD_PATH}"
|
||||
fi
|
||||
|
||||
#
|
||||
# Write download info files
|
||||
#
|
||||
|
||||
cd "${UPLOAD_PATH}"
|
||||
write_download_info "Keyman Engine for Android" "${KEYMAN_ENGINE_ANDROID_ZIP}" "${KEYMAN_VERSION}" "${KEYMAN_TIER}" "android"
|
||||
write_download_info "Keyman for Android" "${KEYMAN_APK}" "${KEYMAN_VERSION}" "${KEYMAN_TIER}" "android"
|
||||
write_download_info "${UPLOAD_PATH}" "${KEYMAN_ENGINE_ANDROID_ZIP}" "Keyman Engine for Android" zip android
|
||||
write_download_info "${UPLOAD_PATH}" "${KEYMAN_APK}" "Keyman for Android" apk android
|
||||
|
||||
if [ "${RELEASE_OEM_FIRSTVOICES-false}" = true ]; then
|
||||
write_download_info "FirstVoices Keyboards" "${FIRSTVOICES_APK}" "${KEYMAN_VERSION}" "${KEYMAN_TIER}" "android"
|
||||
if [[ "${RELEASE_OEM_FIRSTVOICES-false}" = true ]]; then
|
||||
write_download_info "${UPLOAD_PATH}" "${FIRSTVOICES_APK}" "FirstVoices Keyboards" apk android
|
||||
fi
|
||||
}
|
||||
|
||||
builder_finish_action success archive
|
||||
fi
|
||||
|
||||
# For CI compatibility of building Keyman for Android 18.0 with OpenJDK 11,
|
||||
# this overrides JAVA_HOME for the builder script to use OpenJDK 21.
|
||||
android_set_java_home() {
|
||||
if [[ ! -z ${JAVA_HOME_21+x} ]]; then
|
||||
builder_echo "Setting JAVA_HOME to JAVA_HOME_21 (${JAVA_HOME_21})"
|
||||
export JAVA_HOME="${JAVA_HOME_21}"
|
||||
fi
|
||||
}
|
||||
|
||||
# Override JAVA_HOME
|
||||
android_set_java_home
|
||||
|
||||
# This script also responsible for cleaning up /android/upload
|
||||
builder_run_child_actions clean
|
||||
|
||||
builder_run_action clean do_clean
|
||||
|
||||
builder_run_child_actions configure build test
|
||||
|
||||
builder_run_action test:help do_test_help
|
||||
|
||||
builder_run_child_actions publish
|
||||
|
||||
builder_run_action archive archive_artifacts
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ Keyman for Android will run on Android phones and tablets that have a minimum ve
|
|||
[Android 5.0 (Lollipop)](https://developer.android.com/about/versions/lollipop).
|
||||
|
||||
### Minimum Chrome Version
|
||||
Keyman for Android requires a minimum version 53.0 of [Google
|
||||
Keyman for Android requires a minimum version 95.0 of [Google
|
||||
Chrome](https://play.google.com/store/apps/details?id=com.android.chrome).
|
||||
If you have an older device, you may need to upgrade Chrome before you can use
|
||||
Keyman, e.g. through the Play Store.
|
||||
|
|
|
|||
|
|
@ -25,7 +25,7 @@ set -u # die on undefined variables
|
|||
## START STANDARD BUILD SCRIPT INCLUDE
|
||||
# adjust relative paths as necessary
|
||||
THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")"
|
||||
. "${THIS_SCRIPT%/*}/../../resources/build/build-utils.sh"
|
||||
. "${THIS_SCRIPT%/*}/../../resources/build/builder-basic.inc.sh"
|
||||
## END STANDARD BUILD SCRIPT INCLUDE
|
||||
|
||||
# Preparation
|
||||
|
|
|
|||
2
build.sh
2
build.sh
|
|
@ -2,7 +2,7 @@
|
|||
## START STANDARD BUILD SCRIPT INCLUDE
|
||||
# adjust relative paths as necessary
|
||||
THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")"
|
||||
. "${THIS_SCRIPT%/*}/resources/build/builder.inc.sh"
|
||||
. "${THIS_SCRIPT%/*}/resources/build/builder-full.inc.sh"
|
||||
## END STANDARD BUILD SCRIPT INCLUDE
|
||||
|
||||
builder_describe "Keyman -- all projects" \
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
## START STANDARD BUILD SCRIPT INCLUDE
|
||||
# adjust relative paths as necessary
|
||||
THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")"
|
||||
. "${THIS_SCRIPT%/*}/../resources/build/builder.inc.sh"
|
||||
. "${THIS_SCRIPT%/*}/../resources/build/builder-full.inc.sh"
|
||||
## END STANDARD BUILD SCRIPT INCLUDE
|
||||
|
||||
builder_describe "Keyman common and resources modules" \
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@
|
|||
## START STANDARD BUILD SCRIPT INCLUDE
|
||||
# adjust relative paths as necessary
|
||||
THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")"
|
||||
. "${THIS_SCRIPT%/*}/../../resources/build/builder.inc.sh"
|
||||
. "${THIS_SCRIPT%/*}/../../resources/build/builder-full.inc.sh"
|
||||
## END STANDARD BUILD SCRIPT INCLUDE
|
||||
|
||||
builder_describe "Build keymanversion_build.h" configure build clean
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
## START STANDARD BUILD SCRIPT INCLUDE
|
||||
# adjust relative paths as necessary
|
||||
THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")"
|
||||
. "${THIS_SCRIPT%/*}/../../resources/build/builder.inc.sh"
|
||||
. "${THIS_SCRIPT%/*}/../../resources/build/builder-full.inc.sh"
|
||||
## END STANDARD BUILD SCRIPT INCLUDE
|
||||
|
||||
#
|
||||
|
|
@ -18,7 +18,7 @@ builder_describe "Keyman common Linux modules" \
|
|||
|
||||
builder_parse "$@"
|
||||
|
||||
if [[ $BUILDER_OS != linux ]]; then
|
||||
if ! builder_is_linux; then
|
||||
builder_echo grey "Platform is not linux; skipping common/linux"
|
||||
exit 0
|
||||
fi
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
## START STANDARD BUILD SCRIPT INCLUDE
|
||||
# adjust relative paths as necessary
|
||||
THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")"
|
||||
. "${THIS_SCRIPT%/*}/../../resources/build/builder.inc.sh"
|
||||
. "${THIS_SCRIPT%/*}/../../resources/build/builder-full.inc.sh"
|
||||
## END STANDARD BUILD SCRIPT INCLUDE
|
||||
|
||||
#
|
||||
|
|
@ -18,7 +18,7 @@ builder_describe "Keyman common mac modules" \
|
|||
|
||||
builder_parse "$@"
|
||||
|
||||
if [[ $BUILDER_OS != mac ]]; then
|
||||
if ! builder_is_macos; then
|
||||
builder_echo grey "Platform is not macOS; skipping common/mac"
|
||||
exit 0
|
||||
fi
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
## START STANDARD BUILD SCRIPT INCLUDE
|
||||
# adjust relative paths as necessary
|
||||
THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")"
|
||||
. "${THIS_SCRIPT%/*}/../../../../resources/build/builder.inc.sh"
|
||||
. "${THIS_SCRIPT%/*}/../../../../resources/build/builder-full.inc.sh"
|
||||
## END STANDARD BUILD SCRIPT INCLUDE
|
||||
|
||||
builder_describe "Baseline keyboards tests -- built with 16.0 compiler" \
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
## START STANDARD BUILD SCRIPT INCLUDE
|
||||
# adjust relative paths as necessary
|
||||
THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")"
|
||||
. "${THIS_SCRIPT%/*}/../../../resources/build/builder.inc.sh"
|
||||
. "${THIS_SCRIPT%/*}/../../../resources/build/builder-full.inc.sh"
|
||||
## END STANDARD BUILD SCRIPT INCLUDE
|
||||
|
||||
. "$KEYMAN_ROOT/resources/build/zip.inc.sh"
|
||||
|
|
|
|||
|
|
@ -3,8 +3,8 @@
|
|||
## START STANDARD BUILD SCRIPT INCLUDE
|
||||
# adjust relative paths as necessary
|
||||
THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")"
|
||||
. "${THIS_SCRIPT%/*}/../../../../../resources/build/build-utils.sh"
|
||||
# . "$KEYMAN_ROOT/resources/shellHelperFunctions.sh"
|
||||
. "${THIS_SCRIPT%/*}/../../../../../resources/build/builder-basic.inc.sh"
|
||||
# . "$KEYMAN_ROOT/resources/build/utils.inc.sh"
|
||||
## END STANDARD BUILD SCRIPT INCLUDE
|
||||
THIS_DIR="$(dirname "$THIS_SCRIPT")"
|
||||
|
||||
|
|
|
|||
|
|
@ -19,7 +19,9 @@ import { fileURLToPath } from 'url';
|
|||
/**
|
||||
* Creates a MessageEvent (for inter-worker communication), with the given data payload.
|
||||
*
|
||||
* @param {*} data
|
||||
* @template {T}
|
||||
* @param {T} data
|
||||
* @returns {T}
|
||||
*/
|
||||
export function createMessageEventWithData(data) {
|
||||
return { data };
|
||||
|
|
|
|||
|
|
@ -8,11 +8,11 @@ set -eu
|
|||
## START STANDARD BUILD SCRIPT INCLUDE
|
||||
# adjust relative paths as necessary
|
||||
THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")"
|
||||
. "${THIS_SCRIPT%/*}/../../../resources/build/build-utils.sh"
|
||||
. "${THIS_SCRIPT%/*}/../../../resources/build/builder-basic.inc.sh"
|
||||
## END STANDARD BUILD SCRIPT INCLUDE
|
||||
|
||||
|
||||
if [[ $BUILDER_OS == win ]]; then
|
||||
if builder_is_windows; then
|
||||
# BrowserStackLocal may not exist, so always pass
|
||||
taskkill //f //im BrowserStackLocal.exe || true
|
||||
fi
|
||||
|
|
|
|||
|
|
@ -2,10 +2,11 @@
|
|||
## START STANDARD BUILD SCRIPT INCLUDE
|
||||
# adjust relative paths as necessary
|
||||
THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")"
|
||||
. "${THIS_SCRIPT%/*}/../../../resources/build/builder.inc.sh"
|
||||
. "${THIS_SCRIPT%/*}/../../../resources/build/builder-full.inc.sh"
|
||||
## END STANDARD BUILD SCRIPT INCLUDE
|
||||
|
||||
. "$KEYMAN_ROOT/resources/shellHelperFunctions.sh"
|
||||
. "$KEYMAN_ROOT/resources/build/utils.inc.sh"
|
||||
. "$KEYMAN_ROOT/resources/build/node.inc.sh"
|
||||
|
||||
################################ Main script ################################
|
||||
|
||||
|
|
@ -17,5 +18,5 @@ builder_describe_outputs \
|
|||
builder_parse "$@"
|
||||
|
||||
builder_run_action clean rm -rf build/ node_modules/
|
||||
builder_run_action configure verify_npm_setup
|
||||
builder_run_action configure node_select_version_and_npm_ci
|
||||
builder_run_action build tsc --build
|
||||
|
|
|
|||
|
|
@ -6,10 +6,11 @@
|
|||
## START STANDARD BUILD SCRIPT INCLUDE
|
||||
# adjust relative paths as necessary
|
||||
THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")"
|
||||
. "${THIS_SCRIPT%/*}/../../../resources/build/builder.inc.sh"
|
||||
. "${THIS_SCRIPT%/*}/../../../resources/build/builder-full.inc.sh"
|
||||
## END STANDARD BUILD SCRIPT INCLUDE
|
||||
|
||||
. "$KEYMAN_ROOT/resources/shellHelperFunctions.sh"
|
||||
. "$KEYMAN_ROOT/resources/build/utils.inc.sh"
|
||||
. "$KEYMAN_ROOT/resources/build/node.inc.sh"
|
||||
|
||||
################################ Main script ################################
|
||||
|
||||
|
|
@ -34,7 +35,7 @@ fi
|
|||
### CONFIGURE ACTIONS
|
||||
|
||||
if builder_start_action configure; then
|
||||
verify_npm_setup
|
||||
node_select_version_and_npm_ci
|
||||
builder_finish_action success configure
|
||||
fi
|
||||
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@
|
|||
## START STANDARD BUILD SCRIPT INCLUDE
|
||||
# adjust relative paths as necessary
|
||||
THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")"
|
||||
. "${THIS_SCRIPT%/*}/../../resources/build/builder.inc.sh"
|
||||
. "${THIS_SCRIPT%/*}/../../resources/build/builder-full.inc.sh"
|
||||
## END STANDARD BUILD SCRIPT INCLUDE
|
||||
|
||||
builder_describe "Keyman common web modules" \
|
||||
|
|
|
|||
|
|
@ -2,10 +2,11 @@
|
|||
## START STANDARD BUILD SCRIPT INCLUDE
|
||||
# adjust relative paths as necessary
|
||||
THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")"
|
||||
. "${THIS_SCRIPT%/*}/../../../resources/build/builder.inc.sh"
|
||||
. "${THIS_SCRIPT%/*}/../../../resources/build/builder-full.inc.sh"
|
||||
## END STANDARD BUILD SCRIPT INCLUDE
|
||||
|
||||
. "$KEYMAN_ROOT/resources/shellHelperFunctions.sh"
|
||||
. "$KEYMAN_ROOT/resources/build/utils.inc.sh"
|
||||
. "$KEYMAN_ROOT/resources/build/node.inc.sh"
|
||||
. "$KEYMAN_ROOT/resources/build/build-utils-ci.inc.sh"
|
||||
|
||||
################################ Main script ################################
|
||||
|
|
@ -53,6 +54,6 @@ export default KEYMAN_VERSION;
|
|||
}
|
||||
|
||||
builder_run_action clean rm -rf version.inc.ts keyman-version.mts build/
|
||||
builder_run_action configure verify_npm_setup
|
||||
builder_run_action configure node_select_version_and_npm_ci
|
||||
builder_run_action build do_build
|
||||
builder_run_action publish builder_publish_npm
|
||||
|
|
|
|||
|
|
@ -2,10 +2,11 @@
|
|||
## START STANDARD BUILD SCRIPT INCLUDE
|
||||
# adjust relative paths as necessary
|
||||
THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")"
|
||||
. "${THIS_SCRIPT%/*}/../../../resources/build/builder.inc.sh"
|
||||
. "${THIS_SCRIPT%/*}/../../../resources/build/builder-full.inc.sh"
|
||||
## END STANDARD BUILD SCRIPT INCLUDE
|
||||
|
||||
. "$KEYMAN_ROOT/resources/shellHelperFunctions.sh"
|
||||
. "$KEYMAN_ROOT/resources/build/utils.inc.sh"
|
||||
. "$KEYMAN_ROOT/resources/build/node.inc.sh"
|
||||
. "$KEYMAN_ROOT/resources/build/build-utils-ci.inc.sh"
|
||||
|
||||
builder_describe "Build Keyman langtags.js common module" \
|
||||
|
|
@ -32,7 +33,7 @@ function compile_langtags() {
|
|||
}
|
||||
|
||||
function do_configure() {
|
||||
verify_npm_setup
|
||||
node_select_version_and_npm_ci
|
||||
compile_langtags
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -2,10 +2,11 @@
|
|||
## START STANDARD BUILD SCRIPT INCLUDE
|
||||
# adjust relative paths as necessary
|
||||
THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")"
|
||||
. "${THIS_SCRIPT%/*}/../../../resources/build/builder.inc.sh"
|
||||
. "${THIS_SCRIPT%/*}/../../../resources/build/builder-full.inc.sh"
|
||||
## END STANDARD BUILD SCRIPT INCLUDE
|
||||
|
||||
. "$KEYMAN_ROOT/resources/shellHelperFunctions.sh"
|
||||
. "$KEYMAN_ROOT/resources/build/utils.inc.sh"
|
||||
. "$KEYMAN_ROOT/resources/build/node.inc.sh"
|
||||
. "$KEYMAN_ROOT/resources/build/build-utils-ci.inc.sh"
|
||||
|
||||
builder_describe "Build Keyman common file types module" \
|
||||
|
|
@ -76,7 +77,7 @@ function compile_schemas() {
|
|||
|
||||
function do_configure() {
|
||||
compile_schemas
|
||||
verify_npm_setup
|
||||
node_select_version_and_npm_ci
|
||||
}
|
||||
|
||||
function do_test() {
|
||||
|
|
|
|||
|
|
@ -81,11 +81,11 @@ export class ElementString extends Array<ElemElement> {
|
|||
// error. So we can just exit here.
|
||||
return null; // UnicodeSet error
|
||||
}
|
||||
const uset = sections.usetparser.parseUnicodeSet(item.segment, needRanges, options?.x);
|
||||
const uset = sections.usetparser.parseUnicodeSet(item.segment, needRanges, options?.compileContext);
|
||||
if (!uset) {
|
||||
return null; // UnicodeSet error already added to callback
|
||||
}
|
||||
elem.uset = sections.uset.allocUset(uset, sections, options?.x);
|
||||
elem.uset = sections.uset.allocUset(uset, sections, options?.compileContext);
|
||||
elem.value = sections.strs.allocString('', {...options, singleOk: true}); // no string
|
||||
} else if (item.type === ElementType.codepoint || item.type === ElementType.escaped || item.type === ElementType.string) {
|
||||
// some kind of a string
|
||||
|
|
|
|||
|
|
@ -141,7 +141,7 @@ export class StrsItem {
|
|||
/** add any context from the options to this strsitem */
|
||||
setContext(opts?: StrsOptions) {
|
||||
// At present, there's only a single piece of context available
|
||||
this._context = this._context || opts?.x;
|
||||
this._context = this._context || opts?.compileContext;
|
||||
}
|
||||
|
||||
get context() : any {
|
||||
|
|
@ -174,7 +174,7 @@ export interface StrsOptions {
|
|||
/** string can be stored as a single CharStrsItem, not in strs table. */
|
||||
singleOk?: boolean;
|
||||
/** optional context */
|
||||
x?: any;
|
||||
compileContext?: any;
|
||||
};
|
||||
|
||||
export class Strs extends Section {
|
||||
|
|
@ -374,13 +374,13 @@ export class Vars extends Section {
|
|||
export class VarsItem extends Section {
|
||||
id: StrsItem;
|
||||
value: StrsItem;
|
||||
x?: any;
|
||||
compileContext?: any;
|
||||
|
||||
constructor(id: string, value: string, sections: DependencySections, x?: any) {
|
||||
constructor(id: string, value: string, sections: DependencySections, compileContext?: any) {
|
||||
super();
|
||||
this.id = sections.strs.allocString(id);
|
||||
this.value = sections.strs.allocString(value, {unescape: true});
|
||||
this.x = x;
|
||||
this.value = sections.strs.allocString(value, { unescape: true });
|
||||
this.compileContext = compileContext;
|
||||
}
|
||||
|
||||
valid() : boolean {
|
||||
|
|
@ -389,11 +389,11 @@ export class VarsItem extends Section {
|
|||
};
|
||||
|
||||
export class UnicodeSetItem extends VarsItem {
|
||||
constructor(id: string, value: string, sections: DependencySections, usetparser: UnicodeSetParser, x?: any) {
|
||||
super(id, value, sections, x);
|
||||
constructor(id: string, value: string, sections: DependencySections, usetparser: UnicodeSetParser, compileContext?: any) {
|
||||
super(id, value, sections, compileContext);
|
||||
const needRanges = sections.usetparser.sizeUnicodeSet(value);
|
||||
if (needRanges >= 0) {
|
||||
this.unicodeSet = sections.usetparser.parseUnicodeSet(value, needRanges);
|
||||
this.unicodeSet = sections.usetparser.parseUnicodeSet(value, needRanges, compileContext);
|
||||
} // otherwise: error (was recorded via callback)
|
||||
}
|
||||
unicodeSet?: UnicodeSet;
|
||||
|
|
@ -403,9 +403,9 @@ export class UnicodeSetItem extends VarsItem {
|
|||
};
|
||||
|
||||
export class SetVarItem extends VarsItem {
|
||||
constructor(id: string, value: string[], sections: DependencySections, x?: any) {
|
||||
super(id, value.join(' '), sections, x);
|
||||
this.items = sections.elem.allocElementString(sections, {x}, value);
|
||||
constructor(id: string, value: string[], sections: DependencySections, compileContext?: any) {
|
||||
super(id, value.join(' '), sections, compileContext);
|
||||
this.items = sections.elem.allocElementString(sections, { compileContext }, value);
|
||||
}
|
||||
items: ElementString; // element string array
|
||||
valid() : boolean {
|
||||
|
|
@ -414,8 +414,8 @@ export class SetVarItem extends VarsItem {
|
|||
};
|
||||
|
||||
export class StringVarItem extends VarsItem {
|
||||
constructor(id: string, value: string, sections: DependencySections, x?: any) {
|
||||
super(id, value, sections, x);
|
||||
constructor(id: string, value: string, sections: DependencySections, compileContext?: any) {
|
||||
super(id, value, sections, compileContext);
|
||||
}
|
||||
// no added fields
|
||||
};
|
||||
|
|
@ -453,7 +453,7 @@ export class Tran extends Section {
|
|||
};
|
||||
|
||||
export class UsetItem {
|
||||
constructor(public uset: UnicodeSet, public str: StrsItem, public x?: any) {
|
||||
constructor(public uset: UnicodeSet, public str: StrsItem, public compileContext?: any) {
|
||||
}
|
||||
compareTo(other: UsetItem) : number {
|
||||
return this.str.compareTo(other.str);
|
||||
|
|
@ -462,11 +462,11 @@ export class UsetItem {
|
|||
|
||||
export class Uset extends Section {
|
||||
usets: UsetItem[] = [];
|
||||
allocUset(set: UnicodeSet, sections: DependencySections, x?: any) : UsetItem {
|
||||
allocUset(set: UnicodeSet, sections: DependencySections, compileContext?: any) : UsetItem {
|
||||
// match the same pattern
|
||||
let result = this.usets.find(s => set.pattern == s.uset.pattern);
|
||||
if (result === undefined) {
|
||||
result = new UsetItem(set, sections.strs.allocString(set.pattern), x);
|
||||
result = new UsetItem(set, sections.strs.allocString(set.pattern), compileContext);
|
||||
this.usets.push(result);
|
||||
}
|
||||
return result;
|
||||
|
|
|
|||
|
|
@ -8,13 +8,13 @@ export interface UnicodeSetParser {
|
|||
* @param pattern string to parse such as `[a-z]`
|
||||
* @param rangeCount number of ranges to allow for
|
||||
*/
|
||||
parseUnicodeSet(pattern: string, rangeCount: number, x?: any) : UnicodeSet | null;
|
||||
parseUnicodeSet(pattern: string, rangeCount: number, compileContext?: any) : UnicodeSet | null;
|
||||
/**
|
||||
* Calculate the number of ranges in a UnicodeSet
|
||||
* @param pattern string to parse such as `[a-z]`
|
||||
* @returns number of ranges, or -1 (with callback-reported err) on err
|
||||
*/
|
||||
sizeUnicodeSet(pattern: string, x?: any) : number;
|
||||
sizeUnicodeSet(pattern: string, compileContext?: any) : number;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -424,13 +424,24 @@ export interface ProbabilityMass<T> {
|
|||
export type Distribution<T> = ProbabilityMass<T>[];
|
||||
|
||||
/**
|
||||
* A type augmented with an optional probability.
|
||||
* A type augmented with optional probability data.
|
||||
*/
|
||||
export type Outcome<T> = T & {
|
||||
/**
|
||||
* [optional] probability of this outcome.
|
||||
* [optional] the modeled likelihood associated with this outcome.
|
||||
*/
|
||||
p?: number;
|
||||
|
||||
/**
|
||||
* The likelihood of the suggestion itself based solely on the lexical model
|
||||
*/
|
||||
['lexical-p']?: number
|
||||
|
||||
/**
|
||||
* The likelihood associated with the keystroke sequence and/or associated
|
||||
* text corrections best matching the suggestion.
|
||||
*/
|
||||
['correction-p']?: number
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
@ -441,6 +452,21 @@ export type WithOutcome<T> = T & {
|
|||
* Probability of this outcome.
|
||||
*/
|
||||
p: number;
|
||||
|
||||
/**
|
||||
* The likelihood of the suggestion itself based solely on the lexical model
|
||||
*
|
||||
* Only emitted for verbose mode.
|
||||
*/
|
||||
['lexical-p']?: number
|
||||
|
||||
/**
|
||||
* The likelihood associated with the keystroke sequence and/or associated
|
||||
* text corrections best matching the suggestion.
|
||||
*
|
||||
* Only omitted for verbose mode.
|
||||
*/
|
||||
['correction-p']?: number
|
||||
};
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -19,6 +19,8 @@ export * as KmpJsonFile from './package/kmp-json-file.js';
|
|||
export { Uni_IsSurrogate1, Uni_IsSurrogate2 } from './util/util.js';
|
||||
export * as util from './util/util.js';
|
||||
|
||||
export { ObjectWithCompileContext } from './util/types.js';
|
||||
|
||||
export * as KeymanFileTypes from './util/file-types.js';
|
||||
|
||||
export * as Schemas from './schemas.js';
|
||||
|
|
|
|||
6
common/web/types/src/util/types.ts
Normal file
6
common/web/types/src/util/types.ts
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
/**
|
||||
* Any object with metadata, for example for line number errs.
|
||||
* Defined as 'any' here to reduce noise on the client side.
|
||||
* @see {@link KeymanXMLReader.getMetaData()}
|
||||
*/
|
||||
export type ObjectWithCompileContext = any;
|
||||
|
|
@ -3,7 +3,7 @@ export { MATCH_HEX_ESCAPE, CONTAINS_QUAD_ESCAPE, MATCH_QUAD_ESCAPE };
|
|||
|
||||
/**
|
||||
* xml2js will not place single-entry objects into arrays. Easiest way to fix
|
||||
* this is to box them ourselves as needed. Ensures that o.x is an array.
|
||||
* this is to box them ourselves as needed. Ensures that o[x] is always an array.
|
||||
*
|
||||
* @param o Object with property to box
|
||||
* @param x Name of element to box
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
## START STANDARD BUILD SCRIPT INCLUDE
|
||||
# adjust relative paths as necessary
|
||||
THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")"
|
||||
. "${THIS_SCRIPT%/*}/../../resources/build/builder.inc.sh"
|
||||
. "${THIS_SCRIPT%/*}/../../resources/build/builder-full.inc.sh"
|
||||
## END STANDARD BUILD SCRIPT INCLUDE
|
||||
|
||||
#
|
||||
|
|
@ -18,7 +18,7 @@ builder_describe "Keyman common Windows modules" \
|
|||
|
||||
builder_parse "$@"
|
||||
|
||||
if [[ $BUILDER_OS != win ]]; then
|
||||
if ! builder_is_windows; then
|
||||
builder_echo grey "Platform is not Windows; skipping common/windows"
|
||||
exit 0
|
||||
fi
|
||||
|
|
|
|||
|
|
@ -13,8 +13,8 @@ set -u
|
|||
## START STANDARD BUILD SCRIPT INCLUDE
|
||||
# adjust relative paths as necessary
|
||||
THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")"
|
||||
. "${THIS_SCRIPT%/*}/../../resources/build/build-utils.sh"
|
||||
# . "$KEYMAN_ROOT/resources/shellHelperFunctions.sh"
|
||||
. "${THIS_SCRIPT%/*}/../../resources/build/builder-basic.inc.sh"
|
||||
# . "$KEYMAN_ROOT/resources/build/utils.inc.sh"
|
||||
## END STANDARD BUILD SCRIPT INCLUDE
|
||||
|
||||
pushd $KEYMAN_CEF4DELPHI_ROOT > /dev/null
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
## START STANDARD BUILD SCRIPT INCLUDE
|
||||
# adjust relative paths as necessary
|
||||
THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")"
|
||||
. "${THIS_SCRIPT%/*}/../../../resources/build/builder.inc.sh"
|
||||
. "${THIS_SCRIPT%/*}/../../../resources/build/builder-full.inc.sh"
|
||||
## END STANDARD BUILD SCRIPT INCLUDE
|
||||
|
||||
builder_describe \
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
## START STANDARD BUILD SCRIPT INCLUDE
|
||||
# adjust relative paths as necessary
|
||||
THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")"
|
||||
. "${THIS_SCRIPT%/*}/../../../resources/build/builder.inc.sh"
|
||||
. "${THIS_SCRIPT%/*}/../../../resources/build/builder-full.inc.sh"
|
||||
## END STANDARD BUILD SCRIPT INCLUDE
|
||||
|
||||
builder_describe \
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
## START STANDARD BUILD SCRIPT INCLUDE
|
||||
# adjust relative paths as necessary
|
||||
THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")"
|
||||
. "${THIS_SCRIPT%/*}/../../../../resources/build/builder.inc.sh"
|
||||
. "${THIS_SCRIPT%/*}/../../../../resources/build/builder-full.inc.sh"
|
||||
## END STANDARD BUILD SCRIPT INCLUDE
|
||||
|
||||
builder_describe "Common Delphi components" clean configure build test edit
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
## START STANDARD BUILD SCRIPT INCLUDE
|
||||
# adjust relative paths as necessary
|
||||
THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")"
|
||||
. "${THIS_SCRIPT%/*}/../../../../resources/build/builder.inc.sh"
|
||||
. "${THIS_SCRIPT%/*}/../../../../resources/build/builder-full.inc.sh"
|
||||
## END STANDARD BUILD SCRIPT INCLUDE
|
||||
|
||||
builder_describe \
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
## START STANDARD BUILD SCRIPT INCLUDE
|
||||
# adjust relative paths as necessary
|
||||
THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")"
|
||||
. "${THIS_SCRIPT%/*}/../../../../../resources/build/builder.inc.sh"
|
||||
. "${THIS_SCRIPT%/*}/../../../../../resources/build/builder-full.inc.sh"
|
||||
## END STANDARD BUILD SCRIPT INCLUDE
|
||||
|
||||
builder_describe "cef4delphi component" clean configure build test
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
## START STANDARD BUILD SCRIPT INCLUDE
|
||||
# adjust relative paths as necessary
|
||||
THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")"
|
||||
. "${THIS_SCRIPT%/*}/../../../../../resources/build/builder.inc.sh"
|
||||
. "${THIS_SCRIPT%/*}/../../../../../resources/build/builder-full.inc.sh"
|
||||
## END STANDARD BUILD SCRIPT INCLUDE
|
||||
|
||||
builder_describe "dcpcrypt component" clean configure build test
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
## START STANDARD BUILD SCRIPT INCLUDE
|
||||
# adjust relative paths as necessary
|
||||
THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")"
|
||||
. "${THIS_SCRIPT%/*}/../../../../../resources/build/builder.inc.sh"
|
||||
. "${THIS_SCRIPT%/*}/../../../../../resources/build/builder-full.inc.sh"
|
||||
## END STANDARD BUILD SCRIPT INCLUDE
|
||||
|
||||
builder_describe "jwa component" clean configure build test
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
## START STANDARD BUILD SCRIPT INCLUDE
|
||||
# adjust relative paths as necessary
|
||||
THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")"
|
||||
. "${THIS_SCRIPT%/*}/../../../../../resources/build/builder.inc.sh"
|
||||
. "${THIS_SCRIPT%/*}/../../../../../resources/build/builder-full.inc.sh"
|
||||
## END STANDARD BUILD SCRIPT INCLUDE
|
||||
|
||||
builder_describe "Sentry component for Delphi" clean configure build test
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
## START STANDARD BUILD SCRIPT INCLUDE
|
||||
# adjust relative paths as necessary
|
||||
THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")"
|
||||
. "${THIS_SCRIPT%/*}/../../../../../resources/build/builder.inc.sh"
|
||||
. "${THIS_SCRIPT%/*}/../../../../../resources/build/builder-full.inc.sh"
|
||||
## END STANDARD BUILD SCRIPT INCLUDE
|
||||
|
||||
# TODO: move this out of ext and into tools
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
type
|
||||
TKeymanVersionInfo = record
|
||||
// These fields match fields in /resources/build/build-utils.sh
|
||||
// These fields match fields in /resources/build/builder-basic.inc.sh
|
||||
Version: string; // 14.0.2
|
||||
VersionWin: string; // 14.0.2.0
|
||||
VersionRelease: string; // 14.0
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@
|
|||
// Keyman Version Information
|
||||
|
||||
CKeymanVersionInfo: TKeymanVersionInfo = (
|
||||
// These fields match fields in /resources/build/build-utils.sh
|
||||
// These fields match fields in /resources/build/builder-basic.inc.sh
|
||||
Version: '$Version';
|
||||
VersionWin: '$VersionWin';
|
||||
VersionRelease: '$VersionRelease';
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
## START STANDARD BUILD SCRIPT INCLUDE
|
||||
# adjust relative paths as necessary
|
||||
THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")"
|
||||
. "${THIS_SCRIPT%/*}/../../../../resources/build/builder.inc.sh"
|
||||
. "${THIS_SCRIPT%/*}/../../../../resources/build/builder-full.inc.sh"
|
||||
## END STANDARD BUILD SCRIPT INCLUDE
|
||||
|
||||
builder_describe \
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
## START STANDARD BUILD SCRIPT INCLUDE
|
||||
# adjust relative paths as necessary
|
||||
THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")"
|
||||
. "${THIS_SCRIPT%/*}/../../../../../resources/build/builder.inc.sh"
|
||||
. "${THIS_SCRIPT%/*}/../../../../../resources/build/builder-full.inc.sh"
|
||||
## END STANDARD BUILD SCRIPT INCLUDE
|
||||
|
||||
builder_describe "Build build_standards_data tool" clean configure build test edit
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
## START STANDARD BUILD SCRIPT INCLUDE
|
||||
# adjust relative paths as necessary
|
||||
THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")"
|
||||
. "${THIS_SCRIPT%/*}/../../../../../resources/build/builder.inc.sh"
|
||||
. "${THIS_SCRIPT%/*}/../../../../../resources/build/builder-full.inc.sh"
|
||||
## END STANDARD BUILD SCRIPT INCLUDE
|
||||
|
||||
builder_describe "Unicode character database build tool" \
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
## START STANDARD BUILD SCRIPT INCLUDE
|
||||
# adjust relative paths as necessary
|
||||
THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")"
|
||||
. "${THIS_SCRIPT%/*}/../../../../../resources/build/builder.inc.sh"
|
||||
. "${THIS_SCRIPT%/*}/../../../../../resources/build/builder-full.inc.sh"
|
||||
## END STANDARD BUILD SCRIPT INCLUDE
|
||||
|
||||
builder_describe "Build and install test certificates" clean configure build test \
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
## START STANDARD BUILD SCRIPT INCLUDE
|
||||
# adjust relative paths as necessary
|
||||
THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")"
|
||||
. "${THIS_SCRIPT%/*}/../../../../../resources/build/builder.inc.sh"
|
||||
. "${THIS_SCRIPT%/*}/../../../../../resources/build/builder-full.inc.sh"
|
||||
## END STANDARD BUILD SCRIPT INCLUDE
|
||||
|
||||
builder_describe \
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
## START STANDARD BUILD SCRIPT INCLUDE
|
||||
# adjust relative paths as necessary
|
||||
THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")"
|
||||
. "${THIS_SCRIPT%/*}/../../../../../resources/build/builder.inc.sh"
|
||||
. "${THIS_SCRIPT%/*}/../../../../../resources/build/builder-full.inc.sh"
|
||||
## END STANDARD BUILD SCRIPT INCLUDE
|
||||
|
||||
builder_describe "Sentrytool for converting Delphi symbols into sentry-readable format" \
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
## START STANDARD BUILD SCRIPT INCLUDE
|
||||
# adjust relative paths as necessary
|
||||
THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")"
|
||||
. "${THIS_SCRIPT%/*}/../../../../../resources/build/builder.inc.sh"
|
||||
. "${THIS_SCRIPT%/*}/../../../../../resources/build/builder-full.inc.sh"
|
||||
## END STANDARD BUILD SCRIPT INCLUDE
|
||||
|
||||
builder_describe "Tool for validating klog is disabled for release builds" \
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
## START STANDARD BUILD SCRIPT INCLUDE
|
||||
# adjust relative paths as necessary
|
||||
THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")"
|
||||
. "${THIS_SCRIPT%/*}/../../../../../resources/build/builder.inc.sh"
|
||||
. "${THIS_SCRIPT%/*}/../../../../../resources/build/builder-full.inc.sh"
|
||||
## END STANDARD BUILD SCRIPT INCLUDE
|
||||
|
||||
builder_describe "Tool to verify all Windows executable signatures and manifests" \
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ set -u
|
|||
## START STANDARD BUILD SCRIPT INCLUDE
|
||||
# adjust relative paths as necessary
|
||||
THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")"
|
||||
. "${THIS_SCRIPT%/*}/../../resources/build/build-utils.sh"
|
||||
. "${THIS_SCRIPT%/*}/../../resources/build/builder-basic.inc.sh"
|
||||
## END STANDARD BUILD SCRIPT INCLUDE
|
||||
|
||||
display_usage() {
|
||||
|
|
|
|||
|
|
@ -3,11 +3,11 @@
|
|||
## START STANDARD BUILD SCRIPT INCLUDE
|
||||
# adjust relative paths as necessary
|
||||
THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")"
|
||||
. "${THIS_SCRIPT%/*}/../resources/build/builder.inc.sh"
|
||||
. "${THIS_SCRIPT%/*}/../resources/build/builder-full.inc.sh"
|
||||
|
||||
## END STANDARD BUILD SCRIPT INCLUDE
|
||||
|
||||
. "$KEYMAN_ROOT/resources/shellHelperFunctions.sh"
|
||||
. "$KEYMAN_ROOT/resources/build/utils.inc.sh"
|
||||
. "$THIS_SCRIPT_PATH/commands.inc.sh"
|
||||
|
||||
################################ Main script ################################
|
||||
|
|
|
|||
|
|
@ -91,7 +91,7 @@ do_test() {
|
|||
if [[ $target =~ ^(x86|x64)$ ]]; then
|
||||
cmd //C build.bat $target $BUILDER_CONFIGURATION test $testparams
|
||||
else
|
||||
if [[ $target == wasm ]] && [[ $BUILDER_OS == mac ]]; then
|
||||
if [[ $target == wasm ]] && builder_is_macos; then
|
||||
# 11794 -- parallel tests failing on some mac build agents; temporary
|
||||
# mitigation until we diagnose root cause
|
||||
meson test -j 1 -C "$MESON_PATH" $testparams
|
||||
|
|
@ -136,7 +136,7 @@ do_uninstall() {
|
|||
# ----------------------------------------------------------------------------
|
||||
|
||||
build_meson_cross_file_for_wasm() {
|
||||
if [ $BUILDER_OS == win ]; then
|
||||
if builder_is_windows; then
|
||||
local R=$(cygpath -w $(echo $EMSCRIPTEN_BASE) | sed 's_\\_\\\\_g')
|
||||
else
|
||||
local R=$(echo $EMSCRIPTEN_BASE | sed 's_/_\\/_g')
|
||||
|
|
|
|||
|
|
@ -5,10 +5,11 @@
|
|||
## START STANDARD BUILD SCRIPT INCLUDE
|
||||
# adjust relative paths as necessary
|
||||
THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")"
|
||||
. "${THIS_SCRIPT%/*}/../../../resources/build/builder.inc.sh"
|
||||
. "${THIS_SCRIPT%/*}/../../../resources/build/builder-full.inc.sh"
|
||||
## END STANDARD BUILD SCRIPT INCLUDE
|
||||
|
||||
. "$KEYMAN_ROOT/resources/shellHelperFunctions.sh"
|
||||
. "$KEYMAN_ROOT/resources/build/utils.inc.sh"
|
||||
. "$KEYMAN_ROOT/resources/build/node.inc.sh"
|
||||
. "$KEYMAN_ROOT/resources/build/build-utils-ci.inc.sh"
|
||||
|
||||
builder_describe "Keyman ldml-keyboard-constants package" \
|
||||
|
|
@ -30,7 +31,7 @@ builder_parse "$@"
|
|||
#-------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
builder_run_action clean rm -rf ./build/
|
||||
builder_run_action configure verify_npm_setup
|
||||
builder_run_action configure node_select_version_and_npm_ci
|
||||
builder_run_action build tsc --build
|
||||
# builder_run_action test # no tests at this time
|
||||
builder_run_action publish builder_publish_npm
|
||||
|
|
|
|||
|
|
@ -65,6 +65,7 @@ kmc_cmd = [node, '--enable-source-maps', kmc_root]
|
|||
# Build all keyboards in output folder
|
||||
|
||||
foreach kbd : tests_needing_copy
|
||||
# This will output a (wrong) deprecation warning with meson < 1.5 - see #13250
|
||||
configure_file(input: kbd + '.xml', output: kbd + '.xml', copy: true)
|
||||
endforeach
|
||||
|
||||
|
|
@ -77,6 +78,7 @@ foreach kbd : tests_with_testdata
|
|||
endforeach
|
||||
|
||||
foreach kbd : tests_from_cldr
|
||||
# This will output a (wrong) deprecation warning with meson < 1.5 - see #13250
|
||||
configure_file(input: ldml_data / kbd + '.xml', output: kbd + '.xml', copy: true)
|
||||
configure_file(
|
||||
command: kmc_cmd + ['build', 'ldml-test-data', '@INPUT@', '--out-file', '@OUTPUT@'],
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
## START STANDARD BUILD SCRIPT INCLUDE
|
||||
# adjust relative paths as necessary
|
||||
THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")"
|
||||
. "${THIS_SCRIPT%/*}/../../../resources/build/builder.inc.sh"
|
||||
. "${THIS_SCRIPT%/*}/../../../resources/build/builder-full.inc.sh"
|
||||
## END STANDARD BUILD SCRIPT INCLUDE
|
||||
|
||||
CORE_ROOT="$KEYMAN_ROOT/core"
|
||||
|
|
|
|||
|
|
@ -5,10 +5,10 @@
|
|||
## START STANDARD BUILD SCRIPT INCLUDE
|
||||
# adjust relative paths as necessary
|
||||
THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")"
|
||||
. "${THIS_SCRIPT%/*}/../../../resources/build/builder.inc.sh"
|
||||
. "${THIS_SCRIPT%/*}/../../../resources/build/builder-full.inc.sh"
|
||||
## END STANDARD BUILD SCRIPT INCLUDE
|
||||
|
||||
. "$KEYMAN_ROOT/resources/shellHelperFunctions.sh"
|
||||
. "$KEYMAN_ROOT/resources/build/utils.inc.sh"
|
||||
|
||||
CORE_LDML_H_FILE="../../include/ldml/keyman_core_ldml.h"
|
||||
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
## START STANDARD UTILITY SCRIPT INCLUDE
|
||||
# adjust relative paths as necessary
|
||||
THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")"
|
||||
. "${THIS_SCRIPT%/*}/../resources/build/build-utils.sh"
|
||||
. "${THIS_SCRIPT%/*}/../resources/build/builder-basic.inc.sh"
|
||||
## END STANDARD UTILITY SCRIPT INCLUDE
|
||||
|
||||
# This is not a builder script but calls a builder script
|
||||
|
|
|
|||
|
|
@ -13,13 +13,10 @@ multiple source files, which are all managed within this one editor.
|
|||
The following image shows the first tab of the editor, the Details tab,
|
||||
for a brand new keyboard, with those three initial tabs.
|
||||
|
||||

|
||||
<img src="../images/ui/frmKeymanWizard_New.png" style="width:100%" alt="Keyboard Editor - New file, Details tab"/>
|
||||
|
||||
> ### Note
|
||||
Users of earlier versions of Keyman Developer may initially have trouble
|
||||
finding tabs such as the Icon tab or the On-Screen tab, as they are not
|
||||
initially visible. The Features grid on the Details tab allows you to
|
||||
add these extra features into the keyboard.
|
||||
> [!Note]
|
||||
> Users of earlier versions of Keyman Developer may initially have trouble finding tabs such as the Icon tab or the On-Screen tab, as they are not initially visible. The Features grid on the Details tab allows you to add these extra features into the keyboard.
|
||||
|
||||
## Keyboard component files
|
||||
|
||||
|
|
@ -47,7 +44,7 @@ because that reflects both the Details and the Layout tab.
|
|||
|
||||
## Details tab
|
||||
|
||||

|
||||
<img src="../images/ui/frmKeymanWizard_Details.png" style="width:100%" alt="Keyboard Editor - Details tab"/>
|
||||
|
||||
The Details tab grows as you add more options to a keyboard. The fields
|
||||
here are:
|
||||
|
|
@ -102,7 +99,7 @@ Features
|
|||
|
||||
## Layout tab
|
||||
|
||||

|
||||
<img src="../images/ui/frmKeymanWizard_Layout_Design.png" style="width:100%" alt="Keyboard Editor - Layout tab, Design view"/>
|
||||
|
||||
The Layout tab gives you a simple interface to quickly create a keyboard
|
||||
using a visual representation of a desktop/laptop computer keyboard. You
|
||||
|
|
@ -124,13 +121,11 @@ There are two ways to assign characters to the keys:
|
|||
onto the appropriate key. This will set the key to output that
|
||||
character.
|
||||
|
||||
> ### Hint
|
||||
To add the character to a key with existing characters, hold
|
||||
<kbd>Ctrl</kbd> while dropping it onto the key.
|
||||
> [!TIP]
|
||||
> To add the character to a key with existing characters, hold <kbd>Ctrl</kbd> while dropping it onto the key.
|
||||
|
||||
<!-- Saperator -->
|
||||
> ### Note
|
||||
Any key that does not have a character assigned to it will output what the selected Windows layout specifies.
|
||||
> [!Note]
|
||||
> Any key that does not have a character assigned to it will output what the selected Windows layout specifies.
|
||||
|
||||
Distinguish between left and right Ctrl/Alt
|
||||
: A Keyman keyboard can treat left and right Ctrl and Alt identically,
|
||||
|
|
@ -151,9 +146,7 @@ Display 102nd Key (as on European keyboards)
|
|||
You can press and release <kbd>Ctrl</kbd> to select
|
||||
another key on the keyboard using your keyboard.
|
||||
|
||||
<br/>
|
||||
|
||||

|
||||
<img src="../images/ui/frmKeymanWizard_Layout_Code.png" style="width:100%" alt="Keyboard Editor - Layout tab, Code view"/>
|
||||
|
||||
The Code view shows the source code of the keyboard file. This is where
|
||||
all the information in the Details and Layout tab is stored, and
|
||||
|
|
@ -165,7 +158,7 @@ editor shown within this view.
|
|||
|
||||
## On-Screen tab
|
||||
|
||||

|
||||
<img src="../images/ui/OnScreenKeyboard.png" style="width:100%" alt="Keyboard Editor - On-Screen tab"/>
|
||||
|
||||
This tab allows you to edit the visual representation of your keyboard
|
||||
layout. The content on this tab is stored in the .kvks file associated
|
||||
|
|
@ -213,17 +206,28 @@ Distinguish between left and right Ctrl/Alt
|
|||
: If checked, treats the left and right Ctrl/Alt as separate layers
|
||||
|
||||
Display 102nd Key (as on European keyboards)
|
||||
: European keyboards have one extra key that is not on US keyboards.
|
||||
: European keyboards (ISO layout) have one extra key that is not on US keyboards (ANSI layout).
|
||||
This key is positioned to the right of the left shift key. Some
|
||||
other keyboards have additional keys; these are not shown on the
|
||||
layout designer. If you have a European layout selected as your
|
||||
layout designer.
|
||||
|
||||
If you have a European layout selected as your
|
||||
Windows layout, the 102nd key will always be visible in the
|
||||
designer; ensure you select this checkbox if you want the 102nd key
|
||||
to always be visible to end users of the layout, irrespective of
|
||||
their selected base layout. When a European layout is selected as
|
||||
their selected base layout.
|
||||
|
||||
When a European layout is selected as
|
||||
your Windows layout, the shape of the Enter key will also change to
|
||||
take two rows, and the backslash key will move down one row, but not
|
||||
otherwise change in behaviour.
|
||||
otherwise change in behaviour.
|
||||
|
||||
<img src="../images/ui/OnScreenKeyboard_ISO.png" style="width:100%" alt="Keyboard Editor - On-Screen tab with ISO layout"/>
|
||||
*See the difference between the two layouts in Keyman Developer.*
|
||||
|
||||
> [!NOTE]
|
||||
> The "Display 102nd Key (as on European keyboards)" checkbox can be left unchecked.
|
||||
> To ensure compatibility, the extra key shouldn't be assigned since it won't be accessible on an ANSI physical keyboard.
|
||||
|
||||
Auto-fill underlying layout
|
||||
: When the Fill from layout button is clicked, if this option is
|
||||
|
|
@ -232,7 +236,7 @@ Auto-fill underlying layout
|
|||
|
||||
## Touch Layout tab
|
||||
|
||||

|
||||
<img src="../images/ui/TouchLayout_Design.png" style="width:100%" alt="Keyboard Editor - Touch Layout tab, Design view"/>
|
||||
|
||||
The Touch Layout tab is used to create the visible representation of the
|
||||
keyboard layout for touch devices. It works similarly to the On Screen
|
||||
|
|
@ -251,7 +255,7 @@ including iPhone and iPad, in different orientations, to allow you to
|
|||
visualize the keyboard layout before you load it onto a device. The
|
||||
following image shows all aspects of the touch design view.
|
||||
|
||||

|
||||
<img src="../images/ui/TouchLayout_Design_2.png" style="width:100%" alt="Keyboard Editor - Touch Layout tab, Design view closeup"/>
|
||||
|
||||
### Left sidebar controls
|
||||
|
||||
|
|
@ -266,6 +270,20 @@ Template...
|
|||
be lost. Therefore, selecting an appropriate template early in the
|
||||
development process is suggested.
|
||||
|
||||
- template-basic: has only a phone layout (4 rows of keys), with three layers: default (K_A through K_Z
|
||||
plus some punctuation), shift (Shift K_A through Shift K_Z, plus some punctuation), numeric (K_0 through
|
||||
K_9 unshifted and shifted, plus other non-alphanumerice keys).
|
||||
|
||||
- template-latin: has both phone and tablet layouts (which are identical except for some key spacing,
|
||||
each with 4 rows of keys), with four layers: default, shift, numeric, symbol. The first three layers
|
||||
are similar to those of template-basic, with the addition of longpress keys for accented characters.
|
||||
The symbol layer has many symbols not usually seen on a physical keyboard.
|
||||
|
||||
- template-traditional: has both phone (4 rows of keys) and tablet (5 rows of keys) layouts. The phone
|
||||
layout is similar to the template-basic layout. The tablet layout has eight layers: default, shift, ctrl,
|
||||
shift-ctrl, alt, shift-alt, ctrl-alt, shift-ctrl-alt. The default layer has the keys from the default layer
|
||||
of the desktop layout, the shift layer has the keys from the shift layer of the desktop layout, and so on.
|
||||
|
||||
Import from On Screen
|
||||
: If you have an existing On-Screen Keyboard for your keyboard layout,
|
||||
importing the design from the On-Screen Keyboard can reduce the
|
||||
|
|
@ -454,7 +472,7 @@ dragged between the main keyboard area and the long press area. The bar
|
|||
below the long press area contains the corresponding controls for the
|
||||
long press keys.
|
||||
|
||||

|
||||
<img src="../images/ui/frmKeymanWizard_TouchLayout_Code.png" style="width:100%" alt="Keyboard Editor - Touch Layout tab, Code view"/>
|
||||
|
||||
The Code view allows you to edit the JSON source of the touch layout
|
||||
file. This makes certain operations simpler, such as batched rearranging
|
||||
|
|
@ -467,7 +485,7 @@ The format of the layout file is described in [Creating a touch keyboard layout
|
|||
|
||||
Underneath the keyboard area is the Long-press, Flicks, and Multitaps controls.
|
||||
|
||||

|
||||
<img src="../images/ui/LongPress_Flicks_Multitaps.png" style="width:100%" alt="Long-press, Flicks, and Multitaps layout"/>
|
||||
|
||||
Red circle with an X
|
||||
: This button to the top right of the key will delete the key from the
|
||||
|
|
@ -494,7 +512,7 @@ the selected key for different Gesture Type. The only difference between this co
|
|||
|
||||
## Icon tab
|
||||
|
||||

|
||||
<img src="../images/ui/frmKeymanWizard_Icon.png" style="width:100%" alt="Keyboard Editor - Icon tab"/>
|
||||
|
||||
The icon tab allows you to edit the icon associated with the keyboard. An external icon editor will allow you to create more sophisticated icons with alpha transparency and multiple resolutions, but this will cover the standard 16x16 256 colour icon, which is all that many keyboards require. The controls at the top left are:
|
||||
|
||||
|
|
@ -560,7 +578,7 @@ This tab allows you to edit the [named constants](/developer/language/guide/cons
|
|||
|
||||
## Build tab
|
||||
|
||||

|
||||
<img src="../images/ui/BuildTab.png" style="width:100%" alt="Keyboard Editor - Build tab"/>
|
||||
|
||||
A set of common controls is across the top of this tab:
|
||||
|
||||
|
|
|
|||
|
|
@ -129,6 +129,12 @@ are optional.
|
|||
A web site is encouraged and should be filled in the web site field, including
|
||||
the initial "http://" or "https://".
|
||||
|
||||
The Description is the keyboard summary that users will see on the keyboard’s
|
||||
overview page at the keyman.com web site.
|
||||
[GitHub style Markdown](https://docs.github.com/en/get-started/writing-on-github/getting-started-with-writing-and-formatting-on-github/basic-writing-and-formatting-syntax)
|
||||
can be used in the description text. However, HTML tags are not supported.
|
||||
|
||||
|
||||
A package can optionally include a 140x250 JPEG or PNG image file to be shown
|
||||
during installation. This image file must be added to the Files list in step 1,
|
||||
then selected from the list here.
|
||||
|
|
@ -191,4 +197,4 @@ keyboard to the [Keyman Cloud Keyboards Repository](/developer/keyboards/).
|
|||
## Package Installers
|
||||
|
||||
As of Keyman Developer 17, bundled executable package installers for Keyman for
|
||||
Windows can be created using [kmc](kmc), but cannot be created within the IDE.
|
||||
Windows can be created using [kmc](kmc), but cannot be created within the IDE.
|
||||
|
|
|
|||
|
|
@ -0,0 +1,26 @@
|
|||
---
|
||||
title: Using Gestures in Keyman Developer
|
||||
---
|
||||
|
||||
Keyman Developer offers **Longpress** keys, **Flicks**, and **Multitaps** for touch keyboard layout. To allow gestures onto your keyboard, go to the Touch layout tab and define the keys as follows:
|
||||
|
||||
<img src="../../../images/touch-keyboard-tutorial/touch-layout-gestures.jpg" alt="Keyman Developer touch layout gestures" width="70%"/>
|
||||
|
||||
## Tips
|
||||
|
||||
***Flicks** and **long presses** can both be used in a single keyboard. In this scenario, it is recommended to use flicks in only one direction—south (down). Long presses work well alongside this pattern. See, for example, [sil_euro_latin](https://help.keyman.com/keyboard/sil_euro_latin/3.0.3/sil_euro_latin#toc-mobile-keyboard-layout).
|
||||
* Another helpful tip seen in the sil_euro_latin keyboard is using south-flicks on the base and shift layers corresponding to the numeric/symbol layer, this aids in both memorization and discovery.
|
||||
* **Flicks** in multiple directions are possible, but currently Keyman does not support hints for multiple directions, so they are not very discoverable.
|
||||
* **Long presses** are more discoverable, but **flicks** are faster. We suggest using south flicks along with long presses, and including the flick output in the long press for maximum discoverability and optimum ergonomics.
|
||||
|
||||
## Caution
|
||||
|
||||
* **Flicks** near screen edges tend to be problematic--once you drag off the screen, then Keyman can no longer tell that you are flicking (or you may end up activating system controls on the bottom edge):
|
||||
* On the bottom row, south flicks are not recommended.
|
||||
* On the top row, we have the banner space reserved in order to be able to support flicks and long presses up into that region of the screen.
|
||||
* Left/right screen edges, horizontal flicks are not the best practice.
|
||||
|
||||
## See also
|
||||
|
||||
* The [Winchus keyboard](https://help.keyman.com/keyboard/winchus/1.4/winchus#guia-rapida-celular)
|
||||
* The [GFF Amharic keyboard](https://help.keyman.com/keyboard/gff_amharic/3.2.1/gff_amharic#toc-using-this-keyboard)
|
||||
|
|
@ -38,17 +38,23 @@ ago) used the <kbd>/</kbd> key as the deadkey.
|
|||
<kbd>/</kbd><kbd>d</kbd> gave ɗ, and so on.
|
||||
|
||||
It would be possible to use that desktop keyboard logic on touch
|
||||
screens. But your mobile device users will find these rules annoying.
|
||||
screens. But your mobile device users will find these rules annoying.
|
||||
|
||||
Instead of two keys they would probably have to press four, since the
|
||||
standard alphabetical keyboard on most touch devices does not have the
|
||||
slash key. So they would have to press the key to switch to the numeric
|
||||
keyboard, then press slash, then press the key to go back to the
|
||||
alphabetical keyboard, then the letter. What touch screen users would
|
||||
keyboard, then press slash, then press the key to switch back to the
|
||||
alphabetical keyboard, and then the letter. What touch screen users would
|
||||
appreciate is something that uses the great feature of touch screens,
|
||||
the long press or press and hold on a letter, to see analogous letters.
|
||||
So we’ll set up a touch screen keyboard that lets you press and hold ‘d’
|
||||
to see the two hooked d characters, press and hold ‘b’ to see the hooked
|
||||
b characters, and so on.
|
||||
|
||||
So we’ll set up a touch screen keyboard that lets you
|
||||
* press and hold ‘d’ to see the two hooked d characters
|
||||
* press and hold ‘b’ to see the hooked b characters, and so on.
|
||||
|
||||
[Next: Making, testing and distributing the touch
|
||||
keyboard](making-touch-keyboard)
|
||||
|
||||
## See also
|
||||
|
||||
* Tips for using [gestures](gestures) in Keyman Developer
|
||||
|
|
|
|||
Binary file not shown.
|
After Width: | Height: | Size: 44 KiB |
BIN
developer/docs/help/images/ui/OnScreenKeyboard_ISO.png
Normal file
BIN
developer/docs/help/images/ui/OnScreenKeyboard_ISO.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 13 KiB |
|
|
@ -2,6 +2,6 @@
|
|||
title: Additional Credits
|
||||
---
|
||||
|
||||
## <span id="id536439"></span>Code2000, Code2001 and Code2002 fonts
|
||||
## Code2000, Code2001 and Code2002 fonts
|
||||
|
||||
© 2006 James Kass.
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ title: Keyman® Developer License
|
|||
|
||||
MIT License
|
||||
|
||||
Copyright (c) 1994-2018 SIL International
|
||||
Copyright (c) 1994-2025 SIL Global
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a
|
||||
copy of this software and associated documentation files (the
|
||||
|
|
|
|||
|
|
@ -30,26 +30,30 @@ The following are all examples of valid BCP 47 tags:
|
|||
* `en-US`: English, in United States
|
||||
* `km-Khmr-KH`: Khmer, written in the Khmer script, in Cambodia
|
||||
* `km-fonipa`: Khmer, transcribed in IPA
|
||||
* `und-cpmn`: Undetermined (Cypro-Minoan)
|
||||
* `tok-Zzzz`: Toki Pona (Code for uncoded script)
|
||||
|
||||
> [!NOTE]
|
||||
> `Zzzz` is an uncoded script of ISO 15924 and one of the Special codes of the Script subtag.
|
||||
|
||||
### The language subtag
|
||||
|
||||
The only required option is the Language subtag, which is an [ISO 639-1][2] or
|
||||
[ISO 639-3][3] code.
|
||||
The only required option is the Language subtag, which is an [ISO 639][4] code. If a two-letter code[ISO 639-1][2] is available, it is used instead of the three-letter code [ISO 639-3][3].
|
||||
|
||||
ISO 639-1 tags are a two-letter code. ISO 639-3 tags are a three-letter code.
|
||||
First, try to find your language on the list of two-letter ISO 639-1 codes.
|
||||
[This Wikipedia page][4] lists all of the two-letter codes.
|
||||
[This Wikipedia page][5] lists all of the two-letter codes.
|
||||
|
||||
If you can't find a two-letter code, you'll need to find the closest
|
||||
three-letter code. You can use [Glottolog][5] to search for your language, and
|
||||
three-letter code. You can use [Glottolog][6] to search for your language, and
|
||||
it will give you an appropriate code. In this example, I searched Glottolog for
|
||||
“[Saanich][6]” (name of the First Nations that speak SENĆOŦEN) and found `str`
|
||||
“[Saanich][7]” (name of the First Nations that speak SENĆOŦEN) and found `str`
|
||||
as the code for all Straits Salish languages.
|
||||
|
||||
The Language subtag is conventionally written in lower case.
|
||||
> [!IMPORTANT]
|
||||
> The Language subtag is conventionally written in lower case.
|
||||
|
||||
The next two subtags are **optional**, however, they allow you to be more
|
||||
specific about your language.
|
||||
> [!NOTE]
|
||||
> The next two subtags are **optional**, however, they allow you to be more specific about your language.
|
||||
|
||||
### The script subtag
|
||||
|
||||
|
|
@ -58,7 +62,7 @@ model or keyboard. If your language only uses one writing system, omit the
|
|||
Script subtag.
|
||||
|
||||
Otherwise, in cases where a language can be written in many different writing
|
||||
systems, you can choose the four letter [ISO 15924][7] script tag that your
|
||||
systems, you can choose the four letter [ISO 15924][8] script tag that your
|
||||
keyboard or lexical model produces.
|
||||
|
||||
For example, Plains Cree can either be written in _standard Roman orthography_,
|
||||
|
|
@ -67,8 +71,8 @@ of the **Canadian Aboriginal syllabics** family of writing systems. If I wrote a
|
|||
keyboard or lexical model that produced syllabics, I would choose `Cans`, as
|
||||
that is the **ISO 15924** tag for Canadian Aboriginal syllabics.
|
||||
|
||||
The Script subtag is conventionally written in title case - first letter
|
||||
capitalized.
|
||||
> [!IMPORTANT]
|
||||
> The Script subtag is conventionally written in title case - first letter capitalized.
|
||||
|
||||
### The region subtag
|
||||
|
||||
|
|
@ -88,11 +92,11 @@ Latin America. Additionally, regions may have vocabulary that doesn't exist in
|
|||
the other regions where the language is spoken.
|
||||
|
||||
If I were working with a language specific to one country, I would use the [ISO
|
||||
3166-1 alpha-2][8] country code for the region subtag. For example, `ES` for
|
||||
3166-1 alpha-2][9] country code for the region subtag. For example, `ES` for
|
||||
Spain or `MX` for Mexico.
|
||||
|
||||
However, if I were working with Latin American Spanish (a group of countries), I
|
||||
would need to specify Latin America's [UN M49][9] region code. For Latin
|
||||
would need to specify Latin America's [UN M49][10] region code. For Latin
|
||||
America, its code is `419`. My lexical model would not suggest words that are
|
||||
common in Spain, but vulgar in Latin America, however it would predict words
|
||||
like "pupupsas" and "chuchitos", which are words that are uncommon in both Spain
|
||||
|
|
@ -100,14 +104,16 @@ and Mexico.
|
|||
|
||||
Another common UN M49 region code is `001` for the whole world.
|
||||
|
||||
Alphabetic region subtags are conventionally written in upper case.
|
||||
> [!IMPORTANT]
|
||||
> Alphabetic region subtags are conventionally written in upper case.
|
||||
|
||||
[1]: https://en.wikipedia.org/wiki/IETF_language_tag
|
||||
[2]: https://en.wikipedia.org/wiki/ISO_639-1
|
||||
[3]: https://en.wikipedia.org/wiki/ISO_639-3
|
||||
[4]: https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes
|
||||
[5]: https://glottolog.org/glottolog/language
|
||||
[6]: https://glottolog.org/resource/languoid/id/saan1246
|
||||
[7]: https://en.wikipedia.org/wiki/ISO_15924
|
||||
[8]: https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2
|
||||
[9]: https://en.wikipedia.org/wiki/UN_M49
|
||||
[4]: https://en.wikipedia.org/wiki/ISO_639
|
||||
[5]: https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes
|
||||
[6]: https://glottolog.org/glottolog/language
|
||||
[7]: https://glottolog.org/resource/languoid/id/saan1246
|
||||
[8]: https://en.wikipedia.org/wiki/ISO_15924
|
||||
[9]: https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2
|
||||
[10]: https://en.wikipedia.org/wiki/UN_M49
|
||||
|
|
|
|||
|
|
@ -102,7 +102,7 @@ Example: keys.ts \- compiler \- call site for error
|
|||
|
||||
```js
|
||||
static ERROR_InvalidScanCode = SevError | 0x0009;
|
||||
static Error_InvalidScanCode = (o:{id: string, invalidCodeList: string}, x: ObjectWithMetadata) => mx(
|
||||
static Error_InvalidScanCode = (o:{id: string, invalidCodeList: string}, compileContext:ObjectWithCompileContext) => mx(
|
||||
this.ERROR_InvalidScanCode, context,
|
||||
Form '${def(o.id)}' has invalid/unknown scancodes '${def(o.codes)}',
|
||||
`…additional markdown detail…`
|
||||
|
|
@ -126,7 +126,7 @@ The `mx()` function does the following (note that `m()` is called first).
|
|||
|
||||
```js
|
||||
let evt = m(code, message, detail); // raw message
|
||||
evt = LdmlCompilerMessages.offset(evt, x); // with offset
|
||||
evt = LdmlCompilerMessages.offset(evt, compileContext); // with offset
|
||||
```
|
||||
|
||||
Note: We could have: `ml(e:CompilerEvent, lineNumber?: number)` so that compilers with a line number could pass that in directly.
|
||||
|
|
|
|||
|
|
@ -2,10 +2,10 @@
|
|||
## START STANDARD BUILD SCRIPT INCLUDE
|
||||
# adjust relative paths as necessary
|
||||
THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")"
|
||||
. "${THIS_SCRIPT%/*}/../../resources/build/builder.inc.sh"
|
||||
. "${THIS_SCRIPT%/*}/../../resources/build/builder-full.inc.sh"
|
||||
## END STANDARD BUILD SCRIPT INCLUDE
|
||||
|
||||
. "$KEYMAN_ROOT/resources/shellHelperFunctions.sh"
|
||||
. "$KEYMAN_ROOT/resources/build/utils.inc.sh"
|
||||
. "$KEYMAN_ROOT/resources/build/build-utils-ci.inc.sh"
|
||||
. "$KEYMAN_ROOT/developer/src/packages.inc.sh"
|
||||
|
||||
|
|
@ -66,7 +66,7 @@ builder_parse "$@"
|
|||
|
||||
#-------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
if [[ $BUILDER_OS == win ]]; then
|
||||
if builder_is_windows; then
|
||||
source "$KEYMAN_ROOT/resources/build/win/environment.inc.sh"
|
||||
fi
|
||||
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
## START STANDARD BUILD SCRIPT INCLUDE
|
||||
# adjust relative paths as necessary
|
||||
THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")"
|
||||
. "${THIS_SCRIPT%/*}/../../../resources/build/builder.inc.sh"
|
||||
. "${THIS_SCRIPT%/*}/../../../resources/build/builder-full.inc.sh"
|
||||
## END STANDARD BUILD SCRIPT INCLUDE
|
||||
|
||||
builder_describe \
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
## START STANDARD BUILD SCRIPT INCLUDE
|
||||
# adjust relative paths as necessary
|
||||
THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")"
|
||||
. "${THIS_SCRIPT%/*}/../../../../resources/build/builder.inc.sh"
|
||||
. "${THIS_SCRIPT%/*}/../../../../resources/build/builder-full.inc.sh"
|
||||
## END STANDARD BUILD SCRIPT INCLUDE
|
||||
|
||||
builder_describe \
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
## START STANDARD BUILD SCRIPT INCLUDE
|
||||
# adjust relative paths as necessary
|
||||
THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")"
|
||||
. "${THIS_SCRIPT%/*}/../../../../resources/build/builder.inc.sh"
|
||||
. "${THIS_SCRIPT%/*}/../../../../resources/build/builder-full.inc.sh"
|
||||
## END STANDARD BUILD SCRIPT INCLUDE
|
||||
|
||||
builder_describe \
|
||||
|
|
|
|||
|
|
@ -2,10 +2,11 @@
|
|||
## START STANDARD BUILD SCRIPT INCLUDE
|
||||
# adjust relative paths as necessary
|
||||
THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")"
|
||||
. "${THIS_SCRIPT%/*}/../../../../../resources/build/builder.inc.sh"
|
||||
. "${THIS_SCRIPT%/*}/../../../../../resources/build/builder-full.inc.sh"
|
||||
## END STANDARD BUILD SCRIPT INCLUDE
|
||||
|
||||
. "$KEYMAN_ROOT/resources/shellHelperFunctions.sh"
|
||||
. "$KEYMAN_ROOT/resources/build/utils.inc.sh"
|
||||
. "$KEYMAN_ROOT/resources/build/node.inc.sh"
|
||||
|
||||
builder_describe "Keyman Developer unit test helpers" \
|
||||
"@/developer/src/common/web/utils" \
|
||||
|
|
@ -20,6 +21,6 @@ builder_parse "$@"
|
|||
#-------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
builder_run_action clean rm -rf ./build/
|
||||
builder_run_action configure verify_npm_setup
|
||||
builder_run_action configure node_select_version_and_npm_ci
|
||||
builder_run_action build tsc --build
|
||||
# builder_run_action test # no tests at this time
|
||||
|
|
|
|||
|
|
@ -2,10 +2,12 @@
|
|||
## START STANDARD BUILD SCRIPT INCLUDE
|
||||
# adjust relative paths as necessary
|
||||
THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")"
|
||||
. "${THIS_SCRIPT%/*}/../../../../../resources/build/builder.inc.sh"
|
||||
. "${THIS_SCRIPT%/*}/../../../../../resources/build/builder-full.inc.sh"
|
||||
## END STANDARD BUILD SCRIPT INCLUDE
|
||||
|
||||
. "$KEYMAN_ROOT/resources/shellHelperFunctions.sh"
|
||||
. "$KEYMAN_ROOT/resources/build/utils.inc.sh"
|
||||
. "$KEYMAN_ROOT/resources/build/node.inc.sh"
|
||||
. "$KEYMAN_ROOT/resources/build/typescript.inc.sh"
|
||||
. "$KEYMAN_ROOT/resources/build/build-utils-ci.inc.sh"
|
||||
|
||||
builder_describe "Build Keyman Developer web utility module" \
|
||||
|
|
@ -47,7 +49,7 @@ function do_build() {
|
|||
}
|
||||
|
||||
builder_run_action clean rm -rf ./build/
|
||||
builder_run_action configure verify_npm_setup
|
||||
builder_run_action configure node_select_version_and_npm_ci
|
||||
builder_run_action build do_build
|
||||
builder_run_action test builder_do_typescript_tests 45
|
||||
builder_run_action test typescript_run_eslint_mocha_tests 45
|
||||
builder_run_action publish builder_publish_npm
|
||||
|
|
|
|||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Reference in a new issue