Module:User:Zhnka/sk-common

Hello, you have come here looking for the meaning of the word Module:User:Zhnka/sk-common. In DICTIOUS you will not only get to know all the dictionary meanings for the word Module:User:Zhnka/sk-common, but we will also tell you about its etymology, its characteristics and you will know how to say Module:User:Zhnka/sk-common in singular and plural. Everything you need to know about the word Module:User:Zhnka/sk-common you have here. The definition of the word Module:User:Zhnka/sk-common will help you to be more precise and correct when speaking or writing your texts. Knowing the definition ofModule:User:Zhnka/sk-common, as well as those of other words, enriches your vocabulary and provides you with more and better linguistic resources.

This is a private module sandbox of Zhnka, for his own experimentation. Items in this module may be added and removed at Zhnka's discretion; do not rely on this module's stability.


local export = {}

local lang = require("Module:languages").getByCode("gmh")
local m_links = require("Module:links")
local m_table = require("Module:table")
local m_string_utilities = require("Module:string utilities")

local u = mw.ustring.char
local rsplit = mw.text.split
local rfind = mw.ustring.find
local rmatch = mw.ustring.match
local rsubn = mw.ustring.gsub
local ulen = mw.ustring.len
local uupper = mw.ustring.upper

-- version of rsubn() that discards all but the first return value
local function rsub(term, foo, bar)
	local retval = rsubn(term, foo, bar)
	return retval
end

-- version of rsubn() that returns a 2nd argument boolean indicating whether
-- a substitution was made.
local function rsubb(term, foo, bar)
	local retval, nsubs = rsubn(term, foo, bar)
	return retval, nsubs > 0
end

export.TEMP_CH = u(0xFFF0) -- used to substitute ch temporarily in the default-reducible code
export.TEMP_SOFT_LABIAL = u(0xFFF1)

local lc_vowel = "aeiouāēīōūäëöüæœâêîôû"
local uc_vowel = uupper(lc_vowel)
export.vowel = lc_vowel .. uc_vowel
export.vowel_c = ""
export.non_vowel_c = ""
local lc_cons = "bpmwvdtzsȥnrlckghfjqx"
local uc_cons = uupper(lc_cons)
export.cons = lc_cons .. uc_cons
export.cons_c = ""
export.lowercase = lc_vowel .. lc_cons
export.lowercase_c = ""
export.uppercase = uc_vowel .. uc_cons
export.uppercase_c = ""

function export.apply_vowel_alternation(alt, stem)
	local modstem, origvowel
	if alt == "quant" then
		modstem = rsub(stem, "(.)()(" .. export.cons_c .. "*)$",
			function(pre, vowel, post)
				origvowel = vowel
				if vowel == "a" then
						return pre .. "e" .. post
				elseif vowel == "o" then
					return pre .. "ö" .. post
				elseif vowel == "u" then
					return pre .. "ü" .. post
				elseif vowel == "ā" then
					return pre .. "æ" .. post
				elseif vowel == "ō" then
					return pre .. "œ" .. post
				else
					return pre .. "iu" .. post
				end
			end
		)
		modstem = rsub(modstem, "oü(" .. export.cons_c .. "*)$", "öu%1")
		modstem = rsub(modstem, "uö(" .. export.cons_c .. "*)$", "üe%1")
	else
		return stem
	end
	return modstem, origvowel
end


local function make_try(word)
	return function(from, to)
		local stem = rmatch(word, "^(.*)" .. from .. "$")
		if stem then
			return stem .. to
		end
		return nil
	end
end

function export.secondary_umlaut(word)
	local try = make_try(word)
	return
		try("aht", "äht") or
		try("ahs", "ähs") or
		word
end

function export.combine_stem_ending(base, slot, stem, ending)
	if stem == "?" then
		return "?"
	else
		stem, ending = stem, ending
		if base.all_uppercase then
			stem = uupper(stem)
		end
			return stem .. ending
	end
end


return export