iast-czech: add filter for nasal consonants conversion

This commit is contained in:
Vlasta Vesely 2018-04-30 18:46:15 +02:00
parent d72c79d0e2
commit e325a8d102
2 changed files with 36 additions and 4 deletions

View file

@ -63,7 +63,7 @@ static const struct transliteration_letter table[] = {
{0x0935, FLAG_REGULAR, "va"}, /* व */ {0x0935, FLAG_REGULAR, "va"}, /* व */
/* Codas */ /* Codas */
{0x0902, FLAG_REGULAR, ""}, /* ं (anusvara) */ {0x0902, FLAG_REGULAR, "m"}, /* ं (anusvara) */
{0x0903, FLAG_REGULAR, ""}, /* (visarga) */ {0x0903, FLAG_REGULAR, ""}, /* (visarga) */
{0x093d, FLAG_REGULAR, "'"}, /* ऽ (avagrada) */ {0x093d, FLAG_REGULAR, "'"}, /* ऽ (avagrada) */
@ -101,13 +101,40 @@ static const struct transliteration_letter table[] = {
{0, 0, NULL} {0, 0, NULL}
}; };
static void dummy_filter(struct syllable *chain) static void nasal_consonants_filter(struct syllable *chain)
{ {
printf("%s%s\n", chain->next->data, chain->next->next->data); struct syllable *syllable = chain;
while (syllable) {
if (is_devanagari(syllable->code) && syllable->data[0] == 'n') {
if (syllable->next != NULL) {
if (syllable->next->data[0] == 'p' ||
syllable->next->data[0] == 'b' ||
syllable->next->data[0] == 'm') {
free(syllable->data);
syllable->data = strdup("m");
}
}
}
if (is_devanagari(syllable->code) && syllable->data[0] == 'm') {
if (syllable->next != NULL) {
if (syllable->next->data[0] != 'p' &&
syllable->next->data[0] != 'b' &&
syllable->next->data[0] != 'm') {
free(syllable->data);
syllable->data = strdup("n");
}
}
}
syllable = syllable->next;
}
} }
static const transliteration_filter_t filters[] = { static const transliteration_filter_t filters[] = {
dummy_filter, nasal_consonants_filter,
NULL NULL
}; };

View file

@ -27,4 +27,9 @@ char *transliterate_devanagari_to_latin(const char *text,
void transliteration_context_drop(struct transliteration_context *context); void transliteration_context_drop(struct transliteration_context *context);
static inline int is_devanagari(unsigned int code)
{
return code >= 0x0900 && code <= 0x097f;
}
#endif /* __TRANSLITERATION_H */ #endif /* __TRANSLITERATION_H */