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