Browse Source

encoding.c: Implement a peekc API.

master
Reece H. Dunn 8 years ago
parent
commit
3f692f498b
3 changed files with 37 additions and 0 deletions
  1. 9
    0
      src/libespeak-ng/encoding.c
  2. 3
    0
      src/libespeak-ng/encoding.h
  3. 25
    0
      tests/encoding.c

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

@@ -800,6 +800,15 @@ text_decoder_getc(espeak_ng_TEXT_DECODER *decoder)
return decoder->get(decoder);
}

uint32_t
text_decoder_peekc(espeak_ng_TEXT_DECODER *decoder)
{
const uint8_t *current = decoder->current;
uint32_t c = decoder->get(decoder);
decoder->current = current;
return c;
}

const void *
text_decoder_get_buffer(espeak_ng_TEXT_DECODER *decoder)
{

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

@@ -59,6 +59,9 @@ text_decoder_eof(espeak_ng_TEXT_DECODER *decoder);
uint32_t
text_decoder_getc(espeak_ng_TEXT_DECODER *decoder);

uint32_t
text_decoder_peekc(espeak_ng_TEXT_DECODER *decoder);

const void *
text_decoder_get_buffer(espeak_ng_TEXT_DECODER *decoder);


+ 25
- 0
tests/encoding.c View File

@@ -846,6 +846,29 @@ test_auto_decoder()
destroy_text_decoder(decoder);
}

void
test_peekc()
{
printf("testing peekc\n");

espeak_ng_TEXT_DECODER *decoder = create_text_decoder();

assert(text_decoder_decode_string(decoder, "aGd", 3, ESPEAKNG_ENCODING_US_ASCII) == ENS_OK);
assert(text_decoder_eof(decoder) == 0);
assert(text_decoder_getc(decoder) == 'a');
assert(text_decoder_eof(decoder) == 0);
assert(text_decoder_peekc(decoder) == 'G');
assert(text_decoder_eof(decoder) == 0);
assert(text_decoder_getc(decoder) == 'G');
assert(text_decoder_eof(decoder) == 0);
assert(text_decoder_peekc(decoder) == 'd');
assert(text_decoder_eof(decoder) == 0);
assert(text_decoder_getc(decoder) == 'd');
assert(text_decoder_eof(decoder) == 1);

destroy_text_decoder(decoder);
}

int
main(int argc, char **argv)
{
@@ -880,6 +903,8 @@ main(int argc, char **argv)
test_wchar_decoder();
test_auto_decoder();

test_peekc();

printf("done\n");

return EXIT_SUCCESS;

Loading…
Cancel
Save