0.10 11.03.2005 Mohammad Anwari initial document 0.15 14.03.2005 Mohammad Anwari changed the structure: - removing state (this is runtime value) changed namespace from HILDON to osso 0.20 17.03.2005 Mohammad Anwari added type of layout in file structure 0.25 18.03.2005 Mohammad Anwari added Special key with scan codes 0.30 08.04.2005 Mohammad Anwari changed the key type and addition of numeric state 0.35 11.04.2005 Mohammad Anwari added lang, wc, and name 0.50 10.10.2005 Mohammad Anwari multiple layout support 0.51 09.11.2005 Mohammad Anwari added key size and split keyboard and numeric keypad into key sections 0.52 17.11.2005 Mohammad Anwari redesign key size information 0.53 31.01.2006 Mohammad Anwari added variance index
This document describes the file structure of the virtual keyboard layout and API to load it into memory. This file specification attempts to save multiple layout of keyboard in a single file. Each layout can have individual configuration of the number of keys and rows. This file specification was designed to have a fast loading time of the file and fast accessibility to each layout inside the file in the memory. All labels and strings used here use utf-8 encoding. libimlayout only reads and provides in memory representation of the virtual keyboard layout, the rendering of the layout is not within the scope.
A vkb file could have more than one layout. And each layout could have more than one sublayout.
Some possibilities of .vkb content:
+ File Name: en_GB.vkb + Number of Layout: 2 + Layout 1 - Type: HILDON_VKB_LAYOUT_NORMAL - Number of Sub Layout: 2 - Sub Layout 1 * Type: HILDON_VKB_LAYOUT_LOWERCASE - Sub Layout 2 * Type: HILDON_VKB_LAYOUT_UPPERCASE + Layout 2 - Type: HILDON_VKB_LAYOUT_THUMB - Number of Sub Layout: 1 - Sub Layout 1 * Type: HILDON_VKB_SUBLAYOUT_SINGLE + File Name: en_US.vkb + Number of Layout: 3 + Layout 1 - Type: HILDON_VKB_LAYOUT_NORMAL - Number of Sub Layout: 2 - Sub Layout 1 * Type: HILDON_VKB_LAYOUT_LOWERCASE - Sub Layout 2 * Type: HILDON_VKB_LAYOUT_UPPERCASE + Layout 2 - Type: HILDON_VKB_LAYOUT_SMALL - Number of Sub Layout: 2 - Sub Layout 1 * Type: HILDON_VKB_LAYOUT_LOWERCASE - Sub Layout 2 * Type: HILDON_VKB_LAYOUT_UPPERCASE + Layout 2 - Type: HILDON_VKB_LAYOUT_THUMB - Number of Sub Layout: 1 - Sub Layout 1 * Type: HILDON_VKB_SUBLAYOUT_SINGLE + File Name: latin.special.vkb + Number of Layout: 1 + Layout 1 - Type: HILDON_VKB_LAYOUT_SPECIAL - Number of Sub Layout: 4 - Sub Layout 1 * Type: HILDON_VKB_SUBLAYOUT_SINGLE * Label: Common - Sub Layout 2 * Type: HILDON_VKB_SUBLAYOUT_SINGLE * Label: Symbols - Sub Layout 1 * Type: HILDON_VKB_SUBLAYOUT_SINGLE * Label: Accents a-m - Sub Layout 1 * Type: HILDON_VKB_SUBLAYOUT_SINGLE * Label: Accents n-z + File Name: zh_ZH.vkb + Number of Layout: 3 + Layout 1 - Type: HILDON_VKB_LAYOUT_PINYIN - Number of Sub Layout: 1 - Sub Layout 1 * Type: HILDON_VKB_SUBLAYOUT_SINGLE + Layout 2 - Type: HILDON_VKB_LAYOUT_ZHUYIN - Number of Sub Layout: 1 - Sub Layout 1 * Type: HILDON_VKB_SUBLAYOUT_SINGLE + Layout 3 - Type: HILDON_VKB_LAYOUT_CANGJIE - Number of Sub Layout: 1 - Sub Layout 1 * Type: HILDON_VKB_SUBLAYOUT_SINGLE
There are three kind of keys supported:
Offset Type Size Description ------------------------------ Header Section 0000 Byte 1 Version 0001 Byte 1 Number of Layout 0003 Byte 1 Length of Name 0004 String * Name .... Byte 1 Length of Language Code .... String * Language Code .... Byte 1 Length of Word Completion Locale .... String * Word Completion Locale .... Byte 1 Number of screen mode supported .... Array * Array of screen modes of Bytes .... Byte * Number of key size available .... Array * --Read Key Size section-- of Key Size .... Int * Array of Layout offsets .... Byte 20 reserved .... Array * --Read Layout section-- of Layout ------------------------------ Key Size Section 0000 Byte 1 Key Width 0001 Byte 1 Key Height 0002 Byte 1 Baseline 0002 Byte 4 Key Margins ------------------------------ End of Key Size Section ------------------------------ Layout Section 0000 Byte 1 Type of Layout 0001 Byte 1 Number of Sub Layout 0002 Byte 1 Numeric Layout 0003 Byte 1 Default index of key size .... Array * --Read Sub Layout section-- of Sub Layout ------------------------------ End of Layout Section ------------------------------ Sub Layout Section 0000 Byte 1 Type of Sub Layout 0001 Byte 1 Variance Index 0002 Byte 1 Length of Label .... Array * Label of bytes .... Byte 1 Number of key sections .... Array * --Read key section-- of Key Section ------------------------------ End of Sub Layout ------------------------------ Key Section 0000 Byte 1 Number of Keys 0001 Byte 1 Number of Rows 0002 Byte 4 Margins 000. Array * Number of Keys in Rows of bytes (size depends on Number of Rows value) .... Array * --Read button section-- of Keys ------------------------------ End of Key Section ------------------------------ Button Section 0000 Byte 1 Type ------------------------------ Multiple Button Section if Type is a multiple key 0000 Byte 1 Number of multiple keys .... Array * --Read standard button-- of Standard Key ------------------------------ End of Multiple Key Section ------------------------------ Standard Button Section 0000 Byte 1 Type If the key is not a multiple key then this byte is not read ................................ 0001 Byte 1 Attribute if (the eighth bit is set then size is 2 bytes) 000. Byte 1 Length of the Label If the eigth bit is set then Label is a string of array (\0 delimited for each entry) with size Length 000. String * Label (size depends on the Length of the Label) 000. Byte 1 Key size index ------------------------------ if Key attribute is RAW 000. Byte 1 Length of the scan code 000. Array * scan code of bytes ------------------------------ End of Standard Button Section ------------------------------ End of Button Section