Jump to content

Module:Ru-common

Frae Wikipedia, the free beuk o knawledge
Reveesion aes o 14:08, 29 November 2013 bi AmaryllisGardener (Collogue | contribs) (Created page with "--This module holds some commonly used functions for Russian language. It's for use from other modules, not #invoke. local export = {} -- this function enables the mod...")
(diff) ← Aulder reveision | see current reveision (diff) | Newer reveision → (diff)
--[[
This module holds some commonly used functions for Russian language. It's for use from other modules, not #invoke.
]]

local export = {}

-- this function enables the module to be called from a template
function export.main(frame)
    if type(export[frame.args[1]]) == 'function' then
        return export[frame.args[1]](frame.args[2], frame.args[3])
    else
        return export[frame.args[1]][frame.args[2]]
    end
end

function export.obo(phr) -- selects preposition о, об or обо for next phrase, which can start from punctuation
    --Algorithm design is mainly inherited from w:ru:template:Обо
    local w = mw.ustring.match(phr,"[%p%s%c]*(.-)[%p%s%c]") or mw.ustring.match(phr,"[%p%s%c]*(.-)$")
    if not w then return nil end
    if string.find(" всей всём всех мне ",' '..mw.ustring.lower(w)..' ',1,true) then return 'обо' end
    local ws=mw.ustring.sub(w,1,2)
    if ws==mw.ustring.upper(ws) then -- abbrev
        if mw.ustring.match(ws,"^[ЙУНФЫАРОЛЭСМИRYUIOASFHLXNMÖÜÄΑΕΟΥΩ]") then return 'об' else return 'о' end
    elseif mw.ustring.match(mw.ustring.upper(w),"^[АОЭИУЫAOIEÖÜÄΑΕΟΥΩ]") then
        return 'об'
    else
        return 'о'
    end
end

-- Apply Proto-Slavic iotation. This is the change that is affected by a Slavic -j- after a consonant.
function export.iotation(stem, shch)
    stem = mw.ustring.gsub(stem, "[сх]$", "ш")
    stem = mw.ustring.gsub(stem, "ск$", "щ")
    stem = mw.ustring.gsub(stem, "ст$", "щ")
    stem = mw.ustring.gsub(stem, "[кц]$", "ч")
    
    -- normally "т" is iotated as "ч" but there are many verbs that are iotated with "щ"
    if shch == "щ" then
        stem = mw.ustring.gsub(stem, "т$", "щ")
    else
        stem = mw.ustring.gsub(stem, "т$", "ч")
    end
 
    stem = mw.ustring.gsub(stem, "[гдз]$", "ж")
    
    stem = mw.ustring.gsub(stem, "([бвмпф])$", "%1л")
    
    return stem
end

function export.needs_accents(word)
	-- A word that has ё in it doesn't need an accent, as this vowel is inherently accented.
	if mw.ustring.find(word, "\204\129") or mw.ustring.find(word, "ё") then
		return false
	-- A word needs accents if it contains more than one vowel
	elseif mw.ustring.find(mw.ustring.lower(word), "[аоуыэяёюиеіѣѵ].*[аоуыэяёюиеіѣѵ]") then
		return true
	else
		return false
	end
end

function export.remove_accents(word)
    -- Remove acute accent
    word = mw.ustring.gsub(word, "́", "")
            
    return word
end

function export.make_unstressed(word)
    -- Remove acute accent
    word = mw.ustring.gsub(word, "́", "")

    -- Change ё to е
    word = mw.ustring.gsub(word, "ё", "е")
        
    return word
end

return export