From eff3c49333da72f4ebf93ca20d64f5b1412983d5 Mon Sep 17 00:00:00 2001 From: iaros Date: Tue, 28 Mar 2017 05:50:08 +0300 Subject: [PATCH 1/9] Create arrays.xml Ukrainian resources --- res/values-uk/arrays.xml | 97 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 97 insertions(+) create mode 100644 res/values-uk/arrays.xml diff --git a/res/values-uk/arrays.xml b/res/values-uk/arrays.xml new file mode 100644 index 00000000..7db433e2 --- /dev/null +++ b/res/values-uk/arrays.xml @@ -0,0 +1,97 @@ + + + + Словник + Текст + Цифри + + + + English + Російська + Німецька + Французька + Італійська + Українська + + + + Нижній регістр + Починати з великої літери + Всі великі літери + + + + Словник + Літери + Цифри + + + + усмішка + клоун + дурненький + няшний + вусатий смайл + зловтіха + дуже щасливий + щасливий + вусань + сміється + + сміється з розплющеними очима + сміється з заплющеними очима + в захваті + крутий + вчений + похмурий погляд + сумний + зневіра + сумний клоун + засмучений вусань + + плаче + сміх до сліз + лається + страх + жах + кошмар + тривога + відкрив рота від обурення + шок + подив + + поцілунок + посміхається підморгуючи + сміється підморгуючи + грайливий + показати язика + дражниться + киска с языком + раздратований + скептик + неопределился + + не зрозумів + закрив очі + без відчуттів + рот зі скріпкою + німий як могила + в підтяжках + банкір + лежень + зубатий вампір + з\'їв кисле + + святий + невинуватий + диявол підморгує + диявол + підозрілий + день народження + ура + серце + розбите серце + милий + + From 02addf693761b583cfb80b673703adcb9c19be7c Mon Sep 17 00:00:00 2001 From: iaros Date: Tue, 28 Mar 2017 05:53:01 +0300 Subject: [PATCH 2/9] Add files via upload Ukrainian resources --- res/values-uk/strings.xml | 69 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 res/values-uk/strings.xml diff --git a/res/values-uk/strings.xml b/res/values-uk/strings.xml new file mode 100644 index 00000000..0c85e0c4 --- /dev/null +++ b/res/values-uk/strings.xml @@ -0,0 +1,69 @@ + + + Налаштування + Додати слово + Неможливо додати слово з таким символом %1$s (%2$s). + Неможливо додати слово. + Слово (%1$s) вже є в словнику. + Слово (%1$s) вже є в словнику %2$s. + Traditional T9 + Hello world! + Клавіатура T9 + Цифри + Додати слово + Вставити символ + Додати слово? + Готово + Застосувати + Змінити IME + Режим введення + Помилка: Зовнышня пам\'ять недоступна. Резервне копіювання неможливе. + Резервне копіювання бази даних IME + Попередження: Існуюча копія бази даних буде перезаписана. Продовжити? + Бекап словника + Режим введення за замовчуванням + Режим введення за замовчуванням + Завантажити словник IME + Завантажити словник + Відновлення словника… + Завантаження словника + Завантаження словника користувача… + Завантажити свій словник + Багатомовна підтримка + Очистити IME словник + Попередження: Буде виконана очистка словника. Продовжити? + Очистка словника + Очистка словника… Будь-ласка, зачекайте… + Тестовий запит + Помилка: Зовнішня память недоступна. Відновлення неможливе. + Помилка: Файл відновлення не знайдений. + Відновити базу даних IME + При відновленні існуюча база даних буде витерта. Если это нежелательно, то сначала выберите \"%1$s\" перед использованием этой опции. + Зберегти словник + Збереження словника… + Test func + Hold Icon + Про програму + Наступне + Попереднє + + Вставити символ + Вставити смайл + Стор: %1$s/%2$s + + Закрити + База даних недоступна. + Оновлення бази даних словника… + Виконується оновлення бази даних словника… \n Це займе деякий час. + Оновлення бази даних словника виконано успішно. + Оновлення бізи даних словника недоступне. + Помилка. \n Словник %1$s не знайдено. + Використовується для індикації зміни режима введення. + Режим індикації + База даних недоступна. Використовуюься значення за замовчуванням. + Перезавантажити значення клавіш + + Додати слово + Налаштування Traditional T9 + + From eaba1d2422ca3ede3502878c866668eaff61998a Mon Sep 17 00:00:00 2001 From: iaros Date: Tue, 28 Mar 2017 05:54:38 +0300 Subject: [PATCH 3/9] Edited to add support for Ukrainian layout --- res/values/arrays.xml | 196 +++++++++++++++++++++--------------------- res/values/const.xml | 23 ++--- 2 files changed, 111 insertions(+), 108 deletions(-) diff --git a/res/values/arrays.xml b/res/values/arrays.xml index 357cc21a..f04cbed0 100644 --- a/res/values/arrays.xml +++ b/res/values/arrays.xml @@ -1,109 +1,111 @@ - - Dictionary - Text - Number - - - @integer/INPUT_DICT - @integer/INPUT_TEXT - @integer/INPUT_NUM - + + Dictionary + Text + Number + + + @integer/INPUT_DICT + @integer/INPUT_TEXT + @integer/INPUT_NUM + - - English - Russian - German - French - Italian - - - - @integer/LANG_EN - @integer/LANG_RU - @integer/LANG_DE - @integer/LANG_FR - @integer/LANG_IT - + + English + Russian + German + French + Italian + Ukrainian + + + + @integer/LANG_EN + @integer/LANG_RU + @integer/LANG_DE + @integer/LANG_FR + @integer/LANG_IT + @integer/LANG_UK + - - Caps off - Single capital - All caps - + + Caps off + Single capital + All caps + - - Dictionary - Text - Number - + + Dictionary + Text + Number + - - Smile - Clown - Sharp grin - Cat - Half nose - Schadenfreude - Big eye sharp grin - Big eye smile - Cheeky smile - Laughing + + Smile + Clown + Sharp grin + Cat + Half nose + Schadenfreude + Big eye sharp grin + Big eye smile + Cheeky smile + Laughing - Bug eye laughing - Laughing with eyes closed - Big eye laughing - Glasses pointy nose laughing - Pointed hat smile - Frown - Sad - Disheartened - Sad clown - Sad cheeky + Bug eye laughing + Laughing with eyes closed + Big eye laughing + Glasses pointy nose laughing + Pointed hat smile + Frown + Sad + Disheartened + Sad clown + Sad cheeky - Crying - Laughing to tears - Expletive - Shocked frown - Bug eye\'d frown - Sad with eyes closed - Crying with mouth open - Frown with mouth open - Shocked - Surprised + Crying + Laughing to tears + Expletive + Shocked frown + Bug eye\'d frown + Sad with eyes closed + Crying with mouth open + Frown with mouth open + Shocked + Surprised - Kiss - Winking smile - Winking laugh - Cheeky tongue out - Tongue out - Teasing - Big eye\'d tongue out - Annoyed - Skeptic - Undecided + Kiss + Winking smile + Winking laugh + Cheeky tongue out + Tongue out + Teasing + Big eye\'d tongue out + Annoyed + Skeptic + Undecided - Confused - Closed eyes - Unimpressed - Bashful - Mouth shut - Censored - Banker - Very big sad mouth - Mischievous/sarcasm - Sour face + Confused + Closed eyes + Unimpressed + Bashful + Mouth shut + Censored + Banker + Very big sad mouth + Mischievous/sarcasm + Sour face - Innocent cat - Innocent smile - Evil wink - Evil grin - Shifty eyes - Party hat smile - Arms up cheering - Heart - Broken heart - big eye\'d cat - + Innocent cat + Innocent smile + Evil wink + Evil grin + Shifty eyes + Party hat smile + Arms up cheering + Heart + Broken heart + big eye\'d cat + diff --git a/res/values/const.xml b/res/values/const.xml index 7d0c6f1a..00212242 100644 --- a/res/values/const.xml +++ b/res/values/const.xml @@ -1,16 +1,17 @@ - - 1 - 2 - 4 - 8 - 16 + + 1 + 2 + 4 + 8 + 16 + 32 - 0 - 1 - 2 + 0 + 1 + 2 - @integer/INPUT_DICT - @integer/LANG_EN + @integer/INPUT_DICT + @integer/LANG_EN From b69e3ffa1740661b3253b0131a397fa9820aeb7f Mon Sep 17 00:00:00 2001 From: iaros Date: Tue, 28 Mar 2017 05:57:08 +0300 Subject: [PATCH 4/9] Add Ukrainian indication --- res/drawable/ime_uk_lang_lower.png | Bin 0 -> 559 bytes res/drawable/ime_uk_lang_single.png | Bin 0 -> 656 bytes res/drawable/ime_uk_lang_upper.png | Bin 0 -> 665 bytes 3 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 res/drawable/ime_uk_lang_lower.png create mode 100644 res/drawable/ime_uk_lang_single.png create mode 100644 res/drawable/ime_uk_lang_upper.png diff --git a/res/drawable/ime_uk_lang_lower.png b/res/drawable/ime_uk_lang_lower.png new file mode 100644 index 0000000000000000000000000000000000000000..c0b417122120a01a7383b277c135ac029f8cdf6f GIT binary patch literal 559 zcmV+~0?_@5P) zK~zY`?Ub==8!;5dKV9YcE|yN%U~eXrxEYcxXG1Yu>C{_;J$W~n_RsL#t&~D(hv3QJ z&1A~#dMw66>C#f#%}I#QG8~tSU3I7v%wgB0feuB#MdInx`=qCb0F6eY(P;hwWHCMg z;4bEU03SBQ0pKwJ2Y?OWGk{Y7*XxX$uInn-brpc-hIlEH$$ZM^^Ha5;SS(H$W8VSn ztTnh1#|>7*oAr8KEi;)+lu}CBwmpa^HvXortyW73AqI&=;#E4GJ}DFm0RWh$`3S(_ zeGSI*`TT{HvN@a0zWTo3ACJdB0H9nh69D_mVtUu?lu|#LOulv;2fbd8FRyjG-EBfh zewD$`6`ci2>2@stu4P$oq?D;YoPn<@(M6-t2m!#h?Y&zi=g(rBpH?arx>!5soWC;+ z<0Yl^%R09kgKxv(@M<&~0l<-ES#O09J>U18_~{s9zpqJ16o%nc2yvj4+TB#ztyC&? zsbUBr!dRP@vf1o3u49Z{t!eYyH;95Dc+NRLuGMM}Ow%;l?e?{l^33zRhfDg8Q53z; x<#LT`wMq#gq|@olf*`o?Ja0#Tj2g}V$}gmf+I8-BX>tGn002ovPDHLkV1f(V`^NwP literal 0 HcmV?d00001 diff --git a/res/drawable/ime_uk_lang_single.png b/res/drawable/ime_uk_lang_single.png new file mode 100644 index 0000000000000000000000000000000000000000..1c1d42cc5f9d606043c36287f84c45703cda4c71 GIT binary patch literal 656 zcmV;B0&o3^P)XV#zgMr%bbja)bk{2wM0kZDf`}7uC$uQgKO$&b+cs|6w6GxB6mQeg zRYsdu!qexj79#Y}*P_`LXm@6moblZj&d4a5kgZ}qo8ip&%RT3wGlv0ue0+R-_J;tt z13-1+a{!$+&n|r@HC0u)s;V47?Jx8{LII%DSrkPG*=X9O?@X{K1pqk!GJr1tJ_4}* zMS^@Hk$5Wz!jYzFA^_y`c{Ugf#)e^>0Qd#~fjtu3uT(0>nx={MdL5^yr)afWvaah# zvMj$_86tPsHsmdOEf@@5$+G;JQu-nukH1eQlP2e!r&1{c!0ml+Fq+Tj4;f=M+qS=s z$K&(SXruu^u~;Mkj@=ntEti6jgGHg9MIq$C6E3}!(s4K(ewoYV&~CS-;c&P#HJi;S zA>_K7KzD^`GTNqQX!1fEe!FE{PMS-;<>0AQNtp)AXnobwNh?vQ(ou|ojp z_xnKrXWr_Z7S5*AsUC~PZZXD`jnfK+LXR_; z{>4!Muq>;tY1%bG5T2AuB|DqVMggGL>rK1eZjf{S)UvGSo&=v}v)LO(Q65yQRZ0jU qjYh+sOeR0dxAL8TlzwsLh*8Hiu zmKt%MzyPT{ z+uz^!eBa;fbUGjZg}`MgCbI?@iNMd_mqOFbzb?w3b4l##($bO+ z(Cu~=a2vQEMbQaBu~^IitI1Cr$uV;r=l!IB=XoE-j_E@H-}jqp2EOlqNh&y8US941 zD5Y)z&e-~{l=3FPDCQ8jDy6(WtA}wMUjqUF$F}XhQcBh9^;6IDj$PN?ab5R~=Xu|f zjBMNP0YV6|oy=vk**)O-_?OLQ_Y%KlS=#^@hViISDD=-Ow@@hb4a3*~Od&)^DW!rS z=mINKl3xjepgT&cqXR@y^y28~$Z{O#akW~NrBX=%v|6n}v)NowN Date: Tue, 28 Mar 2017 05:57:55 +0300 Subject: [PATCH 5/9] Add Ukrainian indication --- res/drawable-hdpi/ime_uk_lang_lower.png | Bin 0 -> 559 bytes res/drawable-hdpi/ime_uk_lang_single.png | Bin 0 -> 656 bytes res/drawable-hdpi/ime_uk_lang_upper.png | Bin 0 -> 665 bytes 3 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 res/drawable-hdpi/ime_uk_lang_lower.png create mode 100644 res/drawable-hdpi/ime_uk_lang_single.png create mode 100644 res/drawable-hdpi/ime_uk_lang_upper.png diff --git a/res/drawable-hdpi/ime_uk_lang_lower.png b/res/drawable-hdpi/ime_uk_lang_lower.png new file mode 100644 index 0000000000000000000000000000000000000000..c0b417122120a01a7383b277c135ac029f8cdf6f GIT binary patch literal 559 zcmV+~0?_@5P) zK~zY`?Ub==8!;5dKV9YcE|yN%U~eXrxEYcxXG1Yu>C{_;J$W~n_RsL#t&~D(hv3QJ z&1A~#dMw66>C#f#%}I#QG8~tSU3I7v%wgB0feuB#MdInx`=qCb0F6eY(P;hwWHCMg z;4bEU03SBQ0pKwJ2Y?OWGk{Y7*XxX$uInn-brpc-hIlEH$$ZM^^Ha5;SS(H$W8VSn ztTnh1#|>7*oAr8KEi;)+lu}CBwmpa^HvXortyW73AqI&=;#E4GJ}DFm0RWh$`3S(_ zeGSI*`TT{HvN@a0zWTo3ACJdB0H9nh69D_mVtUu?lu|#LOulv;2fbd8FRyjG-EBfh zewD$`6`ci2>2@stu4P$oq?D;YoPn<@(M6-t2m!#h?Y&zi=g(rBpH?arx>!5soWC;+ z<0Yl^%R09kgKxv(@M<&~0l<-ES#O09J>U18_~{s9zpqJ16o%nc2yvj4+TB#ztyC&? zsbUBr!dRP@vf1o3u49Z{t!eYyH;95Dc+NRLuGMM}Ow%;l?e?{l^33zRhfDg8Q53z; x<#LT`wMq#gq|@olf*`o?Ja0#Tj2g}V$}gmf+I8-BX>tGn002ovPDHLkV1f(V`^NwP literal 0 HcmV?d00001 diff --git a/res/drawable-hdpi/ime_uk_lang_single.png b/res/drawable-hdpi/ime_uk_lang_single.png new file mode 100644 index 0000000000000000000000000000000000000000..1c1d42cc5f9d606043c36287f84c45703cda4c71 GIT binary patch literal 656 zcmV;B0&o3^P)XV#zgMr%bbja)bk{2wM0kZDf`}7uC$uQgKO$&b+cs|6w6GxB6mQeg zRYsdu!qexj79#Y}*P_`LXm@6moblZj&d4a5kgZ}qo8ip&%RT3wGlv0ue0+R-_J;tt z13-1+a{!$+&n|r@HC0u)s;V47?Jx8{LII%DSrkPG*=X9O?@X{K1pqk!GJr1tJ_4}* zMS^@Hk$5Wz!jYzFA^_y`c{Ugf#)e^>0Qd#~fjtu3uT(0>nx={MdL5^yr)afWvaah# zvMj$_86tPsHsmdOEf@@5$+G;JQu-nukH1eQlP2e!r&1{c!0ml+Fq+Tj4;f=M+qS=s z$K&(SXruu^u~;Mkj@=ntEti6jgGHg9MIq$C6E3}!(s4K(ewoYV&~CS-;c&P#HJi;S zA>_K7KzD^`GTNqQX!1fEe!FE{PMS-;<>0AQNtp)AXnobwNh?vQ(ou|ojp z_xnKrXWr_Z7S5*AsUC~PZZXD`jnfK+LXR_; z{>4!Muq>;tY1%bG5T2AuB|DqVMggGL>rK1eZjf{S)UvGSo&=v}v)LO(Q65yQRZ0jU qjYh+sOeR0dxAL8TlzwsLh*8Hiu zmKt%MzyPT{ z+uz^!eBa;fbUGjZg}`MgCbI?@iNMd_mqOFbzb?w3b4l##($bO+ z(Cu~=a2vQEMbQaBu~^IitI1Cr$uV;r=l!IB=XoE-j_E@H-}jqp2EOlqNh&y8US941 zD5Y)z&e-~{l=3FPDCQ8jDy6(WtA}wMUjqUF$F}XhQcBh9^;6IDj$PN?ab5R~=Xu|f zjBMNP0YV6|oy=vk**)O-_?OLQ_Y%KlS=#^@hViISDD=-Ow@@hb4a3*~Od&)^DW!rS z=mINKl3xjepgT&cqXR@y^y28~$Z{O#akW~NrBX=%v|6n}v)NowN Date: Tue, 28 Mar 2017 05:59:12 +0300 Subject: [PATCH 6/9] Ukrainian translation with updated changes info --- store-res/playstore-uk.txt | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 store-res/playstore-uk.txt diff --git a/store-res/playstore-uk.txt b/store-res/playstore-uk.txt new file mode 100644 index 00000000..8c48a633 --- /dev/null +++ b/store-res/playstore-uk.txt @@ -0,0 +1,23 @@ +Title +Traditional T9 Keypad IME + + +Full description + (T9) . + / . + . + . + -. + +ϳ (, , ͳ, , , ) + + +Short description + (T9) ! (, , ͳ, , , ) + + + ? + () + . + + github. From 0816fa65964f60cd6e9824ac990b7e5d955e3894 Mon Sep 17 00:00:00 2001 From: iaros Date: Tue, 28 Mar 2017 06:05:24 +0300 Subject: [PATCH 7/9] Delete playstore-uk.txt --- store-res/playstore-uk.txt | 23 ----------------------- 1 file changed, 23 deletions(-) delete mode 100644 store-res/playstore-uk.txt diff --git a/store-res/playstore-uk.txt b/store-res/playstore-uk.txt deleted file mode 100644 index 8c48a633..00000000 --- a/store-res/playstore-uk.txt +++ /dev/null @@ -1,23 +0,0 @@ -Title -Traditional T9 Keypad IME - - -Full description - (T9) . - / . - . - . - -. - -ϳ (, , ͳ, , , ) - - -Short description - (T9) ! (, , ͳ, , , ) - - - ? - () - . - - github. From 2673a3067b332db3268edced874c4481ba67666d Mon Sep 17 00:00:00 2001 From: iaros Date: Tue, 28 Mar 2017 06:05:55 +0300 Subject: [PATCH 8/9] Re-add Ukrainian description --- store-res/playstore-uk.txt | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 store-res/playstore-uk.txt diff --git a/store-res/playstore-uk.txt b/store-res/playstore-uk.txt new file mode 100644 index 00000000..d83b7faf --- /dev/null +++ b/store-res/playstore-uk.txt @@ -0,0 +1,23 @@ +Title +Traditional T9 Keypad IME + + +Full description +Це метод введення тексту з передбаченням (T9) з використанням апаратної клавіатури. +Це НЕ програмна/екранна клавіатура. +Цю клавіатуру має сенс встановлювати лише на телефон з апаратною клавіатурою. +Введення здійснються ЛИШЕ з цифрової апаратної клавіатури. +Детальна інформація та підтримка на веб-сайті. + +Підтримується декілька мов введення (Англійська, Російська, Німецька, Французька, Італійська, Українська) + + +Short description +Введення тексту з передбаченням (T9) з апаратної клавіатури! (Англійська, Російська, Німецька, Французька, Італійська, Українська) + + +Що нового в цій версії? +Нова мова введення (Українська) +Інші виправлення та новини. + +Історія змін на github. From cd56dd182f34ed88197d7725d204b0c3f5663e73 Mon Sep 17 00:00:00 2001 From: iaros Date: Tue, 28 Mar 2017 06:08:21 +0300 Subject: [PATCH 9/9] Ukrainian/French layout Add basic support for Ukrainian layout; Add missing chars to French layout; Remove unused chars in French layout; Rearrange French layout. --- .../nyanya/android/traditionalt9/CharMap.java | 286 ++++++++++-------- .../android/traditionalt9/LangHelper.java | 187 ++++++------ 2 files changed, 249 insertions(+), 224 deletions(-) diff --git a/src/org/nyanya/android/traditionalt9/CharMap.java b/src/org/nyanya/android/traditionalt9/CharMap.java index 05925428..523d080a 100644 --- a/src/org/nyanya/android/traditionalt9/CharMap.java +++ b/src/org/nyanya/android/traditionalt9/CharMap.java @@ -11,146 +11,164 @@ import java.util.HashMap; import java.util.Map; public class CharMap { - protected static final AbstractList> CHARTABLE = new ArrayList>(LangHelper.NLANGS); - static { - // English - Map enMap = new HashMap(); - enMap.put('.', 1); enMap.put(',', 1); enMap.put('!', 1); enMap.put('?', 1); - enMap.put('-', 1); enMap.put('"', 1); enMap.put('\'', 1); enMap.put('@', 1); - enMap.put('#', 1); enMap.put('$', 1); enMap.put('%', 1); enMap.put('&', 1); - enMap.put('*', 1); enMap.put('(', 1); enMap.put(')', 1); enMap.put(':', 1); - enMap.put(';', 1); enMap.put('/', 1); enMap.put('+', 1); enMap.put('=', 1); - enMap.put('<', 1); enMap.put('>', 1); enMap.put('^', 1); enMap.put('_', 1); - enMap.put('~', 1); enMap.put('1', 1); - enMap.put('a', 2); enMap.put('á', 2); enMap.put('ä', 2); enMap.put('â', 2); - enMap.put('à', 2); enMap.put('å', 2); enMap.put('b', 2); enMap.put('c', 2); - enMap.put('ç', 2); enMap.put('2', 2); - enMap.put('d', 3); enMap.put('e', 3); enMap.put('é', 3); enMap.put('ë', 3); - enMap.put('è', 3); enMap.put('ê', 3); enMap.put('f', 3); enMap.put('3', 3); - enMap.put('g', 4); enMap.put('h', 4); enMap.put('i', 4); enMap.put('í', 4); - enMap.put('ï', 4); enMap.put('4', 4); - enMap.put('j', 5); enMap.put('k', 5); enMap.put('l', 5); enMap.put('5', 5); - enMap.put('m', 6); enMap.put('n', 6); enMap.put('ñ', 6); enMap.put('o', 6); - enMap.put('ó', 6); enMap.put('ö', 6); enMap.put('ô', 6); enMap.put('6', 6); - enMap.put('p', 7); enMap.put('q', 7); enMap.put('r', 7); enMap.put('s', 7); - enMap.put('7', 7); - enMap.put('t', 8); enMap.put('u', 8); enMap.put('û', 6); enMap.put('ü', 8); - enMap.put('v', 8); enMap.put('8', 8); enMap.put('w', 9); - enMap.put('x', 9); enMap.put('y', 9); enMap.put('z', 9); - enMap.put('9', 9); enMap.put('+', 0); enMap.put('0', 0); - // add extra characters for German and French maps. - enMap.put('€', 1); enMap.put('ß', 7); // German chars - enMap.put('î', 4); enMap.put('ù', 8); // French chars - enMap.put('ì', 4); enMap.put('ò', 8); // Italian chars - Map endefritmap = Collections.unmodifiableMap(enMap); - CHARTABLE.add(0, endefritmap); + protected static final AbstractList> CHARTABLE = new ArrayList>(LangHelper.NLANGS); + static { + // English + Map enMap = new HashMap(); + enMap.put('.', 1); enMap.put(',', 1); enMap.put('!', 1); enMap.put('?', 1); + enMap.put('-', 1); enMap.put('"', 1); enMap.put('\'', 1); enMap.put('@', 1); + enMap.put('#', 1); enMap.put('$', 1); enMap.put('%', 1); enMap.put('&', 1); + enMap.put('*', 1); enMap.put('(', 1); enMap.put(')', 1); enMap.put(':', 1); + enMap.put(';', 1); enMap.put('/', 1); enMap.put('+', 1); enMap.put('=', 1); + enMap.put('<', 1); enMap.put('>', 1); enMap.put('^', 1); enMap.put('_', 1); + enMap.put('~', 1); enMap.put('1', 1); + enMap.put('a', 2); enMap.put('á', 2); enMap.put('ä', 2); enMap.put('â', 2); + enMap.put('à', 2); enMap.put('å', 2); enMap.put('b', 2); enMap.put('c', 2); + enMap.put('ç', 2); enMap.put('2', 2); + enMap.put('d', 3); enMap.put('e', 3); enMap.put('é', 3); enMap.put('ë', 3); + enMap.put('è', 3); enMap.put('ê', 3); enMap.put('f', 3); enMap.put('3', 3); + enMap.put('g', 4); enMap.put('h', 4); enMap.put('i', 4); enMap.put('í', 4); + enMap.put('ï', 4); enMap.put('4', 4); + enMap.put('j', 5); enMap.put('k', 5); enMap.put('l', 5); enMap.put('5', 5); + enMap.put('m', 6); enMap.put('n', 6); enMap.put('ñ', 6); enMap.put('o', 6); + enMap.put('ó', 6); enMap.put('ö', 6); enMap.put('ô', 6); enMap.put('6', 6); + enMap.put('p', 7); enMap.put('q', 7); enMap.put('r', 7); enMap.put('s', 7); + enMap.put('7', 7); + enMap.put('t', 8); enMap.put('u', 8); enMap.put('û', 6); enMap.put('ü', 8); + enMap.put('v', 8); enMap.put('8', 8); enMap.put('w', 9); + enMap.put('x', 9); enMap.put('y', 9); enMap.put('z', 9); + enMap.put('9', 9); enMap.put('+', 0); enMap.put('0', 0); + // add extra characters for German and French maps. + enMap.put('€', 1); enMap.put('ß', 7); // German chars + enMap.put('æ', 1); enMap.put('î', 4); enMap.put('ù', 8); enMap.put('œ', 6); // French chars + enMap.put('ì', 4); enMap.put('ò', 8); // Italian chars + Map endefritmap = Collections.unmodifiableMap(enMap); + CHARTABLE.add(0, endefritmap); - // Russian - Map ruMap = new HashMap(); - ruMap.put('.', 1); ruMap.put(',', 1); ruMap.put('!', 1); ruMap.put('?', 1); - ruMap.put('-', 1); ruMap.put('"', 1); ruMap.put('\'', 1); ruMap.put('@', 1); - ruMap.put('#', 1); ruMap.put('$', 1); ruMap.put('%', 1); ruMap.put('&', 1); - ruMap.put('*', 1); ruMap.put('(', 1); ruMap.put(')', 1); ruMap.put(':', 1); - ruMap.put(';', 1); ruMap.put('/', 1); ruMap.put('+', 1); ruMap.put('=', 1); - ruMap.put('<', 1); ruMap.put('>', 1); ruMap.put('^', 1); ruMap.put('_', 1); - ruMap.put('~', 1); ruMap.put('1', 1); - ruMap.put('а', 2); ruMap.put('б', 2); ruMap.put('в', 2); ruMap.put('г', 2); - ruMap.put('2', 2); - ruMap.put('д', 3); ruMap.put('е', 3); ruMap.put('ё', 3); ruMap.put('ж', 3); - ruMap.put('з', 3); ruMap.put('3', 3); - ruMap.put('и', 4); ruMap.put('й', 4); ruMap.put('к', 4); ruMap.put('л', 4); - ruMap.put('4', 4); - ruMap.put('м', 5); ruMap.put('н', 5); ruMap.put('о', 5); ruMap.put('п', 5); - ruMap.put('5', 5); - ruMap.put('р', 6); ruMap.put('с', 6); ruMap.put('т', 6); ruMap.put('у', 6); - ruMap.put('6', 6); - ruMap.put('ф', 7); ruMap.put('х', 7); ruMap.put('ц', 7); ruMap.put('ч', 7); - ruMap.put('7', 7); - ruMap.put('ш', 8); ruMap.put('щ', 8); ruMap.put('ъ', 8); ruMap.put('ы', 8); - ruMap.put('8', 8); - ruMap.put('ь', 9); ruMap.put('э', 9); ruMap.put('ю', 9); ruMap.put('я', 9); - ruMap.put('9', 9); - ruMap.put('+', 0); - ruMap.put('0', 0); - CHARTABLE.add(1, Collections.unmodifiableMap(ruMap)); + // Russian + Map ruMap = new HashMap(); + ruMap.put('.', 1); ruMap.put(',', 1); ruMap.put('!', 1); ruMap.put('?', 1); + ruMap.put('-', 1); ruMap.put('"', 1); ruMap.put('\'', 1); ruMap.put('@', 1); + ruMap.put('#', 1); ruMap.put('$', 1); ruMap.put('%', 1); ruMap.put('&', 1); + ruMap.put('*', 1); ruMap.put('(', 1); ruMap.put(')', 1); ruMap.put(':', 1); + ruMap.put(';', 1); ruMap.put('/', 1); ruMap.put('+', 1); ruMap.put('=', 1); + ruMap.put('<', 1); ruMap.put('>', 1); ruMap.put('^', 1); ruMap.put('_', 1); + ruMap.put('~', 1); ruMap.put('1', 1); + ruMap.put('а', 2); ruMap.put('б', 2); ruMap.put('в', 2); ruMap.put('г', 2); + ruMap.put('2', 2); + ruMap.put('д', 3); ruMap.put('е', 3); ruMap.put('ё', 3); ruMap.put('ж', 3); + ruMap.put('з', 3); ruMap.put('3', 3); + ruMap.put('и', 4); ruMap.put('й', 4); ruMap.put('к', 4); ruMap.put('л', 4); + ruMap.put('4', 4); + ruMap.put('м', 5); ruMap.put('н', 5); ruMap.put('о', 5); ruMap.put('п', 5); + ruMap.put('5', 5); + ruMap.put('р', 6); ruMap.put('с', 6); ruMap.put('т', 6); ruMap.put('у', 6); + ruMap.put('6', 6); + ruMap.put('ф', 7); ruMap.put('х', 7); ruMap.put('ц', 7); ruMap.put('ч', 7); + ruMap.put('7', 7); + ruMap.put('ш', 8); ruMap.put('щ', 8); ruMap.put('ъ', 8); ruMap.put('ы', 8); + ruMap.put('8', 8); + ruMap.put('ь', 9); ruMap.put('э', 9); ruMap.put('ю', 9); ruMap.put('я', 9); + ruMap.put('9', 9); + ruMap.put('+', 0); + ruMap.put('0', 0); + + // add extra characters for other Cyrillic maps. + ruMap.put('ґ', 2); ruMap.put('є', 3); ruMap.put('і', 4); ruMap.put('ї', 4);// Ukrainian chars + // Stub for Bulgarian chars + // Stub for Bielorussian chars + // etc + CHARTABLE.add(1, Collections.unmodifiableMap(ruMap)); - CHARTABLE.add(2, Collections.unmodifiableMap(endefritmap)); - CHARTABLE.add(3, Collections.unmodifiableMap(endefritmap)); - CHARTABLE.add(4, Collections.unmodifiableMap(endefritmap)); - } + CHARTABLE.add(2, Collections.unmodifiableMap(endefritmap)); + CHARTABLE.add(3, Collections.unmodifiableMap(endefritmap)); + CHARTABLE.add(4, Collections.unmodifiableMap(endefritmap)); + + } - protected static final char[][] ENT9TABLE = { { '0', '+' }, - { '.', ',', '?', '!', '"', '/', '-', '@', '$', '%', '&', '*', '#', '(', ')', '_', '1' }, - { 'a', 'b', 'c', 'A', 'B', 'C', '2' }, { 'd', 'e', 'f', 'D', 'E', 'F', '3' }, - { 'g', 'h', 'i', 'G', 'H', 'I', '4' }, { 'j', 'k', 'l', 'J', 'K', 'L', '5' }, - { 'm', 'n', 'o', 'M', 'N', 'O', '6' }, { 'p', 'q', 'r', 's', 'P', 'Q', 'R', 'S', '7' }, - { 't', 'u', 'v', 'T', 'U', 'V', '8' }, { 'w', 'x', 'y', 'z', 'W', 'X', 'Y', 'Z', '9' }, - { ' ', '\n' }, { ' ', '0', '+' }, { '\n' } }; // LAST TWO SPACE ON 0 - protected static final char[][] RUT9TABLE = { { '0', '+' }, - { '.', ',', '?', '!', '"', '/', '-', '@', '$', '%', '&', '*', '#', '(', ')', '_', '1' }, - { 'а', 'б', 'в', 'г', 'А', 'Б', 'В', 'Г', '2' }, { 'д', 'е', 'ё', 'ж', 'з', 'Д', 'Е', 'Ё', 'Ж', 'З', '3' }, - { 'и', 'й', 'к', 'л', 'И', 'Й', 'К', 'Л', '4' }, { 'м', 'н', 'о', 'п', 'М', 'Н', 'О', 'П', '5' }, - { 'р', 'с', 'т', 'у', 'Р', 'С', 'Т', 'У', '6' }, { 'ф', 'х', 'ц', 'ч', 'Ф', 'Х', 'Ц', 'Ч', '7' }, - { 'ш', 'щ', 'ъ', 'ы', 'Ш', 'Щ', 'Ъ', 'Ы', '8' }, { 'ь', 'э', 'ю', 'я', 'Ь', 'Э', 'Ю', 'Я', '9' }, - { ' ', '\n' }, { ' ', '0', '+' }, { '\n' } }; // LAST TWO SPACE ON 0 - protected static final char[][] DET9TABLE = { - { '0', '+' }, - { '.', ',', '?', '!', ':', ';', '"', '\'', '-', '@', '^', '€', '$', '%', '&', '*', '#', '(', ')', '_', '1' }, - { 'a', 'b', 'c', 'A', 'B', 'C', 'ä', 'Ä','á', 'â', 'à', 'å', 'ç', 'Á', 'Â', 'À', 'Å', 'Ç', '2' }, - { 'd', 'e', 'f', 'D', 'E', 'F', 'é','ë','è','ê', 'É', 'Ë', 'È', 'Ê', '3' }, - { 'g', 'h', 'i', 'G', 'H', 'I', 'í', 'ï', 'Í', 'Ï', '4' }, - { 'j', 'k', 'l', 'J', 'K', 'L', '5' }, - { 'm', 'n', 'o', 'M', 'N', 'O', 'ö', 'Ö', 'ñ','ó','ô', 'Ñ', 'Ó', 'Ô', '6' }, - { 'p', 'q', 'r', 's', 'P', 'Q', 'R', 'S', 'ß', '7' }, - { 't', 'u', 'v', 'T', 'U', 'V', 'ü', 'Ü', 'û', 'Û', '8' }, - { 'w', 'x', 'y', 'z', 'W', 'X', 'Y', 'Z', '9' }, - { ' ', '\n' }, { ' ', '0', '+' }, { '\n' } }; // LAST TWO SPACE ON 0 + protected static final char[][] ENT9TABLE = { { '0', '+' }, + { '.', ',', '?', '!', '"', '/', '-', '@', '$', '%', '&', '*', '#', '(', ')', '_', '1' }, + { 'a', 'b', 'c', 'A', 'B', 'C', '2' }, { 'd', 'e', 'f', 'D', 'E', 'F', '3' }, + { 'g', 'h', 'i', 'G', 'H', 'I', '4' }, { 'j', 'k', 'l', 'J', 'K', 'L', '5' }, + { 'm', 'n', 'o', 'M', 'N', 'O', '6' }, { 'p', 'q', 'r', 's', 'P', 'Q', 'R', 'S', '7' }, + { 't', 'u', 'v', 'T', 'U', 'V', '8' }, { 'w', 'x', 'y', 'z', 'W', 'X', 'Y', 'Z', '9' }, + { ' ', '\n' }, { ' ', '0', '+' }, { '\n' } }; // LAST TWO SPACE ON 0 + protected static final char[][] RUT9TABLE = { { '0', '+' }, + { '.', ',', '?', '!', '"', '/', '-', '@', '$', '%', '&', '*', '#', '(', ')', '_', '1' }, + { 'а', 'б', 'в', 'г', 'А', 'Б', 'В', 'Г', '2' }, { 'д', 'е', 'ё', 'ж', 'з', 'Д', 'Е', 'Ё', 'Ж', 'З', '3' }, + { 'и', 'й', 'к', 'л', 'И', 'Й', 'К', 'Л', '4' }, { 'м', 'н', 'о', 'п', 'М', 'Н', 'О', 'П', '5' }, + { 'р', 'с', 'т', 'у', 'Р', 'С', 'Т', 'У', '6' }, { 'ф', 'х', 'ц', 'ч', 'Ф', 'Х', 'Ц', 'Ч', '7' }, + { 'ш', 'щ', 'ъ', 'ы', 'Ш', 'Щ', 'Ъ', 'Ы', '8' }, { 'ь', 'э', 'ю', 'я', 'Ь', 'Э', 'Ю', 'Я', '9' }, + { ' ', '\n' }, { ' ', '0', '+' }, { '\n' } }; // LAST TWO SPACE ON 0 - protected static final char[][] FRT9TABLE = { - { '0', '+' }, - { '.', ',', '?', '!', ':', ';', '"', '/', '-', '@', '^', '€', '$', '%', '&', '*', '#', '(', ')', '_', '1' }, - { 'a', 'b', 'c', 'A', 'B', 'C', 'ä', 'Ä','á', 'â', 'à', 'å', 'ç', 'Á', 'Â', 'À', 'Å', 'Ç', '2' }, - { 'd', 'e', 'f', 'D', 'E', 'F', 'é','ë','è','ê', 'É', 'Ë', 'È', 'Ê', '3' }, - { 'g', 'h', 'i', 'G', 'H', 'I', 'í', 'ï', 'Í', 'Ï', '4' }, - { 'j', 'k', 'l', 'J', 'K', 'L', '5' }, - { 'm', 'n', 'o', 'M', 'N', 'O', 'ö', 'Ö', 'ñ','ó','ô', 'Ñ', 'Ó', 'Ô', '6' }, - { 'p', 'q', 'r', 's', 'P', 'Q', 'R', 'S', 'ß', '7' }, - { 't', 'u', 'v', 'T', 'U', 'V', 'ü', 'Ü', 'û', 'Û', '8' }, - { 'w', 'x', 'y', 'z', 'W', 'X', 'Y', 'Z', '9' }, - { ' ', '\n' }, { ' ', '0', '+' }, { '\n' } }; // LAST TWO SPACE ON 0 + protected static final char[][] DET9TABLE = { + { ' ', '+', '0' }, + { '.', ',', '?', '!', ':', ';', '"', '\'', '-', '@', '^', '€', '$', '%', '&', '*', '(', ')', '_', '1' }, + { 'a', 'b', 'c', 'A', 'B', 'C', 'ä', 'Ä','á', 'â', 'à', 'å', 'ç', 'Á', 'Â', 'À', 'Å', 'Ç', '2' }, + { 'd', 'e', 'f', 'D', 'E', 'F', 'é','ë','è','ê', 'É', 'Ë', 'È', 'Ê', '3' }, + { 'g', 'h', 'i', 'G', 'H', 'I', 'í', 'ï', 'Í', 'Ï', '4' }, + { 'j', 'k', 'l', 'J', 'K', 'L', '5' }, + { 'm', 'n', 'o', 'M', 'N', 'O', 'ö', 'Ö', 'ñ','ó','ô', 'Ñ', 'Ó', 'Ô', '6' }, + { 'p', 'q', 'r', 's', 'P', 'Q', 'R', 'S', 'ß', '7' }, + { 't', 'u', 'v', 'T', 'U', 'V', 'ü', 'Ü', 'û', 'Û', '8' }, + { 'w', 'x', 'y', 'z', 'W', 'X', 'Y', 'Z', '9' }, + { '\n' } }; - protected static final char[][] ITT9TABLE = { - { '+', '0' }, - { '.', ',', '?', '!', ':', ';', '"', '/', '-', '@', '^', '€', '$', '%', '&', '*', '#', '(', ')', '_', '1' }, - { 'a', 'b', 'c', 'A', 'B', 'C', 'à', 'À', '2' }, { 'd', 'e', 'f', 'D', 'E', 'F', 'é', 'è', 'É', 'È', '3' }, - { 'g', 'h', 'i', 'G', 'H', 'I', 'ì', 'Ì', '4' }, { 'j', 'k', 'l', 'J', 'K', 'L', '5' }, - { 'm', 'n', 'o', 'M', 'N', 'O', 'ò', 'Ò', '6' }, { 'p', 'q', 'r', 's', 'P', 'Q', 'R', 'S', '7' }, - { 't', 'u', 'v', 'T', 'U', 'V', 'ù', 'Ù', '8' }, { 'w', 'x', 'y', 'z', 'W', 'X', 'Y', 'Z', '9' }, - { ' ', '\n' }, { ' ', '0', '+' }, { '\n' } }; // LAST TWO SPACE ON 0 +protected static final char[][] FRT9TABLE = { + { ' ', '+', '0' }, + { '.', ',', '?', '!', ':', ';', '"', '/', '-', '@', '^', '€', '$', '%', '&', '*', '(', ')', '_', '1' }, + { 'a', 'b', 'c', 'A', 'B', 'C', '2', 'â', 'à', 'æ', 'ç', 'Â', 'À', 'Æ', 'Ç'}, + { 'd', 'e', 'f', 'D', 'E', 'F', '3', 'é', 'è','ê', 'ë', 'É', 'È', 'Ê', 'Ë' }, + { 'g', 'h', 'i', 'G', 'H', 'I', '4', 'î', 'ï', 'Î', 'Ï' }, + { 'j', 'k', 'l', 'J', 'K', 'L', '5' }, + { 'm', 'n', 'o', 'M', 'N', 'O', '6', 'ô', 'œ', 'Ô', 'Œ'}, + { 'p', 'q', 'r', 's', 'P', 'Q', 'R', 'S', '7' }, + { 't', 'u', 'v', 'T', 'U', 'V', '8', 'û', 'Û', 'ù', 'Ù', 'ü', 'Ü'}, + { 'w', 'x', 'y', 'z', 'W', 'X', 'Y', 'Z', '9' }, + { '\n' } }; + +protected static final char[][] ITT9TABLE = { + { ' ', '+', '0' }, + { '.', ',', '?', '!', ':', ';', '"', '/', '-', '@', '^', '€', '$', '%', '&', '*', '(', ')', '_', '1' }, + { 'a', 'b', 'c', 'A', 'B', 'C', 'à', 'À', '2' }, { 'd', 'e', 'f', 'D', 'E', 'F', 'é', 'è', 'É', 'È', '3' }, + { 'g', 'h', 'i', 'G', 'H', 'I', 'ì', 'Ì', '4' }, { 'j', 'k', 'l', 'J', 'K', 'L', '5' }, + { 'm', 'n', 'o', 'M', 'N', 'O', 'ò', 'Ò', '6' }, { 'p', 'q', 'r', 's', 'P', 'Q', 'R', 'S', '7' }, + { 't', 'u', 'v', 'T', 'U', 'V', 'ù', 'Ù', '8' }, { 'w', 'x', 'y', 'z', 'W', 'X', 'Y', 'Z', '9' }, + { '\n' } }; - protected static final char[][][] T9TABLE = { ENT9TABLE, RUT9TABLE, DET9TABLE, FRT9TABLE, ITT9TABLE }; +protected static final char[][] UKT9TABLE = { { '0', '+' }, + { '.', ',', '?', '!', '\'', '"', '/', '-', '@', '$', '%', '&', '*', '#', '(', ')', '_', '1' }, + { 'а', 'б', 'в', 'г', 'ґ', 'А', 'Б', 'В', 'Г', 'Ґ', '2' }, { 'д', 'е', 'є', 'ж', 'з', 'Д', 'Е', 'Є', 'Ж', 'З', '3' }, + { 'и', 'і', 'ї', 'й', 'к', 'л', 'И', 'І', 'Ї', 'Й', 'К', 'Л', '4' }, { 'м', 'н', 'о', 'п', 'М', 'Н', 'О', 'П', '5' }, + { 'р', 'с', 'т', 'у', 'Р', 'С', 'Т', 'У', '6' }, { 'ф', 'х', 'ц', 'ч', 'Ф', 'Х', 'Ц', 'Ч', '7' }, + { 'ш', 'щ', 'Ш', 'Щ', '8' }, { 'ь', 'ю', 'я', 'Ь', 'Ю', 'Я', '9' }, + { ' ', '\n' }, { ' ', '0', '+' }, { '\n' } }; // LAST TWO SPACE ON 0 + + protected static final char[][][] T9TABLE = { ENT9TABLE, RUT9TABLE, DET9TABLE, FRT9TABLE, ITT9TABLE, UKT9TABLE }; - // last 2 don't matter, are for spaceOnZero extra 'slots' 0 position, and 10 position - protected static final int[] ENT9CAPSTART = { 0, 0, 3, 3, 3, 3, 3, 4, 3, 4, 0, 0, 0 }; - protected static final int[] RUT9CAPSTART = { 0, 0, 4, 5, 4, 4, 4, 4, 4, 4, 0, 0, 0 }; - protected static final int[] DET9CAPSTART = { 0, 0, 3, 3, 3, 3, 3, 4, 3, 4, 0, 0, 0 }; - protected static final int[] FRT9CAPSTART = { 0, 0, 3, 3, 3, 3, 3, 4, 3, 4, 0, 0, 0 }; - protected static final int[] ITT9CAPSTART = { 0, 0, 3, 3, 3, 3, 3, 4, 3, 4, 0, 0, 0 }; - protected static final int[][] T9CAPSTART = {ENT9CAPSTART, RUT9CAPSTART, DET9CAPSTART, FRT9CAPSTART, ITT9CAPSTART}; + // last 2 don't matter, are for spaceOnZero extra 'slots' 0 position, and 10 position + protected static final int[] ENT9CAPSTART = { 0, 0, 3, 3, 3, 3, 3, 4, 3, 4, 0, 0, 0 }; + protected static final int[] RUT9CAPSTART = { 0, 0, 4, 5, 4, 4, 4, 4, 4, 4, 0, 0, 0 }; + protected static final int[] DET9CAPSTART = { 0, 0, 3, 3, 3, 3, 3, 4, 3, 4, 0, 0, 0 }; + protected static final int[] FRT9CAPSTART = { 0, 0, 3, 3, 3, 3, 3, 4, 3, 4, 0, 0, 0 }; + protected static final int[] ITT9CAPSTART = { 0, 0, 3, 3, 3, 3, 3, 4, 3, 4, 0, 0, 0 }; + protected static final int[] UKT9CAPSTART = { 0, 0, 5, 5, 6, 4, 4, 4, 2, 3, 0, 0, 0 }; + protected static final int[][] T9CAPSTART = {ENT9CAPSTART, RUT9CAPSTART, DET9CAPSTART, FRT9CAPSTART, ITT9CAPSTART, UKT9CAPSTART}; - protected static String getStringSequence(String word, LANGUAGE lang) { - StringBuilder seq = new StringBuilder(); - String tword = word.toLowerCase(LangHelper.LOCALES[lang.index]); - for (int i = 0; i < word.length(); i++) { - char c = tword.charAt(i); - Integer z = CharMap.CHARTABLE.get(lang.index).get(c); - if (z == null) { - Log.e("getStringSequence", - "ERROR: " + (int) c + " NOT FOUND FOR [" + lang.name() + "] (" + Integer.toHexString((int) c) + ") Index: " + i); - throw new NullPointerException(); - } - seq.append(z.toString()); - } - return seq.toString(); - } + protected static String getStringSequence(String word, LANGUAGE lang) { + StringBuilder seq = new StringBuilder(); + String tword = word.toLowerCase(LangHelper.LOCALES[lang.index]); + for (int i = 0; i < word.length(); i++) { + char c = tword.charAt(i); + Integer z = CharMap.CHARTABLE.get(lang.index).get(c); + if (z == null) { + Log.e("getStringSequence", + "ERROR: " + (int) c + " NOT FOUND FOR [" + lang.name() + "] (" + Integer.toHexString((int) c) + ") Index: " + i); + throw new NullPointerException(); + } + seq.append(z.toString()); + } + return seq.toString(); + } } + diff --git a/src/org/nyanya/android/traditionalt9/LangHelper.java b/src/org/nyanya/android/traditionalt9/LangHelper.java index 7eaca195..b30388b9 100644 --- a/src/org/nyanya/android/traditionalt9/LangHelper.java +++ b/src/org/nyanya/android/traditionalt9/LangHelper.java @@ -6,111 +6,118 @@ import java.util.Map; public class LangHelper { protected static final Locale RUSSIAN = new Locale("ru","RU"); - public enum LANGUAGE { - // MAKE SURE THESE MATCH WITH values/const.xml - // (index, id) Where index is index in arrays like LOCALES and MUST increment and MUST be in - // the same order as arrays.xml/pref_lang_values, and id is the identifier used in - // the database and such. id should never change unless database update is done. - // id MUST increment in doubles (as the enabled languages are stored as an integer) - NONE(-1, -1), EN(0,1), RU(1,2), DE(2,4), FR(3,8), IT(4,16); - public final int index; - public final int id; - // lookup map - private static final Map lookup = new HashMap(); - private static final LANGUAGE[] ids = LANGUAGE.values(); - static { for (LANGUAGE l : ids) lookup.put(l.id, l); } + protected static final Locale UKRAINIAN = new Locale("uk","UA"); + public enum LANGUAGE { + // MAKE SURE THESE MATCH WITH values/const.xml + // (index, id) Where index is index in arrays like LOCALES and MUST increment and MUST be in + // the same order as arrays.xml/pref_lang_values, and id is the identifier used in + // the database and such. id should never change unless database update is done. + // id MUST increment in doubles (as the enabled languages are stored as an integer) + NONE(-1, -1), EN(0,1), RU(1,2), DE(2,4), FR(3,8), IT(4,16), UK(5,32); + public final int index; + public final int id; + // lookup map + private static final Map lookup = new HashMap(); + private static final LANGUAGE[] ids = LANGUAGE.values(); + static { for (LANGUAGE l : ids) lookup.put(l.id, l); } - private LANGUAGE(int index, int id) { this.index = index; this.id = id; } + private LANGUAGE(int index, int id) { this.index = index; this.id = id; } - public static LANGUAGE get(int i) { return lookup.get(i);} - } + public static LANGUAGE get(int i) { return lookup.get(i);} + } - protected static final Locale[] LOCALES = {Locale.ENGLISH, RUSSIAN, Locale.GERMAN, Locale.FRENCH, Locale.ITALIAN}; + protected static final Locale[] LOCALES = {Locale.ENGLISH, RUSSIAN, Locale.GERMAN, Locale.FRENCH, Locale.ITALIAN, UKRAINIAN}; - public static final int LANG_DEFAULT = LANGUAGE.EN.id; + public static final int LANG_DEFAULT = LANGUAGE.EN.id; - protected static final int NLANGS = LANGUAGE.lookup.size(); + protected static final int NLANGS = LANGUAGE.lookup.size(); - protected static String getString(int lang) { + protected static String getString(int lang) { return LANGUAGE.get(lang).name(); } - protected static int getIndex(LANGUAGE l) { - return l.index; - } + protected static int getIndex(LANGUAGE l) { + return l.index; + } //[LANG][MODE][CAPSMODE] = iconref // first group en, first line LANG, second line TEXT, last line NUM protected static final int[][][] ICONMAP = { - { - //English resources - {R.drawable.ime_en_lang_lower, R.drawable.ime_en_lang_single, R.drawable.ime_en_lang_upper}, - {R.drawable.ime_en_text_lower, R.drawable.ime_en_text_single, R.drawable.ime_en_text_upper}, - {R.drawable.ime_number}, - }, - { - // Russian resources - {R.drawable.ime_ru_lang_lower, R.drawable.ime_ru_lang_single, R.drawable.ime_ru_lang_upper}, //LANG - {R.drawable.ime_ru_text_lower, R.drawable.ime_ru_text_single, R.drawable.ime_ru_text_upper}, //TEXT - {R.drawable.ime_number}, //NUM - }, - { - // German resources - {R.drawable.ime_de_lang_lower, R.drawable.ime_de_lang_single, R.drawable.ime_de_lang_upper}, //LANG - {R.drawable.ime_en_text_lower, R.drawable.ime_en_text_single, R.drawable.ime_en_text_upper}, //TEXT - {R.drawable.ime_number}, //NUM - }, - { - // French resources - {R.drawable.ime_fr_lang_lower, R.drawable.ime_fr_lang_single, R.drawable.ime_fr_lang_upper}, //LANG - {R.drawable.ime_en_text_lower, R.drawable.ime_en_text_single, R.drawable.ime_en_text_upper}, //TEXT - {R.drawable.ime_number}, //NUM - }, - { - // Italian resources - {R.drawable.ime_it_lang_lower, R.drawable.ime_it_lang_single, R.drawable.ime_it_lang_upper}, //LANG - {R.drawable.ime_en_text_lower, R.drawable.ime_en_text_single, R.drawable.ime_en_text_upper}, //TEXT - {R.drawable.ime_number}, //NUM - }, + { + //English resources + {R.drawable.ime_en_lang_lower, R.drawable.ime_en_lang_single, R.drawable.ime_en_lang_upper}, + {R.drawable.ime_en_text_lower, R.drawable.ime_en_text_single, R.drawable.ime_en_text_upper}, + {R.drawable.ime_number}, + }, + { + // Russian resources + {R.drawable.ime_ru_lang_lower, R.drawable.ime_ru_lang_single, R.drawable.ime_ru_lang_upper}, //LANG + {R.drawable.ime_ru_text_lower, R.drawable.ime_ru_text_single, R.drawable.ime_ru_text_upper}, //TEXT + {R.drawable.ime_number}, //NUM + }, + { + // German resources + {R.drawable.ime_de_lang_lower, R.drawable.ime_de_lang_single, R.drawable.ime_de_lang_upper}, //LANG + {R.drawable.ime_en_text_lower, R.drawable.ime_en_text_single, R.drawable.ime_en_text_upper}, //TEXT + {R.drawable.ime_number}, //NUM + }, + { + // French resources + {R.drawable.ime_fr_lang_lower, R.drawable.ime_fr_lang_single, R.drawable.ime_fr_lang_upper}, //LANG + {R.drawable.ime_en_text_lower, R.drawable.ime_en_text_single, R.drawable.ime_en_text_upper}, //TEXT + {R.drawable.ime_number}, //NUM + }, + { + // Italian resources + {R.drawable.ime_it_lang_lower, R.drawable.ime_it_lang_single, R.drawable.ime_it_lang_upper}, //LANG + {R.drawable.ime_en_text_lower, R.drawable.ime_en_text_single, R.drawable.ime_en_text_upper}, //TEXT + {R.drawable.ime_number}, //NUM + }, + { + // Ukrainian resources + {R.drawable.ime_uk_lang_lower, R.drawable.ime_uk_lang_single, R.drawable.ime_uk_lang_upper}, //LANG + {R.drawable.ime_ru_text_lower, R.drawable.ime_ru_text_single, R.drawable.ime_ru_text_upper}, //TEXT + {R.drawable.ime_number}, //NUM + }, }; - public static LANGUAGE[] buildLangs(int i) { - int num = 0; - //calc size of filtered array - for (LANGUAGE l : LANGUAGE.ids) { - if ((i & l.id) == l.id) { - num++; - } - } - LANGUAGE[] la = new LANGUAGE[num]; - int lai = 0; - for (LANGUAGE l : LANGUAGE.ids) { - if ((i & l.id) == l.id) { - la[lai] = l; - lai++; - } - } - return la; - } + public static LANGUAGE[] buildLangs(int i) { + int num = 0; + //calc size of filtered array + for (LANGUAGE l : LANGUAGE.ids) { + if ((i & l.id) == l.id) { + num++; + } + } + LANGUAGE[] la = new LANGUAGE[num]; + int lai = 0; + for (LANGUAGE l : LANGUAGE.ids) { + if ((i & l.id) == l.id) { + la[lai] = l; + lai++; + } + } + return la; + } - public static int shrinkLangs(LANGUAGE[] langs) { - int i = 0; - for (LANGUAGE l : langs) - i = i | l.id; - return i; - } - public static int shrinkLangs(int[] langs) { - int i = 0; - for (int l : langs) - i = i | l; - return i; - } + public static int shrinkLangs(LANGUAGE[] langs) { + int i = 0; + for (LANGUAGE l : langs) + i = i | l.id; + return i; + } + public static int shrinkLangs(int[] langs) { + int i = 0; + for (int l : langs) + i = i | l; + return i; + } - protected static int findIndex(LANGUAGE[] ia, LANGUAGE target) { - for (int x=0; x