Module:siwa-noun: Difference between revisions
No edit summary |
No edit summary |
||
| Line 2: | Line 2: | ||
local m_u = require('Module:utilities') | local m_u = require('Module:utilities') | ||
local m_data = require('Module:siwa-noun/common') | local m_data = require('Module:siwa-noun/data') | ||
local m_com = require('Module:siwa-noun/common') | |||
local sub = mw.ustring.sub | local sub = mw.ustring.sub | ||
| Line 17: | Line 18: | ||
local function dedigraphize(word) | local function dedigraphize(word) | ||
for digraph, repl in pairs( | for digraph, repl in pairs(m_com.digraphs_to_single) do | ||
word = gsub(word, digraph, repl) | word = gsub(word, digraph, repl) | ||
end | end | ||
| Line 92: | Line 93: | ||
return stressed_components(word) .. " " .. lenition(word) | return stressed_components(word) .. " " .. lenition(word) | ||
end | |||
-- The main entry point. | |||
function export.show(frame) | |||
local parent_args = frame:getParent().args | |||
local numbers = nil | |||
local decl = {} | |||
local word = NAMESPACE == "Template" and "sivi" or parent_args.word or PAGENAME | |||
local args = {} | |||
if not m_data[word] then | |||
if frame.args.decl then | |||
decl_type = frame.args.decl | |||
else | |||
if parent_args.n and parent_args.c and parent_args[1] then | |||
decl_type = parent_args.n .. "-" .. parent_args.c | |||
numbers = {parent_args[1]} | |||
else | |||
decl_type, numbers = export.detect_decl(word, parent_args.n, parent_args.c) | |||
end | |||
end | |||
if not decl_type then | |||
error("Unknown declension '" .. decl_type .. "'") | |||
end | |||
args = require("Module:parameters").process(parent_args, m_data[decl_type].params, true) | |||
if numbers then | |||
for i, number in ipairs(numbers) do | |||
args[i] = number | |||
end | |||
end | |||
end | |||
local data = {forms = {}, categories = {}} | |||
data.head = parent_args["head"] or nil | |||
data.proper = parent_args["proper"] and true or false | |||
data.nocat = parent_args["nocat"] and true or false | |||
-- Generate the forms | |||
if m_data[word] then | |||
m_data[word](parent_args, data) | |||
else | |||
m_data[decl_type](args, data) | |||
end | |||
-- Make the table | |||
return make_table(data) | |||
end | |||
function make_table(data) | |||
local function show_form(form) | |||
if not form then | |||
return "—" | |||
end | |||
local ret = {} | |||
for key, subform in ipairs(form) do | |||
table.insert(ret, subform) | |||
end | |||
return table.concat(ret, ", ") | |||
end | |||
local function link(term) | |||
local links = {} | |||
for alt in gmatch(term, "([^%s,]+)") do | |||
alt = "[[Contionary:" .. alt .. "|" .. alt .. "]]" | |||
table.insert(links, alt) | |||
end | |||
return table.concat(links, ", ") | |||
end | |||
local function repl(param) | |||
if param == "decl_type" then | |||
return data.decl_type | |||
elseif param == "title" then | |||
return data.forms.nom_sg[1] | |||
elseif param == "pagename" and NAMESPACE == "Template" then | |||
return "sivi" | |||
elseif param == "pagename" then | |||
return PAGENAME | |||
else | |||
return show_form(data.forms[param]) | |||
end | |||
end | |||
function export.make_cases(data, animacy) | |||
local cases = {"Unmarked<br />''agentive/dative''", "Marked<br />''patientive/genitive''", "Locative"} | |||
local loccases = {"inessive", "illative", "elative", "adessive", "allative", "ablative"} | |||
local all = {} | |||
local numbers = {"singular", "plural"} | |||
local ret = {} | |||
for _, case in ipairs(cases) do | |||
local case_short = mw.ustring.lower(case, 1, 1) | |||
table.insert(ret, "|- \n! " .. case .. "\n") | |||
table.insert(all, case_short) | |||
end | |||
for _, loccase in ipairs(loccases) do | |||
local loccase_short = sub(loccase, 1, 1) | |||
table.insert(ret, "! " .. loccase .. "\n") | |||
table.insert(all, loccase_short) | |||
end | |||
for _, single in ipairs(all) do | |||
table.insert(ret, "| " .. link(show_form(data.forms[single])) .. "\n") | |||
end | |||
return table.concat(ret) | |||
end | |||
local wikicode = [=[ | |||
<div class="mw-collapsible" style="border-collapse: collapse; margin: 0px 0px -1px 0px; padding: 2px; border: 1px solid #aaaaaa; text-align: center; font-size: 95%; overflow: auto; width: 70%;"> | |||
<div style="min-height: 1.6em; font-weight:bold; font-size: 100%; text-align: left; background-color:#efefef; padding-left: 10px; background-image: -webkit-gradient(linear, left top, left bottom, from(#EFEFEF), to(#DFDFDF), color-stop(0.6, #E3E3E3)); background-image: -moz-linear-gradient(top, #EFEFEF, #E3E3E3 60%, #DFDFDF); background-image: -o-linear-gradient(top, #EFEFEF, #E3E3E3 60%, #DFDFDF);">{{{pagename}}} — {{{gender}}} noun, {{{decl_type}}} | |||
</div> | |||
<div class="mw-collapsible-content" style="font-size: 100%;"> | |||
{| class="greentable" border="1px #aaaaaa solid" margin="1em 1em 1em 0" style="background: #f9f9f9; border-collapse: collapse;" width="100%" | |||
|- | |||
|+ style="font-weight: bold; ]=] .. (no_plural and "" or "min-width: 27em") .. [=[" colspan="]=] .. (no_plural and "3" or "6") .. [=[" | <span class="nowrap">Declension of ''<span lang="qhv">{{{pagename}}}</span>'' ]=] .. (no_plural and "<br>" or "") .. [=[(<small>{{{decl_type}}}</small>)</span> | |||
|- | |||
! style="min-width: 8em; background-color: #acf4cf" | | |||
! style="min-width: 8em; background-color: #acf4cf" | Singular]=] .. (no_plural and "\n" or [=[ | |||
! style="min-width: 8em; background-color: #acf4cf" | Plural | |||
! style="min-width: 8em; background-color: #acf4cf" | Paucal | |||
! style="min-width: 8em; background-color: #acf4cf" | Collective | |||
]=]) .. export.make_cases(data) .. [=[ | |||
|}]=] | |||
return gsub(wikicode, "{{{([a-z0-9_]+)}}}", repl) .. (not data.nocat and require("Module:utilities").format_categories(data..categories, lang) or "") | |||
end | end | ||
return export | return export | ||