diff --git a/src/main/java/me/towdium/pinin/Keyboard.java b/src/main/java/me/towdium/pinin/Keyboard.java index 5e3c44b..1676c47 100644 --- a/src/main/java/me/towdium/pinin/Keyboard.java +++ b/src/main/java/me/towdium/pinin/Keyboard.java @@ -119,11 +119,12 @@ public class Keyboard { public static Keyboard DAQIAN = new Keyboard(PHONETIC_LOCAL, DAQIAN_KEYS, Keyboard::standard, false, false); public static Keyboard XIAOHE = new Keyboard(null, XIAOHE_KEYS, Keyboard::zero, true, false); public static Keyboard ZIRANMA = new Keyboard(null, ZIRANMA_KEYS, Keyboard::zero, true, false); - public static Keyboard SOUGOU = new Keyboard(null, SOUGOU_KEYS, Keyboard::zero, true, false); - public static Keyboard GUOBIAO = new Keyboard(null, GUOBIAO_KEYS, Keyboard::zero, true, false); - public static Keyboard MICROSOFT = new Keyboard(null, MICROSOFT_KEYS, Keyboard::zero, true, false); - public static Keyboard PINYINPP = new Keyboard(null, PINYINPP_KEYS, Keyboard::zero, true, false); - public static Keyboard ZIGUANG = new Keyboard(null, ZIGUANG_KEYS, Keyboard::zero, true, false); + public static Keyboard SOUGOU = new Keyboard(null, SOUGOU_KEYS, Keyboard::zeroOInitial, true, false); + public static Keyboard ZHINENG_ABC = new Keyboard(null, ZHINENG_ABC_KEYS, Keyboard::zeroOInitial, true, false); + public static Keyboard GUOBIAO = new Keyboard(null, GUOBIAO_KEYS, Keyboard::zeroAInitial, true, false); + public static Keyboard MICROSOFT = new Keyboard(null, MICROSOFT_KEYS, Keyboard::zeroOInitial, true, false); + public static Keyboard PINYINPP = new Keyboard(null, PINYINPP_KEYS, Keyboard::zeroFirstInitial, true, false); + public static Keyboard ZIGUANG = new Keyboard(null, ZIGUANG_KEYS, Keyboard::zeroOInitial, true, false); final Map local; final Map keys; @@ -175,6 +176,32 @@ public static List zero(String s) { return ss; } + public static List zeroOInitial(String s) { + List ss = standard(s); + if (ss.size() == 2) { + ss.add(0,"o"); + } + return ss; + } + + public static List zeroAInitial(String s) { + List ss = standard(s); + if (ss.size() == 2) { + ss.add(0,"a"); + } + return ss; + } + + public static List zeroFirstInitial(String s) { + List ss = standard(s); + if (ss.size() == 2) { + String finale = ss.get(0); + ss.set(0, Character.toString(finale.charAt(0))); + ss.add(1,finale); + } + return ss; + } + public Collection split(String s) { if (local != null) { String cut = s.substring(0, s.length() - 1); diff --git a/src/main/java/me/towdium/pinin/elements/Phoneme.java b/src/main/java/me/towdium/pinin/elements/Phoneme.java index 352efa4..3ba9e8f 100644 --- a/src/main/java/me/towdium/pinin/elements/Phoneme.java +++ b/src/main/java/me/towdium/pinin/elements/Phoneme.java @@ -56,7 +56,7 @@ public IndexSet match(String source, int start, boolean partial) { if (strs.length == 1 && strs[0].isEmpty()) return ret; for (String str : strs) { int size = strCmp(source, str, start); - if (partial && start + size == source.length()) ret.set(size); // ending match + if (partial && size != 0 && start + size == source.length()) ret.set(size); // ending match else if (size == str.length()) ret.set(size); // full match } return ret; diff --git a/src/test/java/me/towdium/pinin/PinInTest.java b/src/test/java/me/towdium/pinin/PinInTest.java index 7e8e56e..2327a07 100644 --- a/src/test/java/me/towdium/pinin/PinInTest.java +++ b/src/test/java/me/towdium/pinin/PinInTest.java @@ -181,7 +181,7 @@ public void xiaohe() { assert p.contains("测试文本", "ceuiwfbf"); assert p.contains("测试文本", "ceuiwf2"); assert !p.contains("测试文本", "ceuiw2"); - assert p.contains("合金炉", "hej"); + assert !p.contains("合金炉", "hej"); assert p.contains("洗矿场", "xikl4"); assert p.contains("月球", "ytqq"); } @@ -192,7 +192,7 @@ public void ziranma() { assert p.contains("测试文本", "ceuiwfbf"); assert p.contains("测试文本", "ceuiwf2"); assert !p.contains("测试文本", "ceuiw2"); - assert p.contains("合金炉", "hej"); + assert !p.contains("合金炉", "hej"); assert p.contains("洗矿场", "xikd4"); assert p.contains("月球", "ytqq"); assert p.contains("安全", "anqr");