sanskrit-iast/iast.c

153 lines
3.8 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include <stdlib.h>
#include <string.h>
#include "iast.h"
static inline void transliteration_modifier_apply(struct syllable *syllable,
const char *modified)
{
char buffer[10];
strcpy(buffer, syllable->data);
buffer[strlen(buffer) - 1] = 0;
strcat(buffer, modified);
free(syllable->data);
syllable->data = strdup(buffer);
}
static void transliteration_modifier_aa(struct syllable *syllable)
{
transliteration_modifier_apply(syllable, "ā");
}
static void transliteration_modifier_i(struct syllable *syllable)
{
transliteration_modifier_apply(syllable, "i");
}
static void transliteration_modifier_ii(struct syllable *syllable)
{
transliteration_modifier_apply(syllable, "ī");
}
static void transliteration_modifier_u(struct syllable *syllable)
{
transliteration_modifier_apply(syllable, "u");
}
static void transliteration_modifier_uu(struct syllable *syllable)
{
transliteration_modifier_apply(syllable, "ū");
}
static void transliteration_modifier_r(struct syllable *syllable)
{
transliteration_modifier_apply(syllable, "");
}
static void transliteration_modifier_rr(struct syllable *syllable)
{
transliteration_modifier_apply(syllable, "");
}
static void transliteration_modifier_e(struct syllable *syllable)
{
transliteration_modifier_apply(syllable, "e");
}
static void transliteration_modifier_o(struct syllable *syllable)
{
transliteration_modifier_apply(syllable, "o");
}
static void transliteration_modifier_virama(struct syllable *syllable)
{
transliteration_modifier_apply(syllable, "");
}
static const struct transliteration_letter table_letters[] = {
/* Vowels */
{0x0905, "a"}, /* अ */
{0x0906, "ā"}, /* आ */
{0x0907, "i"}, /* इ */
{0x0908, "ī"}, /* ई */
{0x0909, "u"}, /* उ */
{0x090a, "ū"}, /* ऊ */
{0x090b, ""}, /* ऋ */
{0x0960, ""}, /* ॠ */
{0x090c, ""}, /* ऌ */
{0x0961, ""}, /* ॡ */
{0x090f, "e"}, /* ए */
{0x0910, "ai"}, /* ऐ */
{0x0913, "o"}, /* ओ */
{0x0914, "au"}, /* औ */
/* Consonants */
{0x0915, "ka"}, /* क */
{0x0916, "kha"}, /* ख */
{0x0917, "ga"}, /* ग */
{0x0918, "gha"}, /* घ */
{0x0919, "ṅa"}, /* ङ */
{0x0939, "ha"}, /* ह */
{0x091a, "ca"}, /* च */
{0x091b, "cha"}, /* छ */
{0x091c, "ja"}, /* ज */
{0x091d, "jha"}, /* झ */
{0x091e, "ña"}, /* ञ */
{0x092f, "ya"}, /* य */
{0x0936, "śa"}, /* श */
{0x091F, "ṭa"}, /* ट */
{0x0920, "ṭha"}, /* ठ */
{0x0921, "ḍa"}, /* ड */
{0x0922, "ḍha"}, /* ढ */
{0x0923, "ṇa"}, /* ण */
{0x0930, "ra"}, /* र */
{0x0937, "ṣa"}, /* श */
{0x0924, "ta"}, /* त */
{0x0925, "tha"}, /* थ */
{0x0926, "da"}, /* द */
{0x0927, "dha"}, /* ध */
{0x0928, "na"}, /* न */
{0x0932, "la"}, /* ल */
{0x0938, "sa"}, /* स */
{0x092a, "pa"}, /* प */
{0x092b, "pha"}, /* फ */
{0x092c, "ba"}, /* ब */
{0x092d, "bha"}, /* भ */
{0x092e, "ma"}, /* म */
{0x0935, "va"}, /* व */
/* Codas */
{0x0902, ""}, /* ं (anusvara) */
{0x0903, ""}, /* (visarga) */
{0x093d, "'"}, /* ऽ (avagrada) */
{0, NULL}
};
static const struct transliteration_modifier table_modifiers[] = {
{0x093e, transliteration_modifier_aa},
{0x093f, transliteration_modifier_i},
{0x0940, transliteration_modifier_ii},
{0x0941, transliteration_modifier_u},
{0x0942, transliteration_modifier_uu},
{0x0943, transliteration_modifier_r},
{0x0944, transliteration_modifier_rr},
{0x0947, transliteration_modifier_e},
{0x094b, transliteration_modifier_o},
{0x094d, transliteration_modifier_virama},
{0, NULL}
};
struct transliteration_context *transliteration_context_iast_alloc()
{
struct transliteration_context *context;
context = malloc(sizeof(*context));
context->table_letters = table_letters;
context->table_modifiers = table_modifiers;
return context;
}