模組:Pt-verb-form-of
用於{{pt-verb-form-of}}
,詳見模板頁。
local abbrevs = {
["i"]="人稱不定式",
["g"]="動名詞",
["pp"]="過去分詞",
["spp"]="短過去分詞",
["lpp"]="長過去分詞",
["psi"]="現在時直陳式",
["ipi"]="未完成時直陳式",
["pti"]="過去時直陳式",
["pli"]="過去完成時直陳式",
["fti"]="將來時直陳式",
["c"]="條件式",
["pss"]="現在時虛擬式",
["ips"]="未完成時虛擬式",
["fts"]="將來時虛擬式",
["ai"]="肯定命令式",
["ni"]="否定命令式",
["1"]="第一人稱",
["2"]="第二人稱",
["3"]="第三人稱",
["s"]="單數",
["p"]="複數",
["m"]="陽性",
["f"]="陰性",
["mf"]="陽性&陰性",
[""] = ""
}
-- Format: [suffix+conj] = {vf, p, n, which gloss, gender, context}
local suffixes = {}
suffixes = {
["a1"]={{"psi", "3", "s", 1}, {"ai", "2", "s", 2}},
["a2"]={{"pss", "1" ,"s", 1}, {"pss", "3", "s", 2}, {"ai", "3", "s", 1}, {"ni", "3", "s", 1}},
["a3"]={{"pss", "1" ,"s", 1}, {"pss", "3", "s", 2}, {"ai", "3", "s", 1}, {"ni", "3", "s", 1}},
["e1"]={{"pss", "1", "s", 1}, {"pss", "3", "s", 2}, {"ai", "3", "s", 1}, {"ni", "3", "s", 1}},
["e2"]={{"psi", "3", "s", 1}, {"ai", "2", "s", 2}},
["e3"]={{"psi", "3", "s", 1}, {"ai", "2", "s", 2}},
["i2"]={{"pti", "1", "s"}},
["i3"]={{"pti", "1", "s"}, {"ai", "2", "p"}},
["o1"]={{"psi", "1", "s"}},
["o2"]={{"psi", "1", "s"}},
["o3"]={{"psi", "1", "s"}},
["ai1"]={{"ai", "2", "p"}},
["am1"]={{"psi", "3", "p"}},
["am2"]={{"pss", "3", "p"}, {"ai", "3", "p"}, {"ni", "3", "p"}},
["am3"]={{"pss", "3", "p"}, {"ai", "3", "p"}, {"ni", "3", "p"}},
["ar1"]={{"i", "1", "s", 1}, {"i", "3", "s", 1}, {"fts", "1", "s", 1}, {"fts", "3", "s", 2}},
["as1"]={{"psi", "2", "s"}},
["as2"]={{"pss", "2", "s"}, {"ni", "2", "s"}},
["as3"]={{"pss", "2", "s"}, {"ni", "2", "s"}},
["ei1"]={{"pti", "1", "s"}},
["ei2"]={{"ai", "2", "p"}},
["em1"]={{"pss", "3", "p"}, {"ai", "3", "p"}, {"ni", "3", "p"}},
["em2"]={{"psi", "3", "p"}},
["em3"]={{"psi", "3", "p"}},
["er2"]={{"i", "1", "s", 1}, {"i", "3", "s", 1}, {"fts", "1", "s", 1}, {"fts", "3", "s", 2}},
["es1"]={{"pss", "2", "s"}, {"ni", "2", "s"}},
["es2"]={{"psi", "2", "s"}},
["es3"]={{"psi", "2", "s"}},
["eu2"]={{"pti", "3", "s"}},
["ia2"]={{"ipi", "1", "s"}, {"ipi", "3", "s"}},
["ia3"]={{"ipi", "1", "s"}, {"ipi", "3", "s"}},
["ir3"]={{"i", "1", "s", 1}, {"i", "3", "s", 1}, {"fts", "1", "s", 1}, {"fts", "3", "s", 2}},
["is3"]={{"psi", "2", "p"}},
["iu3"]={{"pti", "3", "s"}},
["ou1"]={{"pti", "3", "s"}},
["ada1"]={{"pp", "f", "s"}},
["ado1"]={{"pp", "m", "s"}},
["ais1"]={{"psi", "2", "p"}},
["ais2"]={{"pss", "2", "p"}, {"ni", "2", "p"}},
["ais3"]={{"pss", "2", "p"}, {"ni", "2", "p"}},
["ara1"]={{"pli", "1", "s"}, {"pli", "3", "s"}},
["ará1"]={{"fti", "3", "s"}},
["ava1"]={{"ipi", "1", "s"}, {"ipi", "3", "s"}},
["eis1"]={{"pss", "2", "p"}, {"ni", "2", "p"}},
["eis2"]={{"psi", "2", "p"}},
["era2"]={{"pli", "1", "s"}, {"pli", "3", "s"}},
["erá2"]={{"fti", "3", "s"}},
["iam2"]={{"ipi", "3", "p"}},
["iam3"]={{"ipi", "3", "p"}},
["ias2"]={{"ipi", "2", "s"}},
["ias3"]={{"ipi", "2", "s"}},
["ida2"]={{"pp", "f", "s"}},
["ida3"]={{"pp", "f", "s"}},
["ido2"]={{"pp", "m", "s"}},
["ido3"]={{"pp", "m", "s"}},
["ira3"]={{"pli", "1", "s"}, {"pli", "3", "s"}},
["irá3"]={{"fti", "3", "s"}},
["adas1"]={{"pp", "f", "p"}},
["ados1"]={{"pp", "m", "p"}},
["amos1"]={{"psi", "1", "p", 1}, {"pti", "1", "p", 2, "[[w:葡萄牙语正写法|巴西拼寫]][[Category:巴西葡萄牙語動詞變位形式]]"}},
["amos2"]={{"pss", "1", "p"}, {"ai", "1", "p"}, {"ni", "1", "p"}},
["amos3"]={{"pss", "1", "p"}, {"ai", "1", "p"}, {"ni", "1", "p"}},
["ámos1"]={{"pti", "1", "p", 1, "[[w:葡萄牙语正写法|歐洲拼寫]][[Category:歐洲葡萄牙語動詞變位形式]]"}},
["ando1"]={{"g", "", ""}},
["aram1"]={{"pti", "3", "p"}, {"pli", "3", "p"}},
["arão1"]={{"fti", "3", "p"}},
["aras1"]={{"pli", "2", "s"}},
["arás1"]={{"fti", "2", "s"}},
["arei1"]={{"fti", "1", "s"}},
["arem1"]={{"i", "3", "p", 1}, {"fts", "3", "p", 2}},
["ares1"]={{"i", "2", "s", 1}, {"fts", "2", "s", 2}},
["aria1"]={{"c", "1", "s"}, {"c", "3", "s"}},
["asse1"]={{"ips", "1", "s"}, {"ips", "3", "s"}},
["aste1"]={{"pti", "2", "s"}},
["avam1"]={{"ipi", "3", "p"}},
["avas1"]={{"ipi", "2", "s"}},
["emos1"]={{"pss", "1", "p"}, {"ai", "1", "p"}, {"ni", "1", "p"}},
["emos2"]={{"psi", "1", "p", 1}, {"pti", "1", "p", 2}},
["endo2"]={{"g", "", ""}},
["eram2"]={{"pti", "3", "p"}, {"pli", "3", "p"}},
["erão2"]={{"fti", "3", "p"}},
["eras2"]={{"pli", "2", "s"}},
["erás2"]={{"fti", "2", "s"}},
["erei2"]={{"fti", "1", "s"}},
["erem2"]={{"i", "3", "p", 1}, {"fts", "3", "p", 2}},
["eres2"]={{"i", "2", "s", 1}, {"fts", "2", "s", 2}},
["eria2"]={{"c", "1", "s"}, {"c", "3", "s"}},
["esse2"]={{"ips", "1", "s"}, {"ips", "3", "s"}},
["este2"]={{"pti", "2", "s"}},
["idas2"]={{"pp", "f", "p"}},
["idas3"]={{"pp", "f", "p"}},
["idos2"]={{"pp", "m", "p"}},
["idos3"]={{"pp", "m", "p"}},
["íeis2"]={{"ipi", "2", "p"}},
["íeis3"]={{"ipi", "2", "p"}},
["imos3"]={{"psi", "1", "p", 1}, {"pti", "1", "p", 2}},
["indo3"]={{"g", "", ""}},
["iram3"]={{"pti", "3", "p"}, {"pli", "3", "p"}},
["irão3"]={{"fti", "3", "p"}},
["iras3"]={{"pli", "2", "s"}},
["irás3"]={{"fti", "2", "s"}},
["irei3"]={{"fti", "1", "s"}},
["irem3"]={{"i", "3", "p", 1}, {"fts", "3", "p", 2}},
["ires3"]={{"i", "2", "s", 1}, {"fts", "2", "s", 2}},
["iria3"]={{"c", "1", "s"}, {"c", "3", "s"}},
["isse3"]={{"ips", "1", "s"}, {"ips", "3", "s"}},
["iste3"]={{"pti", "2", "s"}},
["ardes1"]={{"i", "2", "p", 1}, {"fts", "2", "p", 2}},
["areis1"]={{"fti", "2", "p"}},
["áreis1"]={{"pli", "2", "p"}},
["ariam1"]={{"c", "3", "p"}},
["arias1"]={{"c", "2", "s"}},
["armos1"]={{"i", "1", "p", 1}, {"fts", "1", "p", 2}},
["assem1"]={{"ips", "3", "p"}},
["asses1"]={{"ips", "2", "s"}},
["astes1"]={{"pti", "2", "p"}},
["áveis1"]={{"ipi", "2", "p"}},
["erdes2"]={{"i", "2", "p", 1}, {"fts", "2", "p", 2}},
["ereis2"]={{"fti", "2", "p"}},
["êreis2"]={{"pli", "2", "p"}},
["eriam2"]={{"c", "3", "p"}},
["erias2"]={{"c", "2", "s"}},
["ermos2"]={{"i", "1", "p", 1}, {"fts", "1", "p", 2}},
["essem2"]={{"ips", "3", "p"}},
["esses2"]={{"ips", "2", "s"}},
["estes2"]={{"pti", "2", "p"}},
["íamos2"]={{"ipi", "1", "p"}},
["íamos3"]={{"ipi", "1", "p"}},
["irdes3"]={{"i", "2", "p", 1}, {"fts", "2", "p", 2}},
["ireis3"]={{"fti", "2", "p"}},
["íreis3"]={{"pli", "2", "p"}},
["iriam3"]={{"c", "3", "p"}},
["irias3"]={{"c", "2", "s"}},
["irmos3"]={{"i", "1", "p", 1}, {"fts", "1", "p", 2}},
["issem3"]={{"ips", "3", "p"}},
["isses3"]={{"ips", "2", "s"}},
["istes3"]={{"pti", "2", "p"}},
["áramos1"]={{"pli", "1", "p"}},
["aremos1"]={{"fti", "1", "p"}},
["aríeis1"]={{"c", "2", "p"}},
["ásseis1"]={{"ips", "2", "p"}},
["ávamos1"]={{"ipi", "1", "p"}},
["êramos2"]={{"pli", "1", "p"}},
["eremos2"]={{"fti", "1", "p"}},
["eríeis2"]={{"c", "2", "p"}},
["êsseis2"]={{"ips", "2", "p"}},
["íramos3"]={{"pli", "1", "p"}},
["iremos3"]={{"fti", "1", "p"}},
["iríeis3"]={{"c", "2", "p"}},
["ísseis3"]={{"ips", "2", "p"}},
["aríamos1"]={{"c", "1", "p"}},
["ássemos1"]={{"ips", "1", "p"}},
["eríamos2"]={{"c", "1", "p"}},
["êssemos2"]={{"ips", "1", "p"}},
["iríamos3"]={{"c", "1", "p"}},
["íssemos3"]={{"ips", "1", "p"}},
}
local export = {}
local w
function export.show(frame)
-- This template supports two types of parameter entering:
--- by data: manually enter the tense/aspect form, the person, the number,
--- etc.
--- by suffix: enter the conjugation paradigm (1, 2 or 3) and the suffix
--- expected from a regular verb (even if the verb itself isn’t
--- regular) and the template will automatically find out all the
--- forms that suffix forms.
local args = frame:getParent().args
w = mw.title.getCurrentTitle().text
local l = args[1] -- lemma
local vf = args[2] or ""
local tg = args["tg"] or ""
local tg2 = args["tg2"] or tg or ""
local ig = args["ig"] or ""
local ig2 = args["ig2"] or ig or ""
local obj = args["obj"] or ""
local objtr = args["objtr"] or ""
local c = args["cx"] or ""
local imp = false
if (args["imp"]) then imp = true end
local data
local suf
local conj
local s = ""
if (mw.ustring.sub(l, -2) == "ar") then conj = "1"
elseif (mw.ustring.sub(l, -2) == "ir") then conj = "3"
else conj = 2 end
if (args[2] == nil) then
suf = get_suffix(l)
--print(suf)
end
if (args[3] == nil and args[2] ~= "g") then
suf = suf or args[2]
data = suffixes[suf .. conj]
if not data then
error('後綴「' .. suf .. '」及變位「' .. conj .. '」無資料。')
end
local correct_tg, correct_ig
for c1 = 1, table.getn(data) do
if (data[c1][4] == 2) then
correct_tg = tg2
correct_ig = ig2
else
correct_tg = tg
correct_ig = ig
end
local context = c
if (c ~= "" and data[c1][5] ~= nil) then
context = context .. ", "
end
context = context .. (data[c1][5] or "")
if (c1 > 1) then s = s .. "\n# " end
s = s .. def(l, context, data[c1][1], data[c1][2], data[c1][3], correct_tg, correct_ig, imp, obj, objtr)
end
else
local p = args[3] or ""
local n = args[4]
s = s .. def(l, c, args[2], p, n, tg, ig, imp, obj, objtr)
end
return s;
end
-- Returns the text for the definition and the usex. Parameters:
--- l: lemma
--- c: context (i.e. “Portugal” for “falámos”)
--- vf: verb form (abbreviation)
--- p: person (abbreviation) or gender (for past participle)
--- n: number (abbreviation)
--- tg: transitive sense gloss
--- ig: intransitive sense gloss
--- imp: impersonal
--- obj: object
--- objtr: object translation
function def(l, c, vf, p, n, tg, ig, imp, obj, objtr)
local s = ""
if (mw.ustring.len(c) > 0) then s = s .. "(" .. c .. ")" end
s = s .. "''[[" .. l .. "#葡萄牙語|" .. l .. "]]'' 的"
s = s .. abbrevs[p] .. abbrevs[n]
if (vf ~= "g" and vf ~= "pp" and vf ~= "spp" and vf ~= "lpp") then
s = s .. "(" .. pronoun_notes(vf, p, n) .. ")"
end
s = s .. abbrevs[vf]
s = s .. make_usex(vf, p, n, tg, true, imp, obj, objtr)
s = s .. make_usex(vf, p, n, ig, false, imp, obj, objtr)
return s
end
-- Returns information about the pronouns used with the form. Parameters:
--- vf: verb form (abbreviation)
--- p: person (abbreviation)
--- n: number (abbreviation)
function pronoun_notes(vf, p, n)
local s = "'''[["
if (p == "3") then
if (not(vf == "ni" or vf == "ai")) then
if (n == "s") then
s = s .. "ele#葡萄牙語|ele]]'''和'''[[ela#葡萄牙語|ela]]''',亦用於'''[[você#葡萄牙語|você"
else
s = s .. "eles#葡萄牙語|eles]]'''和'''[[elas#葡萄牙語|elas]]''',亦用於'''[[vocês#葡萄牙語|vocês"
end
s = s .. "]]'''及[[Appendix:葡萄牙語代詞#人稱代詞和變位動詞形式|其他代詞]]"
else
if (n == "s") then
s = s .. "você]]'''"
else
s = s .. "vocês]]'''"
end
end
else
if (p == "2") then
if (n == "s") then
s = s .. "tu#葡萄牙語|tu"
else
s = s .. "vós#葡萄牙語|vós"
end
if (vf == "ni" or vf == "ai") then
s = s .. "]]''',有時用於'''[["
if (n == "s") then
s = s .. "você#葡萄牙語|você"
else
s = s .. "vocês#葡萄牙語|vocês"
end
end
else
if (n == "s") then
s = s .. "eu#葡萄牙語|eu"
else
s = s .. "nós#葡萄牙語|nós"
end
end
s = s .. "]]'''"
end
return s;
end
-- Returns the word’s inflectional suffix.
function get_suffix(l)
local suf4 = mw.ustring.sub(l, -4)
local suf3 = mw.ustring.sub(l, -3)
local wsuf
if (suf4 == "guer" or suf4 == "guir" or suf4 == "quer" or suf4 == "quir") then
wsuf = mw.ustring.sub(w, mw.ustring.len(l) - mw.ustring.len(w) - 3)
if (mw.ustring.sub(wsuf, 1, 1) == "u") then
wsuf = mw.ustring.sub(wsuf, 2)
end
else
wsuf = mw.ustring.sub(w, mw.ustring.len(l) - mw.ustring.len(w) - 2)
local fl = mw.ustring.sub(wsuf, 1, 1) -- first letter
local ftl = mw.ustring.sub(wsuf, 1, 2) -- first two letters
if (suf3 == "car" or suf3 == "gar") then
if (mw.ustring.sub(wsuf, 1, 1) == "u") then
wsuf = mw.ustring.sub(wsuf, 2)
end
elseif (suf3 == "air" or suf3 == "uir") then
if (ftl == "io" or ftl == "ia") then
wsuf = mw.ustring.sub(wsuf, 2)
elseif (fl == "í") then
if (suffixes[wsuf .. "3"] == nil) then
wsuf = "i" .. mw.ustring.sub(wsuf, 2)
end
elseif (wsuf == "i" or wsuf == "is") then
wsuf = "e" .. mw.ustring.sub(wsuf, 2)
end
elseif (suf3 == "ear") then
if (fl == "i") then
wsuf = mw.ustring.sub(wsuf, 2)
end
elseif (suf3 == "oer") then
if (fl == "i") then
wsuf = "e" .. mw.ustring.sub(wsuf, 2)
elseif (fl == "í" and mw.ustring.len(wsuf <=3)) then
wsuf = "i" .. mw.ustring.sub(wsuf, 2)
end
end
end
return wsuf
end
-- Generates an automatic usage example. Returns an empty string if one can’t be
-- generated.
-- parameters:
--- vf: verb form (abbreviation)
--- p: person (abbreviation)
--- n: number (abbreviation)
--- g: gloss
--- tr: whether the verb sense is transitive
--- imp: (boolean) whether the verb is impersonal (i.e. chover, gear)
--- obj: the object; default “isso”
--- objtr: the object’s translation; default “this”
-- The gloss should be the English form that translates the Portuguese one.
-- For example, the form of ‘to be’ to be used is:
--- be: ai, ni, fti, c, pss, i
--- am: psi 1s, fts 1s
--- is: psi 3s, fts 3s
--- are psi 2s p, fts 2s p
--- was: pti 1s 3s, ipi 1s 3s
--- were: pti 2s p, ipi 2s p, ips
--- been: pp, lpp, spp, pli
--- being: g
function make_usex(vf, p, n, g, tr, imp, obj, objtr)
if (g == "") then return "" end
local pt = ""
local en = ""
local ww
if (mw.ustring.len(obj) == 0) then
obj = "isso"
objtr = "this"
end
if (vf == "g") then
if (imp == true) then
pt = pt .. "Aqui está '''" .. w .. "'''"
en = en .. "It is '''" .. g .. "''' here"
else
pt = pt .. "Conheço a pessoa '''" .. w .. "'''"
en = en .. "I know the person '''" .. g .. "'''"
if (tr) then
pt = pt .. " " .. obj
en = en .. " " .. objtr
end
end
elseif (vf == "pp" or vf == "lpp" or vf == "spp") then
if (p == "m" and n == "s") then
if (imp == true) then
pt = pt .. "Havia '''" .. w .. "'''"
en = en .. "It had '''" .. g .. "'''"
else
pt = pt .. "Alguém havia '''" .. w .. "'''"
en = en .. "Someone had '''" .. g .. "'''"
if (tr == true) then
pt = pt .. " " .. obj
en = en .. " " .. objtr
end
end
else return ""
end
else
if (vf == "ni" or vf == "ai") then
ww = w
if (p == "1") then
en = en .. "'''Let’s"
if (vf == "ni") then
pt = pt .. "Não "
en = en .. "''' not '''"
else
ww = capitalise(w)
en = en .. " "
end
else
if (p == "2" and n == "s") then pt = pt .. "Tu"
elseif (p == "2" and n == "p") then pt = pt .. "Vós"
elseif (p == "3" and n == "s") then pt = pt .. "Você"
else pt = pt .. "Vocês" end
pt = pt .. " aí, "
en = en .. "You there, "
if (vf == "ni") then
pt = pt .. "não "
en = en .. "don’t "
end
en = en .. "'''"
end
pt = pt .. "'''" .. ww .. "'''"
en = en .. g .. "'''"
if (tr == true) then
pt = pt .. " " .. obj
en = en .. " " .. objtr
end
else
if (not(vf=="pss" or vf=="ips" or vf=="fts" or vf=="i")) then
pt = pt .. capitalise(get_pron("pt", p, n, "s", imp))
en = en .. capitalise(get_pron("en", p, n, "s", imp))
elseif (vf == "i") then
pt = pt .. "Aquilo foi feito para "
en = en .. "That was done for "
pt = pt .. get_pron("pt", p, n, "s", imp)
en = en .. get_pron("en", p, n, "o", imp)
else
if (vf == "pss") then
pt = pt .. "É importante que "
en = en .. "It’s important that "
elseif (vf == "ips") then
pt = pt .. "Seria bom se "
en = en .. "It would be nice if "
else
pt = pt .. "Estará terminado quando "
en = en .. "It will be over when "
end
pt = pt .. get_pron("pt", p, n, "s", imp)
en = en .. get_pron("en", p, n, "s", imp)
end
if (vf == "ipi") then
pt = pt .. " frequentemente"
en = en .. " often '''"
elseif (vf == "pli") then
en = en .. " '''had "
elseif (vf == "fti") then
en = en .. " '''will "
elseif (vf == "c") then
en = en .. " '''would "
elseif (vf == "i") then
en = en .. " '''to "
else
en = en .. " '''"
end
pt = pt .. " '''" .. w .. "'''"
en = en .. g .. "'''"
if (tr == true) then
pt = pt .. " " .. obj
en = en .. " " .. objtr
end
if (vf == "pti") then
pt = pt .. " uma vez"
en = en .. " once"
end
end
if (p == "2" or (vf == "ni" or vf == "ai") and p == "3") then
if (n == "s") then
pt = pt .. " sozinho"
en = en .. " by yourself"
else
pt = pt .. " sozinhos"
en = en .. " by yourselves"
end
end
if (vf == "c") then
pt = pt .. ", se fosse possível"
en = en .. ", if it were possible"
end
end
return "\n#: ''" .. pt .. ".''\n#:: " .. en .. "."
end
-- Returns a pronoun. Parameters:
--- l: language (“pt” or “en”)
--- p: person (“1”, “2” or “3”)
--- n: number (“s” or “p”)
--- d: declension (“s” for subjective, “o” for objective.) Only relevant for
--- English, Portuguese always returns subjective.
--- imp: whether the verb is impersonal
-- Does not return “você” or “vocês,” these must be added manually.
function get_pron(l, p, n, d, imp)
if (l == "en") then
if (p == "1") then
if (n == "s") then
if (d == "s") then return "I"
else return "me" end
else
if (d == "s") then return "we"
else return "us" end
end
elseif (p == "2") then return "you"
else
if (n == "s") then
if (imp == true) then return "it"
else
if (d == "s") then return "he"
else return "him" end
end
else
if (d == "s") then return "they"
else return "them" end
end
end
else
if (p == "1") then
if (n == "s") then return "eu"
else return "nós" end
elseif (p == "2") then
if (n == "s") then return "tu"
else return "vós" end
else
if (imp == true) then return "ele" end
if (n == "s") then return "ele"
else return "eles" end
end
end
end
-- Returns the parameter string with its first letter uppercase.
function capitalise(s)
return mw.ustring.upper(mw.ustring.sub(s, 1, 1)) .. mw.ustring.sub(s, 2);
end
return export