Browse Source

encoding.c: Create a text_decoder_decode_string_multibyte helper to work with the espeakCHARS_* flags.

master
Reece H. Dunn 8 years ago
parent
commit
b3e0fbc8ed
3 changed files with 31 additions and 20 deletions
  1. 23
    0
      src/libespeak-ng/encoding.c
  2. 6
    0
      src/libespeak-ng/encoding.h
  3. 2
    20
      src/libespeak-ng/translate.c

+ 23
- 0
src/libespeak-ng/encoding.c View File

return ENS_OK; 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 int
text_decoder_eof(espeak_ng_TEXT_DECODER *decoder) text_decoder_eof(espeak_ng_TEXT_DECODER *decoder)
{ {

+ 6
- 0
src/libespeak-ng/encoding.h View File

const wchar_t *string, const wchar_t *string,
int length); 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 int
text_decoder_eof(espeak_ng_TEXT_DECODER *decoder); text_decoder_eof(espeak_ng_TEXT_DECODER *decoder);



+ 2
- 20
src/libespeak-ng/translate.c View File

if (p_decoder == NULL) if (p_decoder == NULL)
p_decoder = create_text_decoder(); 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_ix = 0;
embedded_read = 0; embedded_read = 0;

Loading…
Cancel
Save