Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 11 additions & 4 deletions core/src/kmx/kmx_file.h
Original file line number Diff line number Diff line change
Expand Up @@ -340,11 +340,18 @@ struct COMP_KEYBOARD {
KMX_DWORD dwBitmapSize; // 003C size in bytes of the bitmaps
};

// TODO-LDML: fill this in
struct COMP_KEYBOARD_EX {
struct COMP_KEYBOARD_KMXPLUSINFO {
KMX_DWORD dpKMXPlus; // 0040 offset of KMXPlus data, <sect> header is first
KMX_DWORD dwKMXPlusSize; // 0048 size in bytes of entire KMXPlus data
};
KMX_DWORD dwKMXPlusSize; // 0044 size in bytes of entire KMXPlus data
};

/**
* Only valid if comp_keyboard.dwFlags&KF_KMXPLUS
*/
struct COMP_KEYBOARD_EX {
COMP_KEYBOARD header; // 0000 see COMP_KEYBOARD
COMP_KEYBOARD_KMXPLUSINFO kmxplus; // 0040 see COMP_KEYBOARD_EXTRA
};

typedef COMP_KEYBOARD *PCOMP_KEYBOARD;
typedef COMP_STORE *PCOMP_STORE;
Expand Down
Binary file added core/tests/unit/ldml/001_tiny.kmx
Binary file not shown.
20 changes: 20 additions & 0 deletions core/tests/unit/ldml/001_tiny.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE keyboard SYSTEM "../../../../resources/standards-data/ldml-keyboards/techpreview/ldmlKeyboard.dtd">
<keyboard locale="mt" conformsTo="techpreview">
<info author="srl295" indicator="🙀" layout="qwerty" normalization="NFC" />

<names>
<name value="TestKbd" />
</names>

<keys>
<key id="hmaqtua" to="ħ" />
<key id="that" to="ថា" />
</keys>

<layerMaps form="hardware">
<layerMap id="base">
<row keys="hmaqtua that" />
</layerMap>
</layerMaps>
</keyboard>
15 changes: 15 additions & 0 deletions resources/standards-data/ldml-keyboards/readme.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
# ldml-keyboards

This data is from https://github.com/unicode-org/cldr.git

Data will eventually be versioned, so there would be a `42`, `43` etc directory.

Currently there is a `techpreview` directory referring to the technical preview—work in progress work in 2022.
That will very roughly correspond to <https://github.com/unicode-org/cldr/tree/keyboard-preview>, or pull requests thereunto.

## Data Format

Each directory contains:

- `ldmlKeyboard.dtd` - the DTD file
- `imports/` - the importable data files (TODO-LDML)
192 changes: 192 additions & 0 deletions resources/standards-data/ldml-keyboards/techpreview/ldmlKeyboard.dtd
Original file line number Diff line number Diff line change
@@ -0,0 +1,192 @@
<!--
Copyright © 1991-2022 Unicode, Inc.
For terms of use, see http://www.unicode.org/copyright.html
SPDX-License-Identifier: Unicode-DFS-2016
CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/)
-->
<!-- Important Note:

The CLDR Keyboard Workgroup is currently developing major changes to the
CLDR keyboard specification.

This DTD is a work in progress.

Please see CLDR-15034 for the latest information. -->

<!ELEMENT keyboard ( import*, locales?, version?, info?, names, settings?, vkeyMaps*, displayMap*, keys, layerMaps*, transforms*, reorders?, backspaces?, special* ) >
<!ATTLIST keyboard locale CDATA #REQUIRED >
<!--@MATCH:validity/bcp47-->
<!ATTLIST keyboard conformsTo (techpreview) #REQUIRED >
<!--@MATCH:any-->
<!--@METADATA-->

<!ELEMENT import EMPTY >
<!ATTLIST import path CDATA #REQUIRED >
<!--@MATCH:any-->
<!--@VALUE-->
<!ATTLIST import base (cldr) #IMPLIED >
<!--@VALUE-->

<!ELEMENT locales ( locale* ) >

<!ELEMENT locale EMPTY >
<!ATTLIST locale id CDATA #REQUIRED >
<!--@MATCH:validity/bcp47-->
<!--@VALUE-->

<!ELEMENT version EMPTY >
<!ATTLIST version number CDATA #IMPLIED >
<!--@VALUE-->
<!ATTLIST version cldrVersion CDATA #FIXED "techpreview" >
<!--@MATCH:version-->
<!--@METADATA-->

<!ELEMENT info EMPTY >
<!ATTLIST info author CDATA #IMPLIED >
<!--@MATCH:any-->
<!--@VALUE-->
<!ATTLIST info normalization CDATA #IMPLIED >
<!--@MATCH:literal/NFC, NFD, other-->
<!--@VALUE-->
<!ATTLIST info layout CDATA #IMPLIED >
<!--@MATCH:any-->
<!--@VALUE-->
<!ATTLIST info indicator CDATA #IMPLIED >
<!--@MATCH:any-->
<!--@VALUE-->

<!ELEMENT names ( import*, name+, special* ) >

<!ELEMENT name EMPTY >
<!ATTLIST name value CDATA #REQUIRED >
<!--@MATCH:any-->
<!--@VALUE-->

<!ELEMENT special ANY >

<!ELEMENT settings EMPTY >
<!--@ORDERED-->
<!ATTLIST settings fallback (omit) #IMPLIED >
<!--@VALUE-->
<!ATTLIST settings transformFailure (omit) #IMPLIED >
<!--@VALUE-->
<!ATTLIST settings transformPartial (hide) #IMPLIED >
<!--@VALUE-->

<!ELEMENT vkeyMaps ( import*, vkeyMap*, special* ) >

<!ELEMENT vkeyMap EMPTY >
<!ATTLIST vkeyMap from CDATA #REQUIRED >
<!--@MATCH:any-->
<!ATTLIST vkeyMap to CDATA #REQUIRED >
<!--@MATCH:any-->
<!--@VALUE-->

<!ELEMENT displayMap ( import*, display*, displayOptions*, special* ) >

<!ELEMENT display EMPTY >
<!ATTLIST display to CDATA #REQUIRED >
<!--@MATCH:any-->
<!ATTLIST display display CDATA #REQUIRED >
<!--@MATCH:any-->
<!--@VALUE-->

<!ELEMENT displayOptions EMPTY >
<!ATTLIST displayOptions baseCharacter CDATA #IMPLIED >
<!--@MATCH:any-->
<!--@VALUE-->

<!ELEMENT keys ( import*, ( key | flicks )*, special* ) >

<!ELEMENT key EMPTY >
<!ATTLIST key id CDATA #REQUIRED >
<!--@MATCH:regex/[A-Za-z0-9][A-Za-z0-9-]*-->
<!ATTLIST key flicks NMTOKEN #IMPLIED >
<!--@MATCH:regex/[A-Za-z0-9][A-Za-z0-9-]*-->
<!ATTLIST key gap (true) #IMPLIED >
<!--@VALUE-->
<!ATTLIST key to CDATA #IMPLIED >
<!--@MATCH:any-->
<!--@VALUE-->
<!ATTLIST key longPress CDATA #IMPLIED >
<!--@MATCH:any-->
<!--@VALUE-->
<!ATTLIST key longPressDefault CDATA #IMPLIED >
<!--@MATCH:any-->
<!--@VALUE-->
<!ATTLIST key multitap CDATA #IMPLIED >
<!--@VALUE-->
<!ATTLIST key switch NMTOKEN #IMPLIED >
<!--@MATCH:regex/[A-Za-z0-9][A-Za-z0-9-]*-->
<!--@VALUE-->
<!ATTLIST key transform (no) #IMPLIED >
<!--@VALUE-->
<!ATTLIST key width CDATA #IMPLIED >
<!--@MATCH:range/0.01~100.0-->
<!--@VALUE-->

<!ELEMENT flicks ( flick+, special* ) >
<!ATTLIST flicks id NMTOKEN #REQUIRED >
<!--@MATCH:regex/[A-Za-z0-9][A-Za-z0-9-]*-->

<!ELEMENT flick EMPTY >
<!ATTLIST flick directions NMTOKENS #REQUIRED >
<!--@MATCH:any-->
<!ATTLIST flick to CDATA #REQUIRED >
<!--@MATCH:any-->
<!--@VALUE-->

<!ELEMENT layerMaps ( import*, layerMap*, special* ) >
<!ATTLIST layerMaps form (hardware | touch) #REQUIRED >
<!ATTLIST layerMaps minDeviceWidthMM CDATA #IMPLIED >
<!--@MATCH:range/1~999-->

<!ELEMENT layerMap ( row+, special* ) >
<!ATTLIST layerMap id NMTOKEN #IMPLIED >
<!--@MATCH:any-->
<!ATTLIST layerMap modifier NMTOKEN #IMPLIED >
<!--@MATCH:any-->

<!ELEMENT row EMPTY >
<!--@ORDERED-->
<!ATTLIST row keys NMTOKENS #REQUIRED >
<!--@MATCH:any-->
<!--@VALUE-->

<!ELEMENT transforms ( import*, transform*, special* ) >
<!ATTLIST transforms type CDATA #REQUIRED >
<!--@MATCH:literal/simple, final-->

<!ELEMENT transform EMPTY >
<!ATTLIST transform before CDATA #IMPLIED >
<!ATTLIST transform from CDATA #REQUIRED >
<!--@MATCH:any-->
<!ATTLIST transform to CDATA #REQUIRED >
<!--@MATCH:any-->
<!--@VALUE-->
<!ATTLIST transform error (fail) #IMPLIED >
<!--@VALUE-->

<!ELEMENT reorders ( import*, reorder*, special* ) >

<!ELEMENT reorder EMPTY >
<!ATTLIST reorder before CDATA #IMPLIED >
<!ATTLIST reorder from CDATA #REQUIRED >
<!ATTLIST reorder order CDATA #IMPLIED >
<!--@VALUE-->
<!ATTLIST reorder tertiary CDATA #IMPLIED >
<!--@VALUE-->
<!ATTLIST reorder tertiary_base CDATA #IMPLIED >
<!--@VALUE-->
<!ATTLIST reorder prebase CDATA #IMPLIED >
<!--@VALUE-->

<!ELEMENT backspaces ( import*, backspace*, special* ) >

<!ELEMENT backspace EMPTY >
<!ATTLIST backspace before CDATA #IMPLIED >
<!ATTLIST backspace from CDATA #REQUIRED >
<!ATTLIST backspace to CDATA #IMPLIED >
<!--@VALUE-->
<!ATTLIST backspace error (fail) #IMPLIED >
<!--@VALUE-->
3 changes: 3 additions & 0 deletions resources/standards-data/ldml-keyboards/techpreview/readme.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# ldml-keyboards/techpreview

See [../readme.md](../readme.md)