diff --git a/java/src/org/futo/inputmethod/event/CombinerChain.java b/java/src/org/futo/inputmethod/event/CombinerChain.java index 4770f0e5c78c3c1a026da5e1684b2b2f1b66847a..98dbccd773a91a1986d4b317095daf201690b641 100644 --- a/java/src/org/futo/inputmethod/event/CombinerChain.java +++ b/java/src/org/futo/inputmethod/event/CombinerChain.java @@ -20,8 +20,11 @@ import android.text.SpannableStringBuilder; import android.text.TextUtils; import org.futo.inputmethod.latin.common.Constants; +import org.futo.inputmethod.v2keyboard.CombinerKind; +import org.jetbrains.annotations.NotNull; import java.util.ArrayList; +import java.util.List; import javax.annotation.Nonnull; @@ -62,6 +65,15 @@ public class CombinerChain { mStateFeedback = new SpannableStringBuilder(); } + public CombinerChain(@NotNull List<@NotNull CombinerKind> combiners, final String initialText) { + mCombiners = new ArrayList<>(); + for (final CombinerKind combiner : combiners) { + mCombiners.add(combiner.getFactory().invoke()); + } + mCombinedText = new StringBuilder(initialText); + mStateFeedback = new SpannableStringBuilder(); + } + public void reset() { mCombinedText.setLength(0); mStateFeedback.clear(); diff --git a/java/src/org/futo/inputmethod/keyboard/KeyboardSwitcher.java b/java/src/org/futo/inputmethod/keyboard/KeyboardSwitcher.java index c793b8b0fba46868a97b32afce105ccd79d033e0..c6d223b99b325a0203fe7107034085a06c4bd1d7 100644 --- a/java/src/org/futo/inputmethod/keyboard/KeyboardSwitcher.java +++ b/java/src/org/futo/inputmethod/keyboard/KeyboardSwitcher.java @@ -157,6 +157,7 @@ public final class KeyboardSwitcher implements SwitchActions { ); mState.onLoadKeyboard(editorInfo, currentAutoCapsState, currentRecapitalizeState); + mLatinIMELegacy.setCombiners(mKeyboardLayoutSet.getMainLayout().getCombiners()); mKeyboardTextsSet.setLocale(mRichImm.getCurrentSubtypeLocale(), mThemeContext); } catch (Exception e) { Log.e(TAG, "loading keyboard failed: ", e); diff --git a/java/src/org/futo/inputmethod/latin/LatinIMELegacy.java b/java/src/org/futo/inputmethod/latin/LatinIMELegacy.java index 75850d6615fa24ac1b58c0a5cce454dd3551105b..9ca8d82567134b9823a2f155f558671d84e470d4 100644 --- a/java/src/org/futo/inputmethod/latin/LatinIMELegacy.java +++ b/java/src/org/futo/inputmethod/latin/LatinIMELegacy.java @@ -96,10 +96,13 @@ import org.futo.inputmethod.latin.utils.StatsUtilsManager; import org.futo.inputmethod.latin.utils.SubtypeLocaleUtils; import org.futo.inputmethod.latin.utils.ViewLayoutUtils; import org.futo.inputmethod.latin.xlm.LanguageModelFacilitator; +import org.futo.inputmethod.v2keyboard.CombinerKind; +import org.jetbrains.annotations.NotNull; import java.io.FileDescriptor; import java.io.PrintWriter; import java.util.ArrayList; +import java.util.List; import java.util.Locale; import java.util.concurrent.TimeUnit; @@ -1965,4 +1968,8 @@ public class LatinIMELegacy implements KeyboardActionListener, public void onCodePointDeleted(String textBeforeCursor) { ((LatinIME)(mInputMethodService)).onEmojiDeleted(textBeforeCursor); } + + public void setCombiners(@NotNull List<@NotNull CombinerKind> combiners) { + mInputLogic.mWordComposer.setCombiners(combiners); + } } diff --git a/java/src/org/futo/inputmethod/latin/WordComposer.java b/java/src/org/futo/inputmethod/latin/WordComposer.java index faf52f9743ea8df522f117393a3e648d8c4b3efa..8e61f5161d356c02f7b3d641addf172c0868c8a7 100644 --- a/java/src/org/futo/inputmethod/latin/WordComposer.java +++ b/java/src/org/futo/inputmethod/latin/WordComposer.java @@ -27,9 +27,12 @@ import org.futo.inputmethod.latin.common.InputPointers; import org.futo.inputmethod.latin.common.StringUtils; import org.futo.inputmethod.latin.define.DebugFlags; import org.futo.inputmethod.latin.define.DecoderSpecificConstants; +import org.futo.inputmethod.v2keyboard.CombinerKind; +import org.jetbrains.annotations.NotNull; import java.util.ArrayList; import java.util.Collections; +import java.util.List; import java.util.Locale; import javax.annotation.Nonnull; @@ -111,6 +114,11 @@ public final class WordComposer { } } + public void setCombiners(@NotNull List<@NotNull CombinerKind> combiners) { + mCombinerChain = new CombinerChain(combiners, + mCombinerChain.getComposingWordWithCombiningFeedback().toString()); + } + /** * Clear out the keys registered so far. */ diff --git a/java/src/org/futo/inputmethod/v2keyboard/CombinerKind.kt b/java/src/org/futo/inputmethod/v2keyboard/CombinerKind.kt new file mode 100644 index 0000000000000000000000000000000000000000..a29499ffbb6aa4d4b1ae0d9b548955d256705de7 --- /dev/null +++ b/java/src/org/futo/inputmethod/v2keyboard/CombinerKind.kt @@ -0,0 +1,8 @@ +package org.futo.inputmethod.v2keyboard + +import org.futo.inputmethod.event.Combiner +import org.futo.inputmethod.event.DeadKeyCombiner + +enum class CombinerKind(val factory: () -> Combiner) { + DeadKey({ DeadKeyCombiner() }), +} \ No newline at end of file diff --git a/java/src/org/futo/inputmethod/v2keyboard/Keyboard.kt b/java/src/org/futo/inputmethod/v2keyboard/Keyboard.kt index 60847596e8ada6c392422ed1a4100a7684a318c2..7651976e6e93557ace9122818d2c545795ed5cbb 100644 --- a/java/src/org/futo/inputmethod/v2keyboard/Keyboard.kt +++ b/java/src/org/futo/inputmethod/v2keyboard/Keyboard.kt @@ -256,8 +256,13 @@ data class Keyboard( /** * (optional) Alternative pages for this layout, use in conjunction with $alt0, $alt1, $alt2 */ - val altPages: List<List<Row>> = listOf() + val altPages: List<List<Row>> = listOf(), + + /** + * (optional) Which combiners to use for this layout + */ + val combiners: List<CombinerKind> = listOf(CombinerKind.DeadKey) // TODO: Custom long-press key settings configuration //val element: KeyboardElement = KeyboardElement.Alphabet, //val rowWidthMode: RowWidthMode = RowWidthMode.PadSides,