diff --git a/core/include/ldml/keyman_core_ldml.h b/core/include/ldml/keyman_core_ldml.h index f521cb356fc..955ac86268c 100644 --- a/core/include/ldml/keyman_core_ldml.h +++ b/core/include/ldml/keyman_core_ldml.h @@ -16,11 +16,11 @@ #pragma once #define LDML_BKSP_FLAGS_ERROR 0x1 -#define LDML_CLDR_IMPLIED_FORMS_IMPORT "46/scanCodes-implied.xml" -#define LDML_CLDR_IMPLIED_KEYS_IMPORT "46/keys-Latn-implied.xml" +#define LDML_CLDR_IMPLIED_FORMS_IMPORT "49/scanCodes-implied.xml" +#define LDML_CLDR_IMPLIED_KEYS_IMPORT "49/keys-Latn-implied.xml" #define LDML_CLDR_IMPORT_BASE "cldr" #define LDML_CLDR_TEST_VERSION_LATEST "techpreview" -#define LDML_CLDR_VERSION_LATEST "46" +#define LDML_CLDR_VERSION_LATEST "49" #define LDML_ELEM_FLAGS_ORDER_BITSHIFT 0x10 #define LDML_ELEM_FLAGS_ORDER_MASK 0xFF0000 #define LDML_ELEM_FLAGS_PREBASE 0x8 diff --git a/core/include/ldml/keyman_core_ldml.ts b/core/include/ldml/keyman_core_ldml.ts index c975c94b71d..7cfd85ddc99 100644 --- a/core/include/ldml/keyman_core_ldml.ts +++ b/core/include/ldml/keyman_core_ldml.ts @@ -59,7 +59,7 @@ class Constants { /** * The current CLDR version */ - readonly cldr_version_latest = '46'; + readonly cldr_version_latest = '49'; /** * The version for testdata files */ @@ -582,8 +582,8 @@ class Constants { } }; -/** There's no data or DTD change in 45, 46, 46.1, 47 so map them all to 46 at present. */ -const cldrTreatAsLatest: Set = new Set(['45', '46.1', '47']); +/** There's no incompatible DTD change in 45+ so map them all to current at present. */ +const cldrTreatAsLatest: Set = new Set(['45', '46.1', '47', '48', '48.1', '48.2', '48.3', '49']); export const constants = new Constants(); diff --git a/core/src/kmx/kmx_xstring.h b/core/src/kmx/kmx_xstring.h index e17c0030912..a97a29e5c4c 100644 --- a/core/src/kmx/kmx_xstring.h +++ b/core/src/kmx/kmx_xstring.h @@ -25,12 +25,12 @@ const km_core_usv Uni_MAX_CODEPOINT = 0x10FFFF; * @brief True if a lead surrogate * \def Uni_IsSurrogate1 */ -#define Uni_IsSurrogate1(ch) ((ch) >= km::core::kmx::Uni_LEAD_SURROGATE_START && (ch) <= km::core::kmx::Uni_LEAD_SURROGATE_END) +#define Uni_IsSurrogate1(ch) ((km_core_usv)(ch) >= (km_core_usv)km::core::kmx::Uni_LEAD_SURROGATE_START && (km_core_usv)(ch) <= (km_core_usv)km::core::kmx::Uni_LEAD_SURROGATE_END) /** * @brief True if a trail surrogate * \def Uni_IsSurrogate2 */ -#define Uni_IsSurrogate2(ch) ((ch) >= km::core::kmx::Uni_TRAIL_SURROGATE_START && (ch) <= km::core::kmx::Uni_TRAIL_SURROGATE_END) +#define Uni_IsSurrogate2(ch) ((km_core_usv)(ch) >= (km_core_usv)km::core::kmx::Uni_TRAIL_SURROGATE_START && (km_core_usv)(ch) <= (km_core_usv)km::core::kmx::Uni_TRAIL_SURROGATE_END) /** * @brief True if any surrogate @@ -42,7 +42,7 @@ const km_core_usv Uni_MAX_CODEPOINT = 0x10FFFF; * @brief Returns true if BMP (Plane 0) * \def Uni_IsBMP */ -#define Uni_IsBMP(ch) ((ch) <= km::core::kmx::Uni_BMP_END) +#define Uni_IsBMP(ch) ((km_core_usv)(ch) <= (km_core_usv)km::core::kmx::Uni_BMP_END) /** * @brief Convert two UTF-16 surrogates into one UTF-32 codepoint @@ -50,7 +50,7 @@ const km_core_usv Uni_MAX_CODEPOINT = 0x10FFFF; * @param cl trail surrogate - Uni_IsSurrogate2(cl) must == true * \def Uni_SurrogateToUTF */ -#define Uni_SurrogateToUTF32(ch, cl) (((ch) - km::core::kmx::Uni_LEAD_SURROGATE_START) * 0x400 + ((cl) - km::core::kmx::Uni_TRAIL_SURROGATE_START) + km::core::kmx::Uni_SMP_START) +#define Uni_SurrogateToUTF32(ch, cl) (((km_core_usv)(ch) - (km_core_usv)km::core::kmx::Uni_LEAD_SURROGATE_START) * 0x400 + ((km_core_usv)(cl) - (km_core_usv)km::core::kmx::Uni_TRAIL_SURROGATE_START) + (km_core_usv)km::core::kmx::Uni_SMP_START) /** * @brief Convert UTF-32 BMP to UTF-16 BMP @@ -189,7 +189,7 @@ u32string_to_u16string(const std::u32string &source) { } inline bool Uni_IsEndOfPlaneNonCharacter(km_core_usv ch) { - return (((ch) & Uni_FFFE_NONCHARACTER) == Uni_FFFE_NONCHARACTER); // matches FFFF or FFFE + return (((ch) & (km_core_usv)Uni_FFFE_NONCHARACTER) == (km_core_usv)Uni_FFFE_NONCHARACTER); // matches FFFF or FFFE } inline bool Uni_IsNoncharacter(km_core_usv ch) { @@ -208,13 +208,13 @@ inline bool Uni_IsValid(km_core_usv start, km_core_usv end) { if (!Uni_IsValid(end) || !Uni_IsValid(start) || (end < start)) { // start or end out of range, or inverted range return false; - } else if ((start <= Uni_SURROGATE_END) && (end >= Uni_SURROGATE_START)) { + } else if ((start <= (km_core_usv)Uni_SURROGATE_END) && (end >= (km_core_usv)Uni_SURROGATE_START)) { // contains some of the surrogate range return false; - } else if ((start <= Uni_FD_NONCHARACTER_END) && (end >= Uni_FD_NONCHARACTER_START)) { + } else if ((start <= (km_core_usv)Uni_FD_NONCHARACTER_END) && (end >= (km_core_usv)Uni_FD_NONCHARACTER_START)) { // contains some of the noncharacter range return false; - } else if ((start & Uni_PLANE_MASK) != (end & Uni_PLANE_MASK)) { + } else if ((start & (km_core_usv)Uni_PLANE_MASK) != (end & (km_core_usv)Uni_PLANE_MASK)) { // start and end are on different planes, meaning that the U+__FFFE/U+__FFFF noncharacters // are contained. // As a reminder, we already checked that start/end are themselves valid, diff --git a/core/subprojects/icu-minimal.wrap b/core/subprojects/icu-minimal.wrap index 3c85940c609..a4854f32801 100644 --- a/core/subprojects/icu-minimal.wrap +++ b/core/subprojects/icu-minimal.wrap @@ -1,8 +1,8 @@ [wrap-file] directory = icu -source_url = https://github.com/unicode-org/icu/releases/download/release-73-1/icu4c-73_1-src.tgz -source_filename = icu4c-73_1-src.tgz -source_hash = a457431de164b4aa7eca00ed134d00dfbf88a77c6986a10ae7774fc076bb8c45 +source_url = https://github.com/unicode-org/icu/releases/download/release-77-1/icu4c-77_1-src.tgz +source_filename = icu4c-77_1-src.tgz +source_hash = 3a2e7a47604ba702f345878308e6fefeca612ee895cf4a5f222e7955fabfe0c0 ## TODO-LDML: Note, need meson 0.55.0 to use patch_directory patch_directory = icu diff --git a/core/subprojects/packagefiles/icu/meson.build b/core/subprojects/packagefiles/icu/meson.build index 4d7798159f0..f54b5984fec 100644 --- a/core/subprojects/packagefiles/icu/meson.build +++ b/core/subprojects/packagefiles/icu/meson.build @@ -2,7 +2,7 @@ project( 'icu', 'c', 'cpp', - version: '73.1', + version: '77.1', meson_version: '>=0.57.0', # TODO-LDML: Too high for debian default_options: [ 'cpp_std=c++17' ], ) diff --git a/developer/src/common/web/utils/src/types/ldml-keyboard/ldml-keyboard-xml.ts b/developer/src/common/web/utils/src/types/ldml-keyboard/ldml-keyboard-xml.ts index 587b02dd719..8995087428b 100644 --- a/developer/src/common/web/utils/src/types/ldml-keyboard/ldml-keyboard-xml.ts +++ b/developer/src/common/web/utils/src/types/ldml-keyboard/ldml-keyboard-xml.ts @@ -17,6 +17,7 @@ export interface LDMLKeyboardXMLSourceFile { export interface LKKeyboard { locale?: string; conformsTo?: string; + draft?: string; locales?: LKLocales; version?: LKVersion; @@ -62,6 +63,8 @@ export interface LKInfo { author?: string; layout?: string; indicator?: string; + attribution?: string; + draft?: string; }; export interface LKSettings { diff --git a/developer/src/kmc-ldml/src/compiler/meta.ts b/developer/src/kmc-ldml/src/compiler/meta.ts index eeb7f4f46c5..293c4be2a5c 100644 --- a/developer/src/kmc-ldml/src/compiler/meta.ts +++ b/developer/src/kmc-ldml/src/compiler/meta.ts @@ -67,6 +67,12 @@ export class MetaCompiler extends SectionCompiler { {compileContext: this.keyboard3.version}); result.settings = (this.keyboard3.settings?.normalization == "disabled" ? KeyboardSettings.normalizationDisabled : 0); + if (this.keyboard3.info?.attribution) { + this.callbacks.debug(`meta: Ignored value attribution=${this.keyboard3.info?.attribution}`); + } + if (this.keyboard3.draft) { + this.callbacks.debug(`meta: Ignored value draft=${this.keyboard3.draft}`); + } return result; } } diff --git a/resources/standards-data/ldml-keyboards/49/3.0/bn.xml b/resources/standards-data/ldml-keyboards/49/3.0/bn.xml new file mode 100644 index 00000000000..800f71d7a9a --- /dev/null +++ b/resources/standards-data/ldml-keyboards/49/3.0/bn.xml @@ -0,0 +1,173 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/resources/standards-data/ldml-keyboards/49/3.0/egy-Egyp-t-k0-qwerty.xml b/resources/standards-data/ldml-keyboards/49/3.0/egy-Egyp-t-k0-qwerty.xml new file mode 100644 index 00000000000..472820734cc --- /dev/null +++ b/resources/standards-data/ldml-keyboards/49/3.0/egy-Egyp-t-k0-qwerty.xml @@ -0,0 +1,6602 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/resources/standards-data/ldml-keyboards/49/3.0/fr-t-k0-test.xml b/resources/standards-data/ldml-keyboards/49/3.0/fr-t-k0-test.xml new file mode 100644 index 00000000000..eb4032db38d --- /dev/null +++ b/resources/standards-data/ldml-keyboards/49/3.0/fr-t-k0-test.xml @@ -0,0 +1,207 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/resources/standards-data/ldml-keyboards/49/3.0/fr.xml b/resources/standards-data/ldml-keyboards/49/3.0/fr.xml new file mode 100644 index 00000000000..8e6c8b15192 --- /dev/null +++ b/resources/standards-data/ldml-keyboards/49/3.0/fr.xml @@ -0,0 +1,263 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/resources/standards-data/ldml-keyboards/49/3.0/ja-Hira-t-k0-flicks.xml b/resources/standards-data/ldml-keyboards/49/3.0/ja-Hira-t-k0-flicks.xml new file mode 100644 index 00000000000..d6bf7c43b3d --- /dev/null +++ b/resources/standards-data/ldml-keyboards/49/3.0/ja-Hira-t-k0-flicks.xml @@ -0,0 +1,187 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/resources/standards-data/ldml-keyboards/49/3.0/ja-Latn.xml b/resources/standards-data/ldml-keyboards/49/3.0/ja-Latn.xml new file mode 100644 index 00000000000..2758d077e85 --- /dev/null +++ b/resources/standards-data/ldml-keyboards/49/3.0/ja-Latn.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/resources/standards-data/ldml-keyboards/49/3.0/mt-t-k0-47key.xml b/resources/standards-data/ldml-keyboards/49/3.0/mt-t-k0-47key.xml new file mode 100644 index 00000000000..21a2aba44ec --- /dev/null +++ b/resources/standards-data/ldml-keyboards/49/3.0/mt-t-k0-47key.xml @@ -0,0 +1,93 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/resources/standards-data/ldml-keyboards/49/3.0/mt.xml b/resources/standards-data/ldml-keyboards/49/3.0/mt.xml new file mode 100644 index 00000000000..696657a4ab0 --- /dev/null +++ b/resources/standards-data/ldml-keyboards/49/3.0/mt.xml @@ -0,0 +1,92 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/resources/standards-data/ldml-keyboards/49/3.0/pcm.xml b/resources/standards-data/ldml-keyboards/49/3.0/pcm.xml new file mode 100644 index 00000000000..cf8002f94dc --- /dev/null +++ b/resources/standards-data/ldml-keyboards/49/3.0/pcm.xml @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/resources/standards-data/ldml-keyboards/49/3.0/pgd-Khar-t-k0-qwerty.xml b/resources/standards-data/ldml-keyboards/49/3.0/pgd-Khar-t-k0-qwerty.xml new file mode 100644 index 00000000000..3f36d82710e --- /dev/null +++ b/resources/standards-data/ldml-keyboards/49/3.0/pgd-Khar-t-k0-qwerty.xml @@ -0,0 +1,284 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/resources/standards-data/ldml-keyboards/49/3.0/pt-t-k0-abnt2.xml b/resources/standards-data/ldml-keyboards/49/3.0/pt-t-k0-abnt2.xml new file mode 100644 index 00000000000..003d1a6af2f --- /dev/null +++ b/resources/standards-data/ldml-keyboards/49/3.0/pt-t-k0-abnt2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/resources/standards-data/ldml-keyboards/49/3.0/sa-Deva-t-k0-qwerty.xml b/resources/standards-data/ldml-keyboards/49/3.0/sa-Deva-t-k0-qwerty.xml new file mode 100644 index 00000000000..f9ad59d2820 --- /dev/null +++ b/resources/standards-data/ldml-keyboards/49/3.0/sa-Deva-t-k0-qwerty.xml @@ -0,0 +1,255 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/resources/standards-data/ldml-keyboards/49/3.0/xct-Tibt-t-k0-qwerty.xml b/resources/standards-data/ldml-keyboards/49/3.0/xct-Tibt-t-k0-qwerty.xml new file mode 100644 index 00000000000..e53757e0526 --- /dev/null +++ b/resources/standards-data/ldml-keyboards/49/3.0/xct-Tibt-t-k0-qwerty.xml @@ -0,0 +1,517 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/resources/standards-data/ldml-keyboards/49/abnf/transform-from-required.abnf b/resources/standards-data/ldml-keyboards/49/abnf/transform-from-required.abnf new file mode 100644 index 00000000000..4a4f3134f23 --- /dev/null +++ b/resources/standards-data/ldml-keyboards/49/abnf/transform-from-required.abnf @@ -0,0 +1,143 @@ +; Copyright (c) 2025 Unicode, Inc. +; For terms of use, see http://www.unicode.org/copyright.html +; SPDX-License-Identifier: Unicode-3.0 +; CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) + +; This is an ABNF grammar for the CLDR Keyboard spec transform match syntax. +; Note that there are sample matching/failing data files in tools/scripts/keyboard-abnf-tests/ + +; An entire string. +; Note that the empty string is not a match. +; Also note that a string may match this ABNF but be invalid according to the spec - which see. + +from-match = start-context atoms / atoms + +; special marker anchoring to the start of context +start-context = "^" + +; sequence of items for input match. note that empty is not allowed, must be at least one atom. +atoms = atom *(disjunction atom / atom) + +; for use with or +disjunction = "|" + +; a 'quark' is the matching part of an atom, and then a quantifier +atom = quark quantifier / quark + +; quark can be a grouping or non grouping +quark = non-group / group + +non-group = simple-matcher / escaped-codepoints / variable + +variable = string-variable / set-variable + +string-variable = "${" var-id "}" + +set-variable = "$[" var-id "]" + +; variable ID +var-id = 1*32IDCHAR + +group = capturing-group / non-capturing-group + +quantifier = bounded-quantifier / optional-quantifier + +escaped-codepoints = backslash "u" "{" codepoints-hex "}" +escaped-codepoint = backslash "u" "{" codepoint-hex "}" + +bounded-quantifier = "{" DIGIT "," DIGIT "}" +optional-quantifier = "?" + +non-capturing-group = "(" "?" ":" atoms ")" + +; a capturing group may not contain other capturing groups. +capturing-group = "(" catoms ")" + +; capturing atoms can't include any groups +catoms = catom *(catom) +; capturing atoms can't include any groups +catom = cquark / cquark quantifier + +; capturing atoms can't include groups +cquark = non-group + +; multiple hex codepoints +codepoints-hex = codepoint-hex *(SP codepoint-hex) + +; one hex codepoint (1-6 digits) +codepoint-hex = 1*6LHEXDIG + +simple-matcher = text-char / class / match-any-codepoint / match-marker + +match-any-codepoint = "." + +match-marker = match-any-marker / match-named-marker +match-any-marker = "\m{.}" +match-named-marker = "\m{" marker-id "}" +; marker id is nmtoken, but may be UAX31 in the future. +marker-id = NMTOKEN + +class = fixed-class / set-class + +fixed-class = backslash fixed-class-char + +fixed-class-char = "s" / "S" / "t" / "r" / "n" / "f" / "v" / "d" / "w" / "D" / "W" + +set-class = "[" set-negator set-members "]" +set-members = set-member *(set-member) +set-member = char-range / range-char / match-marker / escaped-codepoint +char-range = range-edge "-" range-edge +range-edge = escaped-codepoint / range-char +set-negator = "^" / "" + +; Restrictions on characters in various contexts + +; normal text +text-char = content-char / ws / escaped-char / "-" / ":" +; text in a range sequence +range-char = content-char / ws / escaped-range-char / "." / "|" / "{" / "}" +; group for everything BUT syntax chars. +content-char = ASCII-PUNCT / ALPHA / DIGIT / NON-ASCII + +; Character escapes +escaped-char = backslash ( escapable-char ) +escapable-char = "." / "(" / ")" / "?" / "[" / backslash / "]" / "{" / "}" / "*" / "/" / "^" / "+" / "|" / "$" + +escaped-range-char = backslash escapable-range-char +escapable-range-char = escapable-char / "-" + +backslash = %x5C ; U+005C REVERSE SOLIDUS "\" +ws = SP / HTAB / CR / LF / %x3000 + +IDCHAR = ALPHA / DIGIT / "_" +; ASCII-CTRLS = %x01-08 ; omit NULL (%x00), HTAB (%x09) and LF (%x0A) +; / %x0B-0C ; omit CR (%x0D) +; / %x0E-1F ; omit SP (%x20) +ASCII-PUNCT = %x21-23 ; omit DOLLAR + / %x25-27 ; omit () * + + / %x2C ; omit . (%x2E) and - (%x2D) + / %x2F ; skip over digits and : + / %x3B-3E ; omit ? 3f + / %x5F ; omit upper A-Z and [\]^ + / %x60 ; omit a-z {|} + / %x7E-7F ; just for completeness +NON-ASCII = %x7E-D7FF ; omit surrogates + / %xE000-10FFFF ; that's the rest. (TODO: omit other non-characters) + +; from STD-68 +DIGIT = %x30-39 ; 0-9 +ALPHA = %x41-5A / %x61-7A ; A-Z / a-z +SP = %x20 +HTAB = %xF900 ; horizontal tab +LF = %x0A ; linefeed +CR = %x0D ; carriage return +HEXDIG = DIGIT / "A" / "B" / "C" / "D" / "E" / "F" +; like HEXDIG but lowercase also +LHEXDIG = HEXDIG / "a" / "b" / "c" / "d" / "e" / "f" + +; from XML +NAMESTARTCHAR = ":" / ALPHA / "_" / %xC0-D6 / %xD8-F6 / %xF8-2FF / %x370-37D / %x37F-1FFF / %x200C-200D / %x2070-218F / %x2C00-2FEF / %x3001-D7FF / %xF900-FDCF / %xFDF0-FFFD +NAMESTARTCHAR =/ %x10000-10FFFF ; SKIP-NODE-ABNF: TODO: + +NAMECHAR = NAMESTARTCHAR / "-" / "." / DIGIT / %xB7 / %x0300-036F / %x203F-2040 +NMTOKEN = 1*NAMECHAR diff --git a/resources/standards-data/ldml-keyboards/49/abnf/transform-to-required.abnf b/resources/standards-data/ldml-keyboards/49/abnf/transform-to-required.abnf new file mode 100644 index 00000000000..25b16d74dbe --- /dev/null +++ b/resources/standards-data/ldml-keyboards/49/abnf/transform-to-required.abnf @@ -0,0 +1,95 @@ +; Copyright (c) 2025 Unicode, Inc. +; For terms of use, see http://www.unicode.org/copyright.html +; SPDX-License-Identifier: Unicode-3.0 +; CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) + +; This is an ABNF grammar for the CLDR Keyboard spec transform to= (replacement) match syntax. +; Note that there are sample matching/failing data files in tools/scripts/keyboard-abnf-tests/ + +; An entire string. +; An empty string is valid, meaning deletion. +; Also note that a string may match this ABNF but be invalid according to the spec - which see. +to-replacement = atoms + +; a sequence of items for the output production +atoms = *(atom) + +; each atom can be one of several things +atom = replacement-char / escaped-char / group-reference / escaped-codepoints / named-marker / string-variable / mapped-set + +; normal text being output +replacement-char = content-char / ws / "-" / ":" / "(" / ")" / "." / "*" / "+" / "?" / "[" / "]" / "^" / "{" / "}" / "|" + +; Character escapes +escaped-char = backslash ( backslash / "$" ) / "$$" + +; reference to a capture group +group-reference = "$" DIGIT + +; hex codepoint such as \u{01234} +escaped-codepoints = backslash "u" "{" codepoints-hex "}" + +; multiple hex codepoints +codepoints-hex = codepoint-hex *(SP codepoint-hex) + +; one hex codepoint (1-6 digits) +codepoint-hex = 1*6LHEXDIG + +; a specific marker ID. +named-marker = "\m{" marker-id "}" + +; marker id is nmtoken, but may be UAX31 in the future. +marker-id = NMTOKEN + + +; substitution of a string variable +string-variable = "${" var-id "}" + +; variable ID +var-id = 1*32IDCHAR + +; special case for a mapped set variable +mapped-set = "$[1:" var-id "]" + +; group for everything BUT syntax chars. +content-char = ASCII-PUNCT / ALPHA / DIGIT / NON-ASCII + +; \ +backslash = %x5C ; U+005C REVERSE SOLIDUS "\" + +; whitespace +ws = SP / HTAB / CR / LF / %x3000 + +IDCHAR = ALPHA / DIGIT / "_" +; below is same as transform-from for maintenance +; ASCII-CTRLS = %x01-08 ; omit NULL (%x00), HTAB (%x09) and LF (%x0A) +; / %x0B-0C ; omit CR (%x0D) +; / %x0E-1F ; omit SP (%x20) +ASCII-PUNCT = %x21-23 ; omit DOLLAR + / %x25-27 ; omit () * + + / %x2C ; omit . (%x2E) and - (%x2D) + / %x2F ; skip over digits and : + / %x3B-3E ; omit ? 3f + / %x5F ; omit upper A-Z and [\]^ + / %x60 ; omit a-z {|} + / %x7E-7F ; just for completeness +NON-ASCII = %x7E-D7FF ; omit surrogates + / %xE000-10FFFF ; that's the rest. (TODO: omit other non-characters) + +; from STD-68 +DIGIT = %x30-39 ; 0-9 +ALPHA = %x41-5A / %x61-7A ; A-Z / a-z +SP = %x20 +HTAB = %xF900 ; horizontal tab +LF = %x0A ; linefeed +CR = %x0D ; carriage return +HEXDIG = DIGIT / "A" / "B" / "C" / "D" / "E" / "F" +; like HEXDIG but lowercase also +LHEXDIG = HEXDIG / "a" / "b" / "c" / "d" / "e" / "f" + +; from XML +NAMESTARTCHAR = ":" / ALPHA / "_" / %xC0-D6 / %xD8-F6 / %xF8-2FF / %x370-37D / %x37F-1FFF / %x200C-200D / %x2070-218F / %x2C00-2FEF / %x3001-D7FF / %xF900-FDCF / %xFDF0-FFFD +NAMESTARTCHAR =/ %x10000-10FFFF ; SKIP-NODE-ABNF: TODO: + +NAMECHAR = NAMESTARTCHAR / "-" / "." / DIGIT / %xB7 / %x0300-036F / %x203F-2040 +NMTOKEN = 1*NAMECHAR diff --git a/resources/standards-data/ldml-keyboards/49/cldr_info.json b/resources/standards-data/ldml-keyboards/49/cldr_info.json new file mode 100644 index 00000000000..de5861af372 --- /dev/null +++ b/resources/standards-data/ldml-keyboards/49/cldr_info.json @@ -0,0 +1,5 @@ +{ + "sha": "5d2ab383dcd9501400430fd3428c3b4ff0752db8", + "description": "release-49-m2-442-g5d2ab383dc", + "date": "Thu, 13 Aug 2026 00:56:05 +0000" +} diff --git a/resources/standards-data/ldml-keyboards/49/dtd/ldmlKeyboard3.dtd b/resources/standards-data/ldml-keyboards/49/dtd/ldmlKeyboard3.dtd new file mode 100644 index 00000000000..3b855c4f702 --- /dev/null +++ b/resources/standards-data/ldml-keyboards/49/dtd/ldmlKeyboard3.dtd @@ -0,0 +1,220 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/resources/standards-data/ldml-keyboards/49/dtd/ldmlKeyboard3.xsd b/resources/standards-data/ldml-keyboards/49/dtd/ldmlKeyboard3.xsd new file mode 100644 index 00000000000..f28798b32f4 --- /dev/null +++ b/resources/standards-data/ldml-keyboards/49/dtd/ldmlKeyboard3.xsd @@ -0,0 +1,406 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/resources/standards-data/ldml-keyboards/49/dtd/ldmlKeyboardTest3.dtd b/resources/standards-data/ldml-keyboards/49/dtd/ldmlKeyboardTest3.dtd new file mode 100644 index 00000000000..1199ad3dc8d --- /dev/null +++ b/resources/standards-data/ldml-keyboards/49/dtd/ldmlKeyboardTest3.dtd @@ -0,0 +1,92 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/resources/standards-data/ldml-keyboards/49/dtd/ldmlKeyboardTest3.xsd b/resources/standards-data/ldml-keyboards/49/dtd/ldmlKeyboardTest3.xsd new file mode 100644 index 00000000000..865fa366cfd --- /dev/null +++ b/resources/standards-data/ldml-keyboards/49/dtd/ldmlKeyboardTest3.xsd @@ -0,0 +1,160 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/resources/standards-data/ldml-keyboards/49/import/README.md b/resources/standards-data/ldml-keyboards/49/import/README.md new file mode 100644 index 00000000000..462f072f016 --- /dev/null +++ b/resources/standards-data/ldml-keyboards/49/import/README.md @@ -0,0 +1,23 @@ +# Keyboard imports + +The XML files in this directory are importable using the keyboard syntax as follows: + +```xml + +``` + +This is the naming convention being used: + +- _type_`-`_script_`-`_description_`.xml` + +Where _type_ is the top level element such as ``. + +So, + +- `keys-Zyyy-punctuation.xml` is of [script](https://www.unicode.org/iso15924/iso15924-codes.html) `Zyyy`, aka "Common". + +See [tr35-keyboard.md](../../docs/ldml/tr35-keyboards.md#Element_import) + +## Copyright and License + +See the top level [README.md](../../README.md#copyright--licenses) diff --git a/resources/standards-data/ldml-keyboards/49/import/keys-Latn-implied.xml b/resources/standards-data/ldml-keyboards/49/import/keys-Latn-implied.xml new file mode 100644 index 00000000000..fe0801f8ba9 --- /dev/null +++ b/resources/standards-data/ldml-keyboards/49/import/keys-Latn-implied.xml @@ -0,0 +1,80 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/resources/standards-data/ldml-keyboards/49/import/keys-Zyyy-currency.xml b/resources/standards-data/ldml-keyboards/49/import/keys-Zyyy-currency.xml new file mode 100644 index 00000000000..e3981b7a542 --- /dev/null +++ b/resources/standards-data/ldml-keyboards/49/import/keys-Zyyy-currency.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + diff --git a/resources/standards-data/ldml-keyboards/49/import/keys-Zyyy-punctuation.xml b/resources/standards-data/ldml-keyboards/49/import/keys-Zyyy-punctuation.xml new file mode 100644 index 00000000000..b55b15c15ee --- /dev/null +++ b/resources/standards-data/ldml-keyboards/49/import/keys-Zyyy-punctuation.xml @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/resources/standards-data/ldml-keyboards/49/import/scanCodes-implied.xml b/resources/standards-data/ldml-keyboards/49/import/scanCodes-implied.xml new file mode 100644 index 00000000000..e1ba3309d64 --- /dev/null +++ b/resources/standards-data/ldml-keyboards/49/import/scanCodes-implied.xml @@ -0,0 +1,53 @@ + + + + +
+ + + + + + +
+ + + + + + +
+ + + + + + +
+ + + + + + +
+ + + + + + + + +
diff --git a/resources/standards-data/ldml-keyboards/49/ldml-keyboard3.schema.json b/resources/standards-data/ldml-keyboards/49/ldml-keyboard3.schema.json new file mode 100644 index 00000000000..4d139fa0c91 --- /dev/null +++ b/resources/standards-data/ldml-keyboards/49/ldml-keyboard3.schema.json @@ -0,0 +1,709 @@ +{ + "$schema": "http://json-schema.org/schema#", + "additionalProperties": false, + "definitions": { + "any": { + "type": "string" + }, + "display": { + "additionalProperties": false, + "properties": { + "display": { + "type": "string" + }, + "keyId": { + "type": "string" + }, + "output": { + "type": "string" + } + }, + "required": [ + "display" + ], + "type": "object" + }, + "displayOptions": { + "additionalProperties": false, + "properties": { + "baseCharacter": { + "type": "string" + } + }, + "type": "object" + }, + "displays": { + "additionalProperties": false, + "properties": { + "display": { + "items": { + "$ref": "#/definitions/display" + }, + "type": "array" + }, + "displayOptions": { + "$ref": "#/definitions/displayOptions" + }, + "import": { + "items": { + "$ref": "#/definitions/import" + }, + "type": "array" + }, + "special": { + "items": { + "$ref": "#/definitions/special" + }, + "type": "array" + } + }, + "type": "object" + }, + "flick": { + "additionalProperties": false, + "properties": { + "flickSegment": { + "items": { + "$ref": "#/definitions/flickSegment" + }, + "minItems": 1, + "type": "array" + }, + "id": { + "type": "string" + }, + "special": { + "items": { + "$ref": "#/definitions/special" + }, + "type": "array" + } + }, + "required": [ + "flickSegment", + "id" + ], + "type": "object" + }, + "flickSegment": { + "additionalProperties": false, + "properties": { + "directions": { + "type": "string" + }, + "keyId": { + "type": "string" + } + }, + "required": [ + "directions", + "keyId" + ], + "type": "object" + }, + "flicks": { + "additionalProperties": false, + "properties": { + "flick": { + "items": { + "$ref": "#/definitions/flick" + }, + "type": "array" + }, + "import": { + "items": { + "$ref": "#/definitions/import" + }, + "type": "array" + }, + "special": { + "items": { + "$ref": "#/definitions/special" + }, + "type": "array" + } + }, + "type": "object" + }, + "form": { + "additionalProperties": false, + "properties": { + "id": { + "type": "string" + }, + "scanCodes": { + "items": { + "$ref": "#/definitions/scanCodes" + }, + "minItems": 1, + "type": "array" + }, + "special": { + "items": { + "$ref": "#/definitions/special" + }, + "type": "array" + } + }, + "required": [ + "scanCodes" + ], + "type": "object" + }, + "forms": { + "additionalProperties": false, + "properties": { + "form": { + "items": { + "$ref": "#/definitions/form" + }, + "type": "array" + }, + "import": { + "items": { + "$ref": "#/definitions/import" + }, + "type": "array" + }, + "special": { + "items": { + "$ref": "#/definitions/special" + }, + "type": "array" + } + }, + "type": "object" + }, + "import": { + "additionalProperties": false, + "properties": { + "base": { + "type": "string" + }, + "path": { + "type": "string" + } + }, + "required": [ + "path" + ], + "type": "object" + }, + "info": { + "additionalProperties": false, + "properties": { + "attribution": { + "type": "string" + }, + "author": { + "type": "string" + }, + "indicator": { + "type": "string" + }, + "layout": { + "type": "string" + }, + "name": { + "type": "string" + } + }, + "required": [ + "name" + ], + "type": "object" + }, + "key": { + "additionalProperties": false, + "properties": { + "flickId": { + "type": "string" + }, + "gap": { + "enum": [ + "true" + ], + "type": "string" + }, + "id": { + "type": "string" + }, + "layerId": { + "type": "string" + }, + "longPressDefaultKeyId": { + "type": "string" + }, + "longPressKeyIds": { + "type": "string" + }, + "multiTapKeyIds": { + "type": "string" + }, + "output": { + "type": "string" + }, + "stretch": { + "enum": [ + "true" + ], + "type": "string" + }, + "width": { + "type": "string" + } + }, + "required": [ + "id" + ], + "type": "object" + }, + "keys": { + "additionalProperties": false, + "properties": { + "import": { + "items": { + "$ref": "#/definitions/import" + }, + "type": "array" + }, + "key": { + "items": { + "$ref": "#/definitions/key" + }, + "type": "array" + }, + "special": { + "items": { + "$ref": "#/definitions/special" + }, + "type": "array" + } + }, + "type": "object" + }, + "layer": { + "additionalProperties": false, + "properties": { + "id": { + "type": "string" + }, + "modifiers": { + "type": "string" + }, + "row": { + "items": { + "$ref": "#/definitions/row" + }, + "minItems": 1, + "type": "array" + }, + "special": { + "items": { + "$ref": "#/definitions/special" + }, + "type": "array" + } + }, + "required": [ + "row" + ], + "type": "object" + }, + "layers": { + "additionalProperties": false, + "properties": { + "formId": { + "type": "string" + }, + "import": { + "items": { + "$ref": "#/definitions/import" + }, + "type": "array" + }, + "layer": { + "items": { + "$ref": "#/definitions/layer" + }, + "type": "array" + }, + "minDeviceWidth": { + "type": "string" + }, + "special": { + "items": { + "$ref": "#/definitions/special" + }, + "type": "array" + } + }, + "required": [ + "formId" + ], + "type": "object" + }, + "locale": { + "additionalProperties": false, + "properties": { + "id": { + "type": "string" + } + }, + "required": [ + "id" + ], + "type": "object" + }, + "locales": { + "additionalProperties": false, + "properties": { + "locale": { + "items": { + "$ref": "#/definitions/locale" + }, + "type": "array" + } + }, + "type": "object" + }, + "reorder": { + "additionalProperties": false, + "properties": { + "before": { + "type": "string" + }, + "from": { + "type": "string" + }, + "order": { + "type": "string" + }, + "preBase": { + "type": "string" + }, + "tertiary": { + "type": "string" + }, + "tertiaryBase": { + "type": "string" + } + }, + "required": [ + "from" + ], + "type": "object" + }, + "row": { + "additionalProperties": false, + "properties": { + "keys": { + "type": "string" + } + }, + "required": [ + "keys" + ], + "type": "object" + }, + "scanCodes": { + "additionalProperties": false, + "properties": { + "codes": { + "type": "string" + } + }, + "required": [ + "codes" + ], + "type": "object" + }, + "set": { + "additionalProperties": false, + "properties": { + "id": { + "type": "string" + }, + "value": { + "type": "string" + } + }, + "required": [ + "id", + "value" + ], + "type": "object" + }, + "settings": { + "additionalProperties": false, + "properties": { + "normalization": { + "enum": [ + "disabled" + ], + "type": "string" + } + }, + "type": "object" + }, + "special": { + "$ref": "#/definitions/any" + }, + "stringVariable": { + "additionalProperties": false, + "properties": { + "id": { + "type": "string" + }, + "value": { + "type": "string" + } + }, + "required": [ + "id", + "value" + ], + "type": "object" + }, + "transform": { + "additionalProperties": false, + "properties": { + "from": { + "type": "string" + }, + "to": { + "type": "string" + } + }, + "required": [ + "from" + ], + "type": "object" + }, + "transformGroup": { + "additionalProperties": false, + "properties": { + "import": { + "items": { + "$ref": "#/definitions/import" + }, + "type": "array" + }, + "reorder": { + "items": { + "$ref": "#/definitions/reorder" + }, + "type": "array" + }, + "special": { + "items": { + "$ref": "#/definitions/special" + }, + "type": "array" + }, + "transform": { + "items": { + "$ref": "#/definitions/transform" + }, + "type": "array" + } + }, + "type": "object" + }, + "transforms": { + "additionalProperties": false, + "properties": { + "import": { + "items": { + "$ref": "#/definitions/import" + }, + "type": "array" + }, + "special": { + "items": { + "$ref": "#/definitions/special" + }, + "type": "array" + }, + "transformGroup": { + "items": { + "$ref": "#/definitions/transformGroup" + }, + "type": "array" + }, + "type": { + "enum": [ + "simple", + "backspace" + ], + "type": "string" + } + }, + "required": [ + "type" + ], + "type": "object" + }, + "uset": { + "additionalProperties": false, + "properties": { + "id": { + "type": "string" + }, + "value": { + "type": "string" + } + }, + "required": [ + "id", + "value" + ], + "type": "object" + }, + "variables": { + "additionalProperties": false, + "properties": { + "import": { + "items": { + "$ref": "#/definitions/import" + }, + "type": "array" + }, + "set": { + "items": { + "$ref": "#/definitions/set" + }, + "type": "array" + }, + "special": { + "items": { + "$ref": "#/definitions/special" + }, + "type": "array" + }, + "string": { + "items": { + "$ref": "#/definitions/stringVariable" + }, + "type": "array" + }, + "uset": { + "items": { + "$ref": "#/definitions/uset" + }, + "type": "array" + } + }, + "type": "object" + }, + "version": { + "additionalProperties": false, + "properties": { + "cldrVersion": { + "enum": [ + "49" + ], + "type": "string" + }, + "number": { + "type": "string" + } + }, + "type": "object" + } + }, + "properties": { + "keyboard3": { + "additionalProperties": false, + "properties": { + "conformsTo": { + "enum": [ + "45", + "46", + "47", + "48", + "49" + ], + "type": "string" + }, + "displays": { + "$ref": "#/definitions/displays" + }, + "draft": { + "enum": [ + "approved", + "contributed", + "provisional", + "unconfirmed" + ], + "type": "string" + }, + "flicks": { + "$ref": "#/definitions/flicks" + }, + "forms": { + "$ref": "#/definitions/forms" + }, + "import": { + "items": { + "$ref": "#/definitions/import" + }, + "type": "array" + }, + "info": { + "$ref": "#/definitions/info" + }, + "keys": { + "$ref": "#/definitions/keys" + }, + "layers": { + "items": { + "$ref": "#/definitions/layers" + }, + "type": "array" + }, + "locale": { + "type": "string" + }, + "locales": { + "$ref": "#/definitions/locales" + }, + "settings": { + "$ref": "#/definitions/settings" + }, + "special": { + "items": { + "$ref": "#/definitions/special" + }, + "type": "array" + }, + "transforms": { + "items": { + "$ref": "#/definitions/transforms" + }, + "type": "array" + }, + "variables": { + "$ref": "#/definitions/variables" + }, + "version": { + "$ref": "#/definitions/version" + }, + "xmlns": { + "type": "string" + } + }, + "required": [ + "info", + "locale", + "conformsTo" + ], + "type": "object" + } + }, + "required": [ + "keyboard3" + ], + "title": "49/dtd/ldmlKeyboard3.xsd", + "type": "object" +} diff --git a/resources/standards-data/ldml-keyboards/49/ldml-keyboardtest3.schema.json b/resources/standards-data/ldml-keyboards/49/ldml-keyboardtest3.schema.json new file mode 100644 index 00000000000..6e46859f63e --- /dev/null +++ b/resources/standards-data/ldml-keyboards/49/ldml-keyboardtest3.schema.json @@ -0,0 +1,225 @@ +{ + "$schema": "http://json-schema.org/schema#", + "additionalProperties": false, + "definitions": { + "any": { + "type": "string" + }, + "backspace": { + "type": "string" + }, + "check": { + "additionalProperties": false, + "properties": { + "result": { + "type": "string" + } + }, + "required": [ + "result" + ], + "type": "object" + }, + "emit": { + "additionalProperties": false, + "properties": { + "to": { + "type": "string" + } + }, + "required": [ + "to" + ], + "type": "object" + }, + "info": { + "additionalProperties": false, + "properties": { + "author": { + "type": "string" + }, + "keyboard": { + "type": "string" + }, + "name": { + "type": "string" + } + }, + "required": [ + "keyboard", + "name" + ], + "type": "object" + }, + "keystroke": { + "additionalProperties": false, + "properties": { + "flick": { + "type": "string" + }, + "key": { + "type": "string" + }, + "longPress": { + "type": "string" + }, + "tapCount": { + "type": "string" + } + }, + "required": [ + "key" + ], + "type": "object" + }, + "repertoire": { + "additionalProperties": false, + "properties": { + "chars": { + "type": "string" + }, + "name": { + "type": "string" + }, + "type": { + "enum": [ + "default", + "simple", + "gesture", + "flick", + "longPress", + "multiTap", + "hardware" + ], + "type": "string" + } + }, + "required": [ + "chars", + "name" + ], + "type": "object" + }, + "special": { + "$ref": "#/definitions/any" + }, + "startContext": { + "additionalProperties": false, + "properties": { + "to": { + "type": "string" + } + }, + "required": [ + "to" + ], + "type": "object" + }, + "test": { + "additionalProperties": false, + "properties": { + "backspace": { + "$ref": "#/definitions/backspace" + }, + "check": { + "$ref": "#/definitions/check" + }, + "emit": { + "$ref": "#/definitions/emit" + }, + "keystroke": { + "$ref": "#/definitions/keystroke" + }, + "name": { + "type": "string" + }, + "special": { + "items": { + "$ref": "#/definitions/special" + }, + "type": "array" + }, + "startContext": { + "$ref": "#/definitions/startContext" + } + }, + "required": [ + "name" + ], + "type": "object" + }, + "tests": { + "additionalProperties": false, + "properties": { + "name": { + "type": "string" + }, + "special": { + "items": { + "$ref": "#/definitions/special" + }, + "type": "array" + }, + "test": { + "items": { + "$ref": "#/definitions/test" + }, + "minItems": 1, + "type": "array" + } + }, + "required": [ + "test", + "name" + ], + "type": "object" + } + }, + "properties": { + "keyboardTest3": { + "additionalProperties": false, + "properties": { + "conformsTo": { + "enum": [ + "techpreview" + ], + "type": "string" + }, + "info": { + "$ref": "#/definitions/info" + }, + "repertoire": { + "items": { + "$ref": "#/definitions/repertoire" + }, + "type": "array" + }, + "special": { + "items": { + "$ref": "#/definitions/special" + }, + "type": "array" + }, + "tests": { + "items": { + "$ref": "#/definitions/tests" + }, + "type": "array" + }, + "xmlns": { + "type": "string" + } + }, + "required": [ + "info", + "conformsTo" + ], + "type": "object" + } + }, + "required": [ + "keyboardTest3" + ], + "title": "49/dtd/ldmlKeyboardTest3.xsd", + "type": "object" +} diff --git a/resources/standards-data/ldml-keyboards/49/test/README.md b/resources/standards-data/ldml-keyboards/49/test/README.md new file mode 100644 index 00000000000..7e56c85fd2e --- /dev/null +++ b/resources/standards-data/ldml-keyboards/49/test/README.md @@ -0,0 +1,397 @@ +# Technical Preview: CLDR Keyboard Test Data + +## Contents of CLDR Keyboard Test Data + +* [Keyboard Test Data](#keyboard-test-data) + * [Test Doctype](#test-doctype) + * [Test Element: keyboardTest](#test-element-keyboardtest) + * [Test Element: info](#test-element-info) + * [Test Element: repertoire](#test-element-repertoire) + * [Test Element: tests](#test-element-tests) + * [Test Element: test](#test-element-test) + * [Test Element: startContext](#test-element-startcontext) + * [Test Element: keystroke](#test-element-keystroke) + * [Test Element: emit](#test-element-emit) + * [Test Element: backspace](#test-element-backspace) + * [Test Element: check](#test-element-check) + * [Test Examples](#test-examples) +* [Copyright and License](#copyright-and-license) + +## Keyboard Test Data + +> **NOTE**: The Keyboard Test Data format is a technical preview, it is subject to revision in future versions of CLDR. + +Keyboard Test Data allows the keyboard author to provide regression test data to validate the repertoire and behavior of a keyboard. Tooling can run these regression tests against an implementation, and can also be used as part of the development cycle to validate that keyboard changes do not deviate from expected behavior. In the interest of complete coverage, tooling could also indicate whether all keys and gestures in a layout are exercised by the test data. + +Test data files have a separate DTD, named `ldmlKeyboardTest3.dtd`. Note that multiple test data files can refer to the same keyboard. Test files should be named similarly to the keyboards which they test, such as `fr_test.xml` to test `fr.xml`. + +Sample test data files are located in the `keyboards/test` subdirectory. + +The following describes the structure of a keyboard test file. + +### Test Doctype + +> **NOTE**: The Keyboard Test Data format is a technical preview, it is subject to revision in future versions of CLDR. + +```xml + + +``` + +The top level element is named `keyboardTest`. + +### Test Element: keyboardTest + +> **NOTE**: The Keyboard Test Data format is a technical preview, it is subject to revision in future versions of CLDR. + +> +> +> Children: [info](#test-element-info), [repertoire](#test-element-repertoire), [_special_](tr35.md#special), [tests](#test-element-tests) +> + +This is the top level element. + +_Attribute:_ `conformsTo` (required) + +The `conformsTo` attribute value here is a fixed value of `techpreview`, because the test data is a Technical Preview. + +```xml + + + + … + +``` + +### Test Element: info + +> **NOTE**: The Keyboard Test Data format is a technical preview, it is subject to revision in future versions of CLDR. + +> +> +> Parents: [keyboardTest](#test-element-keyboardtest) +>> +> Occurrence: Required, Single +> + +_Attribute:_ `author` + +This freeform attribute value allows for description of the author or authors of this test file. + +_Attribute:_ `keyboard` (required) + +This attribute value specifies the keyboard’s file name, such as `fr-t-k0-azerty.xml`. + +_Attribute:_ `name` (required) + +This attribute value specifies a name for this overall test file. These names could be output to the user during test execution, used to summarize success and failure, or used to select or deselect test components. + +**Example** + +```xml + +``` + +### Test Element: repertoire + +> **NOTE**: The Keyboard Test Data format is a technical preview, it is subject to revision in future versions of CLDR. + +> +> +> Parents: [keyboardTest](#test-element-keyboardtest) +> +> Children: _none_ +> +> Occurrence: Optional, Multiple +> + +This element contains a repertoire test, to validate the available characters and their reachability. This test ensures that each of the specified characters is somehow typeable on the keyboard, after transforms have been applied. The characters in the repertoire will be matched against the complete set of possible generated outputs, post-transform, of all keys on the keyboard. + +_Attribute:_ `name` (required) + +This attribute value specifies a unique name for this repertoire test. These names could be output to the user during test execution, used to summarize success and failure, or used to select or deselect test components. + +_Attribute:_ `type` + +This attribute value is one of the following: + +| type | Meaning | +|-----------|----------------------------------------------------------------------------------------------------------| +| default | This is the default, indicates that _any_ gesture or keystroke may be used to generate each character | +| simple | Each of the characters must be typeable by simple single keystrokes without needing any gestures. | +| gesture | The characters are typeable by use of any gestures such as flicks, long presses, or multiple taps. | +| flick | The characters are typeable by use of any `flick` element. | +| longPress | The characters are typeable by use of any `longPress` value. | +| multiTap | The characters are typeable by use of any `multiTap` value. | +| hardware | The characters are typeable by use of any simple keystrokes on any hardware layout. | + +_Attribute:_ `chars` (required) + +This attribute value specifies a list of characters in UnicodeSet format, which is specified in [UTS #35 Part One](tr35.md#Unicode_Sets). + +**Note** The use of UnicodeSet format here means that Unicode character escapes differ from how they are represented in other attributes in the file; `chars` uses `\u####` format (4 digits required), instead of `\u{####}`. + +**Example** + +```xml + + + + + + + + +``` + +Note: CLDR’s extensive [exemplar set](tr35-general.md#Character_Elements) data may be useful in validating a language’s repertoire against a keyboard. Tooling may wish to make use of this data in order to suggest recommended repertoire values for a language. + +### Test Element: tests + +> **NOTE**: The Keyboard Test Data format is a technical preview, it is subject to revision in future versions of CLDR. + + +> +> +> Parents: [keyboardTest](#test-element-keyboardtest) +> +> Children: [_special_](tr35.md#special), [test](#test-element-test) +> +> Occurrence: Optional, Multiple +> + +This element specifies a particular suite of `` elements. + +_Attribute:_ `name` (required) + +This attribute value specifies a unique name for this suite of tests. These names could be output to the user during test execution, used to summarize success and failure, or used to select or deselect test components. + +**Example** + +```xml + + + … + + + … + + + + + … + + +``` + +### Test Element: test + +> **NOTE**: The Keyboard Test Data format is a technical preview, it is subject to revision in future versions of CLDR. + + +> +> +> Parents: [tests](#test-element-tests) +> +> Children: [startContext](#test-element-startcontext), [emit](#test-element-emit), [keystroke](#test-element-keystroke), [backspace](#test-element-backspace), [check](#test-element-check), [_special_](tr35.md#special) +> +> Occurrence: Required, Multiple +> + +This attribute value specifies a specific isolated regression test. Multiple test elements do not interact with each other. + +The order of child elements is significant, with cumulative effects: they must be processed from first to last. + +_Attribute:_ `name` (required) + +This attribute value specifies a unique name for this particular test. These names could be output to the user during test execution, used to summarize success and failure, or used to select or deselect test components. + +**Example** + +```xml + +``` + +### Test Element: startContext + +> **NOTE**: The Keyboard Test Data format is a technical preview, it is subject to revision in future versions of CLDR. + +This element specifies pre-existing text in a document, as if prior to the user’s insertion point. This is useful for testing transforms and reordering. If not specified, the startContext can be considered to be the empty string (""). + +> +> +> Parents: [test](#test-element-test) +> +> Children: _none_ +> +> Occurrence: Optional, Single +> + +_Attribute:_ `to` (required) + +Specifies the starting context. This text may be escaped with `\u` notation, see [Escaping](#escaping). + +**Example** + +```xml + +``` + + +### Test Element: keystroke + +> **NOTE**: The Keyboard Test Data format is a technical preview, it is subject to revision in future versions of CLDR. + + +> +> +> Parents: [test](#test-element-test) +> +> Children: _none_ +> +> Occurrence: Optional, Multiple +> + +This element contains a single keystroke or other gesture event, identified by a particular key element. + +Optionally, one of the gesture attributes, either `flick`, `longPress`, or `tapCount` may be specified. If none of the gesture attribute values are specified, then a regular keypress is effected on the key. It is an error to specify more than one gesture attribute. + +If a key is not found, or a particular gesture has no definition, the output should be behave as if the user attempted to perform such an action. For example, an unspecified `flick` would result in no output. + +When a key is found, processing continues with the transform and other elements before updating the test output buffer. + +_Attribute:_ `key` (required) + +This attribute value specifies a key by means of the key’s `id` attribute. + +_Attribute:_ `flick` + +This attribute value specifies a flick gesture to be performed on the specified key instead of a keypress, such as `e` or `nw se`. This value corresponds to the `directions` attribute value of the [``](#element-flicksegment) element. + +_Attribute:_ `longPress` + +This attribute value specifies that a long press gesture should be performed on the specified key instead of a keypress. For example, `longPress="2"` indicates that the second character in a longpress series should be chosen. `longPress="0"` indicates that the `longPressDefault` value, if any, should be chosen. This corresponds to `longPress` and `longPressDefault` on [``](#element-key). + +_Attribute:_ `tapCount` + +This attribute value specifies that a multi-tap gesture should be performed on the specified key instead of a keypress. For example, `tapCount="3"` indicates that the key should be tapped three times in rapid succession. This corresponds to `multiTap` on [``](#element-key). The minimum tapCount is 2. + +**Example** + +```xml + + + + + +``` + +### Test Element: emit + +> **NOTE**: The Keyboard Test Data format is a technical preview, it is subject to revision in future versions of CLDR. + + +> +> +> Parents: [test](#test-element-test) +> +> Children: _none_ +> +> Occurrence: Optional, Multiple +> + +This element also contains an input event, except that the input is specified in terms of textual value rather than key or gesture identity. This element is particularly useful for testing transforms. + +Processing of the specified text continues with the transform and other elements before updating the test output buffer. + +_Attribute:_ `to` (required) + +This attribute value specifies a string of output text representing a single keystroke or gesture. This string is intended to match the output of a `key`, `flick`, `longPress` or `multiTap` element or attribute. +Tooling should give a hint if this attribute value does not match at least one keystroke or gesture. Note that the specified text is not injected directly into the output buffer. + +This attribute value may be escaped with `\u` notation, see [Escaping](#escaping). + +**Example** + +```xml + +``` + + +### Test Element: backspace + +> **NOTE**: The Keyboard Test Data format is a technical preview, it is subject to revision in future versions of CLDR. + + +> +> +> Parents: [test](#test-element-test) +> +> Children: _none_ +> +> Occurrence: Optional, Multiple +> + +This element contains a backspace action, as if the user typed the backspace key + +**Example** + +```xml + +``` + +### Test Element: check + +> **NOTE**: The Keyboard Test Data format is a technical preview, it is subject to revision in future versions of CLDR. + + +> +> +> Parents: [test](#test-element-test) +> +> Children: _none_ +> +> Occurrence: Optional, Multiple +> + +This element contains a check on the current output buffer. + +_Attribute:_ `result` (required) + +This attribute value specifies the expected resultant text in a document after processing this event and all prior events, and including any `startContext` text. This text may be escaped with `\u` notation, see [Escaping](#escaping). + +**Example** + +```xml + +``` + + +### Test Examples + +```xml + + + + + + + + + + + + + + + + + + + +``` + +## Copyright and License + +See the top level [README.md](../../README.md#copyright--licenses) diff --git a/resources/standards-data/ldml-keyboards/49/test/bn-test.xml b/resources/standards-data/ldml-keyboards/49/test/bn-test.xml new file mode 100644 index 00000000000..ce19f9bda6c --- /dev/null +++ b/resources/standards-data/ldml-keyboards/49/test/bn-test.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/resources/standards-data/ldml-keyboards/49/test/fr-t-k0-test-test.xml b/resources/standards-data/ldml-keyboards/49/test/fr-t-k0-test-test.xml new file mode 100644 index 00000000000..e108283a7db --- /dev/null +++ b/resources/standards-data/ldml-keyboards/49/test/fr-t-k0-test-test.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/resources/standards-data/ldml-keyboards/49/test/ja-Latn-test.xml b/resources/standards-data/ldml-keyboards/49/test/ja-Latn-test.xml new file mode 100644 index 00000000000..6dae5ebd0ac --- /dev/null +++ b/resources/standards-data/ldml-keyboards/49/test/ja-Latn-test.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/resources/standards-data/ldml-keyboards/49/test/pcm-test.xml b/resources/standards-data/ldml-keyboards/49/test/pcm-test.xml new file mode 100644 index 00000000000..8f85126acc8 --- /dev/null +++ b/resources/standards-data/ldml-keyboards/49/test/pcm-test.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/resources/standards-data/ldml-keyboards/49/test/pt-t-k0-abnt2-test.xml b/resources/standards-data/ldml-keyboards/49/test/pt-t-k0-abnt2-test.xml new file mode 100644 index 00000000000..bbd9f02e075 --- /dev/null +++ b/resources/standards-data/ldml-keyboards/49/test/pt-t-k0-abnt2-test.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +