FS-2809 --resolved

This commit is contained in:
Seven Du 2013-07-14 10:34:35 +08:00
parent 823c2a81dd
commit f90e828bd5
1 changed files with 97 additions and 1 deletions

View File

@ -40,7 +40,7 @@
* Anthony Minessale II <anthm@freeswitch.org> * Anthony Minessale II <anthm@freeswitch.org>
* PeteDao <petekay@gmail.com> * PeteDao <petekay@gmail.com>
* Steve Underwood 0.0.1 <steveu@coppice.org> * Steve Underwood 0.0.1 <steveu@coppice.org>
* * Seven Du <dujinfang@gmail.com>
* *
* mod_say_zh.c -- Say for Mandarin, Cantonese, and probably any other Chinese * mod_say_zh.c -- Say for Mandarin, Cantonese, and probably any other Chinese
* dialect. * dialect.
@ -430,6 +430,58 @@ static switch_status_t zh_say_money(switch_core_session_t *session, char *tosay,
return SWITCH_STATUS_SUCCESS; return SWITCH_STATUS_SUCCESS;
} }
static switch_status_t zh_CN_say_money(switch_core_session_t *session, char *tosay, switch_say_args_t *say_args, switch_input_args_t *args)
{
char sbuf[16] = ""; /* enough for 999,999,999,999.99 (w/o the commas or leading $) */
char dbuf[16] = ""; /* enough for digits/x.wav */
char *yuan = NULL;
char *rest = NULL;
int i;
if (strlen(tosay) > 15 || !(tosay = switch_strip_nonnumerics(tosay, sbuf, sizeof(sbuf)-1))) {
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Parse Error!\n");
return SWITCH_STATUS_GENERR;
}
yuan = sbuf;
if ((rest = strchr(sbuf, '.'))) {
*rest++ = '\0';
}
/* If positive sign - skip over" */
if (sbuf[0] == '+') {
yuan++;
}
/* If negative say "negative" */
if (sbuf[0] == '-') {
say_file("currency/negative.wav");
yuan++;
}
/* Say dollar amount */
zh_say_general_count(session, yuan, say_args, args);
say_file("currency/yuan.wav");
if (!rest) return SWITCH_STATUS_SUCCESS;
/* Say cents */
for (i=0; *rest; i++, rest++) {
sprintf(dbuf, "digits/%c.wav", *rest);
say_file(dbuf);
if (i == 0) {
say_file("currency/jiao.wav");
} else if (i == 1) {
say_file("currency/fen.wav");
} else if (i == 2) {
say_file("currency/li.wav");
} /* else just say the rest of digits */
}
return SWITCH_STATUS_SUCCESS;
}
static switch_status_t zh_say(switch_core_session_t *session, char *tosay, switch_say_args_t *say_args, switch_input_args_t *args) static switch_status_t zh_say(switch_core_session_t *session, char *tosay, switch_say_args_t *say_args, switch_input_args_t *args)
{ {
switch_say_callback_t say_cb = NULL; switch_say_callback_t say_cb = NULL;
@ -469,15 +521,59 @@ static switch_status_t zh_say(switch_core_session_t *session, char *tosay, switc
return SWITCH_STATUS_FALSE; return SWITCH_STATUS_FALSE;
} }
static switch_status_t zh_CN_say(switch_core_session_t *session, char *tosay, switch_say_args_t *say_args, switch_input_args_t *args)
{
switch_say_callback_t say_cb = NULL;
switch (say_args->type) {
case SST_NUMBER:
case SST_ITEMS:
case SST_PERSONS:
case SST_MESSAGES:
say_cb = zh_say_general_count;
break;
case SST_TIME_MEASUREMENT:
case SST_CURRENT_DATE:
case SST_CURRENT_TIME:
case SST_CURRENT_DATE_TIME:
say_cb = zh_say_time;
break;
case SST_IP_ADDRESS:
return switch_ivr_say_ip(session, tosay, zh_say_general_count, say_args, args);
break;
case SST_NAME_SPELLED:
case SST_NAME_PHONETIC:
return switch_ivr_say_spell(session, tosay, say_args, args);
break;
case SST_CURRENCY:
say_cb = zh_CN_say_money;
break;
default:
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Unknown Say type=[%d]\n", say_args->type);
break;
}
if (say_cb) {
return say_cb(session, tosay, say_args, args);
}
return SWITCH_STATUS_FALSE;
}
SWITCH_MODULE_LOAD_FUNCTION(mod_say_zh_load) SWITCH_MODULE_LOAD_FUNCTION(mod_say_zh_load)
{ {
switch_say_interface_t *say_interface; switch_say_interface_t *say_interface;
switch_say_interface_t *say_zh_CN_interface;
/* connect my internal structure to the blank pointer passed to me */ /* connect my internal structure to the blank pointer passed to me */
*module_interface = switch_loadable_module_create_module_interface(pool, modname); *module_interface = switch_loadable_module_create_module_interface(pool, modname);
say_interface = switch_loadable_module_create_interface(*module_interface, SWITCH_SAY_INTERFACE); say_interface = switch_loadable_module_create_interface(*module_interface, SWITCH_SAY_INTERFACE);
say_interface->interface_name = "zh"; say_interface->interface_name = "zh";
say_interface->say_function = zh_say; say_interface->say_function = zh_say;
say_zh_CN_interface = switch_loadable_module_create_interface(*module_interface, SWITCH_SAY_INTERFACE);
say_zh_CN_interface->interface_name = "zh_CN";
say_zh_CN_interface->say_function = zh_CN_say;
/* indicate that the module should continue to be loaded */ /* indicate that the module should continue to be loaded */
return SWITCH_STATUS_SUCCESS; return SWITCH_STATUS_SUCCESS;
} }