Module:anui-headword: Difference between revisions

no edit summary
No edit summary
No edit summary
 
(14 intermediate revisions by the same user not shown)
Line 17: Line 17:


local consonant = "[ǃǂǁʘʼʇxqrʛɴɬšṣschjklmptŋṉṭṯ]"
local consonant = "[ǃǂǁʘʼʇxqrʛɴɬšṣschjklmptŋṉṭṯ]"
local vowel = "[aeiouàèìòùʼãĩõũḛḭṵ" .. TILDEB .. "]"
local vowel = "[aeiouàèìòùãĩõũḛḭṵ" .. TILDEB .. "v@]"


local function m(word)
local function m(word)
-- as in [[Module:anui-pron]], account for syllabic m
word = word:gsub("mʼm", "v")
--[[word = word:gsub("([uùm]ʼ?)m", "%1ᴍ")
word = word:gsub("(" .. vowel .. ")m", "%")
word = word:gsub("m(ʼᴍ)", "ᴍ%1")
word = word:gsub("(" .. vowel .. "*)@(" .. vowel .. "*)", "%1@%2")
word = word:gsub("([aeiouàèìòù])m", "%1ᴍ")
word = word:gsub("([aeiouàèìòù])ᴍ([aeiou])", "%1m%2")]]
word = word:gsub("mʼm", "ṵʼũ"); word = word:gsub("(" .. vowel .. ")m", "%")
return word
return word
Line 37: Line 33:
local C = match(word, "^" .. vowel .. "?(" .. consonant .. "*)")
local C = match(word, "^" .. vowel .. "?(" .. consonant .. "*)")
local V = mw.ustring.toNFD(match(word, consonant .. "*(" .. vowel .. "*)"))
local V = mw.ustring.toNFD(match(word, consonant .. "*(" .. vowel .. "*)"))
V = V:gsub("ḛ", "e"); V = V:gsub("ḭ", "i"); V = V:gsub("ṵ", "u")
V = V:gsub("ḛ", "e"); V = V:gsub("ḭ", "i"); V = V:gsub("ṵ", "u"); V = V:gsub("v", "u")
local r2 = match(word, C .. "(.*)")
local r2 = match(word, C .. "(.*)")
local v = sub(V, 1, 1)
local v = sub(V, 1, 1)
local ejective = C == "tɬʼ" or match(C, "^[ṭcq]ʼ$") ~= nil
local fricative = match(C, "[sšṣɬ][ʇǃǂǁʘ]") ~= nil
local fricative = match(C, "[sšṣɬ][ʇǃǂǁʘ]") ~= nil
local nasal = match(C, "ɴ") ~= nil
local nasal = match(C, "ɴ") ~= nil
Line 47: Line 44:
local uvular = match(C, "x") ~= nil
local uvular = match(C, "x") ~= nil
if (nasal or fricative) or glottal then word = C .. (glottal and "" or v) .. gsub(C, "[sšṣɬ]([ʇǃǂǁʘ])", "%1") .. r2
if ejective then word = C .. C .. r2
elseif (nasal or fricative) or glottal then word = C .. (glottal and "" or v) .. gsub(C, "[sšṣɬ]([ʇǃǂǁʘ])", "%1") .. r2
elseif uvular then word = gsub(C, "([ʇǃǂǁʘ])x", "%1") .. v .. C .. r2
elseif uvular then word = gsub(C, "([ʇǃǂǁʘ])x", "%1") .. v .. C .. r2
else word = C .. v .. C .. r2 end
else word = C .. v .. C .. r2 end
word = word:gsub("", "m")
word = word: gsub("v", "mʼm"); word = word:gsub("ũ", "m"); word = word:gsub("@", "ʼ")
return word
return word
Line 59: Line 57:
local args = frame:getParent().args
local args = frame:getParent().args
local word = args["w"] or mw.title.getCurrentTitle().text
local word = args["w"] or mw.title.getCurrentTitle().text
local data = {lang = lang, pos_category = deabb[args[1]], heads = {word}, categories = {}, inflections = {},}
local pos = args[1]; local f = args[2]
local pos = args[1]; local f = args[2]
local data = {lang = lang, pos_category = deabb[pos], heads = {word}, categories = {}, inflections = {},}
if f == '-' then
if f == '-' then
if pos == "adj" then
if pos == "adj" then
table.insert(data.inflections, {label = "not " .. glossary_link("comparable")})
table.insert(data.inflections, {label = "not " .. glossary_link("comparable")})
table.insert(data.categories, lang:getCanonicalName() .. " uncomparable adjectives")
table.insert(data.categories, lang:getCanonicalName() .. " uncomparable " .. deabb[pos])
end
end
elseif pos ~= "v" then
elseif pos ~= "v" then
table.insert(data.inflections, {label = glossary_link("comparative"), redup(word)})
table.insert(data.inflections, {label = glossary_link("comparative"), redup(word)})
if pos == "adverbs" then table.insert(data.categories, lang:getCanonicalName() .. " comparative " .. pos) end
if pos == "adv" then table.insert(data.categories, lang:getCanonicalName() .. " comparative " .. deabb[pos]) end
else
else
table.insert(data.inflections, {label = "[[w:applicative voice|applicative]]", redup(word)})
table.insert(data.inflections, {label = "[[w:applicative voice|applicative]]", redup(word)})