模組:Pl-common

維基詞典,自由的多語言詞典


local export = {}

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


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


function export.soften_masc_pers_pl(word)
	local try = make_try(word)
	return
		try("ch", "si") or
		try("h", "si") or
		try("zł", "źli") or
		try("sł", "śli") or
		try("ł", "li") or
		try("rz?", "rzy") or
		try("sn", "śni") or
		try("zn", "źni") or
		try("zd", "ździ") or
		try("st", "ści") or
		try("t", "ci") or
		try("d", "dzi") or
		try("sz", "si") or
		try("([cd]z)", "y") or
		try("([fwmpbnsz])", "i") or
		try("k", "cy") or
		try("g", "dzy") or
		word .. "y"
end


return export