Back to project page translationKeyboard.
The source code is released under:
GNU General Public License
If you think the Android project translationKeyboard listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.
/* * Copyright (C) 2011 Darren Salt/*from w w w. j av a 2 s . c om*/ * * Licensed under the Apache License, Version 2.0 (the "Licence"); you may * not use this file except in compliance with the Licence. You may obtain * a copy of the Licence at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the Licence is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * Licence for the specific language governing permissions and limitations * under the Licence. */ package org.distantshoresmedia.translationkeyboard; import java.text.Normalizer; public class DeadAccentSequence extends ComposeBase { private static final String TAG = "HK/DeadAccent"; public DeadAccentSequence(ComposeSequencing user) { init(user); } private static void putAccent(String nonSpacing, String spacing, String ascii) { if (ascii == null) ascii = spacing; put("" + nonSpacing + " ", ascii); put(nonSpacing + nonSpacing, spacing); put(Keyboard.DEAD_KEY_PLACEHOLDER + nonSpacing, spacing); } public static String getSpacing(char nonSpacing) { String spacing = get("" + Keyboard.DEAD_KEY_PLACEHOLDER + nonSpacing); if (spacing == null) spacing = DeadAccentSequence.normalize(" " + nonSpacing); if (spacing == null) return "" + nonSpacing; return spacing; } static { // space + combining diacritical // cf. http://unicode.org/charts/PDF/U0300.pdf putAccent("\u0300", "\u02cb", "`"); // grave putAccent("\u0301", "\u02ca", ""); // acute putAccent("\u0302", "\u02c6", "^"); // circumflex putAccent("\u0303", "\u02dc", "~"); // small tilde putAccent("\u0304", "\u02c9", ""); // macron putAccent("\u0305", "\u00af", ""); // overline putAccent("\u0306", "\u02d8", null); // breve putAccent("\u0307", "\u02d9", null); // dot above putAccent("\u0308", "\u00a8", ""); // diaeresis putAccent("\u0309", "\u02c0", null); // hook above putAccent("\u030a", "\u02da", ""); // ring above putAccent("\u030b", "\u02dd", "\""); // double acute putAccent("\u030c", "\u02c7", null); // caron putAccent("\u030d", "\u02c8", null); // vertical line above putAccent("\u030e", "\"", "\""); // double vertical line above putAccent("\u0313", "\u02bc", null); // comma above putAccent("\u0314", "\u02bd", null); // reversed comma above put("\u0308\u0301\u03b9", "\u0390"); // Greek Dialytika+Tonos, iota put("\u0301\u0308\u03b9", "\u0390"); // Greek Dialytika+Tonos, iota put("\u0301\u03ca", "\u0390"); // Greek Dialytika+Tonos, iota put("\u0308\u0301\u03c5", "\u03b0"); // Greek Dialytika+Tonos, upsilon put("\u0301\u0308\u03c5", "\u03b0"); // Greek Dialytika+Tonos, upsilon put("\u0301\u03cb", "\u03b0"); // Greek Dialytika+Tonos, upsilon /* // include? put("? ", "~"); put("??", "~"); put("?? ", "'"); put("????", ""); put("? ", "`"); put("??", "`"); put("? ", "^"); put("??", "^"); put("? ", ""); put("??", ""); put("? ", ""); put("??", ""); put("? ", "?"); put("??", "?"); put("? ", "?"); put("??", "?"); put("??", ""); put("? ", "\""); put("? ", "??"); put("??", "??"); put("? ", "?"); put("??", "?"); put("? ", ""); put("??", ""); put("? ", "?"); put("??", "?"); put("?2", ""); put("?3", ""); put("?1", ""); // include end? put("?A", ""); put("??A", "??"); put("?A", ""); put("?A", ""); put("?A", ""); put("?A", ""); put("?C", ""); put("?E", ""); put("??E", ""); put("?E", ""); put("?E", ""); put("?I", ""); put("??I", "??"); put("?I", ""); put("?I", "??"); put("?N", ""); put("?O", ""); put("??O", ""); put("?O", ""); put("?O", ""); put("?O", ""); put("?U", ""); put("??U", ""); put("?U", ""); put("?U", ""); put("??Y", "??"); put("?a", ""); put("??a", ""); put("?a", ""); put("?a", ""); put("?a", ""); put("?a", ""); put("?c", ""); put("?e", ""); put("??e", ""); put("?e", ""); put("?e", ""); put("?i", ""); put("??i", ""); put("?i", ""); put("?i", ""); put("?n", ""); put("?o", ""); put("??o", ""); put("?o", ""); put("?o", ""); put("?o", ""); put("?u", ""); put("??u", ""); put("?u", ""); put("?u", ""); put("??y", ""); put("?y", ""); put("?A", "?"); put("?a", "??"); put("?A", "?"); put("?a", "?"); put("?A", "?"); put("?a", "?"); put("??C", "?"); put("??c", "?"); put("?C", "?"); put("?c", "?"); put("?C", "?"); put("?c", "?"); put("?C", "?"); put("?c", "??"); put("?D", "?"); put("?d", "??"); put("?E", "?"); put("?e", "?"); put("?E", "?"); put("?e", "?"); put("?E", "?"); put("?e", "?"); put("?E", "?"); put("?e", "?"); put("?E", "?"); put("?e", "?"); put("?G", "?"); put("?g", "??"); put("?G", "?"); put("?g", "?"); put("?G", "?"); put("?g", "?"); put("?G", "?"); put("?g", "?"); put("?H", "?"); put("?h", "?"); put("?I", "?"); put("?i", "?"); put("?I", "?"); put("?i", "?"); put("?I", "?"); put("?i", "?"); put("?I", "?"); put("?i", "?"); put("?I", "?"); put("?i", "?"); put("?J", "?"); put("?j", "?"); put("?K", "?"); put("?k", "?"); put("??L", "?"); put("??l", "?"); put("?L", "?"); put("?l", "?"); put("?L", "?"); put("?l", "?"); put("??N", "?"); put("??n", "?"); put("?N", "?"); put("?n", "?"); put("?N", "?"); put("?n", "?"); put("?O", "?"); put("?o", "??"); put("?O", "?"); put("?o", "??"); put("?O", "??"); put("?o", "?"); put("??R", "?"); put("??r", "?"); put("?R", "?"); put("?r", "?"); put("?R", "?"); put("?r", "?"); put("??S", "?"); put("??s", "?"); put("?S", "?"); put("?s", "??"); put("?S", "?"); put("?s", "?"); put("?S", ""); put("?s", ""); put("?T", "?"); put("?t", "?"); put("?T", "?"); put("?t", "?"); put("?U", "?"); put("?u", "?"); put("?U", "?"); put("?u", "?"); put("?U", "?"); put("?u", "?"); put("?U", "?"); put("?u", "?"); put("?U", "?"); put("?u", "?"); put("?U", "?"); put("?u", "?"); put("?W", "?"); put("?w", "?"); put("?Y", "?"); put("?y", "?"); put("?Y", ""); put("??Z", "?"); put("??z", "?"); put("?Z", "?"); put("?z", "?"); put("?Z", ""); put("?z", ""); put("?O", "?"); put("?o", "?"); put("?U", "?"); put("?u", "?"); put("?A", "??"); put("?a", "?"); put("?I", "??"); put("?i", "??"); put("?O", "?"); put("?o", "?"); put("?U", "?"); put("?u", "?"); put("?", "?"); put("??U", "?"); put("?", "?"); put("??u", "?"); put("??", "?"); put("???U", "?"); put("??", "?"); put("???u", "?"); put("?", "?"); put("??U", "?"); put("?", "?"); put("??u", "?"); put("?", "?"); put("??U", "?"); put("?", "?"); put("??u", "?"); put("?", "?"); put("??A", "?"); put("?", "?"); put("??a", "?"); put("??", "?"); put("??A", "?"); put("??", "?"); put("??a", "?"); put("?", "?"); put("?", "?"); put("?G", "?"); put("?g", "?"); put("?K", "?"); put("?k", "?"); put("?O", "?"); put("?o", "?"); put("??", "?"); put("??O", "?"); put("??", "?"); put("??o", "?"); put("??", "?"); put("??", "?"); put("?j", "?"); put("??G", "?"); put("??g", "?"); put("?N", "?"); put("?n", "?"); put("??", "?"); put("???A", "?"); put("??", "?"); put("???a", "?"); put("??", "?"); put("??", "?"); put("??", "?"); put("??", "?"); put("??A", "?"); put("??a", "??"); put("?A", "?"); put("?a", "?"); put("??E", "?"); put("??e", "?"); put("?E", "?"); put("?e", "?"); put("??I", "?"); put("??i", "?"); put("?I", "?"); put("?i", "?"); put("??O", "?"); put("??o", "??"); put("?O", "?"); put("?o", "??"); put("??R", "??"); put("??r", "?"); put("?R", "?"); put("?r", "?"); put("??U", "?"); put("??u", "?"); put("?U", "?"); put("?u", "?"); put("?H", "?"); put("?h", "?"); put("?A", "?"); put("?a", "?"); put("?E", "?"); put("?e", "?"); put("?", "?"); put("??O", "?"); put("?", "?"); put("??o", "?"); put("?", "?"); put("? ?O", "?"); put("?", "?"); put("? ?o", "?"); put("?O", "?"); put("?o", "?"); put("??", "?"); put("??O", "?"); put("??", "?"); put("??o", "?"); put("?Y", "?"); put("?y", "?"); put("?A", "?"); put("?a", "??"); put("?B", "?"); put("?b", "?"); put("?B", "?"); put("?b", "?"); put("?B", "?"); put("?b", "?"); put("??", "?"); put("???C", "?"); put("??", "?"); put("???c", "?"); put("?D", "?"); put("?d", "?"); put("?D", "?"); put("?d", "??"); put("?D", "?"); put("?d", "??"); put("?D", "??"); put("?d", "?"); put("?D", "?"); put("?d", "?"); put("??", "?"); put("? ?E", "?"); put("??", "?"); put("? ?e", "?"); put("???", "?"); put("?? ?E", "?"); put("???", "?"); put("?? ?e", "?"); put("?E", "?"); put("?e", "?"); put("?E", "?"); put("?e", "?"); put("??", "?"); put("??E", "?"); put("??", "??"); put("??e", "??"); put("?F", "?"); put("?f", "?"); put("?G", "?"); put("?g", "?"); put("?H", "?"); put("?h", "?"); put("?H", "?"); put("?h", "?"); put("?H", "?"); put("?h", "?"); put("?H", "?"); put("?h", "?"); put("?H", "?"); put("?h", "?"); put("?I", "?"); put("?i", "?"); put("????", "?"); put("???I", "?"); put("??", "?"); put("???i", "?"); put("??K", "?"); put("??k", "?"); put("?K", "?"); put("?k", "?"); put("?K", "?"); put("?k", "?"); put("?L", "?"); put("?l", "?"); put("??", "?"); put("??L", "?"); put("??", "?"); put("??l", "?"); put("?L", "?"); put("?l", "?"); put("?L", "?"); put("?l", "?"); put("??M", "?"); put("??m", "?"); put("?M", "?"); put("?m", "??"); put("?M", "?"); put("?m", "?"); put("?N", "?"); put("?n", "?"); put("?N", "?"); put("?n", "?"); put("?N", "?"); put("?n", "?"); put("?N", "?"); put("?n", "?"); put("??", "?"); put("?? ?O", "?"); put("??", "??"); put("?? ?o", "??"); put("?", "?"); put("? ?O", "?"); put("?", "??"); put("? ?o", "??"); put("??", "??"); put("? ?O", "??"); put("???", "?"); put("? ?o", "?"); put("???", "?"); put("?? ?O", "?"); put("????", "?"); put("?? ?o", "?"); put("??P", "?"); put("??p", "?"); put("?P", "?"); put("?p", "?"); put("?R", "?"); put("?r", "?"); put("?R", "?"); put("?r", "?"); put("??", "?"); put("??R", "?"); put("??", "??"); put("??r", "??"); put("?R", "?"); put("?r", "?"); put("?S", "?"); put("?s", "?"); put("?S", "?"); put("?s", "?"); put("??", "?"); put("? ??S", "?"); put("??", "?"); put("? ??s", "?"); put("?", "?"); put("??S", "?"); put("?", "?"); put("??s", "?"); put("??", "?"); put("??S", "?"); put("??", "?"); put("??s", "?"); put("?T", "?"); put("?t", "?"); put("?T", "?"); put("?t", "?"); put("?T", "?"); put("?t", "?"); put("?T", "?"); put("?t", "?"); put("?U", "?"); put("?u", "?"); put("?U", "?"); put("?u", "?"); put("?U", "?"); put("?u", "?"); put("???", "?"); put("?? ?U", "?"); put("???", "?"); put("?? ?u", "?"); put("??", "?"); put("? ?U", "?"); put("??", "?"); put("? ?u", "?"); put("?V", "?"); put("?v", "?"); put("?V", "?"); put("?v", "?"); put("?W", "?"); put("?w", "??"); put("??W", "?"); put("??w", "?"); put("?W", "?"); put("?w", "?"); put("?W", "?"); put("?w", "?"); put("?W", "?"); put("?w", "?"); put("?X", "?"); put("?x", "?"); put("?X", "?"); put("?x", "??"); put("?Y", "?"); put("?y", "??"); put("?Z", "??"); put("?z", "?"); put("?Z", "?"); put("?z", "?"); put("?Z", "?"); put("?z", "?"); put("?h", "?"); put("?t", "?"); put("?w", "?"); put("?y", "?"); put("??", "?"); put("?A", "?"); put("?a", "?"); put("?A", "?"); put("?a", "?"); put("??", "?"); put("?? ?A", "?"); put("??", "?"); put("?? ?a", "?"); put("?", "?"); put("? ?A", "?"); put("?", "?"); put("? ?a", "?"); put("?", "?"); put("? ?A", "?"); put("?", "?"); put("? ?a", "?"); put("?", "?"); put("? ?A", "?"); put("?", "?"); put("? ?a", "?"); put("??", "?"); put("??A", "?"); put("?", "?"); put("??", "?"); put("??a", "?"); put("?", "?"); put("???", "?"); put("???A", "?"); put("???", "?"); put("???a", "?"); put("??", "?"); put("??A", "?"); put("??", "?"); put("??a", "?"); put("??", "?"); put("??A", "?"); put("??", "?"); put("??a", "?"); put("??", "?"); put("??A", "?"); put("??", "?"); put("??a", "?"); put("??", "?"); put("??A", "?"); put("??", "?"); put("??", "?"); put("??a", "?"); put("??", "?"); put("?E", "?"); put("?e", "?"); put("?E", "?"); put("?e", "?"); put("?E", "?"); put("?e", "?"); put("??", "?"); put("?? ?E", "?"); put("??", "?"); put("?? ?e", "?"); put("?", "?"); put("? ?E", "?"); put("?", "??"); put("? ?e", "??"); put("?", "?"); put("? ?E", "?"); put("?", "?"); put("? ?e", "?"); put("?", "?"); put("? ?E", "?"); put("?", "?"); put("? ?e", "?"); put("??", "?"); put("??E", "?"); put("?", "?"); put("??", "?"); put("??e", "?"); put("?", "?"); put("?I", "?"); put("?i", "?"); put("?I", "?"); put("?i", "?"); put("?O", "?"); put("?o", "??"); put("?O", "?"); put("?o", "??"); put("??", "??"); put("?? ?O", "??"); put("??", "?"); put("?? ?o", "?"); put("?", "?"); put("? ?O", "?"); put("?", "?"); put("? ?o", "?"); put("?", "?"); put("? ?O", "?"); put("?", "?"); put("? ?o", "?"); put("?", "?"); put("? ?O", "?"); put("?", "?"); put("? ?o", "?"); put("??", "?"); put("??O", "?"); put("?", "?"); put("???", "?"); put("??o", "?"); put("?", "?"); put("???", "?"); put("???O", "?"); put("???", "?"); put("???o", "?"); put("??", "?"); put("??O", "?"); put("??", "??"); put("??o", "??"); put("??", "?"); put("??O", "?"); put("??", "?"); put("??o", "?"); put("??", "?"); put("??O", "?"); put("??", "?"); put("??o", "?"); put("??", "?"); put("??O", "?"); put("??", "?"); put("??o", "?"); put("?U", "?"); put("?u", "?"); put("?U", "?"); put("?u", "?"); put("???", "?"); put("???U", "?"); put("???", "?"); put("???u", "?"); put("??", "?"); put("??U", "?"); put("??", "?"); put("??u", "?"); put("??", "?"); put("??U", "?"); put("??", "?"); put("??u", "?"); put("??", "?"); put("??U", "?"); put("??", "?"); put("??u", "?"); put("??", "?"); put("??U", "?"); put("??", "?"); put("??u", "?"); put("?Y", "?"); put("?y", "?"); put("?Y", "?"); put("?y", "?"); put("?Y", "?"); put("?y", "?"); put("?Y", "?"); put("?y", "?"); // include? put("?0", "???"); put("?4", "???"); put("?5", "???"); put("?6", "???"); put("?7", "???"); put("?8", "???"); put("?9", "???"); put("?+", "???"); put("??", "???"); put("?=", "???"); put("?(", "???"); put("?)", "???"); put("?+", "?"); put("?+", "?"); put("?-", "?"); put("?=", "?"); put("??=", "?"); put("??=", "?"); // include end? put("?|", "?"); put("??", "?"); put("???", "?"); put("?j", "?"); put("?L", "?"); put("?l", "?"); put("??", "?"); put("???", "?"); put("???", "?"); put("???", "?"); put("??V", "?"); put("??v", "?"); put("??", "?"); put("??", "?"); put("??", "?"); put("? ", "?"); put("???", "?"); put("?", "?"); put("??", "?"); put("?", "?"); put("?a", "?"); put("?", "?"); put("??", "?"); put("?", "?"); // include? put("?(", "??"); put("?)", "?"); put("?+", "?"); put("?-", "?"); put("?0", "?"); put("?1", "??"); put("?2", "?"); put("?3", "?"); put("?4", "?"); put("?5", "?"); put("?6", "?"); put("?7", "?"); put("?8", "?"); put("?9", "?"); put("?=", "?"); // include end? put("??", "?"); put("??", "?"); put("??", "?"); put("?V", "?"); put("?v", "?"); put("?C", "?"); put("?c", "?"); put("?", "?"); put("??", "?"); put("??", "??"); put("?-", "???"); put("???", "?"); put("?", "?"); put("??", "?"); put("?", "?"); put("?", "?"); put("?", "?"); put("??", "?"); put("?", "?"); put("?", "?"); put("?", "?"); put("??", "?"); put("??", "?"); put("?", "?"); put("?", "??"); put("??", "?"); put("??", "?"); put("?", "??"); put("?", "?"); put("??", "?"); put("?", "?"); put("?", "?"); put("?", "?"); put("???", "?"); put("?", "?"); put("?S", "?"); put("?s", "?"); put("?T", "?"); put("?t", "?"); put("??", ","); put("? ", ","); put("??", "?"); put("???", "?"); put("???", "?"); put("?", "?"); put("??", "?"); put("???", "?"); put("?", "?"); put("??", "?"); put("?", "?"); put("?", "?"); put("??", "?"); put("?", "?"); put("?V", "?"); put("?v", "?"); put("?B", "??"); put("?b", "?"); put("?C", "?"); put("?c", "?"); put("?D", "?"); put("?d", "?"); put("??", "?"); put("?F", "?"); put("?f", ""); put("?G", "?"); put("?g", "?"); put("?h", "?"); put("??", "?"); put("?K", "?"); put("?k", "?"); put("?M", "?"); put("?m", "?"); put("?N", "??"); put("?n", "?"); put("?P", "?"); put("?p", "?"); put("?q", "?"); put("??", "??"); put("?s", "?"); put("??", "?"); put("?T", "?"); put("?t", "?"); put("??", "?"); put("?V", "?"); put("?v", "?"); put("?W", "?"); put("?w", "?"); put("?Z", "?"); put("?z", "?"); put("??", "?"); put("? ", "?"); put("?", "?"); put("?O", "?"); put("?", "?"); put("??", "?"); put("?", "?"); put("?", "?"); put("???", "?"); put("?", "??"); put("???", "?"); put("?", "?"); put("?", "?"); put("??", "?"); put("?", "?"); put("??", "?"); put("??", "?"); put("?", "?"); put("??", "?"); put("?", "?"); put("??", "?"); put("??", "?"); put("??", "?"); put("? ", "?"); put("?", "?"); put("?", "?"); put("?", "?"); put("?", "?"); put("?", "?"); put("?", "??"); put("?", "?"); put("?", "?"); put("?V", "?"); put("?v", "?"); put("??", "?"); put("???", "?"); put("???", "?"); put("?", "?"); put("?", "?"); put("?", "?"); put("??", "?"); put("?", "??"); put("?", "??"); put("???", "?"); put("?", "?"); put("?", "?"); put("?=", "?"); put("?<", "?"); put("?>", "?"); put("???S", "?"); put("???s", "?"); put("??S", "?"); put("??s", "?"); put("??S", "?"); put("??s", "?"); put("? ?A", "?"); put("? ?a", "?"); put("? ?O", "?"); put("? ?o", "?"); put("? ??A", "?"); put("? ??a", "?"); put("? ??C", "?"); put("? ??c", "?"); put("? ??A", "?"); put("? ??a", "?"); put("? ??E", "?"); put("? ??e", "?"); put("? ??O", "??"); put("? ??o", "?"); put("? ??I", "?"); put("? ??i", "?"); put("? ??U", "?"); put("? ??u", "?"); put("? ??O", "?"); put("? ??o", "?"); put("? ??U", "?"); put("? ??u", "?"); put("? ??E", "?"); put("? ??e", "?"); put("? ??O", "?"); put("? ??o", "?"); put("? ??A", "?"); put("? ??a", "?"); put("? ??O", "?"); put("? ??o", "??"); put("? ??U", "?"); put("? ??u", "?"); put("??A", "?"); put("??a", "?"); put("? ?A", "?"); put("? ?a", "?"); put("? ?E", "?"); put("? ?e", "?"); put("? ?O", "?"); put("? ?o", "?"); put("??O", "?"); put("??o", "?"); put("??U", "?"); put("??u", "?"); put("? ?L", "?"); put("? ?l", "?"); put("? ?R", "?"); put("? ?r", "??"); put("??E", "?"); put("??e", "??"); put("? ?A", "?"); put("? ?a", "?"); put("??A", "?"); put("??a", "?"); put("? ?A", "?"); put("? ?a", "?"); put("??U", "?"); put("??u", "?"); put("? ?A", "?"); put("? ?a", "?"); put("? ?E", "?"); put("? ?e", "??"); put("? ?O", "?"); put("? ?o", "?"); put("??A", "?"); put("??a", "?"); put("??E", "?"); put("??e", "?"); put("??O", "?"); put("??o", "?"); put("? ?A", "?"); put("? ?a", "?"); put("? ?E", "?"); put("? ?e", "?"); put("? ?O", "?"); put("? ?o", "?"); put("? ?U", "?"); put("? ?u", "?"); put("? ?A", "?"); put("? ?a", "?"); put("? ?O", "?"); put("? ?o", "?"); put("??O", "?"); put("??o", "??"); put("? ?O", "?"); put("? ?o", "??"); put("? ?U", "?"); put("? ?u", "?"); put("? ?E", "?"); put("? ?e", "?"); put("? ?O", "??"); put("? ?o", "?"); put("??O", "?"); put("??o", "?"); put("??U", "?"); put("??u", "?"); put("? ?O", "?"); put("? ?o", "?"); put("? ?U", "?"); put("? ?u", "?"); put("? ?O", "?"); put("? ?o", "?"); put("? ?O", "?"); put("? ?o", "?"); */ } public static String normalize(String input) { String lookup = mMap.get(input); if (lookup != null) return lookup; return Normalizer.normalize(input, Normalizer.Form.NFC); } public boolean execute(int code) { String composed = executeToString(code); if (composed != null) { //Log.i(TAG, "composed=" + composed + " len=" + composed.length()); if (composed.equals("")) { // Unrecognised - try to use the built-in Java text normalisation int c = composeBuffer.codePointAt(composeBuffer.length() - 1); if (Character.getType(c) != Character.NON_SPACING_MARK) { // Put the combining character(s) at the end, else this won't work composeBuffer.reverse(); composed = Normalizer.normalize(composeBuffer.toString(), Normalizer.Form.NFC); if (composed.equals("")) { return true; // incomplete :-) } } else { return true; // there may be multiple combining accents } } clear(); composeUser.onText(composed); return false; } return true; } }