blob: 458d0b65055da1d607c4ff1000f2a8ce7567dac2 [file] [log] [blame]
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "liblouis.h"
#include "louis.h"
static int compare_widechars(const widechar* buf1, const widechar* buf2, int len) {
int i;
for (i = 0; i < len; i++)
if (buf1[i] != buf2[i]) return 1;
return 0;
}
static int compare_chars(const char* buf1, const char* buf2, int len) {
int i;
for (i = 0; i < len; i++)
if (buf1[i] != buf2[i]) return 1;
return 0;
}
static void print_widechars(const widechar* buf, int len) {
int i;
for (i = 0; i < len; i++)
printf("%c", buf[i]);
}
static void print_chars(const char* buf, int len) {
int i;
for (i = 0; i < len; i++)
printf("%c", buf[i]);
}
#define fail() { \
result = 1; \
goto free; \
}
#define fail_if(condition, ...) { \
if (condition) { \
printf(__VA_ARGS__); \
printf("\n"); \
fail(); } \
}
static int check_hyphenation(const char* table, const char* text) {
int result = 0;
int textlen = strlen(text);
int brllen1 = textlen * 3;
int brllen2 = textlen * 3;
widechar* textbuf = malloc(textlen * sizeof(widechar));
widechar* brlbuf1 = malloc(brllen1 * sizeof(widechar));
widechar* brlbuf2 = malloc(brllen2 * sizeof(widechar));
char* texthyph = malloc(textlen * sizeof(char));
char* brlhyph1 = malloc(brllen1 * sizeof(char));
char* brlhyph2 = malloc(brllen2 * sizeof(char));
textlen = extParseChars(text, textbuf);
/* the easy way */
fail_if(
!lou_hyphenate(table, textbuf, textlen, texthyph, 0),
"Hyphenation failed!");
fail_if(
!lou_translatePrehyphenated(table, textbuf, &textlen, brlbuf1, &brllen1, NULL, NULL, NULL, NULL, NULL, texthyph, brlhyph1, 0),
"Translation failed!");
/* the hard way */
fail_if(
!lou_translate(table, textbuf, &textlen, brlbuf2, &brllen2, NULL, NULL, NULL, NULL, NULL, 0),
"Translation failed!");
fail_if(
!lou_hyphenate(table, brlbuf2, brllen2, brlhyph2, 1),
"Hyphenation failed!");
/* compare results */
fail_if(
brllen1 != brllen2,
"Output lengths not equal: %d vs. %d", brllen1, brllen2);
if (compare_widechars(brlbuf1, brlbuf2, brllen1)) {
printf("Braille outputs not equal: ");
print_widechars(brlbuf1, brllen1);
printf(" vs. ");
print_widechars(brlbuf2, brllen2);
printf("\n");
fail(); }
if (compare_chars(brlhyph1, brlhyph2, brllen1)) {
printf("Hyphenation points not equal: ");
print_chars(brlhyph1, brllen1);
printf(" vs. ");
print_chars(brlhyph2, brllen2);
printf("\n");
fail(); }
free:
free(textbuf);
free(brlbuf1);
free(brlbuf2);
free(texthyph);
free(brlhyph1);
free(brlhyph2);
return result;
}
int main(int argc, char **argv) {
int result = 0;
result = result | check_hyphenation("en-us-g1.utb,hyph_en_US.dic", "SomeExampleToBeHyphenated");
return result;
}