2
0
mirror of https://github.com/koreader/koreader synced 2024-11-16 06:12:56 +00:00
koreader/frontend/ui/data/keyboardlayouts/zh_CN_keyboard.lua

160 lines
5.1 KiB
Lua
Raw Normal View History

local IME = require("frontend/ui/data/keyboardlayouts/generic_ime")
local util = require("util")
local _ = require("gettext")
-- Start with the english keyboard layout (deep copy, to not alter it)
local py_keyboard = require("util").tableDeepCopy(require("ui/data/keyboardlayouts/en_keyboard"))
local SETTING_NAME = "keyboard_chinese_pinyin_settings"
local code_map = require("frontend/ui/data/keyboardlayouts/zh_pinyin_data")
local settings = G_reader_settings:readSetting(SETTING_NAME, {show_candi=true})
local ime = IME:new {
code_map = code_map,
partial_separators = {" "},
show_candi_callback = function()
return settings.show_candi
end,
switch_char = "",
switch_char_prev = "",
}
py_keyboard.keys[4][3][2].alt_label = nil
py_keyboard.keys[4][3][1].alt_label = nil
py_keyboard.keys[3][10][2] = {
"",
north = "",
alt_label = "",
northeast = "",
northwest = "",
east = "",
west = "",
south = ",",
southeast = "",
southwest = "",
"{",
"[",
";"
}
py_keyboard.keys[5][3][2] = {
"",
north = "",
alt_label = "",
northeast = "",
northwest = "",
east = "",
west = "",
south = ".",
southeast = "",
southwest = "",
"}",
"]",
":"
}
py_keyboard.keys[1][2][3] = { alt_label = "", north = "", "" }
py_keyboard.keys[1][3][3] = { alt_label = "", north = "", "" }
py_keyboard.keys[1][1][4] = { alt_label = "!", north = "!", ""}
py_keyboard.keys[2][1][4] = { alt_label = "?", north = "?", ""}
py_keyboard.keys[1][2][4] = ""
py_keyboard.keys[2][2][4] = "——"
py_keyboard.keys[1][4][3] = { alt_label = "", north = "", "" }
py_keyboard.keys[1][5][3] = { alt_label = "", north = "", "" }
py_keyboard.keys[1][4][4] = { alt_label = "¥", north = "¥", "_" }
py_keyboard.keys[3][3][4] = ""
py_keyboard.keys[3][4][4] = ""
py_keyboard.keys[4][4][3] = ""
py_keyboard.keys[4][5][3] = ""
local genMenuItems = function(self)
return {
{
text = _("Show character candidates"),
checked_func = function()
return settings.show_candi
end,
callback = function()
settings.show_candi = not settings.show_candi
G_reader_settings:saveSetting(SETTING_NAME, settings)
end
}
}
end
local wrappedAddChars = function(inputbox, char)
ime:wrappedAddChars(inputbox, char)
end
local wrappedRightChar = function(inputbox)
if ime:hasCandidates() then
ime:wrappedAddChars(inputbox, "")
else
ime:separate(inputbox)
inputbox.rightChar:raw_method_call()
end
end
local wrappedLeftChar = function(inputbox)
if ime:hasCandidates() then
ime:wrappedAddChars(inputbox, "")
else
ime:separate(inputbox)
inputbox.leftChar:raw_method_call()
end
end
local function separate(inputbox)
ime:separate(inputbox)
end
local function wrappedDelChar(inputbox)
ime:wrappedDelChar(inputbox)
end
local function clear_stack()
ime:clear_stack()
end
local wrapInputBox = function(inputbox)
if inputbox._py_wrapped == nil then
inputbox._py_wrapped = true
local wrappers = {}
-- Wrap all of the navigation and non-single-character-input keys with
-- a callback to finish (separate) the input status, but pass through to the
-- original function.
-- -- Delete text.
table.insert(wrappers, util.wrapMethod(inputbox, "delChar", wrappedDelChar, nil))
table.insert(wrappers, util.wrapMethod(inputbox, "delToStartOfLine", nil, clear_stack))
table.insert(wrappers, util.wrapMethod(inputbox, "clear", nil, clear_stack))
-- -- Navigation.
table.insert(wrappers, util.wrapMethod(inputbox, "upLine", nil, separate))
table.insert(wrappers, util.wrapMethod(inputbox, "downLine", nil, separate))
-- -- Move to other input box.
table.insert(wrappers, util.wrapMethod(inputbox, "unfocus", nil, separate))
table.insert(wrappers, util.wrapMethod(inputbox, "onCloseKeyboard", nil, separate))
-- -- Gestures to move cursor.
table.insert(wrappers, util.wrapMethod(inputbox, "onTapTextBox", nil, separate))
table.insert(wrappers, util.wrapMethod(inputbox, "onHoldTextBox", nil, separate))
table.insert(wrappers, util.wrapMethod(inputbox, "onSwipeTextBox", nil, separate))
table.insert(wrappers, util.wrapMethod(inputbox, "addChars", wrappedAddChars, nil))
table.insert(wrappers, util.wrapMethod(inputbox, "leftChar", wrappedLeftChar, nil))
table.insert(wrappers, util.wrapMethod(inputbox, "rightChar", wrappedRightChar, nil))
return function()
if inputbox._py_wrapped then
for _, wrapper in ipairs(wrappers) do
wrapper:revert()
end
inputbox._py_wrapped = nil
end
end
end
end
py_keyboard.wrapInputBox = wrapInputBox
py_keyboard.genMenuItems = genMenuItems
py_keyboard.keys[5][4].label = "空格"
return py_keyboard