Module:User:Mofvanes/sandbox

local export = {}

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

local rfind = mw.ustring.find local rsubn = mw.ustring.gsub local ulower = mw.ustring.lower local usub = mw.ustring.sub

local function rsub(term, foo, bar) local retval = rsubn(term, foo, bar) return retval end

local function get_index(str, list) if list == nil then return -1 end for i = 1, #list do		if str == list[i] then return i end end return -1 end

local function in_set(str, list) if get_index(str, list) ~= -1 then return true else return false end end

local function find_indices(text, str) indices = {} _, next_ind = rfind(text, str, 0) while next_ind ~= nil do 		table.insert(indices, next_ind) next_ind = next_ind + 1 _, next_ind = rfind(text,str,next_ind) end return indices end

local function arr_to_str(array) str = "" for i = 1, #array do str = str .. array[i] .. " " end return str end

local function char_at(str, pos) return usub(str, pos, pos) end

local function replace_char(text, pos, ch) local length = #text local first = "" local second = "" if pos > length or pos < 1 then error("invalid position") end if pos > 1 then first = usub(text, 1, pos-1) end if pos ~= length then second = usub(text, pos+1, length) end return first .. ch .. second end

local function insert_str(text, pos, ch) local length = #text local first = "" local second = "" if pos > length or pos < 1 then error("invalid position") end if pos > 1 then first = usub(text, 1, pos) end if pos ~= length then second = usub(text, pos+1, length) end return first .. ch .. second end

local function preprocessing(form) form = rsub(form, "i([aáàeéèiíìoóò])", "y%1") form = rsub(form, "en([hkmnrstw’])", "v%1") form = rsub(form, "on([hkmnrstw’])", "u%1") return form end

local function postprocessing(form) local substitutions = { ["u"] = "on", ["ú"] = "ón", ["ù"] = "òn", ["v"] = "en", ["ǘ"] = "én", ["ǜ"] = "èn", ["y"] = "i", ["E"] = "e", ["A"] = "a"} for i, j in pairs(substitutions) do stem = rsub(form, i, j) end return form end

local function acute_accent(form, pos) local ch = char_at(form, pos) local substitutions = {["a"] = "á", ["e"] = "é", ["o"] = "ó", ["i"] = "í", ["u"] = "ú", ["v"] = "ǘ"} for i, j in pairs(substitutions) do		if ch == i then return replace_char(form, pos, j) end end return form end

local function grave_accent(form, pos) local ch = char_at(form, pos) local substitutions = {["a"] = "à", ["e"] = "è", ["o"] = "ò", ["i"] = "ì", ["u"] = "ù", ["v"] = "ǜ"} for i, j in pairs(substitutions) do		if ch == i then return replace_char(form, pos, j) end end return form end

local oneida_order = {"C", "A", "E", "O", "I"} local oneida_prefixes = { -- agent ["1"] = {"k",	"ka",	"k",	"k",	"k"}, }

local function assign_stress(stem) local vowels = "[aeiouv]" local vowels = find_indices(stem, vowels) local penult = vowels[#vowels-1] local penult_plus1 = usub(stem, penult+1, penult+1) local penult_plus2 = usub(stem, penult+2, penult+2) if penult_plus1 == "h" then if in_set(penult_plus2, {"n", "r"}) then stem = grave_accent(stem,penult) stem = replace_char(stem,penult+1, ":") end elseif penult_plus1 == "’" then stem = grave_accent(stem,penult) stem = replace_char(stem,penult+1, ":") end return stem end

function export.show(frame) text = frame.args["text"] or "Kahnawa’ke" text = assign_stress(text) return text end

return export