Module:mg-spel: Difference between revisions
Jump to navigation
Jump to search
Implements
No edit summary |
No edit summary |
||
(29 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
local gsub = mw.ustring.gsub | local gsub = mw.ustring.gsub | ||
local PAGENAME = gsub(mw.title.getCurrentTitle().text, "%s", " ") | |||
local match = mw.ustring.match | local match = mw.ustring.match | ||
local gmatch = mw.ustring.gmatch | local gmatch = mw.ustring.gmatch | ||
Line 9: | Line 9: | ||
local export = {} | local export = {} | ||
local function link(term) | |||
return "[[Contionary:" .. term .. "|" .. term .. "]]" | |||
end | |||
function export.alter(frame) | function export.alter(frame) | ||
local ret = {}; local qs = {} | local ret = {}; local qs = {} | ||
local term = frame:getParent().args[1] or PAGENAME | local term = mw.title.getCurrentTitle().nsText == "Template" and "cosmaile" or frame:getParent().args[1] or PAGENAME | ||
local e = term; local a = term; local c = term; local s = term | local e = term; local a = term; local c = term; local s = term | ||
Line 18: | Line 22: | ||
-- Spanish | -- Spanish | ||
e = e:gsub("il", "ll") | e = e:gsub("il(.)", "ll%1") | ||
e = e:gsub("v", "b") | e = e:gsub("v", "b") | ||
e = e:gsub("[gh]", " | e = e:gsub("([^c])[gh]", "%1j") | ||
-- Asturian | -- Asturian | ||
a = a:gsub("il", "ll") | a = a:gsub("il(.)", "ll%1") | ||
a = a:gsub("v", "b") | a = a:gsub("v", "b") | ||
-- Southern | -- Southern | ||
s = s:gsub("ñ", "nh") | s = s:gsub("ñ", "nh") | ||
s = s:gsub("il", "lh") | s = s:gsub("il(.)", "lh%1") | ||
s = s:gsub("v", "b") | s = s:gsub("v", "b") | ||
local lh = match(s, "lh") | local lh = match(s, "lh") | ||
Line 35: | Line 39: | ||
c = c:gsub("c([aou])", "k%1") | c = c:gsub("c([aou])", "k%1") | ||
c = c:gsub("qu([ei])", "k%1") | c = c:gsub("qu([ei])", "k%1") | ||
c = c:gsub("ñ", " | c = c:gsub("([^i])ñ", "%1in") | ||
c = c:gsub("x", " | c = c:gsub("([^i])x", "%1is") | ||
-- disclaimer: awful approach below, your physical and mental integrity may be at risk | -- disclaimer: awful approach below, your physical and mental integrity may be at risk | ||
Line 42: | Line 46: | ||
if e == a and a == s then | if e == a and a == s then | ||
qs = {"Spanish", "Asturian", "Southern"} | qs = {"Spanish", "Asturian", "Southern"} | ||
table.insert(ret, "* " .. | if e ~= term then table.insert(ret, "* " .. link(e) .. " " .. m_q.format_qualifier(qs) .. "\n") end | ||
elseif e == a then | elseif e == a then | ||
table.insert(qs, "Spanish") | table.insert(qs, "Spanish") | ||
table.insert(qs, "Asturian") | table.insert(qs, "Asturian") | ||
table.insert(ret, "* " .. | if e ~= term then table.insert(ret, "* " .. link(e) .. " " .. m_q.format_qualifier(qs) .. "\n") end | ||
table.insert(ret, "* " .. | if s ~= term then table.insert(ret, "* " .. link(s) .. (lh and ", " .. link(s:gsub("lh", "j")) or "") | ||
.. " " .. m_q.format_qualifier({"Southern"}) .. "\n") end | |||
elseif e == s then | elseif e == s then | ||
table.insert(qs, "Spanish") | table.insert(qs, "Spanish") | ||
table.insert(qs, "Southern") | table.insert(qs, "Southern") | ||
table.insert(ret, "* " .. | if e ~= term then table.insert(ret, "* " .. link(e) .. " " .. m_q.format_qualifier(qs) .. "\n") end | ||
table.insert(ret, "* " .. | if a ~= term then table.insert(ret, "* " .. link(a) .. " " .. m_q.format_qualifier({"Asturian"}) .. "\n") end | ||
elseif a == s then | elseif a == s then | ||
table.insert(qs, "Asturian") | table.insert(qs, "Asturian") | ||
table.insert(qs, "Southern") | table.insert(qs, "Southern") | ||
table.insert(ret, "* " .. | if a ~= term then table.insert(ret, "* " .. link(a) .. " " .. m_q.format_qualifier(qs) .. "\n") end | ||
table.insert(ret, "* " .. | if e ~= term then table.insert(ret, "* " .. link(e) .. " " .. m_q.format_qualifier({"Spanish"}) .. "\n") end | ||
else | else | ||
table.insert(ret, "* " .. | if e ~= term then table.insert(ret, "* " .. link(e) .. " " .. m_q.format_qualifier({"Spanish"}) .. "\n") end | ||
table.insert(ret, "* " .. | if a ~= term then table.insert(ret, "* " .. link(a) .. " " .. m_q.format_qualifier({"Asturian"}) .. "\n") end | ||
table.insert(ret, "* " .. | if s ~= term then table.insert(ret, "* " .. link(s) .. (lh and ", " .. link(s:gsub("lh", "j")) or "") | ||
.. " " .. m_q.format_qualifier({"Southern"}) .. "\n") end | |||
end | end | ||
if c ~= term then | if c ~= term then | ||
table.insert(ret, "* " .. | table.insert(ret, "* " .. link(c) .. " " .. m_q.format_qualifier({"Celtic"}) .. "\n") | ||
end | end | ||
table.insert(ret, 1, "===Alternative forms===") | |||
table.insert(ret, 2, "\n") | |||
if e == term and a == term and c == term and s == term then | if e == term and a == term and c == term and s == term then | ||
ret = {"aa", "aa"} | |||
end | end | ||
Line 81: | Line 86: | ||
function export.mutate(frame) | function export.mutate(frame) | ||
local term = frame:getParent().args[1] or PAGENAME | local term = mw.title.getCurrentTitle().nsText == "Template" and "bea" or frame:getParent().args[1] or PAGENAME | ||
local unchanged = "''unchanged''" | local unchanged = "''unchanged''" | ||
local | local soft = { | ||
local | ["p"] = "b", ["b"] = "v", ["d"] = "z", ["t"] = "d", ["g"] = "h", ["c"] = "g", ["q"] = "g", | ||
["P"] = "B", ["B"] = "V", ["D"] = "Z", ["T"] = "D", ["G"] = "H", ["C"] = "G", ["Q"] = "G", | |||
} | |||
local nasal = { | |||
["m"] = "v", ["b"] = "m", ["d"] = "n", ["g"] = "k", | |||
["M"] = "V", ["B"] = "M", ["D"] = "N", ["G"] = "K" | |||
} | |||
local function aw(term, mutation) | local function aw(term, mutation) | ||
local mutated = | local mutated = "" | ||
for regex, repl in pairs(mutation | for regex, repl in pairs(mutation) do | ||
mutated = gsub(term, "^" .. regex, repl, 1) | mutated = gsub(term, "^" .. regex, repl, 1) | ||
mutated = gsub(mutated, "^k(.)", function(foo) return match(foo, "[aou]") and "c" or "qu" end) | mutated = gsub(mutated, "^k(.)", function(foo) return (match(foo, "[aou]") and "c" or "qu") .. foo end) | ||
if mutated ~= | if mutated ~= term then return mutated end | ||
end | end | ||
return | return unchanged | ||
end | end | ||
local function link(term | local function link(term) | ||
local links = {} | local links = {} | ||
for alt in gmatch(term, "([^%s,]+)") do | for alt in gmatch(term, "([^%s,]+)") do | ||
if | if alt == unchanged then return unchanged end | ||
alt = "[[Contionary:" .. alt .. "|" .. alt .. "]]" | alt = "[[Contionary:" .. alt .. "|" .. alt .. "]]" | ||
table.insert(links, alt) | table.insert(links, alt) | ||
Line 119: | Line 128: | ||
! Radical | ! Radical | ||
! Soft | ! Soft | ||
! | ! Nasal | ||
|- | |- | ||
| ]=] .. link(term, uc) .. [=[​ | | ]=] .. link(term, uc) .. [=[​ | ||
| ]=] .. link(aw(term, | | ]=] .. link(aw(term, soft)) .. [=[​ | ||
| ]=] .. link(aw(term, | | ]=] .. link(aw(term, nasal)) .. [=[​ | ||
|- | |- | ||
| colspan=3 style="font-size: 89%; text-align: left;" | <div class="dummy-footnote" style="font-size: 90%; margin-bottom: 0.5em; margin-left: 2em;">1. <span style="color: #002bb8;">^</span> <span class="citation">Christian Evans, (2021). <span | | colspan=3 style="font-size: 89%; text-align: left;" | <div class="dummy-footnote" style="font-size: 90%; margin-bottom: 0.5em; margin-left: 2em;">1. <span style="color: #002bb8;">^</span> <span class="citation">Christian Evans, (2021). <span title="See link">[[Template:mg-mut/doc#References|“Mutation in Modern Gallaecian”]]</span>, ''Segments'' (01-07), April 2021.</span></div> | ||
|} | |}]=] | ||
return wikicode | return wikicode |
Latest revision as of 15:15, 27 June 2023
- The following documentation is located at Module:mg-spel/doc.[edit]
- Useful links: subpage list • links • transclusions • testcases • sandbox
Implements
{{mg-mut}}
and {{mg-alter}}
.
local gsub = mw.ustring.gsub
local PAGENAME = gsub(mw.title.getCurrentTitle().text, "%s", " ")
local match = mw.ustring.match
local gmatch = mw.ustring.gmatch
local lang = require("Module:languages").getByCode("cel-gal")
local m_l = require('Module:links')
local m_q = require('Module:qualifier')
local export = {}
local function link(term)
return "[[Contionary:" .. term .. "|" .. term .. "]]"
end
function export.alter(frame)
local ret = {}; local qs = {}
local term = mw.title.getCurrentTitle().nsText == "Template" and "cosmaile" or frame:getParent().args[1] or PAGENAME
local e = term; local a = term; local c = term; local s = term
-- Spanish
e = e:gsub("il(.)", "ll%1")
e = e:gsub("v", "b")
e = e:gsub("([^c])[gh]", "%1j")
-- Asturian
a = a:gsub("il(.)", "ll%1")
a = a:gsub("v", "b")
-- Southern
s = s:gsub("ñ", "nh")
s = s:gsub("il(.)", "lh%1")
s = s:gsub("v", "b")
local lh = match(s, "lh")
-- Celtic
c = c:gsub("c([aou])", "k%1")
c = c:gsub("qu([ei])", "k%1")
c = c:gsub("([^i])ñ", "%1in")
c = c:gsub("([^i])x", "%1is")
-- disclaimer: awful approach below, your physical and mental integrity may be at risk
if e == a and a == s then
qs = {"Spanish", "Asturian", "Southern"}
if e ~= term then table.insert(ret, "* " .. link(e) .. " " .. m_q.format_qualifier(qs) .. "\n") end
elseif e == a then
table.insert(qs, "Spanish")
table.insert(qs, "Asturian")
if e ~= term then table.insert(ret, "* " .. link(e) .. " " .. m_q.format_qualifier(qs) .. "\n") end
if s ~= term then table.insert(ret, "* " .. link(s) .. (lh and ", " .. link(s:gsub("lh", "j")) or "")
.. " " .. m_q.format_qualifier({"Southern"}) .. "\n") end
elseif e == s then
table.insert(qs, "Spanish")
table.insert(qs, "Southern")
if e ~= term then table.insert(ret, "* " .. link(e) .. " " .. m_q.format_qualifier(qs) .. "\n") end
if a ~= term then table.insert(ret, "* " .. link(a) .. " " .. m_q.format_qualifier({"Asturian"}) .. "\n") end
elseif a == s then
table.insert(qs, "Asturian")
table.insert(qs, "Southern")
if a ~= term then table.insert(ret, "* " .. link(a) .. " " .. m_q.format_qualifier(qs) .. "\n") end
if e ~= term then table.insert(ret, "* " .. link(e) .. " " .. m_q.format_qualifier({"Spanish"}) .. "\n") end
else
if e ~= term then table.insert(ret, "* " .. link(e) .. " " .. m_q.format_qualifier({"Spanish"}) .. "\n") end
if a ~= term then table.insert(ret, "* " .. link(a) .. " " .. m_q.format_qualifier({"Asturian"}) .. "\n") end
if s ~= term then table.insert(ret, "* " .. link(s) .. (lh and ", " .. link(s:gsub("lh", "j")) or "")
.. " " .. m_q.format_qualifier({"Southern"}) .. "\n") end
end
if c ~= term then
table.insert(ret, "* " .. link(c) .. " " .. m_q.format_qualifier({"Celtic"}) .. "\n")
end
table.insert(ret, 1, "===Alternative forms===")
table.insert(ret, 2, "\n")
if e == term and a == term and c == term and s == term then
ret = {"aa", "aa"}
end
return table.concat(ret)
end
function export.mutate(frame)
local term = mw.title.getCurrentTitle().nsText == "Template" and "bea" or frame:getParent().args[1] or PAGENAME
local unchanged = "''unchanged''"
local soft = {
["p"] = "b", ["b"] = "v", ["d"] = "z", ["t"] = "d", ["g"] = "h", ["c"] = "g", ["q"] = "g",
["P"] = "B", ["B"] = "V", ["D"] = "Z", ["T"] = "D", ["G"] = "H", ["C"] = "G", ["Q"] = "G",
}
local nasal = {
["m"] = "v", ["b"] = "m", ["d"] = "n", ["g"] = "k",
["M"] = "V", ["B"] = "M", ["D"] = "N", ["G"] = "K"
}
local function aw(term, mutation)
local mutated = ""
for regex, repl in pairs(mutation) do
mutated = gsub(term, "^" .. regex, repl, 1)
mutated = gsub(mutated, "^k(.)", function(foo) return (match(foo, "[aou]") and "c" or "qu") .. foo end)
if mutated ~= term then return mutated end
end
return unchanged
end
local function link(term)
local links = {}
for alt in gmatch(term, "([^%s,]+)") do
if alt == unchanged then return unchanged end
alt = "[[Contionary:" .. alt .. "|" .. alt .. "]]"
table.insert(links, alt)
end
return table.concat(links, ", ")
end
local reference = ""
local wikicode = [=[
{| border="1" cellpadding="4" cellspacing="0" class="inflection-table" style="text-align: center; margin: 0.5em 0 0 0; border-style: solid; border: 1px solid #7f7f7f; border-right-width: 2px; border-bottom-width: 2px; border-collapse: collapse; background-color: #F8F8F8; font-size: 95%;"
|-
! colspan="3" | [[Modern Gallaecian mutation]]<sup class="reference nowrap ltr" style="color:#002bb8;">[1]</sup>
|-
! Radical
! Soft
! Nasal
|-
| ]=] .. link(term, uc) .. [=[​
| ]=] .. link(aw(term, soft)) .. [=[​
| ]=] .. link(aw(term, nasal)) .. [=[​
|-
| colspan=3 style="font-size: 89%; text-align: left;" | <div class="dummy-footnote" style="font-size: 90%; margin-bottom: 0.5em; margin-left: 2em;">1. <span style="color: #002bb8;">^</span> <span class="citation">Christian Evans, (2021). <span title="See link">[[Template:mg-mut/doc#References|“Mutation in Modern Gallaecian”]]</span>, ''Segments'' (01-07), April 2021.</span></div>
|}]=]
return wikicode
end
return export