From 232a0f85b3fe23600419565f545b82590681d20a Mon Sep 17 00:00:00 2001 From: Vlasta Vesely Date: Mon, 13 Feb 2023 09:07:52 +0100 Subject: [PATCH] main.c: use the harvard-kyoto scheme --- main.c | 39 ++++++++++++++++++++++++++++++++------- tests/integration.c | 11 +++++++++++ 2 files changed, 43 insertions(+), 7 deletions(-) diff --git a/main.c b/main.c index 6c59c65..32f9a89 100644 --- a/main.c +++ b/main.c @@ -3,14 +3,16 @@ #include "czech.h" #include "hindi.h" #include "velthuis.h" +#include "harvard-kyoto.h" #include "config.h" -#define FLAG_REVERSE 1 << 0 -#define FLAG_VELTHUIS 1 << 1 -#define FLAG_CZECH 1 << 2 -#define FLAG_HINDI 1 << 3 -#define FLAG_ASCII 1 << 4 -#define FLAG_DEVANAGARI 1 << 5 +#define FLAG_REVERSE 1 << 0 +#define FLAG_VELTHUIS 1 << 1 +#define FLAG_CZECH 1 << 2 +#define FLAG_HINDI 1 << 3 +#define FLAG_ASCII 1 << 4 +#define FLAG_DEVANAGARI 1 << 5 +#define FLAG_HARVARD 1 << 6 static const char *usage_str = PROGNAME ", a helper for Sanskrit transliteration.\n" @@ -23,6 +25,7 @@ static const char *usage_str = " -o, --output the output file (instead of standard input)\n" " -r, --reverse reverse transliteration (from Latin to Devanagari)\n" " -e, --encode convert an ASCII text to IAST using the Velthuis scheme\n" + " -k, --harvard convert an ASCII text to IAST using the Harvard-Kyoto scheme\n" " -a, --ascii convert a Devanagari text to Velthuis text rather than to IAST\n" " -d, --devanagari when encoding, output a Devanagari text rather than IAST\n" " -c, --czech transcript Devanagari to Czech language (experimental)\n" @@ -42,7 +45,7 @@ static const char *usage_str = "\n" " For more information see the iast(1) manual page.\n"; -static const char *short_opts = "f:o:readcHhv"; +static const char *short_opts = "f:o:rekadcHhv"; static const struct option long_opts[] = { {"file", required_argument, 0, 'f'}, @@ -50,6 +53,7 @@ static const struct option long_opts[] = { {"reverse", no_argument, 0, 'r'}, {"encode", no_argument, 0, 'e'}, {"velthuis", no_argument, 0, 'e'}, + {"harvard", no_argument, 0, 'k'}, {"ascii", no_argument, 0, 'a'}, {"devanagari", no_argument, 0, 'd'}, {"czech", no_argument, 0, 'c'}, @@ -98,6 +102,21 @@ static int velthuis_encode(const char *in, char **out, unsigned int flags) return ret; } +static int harvard_encode(const char *in, char **out, unsigned int flags) +{ + char *tmp = NULL; + int ret; + + ret = encode_harvard_kyoto_to_iast(in, out); + if (flags & FLAG_DEVANAGARI) { + ret = transliterate_latin_to_devanagari(*out, &tmp); + free(*out); + *out = tmp; + } + + return ret; +} + static int iast_transliterate(const char *in, char **out, unsigned int flags) { char *tmp = NULL; @@ -127,6 +146,9 @@ static int process_input(const char *input, char **out, unsigned int flags) if (flags & FLAG_VELTHUIS) return velthuis_encode(input, out, flags); + if (flags & FLAG_HARVARD) + return harvard_encode(input, out, flags); + return iast_transliterate(input, out, flags); } @@ -244,6 +266,9 @@ int main(int argc, const char **argv) case 'e': flags |= FLAG_VELTHUIS; break; + case 'k': + flags |= FLAG_HARVARD; + break; case 'a': flags |= FLAG_ASCII; break; diff --git a/tests/integration.c b/tests/integration.c index 144839a..03d161a 100644 --- a/tests/integration.c +++ b/tests/integration.c @@ -116,6 +116,16 @@ START_TEST(test_velthuis) } END_TEST +START_TEST(test_harvard) +{ + test_output("./iast \"RtaM\" -k", "ṛtaṃ\n"); + test_output("./iast \"RtaM\" --harvard", "ṛtaṃ\n"); + + /* force Devanagari output */ + test_output("./iast \"agnIH zatruH shatruH\" -kd", "अग्नीः शत्रुः शत्रुः\n"); +} +END_TEST + START_TEST(test_ascii) { test_output("./iast \"अग्निमीळे पुरोहितं\" -a", "agnimii.le purohita.m\n"); @@ -177,6 +187,7 @@ void register_integration_tests(TCase *test_case) tcase_add_test(test_case, test_transcript_czech); tcase_add_test(test_case, test_transcript_hindi); tcase_add_test(test_case, test_velthuis); + tcase_add_test(test_case, test_harvard); tcase_add_test(test_case, test_ascii); tcase_add_test(test_case, test_file_output); tcase_add_test(test_case, test_version);