Module:snon-mut: Difference between revisions
Jump to navigation
Jump to search
No edit summary |
Tag: Undo |
||
| (44 intermediate revisions by 2 users not shown) | |||
| Line 1: | Line 1: | ||
local | local gsub = mw.ustring.gsub | ||
local match = mw.ustring.match | |||
local gmatch = mw.ustring.gmatch | |||
local sub = mw.ustring.sub | |||
local upper = mw.ustring.upper | |||
local | local m_l = require("Module:links") | ||
local | local lang = require("Module:languages").getByCode("snon") | ||
local PAGENAME = mw.loadData("Module:headword/data").pagename | |||
local | |||
local | local export = {} | ||
local | local words = mw.text.split("hello world hi", "%s") | ||
local | local first = table.remove(words, 1) | ||
local ords = words | |||
function export. | function export.mutations(ret, args) | ||
local | local words = mw.text.split(ret.radical or args.word, "%s") | ||
local lower_radical = mw.ustring.lower(words[1]) | |||
local first_letter = match(lower_radical, "^%W*(%w)") | |||
local is_proper = ret.radical ~= lower_radical | |||
local vowels = "([aeiouàèìòù])" | |||
local apostrophe | |||
words[1] = " " | |||
words = table.concat(words, " ") | |||
if | if args.len then | ||
ret.lenition = args.len | |||
elseif match(first_letter, "[bcdfgmptsnv]") then | |||
ret.lenition = ret.radical:gsub("^(.)", "%1h") .. words | |||
elseif match(first_letter, vowels) then -- h-prothesis | |||
ret.lenition = "h'" .. lower_radical .. words | |||
apostrophe = true | |||
else | |||
ret.lenition = "-" | |||
end | end | ||
local | local eclipsis_prefixes = { | ||
["b"] = "m", ["c"] = "g", ["d"] = "n", ["f"] = "v", ["g"] = "n", | |||
["p"] = "b", ["t"] = "d", ["h"] = "gh", ["s"] = "z", ["v"] = "b", | |||
} | |||
if args.ecl then | |||
ret.eclipsis = args.ecl | |||
elseif eclipsis_prefixes[first_letter] then | |||
ret.eclipsis = eclipsis_prefixes[first_letter] .. sub(lower_radical, 2, -1) .. words | |||
elseif match(first_letter, vowels) then | |||
ret.eclipsis = "n'" .. lower_radical .. words | |||
apostrophe = true | |||
elseif match(lower_radical, "^ghi" .. vowels) then | |||
ret.eclipsis = gsub(lower_radical, "^ghi" .. vowels, "ni%1") .. words | |||
else | |||
ret.eclipsis = "-" | |||
end | end | ||
if | if is_proper then | ||
if apostrophe then | |||
ret.eclipsis = "n" .. gsub(ret.eclipsis, "^n'(%w)", upper) | |||
ret.lenition = "h" .. gsub(ret.lenition, "^h'(%w)", upper) | |||
else | |||
ret.eclipsis = gsub(ret.eclipsis, "^(%w)", upper) | |||
ret.lenition = gsub(ret.lenition, "^(%w)", upper) | |||
end | end | ||
end | end | ||
return ret, apostrophe | |||
return | |||
end | end | ||
function export.mutation_table(frame) | |||
local params = { | local params = { | ||
[1] = {}, | [1] = {default = PAGENAME, template_default = "bèdh"}, | ||
[" | ["ecl"] = {}, | ||
[" | ["len"] = {}, | ||
[" | |||
[" | ["temp_len"] = {type = "boolean"}, | ||
["temp_ecl"] = {type = "boolean"}, | |||
} | } | ||
local | local args = require("Module:parameters").process(frame:getParent().args, params) | ||
local is_vowel | |||
local ret = {radical = args[1]} | |||
ret, is_vowel = export.mutations(ret, args) | |||
if args.temp_len then | |||
return ret.lenition == "-" and ret.radical or ret.lenition | |||
end | end | ||
if | |||
if args.temp_ecl then | |||
return ret.eclipsis == "-" and ret.radical or ret.eclipsis | |||
end | end | ||
local links = {} | |||
for k, v in pairs(ret) do | |||
if v == "-" then | |||
links[k] = "''not applicable''" | |||
else | |||
links[k] = m_l.full_link{lang = lang, term = v} | |||
end | |||
end | end | ||
return | |||
local table_args = { | |||
palette = "blue", | |||
notes = "<p style=font-size:85%;>''Note:'' Certain mutated forms of some words can never occur in standard Scots Norse.<br>All possible mutated forms are displayed for convenience.</p>", | |||
title = "[[Scots Norse#Mutation|Mutated forms]] of " .. ret.radical, | |||
-- class = "wide", | |||
} | |||
local contents = [[ | |||
|- | |||
! radical !! ]] .. (is_vowel and "h-prothesis" or "lenition") .. [[ !! eclipsis | |||
|- | |||
| {radical} || {lenition} || {eclipsis} | |||
]] | |||
contents = require('Module:string utilities').format(contents, links) | |||
return require("Module:inflection table").inflection_table(frame, table_args, contents) | |||
end | end | ||
return export | return export | ||
Latest revision as of 19:38, 20 May 2026
- This module lacks a documentation subpage. Please create it.
- Useful links: subpage list • links • transclusions • testcases • sandbox
local gsub = mw.ustring.gsub
local match = mw.ustring.match
local gmatch = mw.ustring.gmatch
local sub = mw.ustring.sub
local upper = mw.ustring.upper
local m_l = require("Module:links")
local lang = require("Module:languages").getByCode("snon")
local PAGENAME = mw.loadData("Module:headword/data").pagename
local export = {}
local words = mw.text.split("hello world hi", "%s")
local first = table.remove(words, 1)
local ords = words
function export.mutations(ret, args)
local words = mw.text.split(ret.radical or args.word, "%s")
local lower_radical = mw.ustring.lower(words[1])
local first_letter = match(lower_radical, "^%W*(%w)")
local is_proper = ret.radical ~= lower_radical
local vowels = "([aeiouàèìòù])"
local apostrophe
words[1] = " "
words = table.concat(words, " ")
if args.len then
ret.lenition = args.len
elseif match(first_letter, "[bcdfgmptsnv]") then
ret.lenition = ret.radical:gsub("^(.)", "%1h") .. words
elseif match(first_letter, vowels) then -- h-prothesis
ret.lenition = "h'" .. lower_radical .. words
apostrophe = true
else
ret.lenition = "-"
end
local eclipsis_prefixes = {
["b"] = "m", ["c"] = "g", ["d"] = "n", ["f"] = "v", ["g"] = "n",
["p"] = "b", ["t"] = "d", ["h"] = "gh", ["s"] = "z", ["v"] = "b",
}
if args.ecl then
ret.eclipsis = args.ecl
elseif eclipsis_prefixes[first_letter] then
ret.eclipsis = eclipsis_prefixes[first_letter] .. sub(lower_radical, 2, -1) .. words
elseif match(first_letter, vowels) then
ret.eclipsis = "n'" .. lower_radical .. words
apostrophe = true
elseif match(lower_radical, "^ghi" .. vowels) then
ret.eclipsis = gsub(lower_radical, "^ghi" .. vowels, "ni%1") .. words
else
ret.eclipsis = "-"
end
if is_proper then
if apostrophe then
ret.eclipsis = "n" .. gsub(ret.eclipsis, "^n'(%w)", upper)
ret.lenition = "h" .. gsub(ret.lenition, "^h'(%w)", upper)
else
ret.eclipsis = gsub(ret.eclipsis, "^(%w)", upper)
ret.lenition = gsub(ret.lenition, "^(%w)", upper)
end
end
return ret, apostrophe
end
function export.mutation_table(frame)
local params = {
[1] = {default = PAGENAME, template_default = "bèdh"},
["ecl"] = {},
["len"] = {},
["temp_len"] = {type = "boolean"},
["temp_ecl"] = {type = "boolean"},
}
local args = require("Module:parameters").process(frame:getParent().args, params)
local is_vowel
local ret = {radical = args[1]}
ret, is_vowel = export.mutations(ret, args)
if args.temp_len then
return ret.lenition == "-" and ret.radical or ret.lenition
end
if args.temp_ecl then
return ret.eclipsis == "-" and ret.radical or ret.eclipsis
end
local links = {}
for k, v in pairs(ret) do
if v == "-" then
links[k] = "''not applicable''"
else
links[k] = m_l.full_link{lang = lang, term = v}
end
end
local table_args = {
palette = "blue",
notes = "<p style=font-size:85%;>''Note:'' Certain mutated forms of some words can never occur in standard Scots Norse.<br>All possible mutated forms are displayed for convenience.</p>",
title = "[[Scots Norse#Mutation|Mutated forms]] of " .. ret.radical,
-- class = "wide",
}
local contents = [[
|-
! radical !! ]] .. (is_vowel and "h-prothesis" or "lenition") .. [[ !! eclipsis
|-
| {radical} || {lenition} || {eclipsis}
]]
contents = require('Module:string utilities').format(contents, links)
return require("Module:inflection table").inflection_table(frame, table_args, contents)
end
return export