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}
|
{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 *transliteration_context_iast_czech_alloc()
|
||||||
{
|
{
|
||||||
struct transliteration_context *context;
|
struct transliteration_context *context;
|
||||||
|
|
||||||
context = malloc(sizeof(*context));
|
context = malloc(sizeof(*context));
|
||||||
context->table = table;
|
context->table = table;
|
||||||
|
context->filters = filters;
|
||||||
|
|
||||||
return context;
|
return context;
|
||||||
}
|
}
|
||||||
|
|
5
iast.c
5
iast.c
|
@ -99,12 +99,17 @@ static const struct transliteration_letter table[] = {
|
||||||
{0, 0, NULL}
|
{0, 0, NULL}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static const transliteration_filter_t filters[] = {
|
||||||
|
NULL
|
||||||
|
};
|
||||||
|
|
||||||
struct transliteration_context *transliteration_context_iast_alloc()
|
struct transliteration_context *transliteration_context_iast_alloc()
|
||||||
{
|
{
|
||||||
struct transliteration_context *context;
|
struct transliteration_context *context;
|
||||||
|
|
||||||
context = malloc(sizeof(*context));
|
context = malloc(sizeof(*context));
|
||||||
context->table = table;
|
context->table = table;
|
||||||
|
context->filters = filters;
|
||||||
|
|
||||||
return context;
|
return context;
|
||||||
}
|
}
|
||||||
|
|
|
@ -36,6 +36,17 @@ static void syllable_modify(struct syllable *syllable, const char *data)
|
||||||
syllable->data = strdup(buffer);
|
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,
|
char *transliterate_devanagari_to_latin(const char *text,
|
||||||
struct transliteration_context *context)
|
struct transliteration_context *context)
|
||||||
{
|
{
|
||||||
|
@ -72,6 +83,8 @@ char *transliterate_devanagari_to_latin(const char *text,
|
||||||
free(tmp);
|
free(tmp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
apply_transliteration_filters(head, context->filters);
|
||||||
|
|
||||||
return syllable_chain_to_string(head);
|
return syllable_chain_to_string(head);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -9,6 +9,8 @@
|
||||||
#define FLAG_REGULAR 1 << 0
|
#define FLAG_REGULAR 1 << 0
|
||||||
#define FLAG_MODIFIER 1 << 1
|
#define FLAG_MODIFIER 1 << 1
|
||||||
|
|
||||||
|
typedef void (*transliteration_filter_t)(struct syllable *syllable_chain);
|
||||||
|
|
||||||
struct transliteration_letter {
|
struct transliteration_letter {
|
||||||
unsigned int code;
|
unsigned int code;
|
||||||
unsigned int flags;
|
unsigned int flags;
|
||||||
|
@ -17,6 +19,7 @@ struct transliteration_letter {
|
||||||
|
|
||||||
struct transliteration_context {
|
struct transliteration_context {
|
||||||
const struct transliteration_letter *table;
|
const struct transliteration_letter *table;
|
||||||
|
const transliteration_filter_t *filters;
|
||||||
};
|
};
|
||||||
|
|
||||||
char *transliterate_devanagari_to_latin(const char *text,
|
char *transliterate_devanagari_to_latin(const char *text,
|
||||||
|
|
Loading…
Add table
Reference in a new issue