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
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.



110
111
112
113
114
115
116
117
118
119
120
121
122
123
# File 'lib/textbringer/input_methods/skk_input_method.rb', line 110

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



134
135
136
137
# File 'lib/textbringer/input_methods/skk_input_method.rb', line 134

def disable
  super
  reset_cursor_color
end

#handle_event(event) ⇒ Object



149
150
151
152
153
154
155
# File 'lib/textbringer/input_methods/skk_input_method.rb', line 149

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



139
140
141
142
143
144
145
146
147
# File 'lib/textbringer/input_methods/skk_input_method.rb', line 139

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

#toggleObject



125
126
127
128
129
130
131
132
# File 'lib/textbringer/input_methods/skk_input_method.rb', line 125

def toggle
  super
  if @enabled
    update_cursor_color
  else
    reset_cursor_color
  end
end