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

@@ -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)
{

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

@@ -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);


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

@@ -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;

Loading…
Cancel
Save