diff --git a/src/main/java/me/towdium/pinin/Keyboard.java b/src/main/java/me/towdium/pinin/Keyboard.java index 5e3c44b..691862c 100644 --- a/src/main/java/me/towdium/pinin/Keyboard.java +++ b/src/main/java/me/towdium/pinin/Keyboard.java @@ -84,7 +84,7 @@ public class Keyboard { {"ing", "j"}, {"iong", "s"}, {"iu", "y"}, {"ong", "s"}, {"ou", "p"}, {"sh", "u"}, {"ua", "q"}, {"uai", "y"}, {"uan", "w"}, {"uang", "n"}, {"ui", "v"}, {"un", "z"}, {"uo", "o"}, {"van", "w"}, {"ve", "x"}, - {"vn", "z"}, {"zh", "v"}, + {"ue", "x"}, {"vn", "z"}, {"zh", "v"}, }).collect(Collectors.toMap(d -> d[0], d -> d[1])); private static Map MICROSOFT_KEYS = Stream.of(new String[][]{ @@ -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 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::zero, true, false); - public static Keyboard ZIGUANG = new Keyboard(null, ZIGUANG_KEYS, Keyboard::zero, true, false); + public static Keyboard ZIGUANG = new Keyboard(null, ZIGUANG_KEYS, Keyboard::zeroOInitial, true, false); final Map local; final Map keys; @@ -175,6 +176,22 @@ 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 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..d3e378c 100644 --- a/src/test/java/me/towdium/pinin/PinInTest.java +++ b/src/test/java/me/towdium/pinin/PinInTest.java @@ -181,9 +181,10 @@ 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"); + assert p.contains("昂撒人", "ahsarf"); } @Test @@ -192,10 +193,84 @@ 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"); + assert p.contains("昂撒人", "ahsarf"); + } + + @Test + public void sougou() { + PinIn p = new PinIn().config().keyboard(SOUGOU).commit(); + assert p.contains("测试文本", "ceuiwfbf"); + assert p.contains("测试文本", "ceuiwf2"); + assert !p.contains("测试文本", "ceuiw2"); + assert !p.contains("合金炉", "hej"); + assert p.contains("洗矿场", "xikd4"); + assert p.contains("月球", "ytqq"); + assert p.contains("安全", "ojqr"); + } + + @Test + public void zhineng_abc() { + PinIn p = new PinIn().config().keyboard(ZHINENG_ABC).commit(); + assert p.contains("测试文本", "ceviwfbf"); + assert p.contains("测试文本", "ceviwf2"); + assert !p.contains("测试文本", "ceviw2"); + assert !p.contains("合金炉", "hej"); + assert p.contains("洗矿场", "xikt4"); + assert p.contains("月球", "ymqr"); + assert p.contains("安全", "ojqp"); + } + + @Test + public void guobiao() { + PinIn p = new PinIn().config().keyboard(GUOBIAO).commit(); + assert p.contains("测试文本", "ceuiwrbr"); + assert p.contains("测试文本", "ceuiwr2"); + assert !p.contains("测试文本", "ceuiw2"); + assert !p.contains("合金炉", "hej"); + assert p.contains("洗矿场", "xikn4"); + assert p.contains("月球", "yxqy"); + assert p.contains("安全", "afqw"); + } + + @Test + public void microsoft() { + PinIn p = new PinIn().config().keyboard(MICROSOFT).commit(); + assert p.contains("测试文本", "ceuiwfbf"); + assert p.contains("测试文本", "ceuiwf2"); + assert !p.contains("测试文本", "ceuiw2"); + assert !p.contains("合金炉", "hej"); + assert p.contains("洗矿场", "xikd4"); + assert p.contains("月球", "ytqq"); + assert p.contains("安全", "ojqr"); + } + + @Test + public void pinyinpp() { + PinIn p = new PinIn().config().keyboard(PINYINPP).commit(); + assert p.contains("测试文本", "ceiiwrbr"); + assert p.contains("测试文本", "ceiiwr2"); + assert !p.contains("测试文本", "ceiiw2"); + assert !p.contains("合金炉", "hej"); + assert p.contains("洗矿场", "xikh4"); + assert p.contains("月球", "yxqn"); + assert p.contains("安全", "anqc"); + assert p.contains("昂撒人", "agsarr"); + } + + @Test + public void ziguang() { + PinIn p = new PinIn().config().keyboard(ZIGUANG).commit(); + assert p.contains("测试文本", "ceiiwwbw"); + assert p.contains("测试文本", "ceiiww2"); + assert !p.contains("测试文本", "ceiiw2"); + assert !p.contains("合金炉", "hej"); + assert p.contains("洗矿场", "xikg4"); + assert p.contains("月球", "ynqj"); + assert p.contains("安全", "orql"); } @Test