return c1 + (c2 << 8); | return c1 + (c2 << 8); | ||||
} | } | ||||
static uint32_t | |||||
string_decoder_getc_wchar(espeak_ng_TEXT_DECODER *decoder) | |||||
{ | |||||
wchar_t c = *(const wchar_t *)decoder->current; | |||||
decoder->current += sizeof(wchar_t); | |||||
return c; | |||||
} | |||||
typedef struct | typedef struct | ||||
{ | { | ||||
uint32_t (*get)(espeak_ng_TEXT_DECODER *decoder); | uint32_t (*get)(espeak_ng_TEXT_DECODER *decoder); | ||||
return ENS_OK; | return ENS_OK; | ||||
} | } | ||||
espeak_ng_STATUS | |||||
text_decoder_decode_wstring(espeak_ng_TEXT_DECODER *decoder, | |||||
const wchar_t *string, | |||||
int length) | |||||
{ | |||||
decoder->get = string_decoder_getc_wchar; | |||||
decoder->codepage = NULL; | |||||
decoder->current = (const uint8_t *)string; | |||||
decoder->end = (const uint8_t *)(string + length); | |||||
return ENS_OK; | |||||
} | |||||
int | int | ||||
text_decoder_eof(espeak_ng_TEXT_DECODER *decoder) | text_decoder_eof(espeak_ng_TEXT_DECODER *decoder) | ||||
{ | { |
int length, | int length, | ||||
espeak_ng_ENCODING encoding); | espeak_ng_ENCODING encoding); | ||||
espeak_ng_STATUS | |||||
text_decoder_decode_wstring(espeak_ng_TEXT_DECODER *decoder, | |||||
const wchar_t *string, | |||||
int length); | |||||
int | int | ||||
text_decoder_eof(espeak_ng_TEXT_DECODER *decoder); | text_decoder_eof(espeak_ng_TEXT_DECODER *decoder); | ||||
destroy_text_decoder(decoder); | destroy_text_decoder(decoder); | ||||
} | } | ||||
void | |||||
test_wchar_decoder() | |||||
{ | |||||
printf("testing wchar_t decoder\n"); | |||||
espeak_ng_TEXT_DECODER *decoder = create_text_decoder(); | |||||
assert(text_decoder_decode_wstring(decoder, L"aG\xA0\x2045", 4) == ENS_OK); | |||||
assert(text_decoder_eof(decoder) == 0); | |||||
assert(text_decoder_getc(decoder) == 'a'); | |||||
assert(text_decoder_eof(decoder) == 0); | |||||
assert(text_decoder_getc(decoder) == 'G'); | |||||
assert(text_decoder_eof(decoder) == 0); | |||||
assert(text_decoder_getc(decoder) == 0xA0); | |||||
assert(text_decoder_eof(decoder) == 0); | |||||
assert(text_decoder_getc(decoder) == 0x2045); | |||||
assert(text_decoder_eof(decoder) == 1); | |||||
destroy_text_decoder(decoder); | |||||
} | |||||
int | int | ||||
main(int argc, char **argv) | main(int argc, char **argv) | ||||
{ | { | ||||
test_utf_8_encoding(); | test_utf_8_encoding(); | ||||
test_iso_10646_ucs_2_encoding(); | test_iso_10646_ucs_2_encoding(); | ||||
test_wchar_decoder(); | |||||
printf("done\n"); | printf("done\n"); | ||||
return EXIT_SUCCESS; | return EXIT_SUCCESS; |