local exports = {}
local lang = require('Module:languages').getByCode('pt')
local function makeLink(term, face, allow_self_link)
local m_links = require('Module:links')
return m_links.full_link({term = term, lang = lang}, face, allow_self_link)
end
local function verbInformation(verb_data)
local function verbDescription()
local description = "這是"
if verb_data.irregular then
description = description .. "一個不規則"
else
description = description .. "一個規則"
end
if verb_data.abundant then description = description .. "完全變化" end
if verb_data.defective then description = description .. "不完全變化" end
return description .. "動詞,屬於'''-" .. verb_data.suffix .. "'''結尾動詞。"
end
local function verbExamples()
local examples = {}
for i, verb in ipairs(verb_data.examples) do
table.insert(examples, makeLink(verb, 'term', true))
end
return table.concat(examples, ', ')
end
local module = string.sub(verb_data.suffix, #verb_data.suffix-1)
local edit_link = "[".. tostring(mw.uri.fullUrl(
"Module:pt-conj/data/-"..module, {action='edit'}))
.." [編輯]]"
return "'''注''':<sup class='plainlinks'>" .. edit_link .. "</sup>\n"
.. "* " .. verbDescription() .. "\n"
.. "* " .. table.concat(verb_data.comments, "\n* ") .. "\n"
.. "* 與本動詞變位形式相同的動詞包括:" .. verbExamples() .. "。"
end
local function navHeadText(verb_data)
return " [[Appendix:" .. lang:getCanonicalName() .. "動詞|" ..
lang:getCanonicalName() .. " ''-" ..
verb_data.suffix .. "'' 結尾動詞]] " ..
"''" .. verb_data.forms.infn.impe .. "'' 的變位"
end
-- main entry point for this module, renders table with all verb forms
function exports.create(verb_data)
local has_short_pp = verb_data.forms.short_part_past and verb_data.forms.long_part_past
local function lookup(s)
local parts = mw.text.split(s, '%.')
local f = verb_data.forms
for i, k in ipairs(parts) do
if f == nil then break end
f = f[k]
end
return f
end
local function linkForm(form)
return makeLink(form, nil, false)
end
local function verbForm(param)
local stdform = lookup(param)
local text = stdform and stdform ~= '' and linkForm(stdform) or '-'
local altforms = lookup(param .. '_alt')
local defective = lookup(param .. '_defective')
local obsolete = lookup(param .. '_obsolete')
local altobsolete = lookup(param .. '_obsolete_alt')
if altforms then
for _, form in ipairs(altforms) do
text = text .. '<br/>' ..linkForm(form)
end
end
if defective then
text = text .. "<br/><small>'''一般不完全變化:'''</small><br/>''" .. linkForm(defective) .. "''"
end
if obsolete then
text = text .. "<br/><small>'''棄用:'''</small><br/>''" .. linkForm(obsolete) .. "''"
end
if altobsolete then
for _, form in ipairs(altobsolete) do
text = text .. '<br/>\'\'' ..linkForm(form) .. "''"
end
end
return text
end
local function repl(param)
if param == 'navhead' then
return navHeadText(verb_data)
elseif param == 'verbInformation' then
return verbInformation(verb_data)
elseif param then
return verbForm(param)
end
end
local function pastParticiple()
if has_short_pp then
return [=[
! style="border: 1px solid #999999; background:#ffc498" colspan="7" | <span title="particípio irregular">短過去分詞</span><sup><small>[1]</small></sup>
|-
! style="border: 1px solid #999999; background:#dfa478" | 陽性
| style="border: 1px solid #999999; vertical-align: top;" colspan="3" | {{{short_part_past.sing.m}}}
| style="border: 1px solid #999999; vertical-align: top;" colspan="3" | {{{short_part_past.plur.m}}}
|-
! style="border: 1px solid #999999; background:#dfa478" | 陰性
| style="border: 1px solid #999999; vertical-align: top;" colspan="3" | {{{short_part_past.sing.f}}}
| style="border: 1px solid #999999; vertical-align: top;" colspan="3" | {{{short_part_past.plur.f}}}
|-
! style="border: 1px solid #999999; background:#ffc498" colspan="7" | <span title="particípio regular">長過去分詞</span><sup><small>[2]</small></sup>
|-
! style="border: 1px solid #999999; background:#dfa478" | 陽性
| style="border: 1px solid #999999; vertical-align: top;" colspan="3" | {{{long_part_past.sing.m}}}
| style="border: 1px solid #999999; vertical-align: top;" colspan="3" | {{{long_part_past.plur.m}}}
|-
! style="border: 1px solid #999999; background:#dfa478" | 陰性
| style="border: 1px solid #999999; vertical-align: top;" colspan="3" | {{{long_part_past.sing.f}}}
| style="border: 1px solid #999999; vertical-align: top;" colspan="3" | {{{long_part_past.plur.f}}}
]=]
else
return [=[
! style="border: 1px solid #999999; background:#ffc498" colspan="7" | <span title="particípio passado">過去分詞</span>
|-
! style="border: 1px solid #999999; background:#dfa478" | 陽性
| style="border: 1px solid #999999; vertical-align: top;" colspan="3" | {{{part_past.sing.m}}}
| style="border: 1px solid #999999; vertical-align: top;" colspan="3" | {{{part_past.plur.m}}}
|-
! style="border: 1px solid #999999; background:#dfa478" | 陰性
| style="border: 1px solid #999999; vertical-align: top;" colspan="3" | {{{part_past.sing.f}}}
| style="border: 1px solid #999999; vertical-align: top;" colspan="3" | {{{part_past.plur.f}}}
]=]
end
end
local wikicode = [=[<div class="NavFrame" style="clear:both; white-space: nowrap">
<div class="NavHead">{{{navhead}}}</div>
<div class="NavContent" align="left">
{| class="inflection-table" style="background:#F6F6F6; text-align: left; border: 1px solid #999999;" cellpadding="3" cellspacing="0"
|-
| style="border: 1px solid #999999;" colspan="7" | {{{verbInformation}}}
|-
! style="border: 1px solid #999999; background:#B0B0B0" rowspan="2" |
! style="border: 1px solid #999999; background:#D0D0D0" colspan="3" | 單數
! style="border: 1px solid #999999; background:#D0D0D0" colspan="3" | 複數
|-
! style="border: 1px solid #999999; background:#D0D0D0; width:12.5%" | 第一人稱<br>([[eu#葡萄牙語|eu]])
! style="border: 1px solid #999999; background:#D0D0D0; width:12.5%" | 第二人稱<br>([[tu#葡萄牙語|tu]])
! style="border: 1px solid #999999; background:#D0D0D0; width:12.5%" | 第三人稱<br>([[ele#葡萄牙語|ele]] / [[ela#葡萄牙語|ela]] / [[você#葡萄牙語|você]])
! style="border: 1px solid #999999; background:#D0D0D0; width:12.5%" | 第一人稱<br>([[nós#葡萄牙語|nós]])
! style="border: 1px solid #999999; background:#D0D0D0; width:12.5%" | 第二人稱<br>([[vós#葡萄牙語|vós]])
! style="border: 1px solid #999999; background:#D0D0D0; width:12.5%" | 第三人稱<br>([[eles#葡萄牙語|eles]] / [[elas#葡萄牙語|elas]] / [[vocês#葡萄牙語|vocês]])
|-
! style="border: 1px solid #999999; background:#c498ff" colspan="7" | <span title="infinitivo">不定式</span>
|-
! style="border: 1px solid #999999; background:#a478df" | '''<span title="infinitivo impessoal">無人稱</span>'''
| style="border: 1px solid #999999; vertical-align: top;" colspan="6" | {{{infn.impe}}}
|-
! style="border: 1px solid #999999; background:#a478df" | '''<span title="infinitivo pessoal">人稱</span>'''
| style="border: 1px solid #999999; vertical-align: top;" | {{{infn.pers.sing.1}}}
| style="border: 1px solid #999999; vertical-align: top;" | {{{infn.pers.sing.2}}}
| style="border: 1px solid #999999; vertical-align: top;" | {{{infn.pers.sing.3}}}
| style="border: 1px solid #999999; vertical-align: top;" | {{{infn.pers.plur.1}}}
| style="border: 1px solid #999999; vertical-align: top;" | {{{infn.pers.plur.2}}}
| style="border: 1px solid #999999; vertical-align: top;" | {{{infn.pers.plur.3}}}
|-
! style="border: 1px solid #999999; background:#98ffc4" colspan="7" | <span title="gerúndio">動名詞</span>
|-
| style="border: 1px solid #999999; background:#78dfa4" |
| style="border: 1px solid #999999; vertical-align: top;" colspan="6" | {{{part_pres}}}
|-
]=] .. pastParticiple() .. [=[
|-
! style="border: 1px solid #999999; background:#d0dff4" colspan="7" | <span title="indicativo">直陳式</span>
|-
! style="border: 1px solid #999999; background:#b0bfd4" | <span title="presente">現在</span>
| style="border: 1px solid #999999; vertical-align: top;" | {{{indi.pres.sing.1}}}
| style="border: 1px solid #999999; vertical-align: top;" | {{{indi.pres.sing.2}}}
| style="border: 1px solid #999999; vertical-align: top;" | {{{indi.pres.sing.3}}}
| style="border: 1px solid #999999; vertical-align: top;" | {{{indi.pres.plur.1}}}
| style="border: 1px solid #999999; vertical-align: top;" | {{{indi.pres.plur.2}}}
| style="border: 1px solid #999999; vertical-align: top;" | {{{indi.pres.plur.3}}}
|-
! style="border: 1px solid #999999; background:#b0bfd4" | <span title="pretérito imperfeito">未完成</span>
| style="border: 1px solid #999999; vertical-align: top;" | {{{indi.impf.sing.1}}}
| style="border: 1px solid #999999; vertical-align: top;" | {{{indi.impf.sing.2}}}
| style="border: 1px solid #999999; vertical-align: top;" | {{{indi.impf.sing.3}}}
| style="border: 1px solid #999999; vertical-align: top;" | {{{indi.impf.plur.1}}}
| style="border: 1px solid #999999; vertical-align: top;" | {{{indi.impf.plur.2}}}
| style="border: 1px solid #999999; vertical-align: top;" | {{{indi.impf.plur.3}}}
|-
! style="border: 1px solid #999999; background:#b0bfd4" | <span title="pretérito perfeito">過去</span>
| style="border: 1px solid #999999; vertical-align: top;" | {{{indi.pret.sing.1}}}
| style="border: 1px solid #999999; vertical-align: top;" | {{{indi.pret.sing.2}}}
| style="border: 1px solid #999999; vertical-align: top;" | {{{indi.pret.sing.3}}}
| style="border: 1px solid #999999; vertical-align: top;" | {{{indi.pret.plur.1}}}
| style="border: 1px solid #999999; vertical-align: top;" | {{{indi.pret.plur.2}}}
| style="border: 1px solid #999999; vertical-align: top;" | {{{indi.pret.plur.3}}}
|-
! style="border: 1px solid #999999; background:#b0bfd4" | <span title="pretérito mais-que-perfeito simples">過去完成</span>
| style="border: 1px solid #999999; vertical-align: top;" | {{{indi.plpf.sing.1}}}
| style="border: 1px solid #999999; vertical-align: top;" | {{{indi.plpf.sing.2}}}
| style="border: 1px solid #999999; vertical-align: top;" | {{{indi.plpf.sing.3}}}
| style="border: 1px solid #999999; vertical-align: top;" | {{{indi.plpf.plur.1}}}
| style="border: 1px solid #999999; vertical-align: top;" | {{{indi.plpf.plur.2}}}
| style="border: 1px solid #999999; vertical-align: top;" | {{{indi.plpf.plur.3}}}
|-
! style="border: 1px solid #999999; background:#b0bfd4" | <span title="futuro do presente">將來</span>
| style="border: 1px solid #999999; vertical-align: top;" | {{{indi.futu.sing.1}}}
| style="border: 1px solid #999999; vertical-align: top;" | {{{indi.futu.sing.2}}}
| style="border: 1px solid #999999; vertical-align: top;" | {{{indi.futu.sing.3}}}
| style="border: 1px solid #999999; vertical-align: top;" | {{{indi.futu.plur.1}}}
| style="border: 1px solid #999999; vertical-align: top;" | {{{indi.futu.plur.2}}}
| style="border: 1px solid #999999; vertical-align: top;" | {{{indi.futu.plur.3}}}
|-
! style="border: 1px solid #999999; background:#ffffaa" colspan="7" | <span title="condicional / futuro do pretérito">條件式</span>
|-
! style="border: 1px solid #999999; background:#ddddaa" |
| style="border: 1px solid #999999; vertical-align: top;" | {{{indi.cond.sing.1}}}
| style="border: 1px solid #999999; vertical-align: top;" | {{{indi.cond.sing.2}}}
| style="border: 1px solid #999999; vertical-align: top;" | {{{indi.cond.sing.3}}}
| style="border: 1px solid #999999; vertical-align: top;" | {{{indi.cond.plur.1}}}
| style="border: 1px solid #999999; vertical-align: top;" | {{{indi.cond.plur.2}}}
| style="border: 1px solid #999999; vertical-align: top;" | {{{indi.cond.plur.3}}}
|-
! style="border: 1px solid #999999; background:#d0f4d0" colspan="7" | <span title="conjuntivo (pt) / subjuntivo (br)">虛擬式</span>
|-
! style="border: 1px solid #999999; background:#b0d4b0" | <span title=" presente do conjuntivo (pt) / subjuntivo (br)">現在</span>
| style="border: 1px solid #999999; vertical-align: top;" | {{{subj.pres.sing.1}}}
| style="border: 1px solid #999999; vertical-align: top;" | {{{subj.pres.sing.2}}}
| style="border: 1px solid #999999; vertical-align: top;" | {{{subj.pres.sing.3}}}
| style="border: 1px solid #999999; vertical-align: top;" | {{{subj.pres.plur.1}}}
| style="border: 1px solid #999999; vertical-align: top;" | {{{subj.pres.plur.2}}}
| style="border: 1px solid #999999; vertical-align: top;" | {{{subj.pres.plur.3}}}
|-
! style="border: 1px solid #999999; background:#b0d4b0" | <span title="pretérito imperfeito do conjuntivo (pt) / subjuntivo (br)">未完成</span>
| style="border: 1px solid #999999; vertical-align: top;" | {{{subj.impf.sing.1}}}
| style="border: 1px solid #999999; vertical-align: top;" | {{{subj.impf.sing.2}}}
| style="border: 1px solid #999999; vertical-align: top;" | {{{subj.impf.sing.3}}}
| style="border: 1px solid #999999; vertical-align: top;" | {{{subj.impf.plur.1}}}
| style="border: 1px solid #999999; vertical-align: top;" | {{{subj.impf.plur.2}}}
| style="border: 1px solid #999999; vertical-align: top;" | {{{subj.impf.plur.3}}}
|-
! style="border: 1px solid #999999; background:#b0d4b0" | <span title="futuro do conjuntivo (pt) / subjuntivo (br)">將來</span>
| style="border: 1px solid #999999; vertical-align: top;" | {{{subj.futu.sing.1}}}
| style="border: 1px solid #999999; vertical-align: top;" | {{{subj.futu.sing.2}}}
| style="border: 1px solid #999999; vertical-align: top;" | {{{subj.futu.sing.3}}}
| style="border: 1px solid #999999; vertical-align: top;" | {{{subj.futu.plur.1}}}
| style="border: 1px solid #999999; vertical-align: top;" | {{{subj.futu.plur.2}}}
| style="border: 1px solid #999999; vertical-align: top;" | {{{subj.futu.plur.3}}}
|-
! style="border: 1px solid #999999; background:#f4e4d0" colspan="7" | <span title="imperativo">命令式</span>
|-
! style="border: 1px solid #999999; background:#d4c4b0" | <span title="imperativo afirmativo">肯定</span>
| style="border: 1px solid #999999; vertical-align: top;" | {{{impe.affr.sing.1}}}
| style="border: 1px solid #999999; vertical-align: top;" | {{{impe.affr.sing.2}}}
| style="border: 1px solid #999999; vertical-align: top;" | {{{impe.affr.sing.3}}}
| style="border: 1px solid #999999; vertical-align: top;" | {{{impe.affr.plur.1}}}
| style="border: 1px solid #999999; vertical-align: top;" | {{{impe.affr.plur.2}}}
| style="border: 1px solid #999999; vertical-align: top;" | {{{impe.affr.plur.3}}}
|-
! style="border: 1px solid #999999; background:#d4c4b0" | <span title="imperativo negativo">否定</span> ([[não#葡萄牙語|não]])
| style="border: 1px solid #999999; vertical-align: top;" | {{{impe.negt.sing.1}}}
| style="border: 1px solid #999999; vertical-align: top;" | {{{impe.negt.sing.2}}}
| style="border: 1px solid #999999; vertical-align: top;" | {{{impe.negt.sing.3}}}
| style="border: 1px solid #999999; vertical-align: top;" | {{{impe.negt.plur.1}}}
| style="border: 1px solid #999999; vertical-align: top;" | {{{impe.negt.plur.2}}}
| style="border: 1px solid #999999; vertical-align: top;" | {{{impe.negt.plur.3}}}
|}
]=] .. (has_short_pp and [=[
* <sup><small>[1]</small></sup> 通常使用助動詞 [[ser#葡萄牙語|ser]] 和 [[estar#葡萄牙語|estar]];
* <sup><small>[2]</small></sup> 通常使用助動詞 [[haver#葡萄牙語|haver]] 和 [[ter#葡萄牙語|ter]]。
]=] or '') ..
[=[
</div>
</div>]=]
local replaced, _ = mw.ustring.gsub(wikicode, "{{{([a-zA-Z0-9._]+)}}}", repl)
return replaced
end
return exports