• The account request system seems to be hiding some requests. Join the Linguifex Discord server for support if you haven't been granted access after more than 24 hours. Be sure to check your spam folder! • The request form is only for screening out spambots. No need to share private info, just some conlanging experience to prove you're not a bot! • Donations for Linguifex upkeep can be given at Liberapay. Thank you! |
Module:siwa-noun/common: Difference between revisions
Jump to navigation
Jump to search
No edit summary |
No edit summary |
||
Line 1: | Line 1: | ||
local gsub = mw.ustring.gsub | local gsub = mw.ustring.gsub | ||
local paren = mw.ustring.char(0x0028) .. mw.ustring.char(0x0029) | |||
local export = {} | local export = {} | ||
Line 6: | Line 8: | ||
--local word = frame:getParent().args[1] -- for testing | --local word = frame:getParent().args[1] -- for testing | ||
local lenited = "" | local lenited = "" | ||
local v = "([aeiouyůõảẻỉỏủỷę | local v = "([aeiouyůõảẻỉỏủỷę" .. paren .. "])" | ||
local lenition_patterns = { | local lenition_patterns = { | ||
--geminated voiced stops | --geminated voiced stops | ||
Line 29: | Line 31: | ||
for regex, repl in pairs(lenition_patterns) do | for regex, repl in pairs(lenition_patterns) do | ||
if word:match(" | if word:match("%(.*%)") then | ||
lenited = gsub(word, " | lenited = gsub(word, "%(" .. regex .. "%)", repl, 1) | ||
else | else | ||
lenited = gsub(word, regex, repl, 1) | lenited = gsub(word, regex, repl, 1) |
Revision as of 22:49, 6 August 2021
- The following documentation is located at Module:siwa-noun/common/doc.[edit]
- Useful links: root page • root page's subpages • links • transclusions • testcases • sandbox
local gsub = mw.ustring.gsub
local paren = mw.ustring.char(0x0028) .. mw.ustring.char(0x0029)
local export = {}
function export.lenition(word)
--local word = frame:getParent().args[1] -- for testing
local lenited = ""
local v = "([aeiouyůõảẻỉỏủỷę" .. paren .. "])"
local lenition_patterns = {
--geminated voiced stops
["bb"] = "b", ["dd"] = "d", ["gg"] = "g", ["ġġ"] = "ġ",
--long sonorants
["gį"] = "į", ["mm"] = "m", ["ll"] = "l", ["nn"] = "n", ["rr"] = "r",
--uvular stops
["bġ"] = "p", ["pr"] = "p", ["dġ"] = "t", ["tr"] = "t",
--glottalized stops
["bm"] = "m", ["dn"] = "n", ["kn"] = "ng",
--consonant clusters
["dl"] = "l", ["([lr])pp"] = "%1p", ["([lr])tt"] = "%1t", ["([lrms])kk"] = "%1k",["ps"] = "bs", ["k([lvs])"] = "g%1",
--voiced consonants (▫, arbitrary character to compute diphthongs further down)
["vv"] = "ų", [v.."[vųbhḥgd]"..v] = "%1▫%2", ["d[aou]"] = "l", ["(.)[dġ]([ieůy])"] = "%1▫%2", ["(.)ġ[aou]"] = "%1vv",
--Ci#
["ri"] = "ṡi", ["nįi"] = "gįi", ["hhį"] = "ṡ",
--long voiceless consonants
["ḍb"] = "p", ["ḍḍ"] = "hh", ["ḍg"] = "k",
--semi-vowels
["[ou]ų"] = "ů",
}
for regex, repl in pairs(lenition_patterns) do
if word:match("%(.*%)") then
lenited = gsub(word, "%(" .. regex .. "%)", repl, 1)
else
lenited = gsub(word, regex, repl, 1)
end
if lenited ~= word then return lenited end
end
return word
end
function export.coalescence(word, stress)
local diphthongs = {
["[aę]▫[aę]"] = "ả", ["e▫e"] = "ẻ", ["i▫i"] = "ỉ", ["u▫[yuů]"] = "ủ", ["[yů]▫u"] = "ủ",
["a▫e"] = "ai", ["a▫o"] = "au", ["ę▫[uů]"] = "ay",
["ę▫[ei]"] = "ei", ["ę▫o"] = "eu",
["e▫[aę]"] = "ia", ["e▫o"] = "io", ["i▫y"] = "iů",
["[uo]▫e"] = "oi", ["o▫ů"] = "ou",
["[yůo]▫o"] = "uo",
["y▫y"] = "ỷ", ["ů▫ů"] = "ẻu",
["([ae])▫ů"] = "%1y", ["([iou])▫ę"] = "%1a",
["[yů]▫[aę]"] = "ůa", ["[yů]▫[ei]"] = "ůi", -- to screen out stressed vs. unstressed
}
local triphthongs = {
["([aoe])i([aoue])"] = "%1į%2", ["([aoe])ii"] = "%1gįi", ["([aoe])ỉ"] = "%1gįi",
["ai[yů]"] = "ey", ["([eo])i[yů]"] = "%1įů",
["u[ie]([aoue])"] = "uį%1", ["u[ie]i"] = "ugįi", ["uỉ"] = "ugįi", ["[uů][ie][yů]"] = "ůgįů",
["ie([aouy])"] = "igį%1", ["ieů"] = "igįy", ["iee"] = "iẻ",
["ůi([aoe])"] = "ůį%1", ["ůii"] = "ůgįi", ["ůỉ"] = "ůgįi", ["ůiu"] = "ůgįů",
["ay([ae])"] = "ęm%1", ["ay([oiů])"] = "ęb%1", ["ay[uy]"] = "ębů",
["uo([aue])"] = "um%1", ["uo([oi])"] = "ub%1", ["uo[yů]"] = "ůbů",
["au([aue])"] = "am%1", ["au([oi])"] = "ab%1", ["au[yů]"] = "amů",
["o[ua]([aue])"] = "om%1", ["o[ua]([oi])"] = "ob%1", ["o[ua][yů]"] = "omů",
["[eẻ][uy]([ae])"] = "ům%1", ["[eẻ][uy]([oi])"] = "ůb%1", ["[eẻ][ua][yůu]"] = "ůbů",
["iu([ae])"] = "ivv%1", ["iu([oui])"] = "ib%1", ["iu[yů]"] = "ivvů",
["ả([aoue])"] = "ęį%1", ["ải"] = "ęgįi", ["[ảẻ][yů]"] = "ey",
["ỏ([aue])"] = "om%1", ["([ỏỷ])([oi])"] = "%1b%2", ["ỏ[yů]"] = "omů",
["([ủỷ])([ae])"] = "%1m%2", ["ủ([oui])"] = "ub%1", ["ủ[yů]"] = "ůbů",
["([ẻỉ])([aou])"] = "%1vv%2", ["ẻ([ie])"] = "egį%1",
["ỉi"] = "iddįi", ["ỷ[yů]"] = "yby",
}
for regex, repl in pairs(diphthongs) do
word = gsub(word, regex, repl)
end
if stress then
word = gsub(word, "[ůy][aęei]", "ỷ")
end
word = gsub(word, "▫", "")
--[[local c3 = word
for regex, repl in pairs(triphthongs) do
word = gsub(word, regex, repl)
if word ~= c3 then break end
end]]
return word
end
export.stressed_vowels = {
["a"] = "a", ["ả"] = "a", ["au"] = "a", ["ai"] = "a", ["oa"] = "a",
["e"] = "e", ["ẻ"] = "e", ["ę"] = "e", ["ei"] = "e", ["ay"] = "e", ["eu"] = "e",
["i"] = "i", ["ỉ"] = "i", ["ia"] = "i", ["ie"] = "i", ["io"] = "i", ["iu"] = "i",
["o"] = "o", ["ỏ"] = "o", ["õ"] = "o", ["õu"] = "o", ["oi"] = "o", ["ou"] = "o",
["u"] = "u", ["ủ"] = "u", ["uo"] = "u", ["ui"] = "u",
["y"] = "y", ["ỷ"] = "y", ["ů"] = "y", ["ẻu"] = "y", ["ey"] = "y", ["ůa"] = "y", ["ůi"] = "y",
}
export.digraphs_to_single = {
["ts"] = "ʦ", ["tṡ"] = "ʨ", ["dį"] = "ʥ", ["ng"] = "ŋ", ["nį"] = "ɲ",
["kį"] = "c", ["gį"] = "ɟ", ["hh"] = "ħ", ["ḍḍ"] = "ð", ["dl"] = "ɬ", ["o̊"] = "ȯ",
["õu"] = "ở", ["ẻu"] = "ử",
}
return export