|
|
Line 194: |
Line 194: |
|
| |
|
| pos_functions.verbs = function(class, args, data) | | pos_functions.verbs = function(class, args, data) |
| if args[2] then -- old-style | | local params = { |
| local params = {
| | [1] = {list = "pres"}, |
| [1] = {list = "pres", required = true},
| | [2] = {list = "subj"}, |
| ["pres_qual"] = {list = "pres=_qual", allow_holes = true},
| | [3] = {list = "pp"}, |
| [2] = {list = "past", required = true},
| | ["head"] = {}, |
| ["past_qual"] = {list = "past=_qual", allow_holes = true},
| | } |
| [3] = {list = "pp", required = true},
| | |
| ["pp_qual"] = {list = "pp=_qual", allow_holes = true},
| | local args = require("Module:parameters").process(args, params) |
| [4] = {list = "pastsubj"},
| | data.heads = {args["head"]} |
| ["pastsubj_qual"] = {list = "pastsubj=_qual", allow_holes = true},
| | |
| ["aux"] = {list = true},
| | table.insert(data.categories, "High Valyrian " .. data.pos_category) |
| ["aux_qual"] = {list = "aux=_qual", allow_holes = true},
| | |
| ["head"] = {list = true},
| | args[1] = require("Module:qhv-adj/head").fetch("act_ind_pres_1sg") |
| ["class"] = {list = true},
| | args[2] = require("Module:qhv-adj/head").fetch("act_sub_pres_1sg") |
| }
| | args[3] = require("Module:qhv-adj/head").fetch("act_part_prf") |
| | | |
| local args = require("Module:parameters").process(args, params)
| | |
| data.heads = args["head"]
| | args[1].label = "first-person singular present indicative" |
| | | args[2].label = "first-person singular present subjunctive" |
| local function collect_forms(label, accel_form, forms, qualifiers)
| | args[3].label = "past participle" |
| if forms[1] == "-" then
| | |
| return {label = "no " .. label}
| | table.insert(data.inflections, args[1]) |
| else
| | table.insert(data.inflections, args[2]) |
| local into_table = accel_form and {label = label, accel = {form = accel_form}} or {label = label}
| | table.insert(data.inflections, args[3]) |
| for i, form in ipairs(forms) do
| |
| table.insert(into_table, {term = form, qualifiers = qualifiers[i] and {qualifiers[i]} or nil})
| |
| end
| |
| return into_table
| |
| end
| |
| end
| |
| | |
| if #args.class > 0 then
| |
| local class_descs, cats = require("Module:de-verb").process_verb_classes(args.class)
| |
| for _, cats in ipairs(cats) do
| |
| table.insert(data.categories, cats)
| |
| end
| |
| table.insert(data.inflections, {label = require("Module:table").serialCommaJoin(class_descs, {conj = "or"})})
| |
| end
| |
| table.insert(data.inflections, collect_forms("third-person singular present", "3|s|pres", args[1], args.pres_qual))
| |
| table.insert(data.inflections, collect_forms("past tense", "1//3|s|pret", args[2], args.past_qual))
| |
| table.insert(data.inflections, collect_forms("past participle", "perf|part", args[3], args.pp_qual))
| |
| if #args[4] > 0 then
| |
| table.insert(data.inflections, collect_forms("past subjunctive", "1//3|s|sub|II", args[4], args.pastsubj_qual))
| |
| end
| |
| if #args.aux > 0 then
| |
| table.insert(data.inflections, collect_forms("auxiliary", nil, args.aux, args.aux_qual))
| |
| end
| |
| return
| |
| end | |
| | |
| local function get_headword_inflection(forms, label, accel_form)
| |
| if forms then
| |
| local inflection = accel_form and {label = label, accel = {form = accel_form}} or {label = label}
| |
| for _, form in ipairs(forms) do
| |
| local qualifiers
| |
| if form.footnotes then
| |
| qualifiers = {}
| |
| for _, footnote in ipairs(form.footnotes) do
| |
| footnote = footnote:gsub("^%[(.*)%]$", "%1")
| |
| table.insert(qualifiers, footnote)
| |
| end
| |
| end
| |
| table.insert(inflection, {term = form.form, qualifiers = qualifiers})
| |
| end
| |
| return inflection
| |
| elseif label then
| |
| return {label = "no " .. label}
| |
| else
| |
| return {}
| |
| end
| |
| end
| |
| | |
| local alternant_multiword_spec = require("Module:de-verb").do_generate_forms(args, "from headword")
| |
| for _, cat in ipairs(alternant_multiword_spec.categories) do
| |
| table.insert(data.categories, cat) | |
| end | |
| table.insert(data.inflections, {label = table.concat(alternant_multiword_spec.verb_types, " or ")})
| |
| | |
| if #data.heads == 0 then | |
| for _, head in ipairs(alternant_multiword_spec.forms.infinitive_linked) do
| |
| table.insert(data.heads, head.form)
| |
| end
| |
| end
| |
| table.insert(data.inflections, get_headword_inflection(alternant_multiword_spec.forms.pres_3s,
| |
| "third-person singular present", "3|s|pres"))
| |
| local pret_3s = alternant_multiword_spec.forms.pret_3s | |
| table.insert(data.inflections, get_headword_inflection(pret_3s, "past tense", "1//3|s|pret"))
| |
| table.insert(data.inflections, get_headword_inflection(alternant_multiword_spec.forms.perf_part,
| |
| "past participle", "perf|part"))
| |
| -- See if we need the past subjunctive, i.e. there exist past subjunctive forms whose stem is not the
| |
| -- same as some past tense form. To facilitate comparison, we truncate final -e in both preterite 3s
| |
| -- and past subjunctive 3s, to handle cases like subjunctive 'ginge aus' vs. preterite 'ging aus'.
| |
| -- We need to compare 3s forms (and not e.g. 3p forms, where the issue with truncating -e doesn't
| |
| -- occur) so we work correctly with impersonal verbs.
| |
| local need_past_subj
| |
| local truncated_pret_3s_forms = {}
| |
| if pret_3s then | |
| for _, form in ipairs(pret_3s) do
| |
| local truncated_form = form.form:gsub("e$", ""):gsub("e ", " ") -- discard 2nd retval
| |
| table.insert(truncated_pret_3s_forms, truncated_form)
| |
| end
| |
| end
| |
| local subii_3s = alternant_multiword_spec.forms.subii_3s
| |
| local truncated_subii_3s_forms = {}
| |
| if subii_3s then
| |
| for _, form in ipairs(subii_3s) do
| |
| local truncated_form = form.form:gsub("e$", ""):gsub("e ", " ") -- discard 2nd retval
| |
| table.insert(truncated_subii_3s_forms, truncated_form)
| |
| end
| |
| end
| |
| for _, past_subj_form in ipairs(truncated_subii_3s_forms) do
| |
| local saw_same = false
| |
| for _, pret_3s_form in ipairs(truncated_pret_3s_forms) do
| |
| if past_subj_form == pret_3s_form then
| |
| saw_same = true
| |
| break
| |
| end
| |
| end
| |
| if not saw_same then
| |
| need_past_subj = true
| |
| break
| |
| end
| |
| end
| |
| if need_past_subj then | |
| table.insert(data.inflections, get_headword_inflection(subii_3s, "past subjunctive", "1//3|s|sub|II"))
| |
| end
| |
| | |
| local auxes = alternant_multiword_spec.forms.aux
| |
| table.insert(data.inflections, get_headword_inflection(auxes, "auxiliary")) | |
| end | | end |
|
| |
|
| return export | | return export |