FS-2809 --resolved
This commit is contained in:
parent
823c2a81dd
commit
f90e828bd5
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue