content: # Rule toml definition not determined yet
  
  [metadata]
  # 名前。必須。
  name = "default"
  # 説明文。必須。
  description = "default typing rule"
  
  # conversion:
  # Key-Valueの配列 ローマ字変換規則
  #
  # Keyはkeysym列
  # スペース区切りで各wordがKeysymであればそのKeysymとして、そうでなければ各バイトをasciiとみなした文字のKeysymとして変換する。
  # 変換できなかったものは無視される。
  # 名称は https://github.com/xkbcommon/libxkbcommon/blob/master/include/xkbcommon/xkbcommon-keysyms.h による。
  # ascii文字(0x20..=0x7E)の範囲のみ変換する。
  # 例:
  # "space 無視" -> KEY_space ('無視'はascii文字ではないため)
  # "lk Shift_L" -> KEY_l, KEY_k, KEY_Shift_L
  # "ab" -> KEY_a, KEY_b
  # "a t" -> KEY_a, KEY_t
  # "at" -> KEY_at
  # 最後の例のように特に短い名称のKeysymは対応するKeysym扱いされるので、2文字で2つのKeysym扱いしたい場合はスペースを間に入れる必要がある。
  # 2文字の"Up", "ch", "at", "mu", "AE", "ae", "OE", "oe", "ht", "ff", "cr", "lf", "nl", "vt", "IO"には特に注意が必要
  #
  # Valueは2要素の配列
  # 最初の要素はkeysym列、かな変換後に残る入力(carryover)として使われる。
  # 2つ目の要素が変換先文字列。
  #
  # 例として kk = ["k", "っ"] と定義がある場合、k kと入力した際に"っ"が入力され、"k"が入力待ちの状態で残る。
  [conversion]
  colon = ["", "："]
  semicolon = ["", "；"]
  question = ["", "？"]
  bracketleft = ["", "「"]
  bracketright = ["", "」"]
  minus = ["", "ー"]
  a = ["", "あ"]
  ba = ["", "ば"]
  bb = ["b", "っ"]
  be = ["", "べ"]
  bi = ["", "び"]
  bo = ["", "ぼ"]
  bu = ["", "ぶ"]
  bya = ["", "びゃ"]
  bye = ["", "びぇ"]
  byi = ["", "びぃ"]
  byo = ["", "びょ"]
  byu = ["", "びゅ"]
  cc = ["c", "っ"]
  cha = ["", "ちゃ"]
  che = ["", "ちぇ"]
  chi = ["", "ち"]
  cho = ["", "ちょ"]
  chu = ["", "ちゅ"]
  cya = ["", "ちゃ"]
  cye = ["", "ちぇ"]
  cyi = ["", "ちぃ"]
  cyo = ["", "ちょ"]
  cyu = ["", "ちゅ"]
  da = ["", "だ"]
  dd = ["d", "っ"]
  de = ["", "で"]
  dha = ["", "でゃ"]
  dhe = ["", "でぇ"]
  dhi = ["", "でぃ"]
  dho = ["", "でょ"]
  dhu = ["", "でゅ"]
  di = ["", "ぢ"]
  do = ["", "ど"]
  du = ["", "づ"]
  dya = ["", "ぢゃ"]
  dye = ["", "ぢぇ"]
  dyi = ["", "ぢぃ"]
  dyo = ["", "ぢょ"]
  dyu = ["", "ぢゅ"]
  e = ["", "え"]
  fa = ["", "ふぁ"]
  fe = ["", "ふぇ"]
  "f f" = ["f", "っ"]
  fi = ["", "ふぃ"]
  fo = ["", "ふぉ"]
  fu = ["", "ふ"]
  fya = ["", "ふゃ"]
  fye = ["", "ふぇ"]
  fyi = ["", "ふぃ"]
  fyo = ["", "ふょ"]
  fyu = ["", "ふゅ"]
  ga = ["", "が"]
  ge = ["", "げ"]
  gg = ["g", "っ"]
  gi = ["", "ぎ"]
  go = ["", "ご"]
  gu = ["", "ぐ"]
  gya = ["", "ぎゃ"]
  gye = ["", "ぎぇ"]
  gyi = ["", "ぎぃ"]
  gyo = ["", "ぎょ"]
  gyu = ["", "ぎゅ"]
  ha = ["", "は"]
  he = ["", "へ"]
  hh = ["h", "っ"]
  hi = ["", "ひ"]
  ho = ["", "ほ"]
  hu = ["", "ふ"]
  hya = ["", "ひゃ"]
  hye = ["", "ひぇ"]
  hyi = ["", "ひぃ"]
  hyo = ["", "ひょ"]
  hyu = ["", "ひゅ"]
  i = ["", "い"]
  ja = ["", "じゃ"]
  je = ["", "じぇ"]
  ji = ["", "じ"]
  jj = ["j", "っ"]
  jo = ["", "じょ"]
  ju = ["", "じゅ"]
  jya = ["", "じゃ"]
  jye = ["", "じぇ"]
  jyi = ["", "じぃ"]
  jyo = ["", "じょ"]
  jyu = ["", "じゅ"]
  ka = ["", "か"]
  ke = ["", "け"]
  ki = ["", "き"]
  kk = ["k", "っ"]
  ko = ["", "こ"]
  ku = ["", "く"]
  kya = ["", "きゃ"]
  kye = ["", "きぇ"]
  kyi = ["", "きぃ"]
  kyo = ["", "きょ"]
  kyu = ["", "きゅ"]
  ma = ["", "ま"]
  me = ["", "め"]
  mi = ["", "み"]
  mm = ["m", "っ"]
  mo = ["", "も"]
  "m u" = ["", "む"]
  mya = ["", "みゃ"]
  mye = ["", "みぇ"]
  myi = ["", "みぃ"]
  myo = ["", "みょ"]
  myu = ["", "みゅ"]
  n = ["", "ん"]
  na = ["", "な"]
  ne = ["", "ね"]
  ni = ["", "に"]
  nn = ["", "ん"]
  no = ["", "の"]
  nu = ["", "ぬ"]
  nya = ["", "にゃ"]
  nye = ["", "にぇ"]
  nyi = ["", "にぃ"]
  nyo = ["", "にょ"]
  nyu = ["", "にゅ"]
  "n quotedbl" = ["", "ん"]
  o = ["", "お"]
  pa = ["", "ぱ"]
  pe = ["", "ぺ"]
  pi = ["", "ぴ"]
  po = ["", "ぽ"]
  pp = ["p", "っ"]
  pu = ["", "ぷ"]
  pya = ["", "ぴゃ"]
  pye = ["", "ぴぇ"]
  pyi = ["", "ぴぃ"]
  pyo = ["", "ぴょ"]
  pyu = ["", "ぴゅ"]
  ra = ["", "ら"]
  re = ["", "れ"]
  ri = ["", "り"]
  ro = ["", "ろ"]
  rr = ["r", "っ"]
  ru = ["", "る"]
  rya = ["", "りゃ"]
  rye = ["", "りぇ"]
  ryi = ["", "りぃ"]
  ryo = ["", "りょ"]
  ryu = ["", "りゅ"]
  sa = ["", "さ"]
  se = ["", "せ"]
  sha = ["", "しゃ"]
  she = ["", "しぇ"]
  shi = ["", "し"]
  sho = ["", "しょ"]
  shu = ["", "しゅ"]
  si = ["", "し"]
  so = ["", "そ"]
  ss = ["s", "っ"]
  su = ["", "す"]
  sya = ["", "しゃ"]
  sye = ["", "しぇ"]
  syi = ["", "しぃ"]
  syo = ["", "しょ"]
  syu = ["", "しゅ"]
  ta = ["", "た"]
  te = ["", "て"]
  tha = ["", "てぁ"]
  the = ["", "てぇ"]
  thi = ["", "てぃ"]
  tho = ["", "てょ"]
  thu = ["", "てゅ"]
  ti = ["", "ち"]
  to = ["", "と"]
  tsu = ["", "つ"]
  tt = ["t", "っ"]
  tu = ["", "つ"]
  tya = ["", "ちゃ"]
  tye = ["", "ちぇ"]
  tyi = ["", "ちぃ"]
  tyo = ["", "ちょ"]
  tyu = ["", "ちゅ"]
  u = ["", "う"]
  va = ["", "ゔぁ"]
  ve = ["", "ゔぇ"]
  vi = ["", "ゔぃ"]
  vo = ["", "ゔぉ"]
  vu = ["", "ゔ"]
  vv = ["v", "っ"]
  wa = ["", "わ"]
  we = ["", "うぇ"]
  wi = ["", "うぃ"]
  wo = ["", "を"]
  wu = ["", "う"]
  ww = ["w", "っ"]
  xa = ["", "ぁ"]
  xe = ["", "ぇ"]
  xi = ["", "ぃ"]
  xka = ["", "ゕ"]
  xke = ["", "ゖ"]
  xo = ["", "ぉ"]
  xtsu = ["", "っ"]
  xtu = ["", "っ"]
  xu = ["", "ぅ"]
  xwa = ["", "ゎ"]
  xwe = ["", "ゑ"]
  xwi = ["", "ゐ"]
  xx = ["x", "っ"]
  xya = ["", "ゃ"]
  xyo = ["", "ょ"]
  xyu = ["", "ゅ"]
  ya = ["", "や"]
  ye = ["", "いぇ"]
  yo = ["", "よ"]
  yu = ["", "ゆ"]
  yy = ["y", "っ"]
  "z comma" = ["", "‥"]
  "z period" = ["", "…"]
  "z slash" = ["", "・"]
  "z bracketleft" = ["", "『"]
  "z bracketright" = ["", "』"]
  "z minus" = ["", "〜"]
  za = ["", "ざ"]
  ze = ["", "ぜ"]
  zh = ["", "←"]
  zi = ["", "じ"]
  zj = ["", "↓"]
  zk = ["", "↑"]
  zl = ["", "→"]
  zo = ["", "ぞ"]
  zu = ["", "ず"]
  zya = ["", "じゃ"]
  zye = ["", "じぇ"]
  zyi = ["", "じぃ"]
  zyo = ["", "じょ"]
  zyu = ["", "じゅ"]
  zz = ["z", "っ"]
  
  #
  # command: 各モードのコマンド
  # 各モードごとにコマンドのマッピングをする。
  # keyは1つのKeyEvent
  # 短い前置詞としてC-,A-,M-,G-がそれぞれCtrl,Mod1(Alt)、Meta, Mod5モディファイアとして解釈される。
  # 長い前置詞として()で括った時に"control" | "meta" | "alt" | "lshift" | "rshift" | "shift" がモディファイアとして解釈される。
  # 本体は上記conversionと同じKeysym
  #
  # valueはコマンドの配列。
  # コマンドが未整理でlibskkより煩雑なため、メジャーバージョンアップデートで変える可能性がある。
  #
  # ChangeInputMode(InputMode) - 入力モードを変更する
  # ChangeCompositionMode(CompositionMode) - 変換モードを変更する。
  #
  # ConfirmAs(InputMode) - かな変換のあるInputModeを指定し、漢字変換前のかなをそのモードで入力する.
  # ForceKanaConvert(InputMode) - 未変換の入力を強制的にかな変換して入力する。 (`n`を`ん`,`ン`に入力する)
  # ConfirmDirect - 辞書登録モードの時、現在の入力を確定して入力処理を終える。そうでない場合、cskkでは何もせず、入力処理も終えない。
  #
  # ClearUnconvertedInputs - かな変換前の入力を全て消す。
  # ClearKanaConvertedInputs - 漢字変換前の入力を全て消す。
  # ClearUnconfirmedInputs - 未確定入力を全て消す。
  # Delete - 一文字消す。消せた場合のみ入力処理を終える。
  #
  # ConfirmComposition - 現在の変換候補で確定する。確定できた場合、CompositionModeはDirectに戻る。
  # TryNextCandidate - 次の変換候補を選択する。候補がないと辞書登録モードに移る。
  # TryPreviousCandidate - 前の変換候補を選択する。候補がないと変換前モードに戻る。
  # NextCandidatePointer - 次の変換候補を選択する。候補がないと何もしない。
  # PreviousCandidatePointer - 前の変換候補を選択する。候補がないと何もしない。
  # Purge - 現在選択している変換候補を消去する。
  # Abort - 現在の変換を中止し、直前のモードに戻る。
  #
  # TryNextCompletion - 次の補完候補を選択する。候補がない場合モード変更等なく何もしない。
  # TryPreviousCompletion- 前の補完候補を選択する。候補がない場合モード変更等なく何もしない。
  #
  # FinishKeyEvent - コマンドで処理がない場合に明示的にCSKKで入力処理を終える。(IME実装に依るが、アプリケーション等にキーを渡さない)
  # PassthroughKeyEvent - コマンドで処理があっても明示的に入力処理を終えない。(IME実装に依るが、アプリケーション等にキーを渡す。)
  
  # InputMode := (Hiragana|Katakana|HankakuKatakana|Zenkaku|Ascii)
  # CompositionMode := (Direct|PreComposition|PreCompositionOkurigana|CompositionSelection|Abbreviation|Register|Completion)
  
  [command]
  # Hiraganaモード時のコマンド
  [direct.hiragana]
  "l" = ["ForceKanaConvert(Hiragana)", "ChangeInputMode(Ascii)", "ClearUnconfirmedInputs"]
  "L" = ["ForceKanaConvert(Hiragana)", "ChangeInputMode(Zenkaku)", "ClearUnconfirmedInputs"]
  "C-q" = ["ForceKanaConvert(Hiragana)", "ChangeInputMode(HankakuKatakana)", "ClearUnconfirmedInputs"]
  "q" = ["ForceKanaConvert(Hiragana)", "ChangeInputMode(Katakana)", "ClearUnconfirmedInputs"]
  "Q" = ["ChangeCompositionMode(PreComposition)"]
  "C-j" = ["FinishKeyEvent"]
  "C-g" = ["Abort"]
  "C-G" = ["Abort"]
  "Return" = ["ConfirmDirect"]
  "C-m" = ["ConfirmDirect"]
  "BackSpace" = ["Delete"]
  "C-h" = ["Delete"]
  "C-H" = ["Delete"]
  "slash" = ["ChangeCompositionMode(Abbreviation)"]
  # Katakanaモード時のコマンド
  [direct.katakana]
  "l" = ["ForceKanaConvert(Katakana)", "ChangeInputMode(Ascii)", "ClearUnconfirmedInputs"]
  "L" = ["ForceKanaConvert(Katakana)", "ChangeInputMode(Zenkaku)", "ClearUnconfirmedInputs"]
  "C-q" = ["ForceKanaConvert(Hiragana)", "ChangeInputMode(HankakuKatakana)", "ClearUnconfirmedInputs"]
  "q" = ["ForceKanaConvert(Katakana)", "ChangeInputMode(Hiragana)", "ClearUnconfirmedInputs"]
  "Q" = ["ChangeCompositionMode(PreComposition)"]
  "C-j" = ["FinishKeyEvent"]
  "C-g" = ["Abort"]
  "C-G" = ["Abort"]
  "Return" = ["ConfirmDirect"]
  "C-m" = ["ConfirmDirect"]
  "BackSpace" = ["Delete"]
  "C-h" = ["Delete"]
  "C-H" = ["Delete"]
  "slash" = ["ChangeCompositionMode(Abbreviation)"]
  # 半角カナ(JIS X 0201 カナ)モード時のコマンド
  [direct.hankakukatakana]
  "l" = ["ForceKanaConvert(HankakuKatakana)", "ChangeInputMode(Ascii)", "ClearUnconfirmedInputs"]
  "L" = ["ForceKanaConvert(HankakuKatakana)", "ChangeInputMode(Zenkaku)", "ClearUnconfirmedInputs"]
  "C-q" = ["ForceKanaConvert(HankakuKatakana)", "ChangeInputMode(Katakana)", "ClearUnconfirmedInputs"]
  "q" = ["ForceKanaConvert(HankakuKatakana)", "ChangeInputMode(Hiragana)", "ClearUnconfirmedInputs"]
  "Q" = ["ChangeCompositionMode(PreComposition)"]
  "C-j" = ["FinishKeyEvent"]
  "C-g" = ["Abort"]
  "C-G" = ["Abort"]
  "Return" = ["ConfirmDirect"]
  "C-m" = ["ConfirmDirect"]
  "BackSpace" = ["Delete"]
  "C-h" = ["Delete"]
  "C-H" = ["Delete"]
  "slash" = ["ChangeCompositionMode(Abbreviation)"]
  # 全角英数モード時のコマンド
  [direct.zenkaku]
  "C-g" = ["Abort"]
  "C-j" = ["ChangeInputMode(Hiragana)"]
  "Return" = ["ConfirmDirect"]
  "C-m" = ["ConfirmDirect"]
  "BackSpace" = ["Delete"]
  "C-h" = ["Delete"]
  "C-H" = ["Delete"]
  # asciiモードという名称はddskk由来。いわゆるlatinモードでのコマンド
  [direct.ascii]
  "C-g" = ["Abort"]
  "C-j" = ["ChangeInputMode(Hiragana)"]
  "Return" = ["ConfirmDirect"]
  "C-m" = ["ConfirmDirect"]
  "BackSpace" = ["Delete"]
  "C-h" = ["Delete"]
  "C-H" = ["Delete"]
  
  [pre_composition.hiragana]
  "space" = ["TryNextCandidate"]
  "q" = ["ForceKanaConvert(Katakana)", "ConfirmAs(Katakana)", "ChangeCompositionMode(Direct)"]
  "Q" = ["FinishKeyEvent"]
  "C-q" = ["ConfirmAs(HankakuKatakana)", "ChangeCompositionMode(Direct)"]
  "C-g" = ["ClearUnconfirmedInputs", "Abort"]
  "C-j" = ["ForceKanaConvert(Hiragana)", "ConfirmAs(Hiragana)", "ChangeCompositionMode(Direct)"]
  "BackSpace" = ["Delete"]
  "C-h" = ["Delete"]
  "Tab" = ["TryNextCompletion"]
  [pre_composition.katakana]
  "space" = ["TryNextCandidate"]
  "q" = ["ForceKanaConvert(Hiragana)", "ConfirmAs(Hiragana)", "ChangeCompositionMode(Direct)"]
  "Q" = ["FinishKeyEvent"]
  "C-q" = ["ConfirmAs(HankakuKatakana)", "ChangeCompositionMode(Direct)"]
  "C-g" = ["ClearUnconfirmedInputs", "Abort"]
  "C-j" = ["ForceKanaConvert(Katakana)", "ConfirmAs(Katakana)", "ChangeCompositionMode(Direct)"]
  "BackSpace" = ["Delete"]
  "C-h" = ["Delete"]
  "Tab" = ["TryNextCompletion"]
  [pre_composition.hankakukatakana]
  "space" = ["TryNextCandidate"]
  "q" = ["ForceKanaConvert(Hiragana)", "ConfirmAs(Hiragana)", "ChangeCompositionMode(Direct)"]
  "Q" = ["FinishKeyEvent"]
  "C-q" = ["ConfirmAs(Katakana)", "ChangeCompositionMode(Direct)"]
  "C-g" = ["ClearUnconfirmedInputs", "Abort"]
  "C-j" = ["ForceKanaConvert(HankakuKatakana)", "ConfirmAs(HankakuKatakana)", "ChangeCompositionMode(Direct)"]
  "BackSpace" = ["Delete"]
  "C-h" = ["Delete"]
  "Tab" = ["TryNextCompletion"]
  
  [pre_compisition_okurigana.hiragana]
  "space" = ["TryNextCandidate"]
  "q" = ["ForceKanaConvert(Katakana)", "ConfirmAs(Katakana)", "ChangeCompositionMode(Direct)"]
  "Q" = ["FinishKeyEvent"]
  "C-q" = ["ConfirmAs(HankakuKatakana)", "ChangeCompositionMode(Direct)"]
  "C-g" = ["ClearUnconfirmedInputs", "Abort"]
  "C-j" = ["ForceKanaConvert(Hiragana)", "ConfirmAs(Hiragana)", "ChangeCompositionMode(Direct)"]
  "BackSpace" = ["Delete"]
  "C-h" = ["Delete"]
  [pre_compisition_okurigana.katakana]
  "space" = ["TryNextCandidate"]
  "q" = ["ForceKanaConvert(Hiragana)", "ConfirmAs(Hiragana)", "ChangeCompositionMode(Direct)"]
  "Q" = ["FinishKeyEvent"]
  "C-q" = ["ConfirmAs(HankakuKatakana)", "ChangeCompositionMode(Direct)"]
  "C-g" = ["ClearUnconfirmedInputs", "Abort"]
  "C-j" = ["ForceKanaConvert(Katakana)", "ConfirmAs(Katakana)", "ChangeCompositionMode(Direct)"]
  "BackSpace" = ["Delete"]
  "C-h" = ["Delete"]
  [pre_compisition_okurigana.hankakukatakana]
  "space" = ["TryNextCandidate"]
  "q" = ["ForceKanaConvert(Hiragana)", "ConfirmAs(Hiragana)", "ChangeCompositionMode(Direct)"]
  "Q" = ["FinishKeyEvent"]
  "C-q" = ["ConfirmAs(Katakana)", "ChangeCompositionMode(Direct)"]
  "C-g" = ["ClearUnconfirmedInputs", "Abort"]
  "C-j" = ["ForceKanaConvert(HankakuKatakana)", "ConfirmAs(HankakuKatakana)", "ChangeCompositionMode(Direct)"]
  "BackSpace" = ["Delete"]
  "C-h" = ["Delete"]
  
  [abbreviation.hiragana]
  "space" = ["TryNextCandidate"]
  "BackSpace" = ["Delete"]
  "C-h" = ["Delete"]
  "C-j" = ["ConfirmAs(Ascii)", "ChangeCompositionMode(Direct)"]
  "C-q" = ["ConfirmAs(Zenkaku)", "ChangeCompositionMode(Direct)"]
  "Tab" = ["TryNextCompletion"]
  [abbreviation.katakana]
  "space" = ["TryNextCandidate"]
  "BackSpace" = ["Delete"]
  "C-h" = ["Delete"]
  "C-j" = ["ConfirmAs(Ascii)", "ChangeCompositionMode(Direct)"]
  "C-q" = ["ConfirmAs(Zenkaku)", "ChangeCompositionMode(Direct)"]
  "Tab" = ["TryNextCompletion"]
  [abbreviation.hankakukatakana]
  "space" = ["TryNextCandidate"]
  "BackSpace" = ["Delete"]
  "C-h" = ["Delete"]
  "C-j" = ["ConfirmAs(Ascii)", "ChangeCompositionMode(Direct)"]
  "C-q" = ["ConfirmAs(Zenkaku)", "ChangeCompositionMode(Direct)"]
  "Tab" = ["TryNextCompletion"]
  
  [composition_selection.hiragana]
  "Return" = ["ConfirmComposition"]
  "C-j" = ["ConfirmComposition"]
  "Escape" = ["Abort"]
  "C-g" = ["Abort"]
  "X" = ["Purge", "ChangeCompositionMode(Direct)"]
  "space" = ["TryNextCandidate"]
  "x" = ["TryPreviousCandidate"]
  "BackSpace" = ["ConfirmComposition", "Delete"]
  "C-h" = ["ConfirmComposition", "Delete"]
  "q" = ["ConfirmComposition", "ChangeInputMode(Katakana)"]
  "C-q" = ["ConfirmComposition", "ChangeInputMode(HankakuKatakana)"]
  "l" = ["ConfirmComposition", "ChangeInputMode(Ascii)"]
  "L" = ["ConfirmComposition", "ChangeInputMode(Zenkaku)"]
  [composition_selection.katakana]
  "Return" = ["ConfirmComposition", "ChangeCompositionMode(Direct)"]
  "C-j" = ["ConfirmComposition", "ChangeCompositionMode(Direct)"]
  "Escape" = ["Abort"]
  "C-g" = ["Abort"]
  "X" = ["Purge", "ChangeCompositionMode(Direct)"]
  "space" = ["TryNextCandidate"]
  "x" = ["TryPreviousCandidate"]
  "BackSpace" = ["ConfirmComposition", "Delete"]
  "C-h" = ["ConfirmComposition", "Delete"]
  "q" = ["ConfirmComposition", "ChangeInputMode(Hiragana)"]
  "C-q" = ["ConfirmComposition", "ChangeInputMode(HankakuKatakana)"]
  "l" = ["ConfirmComposition", "ChangeInputMode(Ascii)"]
  "L" = ["ConfirmComposition", "ChangeInputMode(Zenkaku)"]
  [composition_selection.hankakukatakana]
  "Return" = ["ConfirmComposition", "ChangeCompositionMode(Direct)"]
  "C-j" = ["ConfirmComposition", "ChangeCompositionMode(Direct)"]
  "Escape" = ["Abort"]
  "C-g" = ["Abort"]
  "X" = ["Purge", "ChangeCompositionMode(Direct)"]
  "space" = ["TryNextCandidate"]
  "x" = ["TryPreviousCandidate"]
  "BackSpace" = ["ConfirmComposition", "Delete"]
  "C-h" = ["ConfirmComposition", "Delete"]
  "q" = ["ConfirmComposition", "ChangeInputMode(Hiragana)"]
  "C-q" = ["ConfirmComposition", "ChangeInputMode(Katakana)"]
  "l" = ["ConfirmComposition", "ChangeInputMode(Ascii)"]
  "L" = ["ConfirmComposition", "ChangeInputMode(Zenkaku)"]
  
  [completion.hiragana]
  "Return" = ["ConfirmComposition"]
  "C-j" = ["ConfirmComposition"]
  "Tab" = ["NextCandidatePointer"]
  "period" = ["NextCandidatePointer"]
  "(shift Tab)" = ["PreviousCandidatePointer"]
  "comma" = ["PreviousCandidatePointer"]
  "C-g" = ["Abort"]
  "Escape" = ["Abort"]
  "BackSpace" = ["ConfirmComposition", "Delete"]
  [completion.katakana]
  "Return" = ["ConfirmComposition"]
  "C-j" = ["ConfirmComposition"]
  "Tab" = ["NextCandidatePointer"]
  "period" = ["NextCandidatePointer"]
  "(shift Tab)" = ["PreviousCandidatePointer"]
  "comma" = ["PreviousCandidatePointer"]
  "C-g" = ["Abort"]
  "Escape" = ["Abort"]
  "BackSpace" = ["ConfirmComposition", "Delete"]
  [completion.hankakukatakana]
  "Return" = ["ConfirmComposition"]
  "C-j" = ["ConfirmComposition"]
  "Tab" = ["NextCandidatePointer"]
  "period" = ["NextCandidatePointer"]
  "(shift Tab)" = ["PreviousCandidatePointer"]
  "comma" = ["PreviousCandidatePointer"]
  "C-g" = ["Abort"]
  "Escape" = ["Abort"]
  "BackSpace" = ["ConfirmComposition", "Delete"]