text:
Module:User:Zhnka/gmh-verb

local export = {}

--[=[

Authorship: Zhnka

]=]

--[=[

TERMINOLOGY:

-- "slot" = A particular combination of tense/mood/person/number/etc. Example slot names for verbs are "pres_1s" (present first singular) and "subc_subii_3p" (subordinate-clause subjunctive II third plural). Each slot is filled with zero or more forms.

-- "form" = The conjugated German form representing the value of a given slot.

-- "lemma" = The dictionary form of a given German term. For German, always the infinitive. ]=]

--[=[

FIXME:

1. Handle fensterln. (DONE) 2. Handle spie- past tense of speien. (DONE) 3. Make sure rathen, verheirathen work. (DONE) 4. Modify einfix to better handle managen, framen. (DONE) 5. Use variant codes so variant imperatives with and without -e match up in conjoined verbs e.g. ausschneiden und einfügen. 6. In conjoined verbs e.g. ausschneiden und einfügen, don't repeat auxiliaries. --]=]

local lang = require("Module:languages").getByCode("gmh") local m_string_utilities = require("Module:string utilities") local m_links = require("Module:links") local m_table = require("Module:table") local iut = require("Module:inflection utilities")

local rfind = mw.ustring.find local rmatch = mw.ustring.match local rsplit = mw.text.split

local function link_term(term, face) return m_links.full_link({ lang = lang, term = term }, face) end

local vowel = "aeiouyäëïöüÿáéíóúýàèìòùỳâêîôûŷãẽĩõũỹ" local vowel_c = "[" .. vowel .. "]" local not_vowel_c = "[^" .. vowel .. "]"

local function ends_in_dt(stem) return stem:find("[dt]h?$") end

local inseparable_prefixes = { "be", "emp", "ent", "er", "ge", "miss", "miß", "ver", "zer", -- can also be separable "durch", "hinter", "über", "um", "unter", "voll", "wider", "wieder", }

local all_persons_numbers = { ["1s"] = "1|s", ["2s"] = "2|s", ["3s"] = "3|s", ["1p"] = "1|p", ["2p"] = "2|p", ["3p"] = "3|p", }

local person_number_list = { "1s", "2s", "3s", "1p", "2p", "3p", } local persnum_to_index = {} for k, v in pairs(person_number_list) do	persnum_to_index[v] = k end local imp_person_number_list = { "2s", "2p", }

local verb_slots_basic = { {"infinitive", "inf"}, {"infinitive_linked", "inf"}, {"ger_gen", "ger|gen"}, {"ger_dat", "ger|dat"}, {"pres_part", "pres|part"}, {"perf_part", "perf|part"}, {"zu_infinitive", "zu"}, -- will be handled specially by Module:accel/de {"aux", "-"}, }

local verb_slots_subordinate_clause = { }

local verb_slots_composed = { }

-- Add entries for a slot with person/number variants. -- `verb_slots` is the table to add to. -- `slot_prefix` is the prefix of the slot, typically specifying the tense/aspect. -- `tag_suffix` is the set of inflection tags to add after the person/number tags, -- or "-" to use "-" as the inflection tags (which indicates that no accelerator entry -- should be generated). local function add_slot_personal(verb_slots, slot_prefix, tag_suffix) for persnum, persnum_tag in pairs(all_persons_numbers) do local slot = slot_prefix .. "_" .. persnum if tag_suffix == "-" then table.insert(verb_slots, {slot, "-"}) else table.insert(verb_slots, {slot, persnum_tag .. "|" .. tag_suffix}) end end end

add_slot_personal(verb_slots_basic, "pres", "pres") add_slot_personal(verb_slots_basic, "subi", "sub|I") add_slot_personal(verb_slots_basic, "pret", "pret") add_slot_personal(verb_slots_basic, "subii", "sub|II") table.insert(verb_slots_basic, {"imp_2s", "s|imp"}) table.insert(verb_slots_basic, {"imp_2p", "p|imp"}) add_slot_personal(verb_slots_subordinate_clause, "subc_pres", "dep|pres") add_slot_personal(verb_slots_subordinate_clause, "subc_subi", "dep|sub|I") add_slot_personal(verb_slots_subordinate_clause, "subc_pret", "dep|pret") add_slot_personal(verb_slots_subordinate_clause, "subc_subii", "dep|sub|II") add_slot_personal(verb_slots_composed, "perf_ind", "-") add_slot_personal(verb_slots_composed, "perf_sub", "-") add_slot_personal(verb_slots_composed, "plup_ind", "-") add_slot_personal(verb_slots_composed, "plup_sub", "-") table.insert(verb_slots_composed, {"futi_inf", "-"}) add_slot_personal(verb_slots_composed, "futi_subi", "-") add_slot_personal(verb_slots_composed, "futi_ind", "-") add_slot_personal(verb_slots_composed, "futi_subii", "-") table.insert(verb_slots_composed, {"futii_inf", "-"}) add_slot_personal(verb_slots_composed, "futii_subi", "-") add_slot_personal(verb_slots_composed, "futii_ind", "-") add_slot_personal(verb_slots_composed, "futii_subii", "-")

local all_verb_slots = {} for _, slot_and_accel in ipairs(verb_slots_basic) do	table.insert(all_verb_slots, slot_and_accel) end for _, slot_and_accel in ipairs(verb_slots_subordinate_clause) do	table.insert(all_verb_slots, slot_and_accel) end for _, slot_and_accel in ipairs(verb_slots_composed) do	table.insert(all_verb_slots, slot_and_accel) end

local pronouns = { "ich", "du", "ër", "wir", "ir", "sie", }

irreg_verbs = { ["hân"] = { ["pres"] = { "hân", "hâst", "hât", "hân", "hât", "hânt", }, ["pret"] = { "habete", "habetest", "habete", "habeten", "habetet", "habeten", }, ["subi"] = { "habe", "habest", "habe", "haben", "habet", "haben", }, ["subii"] = { "habete", "habetest", "habete", "habeten", "habetet", "habeten", }, ["imp"] = { "habe", "habt", }, ["presp"] = "hânde", ["pp"] = "habet", ["gergen"] = {"hânnes", "hânes"}, ["gerdat"] = {"hânne", "hâne"}, },	["sîn"] = { ["pres"] = { "bin", "bist", "ist", "birn", "birt", "sint", }, ["pret"] = { "was", "wære", "was", "wâren", "wâret", "wâren", }, ["subi"] = { "sî", "sîst", "sî", "sîn", "sît", "sîn", }, ["subii"] = { "wære", "wærest", "wære", "wæren", "wæret", "wæren", }, ["imp"] = { {"wis", "bis"}, "sît", }, ["presp"] = {"sînde", "wësende"}, ["pp"] = "wësen", ["gergen"] = {"sînnes", "sînes", "wësennes", "wësenes"}, ["gerdat"] = {"sînne", "sîne", "wësenne", "wësene"}, },	["tuon"] = { ["pres"] = { "tuon", "tuost", "tuot", "tuon", "tuot", "tuont", }, ["pret"] = { "", "tæte", "", "", "", "", }, ["subi"] = { "tuo", "tuost", "tuo", "tuon", "tuot", "tuon", }, ["subii"] = { "tæte", "tætest", "tæte", "tæten", "tætet", "tæten", }, ["imp"] = { "tuo", "tuot", }, ["presp"] = "tuonde", ["pp"] = "tân", ["gergen"] = {"tuonnes", "tuones"}, ["gerdat"] = {"tuonne", "tuone"}, },	["lân"] = { ["pres"] = { "lân", "lâst", "lât", "lân", "lât", "lânt", }, ["pret"] = { "lie", "lieȥest", "lie", "lieȥen", "lieȥet", "lieȥen", }, ["subi"] = { "lâȥe", "lâȥest", "lâȥe", "lâȥen", "lâȥet", "lâȥen", }, ["subii"] = { "lieȥe", "lieȥest", "lieȥe", "lieȥen", "lieȥet", "lieȥen", }, ["imp"] = { "lâ", "lât", }, ["presp"] = "lâȥende", ["pp"] = "lân", ["gergen"] = {"lânnes", "lânes"}, ["gerdat"] = {"lânne", "lâne"}, },	["gân"] = { ["pres"] = { "gân", "gâst", "gât", "gân", "gât", "gânt", }, ["pret"] = { "gienc", "gienge", "gienc", "giengen", "gienget", "giengen", }, ["subi"] = { "gê", "gêst", "gê", "gên", "gêt", "gên", }, ["subii"] = { "gienge", "giengest", "gienge", "giengen", "gienget", "giengen", }, ["imp"] = { "gâ", "gât", }, ["presp"] = "gânde", ["pp"] = {"gân", "gangen"}, ["gergen"] = {"gânnes", "gânes"}, ["gerdat"] = {"gânne", "gâne"}, },	["stân"] = { ["pres"] = { "stân", "stâst", "stât", "stân", "stât", "stânt", }, ["pret"] = { "stuont", "stüende", "stuont", "stuonden", "stuondet", "stuonden", }, ["subi"] = { "stê", "stêst", "stê", "stên", "stêt", "stên", }, ["subii"] = { "stüende", "stüendest", "stüende", "stüenden", "stüendet", "stüenden", }, ["imp"] = { "stâ", "stât", }, ["presp"] = "stânde", ["pp"] = {"stân", "standen"}, ["gergen"] = {"stânnes", "stânes"}, ["gerdat"] = {"stânne", "stâne"}, },	["süln"] = { ["pres"] = { "sol", "solt", "sol", "sulen", "sulet", "sulen", }, ["pret"] = { {"wurde", {form = "ward", footnotes = {"[archaic]"}}}, {"wurdest", {form = "wardst", footnotes = {"[archaic]"}}}, {"wurde", {form = "ward", footnotes = {"[archaic]"}}}, "wurden", "wurdet", "wurden", },		["subi"] = { "sul", "sule", "sul", "suln", "sulet", "suln", }, ["subii"] = { {"sölte", "sölde"}, {"söltest", "söldest"}, {"sölte", "sölde"}, {"sölten", "sölden"}, {"söltet", "söldet"}, {"sölten", "sölden"}, }, ["imp"] = { {"werd", "werde"}, "werdet", }, ["presp"] = "werdend", ["pp"] = "worden", }, }

local sin_forms = { ["sîn"] = {"mîn", "dîn", "sîn", "unser", "iuwer", "ir"}, ["sîne"] = {"mîne", "dîne", "sîne", "unsere", "iuwere", "ire"}, ["sînen"] = {"mînen", "dînen", "sînen", "unseren", "iuweren", "iren"}, ["sînem"] = {"mînem", "dînem", "sînem", "unserem", "iuwerem", "irem"}, ["sîner"] = {"mîner", "dîner", "sîner", "unserer", "iuwerer", "irer"}, ["sînes"] = {"mînes", "dînes", "sînes", "unseres", "iuweres", "ires"}, ["sîniu"] = {"mîniu", "dîniu", "sîniu", "unseriu", "iuweriu", "iriu"}, ["sîneȥ"] = {"mîneȥ", "dîneȥ", "sîneȥ", "unseres", "iuwereȥ", "ireȥ"}, }

local sich_forms = { ["accpron"] = {"mich", "dich", "sich", "unsich", "euch", "sich"}, ["datpron"] = {"mir", "dir", "im", "uns", "eu", "in"}, }

local function skip_slot(base, slot) if not slot:find("[123]") then -- Don't skip non-personal slots. return false end

if base.nofinite then return true end

if base.only3s and not slot:find("3s") or		base.only3sp and not slot:find("3[sp]") then return true end

return false end

local function strip_spaces(text) return text:gsub("^%s*(.-)%s*", "%1") end

local function escape_sin_sich_indicators(arg1) if not arg1:find("pron>") then return arg1 end local segments = iut.parse_balanced_segment_run(arg1, "<", ">") -- Loop over every other segment. The even-numbered segments are angle-bracket specs while -- the odd-numbered segments are the text between them. for i = 2, #segments - 1, 2 do		if segments[i] == " " then segments[i] = "⦃⦃accpron⦄⦄" elseif segments[i] == " " then segments[i] = "⦃⦃datpron⦄⦄" elseif segments[i] == " " then segments[i] = "⦃⦃pron⦄⦄" end end return table.concat(segments) end

local function undo_escape_form(form) -- assign to var to throw away second value local newform = form:gsub("⦃⦃", "<"):gsub("⦄⦄", ">") return newform end

local function remove_sin_sich_indicators(form) -- assign to var to throw away second value local newform = form:gsub("⦃⦃.-⦄⦄", "") return newform end

local function replace_sin_sich_indicators(slot, form) if not form:find("⦃") then return form end local persnum = slot:match("^.*_([123][sp])$") local index if persnum then index = persnum_to_index[persnum] else index = 3 end form = form:gsub("sich(%]*)⦃⦃accpron⦄⦄", function(brackets)		return sich_forms.accpron[index] .. brackets	end) form = form:gsub("sich(%]*)⦃⦃datpron⦄⦄", function(brackets)		return sich_forms.datpron[index] .. brackets	end) form = form:gsub("(sine?[mnrs]?)(%]*)⦃⦃pron⦄⦄", function(sin_form, brackets)		if sin_forms[sin_form] then			return sin_forms[sin_form][index] .. brackets		else			error("Unrecognized sin-form '" .. sin_form .. "' in slot " .. slot .. ": " .. undo_escape_form(form))		end	end) form = form:gsub("sîn%]%](e?[mnrsȥ]?)⦃⦃pron⦄⦄", function(sin_ending, brackets)		local sin_form = "sîn" .. sin_ending		if sin_forms[sin_form] then			return sin_forms["sîn"][index] .. "|" .. sin_forms[sin_form][index] .. "]]"		else			error("Unrecognized sîn-form '" .. sin_form .. "' in slot " .. slot .. ": " .. undo_escape_form(form))		end	end) if form:find("⦃⦃") or form:find("⦄⦄") then error("Unrecognized pronoun substitution in slot " .. slot .. ": " .. undo_escape_form(form)) end return form end

local function combine_stem_ending(slot, stem, ending) local ending_with_pound = ending .. "#"	if ending_with_pound:find("^st[ #]") then if rfind(stem, "[sxzȥ]$") then ending = ending:gsub("^s", "") elseif stem:find("st$") then -- bersten ending = ending:gsub("^st", "") end elseif ending_with_pound:find("^t[ #]") and stem:find("th?$") then ending = ending:gsub("^t", "") end return replace_sin_sich_indicators(slot, stem .. ending) end

local function add(base, slot, stems, endings, footnotes) if skip_slot(base, slot) then return end local function do_combine_stem_ending(stem, ending) return combine_stem_ending(slot, stem, ending) end iut.add_forms(base.forms, slot, stems, endings, do_combine_stem_ending, nil, nil,		iut.combine_footnotes(footnotes, base.all_footnotes)) end

local function add_multi(base, slot, stems_and_endings, footnotes) if skip_slot(base, slot) then return end local function do_combine_stem_ending(stem, ending) return combine_stem_ending(slot, stem, ending) end iut.add_multiple_forms(base.forms, slot, stems_and_endings, do_combine_stem_ending, nil, nil,		iut.combine_footnotes(footnotes, base.all_footnotes)) end

local function add3(base, slot, stems1, stems2, endings, footnotes) return add_multi(base, slot, {stems1, stems2, endings}) end

local function add4(base, slot, stems1, stems2, stems3, endings, footnotes) return add_multi(base, slot, {stems1, stems2, stems3, endings}) end

local function add5(base, slot, stems1, stems2, stems3, stems4, endings, footnotes) return add_multi(base, slot, {stems1, stems2, stems3, stems4, endings}) end

local function add_zu_infinitive(base) if base.any_pre_pref then local zu		if base.pre_pref == "" or base.pre_pref:find(" $") then zu = "zu " else zu = "zu" end add(base, "zu_infinitive", base.pre_pref .. zu, base.bare_infinitive) end end

local function add_present(base, pretpres) local stems = base.infstem local stems23 = base.pres_23 or stems

local function doadd(slot_pref, form_pref) -- Do forms based off the infinitive stem. for _, stemform in ipairs(stems) do prefixed_stem = form_pref .. stemform.form

local function addit(slot, stem, ending, footnotes) add(base, slot_pref .. slot, stem, ending .. (slot_pref == "" and base.post_pref or ""),					iut.combine_footnotes(footnotes, stemform.footnotes)) end

-- plural present indicative

if base.unstressed_el_er or base.unstressed_erl then addit("pres_1p", prefixed_stem, "n") addit("pres_2p", prefixed_stem, "t") addit("pres_3p", prefixed_stem, "nt") else addit("pres_1p", prefixed_stem, "en") addit("pres_2p", prefixed_stem, "et") addit("pres_3p", prefixed_stem, "ent") end

-- subjunctive I			if base.unstressed_el_er then addit("subi_1s", prefixed_stem, "") addit("subi_2s", prefixed_stem, "st") addit("subi_3s", prefixed_stem, "") addit("subi_2p", prefixed_stem, "t") else addit("subi_1s", prefixed_stem, "e") addit("subi_2s", prefixed_stem, "est") addit("subi_3s", prefixed_stem, "e") addit("subi_2p", prefixed_stem, "et") end if base.unstressed_el_er then addit("subi_1p", prefixed_stem, "n") addit("subi_3p", prefixed_stem, "n") else addit("subi_1p", prefixed_stem, "en") addit("subi_3p", prefixed_stem, "en") end

if slot_pref == "" and not pretpres then if base.unstressed_el_er then addit("imp_2p", prefixed_stem, "t") else addit("imp_2p", prefixed_stem, "et") end end end

-- Do forms based off of pres23 stem (also includes pres_1sg in preterite-present verbs). for _, stem23form in ipairs(stems23) do local prefixed_stem23 = form_pref .. stem23form.form

if not base.pres_23 then for _, class in ipairs(base.verb_types) do			if class:find("^2$") then prefixed_stem23 = prefixed_stem:gsub("(ie)(" .. not_vowel_c .. "*)$", "iu%2") elseif class:find("^3$") then prefixed_stem23 = prefixed_stem:gsub("(ë)(" .. not_vowel_c .. "*)$", "i%2") elseif class:find("^[45]$") then prefixed_stem23 = prefixed_stem:gsub("(ë)(" .. not_vowel_c .. "*)$", "i%2") prefixed_stem_komen = prefixed_stem:gsub("(o)(" .. not_vowel_c .. "*)$", "u%2") elseif class:find("^6$") then prefixed_stem_only23 = prefixed_stem:gsub("(a)(" .. not_vowel_c .. "*)$", "e%2") elseif class:find("^7$") then prefixed_stem232 = prefixed_stem:gsub("(a)(" .. not_vowel_c .. "*)$", "e%2") prefixed_stem232 = prefixed_stem:gsub("(â)(" .. not_vowel_c .. "*)$", "æ%2") end end end local function addit(slot, stem, ending, footnotes) add(base, slot_pref .. slot, stem, ending .. (slot_pref == "" and base.post_pref or ""),					iut.combine_footnotes(footnotes, stem23form.footnotes)) end

if pretpres then -- Totally different code for preterite-present singular and imperative. addit("pres_1s", prefixed_stem23, "") addit("pres_2s", prefixed_stem23, "st") addit("pres_3s", prefixed_stem23, "") if slot_pref == "" and base.base_verb == "wiȥȥen" then addit("imp_2s", "weiȥ", "") -- dewikt mentions 'wisset' as an alternative, but not in Duden addit("imp_2p", "wiȥȥ", "et") end else -- present 2/3 singular if base.unstressed_el_er then addit("pres_1s", prefixed_stem23, "") addit("pres_2s", prefixed_stem_only23 or prefixed_stem23, "st") addit("pres_3s", prefixed_stem_only23 or prefixed_stem23, "t") else addit("pres_1s", prefixed_stem23, "e") addit("pres_2s", prefixed_stem_only23 or prefixed_stem23, "est") addit("pres_3s", prefixed_stem_only23 or prefixed_stem23, "et") end if prefixed_stem232 and prefixed_stem232 ~= prefixed_stem and base.unstressed_el_er then addit("pres_2s", prefixed_stem232, "st") addit("pres_3s", prefixed_stem232, "t") elseif prefixed_stem232 and prefixed_stem232 ~= prefixed_stem then addit("pres_2s", prefixed_stem232, "est") addit("pres_3s", prefixed_stem232, "et") end if prefixed_stem_komen and prefixed_stem_komen ~= prefixed_stem then addit("pres_1s", prefixed_stem_komen, "e") addit("pres_2s", prefixed_stem_komen, "est") addit("pres_3s", prefixed_stem_komen, "et") addit("subi_1s", prefixed_stem_komen, "e") addit("subi_2s", prefixed_stem_komen, "est") addit("subi_3s", prefixed_stem_komen, "e") end -- imperative singular; this may or may not be based off the pres23 stem -- Specifically, if the pres23 stem is different from the infinitive stem and does not have an ä or ö -- in it (fahren, er fährt but imperative fahr/fahre; stoßen, er stößt but				-- imperative stoß/stoße), use it. Don't add -e unless '.longimp' is given (for sehen, with				-- imperatives sieh and siehe; but normally geben with imperative only gib, similarly				-- for treten, gelten, bergen, etc.). In all other cases, use the infinitive stem, and -- under normal circumstances include two variants, without -e and with -e. We include only the variant -- with -e if '.e' is given (atmen, zeichnen, etc.), and we include only the variant without -e -- if '.shortimp' is given (unclear if this is needed for any verb). if slot_pref == "" then if base.unstressed_el_er then addit("imp_2s", prefixed_stem23, "") elseif base.weak_past then addit("imp_2s", prefixed_stem23, "e") else local prefixed_stem23 = prefixed_stem23:gsub("g$", "c") local prefixed_stem23 = prefixed_stem23:gsub("b$", "p") local prefixed_stem23 = prefixed_stem23:gsub("d$", "t") local prefixed_stem23 = prefixed_stem23:gsub("v$", "f") addit("imp_2s", prefixed_stem23, "") end end end end end

-- Do the basic forms doadd("", "") -- Also do the subordinate clause forms if any alternants have a prefix. if base.any_pre_pref then doadd("subc_", base.pre_pref) end

-- Do the miscellaneous non-finite forms add3(base, "ger_gen", base.pre_pref, base.bare_infinitive, {"nes", "es"}) add3(base, "ger_dat", base.pre_pref, base.bare_infinitive, {"ne", "e"}) add3(base, "pres_part", base.pre_pref, base.bare_infinitive, "de") add_zu_infinitive(base) end

function add_past_or_subii(base, pretpres) local past_stems = base.past function doadd(slot_pref, form_pref) -- Do forms based off the infinitive stem. for _, stemform in ipairs(past_stems) do local past = form_pref .. stemform.form local ends_in_e = past:find("e$") local function addit(slot, stem, ending, footnotes) add(base, slot_pref .. slot, stem, ending .. (slot_pref == "" and base.post_pref or ""),					iut.combine_footnotes(footnotes, stemform.footnotes)) end past_less = past:gsub("g$", "c") past_less = past_less:gsub("b$", "p") past_less = past_less:gsub("d$", "t") past_less = past_less:gsub("v$", "f") if not base.past_sub then for _, class in ipairs(base.verb_types) do			if class:find("^1$") then past_sub = past:gsub("(ei)(" .. not_vowel_c .. "*)$", "i%2") past_sub = past_sub:gsub("(ê)(" .. not_vowel_c .. "*)$", "i%2") past_plural = past_sub elseif class:find("^2$") then past_sub = past:gsub("(ou)(" .. not_vowel_c .. "*)$", "ü%2") past_plural = past:gsub("(ou)(" .. not_vowel_c .. "*)$", "u%2") past_sub = past:gsub("(ô)(" .. not_vowel_c .. "*)$", "ü%2") past_plural = past:gsub("(ô)(" .. not_vowel_c .. "*)$", "u%2") elseif class:find("^3$") then past_sub = past:gsub("(a)(" .. not_vowel_c .. "*)$", "ü%2") past_plural = past:gsub("(a)(" .. not_vowel_c .. "*)$", "u%2") elseif class:find("^[45]$") then past_sub = past:gsub("(a)(" .. not_vowel_c .. "*)$", "æ%2") past_plural = past:gsub("(a)(" .. not_vowel_c .. "*)$", "â%2") elseif class:find("^6$") then past_sub = past:gsub("(uo)(" .. not_vowel_c .. "*)$", "üe%2") end end end if not ends_in_e then addit("pret_1s", past_less, "") addit("pret_2s", base.past_sub or past_sub or past, "e") addit("pret_3s", past_less, "") addit("pret_1p", base.past_plural or past_plural or past, "en") addit("pret_2p", base.past_plural or past_plural or past, "et") addit("pret_3p", base.past_plural or past_plural or past, "en") addit("subii_1s", base.past_sub or past_sub or past, "e") addit("subii_2s", base.past_sub or past_sub or past, "est") addit("subii_3s", base.past_sub or past_sub or past, "e") addit("subii_1p", base.past_sub or past_sub or past, "en") addit("subii_2p", base.past_sub or past_sub or past, "et") addit("subii_3p", base.past_sub or past_sub or past, "en") else addit("pret_1s", base.past, "") addit("pret_2s", base.past, "st") addit("pret_3s", base.past, "") addit("pret_1p", base.past_plural or past_plural or past, "n") addit("pret_2p", base.past_plural or past_plural or past, "t") addit("pret_3p", base.past_plural or past_plural or past, "n") addit("subii_1s", base.past_sub or past_sub or past, "") addit("subii_2s", base.past_sub or past_sub or past, "st") addit("subii_3s", base.past_sub or past_sub or past, "") addit("subii_1p", base.past_sub or past_sub or past, "n") addit("subii_2p", base.past_sub or past_sub or past, "t") addit("subii_3p", base.past_sub or past_sub or past, "n") end end end

-- Do the basic forms doadd("", "") -- Also do the subordinate clause forms if any alternants have a prefix. if base.any_pre_pref then doadd("subc_", base.pre_pref) end

-- Do the miscellaneous non-finite forms add3(base, "pres_part", base.pre_pref, base.bare_infinitive, "de") add_zu_infinitive(base) end

local conjs = {} local conjprops = {}

conjs["normal"] = function(base) add_present(base) add_past_or_subii(base) end

conjs["pretpres"] = function(base) add_present(base, "pretpres") add_past_or_subii(base) end

conjs["irreg"] = function(base) local function doadd(slot_pref) local function addit(slot, forms, footnotes) if slot_pref == "" then add3(base, slot, base.insep_prefix, forms, base.post_pref, footnotes) else add(base, slot_pref .. slot, base.pre_pref .. base.insep_prefix, forms, footnotes) end end

-- Do present, preterite, subjunctive I and II. for _, slot_tense in ipairs({"pres", "pret", "subi", "subii"}) do			for index, forms in ipairs(base.irregverbobj[slot_tense]) do				local persnum = person_number_list[index] local footnotes addit(slot_tense .. "_" .. persnum, forms, footnotes) end end

-- Do imperative. if slot_pref == "" then for index, forms in ipairs(base.irregverbobj["imp"]) do				local persnum = imp_person_number_list[index] addit("imp_" .. persnum, forms) end end end

-- Do the basic forms doadd("") -- Also do the subordinate clause forms if any alternants have a prefix. if base.any_pre_pref then doadd("subc_") end

-- Do the miscellaneous non-finite forms iut.add_multiple_forms(base, "pp", {base.ge_prefix, base.insep_prefix, base.irregverbobj["pp"]},		-- We don't want to use combine_stem_ending because we want sin-sich indicators to be left alone,		-- so they get replaced later when constructing composed forms.		function(stem, ending) return stem .. ending end) add(base, "perf_part", base.pre_pref, base.pp) -- only werden by itself; not loswerden, fertigwerden, etc.	if base.lemma == "süln" then iut.insert_form(base.forms, "perf_part", {form = "worden", footnotes = {"[as an auxiliary]"}}) end add(base, "pres_part", base.pre_pref .. base.insep_prefix, base.irregverbobj["presp"]) add(base, "ger_gen", base.pre_pref .. base.insep_prefix, base.irregverbobj["gergen"]) add(base, "ger_dat", base.pre_pref .. base.insep_prefix, base.irregverbobj["gerdat"]) add_zu_infinitive(base) end

local function add_composed_forms(base) local forms = base.forms

local function add_composed(tense_mood, index, persnum, auxforms, participle, suffix, footnotes) local pers_auxforms = iut.convert_to_general_list_form(auxforms[index]) local linked_pers_auxforms = iut.map_forms(pers_auxforms, function(form) return "" .. form .. " " end) add4(base, tense_mood .. "_" .. persnum, linked_pers_auxforms, "" .. base.pre_pref, participle, "" .. suffix, footnotes) end

local function add_composed_perf(tense_mood, index, persnum, han_auxforms, sin_auxforms, han_suffix, sin_suffix) for _, auxform in ipairs(base.aux) do			if auxform.form == "hân" then add_composed(tense_mood, index, persnum, han_auxforms, base.pp, han_suffix, auxform.footnotes) end if auxform.form == "sîn" then add_composed(tense_mood, index, persnum, sin_auxforms, base.pp, sin_suffix, auxform.footnotes) end end end

local han_forms = irreg_verbs["hân"] local sin_forms = irreg_verbs["sîn"] local suln_forms = irreg_verbs["süln"] for index, persnum in ipairs(person_number_list) do		add_composed_perf("perf_ind", index, persnum, han_forms["pres"], sin_forms["pres"], "", "") add_composed_perf("perf_sub", index, persnum, han_forms["subi"], sin_forms["subi"], "", "") add_composed_perf("plup_ind", index, persnum, han_forms["pret"], sin_forms["pret"], "", "") add_composed_perf("plup_sub", index, persnum, han_forms["subii"], sin_forms["subii"], "", "") for _, mood in ipairs({"ind", "subi", "subii"}) do			local tense = mood == "ind" and "pres" or mood add_composed("futi_" .. mood, index, persnum, suln_forms[tense], base.bare_infinitive, "") add_composed_perf("futii_" .. mood, index, persnum, suln_forms[tense], suln_forms[tense], " hân", " sîn") end end

add3(base, "futi_inf", "" .. base.pre_pref, base.bare_infinitive, " süln") add5(base, "futii_inf", "" .. base.pre_pref, base.pp, " ", base.aux, " süln") end

local function handle_derived_slots(base) -- Compute linked versions of potential lemma slots, for use in. -- We substitute the original lemma (before removing links) for forms that -- are the same as the lemma, if the original lemma has links. for _, slot in ipairs({"infinitive"}) do iut.insert_forms(base.forms, slot .. "_linked", iut.map_forms(base.forms[slot], function(form) if form == base.lemma and rfind(base.linked_lemma, "%[%[") then return base.linked_lemma else return form end end)) end end

local function conjugate_verb(base) if not conjs[base.conj] then error("Internal error: Unrecognized conjugation type '" .. base.conj .. "'") end conjs[base.conj](base) add_composed_forms(base) -- No overrides implemented currently. -- process_slot_overrides(base) handle_derived_slots(base) end

local function parse_indicator_spec(angle_bracket_spec) local base = {} local function parse_err(msg) error(msg .. ": " .. angle_bracket_spec) end local function fetch_footnotes(separated_group) local footnotes for j = 2, #separated_group - 1, 2 do			if separated_group[j + 1] ~= "" then parse_err("Extraneous text after bracketed footnotes: '" .. table.concat(separated_group) .. "'") end if not footnotes then footnotes = {} end table.insert(footnotes, separated_group[j]) end return footnotes end

local function fetch_specs(comma_separated_group, transform_form) if not comma_separated_group then return – end local specs = {} local colon_separated_groups = iut.split_alternating_runs(comma_separated_group, ":") for _, colon_separated_group in ipairs(colon_separated_groups) do			local form = colon_separated_group[1] if transform_form then form = transform_form(form) end table.insert(specs, {form = form, footnotes = fetch_footnotes(colon_separated_group)}) end return specs end

local inside = angle_bracket_spec:match("^<(.*)>$") assert(inside) if inside == "" then return base end local segments = iut.parse_balanced_segment_run(inside, "[", "]") local dot_separated_groups = iut.split_alternating_runs(segments, "%.") for i, dot_separated_group in ipairs(dot_separated_groups) do		local comma_separated_groups = iut.split_alternating_runs(dot_separated_group, "%s*[,#]%s*", "preserve splitchar") local first_element = comma_separated_groups[1][1] if first_element == "hân" or first_element == "sîn" then for j = 1, #comma_separated_groups, 2 do				if j > 1 and strip_spaces(comma_separated_groups[j - 1][1]) ~= "," then parse_err("Separator of # not allowed with hân or sîn") end local aux = comma_separated_groups[j][1] if aux ~= "hân" and aux ~= "sîn" then parse_err("Unrecognized auxiliary '" .. aux .. "'") end if base.aux then for _, existing_aux in ipairs(base.aux) do						if existing_aux.form == aux then parse_err("Auxiliary '" .. aux .. "' specified twice") end end else base.aux = {} end table.insert(base.aux, {form = aux, footnotes = fetch_footnotes(comma_separated_groups[j])}) end elseif first_element == "-ge" or first_element == "+ge" then for j = 1, #comma_separated_groups, 2 do				if j > 1 and strip_spaces(comma_separated_groups[j - 1][1]) ~= "," then parse_err("Separator of # not allowed with +ge or -ge") end local prefix = comma_separated_groups[j][1] if prefix ~= "+ge" and prefix ~= "-ge" then parse_err("Unrecognized ge- prefix '" .. prefix .. "'") end local ge_prefix if prefix == "+ge" then ge_prefix = "ge" else ge_prefix = "" end if base.ge_prefix then for _, existing_prefix in ipairs(base.ge_prefix) do						if existing_prefix.form == ge_prefix then parse_err("Ge- prefix '" .. prefix .. "' specified twice") end end else base.ge_prefix = {} end table.insert(base.ge_prefix, {form = ge_prefix, footnotes = fetch_footnotes(comma_separated_groups[j])}) end elseif #comma_separated_groups > 1 then -- principal parts specified if base.past then parse_err("Can't specify principal parts twice") end local parts = {} assert(#comma_separated_groups[2] == 1) local past_index local first_separator = strip_spaces(comma_separated_groups[2][1]) if first_separator == "#" then -- present 3rd singular specified base.pres_23 = fetch_specs(comma_separated_groups[1], function(form)					local stem					if base.conj == "pretpres" then						stem = form					else						stem = form:match("^(.-)%-$")						if not stem then							stem = form:match("^(.-)e?t$")						end					end					if stem then						return stem					else						parse_err("Present 3sg form '" .. form .. "' should end in - (for the stem) or -t")					end				end) past_index = 3 else past_index = 1 end

base.past = fetch_specs(comma_separated_groups[past_index], function(form)				return form			end)

if #comma_separated_groups < past_index + 2 then parse_err("Missing past participle spec") end assert(#comma_separated_groups[past_index + 1] == 1) if strip_spaces(comma_separated_groups[past_index + 1][1]) ~= "," then parse_err("Only first separator can be a #") end base.pp = fetch_specs(comma_separated_groups[past_index + 2], function(form)				if form:find("[ndt]$") then					return form				else					parse_err("Past participle '" .. form .. "' should end in -n, -t, or -d")				end			end)

if #comma_separated_groups > past_index + 2 then assert(#comma_separated_groups[past_index + 3] == 1) if strip_spaces(comma_separated_groups[past_index + 3][1]) ~= "," then parse_err("Only first separator can be a #") end base.past_sub = fetch_specs(comma_separated_groups[past_index + 4], function(form)					local stem = form:match("^(.-)e$")					if not stem then						parse_err("Past subjunctive '" .. form .. "' should end in -e")					end					return stem				end) end if #comma_separated_groups > past_index + 4 then assert(#comma_separated_groups[past_index + 4] == 1) base.past_plural = fetch_specs(comma_separated_groups[past_index + 6], function(form)				return form				end) if #comma_separated_groups > past_index + 6 then parse_err("Too many specs given") end end elseif first_element == "pretpres" or first_element == "irreg" then if #comma_separated_groups[1] > 1 then parse_err("No footnotes allowed with '" .. first_element .. "' spec") end if base.conj then parse_err("Conjugation specified as '" .. first_element .. "' but already specified or autodetermined as '" .. base.conj .. "'") end base.conj = first_element elseif first_element == "shortimp" or first_element == "longimp" or			first_element == "only3s" or first_element == "only3sp" or			first_element == "nofinite" then if #comma_separated_groups[1] > 1 then parse_err("No footnotes allowed with '" .. first_element .. "' spec") end base[first_element] = true elseif first_element == "" or first_element == "inf" then local footnotes = fetch_footnotes(comma_separated_groups[1]) if not footnotes then parse_err("Empty spec and 'inf' spec without footnotes not allowed") end if first_element == "inf" then base.infstem_footnotes = footnotes else base.all_footnotes = footnotes end else parse_err("Unrecognized spec '" .. comma_separated_groups[1][1] .. "'") end end

return base end

-- Normalize all lemmas, splitting off separable prefixes and substituting the pagename for blank lemmas. local function normalize_all_lemmas(alternant_multiword_spec, from_headword) local any_pre_pref iut.map_word_specs(alternant_multiword_spec, function(base)		if base.lemma == "" then			local PAGENAME = mw.title.getCurrentTitle.text			base.lemma = PAGENAME		end		if base.lemma:find("_") and not base.lemma:find("%[%[") then			-- If lemma is multiword and has no links, add links automatically.			base.lemma= "" .. base.lemma:gsub("_", "_") .. ""		end		base.orig_lemma = base.lemma		base.orig_lemma_no_links = m_links.remove_links(base.lemma)		-- Normalize the linked lemma by removing dot, underscore, and and such indicators.		base.linked_lemma = remove_sin_sich_indicators(base.lemma:gsub("%.", ""):gsub("_", " "))		base.lemma = m_links.remove_links(base.linked_lemma)		local lemma = base.orig_lemma_no_links		base.pre_pref, base.post_pref = "", ""		local prefix, verb = lemma:match("^(.*)_(.-)$")		if prefix then			prefix = prefix:gsub("_", " ") -- in case of multiple preceding words base.pre_pref = base.pre_pref .. prefix .. " "			base.post_pref = base.post_pref .. " " .. prefix else verb = lemma end prefix, base.base_verb = verb:match("^(.*)%.(.-)$") if prefix then -- There may be multiple separable prefixes (e.g. wiedergutmachen, ich mache wieder gut) base.pre_pref = base.pre_pref .. prefix:gsub("%.", "") base.post_pref = base.post_pref .. " " .. prefix:gsub("%.", " ") else base.base_verb = verb end if base.pre_pref ~= "" then any_pre_pref = true end if base.only3s then alternant_multiword_spec.only3s = true end if base.only3sp then alternant_multiword_spec.only3sp = true end -- Remove indicators and such. local reconstructed_lemma = remove_sin_sich_indicators(base.pre_pref .. base.base_verb) if reconstructed_lemma ~= base.lemma then error("Internal error: Raw lemma '" .. base.lemma .. "' differs from reconstructed lemma '" .. reconstructed_lemma .. "'") end base.from_headword = from_headword end)	if any_pre_pref then		iut.map_word_specs(alternant_multiword_spec, function(base) base.any_pre_pref = true end)	end	if alternant_multiword_spec.only3s then		iut.map_word_specs(alternant_multiword_spec, function(base) if not base.only3s then error("If some alternants specify 'only3s', all must") end end)	end	if alternant_multiword_spec.only3sp then		iut.map_word_specs(alternant_multiword_spec, function(base) if not base.only3sp then error("If some alternants specify 'only3sp', all must") end end)	end end

local function detect_verb_type(base, verb_types) local this_verb_types = {}

local function set_verb_type base.verb_types = this_verb_types if verb_types then for _, verb_type in ipairs(this_verb_types) do				m_table.insertIfNot(verb_types, verb_type) end end end

if base.conj == "pretpres" then m_table.insertIfNot(this_verb_types, "pretpres") set_verb_type return elseif base.conj == "irreg" then m_table.insertIfNot(this_verb_types, "irreg") set_verb_type return end

local infstem = m_table.deepcopy(base.infstem) local past = m_table.deepcopy(base.past) local pp = m_table.deepcopy(base.pp) local past_sub = m_table.deepcopy(base.past_sub) local past_plural = m_table.deepcopy(base.past_plural)

local function matches_forms(forms, expected, ending_to_chop) expected = expected:gsub("C", not_vowel_c) .. "$"		local seen = false for _, form in ipairs(forms) do			local stem if ending_to_chop then stem = rmatch(form.form, "^(.*)" .. ending_to_chop .. "$") else stem = form.form end if stem and rfind("#" .. stem, expected) then seen = true form.seen = form.seen or "maybe" end end return seen end

local function reset_maybes(forms, value) for _, form in ipairs(forms) do			if form.seen == "maybe" then form.seen = value end end end

local function reset_all_maybes(value) reset_maybes(infstem, value) reset_maybes(past, value) reset_maybes(pp, value) end

local function has_unseen_weak_pp for _, form in ipairs(pp) do			if not form.seen and form.form:find("[dt]$") then return true end end return false end

local function has_unseen_strong_pp for _, form in ipairs(pp) do			if not form.seen and form.form:find("n$") then return true end end return false end

local function check(verbtype, infre, pastre, ppre, exclude) if exclude then for _, form in ipairs(infstem) do				if exclude(form.form) then return end end end if matches_forms(infstem, infre) and matches_forms(past, pastre) and matches_forms(pp, ppre, "[elr]n") then m_table.insertIfNot(this_verb_types, verbtype) reset_all_maybes(true) else reset_all_maybes(false) end end

local function check_strong check("1", "CîC*", "CeiC*", "CiC*") check("1", "CîC*", "CêC*", "CiC*") check("2", "CieC*", "CouC*", "CoC*") check("2", "CûC*", "CouC*", "CoC*") check("2", "CiuwC*", "CouC*", "CûwC*") check("2", "CieC*", "CôC*", "CoC*") local function exclude_helfen(form) return rfind(form, vowel_c .. "[lr]" .. not_vowel_c .. "$") end check("3", "CiC*", "CaC*", "CuC*") check("3", "Cë[lr]C*", "Ca[lr]C*", "Co[lr]C*") if not check("3", "Cë[lr]C*", "Ca[lr]C*", "Co[lr]C*") then check("4", "C[ëo]C*", "CaC*", "CoC*", exclude_helfen) end check("4", "kom", "quam", "kom") check("5", "C*[ëi]C*", "C*aC*", "C*ëC*") check("6", "CaC*", "CuoC*", "C[ao]C*") check("7", "C[aâ]C*", "CieC*", "C[aâ]C*") check("7", "C[aäe]C*", "CiC*", "CaC*") check("7", "Ce[iy]C*", "CieC*", "Ce[iy]C*") check("7", "CauC*", "CieC*", "CauC*") check("7", "CoC*", "CieC*", "CoC*") check("7", "CuC*", "CieC*", "CuC*") check("7", "CouC*", "CieC*", "CouC*") check("7", "CuoC*", "CieC*", "CuoC*") end for _, form in ipairs(past) do		local past_stem = form.form:match("^(.*)te$") if past_stem then if matches_forms(infstem, "#" .. past_stem) then -- Need to run matches_forms on all possibilities even if earlier ones match, -- to mark the seen forms correctly. local matches_pp = matches_forms(pp, "#" .. past_stem .. "et") matches_pp = matches_forms(pp, "#ge" .. past_stem .. "et") or matches_pp if matches_pp then m_table.insertIfNot(this_verb_types, "weak") form.seen = true base.weak_past = true reset_all_maybes(true) else reset_all_maybes(false) end end end if not form.seen and form.form:find("ete$") then if matches_forms(infstem, "#" .. past_stem:gsub("e$", "")) then -- Need to run matches_forms on all possibilities even if earlier ones match, -- to mark the seen forms correctly. local matches_pp = matches_forms(pp, "#" .. past_stem .. "t") matches_pp = matches_forms(pp, "#ge" .. past_stem .. "t") or matches_pp matches_pp = matches_forms(pp, "#" .. past_stem .. "d") or matches_pp matches_pp = matches_forms(pp, "#ge" .. past_stem .. "d") or matches_pp if matches_pp then m_table.insertIfNot(this_verb_types, "weak") form.seen = true reset_all_maybes(true) else reset_all_maybes(false) end end end if past_stem and not form.seen then if not has_unseen_weak_pp and has_unseen_strong_pp then m_table.insertIfNot(this_verb_types, "mixed") else m_table.insertIfNot(this_verb_types, "irregweak") end matches_forms(pp, "#" .. past_stem .. "t") matches_forms(pp, "#ge" .. past_stem .. "t") form.seen = true reset_all_maybes(true) base.weak_past = true end if not form.seen then check_strong end if not form.seen then if not has_unseen_strong_pp and has_unseen_weak_pp then m_table.insertIfNot(this_verb_types, "mixed") else m_table.insertIfNot(this_verb_types, "irregstrong") end end end

for _, form in ipairs(pp) do		if not form.seen then if form.form:find("n$") then if m_table.contains(this_verb_types, "strong") then m_table.insertIfNot(this_verb_types, "irregstrong") elseif m_table.contains(this_verb_types, "weak") then m_table.insertIfNot(this_verb_types, "mixed") end elseif form.form:find("[dt]$") then if m_table.contains(this_verb_types, "weak") then m_table.insertIfNot(this_verb_types, "irregweak") elseif m_table.contains(this_verb_types, "strong") then m_table.insertIfNot(this_verb_types, "mixed") end end end end

base.verb_types = this_verb_types if verb_types then for _, verb_type in ipairs(this_verb_types) do			m_table.insertIfNot(verb_types, verb_type) end end

set_verb_type end

local function detect_indicator_spec(base) base.forms = {} base.aux = base.aux or 	base.bare_infinitive = if base.base_verb == "sîn" then add(base, "infinitive", base.pre_pref, {"sîn", "wësen"}) else add(base, "infinitive", base.pre_pref, base.bare_infinitive) end if base.only3s and base.only3sp then error("'only3s' and 'only3sp' cannot both be specified") end

if base.conj == "irreg" then for irregverb, verbobj in pairs(irreg_verbs) do base.insep_prefix = base.base_verb:match("^(.-)" .. irregverb .. "$") if base.insep_prefix then base.irregverb = irregverb base.irregverbobj = verbobj if not base.ge_prefix then if base.insep_prefix ~= "" then base.ge_prefix = else base.ge_prefix = end end return end end error("Unrecognized irregular base verb '" .. base.base_verb .. "'") end

-- The following applies to everything but 'irreg' verbs.

local infstem, infroot = base.base_verb:match("^((.*)[lr])n$") if infstem then base.unstressed_el_er = true else infstem, infroot = base.base_verb:match("^((.*)erl)n$") if infstem then base.unstressed_erl = true else infstem = base.base_verb:match("^(.*)en$") infroot = infstem if not infstem then error("Unrecognized infinitive, should end in -en, -ln or -rn: '" .. base.base_verb .. "'") end end end base.infstem =

if not base.conj then base.conj = "normal" end if base.conj == "normal" then local weak_past if not base.past then if base.unstressed_el_er then weak_past = infstem .. "t" else weak_past = infstem .. "et" end base.past = base.weak_past = true end if not base.pp then if not weak_past then error("Internal error: past was explicitly given but not past participle") end if not base.ge_prefix then local no_ge for _, insep_prefix in ipairs(inseparable_prefixes) do					-- There must be a vowel following the inseparable prefix; excludes beben, bechern, belfern, bellen, bessern, -- beten, betteln, betten, erben, erden, ernten, erzen, entern, gecken, gehren, gellen, gerben, geten, missen, -- zergen, zerren, etc. if rfind(infroot, "^" .. insep_prefix .. ".*" .. vowel_c .. ".*") and -- Exclude cases like beigen, beichten, beugen, beulen, geifern; this also wrongly excludes -- beirren, which needs -ge. not rfind(infroot, "^[bg]e[iu]" .. not_vowel_c .. "*$") then no_ge = true break end -- Check for -ier preceded by a vowel (excludes bieren, frieren, gieren, schmieren, stieren, zieren, etc.) if not base.unstressed_el_er and not base.unstressed_erl and rfind(infroot, "^.*" .. vowel_c .. ".*ier$") then no_ge = true break end end if no_ge then base.ge_prefix = else base.ge_prefix = end end base.pp = iut.map_forms(base.ge_prefix, function(form)					return form .. base.base_verb:gsub("n$", "") .. "t"			end) end else if not base.pp then error("For '" .. base.conj .. "' type verbs, past participle must be explicitly given") end end

add(base, "perf_part", base.pre_pref, base.pp) end

local function detect_all_indicator_specs(alternant_multiword_spec) iut.map_word_specs(alternant_multiword_spec, function(base)		detect_indicator_spec(base)		detect_verb_type(base)	end) end

-- Set the overall auxiliary or auxiliaries. We can't do this using the normal inflection -- code as it will produce e.g. 'haben und haben' for conjoined verbs. local function compute_auxiliary(alternant_multiword_spec) iut.map_word_specs(alternant_multiword_spec, function(base)		iut.insert_forms(alternant_multiword_spec.forms, "aux", base.aux)	end) end

function export.process_verb_classes(classes) local class_descs = {} local cats = {}

local function insert_desc(desc) m_table.insertIfNot(class_descs, desc) end

local function insert_cat(cat) m_table.insertIfNot(cats, "Middle High German " .. cat) end

for _, class in ipairs(classes) do		if class == "weak" then insert_desc("class 2 weak") insert_cat("weak verbs") insert_cat("class 2 weak verbs") elseif class == "irregweak" then insert_desc("class 1 weak") insert_cat("weak verbs") insert_cat("class 1 weak verbs") elseif class == "pretpres" then insert_desc("preterite-present") insert_cat("preterite-present verbs") elseif class == "irreg" then insert_desc("irregular") insert_cat("irregular verbs") elseif class == "mixed" then insert_desc("mixed") insert_cat("mixed verbs") elseif class == "irregstrong" then insert_desc("irregular strong") insert_cat("strong verbs") insert_cat("irregular strong verbs") elseif class:find("^[1-7]$") then insert_desc("class " .. class .. " strong") insert_cat("strong verbs") insert_cat("class " .. class .. " strong verbs") else error("Unrecognized verb class '" .. class .. "'") end end

return class_descs, cats end

local function add_categories_and_annotation(alternant_multiword_spec, base, from_headword, manual) local function insert_cat(full_cat) m_table.insertIfNot(alternant_multiword_spec.categories, full_cat) end

if not from_headword then for _, slot_and_accel in ipairs(all_verb_slots) do			local slot = slot_and_accel[1] local forms = base.forms[slot] local must_break = false if forms then for _, form in ipairs(forms) do					if not form.form:find("%[%[") then local title = mw.title.new(form.form) if title and not title.exists then must_break = true break end end end end if must_break then break end end end

if manual then return end

local class_descs, cats = export.process_verb_classes(base.verb_types) for _, desc in ipairs(class_descs) do		m_table.insertIfNot(alternant_multiword_spec.verb_types, desc) end -- Don't place multiword terms in categories like 'German class 4 strong verbs' to avoid spamming the -- categories with such terms. if from_headword and not base.lemma:find(" ") then for _, cat in ipairs(cats) do			insert_cat(cat) end end

for _, aux in ipairs(base.aux) do		m_table.insertIfNot(alternant_multiword_spec.auxiliaries, link_term(aux.form, "term")) if from_headword and not base.lemma:find(" ") then -- see above insert_cat("Middle High German verbs using " .. aux.form .. " as auxiliary") -- Set flags for use below in adding 'Middle High German verbs using hân and sîn as auxiliary' alternant_multiword_spec["saw_" .. aux.form] = true end end end

-- Compute the categories to add the verb to, as well as the annotation to display in the -- conjugation title bar. We combine the code to do these functions as both categories and -- title bar contain similar information. local function compute_categories_and_annotation(alternant_multiword_spec, from_headword, manual) alternant_multiword_spec.categories = {} alternant_multiword_spec.verb_types = {} alternant_multiword_spec.auxiliaries = {} iut.map_word_specs(alternant_multiword_spec, function(base)		add_categories_and_annotation(alternant_multiword_spec, base, from_headword)	end) if manual then alternant_multiword_spec.annotation = "" return end local ann_parts = {} table.insert(ann_parts, table.concat(alternant_multiword_spec.verb_types, " or ")) if #alternant_multiword_spec.auxiliaries > 0 then table.insert(ann_parts, ", auxiliary " .. table.concat(alternant_multiword_spec.auxiliaries, " or ")) end if from_headword and alternant_multiword_spec.saw_han and alternant_multiword_spec.saw_sin then m_table.insertIfNot(alternant_multiword_spec.categories, "Middle High German verbs using hân and sîn as auxiliary") end alternant_multiword_spec.annotation = table.concat(ann_parts) end

local function show_forms(alternant_multiword_spec) local lemmas = iut.map_forms(alternant_multiword_spec.forms.infinitive,		remove_sin_sich_indicators) alternant_multiword_spec.lemmas = lemmas -- save for later use in make_table local linked_pronouns = {} for index, pronoun in ipairs(pronouns) do		-- use 'es' instead of 'er' for 3s-only verbs if index == 3 and alternant_multiword_spec.only3s then linked_pronouns[index] = link_term("es") else linked_pronouns[index] = link_term(pronoun) end end dass = link_term("dass") .. " "	local function add_pronouns(slot, link) local persnum = slot:match("^imp_(2[sp])$") if persnum then link = link .. " (" .. linked_pronouns[persnum_to_index[persnum]] .. ")" else persnum = slot:match("^.*_([123][sp])$") if persnum then link = linked_pronouns[persnum_to_index[persnum]] .. " " .. link end if slot:find("^subc_") then link = dass .. link end end return link end local function join_spans(slot, spans) if slot == "aux" then return table.concat(spans, " or ") else return table.concat(spans, " ") end end local props = { lang = lang, lemmas = lemmas, transform_link = add_pronouns, join_spans = join_spans, }	props.slot_list = verb_slots_basic iut.show_forms(alternant_multiword_spec.forms, props) alternant_multiword_spec.footnote_basic = alternant_multiword_spec.forms.footnote props.slot_list = verb_slots_subordinate_clause iut.show_forms(alternant_multiword_spec.forms, props) alternant_multiword_spec.footnote_subordinate_clause = alternant_multiword_spec.forms.footnote props.slot_list = verb_slots_composed iut.show_forms(alternant_multiword_spec.forms, props) alternant_multiword_spec.footnote_composed = alternant_multiword_spec.forms.footnote end

local notes_template = [=[ {footnote} ]=]

local basic_table = [=[ Conjugation of {title} {\op}| border="1px solid #000000" style="border-collapse:collapse; background:#fafafa; text-align:center; width:100%" class="inflection-table" ! colspan="2" style="background:#d0d0d0" | infinitive ! colspan="2" style="background:#d0d0d0" | genitive gerund ! colspan="2" style="background:#d0d0d0" | dative gerund ! colspan="2" style="background:#d0d0d0" | present participle ! colspan="2" style="background:#d0d0d0" | past participle ! colspan="2" style="background:#d0d0d0" | auxiliary ! colspan="2" style="background:#a0ade3" | indicative ! colspan="2" style="background:#a0ade3" | subjunctive ! style="background:#a0ade3" | singular ! style="background:#a0ade3" | plural ! style="background:#a0ade3" | singular ! style="background:#a0ade3" | plural ! rowspan="3" style="background:#c0cfe4; width:7em" | present ! rowspan="3" style="background:#c0cfe4; width:7em" | i ! rowspan="3" style="background:#c0cfe4" | preterite ! rowspan="3" style="background:#c0cfe4" | ii ! style="background:#c0cfe4" | imperative ]=]
 * colspan="4" | {infinitive}
 * colspan="4" | {ger_gen}
 * colspan="4" | {ger_dat}
 * colspan="4" | {pres_part}
 * colspan="4" | {perf_part}
 * colspan="4" | {aux}
 * rowspan="2" style="background:#a0ade3" |
 * rowspan="2" style="background:#a0ade3" |
 * rowspan="2" style="background:#a0ade3" |
 * {pres_1s}
 * {pres_1p}
 * {subi_1s}
 * {subi_1p}
 * {pres_2s}
 * {pres_2p}
 * {subi_2s}
 * {subi_2p}
 * {pres_3s}
 * {pres_3p}
 * {subi_3s}
 * {subi_3p}
 * colspan="6" style="background:#d5d5d5; height: .25em" |
 * {subi_3p}
 * colspan="6" style="background:#d5d5d5; height: .25em" |
 * colspan="6" style="background:#d5d5d5; height: .25em" |
 * {pret_1s}
 * {pret_1p}
 * {subii_1s}
 * {subii_1p}
 * {pret_2s}
 * {pret_2p}
 * {subii_2s}
 * {subii_2p}
 * {pret_3s}
 * {pret_3p}
 * {subii_3s}
 * {subii_3p}
 * colspan="6" style="background:#d5d5d5; height: .25em" |
 * {subii_3p}
 * colspan="6" style="background:#d5d5d5; height: .25em" |
 * colspan="6" style="background:#d5d5d5; height: .25em" |
 * {imp_2s}
 * {imp_2p}
 * colspan="3" style="background:#e0e0e0" |
 * {\cl}{notes_clause}

local subordinate_clause_table = [=[ Subordinate-clause forms of {title} {\op}| border="1px solid #000000" style="border-collapse:collapse; background:#fafafa; text-align:center; width:100%" class="inflection-table" ! colspan="2" style="background:#a0ade3" | indicative ! colspan="2" style="background:#a0ade3" | subjunctive ! rowspan="3" style="background:#c0cfe4; width:7em" | present ! rowspan="3" style="background:#c0cfe4; width:7em" | i ! rowspan="3" style="background:#c0cfe4" | preterite ! rowspan="3" style="background:#c0cfe4" | ii ]=]
 * style="background:#a0ade3" |
 * style="background:#a0ade3" |
 * style="background:#a0ade3" |
 * {subc_pres_1s}
 * {subc_pres_1p}
 * {subc_subi_1s}
 * {subc_subi_1p}
 * {subc_pres_2s}
 * {subc_pres_2p}
 * {subc_subi_2s}
 * {subc_subi_2p}
 * {subc_pres_3s}
 * {subc_pres_3p}
 * {subc_subi_3s}
 * {subc_subi_3p}
 * colspan="6" style="background:#d5d5d5; height: .25em" |
 * {subc_subi_3p}
 * colspan="6" style="background:#d5d5d5; height: .25em" |
 * colspan="6" style="background:#d5d5d5; height: .25em" |
 * {subc_pret_1s}
 * {subc_pret_1p}
 * {subc_subii_1s}
 * {subc_subii_1p}
 * {subc_pret_2s}
 * {subc_pret_2p}
 * {subc_subii_2s}
 * {subc_subii_2p}
 * {subc_pret_3s}
 * {subc_pret_3p}
 * {subc_subii_3s}
 * {subc_subii_3p}
 * {\cl}{notes_clause}
 * {subc_subii_3p}
 * {\cl}{notes_clause}

local composed_table = [=[ Composed forms of {title} {\op}| border="1px solid #000000" style="border-collapse:collapse; background:#fafafa; text-align:center; width:100%" class="inflection-table" ! colspan="6" style="background:#99cc99" | perfect ! style="background:#99cc99" | ! style="background:#99cc99" | singular ! style="background:#99cc99" | plural ! style="background:#99cc99" | ! style="background:#99cc99" | singular ! style="background:#99cc99" | plural ! rowspan="3" style="background:#cfedcc; width:7em" | indicative ! rowspan="3" style="background:#cfedcc; width:7em" | subjunctive ! colspan="6" style="background:#99CC99" | pluperfect ! rowspan="3" style="background:#cfedcc" | indicative ! rowspan="3" style="background:#cfedcc" | subjunctive ! colspan="6" style="background:#9999DF" | future i ! rowspan="3" style="background:#ccccff" | infinitive ! rowspan="3" style="background:#ccccff" | subjunctive i ! colspan="6" style="background:#d5d5d5; height: .25em" | ! rowspan="3" style="background:#ccccff" | indicative ! rowspan="3" style="background:#ccccff" | subjunctive ii ! colspan="6" style="background:#9999DF" | future ii ! rowspan="3" style="background:#ccccff" | infinitive ! rowspan="3" style="background:#ccccff" | subjunctive i ! colspan="6" style="background:#d5d5d5; height: .25em" | ! rowspan="3" style="background:#ccccff" | indicative ! rowspan="3" style="background:#ccccff" | subjunctive ii
 * {perf_ind_1s}
 * {perf_ind_1p}
 * {perf_sub_1s}
 * {perf_sub_1p}
 * {perf_ind_2s}
 * {perf_ind_2p}
 * {perf_sub_2s}
 * {perf_sub_2p}
 * {perf_ind_3s}
 * {perf_ind_3p}
 * {perf_sub_3s}
 * {perf_sub_3p}
 * {perf_sub_3s}
 * {perf_sub_3p}
 * {plup_ind_1s}
 * {plup_ind_1p}
 * {plup_sub_1s}
 * {plup_sub_1p}
 * {plup_ind_2s}
 * {plup_ind_2p}
 * {plup_sub_2s}
 * {plup_sub_2p}
 * {plup_ind_3s}
 * {plup_ind_3p}
 * {plup_sub_3s}
 * {plup_sub_3p}
 * {plup_sub_3s}
 * {plup_sub_3p}
 * rowspan="3" colspan="2" | {futi_inf}
 * {futi_subi_1s}
 * {futi_subi_1p}
 * {futi_subi_2s}
 * {futi_subi_2p}
 * {futi_subi_3s}
 * {futi_subi_3p}
 * {futi_subi_3s}
 * {futi_subi_3p}
 * {futi_ind_1s}
 * {futi_ind_1p}
 * {futi_subii_1s}
 * {futi_subii_1p}
 * {futi_ind_2s}
 * {futi_ind_2p}
 * {futi_subii_2s}
 * {futi_subii_2p}
 * {futi_ind_3s}
 * {futi_ind_3p}
 * {futi_subii_3s}
 * {futi_subii_3p}
 * {futi_subii_3s}
 * {futi_subii_3p}
 * rowspan="3" colspan="2" | {futii_inf}
 * {futii_subi_1s}
 * {futii_subi_1p}
 * {futii_subi_2s}
 * {futii_subi_2p}
 * {futii_subi_3s}
 * {futii_subi_3p}
 * {futii_subi_3s}
 * {futii_subi_3p}
 * {futii_ind_1s}
 * {futii_ind_1p}
 * {futii_subii_1s}
 * {futii_subii_1p}
 * {futii_ind_2s}
 * {futii_ind_2p}
 * {futii_subii_2s}
 * {futii_subii_2p}
 * {futii_ind_3s}
 * {futii_ind_3p}
 * {futii_subii_3s}
 * {futii_subii_3p}
 * {\cl}{notes_clause} ]=]
 * {futii_subii_3p}
 * {\cl}{notes_clause} ]=]

local function make_table(alternant_multiword_spec) local forms = alternant_multiword_spec.forms

forms.title = link_term(alternant_multiword_spec.lemmas[1].form, "term") if alternant_multiword_spec.annotation ~= "" then forms.title = forms.title .. " (" .. alternant_multiword_spec.annotation .. ")" end

-- Maybe format the subordinate clause table. local formatted_subordinate_clause_table if forms.subc_pres_3s ~= "—" then -- use 3s in case of only3s verb forms.zu_infinitive_table = m_string_utilities.format(zu_infinitive_table, forms) forms.footnote = alternant_multiword_spec.footnote_subordinate_clause forms.notes_clause = forms.footnote ~= "" and m_string_utilities.format(notes_template, forms) or "" formatted_subordinate_clause_table = m_string_utilities.format(subordinate_clause_table, forms) else forms.zu_infinitive_table = "" formatted_subordinate_clause_table = "" end

-- Format the basic table. forms.footnote = alternant_multiword_spec.footnote_basic forms.notes_clause = forms.footnote ~= "" and m_string_utilities.format(notes_template, forms) or "" local formatted_basic_table = m_string_utilities.format(basic_table, forms)

-- Format the composed table. forms.footnote = alternant_multiword_spec.footnote_composed forms.notes_clause = forms.footnote ~= "" and m_string_utilities.format(notes_template, forms) or "" local formatted_composed_table = m_string_utilities.format(composed_table, forms)

-- Paste them together. return formatted_basic_table .. formatted_subordinate_clause_table .. formatted_composed_table end

-- Externally callable function to parse and conjugate a verb given user-specified arguments. -- Return value is WORD_SPEC, an object where the conjugated forms are in `WORD_SPEC.forms` -- for each slot. If there are no values for a slot, the slot key will be missing. The value -- for a given slot is a list of objects {form=FORM, footnotes=FOOTNOTES}. function export.do_generate_forms(parent_args, from_headword, def) local params = { [1] = {},	}

if from_headword then params["lemma"] = {list = true} params["id"] = {} end

local args = require("Module:parameters").process(parent_args, params) local PAGENAME = mw.title.getCurrentTitle.text

if not args[1] then if PAGENAME == "gmh-conj" or PAGENAME == "gmh-verb" then args[1] = def or "aus.fahren" else args[1] = PAGENAME -- If pagename has spaces in it, add links around each word if args[1]:find(" ") then args[1] = "" .. args[1]:gsub(" ", " ") .. "" end end end local parse_props = { parse_indicator_spec = parse_indicator_spec, lang = lang, allow_default_indicator = true, allow_blank_lemma = true, }	local escaped_arg1 = escape_sin_sich_indicators(args[1]) local alternant_multiword_spec = iut.parse_inflected_text(escaped_arg1, parse_props) alternant_multiword_spec.pos = pos or "verbs" alternant_multiword_spec.args = args normalize_all_lemmas(alternant_multiword_spec, from_headword) detect_all_indicator_specs(alternant_multiword_spec) local inflect_props = { slot_list = all_verb_slots, lang = lang, inflect_word_spec = conjugate_verb, -- We add links around the generated verbal forms rather than allow the entire multiword -- expression to be a link, so ensure that user-specified links get included as well. include_user_specified_links = true, }	iut.inflect_multiword_or_alternant_multiword_spec(alternant_multiword_spec, inflect_props) compute_auxiliary(alternant_multiword_spec) compute_categories_and_annotation(alternant_multiword_spec, from_headword) return alternant_multiword_spec end

-- Entry point for. Template-callable function to parse and conjugate a verb given -- user-specified arguments and generate a displayable table of the conjugated forms. function export.show(frame) local parent_args = frame:getParent.args local alternant_multiword_spec = export.do_generate_forms(parent_args) show_forms(alternant_multiword_spec) return make_table(alternant_multiword_spec) .. require("Module:utilities").format_categories(alternant_multiword_spec.categories, lang) end

-- Concatenate all forms of all slots into a single string of the form -- "SLOT=FORM,FORM,...|SLOT=FORM,FORM,...|...". Embedded pipe symbols (as might occur -- in embedded links) are converted to <!>. If INCLUDE_PROPS is given, also include -- additional properties (currently, none). This is for use by bots. local function concat_forms(alternant_multiword_spec, include_props) local ins_text = {} for _, slot_and_accel in ipairs(all_verb_slots) do		local slot = slot_and_accel[1] local formtext = iut.concat_forms_in_slot(alternant_multiword_spec.forms[slot]) if formtext then table.insert(ins_text, slot .. "=" .. formtext) end end if include_props then local verb_types = {} iut.map_word_specs(alternant_multiword_spec, function(base)			detect_verb_type(base, verb_types)		end) table.insert(ins_text, "class=" .. table.concat(verb_types, ",")) end return table.concat(ins_text, "|") end

local numbered_params = { -- required params [1] = "infinitive", [2] = "pres_part", [3] = "perf_part", [4] = "aux", [5] = "pres_1s", [6] = "pres_2s", [7] = "pres_3s", [8] = "pres_1p", [9] = "pres_2p", [10] = "pres_3p", [11] = "pret_1s", [12] = "pret_2s", [13] = "pret_3s", [14] = "pret_1p", [15] = "pret_2p", [16] = "pret_3p", [17] = "subi_1s", [18] = "subi_2s", [19] = "subi_3s", [20] = "subi_1p", [21] = "subi_2p", [22] = "subi_3p", [23] = "subii_1s", [24] = "subii_2s", [25] = "subii_3s", [26] = "subii_1p", [27] = "subii_2p", [28] = "subii_3p", [29] = "imp_2s", [30] = "imp_2p", -- [31] formerly the 2nd variant of imp_2s; now no longer allowed (use comma-separated 29=) -- [32] formerly indicated whether the 2nd variant of imp_2s was present -- optional params [33] = "subc_pres_1s", [34] = "subc_pres_2s", [35] = "subc_pres_3s", [36] = "subc_pres_1p", [37] = "subc_pres_2p", [38] = "subc_pres_3p", [39] = "subc_pret_1s", [40] = "subc_pret_2s", [41] = "subc_pret_3s", [42] = "subc_pret_1p", [43] = "subc_pret_2p", [44] = "subc_pret_3p", [45] = "subc_subi_1s", [46] = "subc_subi_2s", [47] = "subc_subi_3s", [48] = "subc_subi_1p", [49] = "subc_subi_2p", [50] = "subc_subi_3p", [51] = "subc_subii_1s", [52] = "subc_subii_2s", [53] = "subc_subii_3s", [54] = "subc_subii_1p", [55] = "subc_subii_2p", [56] = "subc_subii_3p", [57] = "zu_infinitive", }

local max_required_param = 30

-- Externally callable function to parse and conjugate a verb where all forms are given manually. -- Return value is WORD_SPEC, an object where the conjugated forms are in `WORD_SPEC.forms` -- for each slot. If there are no values for a slot, the slot key will be missing. The value -- for a given slot is a list of objects {form=FORM, footnotes=FOOTNOTES}. function export.do_generate_forms_manual(parent_args) local params = { ["generate_forms"] = {type = "boolean"}, }	for paramnum, _ in pairs(numbered_params) do		params[paramnum] = {required = paramnum <= max_required_param} end

local args = require("Module:parameters").process(parent_args, params)

local base = { forms = {}, manual = true, }	local function process_numbered_param(paramnum) local argval = args[paramnum] if paramnum == 4 then if argval == "h" then base.aux = elseif argval == "s" then base.aux = elseif argval == "hs" then base.aux = {{form = "hân"}, {form = "sîn"}} elseif argval == "sh" then base.aux = {{form = "sîn"}, {form = "hân"}} elseif not argval then error("Missing auxiliary in 4=") else error("Unrecognized auxiliary 4=" .. argval) end elseif argval and argval ~= "-" then local split_vals = rsplit(argval, "%s*,%s*") for _, val in ipairs(split_vals) do -- FIXME! This won't work with commas or brackets in footnotes. -- To fix this, use functions from Module:inflection utilities. local form, footnote = val:match("^(.-)%s*(%[[^%]%[]-%])$")				local footnotes				if form then					footnotes = {footnote}				else					form = val				end				local slot = numbered_params[paramnum]				--if slot:find("subii") then				--	local subii_footnotes = get_subii_note(base)				--	footnotes = iut.combine_footnotes(subii_footnotes, footnotes)				--end				iut.insert_form(base.forms, slot, {form = form, footnotes = footnotes})			end		end	end

-- Do the infinitive first as we need to reference it in subjunctive II footnotes. process_numbered_param(1) for paramnum, _ in pairs(numbered_params) do		if paramnum ~= 1 then process_numbered_param(paramnum) end end

add_composed_forms(base) compute_categories_and_annotation(base, nil, "manual") return base, args.generate_forms end

-- Entry point for. Template-callable function to parse and conjugate a verb given -- manually-specified inflections and generate a displayable table of the conjugated forms. function export.show_manual(frame) local parent_args = frame:getParent.args local base, generate_forms = export.do_generate_forms_manual(parent_args) if generate_forms then return concat_forms(base) end show_forms(base) return make_table(base) .. require("Module:utilities").format_categories(base.categories, lang) end

-- Template-callable function to parse and conjugate a verb given user-specified arguments and return -- the forms as a string "SLOT=FORM,FORM,...|SLOT=FORM,FORM,...|...". Embedded pipe symbols (as might -- occur in embedded links) are converted to <!>. If |include_props=1 is given, also include -- additional properties (currently, none). This is for use by bots. function export.generate_forms(frame) local include_props = frame.args["include_props"] local parent_args = frame:getParent.args local alternant_multiword_spec = export.do_generate_forms(parent_args) return concat_forms(alternant_multiword_spec, include_props) end

return export

title: Module:User:Zhnka/gmh-verb


text:
قطني

Etymology 1
.

Adjective

 * 1)  of cotton, related to cotton

Etymology 2
.

Adjective

 * 1)  lumbar

license: Creative Commons - Attribution Share-Alike - https://creativecommons.org/licenses/by-sa/4.0/

title: قطني


text:
λοστρόμος

Etymology
with dissimilation of consonants [n]-[m] > [l]-[m], from or  < , used in 16th century slave galleys as "overseer".

Noun

 * 1)  boatswain

title: λοστρόμος


text:
хімікиня

Etymology
.

Noun

 * : female chemist

title: хімікиня


text: λοστρόμοι

title: λοστρόμοι


text:
faʻaipoipo

Etymology
From. Cognates include 🇨🇬, 🇨🇬, 🇨🇬, 🇨🇬, 🇨🇬, 🇨🇬, 🇨🇬.

Noun
(Raapoto spelling faaipoipo)

 * 1) to marry

title: faʻaipoipo


text: snowfort

title: snowfort


text: snowforts

title: snowforts


text:
dosis de su propia medicina

Etymology
lit. 'dose of one's own medicine'.

Noun

 * 1)  a taste of one's own medicine

title: dosis de su propia medicina


text: dosis de sus propias medicinas

title: dosis de sus propias medicinas


text:
mellanlandning

Etymology
..

Noun

 * 1) A (shorter) stop on a journey (flight or boat; for bunkering, refueling, disembarking and boarding) before continuing; a layover.
 * 2)  A (short) stop on one's way somewhere; a stopover.
 * 1)  A (short) stop on one's way somewhere; a stopover.
 * 1)  A (short) stop on one's way somewhere; a stopover.
 * 1)  A (short) stop on one's way somewhere; a stopover.
 * 1)  A (short) stop on one's way somewhere; a stopover.
 * 1)  A (short) stop on one's way somewhere; a stopover.

title: mellanlandning


text:
gredelin

Etymology
.

Adjective

 * 1)  (bright) lavender

Usage notes

 * The color above is an approximation. Kind of a faded purple.
 * Still fairly well known, mostly from a character "tant Gredelin" ("Aunt Lavender" in the English translation) appearing in a series of storybooks by Elsa Beskow.

title: gredelin


text:
shahvat

Etymology
.

Noun

 * 1) lust

title: shahvat


text: gredelint

title: gredelint


text: gredelina

title: gredelina


text:
Talk:mamaya

Baya
@Mlgc1998 How is mámayâ from mam- + bayà? This really looks like some root "mayâ" though? https://www.google.com.ph/books/edition/Diccionario_Tag_alog_Hispano/jJ5PSQYsEdkC?hl=en&gbpv=1&pg=PA827&printsec=frontcover&dq=%22may%C3%A2%22

And say that it is mam-baya, are there other words that can be pa- + mam-+ ? Ysrael214 (talk) 09:13, 20 January 2024 (UTC)

 * @Ysrael214 I tried putting the bayà and mamayâ in the tl-IPA and they both phonologically matched:
 * The book by Laktaw in 1914 seems to have been made later. Are there books made earlier than the 1860 Vocabulario de la lengua Tagala that also mention a "Mayâ" root? I didn't find a sole "maya" entry before besides the maya bird and recalling the maya in PayMaya, which I always thought was a sort of whenever someone says "maya na 'yan" which they sometimes quickly correct to "mamaya na iyan" if they had time and wanted to say it in full.
 * yeah, if u mean the "pamayamaya", "magpamayamaya", "nagpapamayamaya" in the 1860 Vocabulario, there's "", "pamamalat-sibuyas", "pamamangka", "pamamaril", "pamamasura", "pamamagitan", "", "", "pamamakyaw", "pamamana", "", "pamamasada", "pamamasko", "pamamatay-tao", etc. although it feels grammatically weird if it is done before a word where the first vowel of the root is not -a- that I tried on this Category:Tagalog terms prefixed with mam-. The pa- prefix they used seems to be short for the prefix. Mlgc1998 (talk) 10:20, 21 January 2024 (UTC)
 * @Ysrael214 maybe we should make a maya root word entry as well in since the 1613 Vocabulario also has an entry even though there's no examples of usage alone. I'm thinking kind of like the entry for  that is also obsolete and is also only used as a root or actually could it be that this "mayâ" root word is a sort of alternative form of ? Mlgc1998 (talk) 11:35, 21 January 2024 (UTC)
 * @Mlgc1998 All of your examples do not apply: They're just pam-(nasalized redup CV). It can also produce pamumuna, pamumula, pamimintas, yet we don't have pa- + mum- nor pa- mim- prefixes. Applies as well with pananabik, pananalita, paninira, panunupil etc.
 * maya't maya/maya-maya has the same structure with iba't iba, iba-iba
 * and mamaya-maya with tatakbo-takbo
 * While old dictionaries sometimes fail with the root (ex. pananalig is from nalig according to old dictionaries but actually from salig), this don't seem to be the case with maya. Ysrael214 (talk) 12:51, 21 January 2024 (UTC)
 * and mamaya-maya with tatakbo-takbo
 * While old dictionaries sometimes fail with the root (ex. pananalig is from nalig according to old dictionaries but actually from salig), this don't seem to be the case with maya. Ysrael214 (talk) 12:51, 21 January 2024 (UTC)

title: Talk:mamaya


text:
யாது

Etymology 1
. Cognate to 🇨🇬.

Determiner

 * 1)  what, which

Etymology 2
.

Noun

 * 1) evil spirit, fiend, demon

Etymology 3
.

Noun

 * 1) toddy

Etymology 4
.

Noun

 * 1) memory

title: யாது


text:
վարորդական

Etymology
From.

Adjective

 * 1) driver's of or pertaining to a driver

title: վարորդական


text:
coi bộ

Etymology
🇰🇲.

Verb

 * 1)  to seem

title: coi bộ


text:
kagagawan

Etymology
, with partial of the root.

Noun

 * 1) deed; doing

title: kagagawan


text: 𰤨

title: 𰤨


text:
pagbawalan

Etymology
From.

Verb

 * 1) to ban or prohibit someone from doing something

title: pagbawalan


text:
padać trupem

Etymology
lit. 'to fall as [a] dead body'.

Verb

 * 1)  to fall dead

title: padać trupem


text:
pagkaitan

Etymology
From.

Verb

 * 1) to deny someone something; to not give something to someone

title: pagkaitan


text:
paść trupem

Etymology
lit. 'to fall as a dead body'.

Verb

 * 1)  to fall dead

title: paść trupem


text: backseating

title: backseating


text: backseated

title: backseated


text:
Category talk:English terms prefixed with eo-

eolithic: of the early Stone Age
Relating to the earliest part of the Stone Age, during which time simple stone tools began to be used 87.218.84.22 09:38, 20 January 2024 (UTC)


text:
யாவள்

Etymology
. Feminine of. Cognate to 🇨🇬.

Pronoun

 * 1)  who, which woman

title: யாவள்


text:
pagbabagong-klima

Etymology
From, a.

Noun

 * 1) climate change

title: pagbabagong-klima


text:
யாவது

Etymology
. Cognate to 🇨🇬.

Pronoun

 * 1) what
 * 2) how

title: யாவது


text:
bumlike

Adjective

 * 1) Resembling or characteristic of a bum.

title: bumlike


text:
யாங்கண்

Etymology
.

Adverb

 * 1) where

title: யாங்கண்


text:
perubahan iklim

Etymology
.

Noun

 * 1)  climate change

Etymology
.

Noun

 * 1)  climate change

title: perubahan iklim


text:
யாங்கு

Etymology
.

Adverb

 * 1) where
 * 2) how
 * 1) how

title: யாங்கு


text:
எதோள்

Etymology
.

Adverb

 * 1)  where

title: எதோள்


text: sadoju

title: sadoju


text:
எந்து

Etymology
.

Adverb

 * 1)  how...?

title: எந்து


text:
எவ்வாறு

Etymology
.

Adverb

 * 1) in what manner
 * 2)  how...?

title: எவ்வாறு


text:
எம்மை

Etymology 1
.

Pronoun

 * 1) which birth, in metempsychosis
 * 2) what world

Etymology 2
🇰🇲.

Pronoun

 * 1) our lord, master

title: எம்மை


text:
síofróg

Etymology
From.

Noun

 * 1) female fairy

title: síofróg


text:
magpawalang-bisa

Etymology
From tl.

Verb

 * 1) to void; to nullify; to declare null and void

title: magpawalang-bisa


text:
எற்றை

Etymology
.

Adverb

 * 1)  when

title: எற்றை


text: Landale

title: Landale


text:
pag-awayan

Etymology
From.

Verb

 * 1) to fight, quarrel, or have a dispute over something

title: pag-awayan


text: chéngfēng

title: chéngfēng


text:
obořit

Etymology
..

Verb

 * 1)  to snap, to lash out

title: obořit


text: လွင်ႈၶျွတ်ႈ

title: လွင်ႈၶျွတ်ႈ


text: လွင်ႈၶျႃး

title: လွင်ႈၶျႃး


text: purpurns

title: purpurns


text:
gwyach fawr gopog

Etymology
+ +.

Noun

 * 1) great crested grebe

title: gwyach fawr gopog


text:
User talk:Ajellid-n-arif/archive/2016

Tarifit noun forms
Hello, Ajellid. I edited the entry for tiṭṭawin so it tells the reader that it is a plural form. --Lo Ximiendo (talk) 21:11, 11 May 2016 (UTC)

 * Ah yes, thank you -- Ajellid-n-arif (talk) 07:32, 12 May 2016 (UTC)

 * You're welcome; and another thing: type "plural" instead of just "pl" in the lemma noun entries. --Lo Ximiendo (talk) 22:04, 12 May 2016 (UTC)

 * Okay will do, I just started out so I'm kind of learning as I go. Thank you Ajellid-n-arif (talk) 06:23, 13 May 2016 (UTC)

aberkan
I rearranged the entries for aberkan in an alphabetical order. --Lo Ximiendo (talk) 10:31, 21 May 2016 (UTC)

title: User talk:Ajellid-n-arif/archive/2016


text:
User talk:Ajellid-n-arif/archive/2017

Share your experience and feedback as a Wikimedian in this global survey
Hello! The Wikimedia Foundation is asking for your feedback in a survey. We want to know how well we are supporting your work on and off wiki, and how we can change or improve things in the future. The opinions you share will directly affect the current and future work of the Wikimedia Foundation. You have been randomly selected to take this survey as we would like to hear from your Wikimedia community. To say thank you for your time, we are giving away 20 Wikimedia T-shirts to randomly selected people who take the survey. The survey is available in various languages and will take between 20 and 40 minutes.

Take the survey now!

You can find more information about this project. This survey is hosted by a third-party service and governed by this privacy statement. Please visit our frequently asked questions page to find more information about this survey. If you need additional help, or if you wish to opt-out of future communications about this survey, send an email to surveys@wikimedia.org.

Thank you! --EGalvez (WMF) (talk) 21:25, 13 January 2017 (UTC)

Your feedback matters: Final reminder to take the global Wikimedia survey
(Sorry to write in Engilsh)

Hello! This is a final reminder that the Wikimedia Foundation survey will close on 28 February, 2017 (23:59 UTC). The survey is available in various languages and will take between 20 and 40 minutes. Take the survey now.

If you already took the survey - thank you! We won't bother you again.

About this survey: You can find more information about this project here or you can read the frequently asked questions. This survey is hosted by a third-party service and governed by this privacy statement. If you need additional help, or if you wish to opt-out of future communications about this survey, send an email through EmailUser function to User:EGalvez (WMF) or surveys@wikimedia.org. About the Wikimedia Foundation: The Wikimedia Foundation supports you by working on the software and technology to keep the sites fast, secure, and accessible, as well as supports Wikimedia programs and initiatives to expand access and support free knowledge globally. Thank you! --EGalvez (WMF) (talk) 08:23, 24 February 2017 (UTC)

title: User talk:Ajellid-n-arif/archive/2017


text:
User talk:Ajellid-n-arif/archive/2021

Riffian declension
Hey Ajellid!

Good job on your Tarifit contributions! I have a question on the declension table. How can a word be masculine but also have a feminine form? For example. — فين أخاي ( تكلم معاي · ما ساهمت ) 16:05, 14 February 2021 (UTC)

 * Hi, my pleasure, and thank you for the corrections I'm still learning as well.
 * Most nouns in Tarifit have a masculine / feminine form, with the feminine having the same meaning except it usually being diminitive, so I try to use the masculine form as the main entry and put the feminine in the declension table. Sometimes feminine forms do have a seperate meaning, if it does I create a seperate entry for it, not sure if this is the best way of handling it. Thanks Ajellid-n-arif (talk) 16:19, 14 February 2021 (UTC)
 * I see then. If that is the case, it is probably better to remove it from the declension table and add the diminutive to the headword. Less confusing. — فين أخاي ( تكلم معاي · ما ساهمت ) 16:46, 14 February 2021 (UTC)

 * Alright I'll do that approach then. What if a word has a masculine form like and feminine form, they have seperate definitions how would I best link both forms on each page, use the 'see also' section?Ajellid-n-arif (talk) 21:51, 15 February 2021 (UTC)

tamart
Azul, King of the Rif! I'm glad to see we have somebody interested in working on this. I noticed that some of your entries seem to belong to a surprisingly conservative variety of Tarifit, maybe Beni Iznasen; this paper has a neat map on the last page of vocalisation of *r, showing that most of the Rif has lost that r in tamart, for example. Given the diversity within Tarifit, we should find a way to mark which dialect each form is from, and ideally choose one dialect (e.g. that of Nador) to be the standard where all entries are centralised. —Μετάknowledge discuss/deeds 23:28, 5 March 2021 (UTC)
 * Azul, Metaknowledge, yes correct some variaties of Tarifit stopped vocalisation of the *r. But I made the decision to handle it similarly to English and write the *r even if it's not vocalised, for the following reasons:
 * Even if an *r is not vocalised in one form it can be vocalised in another, this happenens especially in plural forms and verb conjugation. Example: awessā (old man) > iwessura (old men), tawwuāt (door) > tiwwura (doors). And verbs: zā (to see) > yezar i t (he sees him), depending on whether the non-rhotic word is followed by another vowel.
 * non-rhoticity happens to the phonemes -ar,-ur,-ir and -er. But depending on variety these are pronounced differently: -ar, -er change to -ā (long a), -ir to -ā or -yā, -ur to -uā or -wā. And even within dialects this changes from case to case for example the city Nador, is pronounced by people in Nador as Naduā or Nadā. So then the question becomes which way of writing do we favour?

 * I'm opting to create cohesion between each variety, that's why I chose to retain the slightly more archaic pronounciation (inculing the R) as the standard since that's where all other dialects diverged from, and include all other varietal pronounciations under "alternative forms", and create entries for each alternative form that requires one. I hope that makes sense. — ⵜⵉⴼⴰⵡⵉⵏ ⴱⴰⴱ ⵏ ⵜⴼⴰⵡⵜ (talk) 11:20, 6 March 2021 (UTC)
 * I understand your interest in using the more archaic form as the standard, but it still seems to me like an odd way to present a language whose core area says things like ajeǧǧid instead of ajellid, etc. In any case, we need to mark every form with which dialects it is used in. Serhoual's dictionary might be a good model to follow (although it sometimes confuses me or doesn't list dialects). —Μετάknowledge discuss/deeds 19:16, 6 March 2021 (UTC)
 * Aside from retain *r, I'm happy to make ǧǧ words the standard entry instead of ll. FYI I'm not an expert at all the dialect's specific word pronounciations, but Serhoual's dictionary is a good source for this considering the limiting sources, Serhoual also retains non-vocalised *r in this dictionary for each entry. — ⵜⵉⴼⴰⵡⵉⵏ ⴱⴰⴱ ⵏ ⵜⴼⴰⵡⵜ (talk) 20:42, 6 March 2021 (UTC)
 * Well, we could try to copy Serhoual's model, but I don't know if you want to follow practices like marking spirantisation (e.g. for Serhoual p. 234 has the lemma at ). The most important thing is that we are careful to mark which dialect each word comes from. (And Serhoual is sometimes not very careful, e.g. in his entry for, he includes afus without any dialect-marking, but I'm pretty sure that's only used in other Moroccan Tamazight varieties, not Tarifit.) How about we use  as a test entry — do you want to give it a try? —Μετάknowledge discuss/deeds 21:24, 6 March 2021 (UTC)
 * What is the best way to mark the dialect of a lemma, since is the Bni Iznassen dialect variety how would I include this? Not sure which dialect uses afus, but it could be included to make sense of the construct state ufus, initial '-a' in nouns is sometimes dropped in Tarifit, but always re-appears in the construct state. I'll give  a try.
 * You can use on the definition line, and  in an alternative forms section for now. (I can create better infrastructure later, but this is just a mock-up.) Let me know if you want me to do a first pass at it. As for afus, the lack of the initial a- there is a classic Zenati trait, so any Riffian dialect would have ... but maybe Serhoual was thinking of Senhaja de Sraïr, which isn't actually Riffian. —Μετάknowledge discuss/deeds 00:48, 7 March 2021 (UTC)

title: User talk:Ajellid-n-arif/archive/2021


text:
著火烙

Verb

 * 1)  to slightly burn something while cooking

title: 著火烙


text: snow castle

title: snow castle


text: snow castles

title: snow castles


text: snowcastle

title: snowcastle


text: snowcastles

title: snowcastles


text: 着火烙

title: 着火烙


text:
著火燒

Verb

 * 1)  to catch fire

Adjective

 * 1)  burnt

title: 著火燒


text: 着火烧

title: 着火烧


text: gwyach gopog

title: gwyach gopog


text: Sofikë

title: Sofikë


text:
Sofika

Etymology
From. Compare.

title: Sofika


text:
suimintigh

Etymology
From.

Verb

 * 1) to cement

title: suimintigh


text:
tindroed

Etymology
🇰🇲.

Noun

 * 1) arsefoot, a great crested grebe  or little grebe

title: tindroed


text:
bull and cow

Noun

 * 1)  An argument; a row.
 * I went home and I had a bull and cow with my trouble and strife.

title: bull and cow


text: Ridgewell

title: Ridgewell


text: Category:Rhymes:Finnish/ukitːu/3 syllables


text: Category:Rhymes:Finnish/ukitːu

title: Category:Rhymes:Finnish/ukitːu


text: Category:Rhymes:Finnish/ukitːu/5 syllables


text:
Chelsea-on-Sea

Etymology
So called because its attractive location and property prices are comparable to Chelsea in London, and because of its coastal location.

Proper noun

 * 1)  The village of Burnham Market in Norfolk.

title: Chelsea-on-Sea


text:
akeccuḍ

Noun

 * 1) stick
 * 2) branch
 * 3) firewood

title: akeccuḍ


text:
takeccuṭ

Noun

 * 1) twig
 * 2) toothpick

title: takeccuṭ


text:
User talk:101.0.41.250

Hi. Here at Wiktionary we only use a capital letter if it is part of the spelling, like London. So you want bull and cow with a small b. Equinox ◑ 11:22, 20 January 2024 (UTC)

title: User talk:101.0.41.250


text:
scaturrio

Etymology
From.

Verb

 * 1) to stream, flow or gush out

title: scaturrio


text:
txancet

Etymology
.

Noun

 * 1) bag
 * 2) sack

title: txancet


text:
снус

Etymology
.

Noun

 * 1) snus

title: снус


text:
schmoozathon

Noun

 * 1)  An event where a lot of schmoozing takes place.

title: schmoozathon


text: schmoozathons

title: schmoozathons


text: sześćdziesiątką

title: sześćdziesiątką


text: Category:fi:Fabrics

title: Category:fi:Fabrics


text:
اوْكيْ

Etymology
Derived from, from.

Adjective

 * 1) okay
 * 2) good, alright

Interjection

 * 1) okay

title: اوْكيْ


text:
Qena

Proper noun

 * 1) A city in Upper Egypt, the capital of the Qena Governorate.

title: Qena


text:
Rockville Centre

Proper noun

 * 1) An incorporated village in the Town of Hempstead in Nassau County, Long Island, New York, United States.

title: Rockville Centre


text: приміряний

title: приміряний


text: pyramid inches

title: pyramid inches


text:
Red Volta

Proper noun

 * 1) A waterway in West Africa.

title: Red Volta


text: Nazinon

title: Nazinon


text:
paść łupem

Etymology
lit. 'to fall loot'.

Verb

 * 1)  to be stolen
 * 2)  to be hunted
 * 3)  to be intercepted by a goalkeeper

title: paść łupem


text:
Sambre

Proper noun

 * 1) A river in northern France and in Wallonia, Belgium, a left-bank tributary of the Meuse.

title: Sambre


text:
San Justo

Proper noun

 * 1) The main township of San Justo Department, Argentina.

title: San Justo


text:
gwyach gorniog

Etymology
+.

Noun

 * 1) horned grebe, Slavonian grebe
 * 2) great crested grebe
 * 1) great crested grebe

title: gwyach gorniog


text:
Saint-Ouen

Proper noun

 * 1) Any of various communes of France.

title: Saint-Ouen


text:
Saqqara

Proper noun

 * 1) An Egyptian village in Badrashin in the Giza Governorate.

title: Saqqara


text: Saccara

title: Saccara


text:
tabḍiṭ

Noun

 * 1) whistle

title: tabḍiṭ


text:
بيْغيْه

Etymology
From

Interjection

 * 1) okay
 * 2) no problem

Noun

 * 1) done

title: بيْغيْه


text:
झुम्का

Etymology
.

Noun

 * 1) pendant of an earring; ornament hanging from an ear

title: झुम्का


text:
San Miguel de Tucumán

Proper noun

 * 1) The capital and largest city of Tucumán Province in northern Argentina.

title: San Miguel de Tucumán


text:
Santa Marta

Proper noun

 * 1) A city on the coast of the Caribbean Sea in northern Colombia.

title: Santa Marta


text:
turboahtaa

Etymology
From.

Verb

 * : to turbocharge

title: turboahtaa


text:
Sawatch

Etymology
.

Proper noun

 * 1) Various places in the Southern Rocky Mountains of North America.

title: Sawatch


text:
gwyach fach

Etymology
+.

Noun

 * 1) little grebe, dabchick

title: gwyach fach


text:
Santurce

Proper noun

 * 1) A barrio of San Juan, Puerto Rico.

title: Santurce


text:
Sankt Anton am Arlberg

Proper noun

 * 1) A village and ski resort in the Austrian state of Tyrol, in the Alps.

title: Sankt Anton am Arlberg


text:
tsjinje

Etymology
From, from , from *þewanaz (“servant”) + *-ōną. Compare *þewaz (“servant, slave”). Cognate with 🇨🇬 and 🇨🇬.

Verb

 * 1) serve.
 * 2) devote oneself to, pay tribute to.
 * 3) suitable, useful, beneficial (for); (to) fulfill a function; be a means or instrument to achieve something; to make happen.
 * 4) ought (to do), must. (rarely used, literary).
 * 5) be taken into consideration by the court.

title: tsjinje


text:
tabedɛect

Etymology
.

Noun

 * 1) tunic, loose garment

title: tabedɛect


text:
Sejong

Etymology
..

Proper noun

 * 1) A special self-governing city and the de facto administrative capital of South Korea.

Translations

 * Arabic: سيجونغ
 * Chinese:
 * Mandarin:
 * Czech: Sedžong
 * Danish: Sejong
 * Dutch: Sejong
 * Esperanto: Seĝon
 * Finnish: Sejong
 * French: Sejong
 * Greek: Σέτζονγκ
 * Hungarian:
 * Indonesian: Sejong
 * Italian: Sejong
 * Japanese:
 * Kazakh: Седжоң
 * Korean: ^세종(世宗)
 * Malay: Sejong
 * Mongolian: Сэжун
 * Norwegian: Sejong
 * Persian: سجونگ
 * Polish: Sedżong
 * Portuguese: Sejong
 * Romanian: Sejong
 * Russian: Седжон
 * Spanish: Sejong
 * Swedish: Sejong
 * Thai: เซจง
 * Ukrainian: Седжон
 * Vietnamese: Sejong

title: Sejong


text:
Talk:duodecimal

unci-
Latin prefix for ½ (Greek dodecato-) https://en.wikipedia.org/wiki/Numeral_prefix JMGN (talk) 12:33, 20 January 2024 (UTC)

title: Talk:duodecimal


text:
San Pedro Sula

Proper noun

 * 1) The capital city of Cortés Department, Honduras.

title: San Pedro Sula


text:
Serra da Estrela

Proper noun

 * 1) A mountain range in continental Portugal.

title: Serra da Estrela


text:
Serra do Mar

Proper noun

 * 1) A system of mountain ranges and escarpments in southeastern Brazil.

title: Serra do Mar


text:
Citations:millillion

 * 1853, The Ohio Journal of Education, Vol. II, No. 6, page 218:
 * The million multiplied by the million, makes the bi-million, or, contracted, the billion, the second power of the million; the tri-million or trillion, the third power of the million; the quadrillion, the fourth power of the million; and so on, even up to the millillion, the 1000th power of the million, or a regular series of 6006 figures entering into the English notation and numeration.
 * 1853, The Ohio Journal of Education, Vol. II, No. 6, page 221:
 * The trigintillion comprehends 31 periods, or 186 digits or figures; the centillion, 101 periods, or 606 figures; the millillion, 1001 periods, or 6006 digits or figures—high enough, jet not limited.

title: Citations:millillion


text:
Senlac

Proper noun

 * 1) The hill or ridge where Harold Godwinson deployed his army for the  on 14 October 1066.

title: Senlac


text:
Wil y wawch

Noun

 * 1) great crested grebe

title: Wil y wawch


text:
Sepik

Proper noun

 * , the longest river on the island of New Guinea.

title: Sepik


text:
abeḥrur

Noun

 * 1) hem
 * 2) tail

title: abeḥrur


text:
噁噁吐

Verb

 * 1)  to vomit endlessly

title: 噁噁吐


text: 恶恶吐

title: 恶恶吐


text:
gwyach yddfgoch

Etymology
+.

Noun

 * 1) red-necked grebe

title: gwyach yddfgoch


text:
放熱冬

Verb

 * 1)  to be on summer holiday

title: 放熱冬


text: 放热冬

title: 放热冬


text:
gwyach yddfddu

Etymology
+.

Noun

 * 1) black-necked grebe

title: gwyach yddfddu


text:
放熱天

Verb

 * 1)  to be on summer holiday

title: 放熱天


text: 放热天

title: 放热天


text: أجبان

title: أجبان


text:
gwyach glustiog

Etymology
+.

Noun

 * 1) black-necked grebe
 * 2) great crested grebe
 * 1) great crested grebe

title: gwyach glustiog


text:
Talk:ouate

綿
sounds like this Japanese word I am a Green Bee (talk) 13:09, 20 January 2024 (UTC)

title: Talk:ouate


text:
放寒冬

Verb

 * 1)  to be on winter break

title: 放寒冬


text: Category:lac:Landforms

title: Category:lac:Landforms


text: Category:toj:Landforms

title: Category:toj:Landforms


text: Category:tzh:Landforms

title: Category:tzh:Landforms


text: Category:lac:Earth

title: Category:lac:Earth


text: Category:lac:Places

title: Category:lac:Places


text: Category:toj:Places

title: Category:toj:Places


text: Category:toj:List of name categories

title: Category:toj:List of name categories


text: Category:toj:Earth

title: Category:toj:Earth


text: Category:tzh:Earth

title: Category:tzh:Earth


text: Category:tzh:Places

title: Category:tzh:Places


text: Category:toj:Names

title: Category:toj:Names


text: Category:tzh:Names

title: Category:tzh:Names


text: Category:tzh:List of name categories

title: Category:tzh:List of name categories


text:
yhteensovitus

Etymology
From 🇰🇲.

Noun

 * 1) coordination, reconciliation

title: yhteensovitus


text:
mshubiri

Etymology
From.

Noun

 * 1) aloe plant

title: mshubiri


text: mishubiri

title: mishubiri


text:
shubiri

Etymology 1
.

Noun

 * 1) aloe

Etymology 2
See.

title: shubiri


text: Category:sw:Succulents

title: Category:sw:Succulents


text:
網膠

Noun

 * 1)  wrapping film

title: 網膠


text: Category:kjb:Colors

title: Category:kjb:Colors


text: Category:tzh:Colors

title: Category:tzh:Colors


text: Category:hus:Colors

title: Category:hus:Colors


text: Category:kjb:Vision

title: Category:kjb:Vision


text: Category:kjb:Light

title: Category:kjb:Light


text: Category:kjb:Energy

title: Category:kjb:Energy


text: Category:tzh:Vision

title: Category:tzh:Vision


text: Category:tzh:Light

title: Category:tzh:Light


text: Category:hus:Vision

title: Category:hus:Vision


text: Category:hus:Energy

title: Category:hus:Energy


text: Category:hus:Light

title: Category:hus:Light


text: Category:kjb:Senses

title: Category:kjb:Senses


text: Category:kjb:Perception

title: Category:kjb:Perception


text: Category:kjb:Body

title: Category:kjb:Body


text: Category:kjb:Human

title: Category:kjb:Human


text: Category:tzh:Senses

title: Category:tzh:Senses


text: Category:tzh:Perception

title: Category:tzh:Perception


text: Category:tzh:Body

title: Category:tzh:Body


text: Category:tzh:Energy

title: Category:tzh:Energy


text: Category:kjb:List of mixed categories

title: Category:kjb:List of mixed categories


text: Category:tzh:List of mixed categories

title: Category:tzh:List of mixed categories


text: Category:hus:Senses

title: Category:hus:Senses


text: Category:hus:Perception

title: Category:hus:Perception


text: Category:hus:Body

title: Category:hus:Body


text: Category:hus:List of mixed categories

title: Category:hus:List of mixed categories


text: Category:cac:Colors

title: Category:cac:Colors


text: Category:cac:Vision

title: Category:cac:Vision


text: Category:cac:Light

title: Category:cac:Light


text: Category:cac:Energy

title: Category:cac:Energy


text: Category:cac:Senses

title: Category:cac:Senses


text: Category:cac:Perception

title: Category:cac:Perception


text: Category:cac:Body

title: Category:cac:Body


text: Category:cac:List of mixed categories

title: Category:cac:List of mixed categories


text: 热学

title: 热学


text:
熱毒人

Noun

 * 1)  summer

title: 熱毒人


text: 热毒人

title: 热毒人


text:
アンダルシア

Etymology
Borrowed from.

title: アンダルシア


text: 熱毒儂

title: 熱毒儂


text: 熱天儂

title: 熱天儂


text:
熱天人

Noun

 * 1)  summer

title: 熱天人


text: 热天人

title: 热天人


text:
夏仔

Noun

 * 1)  summer

title: 夏仔


text:
ၽႃႇ

Etymology 1
Cognate with 🇨🇬, 🇨🇬, 🇨🇬, 🇨🇬, 🇨🇬.

Noun

 * 1)  palm of the hand; sole of the foot

Etymology 2
Cognate with 🇨🇬, 🇨🇬.

Verb

 * 1)  to go through

Verb

 * 1) to meet together; to collide

title: ၽႃႇ


text: Category:huv:Atmospheric phenomena

title: Category:huv:Atmospheric phenomena


text:
tuotteisto

Etymology
From.

Noun

 * 1)  product range, product base

title: tuotteisto


text: Category:huv:Atmosphere

title: Category:huv:Atmosphere


text:
ചക്ക്

Etymology
.

Noun

 * 1) an oil making device
 * 2) wheel

title: ചക്ക്


text:
Module talk:zh/data/dial-syn/夏天

熱儂
I was wondering why you added 熱儂 under Manila. I'm asking because I've never heard 熱儂 used as a noun. Mar vin kaiser (talk) 13:49, 20 January 2024 (UTC)

 * @Mar vin kaiser It's something one may not notice since our dialect leans more on the "hot weather" meaning. I think I put that before in 2021 cuz I remember my guama saying before expressions like lua̍h--lâng lâi --lo or lua̍h--lâng --lo, like normally they do not talk about summer as a season, but just think of it as "hot weather" because the seasons in our country here are a bit ambiguous on what exactly is a season in tropical climate and when exactly does it start besides vague idea of which months. It's mostly just rainy season, hot season (summer), and normal climate. or one thinks of summer in relation to summer vacation (I think my dad told me before 暑假 sú-ká and couldn't think of much else). The boomers and still living elderlies in my family and cousins normally don't think too much of other countries or going abroad so they haven't discussed those in Hokkien with us besides my cousins and siblings talking about it in English words in Taglish. If one asks a native speaker what's a specific term for the seasons here, they would likely tell me the Hokkien term for summer vacation or add 天(thiⁿ) at the end which I think is what I remember the instance I broached this topic to my dad before, but realistically, the same speaker normally doesn't use it, but instead says this lua̍h--lâng lâi --lo expression or for rainy weather says lo̍h-hǒ͘ --lo or when the same speaker starts to think of a word for "rainy season", that's when he says lo̍h-hǒ͘-thiⁿ --lo. I haven't heard of someone say loa̍h-thiⁿ --lo yet tho, so I just put what I naturally knew my family would naturally say back then in 2021.
 * Of course, I knew the other places having multiple terms for each dialectal synonyms chart row means there's a possibility of course of more terms yet to be added, which I planned to add to the Manila (Hokkien) row only when I encountered or knew or confirmed their existence when the time would come that I encounter it. Of course, if you or others have encountered another term, you may add as well, tho normally I think a word for summer is normally not common vocabulary in my family since the word for "hot weather" does its job well to cover for that. I think in the past years, I have come back to wonder about this term, I just haven't encountered yet loa̍h-thiⁿ to add it yet, so this lua̍h--lâng is what I thought will do for now until more terms come up if there are more among Metro Manila filchi. Mlgc1998 (talk) 12:40, 21 January 2024 (UTC)

title: Module talk:zh/data/dial-syn/夏天


text:
cốc nguyệt san

Etymology
🇰🇲.

Noun

 * 1) menstrual cup

title: cốc nguyệt san


text:
辣薟薟

Adjective

 * 1)  spicy; hot

title: 辣薟薟


text:
辣鑿鑿

Adjective

 * 1)  spicy; hot

title: 辣鑿鑿


text: 辣莶莶

title: 辣莶莶


text: 辣凿凿

title: 辣凿凿


text:
ນຶກ

Etymology
Cognate with 🇨🇬.

Verb

 * 1) to think; to reflect
 * 2) to remember; to recall
 * 3) to feel; to sense

title: ນຶກ


text: Category:chf:Arachnids

title: Category:chf:Arachnids


text: Category:chf:Arthropods

title: Category:chf:Arthropods


text:
捋狗尾

Verb

 * 1)  to praise, flatter, console, or speak well of someone contrary to one's convictions

title: 捋狗尾


text: Category:chf:Vultures

title: Category:chf:Vultures


text: Category:chf:Birds of prey

title: Category:chf:Birds of prey


text: Category:chf:Birds

title: Category:chf:Birds


text:
捋尾椎

Verb

 * 1)  to praise, flatter, console, or speak well of someone contrary to one's convictions

title: 捋尾椎


text:
havsvik

Noun

 * 1) a bay, an armlet, an inlet, (in the British sense) a creek (a vik from the sea, specifically, ruling out lakes – see )

title: havsvik


text: havsviken

title: havsviken


text:
padać łupem

Etymology
lit. 'to fall loot'.

Verb

 * 1)  to be stolen
 * 2)  to be hunted
 * 3)  to be intercepted by a goalkeeper

title: padać łupem


text:
捋面

Verb

 * 1)  to suddenly turn hostile; to fall out with
 * 2)  to wipe one's face

title: 捋面


text: havsvikar

title: havsvikar


text: havsvikarna

title: havsvikarna


text: havsviks

title: havsviks


text: havsvikens

title: havsvikens


text: Category:chf:Past

title: Category:chf:Past


text: Category:chf:Time

title: Category:chf:Time


text: havsvikars

title: havsvikars


text: havsvikarnas

title: havsvikarnas


text:
Reconstruction:Proto-Finnic/purkadak

Etymology
Possibly a cognate with 🇨🇬.

Verb

 * 1) to dismantle, to take apart
 * 2) to unload, to empty

Descendants

 * North Karelian:
 * South Karelian:
 * North Karelian:
 * South Karelian:
 * North Karelian:
 * South Karelian:
 * South Karelian:

title: Reconstruction:Proto-Finnic/purkadak


text:
десятигранник

Noun

 * 1)  decahedron

title: десятигранник


text:
семигранник

Noun

 * 1)  heptahedron

title: семигранник


text:
двенадцатигранник

Noun

 * 1)  dodecahedron

title: двенадцатигранник


text: 省分

title: 省分