@@ -731,6 +731,29 @@ text_decoder_decode_wstring(espeak_ng_TEXT_DECODER *decoder, | |||
return ENS_OK; | |||
} | |||
espeak_ng_STATUS | |||
text_decoder_decode_string_multibyte(espeak_ng_TEXT_DECODER *decoder, | |||
const void *input, | |||
espeak_ng_ENCODING encoding, | |||
int flags) | |||
{ | |||
switch (flags & 7) | |||
{ | |||
case espeakCHARS_WCHAR: | |||
return text_decoder_decode_wstring(decoder, (const wchar_t *)input, -1); | |||
case espeakCHARS_AUTO: | |||
return text_decoder_decode_string_auto(decoder, (const char *)input, -1, encoding); | |||
case espeakCHARS_UTF8: | |||
return text_decoder_decode_string(decoder, (const char *)input, -1, ESPEAKNG_ENCODING_UTF_8); | |||
case espeakCHARS_8BIT: | |||
return text_decoder_decode_string(decoder, (const char *)input, -1, encoding); | |||
case espeakCHARS_16BIT: | |||
return text_decoder_decode_string(decoder, (const char *)input, -1, ESPEAKNG_ENCODING_ISO_10646_UCS_2); | |||
default: | |||
return ENS_UNKNOWN_TEXT_ENCODING; | |||
} | |||
} | |||
int | |||
text_decoder_eof(espeak_ng_TEXT_DECODER *decoder) | |||
{ |
@@ -47,6 +47,12 @@ text_decoder_decode_wstring(espeak_ng_TEXT_DECODER *decoder, | |||
const wchar_t *string, | |||
int length); | |||
espeak_ng_STATUS | |||
text_decoder_decode_string_multibyte(espeak_ng_TEXT_DECODER *decoder, | |||
const void *input, | |||
espeak_ng_ENCODING encoding, | |||
int flags); | |||
int | |||
text_decoder_eof(espeak_ng_TEXT_DECODER *decoder); | |||
@@ -1970,26 +1970,8 @@ const void *TranslateClause(Translator *tr, const void *vp_input, int *tone_out, | |||
if (p_decoder == NULL) | |||
p_decoder = create_text_decoder(); | |||
switch (option_multibyte) | |||
{ | |||
case espeakCHARS_WCHAR: | |||
text_decoder_decode_wstring(p_decoder, (const wchar_t *)vp_input, -1); | |||
break; | |||
case espeakCHARS_AUTO: | |||
text_decoder_decode_string_auto(p_decoder, (const char *)vp_input, -1, tr->encoding); | |||
break; | |||
case espeakCHARS_UTF8: | |||
text_decoder_decode_string(p_decoder, (const char *)vp_input, -1, ESPEAKNG_ENCODING_UTF_8); | |||
break; | |||
case espeakCHARS_8BIT: | |||
text_decoder_decode_string(p_decoder, (const char *)vp_input, -1, tr->encoding); | |||
break; | |||
case espeakCHARS_16BIT: | |||
text_decoder_decode_string(p_decoder, (const char *)vp_input, -1, ESPEAKNG_ENCODING_ISO_10646_UCS_2); | |||
break; | |||
default: | |||
return NULL; // unknown multibyte option value | |||
} | |||
if (text_decoder_decode_string_multibyte(p_decoder, vp_input, tr->encoding, option_multibyte) != ENS_OK) | |||
return NULL; | |||
embedded_ix = 0; | |||
embedded_read = 0; |