﻿<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>http://xn--90aogluj.xn--p1ai/index.php?action=history&amp;feed=atom&amp;title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C%3ARu</id>
	<title>Модуль:Ru - История изменений</title>
	<link rel="self" type="application/atom+xml" href="http://xn--90aogluj.xn--p1ai/index.php?action=history&amp;feed=atom&amp;title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C%3ARu"/>
	<link rel="alternate" type="text/html" href="http://xn--90aogluj.xn--p1ai/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Ru&amp;action=history"/>
	<updated>2026-06-10T15:17:16Z</updated>
	<subtitle>История изменений этой страницы в вики</subtitle>
	<generator>MediaWiki 1.34.0</generator>
	<entry>
		<id>http://xn--90aogluj.xn--p1ai/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Ru&amp;diff=739&amp;oldid=prev</id>
		<title>Peandre2: 1 версия импортирована</title>
		<link rel="alternate" type="text/html" href="http://xn--90aogluj.xn--p1ai/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Ru&amp;diff=739&amp;oldid=prev"/>
		<updated>2015-01-13T20:23:55Z</updated>

		<summary type="html">&lt;p&gt;1 версия импортирована&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;--[[&lt;br /&gt;
Основные функции, касающиеся русского языка&lt;br /&gt;
]]&lt;br /&gt;
local M={}&lt;br /&gt;
&lt;br /&gt;
function M.o(f)&lt;br /&gt;
    return M.obo(f.args[1])&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function M.obo(phr) -- выбирает предлог о, об или обо к фразе, в начале кот. м. б. пунктуация&lt;br /&gt;
&lt;br /&gt;
    local w = mw.ustring.match(phr,&amp;quot;[%p%s%c]*(.-)[%p%s%c]&amp;quot;) or mw.ustring.match(phr,&amp;quot;[%p%s%c]*(.-)$&amp;quot;)&lt;br /&gt;
    if not w then return nil end&lt;br /&gt;
    if string.find(&amp;quot; всей всём всех мне &amp;quot;,' '..mw.ustring.lower(w)..' ',1,true) then return 'обо' end&lt;br /&gt;
    local ws=mw.ustring.sub(w,1,2)&lt;br /&gt;
    if ws==mw.ustring.upper(ws) then -- abbrev&lt;br /&gt;
        if mw.ustring.match(ws,&amp;quot;^[ЙУНФЫАРОЛЭСМИRYUIOASFHLXNMÖÜÄΑΕΟΥΩ]&amp;quot;) then return 'об' else return 'о' end&lt;br /&gt;
    elseif mw.ustring.match(mw.ustring.upper(w),&amp;quot;^[АОЭИУЫAOIEÖÜÄΑΕΟΥΩ]&amp;quot;) then&lt;br /&gt;
        return 'об'&lt;br /&gt;
    else&lt;br /&gt;
        return 'о'&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local cons='бвгджзйклмнпрстфхцчшщ'; -- all consonants&lt;br /&gt;
local cons7='кгхчжшщ'; -- consonants requiring -и&lt;br /&gt;
local adjends={['ой']='ые',['ый']='ые',['ий']='ие',['ое']='ые',['ая']='ые',['яя']='ие',['ое']='ые',['ее']='ие'};&lt;br /&gt;
local specpl={&lt;br /&gt;
    ['город']='города',&lt;br /&gt;
    ['болгарин']='болгары',&lt;br /&gt;
    ['боярин']='бояре',&lt;br /&gt;
    ['брат']='братья',&lt;br /&gt;
    ['век']='века',&lt;br /&gt;
    ['веко']='веки',&lt;br /&gt;
    ['вес']='веса',&lt;br /&gt;
    ['грузин']='грузины',&lt;br /&gt;
    ['день']='дни',&lt;br /&gt;
    ['дерево']='деревья',&lt;br /&gt;
    ['директор']='директора',&lt;br /&gt;
    ['дитя']='дети',&lt;br /&gt;
    ['доктор']='доктора',&lt;br /&gt;
    ['дочь']='дочери',&lt;br /&gt;
    ['друг']='друзья',&lt;br /&gt;
    ['звезда']='звёзды',&lt;br /&gt;
    ['знамя']='знамёна',&lt;br /&gt;
    ['инспектор']='инспектора',&lt;br /&gt;
    ['край'] = 'края',&lt;br /&gt;
    ['мать']='матери',&lt;br /&gt;
    ['небо']='небеса',&lt;br /&gt;
    ['озеро']='озёра',&lt;br /&gt;
    ['перо']='перья',&lt;br /&gt;
    ['поезд']='поезда',&lt;br /&gt;
    ['ребёнок']='дети',&lt;br /&gt;
    ['список']='списки',&lt;br /&gt;
    ['сын']='сыновья',&lt;br /&gt;
    ['татарин']='татары',&lt;br /&gt;
    ['церковь']='церкви',&lt;br /&gt;
    ['цыган']='цыгане',&lt;br /&gt;
    ['человек']='люди',&lt;br /&gt;
    ['чудо']='чудеса'&lt;br /&gt;
}; -- table of some common special plural cases&lt;br /&gt;
 &lt;br /&gt;
function M.pl(p) -- множественное число, 2-й аргумент 0 (нескл.), 1, 2, 3 или a (adjective - прилагательное)&lt;br /&gt;
--Поддержка словосочетаний планируется потом&lt;br /&gt;
    local word = p.args[1];&lt;br /&gt;
    if specpl[word] then return specpl[word] end;&lt;br /&gt;
    local d=p.args[2];&lt;br /&gt;
    if d==nil then d=M.guessdecl(p) end;&lt;br /&gt;
    if d=='0' then return word&lt;br /&gt;
    elseif d=='a' then&lt;br /&gt;
        if mw.ustring.match(word,'['..cons7..']..$') then&lt;br /&gt;
            return mw.ustring.sub(word,1,-3)..'ие'&lt;br /&gt;
        else return mw.ustring.sub(word,1,-3)..adjends[mw.ustring.sub(word,-2)]&lt;br /&gt;
        end&lt;br /&gt;
elseif d=='1' then&lt;br /&gt;
    if  mw.ustring.sub(word,-1)=='я' or mw.ustring.match(word,'['..cons7..']а$')&lt;br /&gt;
    then return mw.ustring.sub(word,1,-2)..'и'&lt;br /&gt;
    else return mw.ustring.sub(word,1,-2)..'ы' end&lt;br /&gt;
elseif d=='2' then&lt;br /&gt;
    if mw.ustring.match(word,'о$') then return mw.ustring.sub(word,1,-2)..'а'&lt;br /&gt;
    elseif mw.ustring.match(word,'е$') then return mw.ustring.sub(word,1,-2)..'я'&lt;br /&gt;
    elseif mw.ustring.match(word,'[ьй]$') then return mw.ustring.sub(word,1,-2)..'и'&lt;br /&gt;
    elseif mw.ustring.match(word,'онок$') then return mw.ustring.sub(word,1,-5)..'ата'&lt;br /&gt;
    elseif mw.ustring.match(word,'ёнок$') then return mw.ustring.sub(word,1,-5)..'ята'&lt;br /&gt;
    elseif mw.ustring.match(word,'анин$') then return mw.ustring.sub(word,1,-5)..'ане'&lt;br /&gt;
    elseif mw.ustring.match(word,'янин$') then return mw.ustring.sub(word,1,-5)..'яне'&lt;br /&gt;
    elseif mw.ustring.match(word,'ец$') and not mw.ustring.match(word,'['..cons7..']['..cons7..']ец$') then -- !!неправильно для этнохоронимов на -ец типа &amp;quot;ньюйоркцы&amp;quot;&lt;br /&gt;
        if mw.ustring.match(word,'лец$') then return mw.ustring.sub(word,1,-3)..'ьцы'&lt;br /&gt;
            elseif mw.ustring.match(word,'[аоуыэяёюие]ец$') then return mw.ustring.sub(word,1,-3)..'ьцы'&lt;br /&gt;
            else return mw.ustring.sub(word,1,-3)..'цы'&lt;br /&gt;
        end&lt;br /&gt;
    elseif mw.ustring.match(word,'['..cons7..']$') then return word..'и'&lt;br /&gt;
    else return word..'ы'&lt;br /&gt;
    end&lt;br /&gt;
elseif d=='3' then&lt;br /&gt;
    if mw.ustring.match(word,'мя$') then return mw.ustring.sub(word,1,-3)..'ена'&lt;br /&gt;
        else return mw.ustring.sub(word,1,-2)..'и'&lt;br /&gt;
    end&lt;br /&gt;
    else return &amp;quot;&amp;lt;span class=error&amp;gt;Wrong declesion '&amp;quot;..d..&amp;quot;' in RuGrammar::pl()&amp;lt;/span&amp;gt;&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
 &lt;br /&gt;
function M.guessdecl(p) -- угадывает тип склонения&lt;br /&gt;
    local word=p.args[1];&lt;br /&gt;
    if mw.ustring.match(word,'['..cons..'][оыи]й$')&lt;br /&gt;
      or mw.ustring.match(word,'['..cons..'][ая]я$')&lt;br /&gt;
      or mw.ustring.match(word,'['..cons..'][ое]е$')&lt;br /&gt;
    then return 'a' --sometimes wrong&lt;br /&gt;
    elseif mw.ustring.match(word,'['..cons..'][оеь]?$') then return '2' --but mb 3, can't guess w/o dict&lt;br /&gt;
    elseif mw.ustring.match(word,'['..cons..'][ая]$') then&lt;br /&gt;
        if mw.ustring.match(word,'[^'..cons..']мя$') then return '3' else return '1' end&lt;br /&gt;
    else return '0'&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
 &lt;br /&gt;
function M.locative(p) -- Возможно, будет когда-то заменено на функционал mw.language('ru'):grammar(), которого пока не хватает&lt;br /&gt;
local word=p.args[1];&lt;br /&gt;
local locend={['а']='е', ['я']='е', ['й']='е', ['ы']=&amp;quot;ах&amp;quot;, ['ь']='и'}; --the last one is disputed: most Russian cities ending with -ь are 3rd declesion, but some foreign ones are 2nd decl., so -е should be returned&lt;br /&gt;
local ec=mw.ustring.sub(word,-1);&lt;br /&gt;
if mw.ustring.match(word,'ия$') then return mw.ustring.sub(word,1,-2)..'и'&lt;br /&gt;
elseif mw.ustring.match(word,'['..cons..']ль$') or mw.ustring.sub(word,-4)=='поль' then return mw.ustring.sub(word,1,-2)..'е'&lt;br /&gt;
elseif locend[ec] then return mw.ustring.sub(word,1,-2)..locend[ec]&lt;br /&gt;
elseif ec=='я' then return mw.ustring.sub(word,1,-2)..'е'&lt;br /&gt;
elseif mw.ustring.match(ec,'['..cons..']') then return word..'е'&lt;br /&gt;
elseif ec=='о' then&lt;br /&gt;
    if mw.ustring.match(word,'[оеё]во$') then return mw.ustring.sub(word,1,-2)..'е'&lt;br /&gt;
        else return word&lt;br /&gt;
    end&lt;br /&gt;
else return word end&lt;br /&gt;
end;&lt;br /&gt;
 &lt;br /&gt;
return M&lt;/div&gt;</summary>
		<author><name>Peandre2</name></author>
		
	</entry>
</feed>