Keyboard Support

Contact and Search

Keyman.com Homepage

Header bottom

Keyman.com

Other versions
Version 16.0Version 15.0Version 14.0Version 11.0

On this page

State - Keyman Core API


A State object maintains all per keyboard related state including context and dynamic options ("option stores" in kmn format).

km_kbp_action_item struct {#km_kbp_action_item}

Description

These provide the results of processing a key event to the Platform layer and should be processed by the Platform layer to issue commands to the OS text services framework to transform the text store in the Client Application, among other actions.

Specification

    typedef struct {
      uint8_t   type;
      uint8_t   _reserved[sizeof(void*)-sizeof(uint8_t)];
      union {
        uintptr_t             marker;
        km_kbp_option_item    const * option;
        km_kbp_usv            character;
        uint8_t               capsLock;
        km_kbp_backspace_item backspace;
      };
    } km_kbp_action_item;

Members

type :Must be any value from km_kbp_action_type, except KM_KBP_IT_MAX_TYPE_ID.

_reserved :Space reserved for alignment purposes and possible future use. Note this will be different depending on native machine register width.

marker :A marker value, only meaningful to an engine.

option

character :A Unicode Scalar Value.

capsLock :CAPSLOCK type, 1 to turn on, 0 to turn off.

backspace :Backspace type, Unknown, Character, Marker

A pointer to km_kbp_option_item tuple. It will be valid until the next call to km_kbp_process_event()

km_kbp_action_type enum {#km_kbp_action_type}

Description

Enumerate the various action types which indicate which type the value in the km_kbp_action_item struct is.

Specification

    enum km_kbp_action_type {
      KM_KBP_IT_END         = 0,
      KM_KBP_IT_CHAR        = 1,
      KM_KBP_IT_MARKER      = 2,
      KM_KBP_IT_ALERT       = 3,
      KM_KBP_IT_BACK        = 4,
      KM_KBP_IT_PERSIST_OPT = 5,
      KM_KBP_IT_EMIT_KEYSTROKE = 6,
      KM_KBP_IT_INVALIDATE_CONTEXT = 7,
      KM_KBP_IT_MAX_TYPE_ID
    };

Values {#km_kbp_it_type_values}

KM_KBP_IT_END :Marks end of action items list.

KM_KBP_IT_CHAR :A Unicode character has been generated.

KM_KBP_IT_MARKER :Correlates to kmn's "deadkey" markers.

KM_KBP_IT_ALERT :The keyboard has triggered a alert/beep/bell.

KM_KBP_IT_BACK :Delete the codepoint preceding the insertion point.

KM_KBP_IT_PERSIST_OPT :The indicated option needs to be stored.

KM_KBP_IT_EMIT_KEYSTROKE :Emit the current keystroke to the application.

KM_KBP_IT_INVALIDATE_CONTEXT :The processor requests that the context buffer be cleared; for applications where context is cached, this clears the context; for applications where context is read from the focused text store, the context is just re-read and markers flushed.

km_kbp_state_create() {#km_kbp_state_create}

Description

Create a keyboard processor state object, maintaining state for the keyboard in the environment passed.

Specification

    km_kbp_status
    km_kbp_state_create(km_kbp_keyboard *keyboard,
                        km_kbp_option_item const *env,
                        km_kbp_state **out);

Parameters

keyboard :A pointer to the opaque keyboard object this object will hold state for.

env :The array of km_kbp_option_item key/value pairs used to initialise the environment, terminated by KM_KBP_OPTIONS_END.

out :A pointer to result variable: A pointer to the opaque state object returned by the Processor, initalised to maintain state for keyboard.
This must be disposed of by a call to km_kbp_state_dispose()

Returns

KM_KBP_STATUS_OK :On success.

KM_KBP_STATUS_NO_MEM :In the event memory is unavailable to allocate a state object.

KM_KBP_STATUS_INVALID_ARGUMENT :In the event the keyboard or out pointer are null.

km_kbp_state_clone() {#km_kbp_state_clone}

Description

Clone an existing opaque state object.

Specification

    km_kbp_status
    km_kbp_state_clone(km_kbp_state const *state,
                       km_kbp_state **out);

Parameters

state :A pointer to the opaque state object to be cloned.

out :A pointer to result variable: A pointer to the opaque state object returned by the Processor, cloned from the existing object state. This must be disposed of by a call to km_kbp_state_dispose().

Returns

KM_KBP_STATUS_OK :On success.

KM_KBP_STATUS_NO_MEM :In the event memory is unavailable to allocate a state object.

KM_KBP_STATUS_INVALID_ARGUMENT :In the event the state or out pointer are null.

km_kbp_state_dispose() {#km_kbp_state_dispose}

Description

Free the allocated resources belonging to a km_kbp_state object previously returned by km_kbp_state_create() or km_kbp_state_clone(). After this all pointers previously returned by any km_kbp_state_ family of calls will become invalid.

Specification

    void
    km_kbp_state_dispose(km_kbp_state *state);

Parameters

state :A pointer to the opaque state object to be disposed.

km_kbp_state_context() {#km_kbp_state_context}

Description

Get access to the state object's context.

Specification

    km_kbp_context *
    km_kbp_state_context(km_kbp_state *state);

Parameters

state :A pointer to the opaque state object to be queried.

Returns

A pointer to an opaque context object. This pointer is valid for the lifetime of the state object. If null is passed in, then null is returned.

km_kbp_state_action_items() {#km_kbp_state_action_items}

Description

Get the list of action items generated by the last call to km_kbp_process_event().

Specification

    km_kbp_action_item const *
    km_kbp_state_action_items(km_kbp_state const *state,
                              size_t *num_items);

Parameters

state :A pointer to the opaque km_kbp_state object to be queried.

num_items :A pointer to a result variable: The number of items in the action item list including the KM_KBP_IT_END terminator. May be null if that information is not required.

Returns

A pointer to a km_kbp_action_item array, of *``num_items in length. This data becomes invalid when the state object is destroyed, or after a call to km_kbp_process_event(). Do not modify the contents of this array. The returned array is terminated with a KM_KBP_IT_END entry.

km_kbp_state_to_json() {#km_kbp_state_to_json}

Description

Export the internal state of a km_kbp_state object to a JSON format document and place it in the supplied buffer, reporting how much space was used. If null is passed as the buffer the number of bytes required is returned. If there is insufficent space to hold the document, the contents of the buffer is undefined. The encoding of the returned data is UTF-8.

WARNING: The structure and format of the JSON document while independently versioned is not part of this API and is intended solely for use in diagnostics or by development and debugging tools which are aware of processor implementation details.

Specification

    km_kbp_status
    km_kbp_state_to_json(km_kbp_state const *state,
                         char *buf,
                         size_t *space);

Parameters

state :An pointer to an opaque state object.

buf :A pointer to the buffer to place the C string containing the JSON document into. May be null.

space :A pointer to a size_t variable. This variable must contain the number of bytes available in the buffer pointed to by buf, unless buf is null. On return it will hold how many bytes were used.

Returns

KM_KBP_STATUS_OK :On success.

KM_KBP_STATUS_NO_MEM :In the event an internal memory allocation fails.

km_kbp_process_event() {#km_kbp_process_event}

Description

Run the keyboard on an opaque state object with the provided virtual key and modifier key state. Updates the state object as appropriate and fills out its action list.
The action list will be cleared at the start of this call; options and context in the state may also be modified.

Specification

    km_kbp_status
    km_kbp_process_event(km_kbp_state *state,
                         km_kbp_virtual_key vk,
                         uint16_t modifier_state);

Parameters

state :A pointer to the opaque state object.

vk :A virtual key to be processed.

modifier_state :The combinations of modifier keys set at the time key vk was pressed, bitmask from the km_kbp_modifier_state enum.

is_key_down :If the key is down value is > 0.

Returns

KM_KBP_STATUS_OK :On success.

KM_KBP_STATUS_NO_MEM :In the event memory is unavailable to allocate internal buffers.

KM_KBP_STATUS_INVALID_ARGUMENT :In the event the state pointer is null or an invalid virtual key or modifier state is passed.

km_kbp_process_queued_actions() {#km_kbp_process_queued_actions}

Description

Process the keyboard processors queued actions for the opaque state object. Updates the state object as appropriate and fills out its action list. The client can add actions externally via the km_kbp_state_queue_action_items and then request the processing of the actions with this method.

Specification

    km_kbp_status km_kbp_process_queued_actions(km_kbp_state *state);

Parameters

state :A pointer to the opaque state object.

Returns

KM_KBP_STATUS_OK :On success.

KM_KBP_STATUS_NO_MEM :In the event memory is unavailable to allocate internal buffers.

KM_KBP_STATUS_INVALID_ARGUMENT :In the event the state pointer is null.

km_kbp_event() {#km_kbp_event}

Description

Tell the keyboard processor that an external event has occurred, such as a keyboard being activated through the language switching UI.
The keyboard processor may generate actions which should be processed by the consumer of the API.
The action list will be cleared at the start of this call; options and context in the state may also be modified.

Specification

    km_kbp_status
    km_kbp_event(km_kbp_state *state,
                 uint32_t event,
                 void *data);

Parameters

state :A pointer to the opaque state object.

event :An event to be processed, from km_kbp_event_code enumeration.

data :Additional event-specific data. Currently unused, must be nullptr.

Returns

KM_KBP_STATUS_OK :On success.

KM_KBP_STATUS_NO_MEM :In the event memory is unavailable to allocate internal buffers.

KM_KBP_STATUS_INVALID_ARGUMENT :In the event the state pointer is null or an invalid event or data is passed.

kbp_state_get_intermediate_context() {#kbp_state_get_intermediate_context}

Description

Get access to the state object's context.

Specification

    km_kbp_status
    kbp_state_get_intermediate_context(km_kbp_state *state, km_kbp_context_item ** context_items);

Parameters

state :A pointer to the opaque state object to be queried.

Returns

A pointer to an opaque context object. This pointer is valid for the lifetime of the state object. If null is passed in, then null is returned.

km_kbp_state_imx_register_callback() {#km_kbp_state_imx_register_callback}

Description

Register the IMX callback endpoint for the client.

Specification

    void km_kbp_state_imx_register_callback(km_kbp_state *state,
                                            km_kbp_keyboard_imx_platform imx_callback,
                                            void *callback_object);

Parameters

state :A pointer to the opaque state object.

imx_callback :imx callback.

callback_object :callback object

km_kbp_state_imx_deregister_callback {#km_kbp_state_imx_deregister_callback}

Description

Enumerate the various event types which can be raised through km_kbp_event.

Specification

    enum km_kbp_event_code {
      KM_KBP_EVENT_KEYBOARD_ACTIVATED         = 1,
    };

Values

KM_KBP_EVENT_KEYBOARD_ACTIVATED :A keyboard has been activated by the user. The processor may use this event, for example, to switch caps lock state or provide other UX.

km_kbp_state_queue_action_items() {#km_kbp_state_queue_action_items}

Description

Queue actions for the current keyboard processor state; normally used in IMX callbacks called during km_kbp_process_event.

Specification

    km_kbp_status km_kbp_state_queue_action_items(km_kbp_state *state, km_kbp_action_item const *action_items);

Parameters

state :A pointer to the opaque state object.

action_items :The action items to be added to the keyboardprocessor queue. Must be terminated with a KM_KBP_IT_END entry.

Returns

KM_KBP_STATUS_OK :On success.

KM_KBP_STATUS_INVALID_ARGUMENT :In the event the state or action_items pointer is null.