Class: Textbringer::SkkInputMethod

Inherits:
InputMethod show all
Defined in:
lib/textbringer/input_methods/skk_input_method.rb

Constant Summary collapse

HIRAGANA_TABLE =
{
  "a" => "あ", "i" => "い", "u" => "う", "e" => "え", "o" => "お",
  "ka" => "か", "ki" => "き", "ku" => "く", "ke" => "け", "ko" => "こ",
  "ga" => "が", "gi" => "ぎ", "gu" => "ぐ", "ge" => "げ", "go" => "ご",
  "sa" => "さ", "si" => "し", "su" => "す", "se" => "せ", "so" => "そ",
  "za" => "ざ", "zi" => "じ", "zu" => "ず", "ze" => "ぜ", "zo" => "ぞ",
  "sha" => "しゃ", "shi" => "し", "shu" => "しゅ", "she" => "しぇ", "sho" => "しょ",
  "ja" => "じゃ", "ji" => "じ", "ju" => "じゅ", "je" => "じぇ", "jo" => "じょ",
  "ta" => "た", "ti" => "ち", "tu" => "つ", "te" => "て", "to" => "と",
  "da" => "だ", "di" => "ぢ", "du" => "づ", "de" => "で", "do" => "ど",
  "cha" => "ちゃ", "chi" => "ち", "chu" => "ちゅ", "che" => "ちぇ", "cho" => "ちょ",
  "na" => "な", "ni" => "に", "nu" => "ぬ", "ne" => "ね", "no" => "の",
  "ha" => "は", "hi" => "ひ", "hu" => "ふ", "he" => "へ", "ho" => "ほ",
  "ba" => "ば", "bi" => "び", "bu" => "ぶ", "be" => "べ", "bo" => "ぼ",
  "pa" => "ぱ", "pi" => "ぴ", "pu" => "ぷ", "pe" => "ぺ", "po" => "ぽ",
  "ma" => "ま", "mi" => "み", "mu" => "む", "me" => "め", "mo" => "も",
  "ya" => "や", "yi" => "い", "yu" => "ゆ", "ye" => "いぇ", "yo" => "よ",
  "ra" => "ら", "ri" => "り", "ru" => "る", "re" => "れ", "ro" => "ろ",
  "wa" => "わ", "wi" => "ゐ", "wu" => "う", "we" => "ゑ", "wo" => "を",
  "nn" => "ん",
  "kya" => "きゃ", "kyi" => "きぃ", "kyu" => "きゅ", "kye" => "きぇ", "kyo" => "きょ",
  "gya" => "ぎゃ", "gyi" => "ぎぃ", "gyu" => "ぎゅ", "gye" => "ぎぇ", "gyo" => "ぎょ",
  "sya" => "しゃ", "syi" => "しぃ", "syu" => "しゅ", "sye" => "しぇ", "syo" => "しょ",
  "zya" => "じゃ", "zyi" => "じぃ", "zyu" => "じゅ", "zye" => "じぇ", "zyo" => "じょ",
  "tya" => "ちゃ", "tyi" => "ちぃ", "tyu" => "ちゅ", "tye" => "ちぇ", "tyo" => "ちょ",
  "dya" => "ぢゃ", "dyi" => "ぢぃ", "dyu" => "ぢゅ", "dye" => "ぢぇ", "dyo" => "ぢょ",
  "nya" => "にゃ", "nyi" => "にぃ", "nyu" => "にゅ", "nye" => "にぇ", "nyo" => "にょ",
  "hya" => "ひゃ", "hyi" => "ひぃ", "hyu" => "ひゅ", "hye" => "ひぇ", "hyo" => "ひょ",
  "bya" => "びゃ", "byi" => "びぃ", "byu" => "びゅ", "bye" => "びぇ", "byo" => "びょ",
  "pya" => "ぴゃ", "pyi" => "ぴぃ", "pyu" => "ぴゅ", "pye" => "ぴぇ", "pyo" => "ぴょ",
  "mya" => "みゃ", "myi" => "みぃ", "myu" => "みゅ", "mye" => "みぇ", "myo" => "みょ",
  "rya" => "りゃ", "ryi" => "りぃ", "ryu" => "りゅ", "rye" => "りぇ", "ryo" => "りょ",
  "fa" => "ふぁ", "fi" => "ふぃ", "fu" => "ふ", "fe" => "ふぇ", "fo" => "ふぉ",
  "va" => "ヴぁ", "vi" => "ヴぃ", "vu" => "ヴ", "ve" => "ヴぇ", "vo" => "ヴぉ",
  "tsa" => "つぁ", "tsi" => "つぃ", "tse" => "つぇ", "tso" => "つぉ",
  "la" => "ぁ", "li" => "ぃ", "lu" => "ぅ", "le" => "ぇ", "lo" => "ぉ",
  "lya" => "ゃ", "lyu" => "ゅ", "lyo" => "ょ",
  "lka" => "ヵ", "lke" => "ヶ",
  "xtu" => "っ", "xtsu" => "っ",
  "xya" => "ゃ", "xyu" => "ゅ", "xyo" => "ょ",
  "xa" => "ぁ", "xi" => "ぃ", "xu" => "ぅ", "xe" => "ぇ", "xo" => "ぉ",
  "," => "、", "." => "。",
}
HIRAGANA_PREFIXES =
HIRAGANA_TABLE.keys.flat_map { |s|
  (s.size - 1).times.map { |i| s[0, i + 1] }
}.uniq
KATAKANA_TABLE =
HIRAGANA_TABLE.transform_values { |v|
  v.chars.map { |c|
    c.ord.between?(0x3041, 0x3096) ? (c.ord + 0x60).chr("UTF-8") : c
  }.join
}
HANKAKU_KATAKANA_TABLE =
{
  "a" => "ア", "i" => "イ", "u" => "ウ", "e" => "エ", "o" => "オ",
  "ka" => "カ", "ki" => "キ", "ku" => "ク", "ke" => "ケ", "ko" => "コ",
  "ga" => "ガ", "gi" => "ギ", "gu" => "グ", "ge" => "ゲ", "go" => "ゴ",
  "sa" => "サ", "si" => "シ", "su" => "ス", "se" => "セ", "so" => "ソ",
  "za" => "ザ", "zi" => "ジ", "zu" => "ズ", "ze" => "ゼ", "zo" => "ゾ",
  "sha" => "シャ", "shi" => "シ", "shu" => "シュ", "she" => "シェ", "sho" => "ショ",
  "ja" => "ジャ", "ji" => "ジ", "ju" => "ジュ", "je" => "ジェ", "jo" => "ジョ",
  "ta" => "タ", "ti" => "チ", "tu" => "ツ", "te" => "テ", "to" => "ト",
  "da" => "ダ", "di" => "ヂ", "du" => "ヅ", "de" => "デ", "do" => "ド",
  "cha" => "チャ", "chi" => "チ", "chu" => "チュ", "che" => "チェ", "cho" => "チョ",
  "na" => "ナ", "ni" => "ニ", "nu" => "ヌ", "ne" => "ネ", "no" => "ノ",
  "ha" => "ハ", "hi" => "ヒ", "hu" => "フ", "he" => "ヘ", "ho" => "ホ",
  "ba" => "バ", "bi" => "ビ", "bu" => "ブ", "be" => "ベ", "bo" => "ボ",
  "pa" => "パ", "pi" => "ピ", "pu" => "プ", "pe" => "ペ", "po" => "ポ",
  "ma" => "マ", "mi" => "ミ", "mu" => "ム", "me" => "メ", "mo" => "モ",
  "ya" => "ヤ", "yu" => "ユ", "yo" => "ヨ",
  "ra" => "ラ", "ri" => "リ", "ru" => "ル", "re" => "レ", "ro" => "ロ",
  "wa" => "ワ", "wo" => "ヲ",
  "nn" => "ン",
  "kya" => "キャ", "kyu" => "キュ", "kyo" => "キョ",
  "gya" => "ギャ", "gyu" => "ギュ", "gyo" => "ギョ",
  "sya" => "シャ", "syu" => "シュ", "syo" => "ショ",
  "zya" => "ジャ", "zyu" => "ジュ", "zyo" => "ジョ",
  "tya" => "チャ", "tyu" => "チュ", "tyo" => "チョ",
  "dya" => "ヂャ", "dyu" => "ヂュ", "dyo" => "ヂョ",
  "nya" => "ニャ", "nyu" => "ニュ", "nyo" => "ニョ",
  "hya" => "ヒャ", "hyu" => "ヒュ", "hyo" => "ヒョ",
  "bya" => "ビャ", "byu" => "ビュ", "byo" => "ビョ",
  "pya" => "ピャ", "pyu" => "ピュ", "pyo" => "ピョ",
  "mya" => "ミャ", "myu" => "ミュ", "myo" => "ミョ",
  "rya" => "リャ", "ryu" => "リュ", "ryo" => "リョ",
  "fa" => "ファ", "fi" => "フィ", "fu" => "フ", "fe" => "フェ", "fo" => "フォ",
  "," => "、", "." => "。",
}
HANKAKU_KATAKANA_PREFIXES =
HANKAKU_KATAKANA_TABLE.keys.flat_map { |s|
  (s.size - 1).times.map { |i| s[0, i + 1] }
}.uniq
DICTIONARY_PATH =
File.expand_path("~/.textbringer/skk/SKK-JISYO.L")
DEFAULT_CURSOR_COLORS =
{
  hiragana:         "pink",
  katakana:         "green",
  hankaku_katakana: "blue",
  zenkaku_ascii:    "yellow",
  ascii:            nil,    # nil = reset to terminal default
}

Constants included from Commands

Commands::CLIPBOARD_AVAILABLE, Commands::COMPLETION_POPUP_STATUS, Commands::CTAGS, Commands::EMAIL_REGEXP, Commands::HELP_RING, Commands::ISEARCH_STATUS, Commands::ISPELL_STATUS, Commands::ISPELL_WORD_REGEXP, Commands::KEYBOARD_MACROS, Commands::LSP_DOCUMENT_VERSIONS, Commands::LSP_STATUS, Commands::REGISTERS, Commands::RE_SEARCH_STATUS, Commands::URI_REGEXP

Constants included from Utils

Utils::COMPLETION, Utils::EXPRESSION_COMPLETOR, Utils::EXPRESSION_COMPLETOR_OPTIONS, Utils::HOOKS

Instance Method Summary collapse

Methods inherited from InputMethod

#enabled?, #filter_event, find, inherited, list, #with_target_buffer

Methods included from Commands

[], #buffer_uri, #command_help, command_table, #completion_popup_done, completion_popup_mode_active?, #completion_popup_pre_command_hook, #completion_popup_start, #current_prefix_arg, define_command, #ensure_ispell_active, #execute_keyboard_macro, #get_tags, #insert_completion, #isearch_done, #isearch_mode, #isearch_mode?, #isearch_pre_command_hook, #isearch_prompt, #isearch_repeat, #isearch_repeat_backward, #isearch_repeat_forward, #isearch_search, #ispell_done, #ispell_forward, #ispell_mode, #keymap_bindings, list, #lsp_after_set_visited_file_name_hook, #lsp_close_signature_window, #lsp_completion_context, #lsp_find_file_hook, #lsp_open_document, #lsp_position, #lsp_setup_buffer_hooks, #lsp_show_signature_window, #lsp_signature_pre_command_hook, #lsp_text_document_sync_kind, #lsp_utf16_length, #match_beginning, #match_end, #match_string, #message_misspelled, #number_prefix_arg, #prefix_numeric_value, #read_input_method_name, #read_keyboard_macro, #read_register, #replace_match, undefine_command, #universal_argument_mode

Methods included from Utils

add_hook, background, complete_for_minibuffer, delete_completions_window, foreground, foreground!, get_hooks, message, read_buffer, read_char, read_command_name, read_encoding, read_event, read_expression, read_file_name, read_from_minibuffer, read_key_sequence, read_object, read_single_char, received_keyboard_quit?, remove_hook, ruby_install_name, run_hooks, run_hooks_in, self_insert_and_exit_minibuffer, set_transient_map, show_exception, sit_for, sleep_for, y_or_n?, yes_or_no?

Constructor Details

#initializeSkkInputMethod

Returns a new instance of SkkInputMethod.



107
108
109
110
111
112
113
114
115
116
117
118
119
120
# File 'lib/textbringer/input_methods/skk_input_method.rb', line 107

def initialize
  super
  @mode = :hiragana  # :hiragana | :katakana | :hankaku_katakana | :zenkaku_ascii | :ascii
  @phase = :normal   # :normal | :converting | :selecting
  @roman_buffer = +""
  @yomi = +""
  @okuri_roman = nil
  @okuri_kana = nil
  @candidates = []
  @candidate_index = 0
  @marker_pos = nil
  @okuriiari = nil
  @okurinasi = nil
end

Instance Method Details

#disableObject



131
132
133
134
# File 'lib/textbringer/input_methods/skk_input_method.rb', line 131

def disable
  super
  reset_cursor_color
end

#handle_event(event) ⇒ Object



146
147
148
149
150
151
152
# File 'lib/textbringer/input_methods/skk_input_method.rb', line 146

def handle_event(event)
  case @phase
  when :normal     then handle_normal(event)
  when :converting then handle_converting(event)
  when :selecting  then handle_selecting(event)
  end
end

#statusObject



136
137
138
139
140
141
142
143
144
# File 'lib/textbringer/input_methods/skk_input_method.rb', line 136

def status
  case @phase
  when :converting then "▽"
  when :selecting  then "▼"
  else
    { hiragana: "あ", katakana: "ア", hankaku_katakana: "ア",
      zenkaku_ascii: "A", ascii: "A" }[@mode]
  end
end

#toggleObject



122
123
124
125
126
127
128
129
# File 'lib/textbringer/input_methods/skk_input_method.rb', line 122

def toggle
  super
  if @enabled
    update_cursor_color
  else
    reset_cursor_color
  end
end