Jump to content

Module:pl-common

From Wiktionary, the free dictionary


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 subbed
		word, subbed = rsubb(word, "^(.*)" .. from .. "$", "%1" .. to)
		if subbed then
			return word
		end
		return nil
	end
end


function export.soften_adj_masc_pers_pl(word)
	local try = make_try(word)
	return
		try("chy", "si") or
		try("hy", "si") or
		try("sły", "śli") or
		try("([crs])zły", "%2zli") or
		try("zły", "źli") or
		try("łły", "lli") or
		try("ły", "li") or
		try("ry", "rzy") or
		try("sny", "śni") or
		try("([crs])zny", "%2zni") or
		try("zny", "źni") or
		try("ny", "ni") or
		try("sty", "ści") or
		try("ty", "ci") or
		try("([crs])zdy", "%2zdzi") or
		try("zdy", "ździ") or
		try("dy", "dzi") or
		try("szy", "si") or
		try("([bfmpvw])y", "%2i") or
		try("ki", "cy") or
		try("gi", "dzy") or
		word
end


return export