Skip to content

Commit

Permalink
feat: 見出し語入力モードでの削除処理を追加
Browse files Browse the repository at this point in the history
  • Loading branch information
emanon001 committed Feb 11, 2023
1 parent 103ec9f commit 90ebe95
Show file tree
Hide file tree
Showing 2 changed files with 144 additions and 7 deletions.
43 changes: 36 additions & 7 deletions src/Skk.elm
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import Html.Attributes exposing (default)
import Regex
import SkkDict
import SkkKanaRule
import String exposing (dropRight)


type alias Skk =
Expand Down Expand Up @@ -222,11 +223,11 @@ updateKanaKakuteiInputMode isHiragana kakutei convertValue context inputKey =

else if isBackSpaceKey inputKey then
-- 削除
if String.isEmpty convertValue.mikakutei then
buildKanaMode (String.dropRight 1 kakutei) (buildKakuteiMode convertValue.mikakutei)

else
buildKanaMode kakutei (buildKakuteiMode (String.dropRight 1 convertValue.mikakutei))
let
( newKakutei, newMikakutei ) =
deleteInputChar kakutei convertValue.mikakutei
in
buildKanaMode newKakutei (buildKakuteiMode newMikakutei)

else
-- ignore
Expand Down Expand Up @@ -294,8 +295,23 @@ updateMidashiInputMode isHiragana kakutei convertValue context inputKey =
default

else if isBackSpaceKey inputKey then
-- TDOO: 削除
default
-- 削除
-- ▽ねこ + BS → ▽ね
-- ▽はし*r + BS → ▽はし
-- ▽はし*っt + BS → ▽はし*っ
if isConvertingMidashi then
let
( newKakutei, newMikakutei ) =
deleteInputChar convertValue.midashi.kakutei convertValue.midashi.mikakutei
in
buildKanaMode kakutei (MidashiInputMode { convertValue | midashi = { kakutei = newKakutei, mikakutei = newMikakutei } })

else
let
( newKakutei, newMikakutei ) =
deleteInputChar convertValue.okuri.kakutei convertValue.okuri.mikakutei
in
buildKanaMode kakutei (MidashiInputMode { convertValue | okuri = { kakutei = newKakutei, mikakutei = newMikakutei } })

else
-- ignore
Expand Down Expand Up @@ -333,6 +349,19 @@ convertToKana isHiragana currentKey addtionalKey rules =



-- delete char


deleteInputChar : String -> String -> ( String, String )
deleteInputChar kakutei mikakutei =
if String.isEmpty mikakutei then
( dropRight 1 kakutei, mikakutei )

else
( kakutei, dropRight 1 mikakutei )



-- key check functions
-- ref. https://developer.mozilla.org/en-US/docs/Web/API/UI_Events/Keyboard_event_key_values

Expand Down
108 changes: 108 additions & 0 deletions tests/SkkTests.elm
Original file line number Diff line number Diff line change
Expand Up @@ -360,6 +360,114 @@ suite =
}
)
(Skk.update skk key).mode
, test "未確定の見出し語が存在しない場合、BSキーを入力すると確定済みの見出し語が削除されること" <|
\_ ->
let
midashi =
{ kakutei = "ねこ", mikakutei = "" }

okuri =
initOkuri

convertValue =
{ midashi = midashi
, okuri = okuri
}

skk =
initSkk (Skk.HiraganaMode { kakutei = "あいう", convertMode = Skk.MidashiInputMode convertValue })

key =
{ key = "BackSpace", shift = False, ctrl = False }
in
Expect.equal
(Skk.HiraganaMode
{ kakutei = "あいう"
, convertMode = Skk.MidashiInputMode { midashi = { kakutei = "", mikakutei = "" }, okuri = initOkuri }
}
)
(Skk.update skk key).mode
, test "未確定の見出し語が存在する場合、BSキーを入力すると見確定の見出し語が削除されること" <|
\_ ->
let
midashi =
{ kakutei = "", mikakutei = "t" }

okuri =
initOkuri

convertValue =
{ midashi = midashi
, okuri = okuri
}

skk =
initSkk (Skk.HiraganaMode { kakutei = "あいう", convertMode = Skk.MidashiInputMode convertValue })

key =
{ key = "BackSpace", shift = False, ctrl = False }
in
Expect.equal
(Skk.HiraganaMode
{ kakutei = "あいう"
, convertMode = Skk.MidashiInputMode { midashi = { kakutei = "", mikakutei = "" }, okuri = initOkuri }
}
)
(Skk.update skk key).mode
, test "確定済みの送り仮名が存在する かつ 未確定の送り仮名が存在しない場合、BSキーを入力すると確定済みの送り仮名が削除されること" <|
\_ ->
let
midashi =
{ kakutei = "はし", mikakutei = "" }

okuri =
{ kakutei = "", mikakutei = "" }

convertValue =
{ midashi = midashi
, okuri = okuri
}

skk =
initSkk (Skk.HiraganaMode { kakutei = "あいう", convertMode = Skk.MidashiInputMode convertValue })

key =
{ key = "BackSpace", shift = False, ctrl = False }
in
Expect.equal
(Skk.HiraganaMode
{ kakutei = "あいう"
, convertMode = Skk.MidashiInputMode { midashi = midashi, okuri = { kakutei = "", mikakutei = "" } }
}
)
(Skk.update skk key).mode
, test "確定済みの送り仮名が存在する かつ 未確定の送り仮名が存在する場合、BSキーを入力すると未確定の送り仮名が削除されること" <|
\_ ->
let
midashi =
{ kakutei = "はし", mikakutei = "" }

okuri =
{ kakutei = "", mikakutei = "t" }

convertValue =
{ midashi = midashi
, okuri = okuri
}

skk =
initSkk (Skk.HiraganaMode { kakutei = "あいう", convertMode = Skk.MidashiInputMode convertValue })

key =
{ key = "BackSpace", shift = False, ctrl = False }
in
Expect.equal
(Skk.HiraganaMode
{ kakutei = "あいう"
, convertMode = Skk.MidashiInputMode { midashi = midashi, okuri = { kakutei = "", mikakutei = "" } }
}
)
(Skk.update skk key).mode
]
, describe "カタカナ入力モード(変換モード: 確定入力モード)"
[ test "未確定の文字列が存在しない場合、BSキーを入力すると、確定済み文字列の末尾文字が削除されること" <|
Expand Down

0 comments on commit 90ebe95

Please sign in to comment.