introduce output filters
This commit is contained in:
parent
1b0623ca43
commit
d72c79d0e2
4 changed files with 32 additions and 0 deletions
11
iast-czech.c
11
iast-czech.c
|
@ -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
5
iast.c
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
@ -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,
|
||||
|
|
Loading…
Add table
Reference in a new issue