--[=[
TODO:
- Implement support for hollow roots in nif`al. - Implement support for geminate roots in pa`al and nif`al. - Implement smarter ktiv male spellings. - Implement support for mixed binyanim (such as for ניגש and יכול). - Implement support for alternative forms.
Reference:
Input parameters: 1: binyan abbreviation p: first root letter a: second root letter l: third root letter
Root letters may be prefixed with ':' to include them literally, in which case they will not be parsed as hollow or weak and no dageshes will be added to or removed from them. Any of the final form codes or intermediate data below can also be given explicitly in the input.
Binyan abbreviations: pa: pa`al pi: pi`el po: po`el/polel pu: pu`al poal: po`al/polal hif: hif`il huf: huf`al nif: nif`al hit: hitpa`el hitpo: hitpo`el/hitpolel hitpu: hitpu`al *rare modern coinage
Tense abbreviations: inf: to-infinitive imp: imperative fut: future (a.k.a. imperfect or prefix conjugation) pres: present (a.k.a. active participle) past: past (a.k.a. perfect or suffix conjugation) noun: action noun pp: passive participle
Gender abbreviations: s: singular *first person only p: plural *first person only ms: masculine singular fs: feminine singular mp: masculine plural fp: feminine plural
Person abbreviations: 1: first person 2: second person 3: third person
Exhaustive list of final form codes:
inf noun *optional pp *optional
imp_ms imp_fs imp_mp imp_fp *obsolete
fut_1s fut_2ms *always equal to fut_3fs fut_2fs fut_3ms fut_3fs *always equal to fut_2ms fut_1p fut_2mp fut_2fp *obsolete and always equal to fut_3fp fut_3mp fut_3fp *obsolete and always equal to fut_2fp
past_1s past_2ms past_2fs past_3ms past_3fs past_1p past_2mp past_2fp past_3mp past_3fp *obsolete before Biblical Hebrew, therefore equal to past_3mp
pres_ms pres_fs pres_mp pres_fp
Intermediate data:
root_p root_a root_l
gem *whether to treat as geminate
imp_pre_stem imp_prs_stem imp_mid_stem imp_fin_stem imp_suf_stem imp_ffp_stem
fut_gem fut_char *characteristic vowel , pa`al only (default: u) fut_pre_stem fut_prs_stem fut_1sp_stem fut_mid_stem fut_fin_stem fut_suf_stem fut_ffp_stem
pres_gem pres_short *if not empty, use the pa`el-present, pa`al only pres_stem
past_gem past_char *characteristic vowel , pa`al only (default: a) past_pre_stem past_2p_pre_stem past_stem past_3_stem past_3ms_stem past_3fs_stem past_2p_stem
]=]
local m_utilities = require("Module:utilities") local m_links = require("Module:links") local m_strutils = require("Module:string utilities")
local export = {} local get_stems_for = {}
local lang = require("Module:languages").getByCode("he")
local convert_root_char = {
= "א", = "ב", = "בּ", -- always hard = "בֿ", -- always soft = "ג", = "גּ", -- always hard = "גֿ", -- always soft = "ד", = "דּ", -- always hard = "דֿ", -- always soft = "ה", = "ו", = "ז", = "ח", = "ט", = "י", = "כ", = "כּ", -- always hard = "כֿ", -- always soft = "ל", = "מ", = "נ", = "ס", = "ע", = "פ", = "פּ", -- always hard = "פֿ", -- always soft = "צ", = "ק", = "ר", = "שׁ", -- assume shin = "שׁ", -- shin = "שׂ", -- sin = "ת", = "תּ", -- always hard = "תֿ", -- always soft
}
local convert_final_root_char = {
= "י", -- make defective = "ה", -- remove mappiq = "י", -- make defective = "כ", -- normalize final = "כּ", -- always hard, normalize final = "כֿ", -- always soft, normalize final = "מ", -- normalize final = "נ", -- normalize final = "פ", -- normalize final = "פּ", -- always hard, normalize final = "פֿ", -- always soft, normalize final = "צ", -- normalize final
}
local forms_itp = {
= "שְׁתּ", = "שְׂתּ", = "סְתּ", = "זְדּ", = "צְט", = {"ית", "תּ"}, = {"יד", "דּ"}, = {"יט", "טּ"},
}
local forms_etp = {
= "תּ", = "דּ", = "טּ",
}
local forms = {
= "ב", = "ג", = "ד", = "כ", = "פ", = "ת",
}
local forms_initial = {
= "בּ", = "גּ", = "דּ", = "כּ", = "פּ", = "תּ",
}
local non_doubling_letters = {
= 1, = 2, = 3, = 2, = 1,
}
local forms_final_furtive = {
= "הַּ", = "חַ", = "עַ",
}
local forms_final = {
= "הּ", = "ךְ", = "ךְּ", = "ךְ", = "ם", = "ן", = "ף", = "ף", = "ץ",
}
local short_gem_vowel = {
= "ַ", = {"י", "ִ"}, = {"ו", "ֻ"}, = "ֶ", = {"ו", "ָ"},
}
local lengthened_gem_vowel = {
= "ָ", = {"י", "ֵ"}, = {"ו", "ֹ"}, = {"י", "ֵ"}, = {"ו", "ֹ"},
}
local mixed_gem_vowel = {
= "ַ", = {"י", "ִ"}, = {"ו", "ֹ"}, = "ֶ", = {"ו", "ֹ"},
}
local stressed_gem_vowel = {
= "ַ", = "ֵ", = {"ו", "ֹ"}, = "ֵ", = {"ו", "ֹ"},
}
local doubling_type = {
= lengthened_gem_vowel, = mixed_gem_vowel, = short_gem_vowel,
}
local gutturals = {
= true, = true, = true, = true,
}
local char_vowel = {
= "ַ", = "ֵ", = {"ו", "ֹ"}, = "ָ", = "ִי", = "וּ", = "ֵ", = "וֹ",
}
local char_vowel_open = {
= "ָ", = "ֵ", = {"ו", "ֹ"}, = "ָ", = "ִי", = "וּ", = "ֵ", = "וֹ",
}
local char_vowel_short = {
= "ַ", = "ֵ", = {"ו", "ֹ"}, = "ַ", = "ֵ", = {"ו", "ֹ"}, = "ֵ", = {"ו", "ֹ"},
}
local char_vowel_open_short = {
= "ָ", = "ֵ", = {"ו", "ֹ"}, = "ָ", = "ֵ", = {"ו", "ֹ"}, = "ֵ", = {"ו", "ֹ"},
}
local char_vowel_closed = {
= "ַ", = "ַ", = {"ו", "ֹ"}, = "ַ", = "ַ", = {"ו", "ֹ"}, = "ַ", = {"ו", "ֹ"},
}
local char_vowel_unstressed = {
= "ַ", = "ַ", = {"ו", "ָ"}, = "ַ", = "ַ", = {"ו", "ָ"}, = "ַ", = {"ו", "ָ"},
}
local char_vowel_open_fp = {
= "ֶ", = "ֶ", = {"ו", "ֹ"}, = "ֶ", = "ֶ", = {"ו", "ֹ"}, = "ֶ", = {"ו", "ֹ"},
}
local char_vowel_reduce = {
= nil, = nil, = nil, = "ָ", = "ִי", = "וּ", = "ֵ", = "וֹ",
}
local chataf_vowel = {
= "ֲ", = "ֱ", = {"ו", "ֳ"},
}
local monophthongize = {
= "ֵי", = "וֹ",
}
local function gen_link(x)
if type(x) == "table" then local pg = (lang:makeEntryName(x)) if pg == (lang:makeEntryName(x)) then return m_links.full_link({lang = lang, term = pg, alt = x}) else return m_links.full_link({lang = lang, term = pg, alt = pg .. " / " .. x}) end else if x == "-" then return "—" -- m-dash else return m_links.full_link({lang = lang, term = x}) end end
end
local function process_args(args)
for key, value in pairs(args) do local i = mw.ustring.find(value, "") if i then args = {mw.ustring.sub(value, 1, i - 1), mw.ustring.sub(value, i + 1)} end end
end
local function append_parts_2(a, b)
if type(a) == "table" then if type(b) == "table" then return {a .. b, a .. b} else return {a .. (lang:makeEntryName(b)), a .. b} end else if type(b) == "table" then return {(lang:makeEntryName(a)) .. b, a .. b} else return a .. b end end
end
local function append_parts(a, ...)
for _, b in ipairs({...}) do a = append_parts_2(a, b) end return a
end
local function equal(a, b)
if type(a) == "table" then return type(b) == "table" and a == b and a == b else return a == b end
end
local function attach_t(x, novowel, assim_t)
local is_table = (type(x) == "table") local wv = is_table and x or x if mw.ustring.sub(wv, -2) == "תְ" then if is_table then return {x .. "ת", mw.ustring.sub(wv, 1, -2) .. (novowel and "ְּ" or "ּ")} else return append_parts(mw.ustring.sub(wv, 1, -2), {"ת", (novowel and "ְּ" or "ּ")}) end elseif assim_t and mw.ustring.sub(wv, -2) == "נְ" and (not is_table or mw.ustring.sub(x, -1) == "נ") then if is_table then return {mw.ustring.sub(x, 1, -2) .. "ת", mw.ustring.sub(wv, 1, -3) .. (novowel and "תְּ" or "תּ")} else return mw.ustring.sub(wv, 1, -3) .. (novowel and "תְּ" or "תּ") end else local dagesh = (mw.ustring.sub(wv, -1) == "ְ") return append_parts(x, dagesh and (novowel and "תְּ" or "תּ") or "ת") end
end
local function attach_n(x)
local is_table = (type(x) == "table") local wv = is_table and x or x if mw.ustring.sub(wv, -2) == "נְ" then if is_table then return {x, mw.ustring.sub(wv, 1, -2) .. "ּ"} else return mw.ustring.sub(wv, 1, -2) .. "ּ" end else return append_parts(x, "נ") end
end
local function get_form_initial(letter)
if type(letter) == "table" then return letter elseif mw.ustring.sub(letter, 1, 1) == ":" then return mw.ustring.sub(letter, 2) else return forms_initial or forms or letter end
end
local function get_form_itp(letter)
return forms_itp or append_parts("תְ", get_form_initial(letter))
end
local function get_form_etp(letter)
return forms_etp or forms_itp or append_parts("תְ", get_form_initial(letter))
end
local function get_form_medial(letter)
if type(letter) == "table" then return letter elseif mw.ustring.sub(letter, 1, 1) == ":" then return mw.ustring.sub(letter, 2) else return forms or letter end
end
local dagesh_or_rafe = { = true, = true} local function add_dagesh(letter)
if type(letter) == "table" then return letter elseif mw.ustring.sub(letter, 1, 1) == ":" then return get_form_medial(letter) elseif non_doubling_letters or dagesh_or_rafe then return get_form_medial(letter) else -- TODO: Handle geresh return get_form_medial(letter) .. "ּ" end
end
local function get_form_double(letter, vowel, force_lengthening, stressed)
local lengthen = non_doubling_letters if force_lengthening then lengthen = lengthen and 1 end if stressed then vowel = vowel and (lengthen and vowel == "a" and "ָ" or stressed_gem_vowel) or "" else vowel = vowel and (lengthen and doubling_type or short_gem_vowel) or "" end return append_parts(vowel, add_dagesh(letter))
end
local function get_form_final(letter, char)
if type(letter) == "table" then return letter elseif mw.ustring.sub(letter, 1, 1) == ":" then return mw.ustring.sub(letter, 2) else return (char ~= "a" and char ~= "A" and forms_final_furtive) or forms_final or forms or letter end
end
local function get_elet_ending(letter)
if letter == "א" then return "ֵאת" else local vowel = gutturals and "ַ" or "ֶ" return append_parts(vowel, get_form_medial(letter), vowel, "ת") end
end
local function ends_in_guttural(letter)
if type(letter) == "table" then letter = letter end return gutturals
end
local function shva_na(letter, vowel)
return ends_in_guttural(letter) and chataf_vowel or "ְ"
end
local function reduce(char, chataf)
return char_vowel_reduce or chataf and "ֲ" or "ְ"
end
local letters = "" local not_letters = "" local modifiers = "?" local separators = "?" local root_regex = "(" .. letters .. modifiers .. ")" .. separators
local function parse_root_part(part, last)
if mw.ustring.sub(part, 1, 1) == ":" then return part end local letters = {} local len = 0 local subber = function(letter) table.insert(letters, letter) len = len + 1 return "" end local scraps = mw.ustring.gsub(part, root_regex, subber) if scraps ~= "" then return ":" .. part end if len < 1 then return nil elseif len == 1 then return part else local ret = "" for i, letter in ipairs(letters) do local letterx = last and i == len and convert_final_root_char or convert_root_char if not letterx then error("Unrecognized root letter '" .. letter .. "'.") end ret = append_parts(ret, get_form_medial(letterx), i == len and "" or "ְ") end if type(ret) == "table" then return ret else return ":" .. ret end end
end
local function parse_root(args)
if args == "" then args = nil end if args == "" then args = nil end if args == "" then args = nil end if args then args = args or parse_root_part(args) args = args or parse_root_part(args) args = args or parse_root_part(args, true) elseif args then local radicals = {} local len = 0 local subber = function(radical) table.insert(radicals, radical) len = len + 1 return "" end local scraps = mw.ustring.gsub(args, root_regex, subber) if scraps ~= "" then error("Unrecognized characters in root.") end if len < 3 then error("Root must have at least three letters.") elseif len == 3 then args = args or radicals args = args or radicals args = args or radicals elseif len == 4 then args = args or radicals args = args or radicals args = args or radicals args = args or radicals elseif len > 4 then error("Roots with more than four letters must be explicitly delimited.") end end
end
local function convert_root(args)
for _, x in ipairs({"p", "a", "a2", "l"}) do if args then local root_x = "root_" .. x if not args then if mw.ustring.sub(args, 1, 1) == ":" then args = args else args = x == "l" and convert_final_root_char] or convert_root_char] if not args then error("Unrecognized root letter '" .. args .. "'.") end end end end end if args then local a = append_parts(get_form_medial(args), "ְ", get_form_initial(args)) if type(a) ~= "table" then a = ":" .. a end args = a args = nil end
end
local function conjugate(args)
args = args or args args = args or args args = args or args args = args or args args = args or args args = args or args local fp_long = args and args ~= "-" if fp_long then args = append_parts(args or args, "ֶי") args = append_parts(args or args, "ֶי") end if args ~= "-" then if not args then args = append_parts(args, args, args) end if not args then args = append_parts(args or args, args, args, "ִי") end if not args then args = append_parts(args or args, args, args, "וּ") end if not args then args = append_parts(fp_long and (args or args) or args, args, attach_n(fp_long and args or args), "ָה") end end
if args ~= "-" then if not args then args = append_parts("א", args or args, args, args) end if not args then args = append_parts("תּ", args, args, args) end if not args then args = append_parts("תּ", args or args, args, args, "ִי") end if not args then args = append_parts("י", args, args, args) end if not args then args = args end if not args then args = append_parts("נ", args, args, args) end if not args then args = append_parts("תּ", args or args, args, args, "וּ") end if not args then args = append_parts("תּ", fp_long and (args or args) or args, args, attach_n(fp_long and args or args), "ָה") end if not args then args = append_parts("י", args or args, args, args, "וּ") end if not args then args = append_parts("תּ", fp_long and (args or args) or args, args, attach_n(fp_long and args or args), "ָה") end end
if args ~= "-" then args = args or "" args = args or args if not args then args = append_parts(args, args) end if not args then args = args or append_parts(args, "ָה") args = append_parts(args, args) end if not args then args = append_parts(args, args, "ִים") end if not args then args = append_parts(args, args, "וֹת") end end
if args ~= "-" then args = args or "" args = args or args local past_long = args and args ~= "-" if past_long then args = append_parts(args or args or args, "וֹ") args = args args = args or args == "י" and args or args else args = args or args end local assim_t = args and args ~= "-" if not args then args = append_parts(past_long and args or args, attach_t(args, false, assim_t), "ִי") end if not args then args = append_parts(past_long and args or args, attach_t(args, false, assim_t), "ָ") end if not args then args = append_parts(past_long and args or args, attach_t(args, true, assim_t)) end if not args then args = append_parts(args, args) end if not args then args = append_parts(args or args or args, args or args, "ָה") end if not args then args = append_parts(past_long and args or args, attach_n(args), "וּ") end if not args then args = append_parts(past_long and args or args, attach_t(args, false, assim_t), "ֶם") end if not args then args = append_parts(past_long and args or args, attach_t(args, false, assim_t), "ֶן") end if not args then args = append_parts(past_long and args or args, attach_t(args, false, assim_t), "ֶם") end if not args then args = append_parts(past_long and args or args, attach_t(args, false, assim_t), "ֶן") end if not args then args = append_parts(args or args, args, "וּ") end if not args then args = args end end
args = args or "-"
args = "Conjugation of " .. gen_link(args) .. " (see also Appendix:Hebrew verbs)"
end
local function get_imp_stem_endings(args, root_l, char, chataf, keep_long_vowel, guttural_force_patach)
if root_l == "א" then args = args or append_parts(keep_long_vowel and char_vowel_open or char_vowel_open_short, "א") args = args or append_parts(reduce(char, chataf), "א") args = args or append_parts(char_vowel_open_fp, "א") args = args or append_parts(char == "a" and char_vowel_open or reduce(char, chataf), "א") elseif root_l == "י" then args = args or "ֵה" args = args or "" args = args or "ֶי" else args = args or append_parts(keep_long_vowel and char_vowel or guttural_force_patach and gutturals and "ַ" or char_vowel_short, get_form_final(root_l, guttural_force_patach and (not keep_long_vowel) and gutturals and "a" or char)) args = args or append_parts(reduce(char, chataf), get_form_medial(root_l)) args = args or append_parts(gutturals and "ַ" or char_vowel_short, get_form_medial(root_l), "ְ") args = args or append_parts(char == "a" and char_vowel_open or reduce(char, chataf), get_form_medial(root_l)) end
end
local function get_fut_stem_endings(args, root_l, char, chataf)
if root_l == "א" then args = args or append_parts(char_vowel_open, "א") args = args or append_parts(reduce(char, chataf), "א") args = args or append_parts(char_vowel_open_fp, "א") args = args or append_parts(char == "a" and char_vowel_open or reduce(char, chataf), "א") elseif root_l == "י" then args = args or "ֶה" args = args or "" args = args or "ֶי" else args = args or append_parts(char_vowel, get_form_final(root_l, char)) args = args or append_parts(reduce(char, chataf), get_form_medial(root_l)) args = args or append_parts(gutturals and "ַ" or char_vowel_short, get_form_medial(root_l), "ְ") args = args or append_parts(char == "a" and char_vowel_open or reduce(char, chataf), get_form_medial(root_l)) end
end
local function get_pres_stem_endings(args, root_l, char, chataf, use_elet, use_et)
if root_l == "י" then args = args or "ֶה" args = args or "" if use_et then args = args or "ֵית" end else args = args or append_parts(char_vowel_open, get_form_final(root_l, char)) args = args or append_parts(char == "a" and char_vowel_open or reduce(char, chataf), get_form_medial(root_l)) if use_elet then args = args or get_elet_ending(root_l) end end
end
local function get_past_stem_endings(args, root_l, char, chataf, kca, use_e)
if root_l == "א" then args = args or append_parts(kca and char_vowel_open or "ֵ", "א") args = args or append_parts(char_vowel_open, "א") args = args or append_parts(reduce(char, chataf), "א") args = args or append_parts(char == "a" and char_vowel_open or reduce(char, chataf), "א") elseif root_l == "י" then args = args or use_e and "ֵי" or "ִי" args = args or "ָה" args = args or append_parts(reduce("a", chataf), "ת") args = args or "" else args = args or append_parts(char_vowel_closed, get_form_medial(root_l), "ְ") args = args or append_parts(char_vowel_unstressed, get_form_medial(root_l), "ְ") args = args or append_parts(char_vowel, get_form_final(root_l, char)) args = args or append_parts(reduce(char, chataf), get_form_medial(root_l)) args = args or append_parts(char == "a" and char_vowel_open or reduce(char, chataf), get_form_medial(root_l)) end
end
local function get_imp_stem_endings_gem(args, root_l, char)
if root_l == "א" then args = args or append_parts(char == "a" and "ָ" or stressed_gem_vowel, "א") args = args or append_parts(char == "a" and "ָ" or stressed_gem_vowel, "א") args = args or append_parts(char ~= "u" and char ~= "o" and "ֶ" or stressed_gem_vowel, "א") else args = args or append_parts(stressed_gem_vowel, get_form_final(root_l, char)) args = args or get_form_double(root_l, char, true, true) args = args or append_parts(gutturals and "ַ" or stressed_gem_vowel, get_form_medial(root_l), "ְ") args = args or get_form_double(root_l, char, true) end
end
local function get_fut_stem_endings_gem(args, root_l, char)
if root_l == "א" then args = args or append_parts(char == "a" and "ָ" or stressed_gem_vowel, "א") args = args or get_form_double("א", char) args = args or append_parts(char ~= "u" and char ~= "o" and "ֶ" or stressed_gem_vowel, "א") else args = args or append_parts(stressed_gem_vowel, get_form_final(root_l, char)) args = args or get_form_double(root_l, char, true, true) args = args or append_parts(gutturals and "ַ" or stressed_gem_vowel, get_form_medial(root_l), "ְ") args = args or get_form_double(root_l, char, true) end
end
local function get_pres_stem_endings_gem(args, root_l, char, short_a)
if root_l == "א" then args = args or append_parts(char == "a" and "ָ" or stressed_gem_vowel, "א") args = args or get_form_double("א", char) else args = args or append_parts(char == "a" and (not short_a) and "ָ" or stressed_gem_vowel, get_form_final(root_l, char)) args = args or get_form_double(root_l, char, true) end
end
local function get_past_stem_endings_gem(args, root_l, char)
if root_l == "א" then args = args or append_parts(char == "a" and "ָ" or stressed_gem_vowel, "א") args = args or append_parts(char == "a" and "ָ" or stressed_gem_vowel, "א") args = args or get_form_double("א", char) else args = args or append_parts((char == "u" or char == "o") and {"ו", "ֹ"} or "ַ", get_form_medial(root_l), "ְ") args = args or append_parts((char == "u" or char == "o") and {"ו", "ָ"} or "ַ", get_form_medial(root_l), "ְ") args = args or append_parts(stressed_gem_vowel, get_form_final(root_l, char)) args = args or get_form_double(root_l, char, true, true) args = args or get_form_double(root_l, char, true) end
end
get_stems_for = function(args, categories)
local root_p = args local root_a = args local root_l = args
if args ~= "-" then local past_char = args or "A" local fut_char = args or (root_a == "י" and "I") or "U" local imp_char = args or fut_char local inf_char = args or fut_char local pres_char = args or past_char local prefix_vowel = (fut_char == "O" and past_char == "O" and args ~= "-") and "ֵ" or "ָ"
args = args or append_parts("ל", prefix_vowel, get_form_medial(root_p), char_vowel, get_form_final(root_l, inf_char)) args = args or append_parts(get_form_initial(root_p), "ִי", get_form_medial(root_l), "ָה")
args = args or get_form_initial(root_p) args = args or append_parts(prefix_vowel, get_form_medial(root_p)) args = args or append_parts("ְ", get_form_medial(root_p)) args = args or "" get_imp_stem_endings(args, root_l, imp_char, gutturals, true) get_fut_stem_endings(args, root_l, fut_char, gutturals)
args = args or get_form_initial(root_p) get_pres_stem_endings(args, root_l, pres_char, gutturals, false, false)
args = args or get_form_initial(root_p) get_past_stem_endings(args, root_l, past_char, gutturals, true, false) elseif false then -- reserved for special cases else local past_char = args or "a" local fut_char = args local imp_char = args local inf_char = args local pres_char = args
local if_ = nil local ef_ = nil local suf_if_ = nil if args ~= "-" then fut_char = fut_char or ((args ~= "-" or gutturals) and "a") or "u" if_ = get_form_double(root_a, "i", true) ef_ = get_form_double(root_a, "e", true) elseif args ~= "-" then if root_p == "א" then fut_char = fut_char or "a" if_ = append_parts("ֹא", get_form_medial(root_a)) ef_ = append_parts({"ו", "ֹ"}, get_form_medial(root_a)) else fut_char = fut_char or (gutturals and root_l ~= "א" and "a") or "i" if_ = append_parts("ֵ", get_form_medial(root_a)) end elseif monophthongize then fut_char = fut_char or "a" if_ = append_parts("ִי", get_form_medial(root_a)) elseif gutturals then fut_char = fut_char or ((gutturals or gutturals) and "a") or "u" local v1 = (root_p == "א" or (root_l == "י" and root_p ~= "ע") or (root_l ~= "י" and fut_char == "a")) and "ֶ" or "ַ" if args then if root_a == "י" then v1 = "ִ" end if_ = append_parts(v1, get_form_medial(root_p), "ְ", get_form_initial(root_a)) ef_ = append_parts("ֶ", get_form_medial(root_p), "ְ", get_form_initial(root_a)) else local v2 = v1 == "ֶ" and "ֱ" or "ֲ" if_ = append_parts(v1, get_form_medial(root_p), v2, get_form_medial(root_a)) ef_ = append_parts("ֶ", get_form_medial(root_p), "ֱ", get_form_medial(root_a)) suf_if_ = append_parts(v1, get_form_medial(root_p), v1, get_form_medial(root_a)) end else fut_char = fut_char or ((gutturals or gutturals) and "a") or "u" if_ = append_parts("ִ", get_form_medial(root_p), "ְ", get_form_initial(root_a)) ef_ = append_parts("ֶ", get_form_medial(root_p), "ְ", get_form_initial(root_a)) end
local inf_if_ = nil local p_ = nil if args ~= "-" and root_p ~= "א" then inf_char = inf_char or "i" imp_char = imp_char or fut_char args = args or append_parts("לָ", get_form_medial(root_a), get_elet_ending(root_l)) p_ = get_form_initial(root_a) elseif gutturals then inf_char = inf_char or "u" imp_char = imp_char or (root_p == "א" and args ~= "-" and (((gutturals or gutturals) and "a") or "u")) or fut_char local v1 = (root_p == "א" or (root_l ~= "י" and inf_char == "a")) and "ֶ" or "ַ" if args then if root_a == "י" then v1 = "ִ" end inf_if_ = append_parts(v1, get_form_medial(root_p), "ְ", get_form_initial(root_a)) else local v2 = v1 == "ֶ" and "ֱ" or "ֲ" inf_if_ = append_parts(v1, get_form_medial(root_p), v2, get_form_medial(root_a)) end p_ = append_parts(get_form_initial(root_p), root_p == "א" and "ֱ" or "ֲ", get_form_medial(root_a)) if root_l ~= "י" and root_p == "א" and gutturals then args = args or append_parts(get_form_initial(root_p), "ֶ", get_form_medial(root_a)) args = args or append_parts("ֱ", get_form_medial(root_l)) end else inf_char = inf_char or "u" imp_char = imp_char or fut_char inf_if_ = if_ p_ = append_parts(get_form_initial(root_p), shva_na(root_p), get_form_medial(root_a)) end
args = args or append_parts("ל", inf_if_, root_l == "י" and "וֹת" or append_parts(char_vowel, get_form_final(root_l, inf_char))) args = args or append_parts(get_form_initial(root_p), shva_na(root_p), get_form_medial(root_a), "ִי", root_l == "י" and "ּ" or get_form_medial(root_l), "ָה") args = args or append_parts(get_form_initial(root_p), "ָ", get_form_medial(root_a), "וּ", get_form_final(root_l, "U"))
args = args or p_ if root_l ~= "י" and (args == "-" or root_p == "א") then if gutturals then args = args or append_parts(get_form_initial(root_p), "ַ", get_form_medial(root_a)) if imp_char ~= "u" and imp_char ~= "i" then args = args or args end args = args or append_parts("ֲ", get_form_medial(root_l)) else args = args or append_parts(get_form_initial(root_p), "ִ", get_form_medial(root_a)) end end args = args or if_ args = args or ef_ if root_l ~= "י" then args = args or suf_if_ end args = args or "" get_imp_stem_endings(args, root_l, imp_char, ends_in_guttural(root_a)) get_fut_stem_endings(args, root_l, fut_char, ends_in_guttural(root_a))
if args and args ~= "" then -- pa`el args = args or append_parts(get_form_initial(root_p), "ָ", get_form_medial(root_a)) if root_l ~= "י" then args = args or append_parts(get_form_initial(root_p), shva_na(root_p), get_form_medial(root_a)) end get_pres_stem_endings(args, root_l, pres_char or "E", ends_in_guttural(root_a), false, false) else -- po`el args = args or append_parts(get_form_initial(root_p), "וֹ", get_form_medial(root_a)) get_pres_stem_endings(args, root_l, pres_char or "i", ends_in_guttural(root_a), true, false) end
args = args or append_parts(get_form_initial(root_p), "ָ", get_form_medial(root_a)) args = args or append_parts(get_form_initial(root_p), shva_na(root_p), get_form_medial(root_a)) if past_char == "i" or past_char == "u" then args = args or append_parts(get_form_initial(root_p), gutturals and "ַ" or "ִ", get_form_medial(root_a)) end get_past_stem_endings(args, root_l, past_char, ends_in_guttural(root_a), true, false) end
end
get_stems_for = function(args, categories)
local root_p = args local root_a = args local root_l = args local past_char = args or "i" local fut_char = args or "i" local imp_char = args or fut_char local inf_char = args or fut_char local pres_char = args or "i"
if false then -- reserved for special cases elseif false then -- reserved for special cases else args = args or append_parts("לְ", get_form_medial(root_p), get_form_double(root_a, "a"), root_l == "י" and "וֹת" or append_parts(char_vowel, get_form_final(root_l, inf_char))) args = args or append_parts(get_form_initial(root_p), get_form_double(root_a, "i"), "וּ", get_form_final(root_l, "U"))
args = args or append_parts(get_form_initial(root_p), get_form_double(root_a, "a")) args = args or append_parts("ְ", get_form_medial(root_p), get_form_double(root_a, "a")) args = args or append_parts("ֲ", get_form_medial(root_p), get_form_double(root_a, "a")) args = args or "" get_imp_stem_endings(args, root_l, imp_char, ends_in_guttural(root_a)) get_fut_stem_endings(args, root_l, fut_char, ends_in_guttural(root_a))
args = args or append_parts("מְ", get_form_medial(root_p), get_form_double(root_a, "a")) get_pres_stem_endings(args, root_l, pres_char, ends_in_guttural(root_a), true, false)
args = args or append_parts(get_form_initial(root_p), get_form_double(root_a, "i")) get_past_stem_endings(args, root_l, past_char, ends_in_guttural(root_a), false, false) end
end
get_stems_for = function(args, categories)
local root_p = args local root_a = args == "-" and args or args local root_l = args local past_char = args or "i" local fut_char = args or "i" local imp_char = args or fut_char local inf_char = args or fut_char local pres_char = args or "i"
if false then -- reserved for special cases elseif false then -- reserved for special cases else args = args or append_parts("לְ", get_form_medial(root_p), "וֹ", get_form_medial(root_a), root_l == "י" and "וֹת" or append_parts(char_vowel, get_form_final(root_l, inf_char))) -- args = args or append_parts(get_form_initial(root_p), "וֹ", get_form_medial(root_a), shva_na(root_a), get_form_medial(root_l), "וּת") args = args or append_parts(get_form_initial(root_p), "ִי", get_form_medial(root_a), "וּ", get_form_final(root_l, "U"))
args = args or append_parts(get_form_initial(root_p), "וֹ", get_form_medial(root_a)) args = args or append_parts("ְ", get_form_medial(root_p), "וֹ", get_form_medial(root_a)) args = args or append_parts("ֲ", get_form_medial(root_p), "וֹ", get_form_medial(root_a)) args = args or "" get_imp_stem_endings(args, root_l, imp_char, ends_in_guttural(root_a)) get_fut_stem_endings(args, root_l, fut_char, ends_in_guttural(root_a))
args = args or append_parts("מְ", get_form_medial(root_p), "וֹ", get_form_medial(root_a)) get_pres_stem_endings(args, root_l, pres_char, ends_in_guttural(root_a), true, false)
args = args or append_parts(get_form_initial(root_p), "וֹ", get_form_medial(root_a)) get_past_stem_endings(args, root_l, past_char, ends_in_guttural(root_a), false, false) end
end
get_stems_for = function(args, categories)
local root_p = args local root_a = args local root_l = args local past_char = args or "a" local fut_char = args or "a" local pres_char = args or "a"
if false then -- reserved for special cases elseif false then -- reserved for special cases else args = args or "-" args = args or append_parts("ְ", get_form_medial(root_p), get_form_double(root_a, "u")) args = args or append_parts("ֲ", get_form_medial(root_p), get_form_double(root_a, "u")) args = args or "" get_fut_stem_endings(args, root_l, fut_char, ends_in_guttural(root_a))
args = args or append_parts("מְ", get_form_medial(root_p), get_form_double(root_a, "u")) get_pres_stem_endings(args, root_l, pres_char, ends_in_guttural(root_a), true, false)
args = args or append_parts(get_form_initial(root_p), get_form_double(root_a, "u")) get_past_stem_endings(args, root_l, past_char, ends_in_guttural(root_a), false, true) end
end
get_stems_for = function(args, categories)
local root_p = args local root_a = args == "-" and args or args local root_l = args local past_char = args or "a" local fut_char = args or "a" local pres_char = args or "a"
if false then -- reserved for special cases elseif false then -- reserved for special cases else args = args or "-" args = args or append_parts("ְ", get_form_medial(root_p), "וֹ", get_form_medial(root_a)) args = args or append_parts("ֲ", get_form_medial(root_p), "וֹ", get_form_medial(root_a)) args = args or "" get_fut_stem_endings(args, root_l, fut_char, ends_in_guttural(root_a))
args = args or append_parts("מְ", get_form_medial(root_p), "וֹ", get_form_medial(root_a)) get_pres_stem_endings(args, root_l, pres_char, ends_in_guttural(root_a), true, false)
args = args or append_parts(get_form_initial(root_p), "וֹ", get_form_medial(root_a)) get_past_stem_endings(args, root_l, past_char, ends_in_guttural(root_a), false, true) end
end
get_stems_for = function(args, categories)
local root_p = args local root_a = args local root_l = args local past_char = args or args ~= "-" and "i" or "I" local fut_char = args or args ~= "-" and "i" or "I" local imp_char = args or fut_char local inf_char = args or fut_char local pres_char = args or args ~= "-" and "i" or "I"
if args ~= "-" then args = args or append_parts("לְהָ", get_form_medial(root_p), char_vowel, get_form_final(root_l, inf_char)) args = args or append_parts(gutturals and "הֶ" or "הֲ", get_form_medial(root_p), "ָ", get_form_medial(root_l), "ָה")
args = args or append_parts("הָ", get_form_medial(root_p)) args = args or append_parts("ָ", get_form_medial(root_p)) args = args or append_parts(gutturals and "הַ" or "הֲ", get_form_medial(root_p)) args = args or append_parts("ְ", get_form_medial(root_p)) args = args or "" get_imp_stem_endings(args, root_l, imp_char, gutturals, false, true) get_fut_stem_endings(args, root_l, fut_char, gutturals)
args = args or append_parts("מֵ", get_form_medial(root_p)) args = args or append_parts("מְ", get_form_medial(root_p)) get_pres_stem_endings(args, root_l, pres_char, gutturals, false, false)
args = args or append_parts("הֵ", get_form_medial(root_p)) args = args or append_parts(gutturals and "הַ" or "הֲ", get_form_medial(root_p)) get_past_stem_endings(args, root_l, past_char, gutturals, false, true) elseif args ~= "-" then args = args or append_parts("לְהָ", get_form_medial(root_p), char_vowel, get_form_final(root_l, inf_char)) --- args = args or append_parts(gutturals and (non_doubling_letters and "הֶ" or "הַ") or "הֲ", get_form_medial(root_p), get_form_double(root_l, "a", true), "ָה") args = args or append_parts(gutturals and "הֶ" or "הֲ", get_form_medial(root_p), "ָ", get_form_medial(root_l), "ָה")
args = args or append_parts("הָ", get_form_medial(root_p)) args = args or append_parts("ָ", get_form_medial(root_p)) args = args or append_parts(gutturals and "הַ" or "הֲ", get_form_medial(root_p)) args = args or append_parts("ְ", get_form_medial(root_p)) args = args or "" get_imp_stem_endings_gem(args, root_l, imp_char) get_fut_stem_endings_gem(args, root_l, fut_char)
args = args or append_parts("מֵ", get_form_medial(root_p)) args = args or append_parts("מְ", get_form_medial(root_p)) get_pres_stem_endings_gem(args, root_l, pres_char)
args = args or append_parts("הֵ", get_form_medial(root_p)) args = args or append_parts(gutturals and "הַ" or "הֲ", get_form_medial(root_p)) get_past_stem_endings_gem(args, root_l, past_char) elseif false then -- reserved for special cases else local af_ = nil local if_ = nil if args ~= "-" then af_ = append_parts(gutturals and "ָ" or "ַ", add_dagesh(root_a)) if_ = append_parts(gutturals and "ֵ" or "ִ", add_dagesh(root_a)) elseif monophthongize then af_ = append_parts(monophthongize, get_form_medial(root_a)) if_ = af_ elseif gutturals then if args then af_ = append_parts("ַ", get_form_medial(root_p), "ְ", get_form_initial(root_a)) if_ = append_parts("ֶ", get_form_medial(root_p), "ְ", get_form_initial(root_a)) else af_ = append_parts("ַ", get_form_medial(root_p), "ֲ", get_form_medial(root_a)) if_ = append_parts("ֶ", get_form_medial(root_p), "ֱ", get_form_medial(root_a)) end else af_ = append_parts("ַ", get_form_medial(root_p), "ְ", get_form_initial(root_a)) if_ = append_parts(root_a == "א" and root_l == "י" and "ֶ" or "ִ", get_form_medial(root_p), "ְ", get_form_initial(root_a)) end
args = args or append_parts("לְה", af_, root_l == "י" and "וֹת" or append_parts(char_vowel, get_form_final(root_l, inf_char))) args = args or append_parts("ה", af_, "ָ", get_form_medial(root_l), "ָה")
args = args or append_parts("ה", af_) args = args or af_ args = args or "" get_imp_stem_endings(args, root_l, imp_char, ends_in_guttural(root_a), false, args ~= "-") get_fut_stem_endings(args, root_l, fut_char, ends_in_guttural(root_a))
args = args or append_parts("מ", af_) get_pres_stem_endings(args, root_l, pres_char, ends_in_guttural(root_a), false, false)
args = args or append_parts("ה", if_) get_past_stem_endings(args, root_l, past_char, ends_in_guttural(root_a), false, true) end
end
get_stems_for = function(args, categories)
local root_p = args local root_a = args local root_l = args local past_char = args or "a" local fut_char = args or "a" local pres_char = args or "a"
if args ~= "-" then args = args or "-" args = args or append_parts("וּ", get_form_medial(root_p)) args = args or "" get_fut_stem_endings(args, root_l, fut_char, gutturals)
args = args or append_parts("מוּ", get_form_medial(root_p)) get_pres_stem_endings(args, root_l, pres_char, gutturals, true, true)
args = args or append_parts("הוּ", get_form_medial(root_p)) get_past_stem_endings(args, root_l, past_char, gutturals, false, true) elseif args ~= "-" then args = args or "-" args = args or append_parts("וּ", get_form_medial(root_p)) args = args or "" get_fut_stem_endings_gem(args, root_l, fut_char)
args = args or append_parts("מוּ", get_form_medial(root_p)) get_pres_stem_endings_gem(args, root_l, pres_char)
args = args or append_parts("הוּ", get_form_medial(root_p)) get_past_stem_endings_gem(args, root_l, past_char) elseif false then -- reserved for special cases else local uf_ = nil if args ~= "-" then uf_ = append_parts({"ו", "ֻ"}, add_dagesh(root_a)) elseif monophthongize then uf_ = append_parts("וּ", get_form_medial(root_a)) elseif gutturals then if args then uf_ = append_parts({"ו", "ֻ"}, get_form_medial(root_p), "ְ", get_form_initial(root_a)) else uf_ = append_parts({"ו", "ָ"}, get_form_medial(root_p), "ֳ", get_form_medial(root_a)) end else uf_ = append_parts({"ו", "ֻ"}, get_form_medial(root_p), "ְ", get_form_initial(root_a)) end
args = args or "-" args = args or uf_ args = args or "" get_fut_stem_endings(args, root_l, fut_char, ends_in_guttural(root_a))
args = args or append_parts("מ", uf_) get_pres_stem_endings(args, root_l, pres_char, ends_in_guttural(root_a), true, true)
args = args or append_parts("ה", uf_) get_past_stem_endings(args, root_l, past_char, ends_in_guttural(root_a), false, true) end
end
get_stems_for = function(args, categories)
local root_p = args local root_a = args local root_l = args local past_char = args or "a" local fut_char = args or gutturals and root_l ~= "א" and "a" or "i" local imp_char = args or fut_char local inf_char = args or fut_char local pres_char = args or "a"
if false then -- reserved for special cases elseif false then -- reserved for special cases else local if_ = nil local suf_if_ = nil if args ~= "-" then if_ = get_form_double(root_a, "i") elseif monophthongize then if_ = append_parts(monophthongize, get_form_medial(root_a)) elseif gutturals then local v1 = root_p == "ע" and root_l == "י" and "ַ" or "ֶ" if args then if_ = append_parts(v1, get_form_medial(root_p), "ְ", get_form_initial(root_a)) else local v2 = v1 == "ַ" and "ֲ" or "ֱ" if_ = append_parts(v1, get_form_medial(root_p), v2, get_form_medial(root_a)) suf_if_ = append_parts(v1, get_form_medial(root_p), v1, get_form_medial(root_a)) end else if_ = append_parts("ִ", get_form_medial(root_p), "ְ", get_form_initial(root_a)) end
args = args or append_parts("לְה", get_form_double(root_p, "i", true), "ָ", get_form_medial(root_a), root_l == "י" and "וֹת" or append_parts(char_vowel, get_form_final(root_l, inf_char))) if root_l == "י" then args = args or append_parts("ה", get_form_double(root_p, "i", true), "ָ", get_form_medial(root_a), "וּת") else args = args or append_parts("ה", get_form_double(root_p, "i", true), "ָ", get_form_medial(root_a), shva_na(root_a), get_form_medial(root_l), "וּת") end
args = args or append_parts("ה", get_form_double(root_p, "i", true), "ָ", get_form_medial(root_a)) args = args or append_parts(get_form_double(root_p, "i", true), "ָ", get_form_medial(root_a)) args = args or append_parts(get_form_double(root_p, "e", true), "ָ", get_form_medial(root_a)) args = args or "" get_imp_stem_endings(args, root_l, imp_char, ends_in_guttural(root_a)) get_fut_stem_endings(args, root_l, fut_char, ends_in_guttural(root_a))
args = args or append_parts("נ", if_) get_pres_stem_endings(args, root_l, pres_char, ends_in_guttural(root_a), true, true)
args = args or append_parts("נ", if_) if suf_if_ then local pres_stem_name = root_l == "י" and "past_3fs_pre_stem" or "past_3_pre_stem" args = args or append_parts("נ", suf_if_) end get_past_stem_endings(args, root_l, past_char, ends_in_guttural(root_a), false, true) end
end
get_stems_for = function(args, categories)
local itp = get_form_itp(args) local etp = get_form_etp(args) local root_a = args local root_l = args local past_char = args or "i" local fut_char = args or "i" local imp_char = args or fut_char local inf_char = args or fut_char local pres_char = args or "i"
if false then -- reserved for special cases elseif false then -- reserved for special cases else args = args or append_parts("לְהִ", itp, get_form_double(root_a, "a"), root_l == "י" and "וֹת" or append_parts(char_vowel, get_form_final(root_l, inf_char))) if root_l == "י" then args = args or append_parts("הִ", itp, get_form_double(root_a, "a"), "וּת") else args = args or append_parts("הִ", itp, get_form_double(root_a, "a"), shva_na(root_a), get_form_medial(root_l), "וּת") end
args = args or append_parts("הִ", itp, get_form_double(root_a, "a")) args = args or append_parts("ִ", itp, get_form_double(root_a, "a")) args = args or append_parts("ֶ", etp, get_form_double(root_a, "a")) args = args or "" get_imp_stem_endings(args, root_l, imp_char, ends_in_guttural(root_a)) get_fut_stem_endings(args, root_l, fut_char, ends_in_guttural(root_a))
args = args or append_parts("מִ", itp, get_form_double(root_a, "a")) get_pres_stem_endings(args, root_l, pres_char, ends_in_guttural(root_a), true, false)
args = args or append_parts("הִ", itp, get_form_double(root_a, "a")) get_past_stem_endings(args, root_l, past_char, ends_in_guttural(root_a), false, true) end
end
get_stems_for = function(args, categories)
local itp = get_form_itp(args) local etp = get_form_etp(args) local root_a = args == "-" and args or args local root_l = args local past_char = args or "i" local fut_char = args or "i" local imp_char = args or fut_char local inf_char = args or fut_char local pres_char = args or "i"
if false then -- reserved for special cases elseif false then -- reserved for special cases else args = args or append_parts("לְהִ", itp, "וֹ", get_form_medial(root_a), root_l == "י" and "וֹת" or append_parts(char_vowel, get_form_final(root_l, inf_char))) if root_l == "י" then args = args or append_parts("הִ", itp, "וֹ", get_form_medial(root_a), "וּת") else args = args or append_parts("הִ", itp, "וֹ", get_form_medial(root_a), shva_na(root_a), get_form_medial(root_l), "וּת") end
args = args or append_parts("הִ", itp, "וֹ", get_form_medial(root_a)) args = args or append_parts("ִ", itp, "וֹ", get_form_medial(root_a)) args = args or append_parts("ֶ", etp, "וֹ", get_form_medial(root_a)) args = args or "" get_imp_stem_endings(args, root_l, imp_char, ends_in_guttural(root_a)) get_fut_stem_endings(args, root_l, fut_char, ends_in_guttural(root_a))
args = args or append_parts("מִ", itp, "וֹ", get_form_medial(root_a)) get_pres_stem_endings(args, root_l, pres_char, ends_in_guttural(root_a), true, false)
args = args or append_parts("הִ", itp, "וֹ", get_form_medial(root_a)) get_past_stem_endings(args, root_l, past_char, ends_in_guttural(root_a), false, true) end
end
get_stems_for = function(args, categories)
error("Binyan hitpu`al is not yet implemented.")
end
local form_names = {
= true, = true, = true,
= true, = true, = true, = true,
= true, = true, = true, = true, = true, = true, = true, = true, = true, = true,
= true, = true, = true, = true, = true, = true, = true, = true, = true, = true,
= true, = true, = true, = true,
}
local optional_forms = {
= true, = true, = true,
}
local table_template = [===[
{\op}| border="1" color="#cdcdcd" style="width:100%;border-collapse:collapse;line-height:2em;border:2px solid #000000;background:#fdfdfd;text-align:center" class="inflection-table" ! scope='row' colspan="2" style="background:#E4C0CF;border-right:2px solid" | non-finite forms | colspan="4" style="text-align:left" | {non_finite} |- style="border-top:2px solid" ! colspan="2" rowspan="2" style="background:#E4C0CF;border-right:2px solid" | finite forms ! scope='col' colspan="2" style="background:#C0CFE4" | singular ! scope='col' colspan="2" style="background:#C0CFE4" | plural |- ! scope='col' style="background:#C0CFE4" | m. ! scope='col' style="background:#C0CFE4" | f. ! scope='col' style="background:#C0CFE4" | m. ! scope='col' style="background:#C0CFE4" | f. |- style="border-top:2px solid" ! scope='row' rowspan="3" style="background:#E2E4C0;width:1px" | past ! scope='row' style="background:#C0CFE4;border-right:2px solid;width:1px" | first | colspan="2" | {past_1s} || colspan="2" | {past_1p} |- ! scope='row' style="background:#C0CFE4;border-right:2px solid" | second | {past_2ms} || {past_2fs} || {past_2mp}{2p_tag} || {past_2fp}{2p_tag} |- ! scope='row' style="background:#C0CFE4;border-right:2px solid" | third | {past_3ms} || {past_3fs} || colspan="2" | {past_3mp} |- style="border-top:2px solid" ! scope='row' colspan="2" style="background:#E2E4C0;border-right:2px solid" | present | {pres_ms} || {pres_fs} || {pres_mp} || {pres_fp} |- style="border-top:2px solid" ! scope='row' rowspan="3" style="background:#E2E4C0" | future ! scope='row' style="background:#C0CFE4;border-right:2px solid" | first | colspan="2" | {fut_1s} || colspan="2" | {fut_1p} |- ! scope='row' style="background:#C0CFE4;border-right:2px solid" | second | {fut_2ms} || {fut_2fs} || {fut_2mp} || {fut_2fp}{fp_tag} |- ! scope='row' style="background:#C0CFE4;border-right:2px solid" | third | {fut_3ms} || {fut_3fs} || {fut_3mp} || {fut_3fp}{fp_tag} |- style="border-top:2px solid" ! scope='row' colspan="2" style="background:#E2E4C0;border-right:2px solid" | imperative | {imp_ms} || {imp_fs} || {imp_mp} || {imp_fp}{fp_tag} |- style="border-top:2px solid" ! scope='row' colspan="2" style="background:#E4C0CF;border-right:2px solid" | notes | colspan="4" style="text-align:left;word-wrap:break-word;width:1px;padding-right:1em" | {notes} |{\cl}
]===]
local non_finite = {
= "* to-infinitive: {inf}\n", = "* action noun: {noun}\n", = "* passive participle: {pp}\n",
}
local function make_table(args)
for key, _ in pairs(form_names) do args = args and gen_link(args) or (not optional_forms) and "—" end args = m_strutils.format(non_finite, args) if args then args = args .. m_strutils.format(non_finite, args) end if args then args = args .. m_strutils.format(non_finite, args) end return m_strutils.format(table_template, args)
end
local function track(binyan, args)
local sub = nil local hollow = args ~= "-" local assim = args ~= "-" local elide = args ~= "-" and binyan == "pa" -- elide is only relevant to pa`al I think local geminate = args ~= "-" if binyan == "pa" or binyan == "nif" or binyan == "hif" or binyan == "huf" then if hollow then if assim or elide or geminate then sub = "?" else sub = "hollow" end elseif elide then if geminate then sub = "?" elseif assim then sub = "assim+elide" else sub = "elide" end elseif geminate then if assim then sub = "geminate+assim" else sub = "geminate" end elseif assim then sub = "assim" end end local m_debug = require('Module:debug') m_debug.track("he-conj/" .. binyan .. (sub and ("/" .. sub) or "")) if sub == "?" then m_debug.track("he-conj/incompatible-combination") end if args and args ~= "-" then m_debug.track("he-conj/past_long") end if args and args ~= "-" then m_debug.track("he-conj/fp_long") end
end
local function track_page(lemma)
local namespace = mw.title.getCurrentTitle().nsText if namespace == "" then local pagename = mw.title.getCurrentTitle().text
local is_table = (type(lemma) == "table") local male = (lang:makeEntryName(is_table and lemma or lemma))
if pagename ~= male then local haser = (lang:makeEntryName(is_table and lemma or lemma))
local m_debug = require('Module:debug') if pagename ~= haser then m_debug.track("he-conj/not_at_lemma") else m_debug.track("he-conj/at_haser_spelling") end end end
end
-- The main entry point. -- This is the only function that can be invoked from a template. function export.show(frame)
local args = frame:getParent().args local binyan = args or frame.args or error("Binyan has not been specified. Please pass parameter 1 to the module invocation or parent template.") -- PAGENAME = mw.title.getCurrentTitle().text -- NAMESPACE = mw.title.getCurrentTitle().nsText
local categories = {}
parse_root(args) convert_root(args)
local root_p = args local root_a = args local root_l = args
if not (root_p and root_a and root_l) then error("Missing root letters.") end
args = args or ((root_a == "י" or root_a == "ו") and root_l ~= "י" and "+") or "-" args = args or ((root_a == root_l) and root_l ~= "י" and "+") or "-" args = args or (args == "-" and args == "-" and root_p == "נ" and not gutturals and "+") or "-" args = args or (args and (args ~= "-" == "-" or root_p == "י" or root_p == "ו") and root_l ~= "י" and "+") or "-"
track(binyan, args)
if binyan == "-" then -- do nothing, stems are given explicitly elseif get_stems_for then get_stems_for(args, categories) else error("Unknown binyan code '" .. binyan .. "'") end
conjugate(args) -- finishes conjugation based on stems from get_stems_for
local pre_notes = "" if args and not equal(args, args) then args = "1" args = "2" pre_notes = pre_notes .. "# Pronounced " .. gen_link(args) .. " and " .. gen_link(args) .. " in informal Modern Hebrew.\n# Rare in Modern Hebrew.\n" else args = "" args = "1" pre_notes = pre_notes .. "# Rare in Modern Hebrew.\n" end args = pre_notes .. (args or "")
if args or "" ~= "" then return make_bot_list(forms, sep ~= "") else track_page(args) return make_table(args, title) .. m_utilities.format_categories(categories, lang) end
end
return export