introduce output filters

This commit is contained in:
Vlasta Vesely 2018-04-30 18:14:39 +02:00
parent 1b0623ca43
commit d72c79d0e2
4 changed files with 32 additions and 0 deletions

View file

@ -101,12 +101,23 @@ static const struct transliteration_letter table[] = {
{0, 0, NULL}
};
static void dummy_filter(struct syllable *chain)
{
printf("%s%s\n", chain->next->data, chain->next->next->data);
}
static const transliteration_filter_t filters[] = {
dummy_filter,
NULL
};
struct transliteration_context *transliteration_context_iast_czech_alloc()
{
struct transliteration_context *context;
context = malloc(sizeof(*context));
context->table = table;
context->filters = filters;
return context;
}

5
iast.c
View file

@ -99,12 +99,17 @@ static const struct transliteration_letter table[] = {
{0, 0, NULL}
};
static const transliteration_filter_t filters[] = {
NULL
};
struct transliteration_context *transliteration_context_iast_alloc()
{
struct transliteration_context *context;
context = malloc(sizeof(*context));
context->table = table;
context->filters = filters;
return context;
}

View file

@ -36,6 +36,17 @@ static void syllable_modify(struct syllable *syllable, const char *data)
syllable->data = strdup(buffer);
}
static void apply_transliteration_filters(struct syllable *head,
const transliteration_filter_t *filters)
{
const transliteration_filter_t *filter = filters;
while (*filter) {
(*filter)(head);
filter++;
}
}
char *transliterate_devanagari_to_latin(const char *text,
struct transliteration_context *context)
{
@ -72,6 +83,8 @@ char *transliterate_devanagari_to_latin(const char *text,
free(tmp);
}
apply_transliteration_filters(head, context->filters);
return syllable_chain_to_string(head);
}

View file

@ -9,6 +9,8 @@
#define FLAG_REGULAR 1 << 0
#define FLAG_MODIFIER 1 << 1
typedef void (*transliteration_filter_t)(struct syllable *syllable_chain);
struct transliteration_letter {
unsigned int code;
unsigned int flags;
@ -17,6 +19,7 @@ struct transliteration_letter {
struct transliteration_context {
const struct transliteration_letter *table;
const transliteration_filter_t *filters;
};
char *transliterate_devanagari_to_latin(const char *text,