keymanapp / keyman

Keyman cross platform input methods system running on Android, iOS, Linux, macOS, Windows and mobile and desktop web
https://keyman.com/
Other
399 stars 112 forks source link

spec(core): LDML KeyboardProcessor 🙀 #5015

Closed mcdurdin closed 9 months ago

mcdurdin commented 3 years ago

Introduction

This is a holding issue for the Keyman Core required to support LDML keyboards. We'll be filling this in as we complete planning and design. Much of this content should be moved to separate issues as we expand the details and establish component boundaries.

Objective: build a keystroke processor that works with the existing Keyman Core design that supports LDML keyboards, including:

Intent is to build this in C++. It will need to cross compile to native Windows, macOS, Linux and WASM. The module will need to be standalone and not have runtime dependencies (static link of libraries is probably okay).

Related Features

LDML implementation:

Groundwork:

General Library Properties

C5015.1: Infrastructure

Moved to #5069.

C5015.2: KMX+ Binary Loader

C5015.3: LDML Keyboard Processor Library

C5015.4: Test Framework

C5015.5: Keyboard Delivery

Requirements:

Questions:

srl295 commented 2 years ago

@mcdurdin updated §C5015.3 above w/ pseudocode for keyboard processor. I know we said we don't need a vkey table originally because they will be mapped by the compiler, but for hardware keys (i could be wrong but) otherwise I don't see how hardware remaps would happen. So I'd propose this change:

However, for hardware:

mcdurdin commented 2 years ago

@srl295 I think you are right. For hardware maps, we have a compiled layoutMap which assigns each position on the keyboard to a key from the keys bag. Keyman Core is going to pass a "US" vkey to the LDML KeyboardProcessor. So it's up to the LDML KeyboardProcessor to transform that using vkeyMap.

mcdurdin commented 9 months ago

This is now largely done. Tracking remaining issues separately.