From 70e72e01d24bd6fe1e9ef15bcf3ceeccb69e2d6b Mon Sep 17 00:00:00 2001 From: Solomon Peachy Date: Tue, 21 Sep 2021 19:16:23 -0400 Subject: talk: Add support for languages that swap the tens position in numbers For example, English would say "231" as "two hundred thirty one" but many other languages would say "two hundred one and thirty" So, if VOICE_NUMERIC_TENS_SWAP_SEPARATOR is not an empty string, swap the tens and ones position and use that string ("and" in the above example) as the voiced separator. Change-Id: I69f8064d44b3995827327cabae6ad352bf257d04 --- apps/talk.c | 45 ++++++++++++++++++++++++++++++++++++--------- 1 file changed, 36 insertions(+), 9 deletions(-) (limited to 'apps/talk.c') diff --git a/apps/talk.c b/apps/talk.c index 73191c22c3..e627337162 100644 --- a/apps/talk.c +++ b/apps/talk.c @@ -1188,17 +1188,44 @@ int talk_number(long n, bool enqueue) talk_id(VOICE_HUNDRED, true); } - /* combination indexing */ - if (ones > 20) + struct queue_entry tens_swap; + if (get_clip(VOICE_NUMERIC_TENS_SWAP_SEPARATOR, &tens_swap) >= 0) { - int tens = ones/10 + 18; - talk_id(VOICE_ZERO + tens, true); - ones %= 10; + /* direct indexing */ + if (ones <= 20) + { + talk_id(VOICE_ZERO + ones, true); + } + else if (ones) + { + int tmp = ones % 10; + if (tmp) + { + talk_id(VOICE_ZERO + tmp, true); + talk_id(VOICE_NUMERIC_TENS_SWAP_SEPARATOR, true); + } + } + /* combination indexing */ + if (ones > 20) + { + int tens = ones/10 + 18; + talk_id(VOICE_ZERO + tens, true); + } } + else + { + /* combination indexing */ + if (ones > 20) + { + int tens = ones/10 + 18; + talk_id(VOICE_ZERO + tens, true); + ones %= 10; + } - /* direct indexing */ - if (ones) - talk_id(VOICE_ZERO + ones, true); + /* direct indexing */ + if (ones) + talk_id(VOICE_ZERO + ones, true); + } /* add billion, million, thousand */ if (mil) @@ -1215,7 +1242,7 @@ int talk_number(long n, bool enqueue) static int talk_year(long year, bool enqueue) { int rem; - if(year < 1100 || year >=2000) + if(year < 1100 || (year >=2000 && year < 2100)) /* just say it as a regular number */ return talk_number(year, enqueue); /* Say century */ -- cgit v1.2.3