diff --git a/check_layout.output b/check_layout.output index 1d4b079..df57448 100644 --- a/check_layout.output +++ b/check_layout.output @@ -171,6 +171,8 @@ Layout includes some ASCII punctuation but not all, missing: ` 0 warnings # shaw_imperial_en 0 warnings +# tamil_default +0 warnings # urdu_phonetic_ur Duplicate keys: Layout includes some ASCII punctuation but not all, missing: <, >, ?, `, |, ~ diff --git a/res/values/layouts.xml b/res/values/layouts.xml index 579081e..f57b29f 100644 --- a/res/values/layouts.xml +++ b/res/values/layouts.xml @@ -71,6 +71,7 @@ latn_qwertz_sq latn_workman_us shaw_imperial_en + tamil_default urdu_phonetic_ur custom @@ -144,6 +145,7 @@ QWERTZ (Albanian) WORKMAN (US) Shaw Imperial + தமிழ் Urdu Phonetic @string/pref_layout_e_custom @@ -217,6 +219,7 @@ @xml/latn_qwertz_sq @xml/latn_workman_us @xml/shaw_imperial_en + @xml/tamil_default @xml/urdu_phonetic_ur -1 diff --git a/res/xml/method.xml b/res/xml/method.xml index 983fe23..be092ac 100644 --- a/res/xml/method.xml +++ b/res/xml/method.xml @@ -52,6 +52,7 @@ + diff --git a/srcs/compose/numpad_tamil.json b/srcs/compose/numpad_tamil.json new file mode 100644 index 0000000..db3f6da --- /dev/null +++ b/srcs/compose/numpad_tamil.json @@ -0,0 +1,12 @@ +{ + "0": "௦", + "1": "௧", + "2": "௨", + "3": "௩", + "4": "௪", + "5": "௫", + "6": "௬", + "7": "௭", + "8": "௮", + "9": "௯" +} diff --git a/srcs/compose/shift.json b/srcs/compose/shift.json index b3a8bca..0aa79b7 100644 --- a/srcs/compose/shift.json +++ b/srcs/compose/shift.json @@ -80,6 +80,13 @@ "લ": "ળ", "સ": "શ", "હ": "ઃ", + // Tamil alternate characters + "௹": "₨", + "ய": ":௰", + "ஒ": ":ௐ", + "ள": ":௱", + "ச": ":௲", + "வ": ":௳", // Modern Hindi and Sanskrit "अ": "आ", diff --git a/srcs/juloo.keyboard2/ComposeKeyData.java b/srcs/juloo.keyboard2/ComposeKeyData.java index 938be05..5ba4236 100644 --- a/srcs/juloo.keyboard2/ComposeKeyData.java +++ b/srcs/juloo.keyboard2/ComposeKeyData.java @@ -116,10 +116,11 @@ public final class ComposeKeyData "\u0068\u0069\u0072\u0069\u0071\uFFFF\u0072\u0061\u0066\u0065\uFFFF\u0073\u0065\u0067\u006f\u006c\uFFFF\u0068\u0061\u0074\u0061\u0066\u005f\u0070\u0061\u0074\u0061\u0068\uFFFF\u0070\u0061\u0074\u0061\u0068\uFFFF\u0074\u0073\u0065\u0072\u0065\uFFFF\u0071\u0061\u006d\u0061\u0074\u0073\uFFFF\u0068\u0061\u0074\u0061\u0066\u005f\u0071\u0061\u006d\u0061\u0074\u0073\uFFFF\u0073\u0068\u0065\u0076\u0061\u066e\u067e\u06c1\u0698\u0640\u0636" + "\u0638\u0621\u06a4\u063a\u06a9\u06ba\u06be\u06cc\u0643\u064a\u0900\u0955\u0972\u0911\u0973\u0974\u0976\u0977\u0960\u0961\u090d\u090e\u0912\u0975\u097b\u097c\uFFFF\u0936\u094d\u091a\u0979\u0978\u097e\uFFFF\u0924\u094d\u0930\uFFFF\u0926\u094d\u0930\uFFFF\u092a\u094d\u0930\u097f\u097a\uFFFF\u0936\u094d\u0930\uFFFF\u0915\u094d\u0937\u094e\u097d\u0949\u093a\u093b\u0904\u0944\u0945\u0946\u094a\u094f\u0954\u0957\u0963\u0965\u0971\u21d4" + "\u21d5\u21d6\u21d7\u21d8\u21d9\u22c0\u22c1\u22c2\u22c3\u222e\u22b6\u044b\u0483\u00000123456789\u09e6\u09e7\u09e8\u09e9\u09ea\u09eb\u09ec\u09ed\u09ee\u09ef\u00000123456789\u0966\u0967\u0968\u0969\u096a\u096b\u096c\u096d\u096e\u096f\u00000123456789\u0ae6\u0ae7\u0ae8\u0ae9\u0aea\u0aeb" + - "\u0aec\u0aed\u0aee\u0aef\u00000123456789\u0660\u0661\u0662\u0663\u0664\u0665\u0666\u0667\u0668\u0669\u00000123456789\u0ce6\u0ce7\u0ce8\u0ce9\u0cea\u0ceb\u0cec\u0ced\u0cee\u0cef\u00000123456789\u06f0\u06f1\u06f2\u06f3\u06f4\u06f5\u06f6\u06f7\u06f8\u06f9\u0000\u00df\u0131\u01f0\u0237" + - "\u02b0\u02b2\u02b3\u02b7\u02e1\u0905\u0907\u0909\u090b\u090c\u090f\u0913\u0915\u0917\u091a\u091c\u091f\u0921\u0924\u0926\u0928\u092c\u092e\u0932\u0938\u0939\u093f\u0941\u0943\u0945\u0947\u0949\u094b\u0952\u0962\u0a85\u0a87\u0a89\u0a8f\u0a93\u0a95\u0a97\u0a9a\u0a9c\u0a9f\u0aa1\u0aa4\u0aa6\u0aa8\u0aaa\u0aac\u0aae\u0ab2\u0ab8\u0ab9\u0abf\u0ac1\u0ac7\u0acb\u1d43\u1d47\u1d48\u1d49\u1d4d\u1d4f\u1d50\u1d52\u1d56\u1d57\u1d58\u1d5b\u1d60" + - "\u1d9c\u1da0\u1dbe\u1e97\u1e98\u1e99\u2071\u207f\u20b9\u2190\u2191\u2192\u2193\u2196\u2197\u2198\u2199\u2500\u2502\u250c\u2510\u2514\u2518\u251c\u2524\u252c\u2534\u253c\uFFFF\u004a\u030c\uFFFF\u004a\u0307\u1d34\u1d36\u1d3f\u1d42\u1d38\u0906\u0908\u090a\u0910\u0914\u0916\u0918\u091b\u091d\u0920\u0922\u0925\u0927\u0923\u092d\u0902\u0933\u0936\u0903\u0940\u0942\u0948\u094c\u0951\u0a86\u0a88\u0a8a\u0a90\u0a94\u0a96\u0a98\u0a9b\u0a9d" + - "\u0aa0\u0aa2\u0aa5\u0aa7\u0aa3\u0aab\u0aad\u0a82\u0ab3\u0ab6\u0a83\u0ac0\u0ac2\u0ac8\u0acc\u1d2c\u1d2e\u1d30\u1d31\u1d33\u1d37\u1d39\u1d3c\u1d3e\u1d40\u1d41\u2c7d\u1db2\uFFFF\ua7f2\uFFFF\ua7f3\u1d23\uFFFF\u0054\u0308\uFFFF\u0057\u030a\uFFFF\u0059\u030a\u1d35\u1d3a\u2550\u2551\u2554\u2557\u255a\u255d\u2560\u2563\u2566\u2569\u256c").toCharArray(); + "\u0aec\u0aed\u0aee\u0aef\u00000123456789\u0660\u0661\u0662\u0663\u0664\u0665\u0666\u0667\u0668\u0669\u00000123456789\u0ce6\u0ce7\u0ce8\u0ce9\u0cea\u0ceb\u0cec\u0ced\u0cee\u0cef\u00000123456789\u06f0\u06f1\u06f2\u06f3\u06f4\u06f5\u06f6\u06f7\u06f8\u06f9\u00000123" + + "456789\u0be6\u0be7\u0be8\u0be9\u0bea\u0beb\u0bec\u0bed\u0bee\u0bef\u0000\u00df\u0131\u01f0\u0237\u02b0\u02b2\u02b3\u02b7\u02e1\u0905\u0907\u0909\u090b\u090c\u090f\u0913\u0915\u0917\u091a\u091c\u091f\u0921\u0924\u0926\u0928\u092c\u092e\u0932\u0938\u0939\u093f\u0941\u0943\u0945\u0947\u0949\u094b\u0952\u0962\u0a85\u0a87\u0a89\u0a8f\u0a93\u0a95\u0a97\u0a9a\u0a9c\u0a9f\u0aa1\u0aa4\u0aa6\u0aa8\u0aaa\u0aac" + + "\u0aae\u0ab2\u0ab8\u0ab9\u0abf\u0ac1\u0ac7\u0acb\u0b92\u0b9a\u0baf\u0bb3\u0bb5\u0bf9\u1d43\u1d47\u1d48\u1d49\u1d4d\u1d4f\u1d50\u1d52\u1d56\u1d57\u1d58\u1d5b\u1d60\u1d9c\u1da0\u1dbe\u1e97\u1e98\u1e99\u2071\u207f\u20b9\u2190\u2191\u2192\u2193\u2196\u2197\u2198\u2199\u2500\u2502\u250c\u2510\u2514\u2518\u251c\u2524\u252c\u2534\u253c\uFFFF\u004a\u030c\uFFFF\u004a\u0307\u1d34\u1d36\u1d3f\u1d42\u1d38\u0906\u0908\u090a\u0910\u0914\u0916" + + "\u0918\u091b\u091d\u0920\u0922\u0925\u0927\u0923\u092d\u0902\u0933\u0936\u0903\u0940\u0942\u0948\u094c\u0951\u0a86\u0a88\u0a8a\u0a90\u0a94\u0a96\u0a98\u0a9b\u0a9d\u0aa0\u0aa2\u0aa5\u0aa7\u0aa3\u0aab\u0aad\u0a82\u0ab3\u0ab6\u0a83\u0ac0\u0ac2\u0ac8\u0acc\uFFFF\u0bd0\uFFFF\u0bf2\uFFFF\u0bf0\uFFFF\u0bf1\uFFFF\u0bf3\u1d2c\u1d2e\u1d30\u1d31\u1d33\u1d37\u1d39\u1d3c\u1d3e\u1d40\u1d41\u2c7d\u1db2\uFFFF\ua7f2\uFFFF\ua7f3\u1d23\uFFFF\u0054" + + "\u0308\uFFFF\u0057\u030a\uFFFF\u0059\u030a\u1d35\u1d3a\u2550\u2551\u2554\u2557\u255a\u255d\u2560\u2563\u2566\u2569\u256c").toCharArray(); public static final char[] edges = ("\u0001\u0036\u0037\u0038\u0039\u003a\u003b\u003c\u003f\u0040\u0041\u0042\u0043\u0044\u0045\u0046\u0047\u0048\u0049\u004a\u004b\u004c\u004d\u004e\u004f\u0050\u0051\u0052\u0053\u0054\u0055\u0056\u0059\u005a\u005b\\\u005d\u005e\u005f\u0060\u0061\u0062\u0063\u0064\u0067\u0068\u006b\u006e\u006f\u0072\u0075\u0078\u007b\u007e\u0081\u0001\u0001\u0001\u0001\u0001\u0003\u0000\u0000\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001" + @@ -233,10 +234,11 @@ public final class ComposeKeyData "\u0000\u0000\u0000\u0000\u0000\u0005\u0000\u0000\u0000\u0000\u0006\u0000\u0000\u0000\u0000\u0000\u000c\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0006\u0000\u0000\u0000\u0000\u0000\u0006\u0000\u0000\u0000\u0000\u0000\u0007\u0000\u0000\u0000\u0000\u0000\u0000\r\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0006\u0000\u0000\u0000\u0000\u0000\u0001\u0001\u0001\u0001\u0001\u0001" + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0004\u0000\u0000\u0000\u0001\u0001\u0001\u0004\u0000\u0000\u0000\u0004\u0000\u0000\u0000\u0004\u0000\u0000\u0000\u0001\u0001\u0004\u0000\u0000\u0000\u0004\u0000\u0000\u0000\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001" + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u000b\u1f08\u1f09\u1f0a\u1f0b\u1f0c\u1f0d\u1f0e\u1f0f\u1f10\u1f11\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u000b\u1f1d\u1f1e\u1f1f\u1f20\u1f21\u1f22\u1f23\u1f24\u1f25\u1f26\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u000b\u1f32\u1f33\u1f34\u1f35\u1f36\u1f37\u1f38\u1f39\u1f3a\u1f3b\u0001\u0001\u0001\u0001\u0001\u0001" + - "\u0001\u0001\u0001\u0001\u000b\u1f47\u1f48\u1f49\u1f4a\u1f4b\u1f4c\u1f4d\u1f4e\u1f4f\u1f50\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u000b\u1f5c\u1f5d\u1f5e\u1f5f\u1f60\u1f61\u1f62\u1f63\u1f64\u1f65\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u000b\u1f71\u1f72\u1f73\u1f74\u1f75\u1f76\u1f77\u1f78\u1f79\u1f7a\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0069\u0f55\u0d0b\u1fe4\u1fe7" + - "\u1fea\u1feb\u1fec\u1fed\u1fee\u1fef\u1ff0\u1ff1\u1eba\u1ebb\u1ff2\u1ff3\u1ff4\u1ff5\u1ff6\u1ff7\u1ff8\u1ff9\u1ffa\u1ffb\u1ffc\u1ffd\u1ffe\u1fff\u2000\u2001\u2002\u2003\u1ee5\u1eb4\u2004\u1eb5\u2005\u2006\u1eec\u2007\u2008\u2009\u200a\u200b\u200c\u200d\u200e\u200f\u2010\u2011\u2012\u2013\u2014\u2015\u2016\u2017\u2018\u2019\u201a\u201b\u201c\u201d\u201e\u201f\u2020\u2021\u2022\u2023\u2024\u2025\u2026\u2027\u2028\u2029\u202a\u202b" + - "\u202c\u202e\u2030\u2031\u2034\u2037\u203a\u203b\u0f48\u0e0d\u0e19\u0e0e\u0e1c\u1ef1\u1ef2\u1ef3\u1ef4\u203c\u203d\u203e\u203f\u2040\u2041\u2042\u2043\u2044\u2045\u2046\u0003\u0000\u0000\u0003\u0000\u0000\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001" + - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0002\u0000\u0002\u0000\u0001\u0003\u0000\u0000\u0003\u0000\u0000\u0003\u0000\u0000\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001").toCharArray(); + "\u0001\u0001\u0001\u0001\u000b\u1f47\u1f48\u1f49\u1f4a\u1f4b\u1f4c\u1f4d\u1f4e\u1f4f\u1f50\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u000b\u1f5c\u1f5d\u1f5e\u1f5f\u1f60\u1f61\u1f62\u1f63\u1f64\u1f65\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u000b\u1f71\u1f72\u1f73\u1f74\u1f75\u1f76\u1f77\u1f78\u1f79\u1f7a\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u000b\u1f86\u1f87\u1f88\u1f89" + + "\u1f8a\u1f8b\u1f8c\u1f8d\u1f8e\u1f8f\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u006f\u0f55\u0d0b\u1fff\u2002\u2005\u2006\u2007\u2008\u2009\u200a\u200b\u200c\u1eba\u1ebb\u200d\u200e\u200f\u2010\u2011\u2012\u2013\u2014\u2015\u2016\u2017\u2018\u2019\u201a\u201b\u201c\u201d\u201e\u1ee5\u1eb4\u201f\u1eb5\u2020\u2021\u1eec\u2022\u2023\u2024\u2025\u2026\u2027\u2028\u2029\u202a\u202b\u202c\u202d\u202e\u202f\u2030\u2031" + + "\u2032\u2033\u2034\u2035\u2036\u2037\u2038\u2039\u203a\u203c\u203e\u2040\u2042\u0f48\u2044\u2045\u2046\u2047\u2048\u2049\u204a\u204b\u204c\u204d\u204e\u204f\u2050\u2051\u2053\u2055\u2056\u2059\u205c\u205f\u2060\u0f48\u0e0d\u0e19\u0e0e\u0e1c\u1ef1\u1ef2\u1ef3\u1ef4\u2061\u2062\u2063\u2064\u2065\u2066\u2067\u2068\u2069\u206a\u206b\u0003\u0000\u0000\u0003\u0000\u0000\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001" + + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0002\u0000\u0002\u0000\u0002\u0000\u0002\u0000\u0002\u0000\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0002\u0000\u0002\u0000\u0001\u0003\u0000" + + "\u0000\u0003\u0000\u0000\u0003\u0000\u0000\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001").toCharArray(); public static final int accent_aigu = 1; public static final int accent_arrows = 130; @@ -269,5 +271,6 @@ public final class ComposeKeyData public static final int numpad_hindu = 7996; public static final int numpad_kannada = 8017; public static final int numpad_persian = 8038; - public static final int shift = 8059; + public static final int numpad_tamil = 8059; + public static final int shift = 8080; } diff --git a/srcs/juloo.keyboard2/KeyModifier.java b/srcs/juloo.keyboard2/KeyModifier.java index 3fd2dd6..4de9e68 100644 --- a/srcs/juloo.keyboard2/KeyModifier.java +++ b/srcs/juloo.keyboard2/KeyModifier.java @@ -117,6 +117,7 @@ public final class KeyModifier case "persian": return ComposeKeyData.numpad_persian; case "gujarati": return ComposeKeyData.numpad_gujarati; case "kannada": return ComposeKeyData.numpad_kannada; + case "tamil": return ComposeKeyData.numpad_tamil; default: return -1; } } diff --git a/srcs/juloo.keyboard2/KeyValue.java b/srcs/juloo.keyboard2/KeyValue.java index fcb9ed0..9d3e0ef 100644 --- a/srcs/juloo.keyboard2/KeyValue.java +++ b/srcs/juloo.keyboard2/KeyValue.java @@ -719,6 +719,20 @@ public final class KeyValue implements Comparable case "ㅍ": return makeHangulInitial("ㅍ", 17); case "ㅎ": return makeHangulInitial("ㅎ", 18); + /* Tamil letters should be smaller on the keyboard. */ + case "ஔ": case "ந": case "ல": case "ழ": case "௯": case "க": + case "ஷ": case "ே": case "௨": case "ஜ": case "ங": case "ன": + case "௦": case "ை": case "ூ": case "ம": case "ஆ": case "௭": + case "௪": case "ா": case "ஶ": case "௬": case "வ": case "ஸ": + case "௮": case "ட": case "ப": case "ஈ": case "௩": case "ஒ": + case "ௌ": case "உ": case "௫": case "ய": case "ர": case "ு": + case "இ": case "ோ": case "ஓ": case "ஃ": case "ற": case "த": + case "௧": case "ண": case "ஏ": case "ஊ": case "ொ": case "ஞ": + case "அ": case "எ": case "ச": case "ெ": case "ஐ": case "ி": + case "௹": case "ள": case "ஹ": case "௰": case "ௐ": case "௱": + case "௲": case "௳": + return makeStringKey(name, FLAG_SMALLER_FONT); + /* The key is not one of the special ones. */ default: return parseKeyDefinition(name); } diff --git a/srcs/layouts/tamil_default.xml b/srcs/layouts/tamil_default.xml new file mode 100644 index 0000000..258e91d --- /dev/null +++ b/srcs/layouts/tamil_default.xml @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/juloo.keyboard2/KeyValueTest.java b/test/juloo.keyboard2/KeyValueTest.java index 3d5f8d5..e67b5cd 100644 --- a/test/juloo.keyboard2/KeyValueTest.java +++ b/test/juloo.keyboard2/KeyValueTest.java @@ -23,6 +23,7 @@ public class KeyValueTest assertEquals(apply_numpad_script("persian"), "۰۱۲۳۴۵۶۷۸۹"); assertEquals(apply_numpad_script("gujarati"), "૦૧૨૩૪૫૬૭૮૯"); assertEquals(apply_numpad_script("kannada"), "೦೧೨೩೪೫೬೭೮೯"); + assertEquals(apply_numpad_script("tamil"), "௦௧௨௩௪௫௬௭௮௯"); } String apply_numpad_script(String script) {