Module:qhv-noun: Difference between revisions

no edit summary
No edit summary
No edit summary
 
(39 intermediate revisions by the same user not shown)
Line 3: Line 3:
local find = mw.ustring.find
local find = mw.ustring.find
local gmatch = mw.ustring.gmatch
local gmatch = mw.ustring.gmatch
local u = mw.ustring.char


local m_utils = require("Module:utilities")
local m_utils = require("Module:utilities")
local syllables = require("Module:qhv-pron").write_stress
local alldata = require('Module:qhv-noun/data')
local alldata = require('Module:qhv-noun/data')
local PAGENAME = mw.title.getCurrentTitle().text
local PAGENAME = gsub(mw.title.getCurrentTitle().text, "%s", " ")
local NAMESPACE = mw.title.getCurrentTitle().nsText
local NAMESPACE = mw.title.getCurrentTitle().nsText
local NONSYLLABIC = u(0x032F) -- non-syllabic, combining inverted breve below
local DIPHTHONG = u(0x035C) -- double articulation, combining double breve below
local lang = require("Module:languages").getByCode("qhv")


local export = {}
local export = {}
Line 13: Line 20:
local endings = {
local endings = {
["a"] = "1-l", ["ar"] = "1-a", ["y"] = "2-l", ["ys"] = "2-s", ["o"] = "3-l", ["os"] = "3-s", ["ȳs"] = "3-s-v", ["ks"] = "3-s-k",
["a"] = "1-l", ["ar"] = "1-a", ["y"] = "2-l", ["ys"] = "2-s", ["o"] = "3-l", ["os"] = "3-s", ["ȳs"] = "3-s-v", ["ks"] = "3-s-k",
["on"] = "3-t", ["or"] = "3-a", ["e"] = "4-l", ["es"] = "4-s", ["ien"] = "4-t", ["i"] = "5-l", ["is"] = "5-s", ["ir"] = "5-a",
["on"] = "3-t", ["or"] = "3-a", ["e"] = "4-l", ["es"] = "4-s", ["er"] = "4-a", ["ien"] = "4-t", ["i"] = "5-l", ["is"] = "5-s", ["ir"] = "5-a",
}
}


Line 19: Line 26:
["1-l"] = "a", ["1-a"] = "ar", ["2-l"] = "y", ["2-s"] = "ys", ["3-l"] = "o", ["3-s"] = "os", ["3-s-v"] = "ȳs", ["3-s-k"] = "ks",
["1-l"] = "a", ["1-a"] = "ar", ["2-l"] = "y", ["2-s"] = "ys", ["3-l"] = "o", ["3-s"] = "os", ["3-s-v"] = "ȳs", ["3-s-k"] = "ks",
["3-t"] = "on", ["3-a"] = "or", ["4-l"] = "e", ["4-s"] = "es", ["4-t"] = "ien", ["5-l"] = "i", ["5-s"] = "is", ["5-a"] = "ir",
["3-t"] = "on", ["3-a"] = "or", ["4-l"] = "e", ["4-s"] = "es", ["4-t"] = "ien", ["5-l"] = "i", ["5-s"] = "is", ["5-a"] = "ir",
["6-u"] = "", ["3-s-v"] = "s"
["6-u"] = "", ["3-s-h"] = "s", ["4-a"] = "er",
}
}


local function ncategories(categories)
local reanalyzed_endings = {
local out_categories = {}
["[i]ar"] = "c-1", ["yn"] = "p-2", ["yr"] = "c-2", ["un"] = "p-3", ["ȳn"] = "p-3", ["[i]or"] = "c-3", ["in"] = "p-4", ["er"] = "c-4",
for key, cat in ipairs(categories) do
["ir"] = "c-5", ["rjin"] = "p-5",
out_categories[key] = "[[Category:" .. cat .. "]]"
}
end


return table.concat(out_categories, "")
function export.detect_decl(word, number, class, reanalyzed)
end
local syllables = require("Module:qhv-pron").write_stress(word, true)
 
local IPA = require("Module:qhv-pron").crux(word)
function export.detect_decl(word, number, class)
local vowel = "[aeiouy]ː?"
if number and class then
if number and class then
local decl = number .. "-" .. class
local decl = number .. "-" .. class
return decl, {sub(word, 1, -(#endings_reverse[decl] + 1))}
return decl, {sub(word, 1, -(#endings_reverse[decl] + 1))}
elseif (find(word, "([aiuā][aeoāēō])s$") or find(word, "([āēīōūȳ])s$")) and require("Module:qhv-pron").write_stress(word, true) == 1 then
elseif word:find("illa$") then
return "3-s-h", {sub(word, 1, -2)}
return "-illa", {sub(word, 1, -2)}
elseif word == "skorlūs" then
return "3-s-h", {sub(word, 1, -2)}
elseif reanalyzed then
for ending, decl in pairs(reanalyzed_endings) do
if find(word, ending .. "$") then
return "r-" .. decl, {sub(word, 1, -(#ending + 1))}
end
end
elseif (not find(IPA, "ˈ")) and (find(IPA, NONSYLLABIC .. ".$") or find(IPA, DIPHTHONG .. vowel .. ".$") or find(IPA, "ː.$")) then
return "3-s-h", {sub(word, 1, -2)}
else
else
for ending, decl in pairs(endings) do
for ending, decl in pairs(endings) do
Line 45: Line 61:
end
end
return "6", {word}
return "6", {word}
end
function export.head(frame)
local arguments = frame.args
local numbers = nil
local decl = {}
local word = arguments.word or PAGENAME
local args = {}
if not alldata[word] then
if arguments.n and arguments.c and arguments[1] then
decl_type = arguments.n .. "-" .. arguments.c
numbers = {arguments[1]}
else
decl_type, numbers = export.detect_decl(word, arguments.n, arguments.c)
end
if not decl_type then
error("Unknown declension '" .. decl_type .. "'")
end
args = require("Module:parameters").process(arguments, alldata[decl_type].params, true)
if numbers then
for i, number in ipairs(numbers) do
args[i] = number
end
end
end
local pass = {forms = {}, categories = {}}
pass.head = arguments["head"] or nil
-- Generate the forms
if alldata[word] then
alldata[word](parent_args, pass)
else
alldata[decl_type](args, pass)
end
return pass.forms[arguments.f .. "-" .. arguments.d]
end
end


Line 96: Line 70:
local decl = {}
local decl = {}
local word = NAMESPACE == "Template" and "vala" or parent_args.word or PAGENAME
local word = NAMESPACE == "Template" and "vala" or parent_args.word or PAGENAME
local reanalyzed = parent_args["r"]
local args = {}
local args = {}


Line 106: Line 81:
numbers = {parent_args[1]}
numbers = {parent_args[1]}
else
else
decl_type, numbers = export.detect_decl(word, parent_args.n, parent_args.c)
decl_type, numbers = export.detect_decl(word, parent_args.n, parent_args.c, reanalyzed)
end
end
end
end
Line 126: Line 101:
pass.head = parent_args["head"] or nil
pass.head = parent_args["head"] or nil
pass.proper = parent_args["proper"] and true or false
pass.nocat = parent_args["nocat"] and true or false
-- Generate the forms
-- Generate the forms
Line 211: Line 188:
|}]=]
|}]=]


return (gsub(wikicode, "{{{([a-z0-9_]+)}}}", repl)) .. ncategories(pass.categories)
 
return gsub(wikicode, "{{{([a-z0-9_]+)}}}", repl) .. (not pass.nocat and require("Module:utilities").format_categories(pass.categories, lang) or "")
end
end




return export
return export