diff options
author | 2014-05-12 09:36:50 +0000 | |
---|---|---|
committer | 2014-05-12 09:36:50 +0000 | |
commit | 495599989fdeb96823bd44b0a769d2efd1e660b1 (patch) | |
tree | d66559a94ae8165f043082c1f598a25b3e238b1b /java/src/com/android/inputmethod/event/CombinerChain.java | |
parent | 116be29a89a2a88ca586f7344ebbc8af22a15326 (diff) | |
parent | fac678e13df2c6073bdd7f9dc2fca1d4e16f8309 (diff) | |
download | latinime-495599989fdeb96823bd44b0a769d2efd1e660b1.tar.gz latinime-495599989fdeb96823bd44b0a769d2efd1e660b1.tar.xz latinime-495599989fdeb96823bd44b0a769d2efd1e660b1.zip |
am fac678e1: Merge "Create the path for specifying combining rules in the subtype"
* commit 'fac678e13df2c6073bdd7f9dc2fca1d4e16f8309':
Create the path for specifying combining rules in the subtype
Diffstat (limited to 'java/src/com/android/inputmethod/event/CombinerChain.java')
-rw-r--r-- | java/src/com/android/inputmethod/event/CombinerChain.java | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/java/src/com/android/inputmethod/event/CombinerChain.java b/java/src/com/android/inputmethod/event/CombinerChain.java index 8b59dc52a..990f7deea 100644 --- a/java/src/com/android/inputmethod/event/CombinerChain.java +++ b/java/src/com/android/inputmethod/event/CombinerChain.java @@ -23,6 +23,7 @@ import com.android.inputmethod.latin.Constants; import com.android.inputmethod.latin.utils.CollectionUtils; import java.util.ArrayList; +import java.util.HashMap; /** * This class implements the logic chain between receiving events and generating code points. @@ -43,6 +44,13 @@ public class CombinerChain { private SpannableStringBuilder mStateFeedback; private final ArrayList<Combiner> mCombiners; + private static final HashMap<String, Class> IMPLEMENTED_COMBINERS + = new HashMap<String, Class>(); + static { + IMPLEMENTED_COMBINERS.put("MyanmarReordering", MyanmarReordering.class); + } + private static final String COMBINER_SPEC_SEPARATOR = ";"; + /** * Create an combiner chain. * @@ -56,6 +64,9 @@ public class CombinerChain { mCombiners = CollectionUtils.newArrayList(); // The dead key combiner is always active, and always first mCombiners.add(new DeadKeyCombiner()); + for (final Combiner combiner : combinerList) { + mCombiners.add(combiner); + } mCombinedText = new StringBuilder(); mStateFeedback = new SpannableStringBuilder(); } @@ -114,4 +125,29 @@ public class CombinerChain { final SpannableStringBuilder s = new SpannableStringBuilder(mCombinedText); return s.append(mStateFeedback); } + + public static Combiner[] createCombiners(final String spec) { + if (TextUtils.isEmpty(spec)) { + return new Combiner[0]; + } + final String[] combinerDescriptors = spec.split(COMBINER_SPEC_SEPARATOR); + final Combiner[] combiners = new Combiner[combinerDescriptors.length]; + int i = 0; + for (final String combinerDescriptor : combinerDescriptors) { + final Class combinerClass = IMPLEMENTED_COMBINERS.get(combinerDescriptor); + if (null == combinerClass) { + throw new RuntimeException("Unknown combiner descriptor: " + combinerDescriptor); + } + try { + combiners[i++] = (Combiner)combinerClass.newInstance(); + } catch (InstantiationException e) { + throw new RuntimeException("Unable to instantiate combiner: " + combinerDescriptor, + e); + } catch (IllegalAccessException e) { + throw new RuntimeException("Unable to instantiate combiner: " + combinerDescriptor, + e); + } + } + return combiners; + } } |