local export = {}
local pos_functions = {}
local rfind = mw.ustring.find
local rmatch = mw.ustring.match
local rsplit = mw.text.split
local lang = require("Module:languages").getByCode("klj")
local m_scripts = require("Module:scripts")
local m_common = require("Module:klj-common")
local function is_not_empty(term)
return term ~= nil and term ~= ''
end
local suffix_categories = { = true, = true}
local function track(page)
require("Module:debug").track("klj-headword/" .. page)
return true
end
local function add_space_word_links(space_word, split_dash)
local space_word_no_punct, punct = rmatch(space_word, "^(.*)()$")
space_word_no_punct = space_word_no_punct or space_word
punct = punct or ""
local words
-- don’t split prefixes and suffixes
if not split_dash or rfind(space_word_no_punct, "^%-") or
rfind(space_word_no_punct, "%-$") then
words = {space_word_no_punct}
else
words = rsplit(space_word_no_punct, "%-")
end
local linked_words = {}
for _, word in ipairs(words) do
word = "]"
table.insert(linked_words, word)
end
return table.concat(linked_words, "-") .. punct
end
local function add_lemma_links(lemma, split_dash)
if not rfind(lemma, " ") then split_dash = true end
local words = rsplit(lemma, " ")
local linked_words = {}
for _, word in ipairs(words) do
table.insert(linked_words, add_space_word_links(word, split_dash))
end
local retval = table.concat(linked_words, " ")
-- If we ended up with a single link consisting of the entire lemma,
-- remove the link.
local unlinked_retval = rmatch(retval, "^%]*)%]%]$")
return unlinked_retval or retval
end
-- The main entry point.
-- This is the only function that can be invoked from a template.
function export.show(frame)
local PAGENAME = mw.title.getCurrentTitle().text
local poscat = frame.args or error(
"Part of speech has not been specified. Please pass parameter 1 to the module invocation.")
local params = {
= {list = true},
= {type = "boolean"},
= {alias_of = "splithyph", type = "boolean"},
= {type = "boolean"},
= {type = "boolean"}
}
if rfind(PAGENAME, " ") then track("space") end
if pos_functions then
for key, val in pairs(pos_functions.params) do
params = val
end
end
local parargs = frame:getParent().args
if parargs.splitdash then track("splitdash") end
local args = require("Module:parameters").process(parargs, params)
local heads = args
if pos_functions and pos_functions.param1_is_head and
args then table.insert(heads, 1, args) end
if args.nolinkhead then
if #heads == 0 then heads = {PAGENAME} end
else
local auto_linked_head = add_lemma_links(PAGENAME, args)
if #heads == 0 then
heads = {auto_linked_head}
else
for _, head in ipairs(heads) do
if head == auto_linked_head then
track("redundant-head")
end
end
end
end
local data = {
lang = lang,
pos_category = poscat,
categories = {},
heads = heads,
genders = {},
inflections = {}
}
if args then
data.pos_category = "suffixes"
if suffix_categories then
local singular_poscat = poscat:gsub("s$", "")
table.insert(data.categories, lang:getCanonicalName() .. " " ..
singular_poscat .. "-forming suffixes")
else
error("No category exists for suffixes forming " .. poscat .. ".")
end
end
if pos_functions then pos_functions.func(args, data) end
return require("Module:headword").full_headword(data)
end
local function do_adjective(pos)
return {
params = {
= {} -- hyphen (-) if incomparable, intensive form otherwise
},
func = function(args, data)
local PAGENAME = mw.title.getCurrentTitle().text
local script = lang:findBestScript(PAGENAME):getCode()
local function comp()
if rfind(args1, "") then
return "]"
else
return "]"
end
end
if args == "-" then
table.insert(data.inflections, {label = "not comparable"})
else
table.insert(data.inflections,
{label = "comparative", PAGENAME .. comp()})
end
end
}
end
local function get_noun_pos(is_proper)
return {
params = { = {}, = {}, = {}, = {}, = {}, = {}},
func = function(args, data)
local PAGENAME = mw.title.getCurrentTitle().text
local script = lang:findBestScript(PAGENAME):getCode()
local args1 = is_not_empty(args) and args or ""
local args2 = is_not_empty(args) and args or ""
local stem = args
local stem = args
local nb = args
local sing = args
if args1 == "" and args2 == "" then
args1, args2 = m_common.getType(PAGENAME)
elseif args1 == "" then
track("args2 was overridden")
args1, _ = m_common.getType(PAGENAME)
elseif args2 == "" then
track("args1 was overridden")
_, args2 = m_common.getType(PAGENAME)
else
track("args1 and args2 were overridden")
end
local function stemforpl()
if args2 == "cc" then
return mw.ustring.sub(PAGENAME, 1, -2)
else
return PAGENAME
end
end
local function kljv2()
if rfind(args1, "") then
return "ə"
else
return "a"
end
end
local function kljv3()
if rfind(args1, "") then
return "ü"
else
return "ı"
end
end
local function n() return "ñ" end
local function l() return "l" end
local function r() return "r" end
if script == "Latn" then
if args2 == "c" or args2 == "cc" or args2 == "q" or args2 == "k" then
if stem then
if sing == "no" then
if nb == "no" then
table.insert("?")
else
table.insert(data.genders, {"p"})
end
else
if nb == "no" then
table.insert(data.inflections, {
label = "definite accusative",
accel = {form = "def|acc|s"},
stem .. kljv3()
})
else
table.insert(data.inflections, {
label = "definite accusative",
accel = {form = "def|acc|s"},
stem .. kljv3()
})
table.insert(data.inflections, {
label = "plural",
accel = {form = "nom|p"},
PAGENAME .. l() .. kljv2() .. r()
})
end
end
else
if sing == "no" then
if nb == "no" then
table.insert("?")
else
table.insert(data.genders, {"p"})
end
else
if nb == "no" then
table.insert(data.inflections, {
label = "definite accusative",
accel = {form = "def|acc|s"},
stemforacc() .. kljv3()
})
else
table.insert(data.inflections, {
label = "definite accusative",
accel = {form = "def|acc|s"},
stemforacc() .. kljv3()
})
table.insert(data.inflections, {
label = "plural",
accel = {form = "nom|p"},
stemforpl() .. l() .. kljv2() .. r()
})
end
end
end
else
if stem then
if sing == "no" then
if nb == "no" then
table.insert("?")
else
table.insert(data.genders, {"p"})
end
else
if nb == "no" then
table.insert(data.inflections, {
label = "definite accusative",
accel = {form = "def|acc|s"},
stem .. kljv3()
})
else
table.insert(data.inflections, {
label = "definite accusative",
accel = {form = "def|acc|s"},
stem .. kljv3()
})
table.insert(data.inflections, {
label = "plural",
accel = {form = "nom|p"},
PAGENAME .. l() .. kljv2() .. r()
})
end
end
else
if sing == "no" then
if nb == "no" then
table.insert("?")
else
table.insert(data.genders, {"p"})
end
else
if nb == "no" then
table.insert(data.inflections, {
label = "definite accusative",
accel = {form = "def|acc|s"},
PAGENAME .. n()
})
else
table.insert(data.inflections, {
label = "definite accusative",
accel = {form = "def|acc|s"},
PAGENAME .. n()
})
table.insert(data.inflections, {
label = "plural",
accel = {form = "nom|p"},
PAGENAME .. l() .. kljv2() .. r()
})
end
end
end
end
end
end
}
end
pos_functions = get_noun_pos(false)
pos_functions = get_noun_pos(true)
return export