48ecd83421
- Fix wrong ELP import paths in soul.el, elp-input.el, studio.el (../foundation/elp/src → ../foundation/el/elp/src) - Add missing import "morphology.el" to all 29 language morphology modules - Recompile all affected dist/*.c with correct cross-module declarations - Add dist/elp-c-decls.h: C-level master forward declarations for ELP package (enables elb --force-include to resolve undeclared cross-module calls)
820 lines
25 KiB
C
820 lines
25 KiB
C
#include <stdint.h>
|
|
#include <stdlib.h>
|
|
#include "el_runtime.h"
|
|
|
|
el_val_t str_ends(el_val_t s, el_val_t suf);
|
|
el_val_t str_last_char(el_val_t s);
|
|
el_val_t str_last2(el_val_t s);
|
|
el_val_t str_last3(el_val_t s);
|
|
el_val_t str_drop_last(el_val_t s, el_val_t n);
|
|
el_val_t is_vowel(el_val_t c);
|
|
el_val_t morph_apply_suffix(el_val_t base, el_val_t suffix);
|
|
el_val_t en_irregular_plural(el_val_t word);
|
|
el_val_t en_irregular_singular(el_val_t word);
|
|
el_val_t en_irregular_verb(el_val_t base);
|
|
el_val_t en_verb_3sg(el_val_t base);
|
|
el_val_t en_should_double_final(el_val_t base);
|
|
el_val_t en_verb_past(el_val_t base);
|
|
el_val_t en_verb_gerund(el_val_t base);
|
|
el_val_t en_pluralize_regular(el_val_t singular);
|
|
el_val_t en_verb_form(el_val_t base, el_val_t tense, el_val_t person, el_val_t number);
|
|
el_val_t agree_determiner(el_val_t det, el_val_t noun);
|
|
el_val_t morph_pluralize(el_val_t noun, el_val_t profile);
|
|
el_val_t morph_map_canonical(el_val_t verb, el_val_t code);
|
|
el_val_t morph_conjugate(el_val_t verb, el_val_t tense, el_val_t person, el_val_t number, el_val_t profile);
|
|
el_val_t morph_inflect(el_val_t word, el_val_t features, el_val_t profile);
|
|
el_val_t pluralize(el_val_t singular);
|
|
el_val_t singularize(el_val_t plural);
|
|
el_val_t verb_form(el_val_t base, el_val_t tense, el_val_t person, el_val_t number);
|
|
el_val_t irregular_plural(el_val_t word);
|
|
el_val_t irregular_singular(el_val_t word);
|
|
el_val_t he_str_ends(el_val_t s, el_val_t suf);
|
|
el_val_t he_str_len(el_val_t s);
|
|
el_val_t he_str_drop_last(el_val_t s, el_val_t n);
|
|
el_val_t he_str_last_char(el_val_t s);
|
|
el_val_t he_slot(el_val_t person, el_val_t gender, el_val_t number);
|
|
el_val_t he_present_form_code(el_val_t slot);
|
|
el_val_t he_copula_past(el_val_t slot);
|
|
el_val_t he_copula_future(el_val_t slot);
|
|
el_val_t he_is_copula(el_val_t verb);
|
|
el_val_t he_conjugate_copula(el_val_t tense, el_val_t slot);
|
|
el_val_t he_present_lir_ot(el_val_t form);
|
|
el_val_t he_present_le_exol(el_val_t form);
|
|
el_val_t he_present_ledaber(el_val_t form);
|
|
el_val_t he_present_lalechet(el_val_t form);
|
|
el_val_t he_past_lir_ot(el_val_t slot);
|
|
el_val_t he_past_le_exol(el_val_t slot);
|
|
el_val_t he_past_ledaber(el_val_t slot);
|
|
el_val_t he_past_lalechet(el_val_t slot);
|
|
el_val_t he_future_lir_ot(el_val_t slot);
|
|
el_val_t he_future_le_exol(el_val_t slot);
|
|
el_val_t he_future_ledaber(el_val_t slot);
|
|
el_val_t he_future_lalechet(el_val_t slot);
|
|
el_val_t he_known_verb(el_val_t verb, el_val_t tense, el_val_t slot);
|
|
el_val_t he_conjugate(el_val_t verb, el_val_t tense, el_val_t person, el_val_t gender, el_val_t number);
|
|
el_val_t he_pluralize(el_val_t noun, el_val_t gender);
|
|
el_val_t he_is_hebrew_script(el_val_t noun);
|
|
el_val_t he_definite_prefix(el_val_t noun);
|
|
el_val_t he_noun_phrase(el_val_t noun, el_val_t number, el_val_t gender, el_val_t definite);
|
|
el_val_t he_map_canonical(el_val_t verb);
|
|
|
|
el_val_t he_str_ends(el_val_t s, el_val_t suf) {
|
|
return str_ends_with(s, suf);
|
|
return 0;
|
|
}
|
|
|
|
el_val_t he_str_len(el_val_t s) {
|
|
return str_len(s);
|
|
return 0;
|
|
}
|
|
|
|
el_val_t he_str_drop_last(el_val_t s, el_val_t n) {
|
|
el_val_t len = str_len(s);
|
|
if (n >= len) {
|
|
return EL_STR("");
|
|
}
|
|
return str_slice(s, 0, (len - n));
|
|
return 0;
|
|
}
|
|
|
|
el_val_t he_str_last_char(el_val_t s) {
|
|
el_val_t n = str_len(s);
|
|
if (n == 0) {
|
|
return EL_STR("");
|
|
}
|
|
return str_slice(s, (n - 1), n);
|
|
return 0;
|
|
}
|
|
|
|
el_val_t he_slot(el_val_t person, el_val_t gender, el_val_t number) {
|
|
if (str_eq(person, EL_STR("third"))) {
|
|
if (str_eq(number, EL_STR("singular"))) {
|
|
if (str_eq(gender, EL_STR("f"))) {
|
|
return 1;
|
|
}
|
|
return 0;
|
|
}
|
|
if (str_eq(gender, EL_STR("f"))) {
|
|
return 6;
|
|
}
|
|
return 5;
|
|
}
|
|
if (str_eq(person, EL_STR("second"))) {
|
|
if (str_eq(number, EL_STR("singular"))) {
|
|
if (str_eq(gender, EL_STR("f"))) {
|
|
return 3;
|
|
}
|
|
return 2;
|
|
}
|
|
if (str_eq(gender, EL_STR("f"))) {
|
|
return 8;
|
|
}
|
|
return 7;
|
|
}
|
|
if (str_eq(number, EL_STR("plural"))) {
|
|
return 9;
|
|
}
|
|
return 4;
|
|
return 0;
|
|
}
|
|
|
|
el_val_t he_present_form_code(el_val_t slot) {
|
|
if (slot == 0) {
|
|
return 0;
|
|
}
|
|
if (slot == 1) {
|
|
return 1;
|
|
}
|
|
if (slot == 2) {
|
|
return 0;
|
|
}
|
|
if (slot == 3) {
|
|
return 1;
|
|
}
|
|
if (slot == 4) {
|
|
return 0;
|
|
}
|
|
if (slot == 5) {
|
|
return 2;
|
|
}
|
|
if (slot == 6) {
|
|
return 3;
|
|
}
|
|
if (slot == 7) {
|
|
return 2;
|
|
}
|
|
if (slot == 8) {
|
|
return 3;
|
|
}
|
|
return 2;
|
|
return 0;
|
|
}
|
|
|
|
el_val_t he_copula_past(el_val_t slot) {
|
|
if (slot == 0) {
|
|
return EL_STR("\xd7\x94\xd7\x99\xd7\x94");
|
|
}
|
|
if (slot == 1) {
|
|
return EL_STR("\xd7\x94\xd7\x99\xd7\x99\xd7\xaa\xd7\x94");
|
|
}
|
|
if (slot == 2) {
|
|
return EL_STR("\xd7\x94\xd7\x99\xd7\x99\xd7\xaa");
|
|
}
|
|
if (slot == 3) {
|
|
return EL_STR("\xd7\x94\xd7\x99\xd7\x99\xd7\xaa\xd7\x94");
|
|
}
|
|
if (slot == 4) {
|
|
return EL_STR("\xd7\x94\xd7\x99\xd7\x99\xd7\xaa\xd7\x99");
|
|
}
|
|
if (slot == 5) {
|
|
return EL_STR("\xd7\x94\xd7\x99\xd7\x95");
|
|
}
|
|
if (slot == 6) {
|
|
return EL_STR("\xd7\x94\xd7\x99\xd7\x95");
|
|
}
|
|
if (slot == 7) {
|
|
return EL_STR("\xd7\x94\xd7\x99\xd7\x99\xd7\xaa\xd7\x9d");
|
|
}
|
|
if (slot == 8) {
|
|
return EL_STR("\xd7\x94\xd7\x99\xd7\x99\xd7\xaa\xd7\x9f");
|
|
}
|
|
return EL_STR("\xd7\x94\xd7\x99\xd7\x99\xd7\xa0\xd7\x95");
|
|
return 0;
|
|
}
|
|
|
|
el_val_t he_copula_future(el_val_t slot) {
|
|
if (slot == 0) {
|
|
return EL_STR("\xd7\x99\xd7\x94\xd7\x99\xd7\x94");
|
|
}
|
|
if (slot == 1) {
|
|
return EL_STR("\xd7\xaa\xd7\x94\xd7\x99\xd7\x94");
|
|
}
|
|
if (slot == 2) {
|
|
return EL_STR("\xd7\xaa\xd7\x94\xd7\x99\xd7\x94");
|
|
}
|
|
if (slot == 3) {
|
|
return EL_STR("\xd7\xaa\xd7\x94\xd7\x99\xd7\x99");
|
|
}
|
|
if (slot == 4) {
|
|
return EL_STR("\xd7\x90\xd7\x94\xd7\x99\xd7\x94");
|
|
}
|
|
if (slot == 5) {
|
|
return EL_STR("\xd7\x99\xd7\x94\xd7\x99\xd7\x95");
|
|
}
|
|
if (slot == 6) {
|
|
return EL_STR("\xd7\x99\xd7\x94\xd7\x99\xd7\x95");
|
|
}
|
|
if (slot == 7) {
|
|
return EL_STR("\xd7\xaa\xd7\x94\xd7\x99\xd7\x95");
|
|
}
|
|
if (slot == 8) {
|
|
return EL_STR("\xd7\xaa\xd7\x94\xd7\x99\xd7\x95");
|
|
}
|
|
return EL_STR("\xd7\xa0\xd7\x94\xd7\x99\xd7\x94");
|
|
return 0;
|
|
}
|
|
|
|
el_val_t he_is_copula(el_val_t verb) {
|
|
if (str_eq(verb, EL_STR("lihyot"))) {
|
|
return 1;
|
|
}
|
|
if (str_eq(verb, EL_STR("haya"))) {
|
|
return 1;
|
|
}
|
|
if (str_eq(verb, EL_STR("be"))) {
|
|
return 1;
|
|
}
|
|
if (str_eq(verb, EL_STR("\xd7\x94\xd7\x99\xd7\x94"))) {
|
|
return 1;
|
|
}
|
|
if (str_eq(verb, EL_STR("\xd7\x9c\xd6\xb4\xd7\x94\xd6\xb0\xd7\x99\xd7\x95\xd6\xb9\xd7\xaa"))) {
|
|
return 1;
|
|
}
|
|
return 0;
|
|
return 0;
|
|
}
|
|
|
|
el_val_t he_conjugate_copula(el_val_t tense, el_val_t slot) {
|
|
if (str_eq(tense, EL_STR("present"))) {
|
|
return EL_STR("");
|
|
}
|
|
if (str_eq(tense, EL_STR("past"))) {
|
|
return he_copula_past(slot);
|
|
}
|
|
if (str_eq(tense, EL_STR("future"))) {
|
|
return he_copula_future(slot);
|
|
}
|
|
return EL_STR("");
|
|
return 0;
|
|
}
|
|
|
|
el_val_t he_present_lir_ot(el_val_t form) {
|
|
if (form == 0) {
|
|
return EL_STR("\xd7\xa8\xd7\x95\xd6\xb9\xd7\x90\xd6\xb6\xd7\x94");
|
|
}
|
|
if (form == 1) {
|
|
return EL_STR("\xd7\xa8\xd7\x95\xd6\xb9\xd7\x90\xd6\xb8\xd7\x94");
|
|
}
|
|
if (form == 2) {
|
|
return EL_STR("\xd7\xa8\xd7\x95\xd6\xb9\xd7\x90\xd6\xb4\xd7\x99\xd7\x9d");
|
|
}
|
|
return EL_STR("\xd7\xa8\xd7\x95\xd6\xb9\xd7\x90\xd7\x95\xd6\xb9\xd7\xaa");
|
|
return 0;
|
|
}
|
|
|
|
el_val_t he_present_le_exol(el_val_t form) {
|
|
if (form == 0) {
|
|
return EL_STR("\xd7\x90\xd7\x95\xd6\xb9\xd7\x9b\xd6\xb5\xd7\x9c");
|
|
}
|
|
if (form == 1) {
|
|
return EL_STR("\xd7\x90\xd7\x95\xd6\xb9\xd7\x9b\xd6\xb6\xd7\x9c\xd6\xb6\xd7\xaa");
|
|
}
|
|
if (form == 2) {
|
|
return EL_STR("\xd7\x90\xd7\x95\xd6\xb9\xd7\x9b\xd6\xb0\xd7\x9c\xd6\xb4\xd7\x99\xd7\x9d");
|
|
}
|
|
return EL_STR("\xd7\x90\xd7\x95\xd6\xb9\xd7\x9b\xd6\xb0\xd7\x9c\xd7\x95\xd6\xb9\xd7\xaa");
|
|
return 0;
|
|
}
|
|
|
|
el_val_t he_present_ledaber(el_val_t form) {
|
|
if (form == 0) {
|
|
return EL_STR("\xd7\x9e\xd6\xb0\xd7\x93\xd6\xb7\xd7\x91\xd6\xb5\xd6\xbc\xd7\xa8");
|
|
}
|
|
if (form == 1) {
|
|
return EL_STR("\xd7\x9e\xd6\xb0\xd7\x93\xd6\xb7\xd7\x91\xd6\xb6\xd6\xbc\xd7\xa8\xd6\xb6\xd7\xaa");
|
|
}
|
|
if (form == 2) {
|
|
return EL_STR("\xd7\x9e\xd6\xb0\xd7\x93\xd6\xb7\xd7\x91\xd6\xb0\xd6\xbc\xd7\xa8\xd6\xb4\xd7\x99\xd7\x9d");
|
|
}
|
|
return EL_STR("\xd7\x9e\xd6\xb0\xd7\x93\xd6\xb7\xd7\x91\xd6\xb0\xd6\xbc\xd7\xa8\xd7\x95\xd6\xb9\xd7\xaa");
|
|
return 0;
|
|
}
|
|
|
|
el_val_t he_present_lalechet(el_val_t form) {
|
|
if (form == 0) {
|
|
return EL_STR("\xd7\x94\xd7\x95\xd6\xb9\xd7\x9c\xd6\xb5\xd7\x9a\xd6\xb0");
|
|
}
|
|
if (form == 1) {
|
|
return EL_STR("\xd7\x94\xd7\x95\xd6\xb9\xd7\x9c\xd6\xb6\xd7\x9b\xd6\xb6\xd7\xaa");
|
|
}
|
|
if (form == 2) {
|
|
return EL_STR("\xd7\x94\xd7\x95\xd6\xb9\xd7\x9c\xd6\xb0\xd7\x9b\xd6\xb4\xd7\x99\xd7\x9d");
|
|
}
|
|
return EL_STR("\xd7\x94\xd7\x95\xd6\xb9\xd7\x9c\xd6\xb0\xd7\x9b\xd7\x95\xd6\xb9\xd7\xaa");
|
|
return 0;
|
|
}
|
|
|
|
el_val_t he_past_lir_ot(el_val_t slot) {
|
|
if (slot == 0) {
|
|
return EL_STR("\xd7\xa8\xd6\xb8\xd7\x90\xd6\xb8\xd7\x94");
|
|
}
|
|
if (slot == 1) {
|
|
return EL_STR("\xd7\xa8\xd6\xb8\xd7\x90\xd6\xb2\xd7\xaa\xd6\xb8\xd7\x94");
|
|
}
|
|
if (slot == 2) {
|
|
return EL_STR("\xd7\xa8\xd6\xb8\xd7\x90\xd6\xb4\xd7\x99\xd7\xaa\xd6\xb8");
|
|
}
|
|
if (slot == 3) {
|
|
return EL_STR("\xd7\xa8\xd6\xb8\xd7\x90\xd6\xb4\xd7\x99\xd7\xaa");
|
|
}
|
|
if (slot == 4) {
|
|
return EL_STR("\xd7\xa8\xd6\xb8\xd7\x90\xd6\xb4\xd7\x99\xd7\xaa\xd6\xb4\xd7\x99");
|
|
}
|
|
if (slot == 5) {
|
|
return EL_STR("\xd7\xa8\xd6\xb8\xd7\x90\xd7\x95\xd6\xbc");
|
|
}
|
|
if (slot == 6) {
|
|
return EL_STR("\xd7\xa8\xd6\xb8\xd7\x90\xd7\x95\xd6\xbc");
|
|
}
|
|
if (slot == 7) {
|
|
return EL_STR("\xd7\xa8\xd6\xb0\xd7\x90\xd6\xb4\xd7\x99\xd7\xaa\xd6\xb6\xd7\x9d");
|
|
}
|
|
if (slot == 8) {
|
|
return EL_STR("\xd7\xa8\xd6\xb0\xd7\x90\xd6\xb4\xd7\x99\xd7\xaa\xd6\xb6\xd7\x9f");
|
|
}
|
|
return EL_STR("\xd7\xa8\xd6\xb8\xd7\x90\xd6\xb4\xd7\x99\xd7\xa0\xd7\x95\xd6\xbc");
|
|
return 0;
|
|
}
|
|
|
|
el_val_t he_past_le_exol(el_val_t slot) {
|
|
if (slot == 0) {
|
|
return EL_STR("\xd7\x90\xd6\xb8\xd7\x9b\xd6\xb7\xd7\x9c");
|
|
}
|
|
if (slot == 1) {
|
|
return EL_STR("\xd7\x90\xd6\xb8\xd7\x9b\xd6\xb0\xd7\x9c\xd6\xb8\xd7\x94");
|
|
}
|
|
if (slot == 2) {
|
|
return EL_STR("\xd7\x90\xd6\xb8\xd7\x9b\xd6\xb7\xd7\x9c\xd6\xb0\xd7\xaa\xd6\xb8\xd6\xbc");
|
|
}
|
|
if (slot == 3) {
|
|
return EL_STR("\xd7\x90\xd6\xb8\xd7\x9b\xd6\xb7\xd7\x9c\xd6\xb0\xd7\xaa\xd6\xb0\xd6\xbc");
|
|
}
|
|
if (slot == 4) {
|
|
return EL_STR("\xd7\x90\xd6\xb8\xd7\x9b\xd6\xb7\xd7\x9c\xd6\xb0\xd7\xaa\xd6\xb4\xd6\xbc\xd7\x99");
|
|
}
|
|
if (slot == 5) {
|
|
return EL_STR("\xd7\x90\xd6\xb8\xd7\x9b\xd6\xb0\xd7\x9c\xd7\x95\xd6\xbc");
|
|
}
|
|
if (slot == 6) {
|
|
return EL_STR("\xd7\x90\xd6\xb8\xd7\x9b\xd6\xb0\xd7\x9c\xd7\x95\xd6\xbc");
|
|
}
|
|
if (slot == 7) {
|
|
return EL_STR("\xd7\x90\xd6\xb2\xd7\x9b\xd6\xb7\xd7\x9c\xd6\xb0\xd7\xaa\xd6\xb6\xd6\xbc\xd7\x9d");
|
|
}
|
|
if (slot == 8) {
|
|
return EL_STR("\xd7\x90\xd6\xb2\xd7\x9b\xd6\xb7\xd7\x9c\xd6\xb0\xd7\xaa\xd6\xb6\xd6\xbc\xd7\x9f");
|
|
}
|
|
return EL_STR("\xd7\x90\xd6\xb8\xd7\x9b\xd6\xb7\xd7\x9c\xd6\xb0\xd7\xa0\xd7\x95\xd6\xbc");
|
|
return 0;
|
|
}
|
|
|
|
el_val_t he_past_ledaber(el_val_t slot) {
|
|
if (slot == 0) {
|
|
return EL_STR("\xd7\x93\xd6\xb4\xd6\xbc\xd7\x91\xd6\xb5\xd6\xbc\xd7\xa8");
|
|
}
|
|
if (slot == 1) {
|
|
return EL_STR("\xd7\x93\xd6\xb4\xd6\xbc\xd7\x91\xd6\xb0\xd6\xbc\xd7\xa8\xd6\xb8\xd7\x94");
|
|
}
|
|
if (slot == 2) {
|
|
return EL_STR("\xd7\x93\xd6\xb4\xd6\xbc\xd7\x91\xd6\xb7\xd6\xbc\xd7\xa8\xd6\xb0\xd7\xaa\xd6\xb8\xd6\xbc");
|
|
}
|
|
if (slot == 3) {
|
|
return EL_STR("\xd7\x93\xd6\xb4\xd6\xbc\xd7\x91\xd6\xb7\xd6\xbc\xd7\xa8\xd6\xb0\xd7\xaa\xd6\xb0\xd6\xbc");
|
|
}
|
|
if (slot == 4) {
|
|
return EL_STR("\xd7\x93\xd6\xb4\xd6\xbc\xd7\x91\xd6\xb7\xd6\xbc\xd7\xa8\xd6\xb0\xd7\xaa\xd6\xb4\xd6\xbc\xd7\x99");
|
|
}
|
|
if (slot == 5) {
|
|
return EL_STR("\xd7\x93\xd6\xb4\xd6\xbc\xd7\x91\xd6\xb0\xd6\xbc\xd7\xa8\xd7\x95\xd6\xbc");
|
|
}
|
|
if (slot == 6) {
|
|
return EL_STR("\xd7\x93\xd6\xb4\xd6\xbc\xd7\x91\xd6\xb0\xd6\xbc\xd7\xa8\xd7\x95\xd6\xbc");
|
|
}
|
|
if (slot == 7) {
|
|
return EL_STR("\xd7\x93\xd6\xb4\xd6\xbc\xd7\x91\xd6\xb7\xd6\xbc\xd7\xa8\xd6\xb0\xd7\xaa\xd6\xb6\xd6\xbc\xd7\x9d");
|
|
}
|
|
if (slot == 8) {
|
|
return EL_STR("\xd7\x93\xd6\xb4\xd6\xbc\xd7\x91\xd6\xb7\xd6\xbc\xd7\xa8\xd6\xb0\xd7\xaa\xd6\xb6\xd6\xbc\xd7\x9f");
|
|
}
|
|
return EL_STR("\xd7\x93\xd6\xb4\xd6\xbc\xd7\x91\xd6\xb7\xd6\xbc\xd7\xa8\xd6\xb0\xd7\xa0\xd7\x95\xd6\xbc");
|
|
return 0;
|
|
}
|
|
|
|
el_val_t he_past_lalechet(el_val_t slot) {
|
|
if (slot == 0) {
|
|
return EL_STR("\xd7\x94\xd6\xb8\xd7\x9c\xd6\xb7\xd7\x9a\xd6\xb0");
|
|
}
|
|
if (slot == 1) {
|
|
return EL_STR("\xd7\x94\xd6\xb8\xd7\x9c\xd6\xb0\xd7\x9b\xd6\xb8\xd7\x94");
|
|
}
|
|
if (slot == 2) {
|
|
return EL_STR("\xd7\x94\xd6\xb8\xd7\x9c\xd6\xb7\xd7\x9b\xd6\xb0\xd7\xaa\xd6\xb8\xd6\xbc");
|
|
}
|
|
if (slot == 3) {
|
|
return EL_STR("\xd7\x94\xd6\xb8\xd7\x9c\xd6\xb7\xd7\x9b\xd6\xb0\xd7\xaa\xd6\xb0\xd6\xbc");
|
|
}
|
|
if (slot == 4) {
|
|
return EL_STR("\xd7\x94\xd6\xb8\xd7\x9c\xd6\xb7\xd7\x9b\xd6\xb0\xd7\xaa\xd6\xb4\xd6\xbc\xd7\x99");
|
|
}
|
|
if (slot == 5) {
|
|
return EL_STR("\xd7\x94\xd6\xb8\xd7\x9c\xd6\xb0\xd7\x9b\xd7\x95\xd6\xbc");
|
|
}
|
|
if (slot == 6) {
|
|
return EL_STR("\xd7\x94\xd6\xb8\xd7\x9c\xd6\xb0\xd7\x9b\xd7\x95\xd6\xbc");
|
|
}
|
|
if (slot == 7) {
|
|
return EL_STR("\xd7\x94\xd6\xb2\xd7\x9c\xd6\xb7\xd7\x9b\xd6\xb0\xd7\xaa\xd6\xb6\xd6\xbc\xd7\x9d");
|
|
}
|
|
if (slot == 8) {
|
|
return EL_STR("\xd7\x94\xd6\xb2\xd7\x9c\xd6\xb7\xd7\x9b\xd6\xb0\xd7\xaa\xd6\xb6\xd6\xbc\xd7\x9f");
|
|
}
|
|
return EL_STR("\xd7\x94\xd6\xb8\xd7\x9c\xd6\xb7\xd7\x9b\xd6\xb0\xd7\xa0\xd7\x95\xd6\xbc");
|
|
return 0;
|
|
}
|
|
|
|
el_val_t he_future_lir_ot(el_val_t slot) {
|
|
if (slot == 0) {
|
|
return EL_STR("\xd7\x99\xd6\xb4\xd7\xa8\xd6\xb0\xd7\x90\xd6\xb6\xd7\x94");
|
|
}
|
|
if (slot == 1) {
|
|
return EL_STR("\xd7\xaa\xd6\xb4\xd6\xbc\xd7\xa8\xd6\xb0\xd7\x90\xd6\xb6\xd7\x94");
|
|
}
|
|
if (slot == 2) {
|
|
return EL_STR("\xd7\xaa\xd6\xb4\xd6\xbc\xd7\xa8\xd6\xb0\xd7\x90\xd6\xb6\xd7\x94");
|
|
}
|
|
if (slot == 3) {
|
|
return EL_STR("\xd7\xaa\xd6\xb4\xd6\xbc\xd7\xa8\xd6\xb0\xd7\x90\xd6\xb4\xd7\x99");
|
|
}
|
|
if (slot == 4) {
|
|
return EL_STR("\xd7\x90\xd6\xb6\xd7\xa8\xd6\xb0\xd7\x90\xd6\xb6\xd7\x94");
|
|
}
|
|
if (slot == 5) {
|
|
return EL_STR("\xd7\x99\xd6\xb4\xd7\xa8\xd6\xb0\xd7\x90\xd7\x95\xd6\xbc");
|
|
}
|
|
if (slot == 6) {
|
|
return EL_STR("\xd7\xaa\xd6\xb4\xd6\xbc\xd7\xa8\xd6\xb0\xd7\x90\xd6\xb6\xd7\x99\xd7\xa0\xd6\xb8\xd7\x94");
|
|
}
|
|
if (slot == 7) {
|
|
return EL_STR("\xd7\xaa\xd6\xb4\xd6\xbc\xd7\xa8\xd6\xb0\xd7\x90\xd7\x95\xd6\xbc");
|
|
}
|
|
if (slot == 8) {
|
|
return EL_STR("\xd7\xaa\xd6\xb4\xd6\xbc\xd7\xa8\xd6\xb0\xd7\x90\xd6\xb6\xd7\x99\xd7\xa0\xd6\xb8\xd7\x94");
|
|
}
|
|
return EL_STR("\xd7\xa0\xd6\xb4\xd7\xa8\xd6\xb0\xd7\x90\xd6\xb6\xd7\x94");
|
|
return 0;
|
|
}
|
|
|
|
el_val_t he_future_le_exol(el_val_t slot) {
|
|
if (slot == 0) {
|
|
return EL_STR("\xd7\x99\xd6\xb9\xd7\x90\xd7\x9b\xd6\xb7\xd7\x9c");
|
|
}
|
|
if (slot == 1) {
|
|
return EL_STR("\xd7\xaa\xd6\xb9\xd6\xbc\xd7\x90\xd7\x9b\xd6\xb7\xd7\x9c");
|
|
}
|
|
if (slot == 2) {
|
|
return EL_STR("\xd7\xaa\xd6\xb9\xd6\xbc\xd7\x90\xd7\x9b\xd6\xb7\xd7\x9c");
|
|
}
|
|
if (slot == 3) {
|
|
return EL_STR("\xd7\xaa\xd6\xb9\xd6\xbc\xd7\x90\xd7\x9b\xd6\xb0\xd7\x9c\xd6\xb4\xd7\x99");
|
|
}
|
|
if (slot == 4) {
|
|
return EL_STR("\xd7\x90\xd6\xb9\xd7\x9b\xd6\xb7\xd7\x9c");
|
|
}
|
|
if (slot == 5) {
|
|
return EL_STR("\xd7\x99\xd6\xb9\xd7\x90\xd7\x9b\xd6\xb0\xd7\x9c\xd7\x95\xd6\xbc");
|
|
}
|
|
if (slot == 6) {
|
|
return EL_STR("\xd7\xaa\xd6\xb9\xd6\xbc\xd7\x90\xd7\x9b\xd6\xb7\xd7\x9c\xd6\xb0\xd7\xa0\xd6\xb8\xd7\x94");
|
|
}
|
|
if (slot == 7) {
|
|
return EL_STR("\xd7\xaa\xd6\xb9\xd6\xbc\xd7\x90\xd7\x9b\xd6\xb0\xd7\x9c\xd7\x95\xd6\xbc");
|
|
}
|
|
if (slot == 8) {
|
|
return EL_STR("\xd7\xaa\xd6\xb9\xd6\xbc\xd7\x90\xd7\x9b\xd6\xb7\xd7\x9c\xd6\xb0\xd7\xa0\xd6\xb8\xd7\x94");
|
|
}
|
|
return EL_STR("\xd7\xa0\xd6\xb9\xd7\x90\xd7\x9b\xd6\xb7\xd7\x9c");
|
|
return 0;
|
|
}
|
|
|
|
el_val_t he_future_ledaber(el_val_t slot) {
|
|
if (slot == 0) {
|
|
return EL_STR("\xd7\x99\xd6\xb0\xd7\x93\xd6\xb7\xd7\x91\xd6\xb5\xd6\xbc\xd7\xa8");
|
|
}
|
|
if (slot == 1) {
|
|
return EL_STR("\xd7\xaa\xd6\xb0\xd6\xbc\xd7\x93\xd6\xb7\xd7\x91\xd6\xb5\xd6\xbc\xd7\xa8");
|
|
}
|
|
if (slot == 2) {
|
|
return EL_STR("\xd7\xaa\xd6\xb0\xd6\xbc\xd7\x93\xd6\xb7\xd7\x91\xd6\xb5\xd6\xbc\xd7\xa8");
|
|
}
|
|
if (slot == 3) {
|
|
return EL_STR("\xd7\xaa\xd6\xb0\xd6\xbc\xd7\x93\xd6\xb7\xd7\x91\xd6\xb0\xd6\xbc\xd7\xa8\xd6\xb4\xd7\x99");
|
|
}
|
|
if (slot == 4) {
|
|
return EL_STR("\xd7\x90\xd6\xb2\xd7\x93\xd6\xb7\xd7\x91\xd6\xb5\xd6\xbc\xd7\xa8");
|
|
}
|
|
if (slot == 5) {
|
|
return EL_STR("\xd7\x99\xd6\xb0\xd7\x93\xd6\xb7\xd7\x91\xd6\xb0\xd6\xbc\xd7\xa8\xd7\x95\xd6\xbc");
|
|
}
|
|
if (slot == 6) {
|
|
return EL_STR("\xd7\xaa\xd6\xb0\xd6\xbc\xd7\x93\xd6\xb7\xd7\x91\xd6\xb5\xd6\xbc\xd7\xa8\xd6\xb0\xd7\xa0\xd6\xb8\xd7\x94");
|
|
}
|
|
if (slot == 7) {
|
|
return EL_STR("\xd7\xaa\xd6\xb0\xd6\xbc\xd7\x93\xd6\xb7\xd7\x91\xd6\xb0\xd6\xbc\xd7\xa8\xd7\x95\xd6\xbc");
|
|
}
|
|
if (slot == 8) {
|
|
return EL_STR("\xd7\xaa\xd6\xb0\xd6\xbc\xd7\x93\xd6\xb7\xd7\x91\xd6\xb5\xd6\xbc\xd7\xa8\xd6\xb0\xd7\xa0\xd6\xb8\xd7\x94");
|
|
}
|
|
return EL_STR("\xd7\xa0\xd6\xb0\xd7\x93\xd6\xb7\xd7\x91\xd6\xb5\xd6\xbc\xd7\xa8");
|
|
return 0;
|
|
}
|
|
|
|
el_val_t he_future_lalechet(el_val_t slot) {
|
|
if (slot == 0) {
|
|
return EL_STR("\xd7\x99\xd6\xb5\xd7\x9c\xd6\xb5\xd7\x9a\xd6\xb0");
|
|
}
|
|
if (slot == 1) {
|
|
return EL_STR("\xd7\xaa\xd6\xb5\xd6\xbc\xd7\x9c\xd6\xb5\xd7\x9a\xd6\xb0");
|
|
}
|
|
if (slot == 2) {
|
|
return EL_STR("\xd7\xaa\xd6\xb5\xd6\xbc\xd7\x9c\xd6\xb5\xd7\x9a\xd6\xb0");
|
|
}
|
|
if (slot == 3) {
|
|
return EL_STR("\xd7\xaa\xd6\xb5\xd6\xbc\xd7\x9c\xd6\xb0\xd7\x9b\xd6\xb4\xd7\x99");
|
|
}
|
|
if (slot == 4) {
|
|
return EL_STR("\xd7\x90\xd6\xb5\xd7\x9c\xd6\xb5\xd7\x9a\xd6\xb0");
|
|
}
|
|
if (slot == 5) {
|
|
return EL_STR("\xd7\x99\xd6\xb5\xd7\x9c\xd6\xb0\xd7\x9b\xd7\x95\xd6\xbc");
|
|
}
|
|
if (slot == 6) {
|
|
return EL_STR("\xd7\xaa\xd6\xb5\xd6\xbc\xd7\x9c\xd6\xb7\xd7\x9b\xd6\xb0\xd7\xa0\xd6\xb8\xd7\x94");
|
|
}
|
|
if (slot == 7) {
|
|
return EL_STR("\xd7\xaa\xd6\xb5\xd6\xbc\xd7\x9c\xd6\xb0\xd7\x9b\xd7\x95\xd6\xbc");
|
|
}
|
|
if (slot == 8) {
|
|
return EL_STR("\xd7\xaa\xd6\xb5\xd6\xbc\xd7\x9c\xd6\xb7\xd7\x9b\xd6\xb0\xd7\xa0\xd6\xb8\xd7\x94");
|
|
}
|
|
return EL_STR("\xd7\xa0\xd6\xb5\xd7\x9c\xd6\xb5\xd7\x9a\xd6\xb0");
|
|
return 0;
|
|
}
|
|
|
|
el_val_t he_known_verb(el_val_t verb, el_val_t tense, el_val_t slot) {
|
|
if (str_eq(verb, EL_STR("lir'ot"))) {
|
|
if (str_eq(tense, EL_STR("present"))) {
|
|
return he_present_lir_ot(he_present_form_code(slot));
|
|
}
|
|
if (str_eq(tense, EL_STR("past"))) {
|
|
return he_past_lir_ot(slot);
|
|
}
|
|
if (str_eq(tense, EL_STR("future"))) {
|
|
return he_future_lir_ot(slot);
|
|
}
|
|
return he_present_lir_ot(he_present_form_code(slot));
|
|
}
|
|
if (str_eq(verb, EL_STR("\xd7\x9c\xd6\xb4\xd7\xa8\xd6\xb0\xd7\x90\xd7\x95\xd6\xb9\xd7\xaa"))) {
|
|
if (str_eq(tense, EL_STR("present"))) {
|
|
return he_present_lir_ot(he_present_form_code(slot));
|
|
}
|
|
if (str_eq(tense, EL_STR("past"))) {
|
|
return he_past_lir_ot(slot);
|
|
}
|
|
if (str_eq(tense, EL_STR("future"))) {
|
|
return he_future_lir_ot(slot);
|
|
}
|
|
return he_present_lir_ot(he_present_form_code(slot));
|
|
}
|
|
if (str_eq(verb, EL_STR("le'exol"))) {
|
|
if (str_eq(tense, EL_STR("present"))) {
|
|
return he_present_le_exol(he_present_form_code(slot));
|
|
}
|
|
if (str_eq(tense, EL_STR("past"))) {
|
|
return he_past_le_exol(slot);
|
|
}
|
|
if (str_eq(tense, EL_STR("future"))) {
|
|
return he_future_le_exol(slot);
|
|
}
|
|
return he_present_le_exol(he_present_form_code(slot));
|
|
}
|
|
if (str_eq(verb, EL_STR("\xd7\x9c\xd6\xb6\xd7\x90\xd6\xb1\xd7\x9b\xd7\x95\xd6\xb9\xd7\x9c"))) {
|
|
if (str_eq(tense, EL_STR("present"))) {
|
|
return he_present_le_exol(he_present_form_code(slot));
|
|
}
|
|
if (str_eq(tense, EL_STR("past"))) {
|
|
return he_past_le_exol(slot);
|
|
}
|
|
if (str_eq(tense, EL_STR("future"))) {
|
|
return he_future_le_exol(slot);
|
|
}
|
|
return he_present_le_exol(he_present_form_code(slot));
|
|
}
|
|
if (str_eq(verb, EL_STR("ledaber"))) {
|
|
if (str_eq(tense, EL_STR("present"))) {
|
|
return he_present_ledaber(he_present_form_code(slot));
|
|
}
|
|
if (str_eq(tense, EL_STR("past"))) {
|
|
return he_past_ledaber(slot);
|
|
}
|
|
if (str_eq(tense, EL_STR("future"))) {
|
|
return he_future_ledaber(slot);
|
|
}
|
|
return he_present_ledaber(he_present_form_code(slot));
|
|
}
|
|
if (str_eq(verb, EL_STR("\xd7\x9c\xd6\xb0\xd7\x93\xd6\xb7\xd7\x91\xd6\xb5\xd6\xbc\xd7\xa8"))) {
|
|
if (str_eq(tense, EL_STR("present"))) {
|
|
return he_present_ledaber(he_present_form_code(slot));
|
|
}
|
|
if (str_eq(tense, EL_STR("past"))) {
|
|
return he_past_ledaber(slot);
|
|
}
|
|
if (str_eq(tense, EL_STR("future"))) {
|
|
return he_future_ledaber(slot);
|
|
}
|
|
return he_present_ledaber(he_present_form_code(slot));
|
|
}
|
|
if (str_eq(verb, EL_STR("lalechet"))) {
|
|
if (str_eq(tense, EL_STR("present"))) {
|
|
return he_present_lalechet(he_present_form_code(slot));
|
|
}
|
|
if (str_eq(tense, EL_STR("past"))) {
|
|
return he_past_lalechet(slot);
|
|
}
|
|
if (str_eq(tense, EL_STR("future"))) {
|
|
return he_future_lalechet(slot);
|
|
}
|
|
return he_present_lalechet(he_present_form_code(slot));
|
|
}
|
|
if (str_eq(verb, EL_STR("\xd7\x9c\xd6\xb8\xd7\x9c\xd6\xb6\xd7\x9b\xd6\xb6\xd7\xaa"))) {
|
|
if (str_eq(tense, EL_STR("present"))) {
|
|
return he_present_lalechet(he_present_form_code(slot));
|
|
}
|
|
if (str_eq(tense, EL_STR("past"))) {
|
|
return he_past_lalechet(slot);
|
|
}
|
|
if (str_eq(tense, EL_STR("future"))) {
|
|
return he_future_lalechet(slot);
|
|
}
|
|
return he_present_lalechet(he_present_form_code(slot));
|
|
}
|
|
return EL_STR("");
|
|
return 0;
|
|
}
|
|
|
|
el_val_t he_conjugate(el_val_t verb, el_val_t tense, el_val_t person, el_val_t gender, el_val_t number) {
|
|
el_val_t slot = he_slot(person, gender, number);
|
|
if (he_is_copula(verb)) {
|
|
return he_conjugate_copula(tense, slot);
|
|
}
|
|
el_val_t known = he_known_verb(verb, tense, slot);
|
|
if (!str_eq(known, EL_STR(""))) {
|
|
return known;
|
|
}
|
|
return verb;
|
|
return 0;
|
|
}
|
|
|
|
el_val_t he_pluralize(el_val_t noun, el_val_t gender) {
|
|
if (str_eq(gender, EL_STR("m"))) {
|
|
return el_str_concat(noun, EL_STR("\xd7\x99\xd7\x9d"));
|
|
}
|
|
if (he_str_ends(noun, EL_STR("\xd7\x94"))) {
|
|
el_val_t stem = he_str_drop_last(noun, 1);
|
|
return el_str_concat(stem, EL_STR("\xd7\x95\xd7\xaa"));
|
|
}
|
|
if (he_str_ends(noun, EL_STR("\xd7\xaa"))) {
|
|
el_val_t stem = he_str_drop_last(noun, 1);
|
|
return el_str_concat(stem, EL_STR("\xd7\x95\xd7\xaa"));
|
|
}
|
|
if (he_str_ends(noun, EL_STR("a"))) {
|
|
el_val_t stem = he_str_drop_last(noun, 1);
|
|
return el_str_concat(stem, EL_STR("ot"));
|
|
}
|
|
if (he_str_ends(noun, EL_STR("et"))) {
|
|
el_val_t stem = he_str_drop_last(noun, 2);
|
|
return el_str_concat(stem, EL_STR("ot"));
|
|
}
|
|
return el_str_concat(noun, EL_STR("\xd7\x95\xd7\xaa"));
|
|
return 0;
|
|
}
|
|
|
|
el_val_t he_is_hebrew_script(el_val_t noun) {
|
|
el_val_t n = str_len(noun);
|
|
if (n == 0) {
|
|
return 0;
|
|
}
|
|
el_val_t first = str_slice(noun, 0, 1);
|
|
if (str_eq(first, EL_STR("\xd7\x90"))) {
|
|
return 1;
|
|
}
|
|
if (str_eq(first, EL_STR("\xd7\x91"))) {
|
|
return 1;
|
|
}
|
|
if (str_eq(first, EL_STR("\xd7\x92"))) {
|
|
return 1;
|
|
}
|
|
if (str_eq(first, EL_STR("\xd7\x93"))) {
|
|
return 1;
|
|
}
|
|
if (str_eq(first, EL_STR("\xd7\x94"))) {
|
|
return 1;
|
|
}
|
|
if (str_eq(first, EL_STR("\xd7\x95"))) {
|
|
return 1;
|
|
}
|
|
if (str_eq(first, EL_STR("\xd7\x96"))) {
|
|
return 1;
|
|
}
|
|
if (str_eq(first, EL_STR("\xd7\x97"))) {
|
|
return 1;
|
|
}
|
|
if (str_eq(first, EL_STR("\xd7\x98"))) {
|
|
return 1;
|
|
}
|
|
if (str_eq(first, EL_STR("\xd7\x99"))) {
|
|
return 1;
|
|
}
|
|
if (str_eq(first, EL_STR("\xd7\x9b"))) {
|
|
return 1;
|
|
}
|
|
if (str_eq(first, EL_STR("\xd7\x9c"))) {
|
|
return 1;
|
|
}
|
|
if (str_eq(first, EL_STR("\xd7\x9e"))) {
|
|
return 1;
|
|
}
|
|
if (str_eq(first, EL_STR("\xd7\xa0"))) {
|
|
return 1;
|
|
}
|
|
if (str_eq(first, EL_STR("\xd7\xa1"))) {
|
|
return 1;
|
|
}
|
|
if (str_eq(first, EL_STR("\xd7\xa2"))) {
|
|
return 1;
|
|
}
|
|
if (str_eq(first, EL_STR("\xd7\xa4"))) {
|
|
return 1;
|
|
}
|
|
if (str_eq(first, EL_STR("\xd7\xa6"))) {
|
|
return 1;
|
|
}
|
|
if (str_eq(first, EL_STR("\xd7\xa7"))) {
|
|
return 1;
|
|
}
|
|
if (str_eq(first, EL_STR("\xd7\xa8"))) {
|
|
return 1;
|
|
}
|
|
if (str_eq(first, EL_STR("\xd7\xa9"))) {
|
|
return 1;
|
|
}
|
|
if (str_eq(first, EL_STR("\xd7\xaa"))) {
|
|
return 1;
|
|
}
|
|
return 0;
|
|
return 0;
|
|
}
|
|
|
|
el_val_t he_definite_prefix(el_val_t noun) {
|
|
if (he_is_hebrew_script(noun)) {
|
|
return el_str_concat(EL_STR("\xd7\x94"), noun);
|
|
}
|
|
return el_str_concat(EL_STR("ha"), noun);
|
|
return 0;
|
|
}
|
|
|
|
el_val_t he_noun_phrase(el_val_t noun, el_val_t number, el_val_t gender, el_val_t definite) {
|
|
el_val_t stem = noun;
|
|
if (str_eq(number, EL_STR("plural"))) {
|
|
stem = he_pluralize(noun, gender);
|
|
}
|
|
if (str_eq(definite, EL_STR("true"))) {
|
|
return he_definite_prefix(stem);
|
|
}
|
|
return stem;
|
|
return 0;
|
|
}
|
|
|
|
el_val_t he_map_canonical(el_val_t verb) {
|
|
if (str_eq(verb, EL_STR("be"))) {
|
|
return EL_STR("lihyot");
|
|
}
|
|
if (str_eq(verb, EL_STR("see"))) {
|
|
return EL_STR("lir'ot");
|
|
}
|
|
if (str_eq(verb, EL_STR("eat"))) {
|
|
return EL_STR("le'exol");
|
|
}
|
|
if (str_eq(verb, EL_STR("speak"))) {
|
|
return EL_STR("ledaber");
|
|
}
|
|
if (str_eq(verb, EL_STR("say"))) {
|
|
return EL_STR("ledaber");
|
|
}
|
|
if (str_eq(verb, EL_STR("go"))) {
|
|
return EL_STR("lalechet");
|
|
}
|
|
return verb;
|
|
return 0;
|
|
}
|
|
|