Input methods: Difference between revisions

From The Toaq Wiki
(Update Derani Workman layout to new encoding)
(kaichuo)
Line 40: Line 40:


=== Kaıchuo ===
=== Kaıchuo ===
This is a little tool by [[User:Lynn]] that runs in your browser, <s>available [http://foldr.moe/kaichuo/ here]</s> updated for [[Toaq Delta]] by [[User:El]] and available [https://ixera.github.io/kaichuo here]. You type something like {{Key|Kiai ji kato/ da}} and it turns it into {{t|Kıaı jí káto da}}. (Wow! It knows {{t|jí}} is a pronoun and automatically adds {{Done|2}}.)
This is a little tool originally by [[User:Lynn]] that runs in your browser [https://toaq.net/kaichuo/ here]. You type something like {{Key|Kiai ji kato/ da}} (alternatively, {{Key|kato2}}) and it turns it into {{t|Kıaı jí káto da}}. (Wow! It knows {{t|jí}} is a pronoun and automatically adds {{Done|2}}.) The underdot ◌̣ is typed with a hyphen and {{t|Ꝡ}} with "V".


=== vim ===
=== vim ===
Line 454: Line 454:


== [[Derani|Deranı]] layouts ==
== [[Derani|Deranı]] layouts ==
=== Kaıchuo ===
[https://toaq.net/kaichuo/ Kaıchuo] also has an option for typing Derani.


=== Mıao's layout (QWERTY-based) ===
=== Mıao's layout (QWERTY-based) ===

Revision as of 19:18, 27 December 2022

Toaq's Latin writing system features many letter with diacritics, which are tricky to type on a standard keyboard configured for English. Here are some solutions.

Desktop computers

Compose key

You can set up a compose key on your computer, which will change the behavior of one of the keys on your keyboard to "compose" the next two keypresses into one character — for example CapsLock ' a becomes á.

On Linux, this might not even involve installing anything! Look for "compose key" plus your distro name.

On Windows, WinCompose is pretty good.

Here's how to type Toaq-specific characters in the default ruleset.

Character Combo
rising tone ' + vowel
glottal tone " + vowel
hiatus tone ^ + vowel
dotless i (ı) . + i
left quote («) < + <
right quote (») > + >

Then there are these supplemental definitions. WinCompose provides them by default; on Linux you’re going to have to add them yourself one-by-one or by sourcing [1]. That said you might not find them very convenient to type.

Character Combo
V + & + Y
v + & + y
combining underdot (like in ı̣) \ + !

Kaıchuo

This is a little tool originally by User:Lynn that runs in your browser here. You type something like Kiai ji kato/ da (alternatively, kato2) and it turns it into Kıaı jí káto da. (Wow! It knows is a pronoun and automatically adds rising tone.) The underdot ◌̣ is typed with a hyphen and with "V".

vim

Copy the contents below into a file called toaq.vim inside a folder named keymap in your .vim directory (create it if it doesn’t exist). Then, in insert mode, you may use any of the two-keystroke “combinations” and have them replaced with accented letters on the fly. (See :help mbyte-keymap for more detailed information.)

Without underdot With underdot
falling tone .
rising tone / '
glottal tone : "
hiatus tone > ^
Toaq vim keymap
" toaq keymap
" by uakci on 2022-12-20
scriptencoding utf8
let b:keymap_name = "toaq"
loadkeymap
.i	i
i	ı
//	/
::	:
>>	>
''	'
""	"
^^	^
..	.
.<	«
.>	»
.{	‹
.}	›
./	́
.:	̈
.>	̂
.,	̣
.A	Ạ
.U	Ụ
.I	Ị
.O	Ọ
.E	Ẹ
.a	ạ
.u	ụ
.i	ı̣
.o	ọ
.e	ẹ
vy	ꝡ
Vy	Ꝡ
VY	Ꝡ
/A	Á
/U	Ú
/I	Í
/O	Ó
/E	É
/a	á
/u	ú
/i	í
/o	ó
/e	é
:A	Ä
:U	Ü
:I	Ï
:O	Ö
:E	Ë
:a	ä
:u	ü
:i	ï
:o	ö
:e	ë
>A	Â
>U	Û
>I	Î
>O	Ô
>E	Ê
>a	â
>u	û
>i	î
>o	ô
>e	ê
'A	Ạ́
'U	Ụ́
'I	Ị́
'O	Ọ́
'E	Ẹ́
'a	ạ́
'u	ụ́
'i	ị́
'o	ọ́
'e	ẹ́
"A	Ạ̈
"U	Ụ̈
"I	Ị̈
"O	Ọ̈
"E	Ẹ̈
"a	ạ̈
"u	ụ̈
"i	ị̈
"o	ọ̈
"e	ẹ̈
^A	Ậ
^U	Ụ̂
^I	Ị̂
^O	Ộ
^E	Ệ
^a	ậ
^u	ụ̂
^i	ị̂
^o	ộ
^e	ệ

Alternatively, for sporadic usage, you can enter Toaq characters using Ctrl+K followed by two keystrokes (see :help digraph). Ꝡ is not available to input using this method.

Character Combo
rising tone Ctrl+K vowel '
glottal tone Ctrl+K vowel :
hiatus tone Ctrl+K vowel >
dotless i (ı) Ctrl+K . i
left quote («) Ctrl+K < <
right quote (») Ctrl+K > >

AutoHotkey

This official AutoHotkey script will convert a/ into á, etc. Oh, it's actually outdated (has the old falling-rising tone (obsolete 3rd tone) instead of the new rising-creaky tone). Oh it's actually double outdated.

US, intl. with dead keys

If you are on Linux, there is a keyboard option called "US, intl. with dead keys". The way you enter diacritics is the same as the compose key one. Unfortunately, is not on the layout.

XKB

Note that this requires editing a few other files, so remember to make backups of files you change.

This layout, for QWERTY keyboards, also has diacritics for Gamma and Beta.

Without underdot With underdot
falling tone v vowel
rising tone ' vowel ' v vowel
glottal tone " vowel " v vowel
hiatus tone ; vowel ; v vowel
Ꝡ ꝡ W, w
Old diacritics Other
flat tone Shift x vowel x
falling-rising tone (obsolete 3rd tone) Shift v vowel « [
falling tone : vowel » ]
mid-falling tone AltGr \ vowel {
falling creaky tone AltGr | vowel }
XKB symbols file
default  partial alphanumeric_keys modifier_keys
xkb_symbols "basic" {

    name[Group1]= "Toaqzu (Hóegua)";

    key <TLDE> {	[     grave,	asciitilde	]	};
    key <AE01> {	[	  1,	exclam 		]	};
    key <AE02> {	[	  2,	at		]	};
    key <AE03> {	[	  3,	numbersign	]	};
    key <AE04> {	[	  4,	dollar		]	};
    key <AE05> {	[	  5,	percent		]	};
    key <AE06> {	[	  6,	asciicircum	]	};
    key <AE07> {	[	  7,	ampersand	]	};
    key <AE08> {	[	  8,	asterisk	]	};
    key <AE09> {	[	  9,	parenleft	]	};
    key <AE10> {	[	  0,	parenright	]	};
    key <AE11> {	[     minus,	underscore,	endash,	emdash	]	};
    key <AE12> {	[     equal,	plus		]	};

    key <AD01> {	[	  q,	Q 		]	};
    key <AD02> {	type[group1] = "FOUR_LEVEL_ALPHABETIC",
                    [	  UA761, UA760, w,	W ]	};
    key <AD03> {	[	  e,	E		]	};
    key <AD04> {	[	  r,	R		]	};
    key <AD05> {	[	  t,	T		]	};
    key <AD06> {	[	  y,	Y		]	};
    key <AD07> {	[	  u,	U		]	};
    key <AD08> {	type[group1] = "FOUR_LEVEL_ALPHABETIC",
                    [	idotless,	I,	i,	Iabovedot ] };
    key <AD09> {	[	  o,	O		]	};
    key <AD10> {	[	  p,	P		]	};
    key <AD11> {	[ guillemotleft,	U2039,	bracketleft,	braceleft	]	};
    key <AD12> {	[ guillemotright,	U203A,	bracketright,	braceright	]	};

    key <AC01> {	[	  a,	A 		]	};
    key <AC02> {	[	  s,	S		]	};
    key <AC03> {	[	  d,	D		]	};
    key <AC04> {	[	  f,	F		]	};
    key <AC05> {	[	  g,	G		]	};
    key <AC06> {	[	  h,	H		]	};
    key <AC07> {	[	  j,	J		]	};
    key <AC08> {	[	  k,	K		]	};
    key <AC09> {	[	  l,	L		]	};
    key <AC10> {	[ dead_circumflex,	dead_hook,	semicolon,	colon ]	};
    key <AC11> {	[ dead_acute,	dead_diaeresis,	apostrophe,	quotedbl	]	};

    key <AB01> {	[	  z,	Z 		]	};
    key <AB02> {	[	  rightsinglequotemark, dead_macron, x, X		]	};
    key <AB03> {	[	  c,	C		]	};
    key <AB04> {	[	  dead_belowdot,	dead_caron,	v,	V		]	};
    key <AB05> {	[	  b,	B		]	};
    key <AB06> {	[	  n,	N		]	};
    key <AB07> {	[	  m,	M		]	};
    key <AB08> {	[	  comma,	less		]	};
    key <AB09> {	[	  period,	greater		]	};
    key <AB10> {	[	  slash,	question	]	};

    key <BKSL> {	[	  backslash,         bar, dead_grave,	dead_tilde	]	};
    
    key <SPCE> {	[	  space,	space,	nobreakspace,	 nobreakspace ] };
    
   include "level3(ralt_switch)"
};

You will also need add some Compose keys.

XCompose definitions
<dead_acute> <dead_belowdot> <a>             :"ạ́"
<dead_diaeresis> <dead_belowdot> <a>         :"ạ̈"
<dead_circumflex> <dead_belowdot> <a>        :"ậ"
<dead_acute> <dead_belowdot> <e>             :"ẹ́"
<dead_diaeresis> <dead_belowdot> <e>         :"ẹ̈"
<dead_circumflex> <dead_belowdot> <e>        :"ệ"
<dead_acute> <dead_belowdot> <idotless>      :"ị́"
<dead_diaeresis> <dead_belowdot> <idotless>  :"ị̈"
<dead_circumflex> <dead_belowdot> <idotless> :"ị̂"
<dead_acute> <dead_belowdot> <o>             :"ọ́"
<dead_diaeresis> <dead_belowdot> <o>         :"ọ̈"
<dead_circumflex> <dead_belowdot> <o>        :"ộ"
<dead_acute> <dead_belowdot> <u>             :"ụ́"
<dead_diaeresis> <dead_belowdot> <u>         :"ụ̈"
<dead_circumflex> <dead_belowdot> <u>        :"ụ̂"

<dead_belowdot> <dead_acute> <a>             :"ạ́"
<dead_belowdot> <dead_diaeresis> <a>         :"ạ̈"
<dead_belowdot> <dead_circumflex> <a>        :"ậ"
<dead_belowdot> <dead_acute> <e>             :"ẹ́"
<dead_belowdot> <dead_diaeresis> <e>         :"ẹ̈"
<dead_belowdot> <dead_circumflex> <e>        :"ệ"
<dead_belowdot> <dead_acute> <idotless>      :"ị́"
<dead_belowdot> <dead_diaeresis> <idotless>  :"ị̈"
<dead_belowdot> <dead_circumflex> <idotless> :"ị̂"
<dead_belowdot> <dead_acute> <o>             :"ọ́"
<dead_belowdot> <dead_diaeresis> <o>         :"ọ̈"
<dead_belowdot> <dead_circumflex> <o>        :"ộ"
<dead_belowdot> <dead_acute> <u>             :"ụ́"
<dead_belowdot> <dead_diaeresis> <u>         :"ụ̈"
<dead_belowdot> <dead_circumflex> <u>        :"ụ̂"

<dead_acute> <dead_belowdot> <A>             :"Ạ́"
<dead_diaeresis> <dead_belowdot> <A>         :"Ạ̈"
<dead_circumflex> <dead_belowdot> <A>        :"Ậ"
<dead_acute> <dead_belowdot> <E>             :"Ẹ́"
<dead_diaeresis> <dead_belowdot> <E>         :"Ẹ̈"
<dead_circumflex> <dead_belowdot> <E>        :"Ệ"
<dead_acute> <dead_belowdot> <I>             :"Ị́"
<dead_diaeresis> <dead_belowdot> <I>         :"Ị̈"
<dead_circumflex> <dead_belowdot> <I>        :"Ị̂"
<dead_acute> <dead_belowdot> <O>             :"Ọ́"
<dead_diaeresis> <dead_belowdot> <O>         :"Ọ̈"
<dead_circumflex> <dead_belowdot> <O>        :"Ộ"
<dead_acute> <dead_belowdot> <U>             :"Ụ́"
<dead_diaeresis> <dead_belowdot> <U>         :"Ụ̈"
<dead_circumflex> <dead_belowdot> <U>        :"Ụ̂"

<dead_belowdot> <dead_acute> <A>             :"Ạ́"
<dead_belowdot> <dead_diaeresis> <A>         :"Ạ̈"
<dead_belowdot> <dead_circumflex> <A>        :"Ậ"
<dead_belowdot> <dead_acute> <E>             :"Ẹ́"
<dead_belowdot> <dead_diaeresis> <E>         :"Ẹ̈"
<dead_belowdot> <dead_circumflex> <E>        :"Ệ"
<dead_belowdot> <dead_acute> <I>             :"Ị́"
<dead_belowdot> <dead_diaeresis> <I>         :"Ị̈"
<dead_belowdot> <dead_circumflex> <I>        :"Ị̂"
<dead_belowdot> <dead_acute> <O>             :"Ọ́"
<dead_belowdot> <dead_diaeresis> <O>         :"Ọ̈"
<dead_belowdot> <dead_circumflex> <O>        :"Ộ"
<dead_belowdot> <dead_acute> <U>             :"Ụ́"
<dead_belowdot> <dead_diaeresis> <U>         :"Ụ̈"
<dead_belowdot> <dead_circumflex> <U>        :"Ụ̂"

Xmodmap

If you’re running X11 on a Linux machine, create a file (I suggest calling it .Xmodmap in your home directory) with the following contents, then run xmodmap filename to activate:

keycode 11  =  2  at           2  at           dead_acute
keycode 12  =  3  numbersign   3  numbersign   dead_diaeresis
keycode 13  =  4  dollar       4  dollar       dead_circumflex
keycode 31  =  i  I            i  I            idotless
Note: You will require your keyboard layout to have a modifier key active (if at all, usually RAlt a.k.a. AltGr); to achieve this, you may run setxkbmap us intl to switch to the international US layout with dead keys. Also note that a layout change wipes any xmodmaps previously issued, so you will have to rerun the xmodmap command. Feel free to add those two commands (in the right order!) to your .xprofile, or whatever other file your system picks up when starting up X11. Contact uakci if you run into issues.

To use: hold RAlt and then press a digit, 2 thru 4. After releasing, press the key for your favourite vowel. This should produce a vowel with the desired precomposed tone diacritic (this is a big deal to some people). For dotless ı, use RAltI.

Variations

Bind the dead diacritic keys to s, d, f (for that sweet sweet ergonomic swag):

keycode 39  =  s  S  s  S  dead_acute
keycode 40  =  d  D  d  D  dead_diaeresis
keycode 41  =  f  F  f  F  dead_circumflex

Make dotless ı the default when pressing I, requiring RAltI to obtain regular dotted i (and also when composing diacritics with the mechanism described above):

keycode 31  =  i  I  i  I  idotless

Kanakey

User:Hoaqgio uses a custom Python script that can be found at https://github.com/toaq/kanakey. The way it works is that the script always runs in the background (you start it on login) and when you want to type Toaq, you type alt+; followed by the Toaq you want in the format of "Mai4 ji2 suq2 da.", and finally you just type ; alone. Then the script erases what you typed and replaces it with pretty Toaq. Unfortunately it has two pretty inconvenient issues, one of which is that it currently can't show an icon in the system tray to indicate whether the script is in "listening mode" or not (which means you can accidentally put it in listening mode and leave it there for a while) and the other of which is that if you have non-text data on your system clipboard at the time you try to use the script, it will simply crash. User:Hoaqgio recommends not using this unless you really have no better alternative!

Phones

Your built-in keyboard?

In general, on many phone keyboards you can long-press a vowel to get some accents, though you still won't find or the underdot (- will do, though).

MultiLing O

There's a decently customizable Android custom keyboard app called MultiLing O, which comes with a selection of diacritics out of the box (bar old falling tone). To use them, first type the desired letter, then hold-tap the key that says ,/AltGr. An alternate screen should appear; without lifting your finger, slide it to the desired choice of diacritic. However, this won’t get you typing full-featured Toaq Delta right away – luckily for us, Multiling supports custom layouts. To install these:

  1. Choose a layout you like, hold-tap and then drag to make a selection starting from OK_Layout_Begin and ending on OK_Layout_End, then click Copy.
  2. With the Multiling keyboard open: hold the spacebar, then drag your finger over to a button named Layouts in the top right that should just have appeared. (Optionally: first slide to Languages > Other > X language 1. This disables word prediction and lets you switch between English and Toaq by swiping the spacebar leftward.)
  3. Select [+DIY] from the pop-up list, then Paste, then OK.

The following layouts are available:

Mıao's layout

Screenshot of Mıao's layout

Your standard QWERTY layout with flick access to prearranged underdot + rising tone glottal tone hiatus tone combos.

MultiLing O layout definition file
OK_Layout_Begin
Name:Tóaqdeota
1234567890
q[XK:ꝡw][4D:e[U+0308]éëêẹ[MC:ẹ́][MC:ẹ̈][MC:ệ]]rty[4D:u[U+0302]úüûụ[MC:ụ́][MC:ụ̈][MC:ụ̂]][4D:ıiíïî[MC:ı̣][MC:ị́][MC:ị̈][MC:ị̂]][4D:o[U+0323]óöôọ[MC:ọ́][MC:ọ̈][MC:ộ]]p
[4D:a[U+0301]áäâạ[MC:ạ́][MC:ạ̈][MC:ậ]]sdfghjkl
zxcvbnm
!@#$%^&*()
Q[XK:ꝠW][4D:E[U+0308]ÉËÊẸ[MC:Ẹ́][MC:Ẹ̈][MC:Ệ]]RTY[4D:U[U+0302]ÚÜÛỤ[MC:Ụ́][MC:Ụ̈][MC:Ụ̂]][4D:IİÍÏÎ[MC:Ị́][MC:Ị̈][MC:Ị̂]][4D:O[U+0323]ÓÖÔỌ[MC:Ọ́][MC:Ọ̈][MC:Ộ]]P
[4D:A[U+0301]ÁÄÂẠ[MC:Ạ́][MC:Ạ̈][MC:Ậ]]SDFGHJKL
ZXCVBNM
£¥€$₹^&*()№√÷
~`{}%_-=|+§∷‡
@[]#/\'"«»—‐–
…<>!;:?‹›±.,
ˉˋˇ´¨˙˚¸﹐˛˘˜ˆ
―∑éə®†Ωœøπ•·¡
æß∂ðƒ©ªº∆≠℥∞¿
ʒΩ≈çþ∫ŋµ≤≥°
OK_Layout_End

uakci's mobile-optimized layout

Screenshot of uakci's layout

The third-or-so iteration of this layout (this time updated for Toaq Delta and adorned with cool symbols to boot). Fewer keys means less fat finger fumbling. Some keys are moved out of the way or (in the case of v, w, y) folded into the ꝡ key; the underdot key stands alone on the right edge of the middle row.

MultiLing O layout definition file
OK_Layout_Begin
Name:uakci’s mobile-optimized layout

q[XK:ꝡvwy][4D:e éëê]rt[4D:uüú û][4D:ıïíiî][4D:oöó ô]p
[4D:a áäâ]sdhjklṃ
zxcfgbn

Q[XK:ꝠVWY][4D:E ÉËÊ]RT[4D:UÜÚ Û][4D:IÏÍIÎ][4D:OÖ ÓÔ]P
[4D:A ÁÄÂ]SDHJKLṂ
ZXCFGBN

‹  —–   ›    
 «⟪⟨-⟩⟫»·
!.,…?:;
OK_Layout_End

Deranı layouts

Kaıchuo

Kaıchuo also has an option for typing Derani.

Mıao's layout (QWERTY-based)

Toaq (QWERTY).svg

Some punctuation whose keys were taken over have been put under AltGr.

XKB (Linux)

XKB symbols file
default  partial alphanumeric_keys modifier_keys
xkb_symbols "derani" {

    name[Group1]= "Toaqzu (Deranı)";

    key <TLDE> { [ grave, asciitilde ] };
    key <AE01> { [ 1, exclam  ] };
    key <AE02> { [ 2, at ] };
    key <AE03> { [ 3, numbersign ] };
    key <AE04> { [ 4, dollar  ] };
    key <AE05> { [ 5, percent  ] };
    key <AE06> { [ 6, asciicircum ] };
    key <AE07> { [ 7, ampersand ] };
    key <AE08> { [ 8, asterisk ] };
    key <AE09> { [ 9, parenleft ] };
    key <AE10> { [ 0, parenright ] };
    key <AE11> { [ minus, underscore, endash, emdash ] };
    key <AE12> { [ equal, plus ] };

    key <AD01> { [ UF16C2 ] }; // Q
    key <AD02> { [ UF16C1 ] }; // Ꝡ
    key <AD03> { [ UF16CA ] }; // 2nd tone
    key <AD04> { [ UF16BB ] }; // R
    key <AD05> { [ UF16B7 ] }; // T
    key <AD06> { [ UF16CE ] }; // diphthong
    key <AD07> { [ UF16CB ] }; // 3rd tone
    key <AD08> { [ UF16BD ] }; // NH
    key <AD09> { [ UF16CC ] }; // 4th tone
    key <AD10> { [ UF16B3 ] }; // P
    key <AD11> { [ guillemotleft, U2039, bracketleft, braceleft ] };
    key <AD12> { [ guillemotright, U203A, bracketright, braceright ] };

    key <AC01> { [ UF16C5 ] }; // '
    key <AC02> { [ UF16BA ] }; // S
    key <AC03> { [ UF16B6 ] }; // D
    key <AC04> { [ UF16B4 ] }; // F
    key <AC05> { [ UF16C3 ] }; // G
    key <AC06> { [ UF16C6 ] }; // H
    key <AC07> { [ UF16BE ] }; // J
    key <AC08> { [ UF16C4 ] }; // K
    key <AC09> { [ UF16BC ] }; // L
    key <AC10> { [ UF16D8, UF16CD, semicolon, colon ] }; // cartouche start | hiatus mark
    key <AC11> { [ UF16D9, UF16DA, apostrophe, quotedbl ] }; // cartouche end | null variable

    key <AB01> { [ UF16B8 ] }; // Z
    key <AB02> { [ UF16C0 ] }; // SH
    key <AB03> { [ UF16B9 ] }; // C
    key <AB04> { [ UF16BF ] }; // CH
    key <AB05> { [ UF16B2 ] }; // B
    key <AB06> { [ UF16B5 ] }; // N
    key <AB07> { [ UF16B0, UF16B1 ] }; // M | M coda
    key <AB08> { [ UF16D4, UF16D2, comma, less ] }; // subordination mark | prefix mark
    key <AB09> { [ UF16D5, UF16D3, period, greater ] }; // declarative full stop | quotation mark
    key <AB10> { [ UF16D6, UF16D7, slash, question ] }; // other full stop | question mark

    key <BKSL> { [ backslash, bar] };
    
    key <SPCE> { [ space, space, nobreakspace,  nobreakspace ] };
    
   include "level3(ralt_switch)"
};

Windows

Made with Microsoft Keyboard Layout Creator. Unzip the .zip file and open setup.exe. You may have to restart your computer for it to show up. To uninstall, uninstall it like you would any other program.

Loekıa's layout (Workman-based)

Toaq (Workman).svg

XKB symbols file
xkb_symbols "toaq"
{
  include "us(workman)"

  key <AD01> { [ UF16BD ] };
  key <AD02> { [ UF16B6 ] };
  key <AD03> { [ UF16BB ] };
  key <AD04> { [ UF16CD ] };
  key <AD05> { [ UF16CE ] };
  key <AD06> { [ UF16BE ] };
  key <AD07> { [ UF16B5 ] };
  key <AD08> { [ UF16B2 ] };
  key <AD09> { [ UF16B3 ] };
  key <AD10> { [ UF16D8, UF16D9 ] };

  key <AC01> { [ UF16BA ] };
  key <AC02> { [ UF16C0 ] };
  key <AC03> { [ UF16C6 ] };
  key <AC04> { [ UF16B7 ] };
  key <AC05> { [ UF16CA ] };
  key <AC06> { [ UF16CB, UF16CC ] };
  key <AC07> { [ UF16C2 ] };
  key <AC08> { [ UF16B4 ] };
  key <AC09> { [ UF16C3 ] };
  key <AC10> { [ UF16B9 ] };
  key <AC11> { [ UF16D2, UF16D3 ] };

  key <AB01> { [ UF16B8 ] };
  key <AB02> { [ UF16C5 ] };
  key <AB03> { [ UF16B0, UF16B1 ] };
  key <AB04> { [ UF16BF ] };
  key <AB05> { [ UF16C1 ] };
  key <AB06> { [ UF16C4 ] };
  key <AB07> { [ UF16BC ] };
  key <AB08> { [ UF16D4, UF16DA ] };
  key <AB09> { [ UF16D5 ] };
  key <AB10> { [ UF16D6, UF16D7 ] };

  key <SPCE> { [ U0020, U00A0 ] };
};

Sad alternatives

ASCII tone markers

You can always write the ASCII-friendly (although reader-hostile) /"^ tone markers after words like this, usefully combined with sparse tone marking:

Hio ka. Bu va" bo ji/ sa gi kaichuo rao^ ni/.

Or tone number digits 234:

Hio ka. Bu va3 bo ji2 sa gi kaichuo rao4 ni2.

And you will be understood.