|
imported>Oles |
(не показаны 4 промежуточные версии 2 участников) |
Строка 1: |
Строка 1: |
| --[[ | | {{к-у}}{{Машинный перевод}}{{Номер |
| Основные функции, касающиеся русского языка
| | |название страны = Демократическая Республика Восточный Тимор |
| ]]
| | |страна = Восточный Тимор |
| local M={}
| | |изображение = СХІДНИЙ ТИМОР НОМЕР 1.gif |
| function M.obo(phr) -- выбирает предлог о, об или обо к фразе, в начале кот. м. б. пунктуация
| | |название = Автомобильные номера Восточного Тимора |
| | |стандарт = |
| | |дата ввода стандарта = 2002 |
| | |дата упразднения стандарта = |
| | |IVR код = |
| | |материал = Алюминий |
| | |ширина номера = |
| | |высота номера = |
| | |цвет шрифта = {{Шрифт|Восточный Тимор|ЧШ|БШ}} |
| | |цвет фона = {{Фон|Восточный Тимор|БФ|ЧФ|КФ}} |
| | |
| | }} |
|
| |
|
| local w = mw.ustring.match(phr,"[%p%s%c]*(.-)[%p%s%c]") or mw.ustring.match(phr,"[%p%s%c]*(.-)$")
| | <p>'''Автомобильные номера Восточного Тимора''' — металлическая пластина, которая устанавливается на транспортное средство при его регистрации.</p><p>Номерные знаки Восточного Тимора по своему дизайну аналогичны [[Автомобильные номера Австралии|номерным знакам Австралии]], а также используют аналогичные шрифты.</p> |
| 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
| |
|
| |
|
| local cons='бвгджзйклмнпрстфхцчшщ'; -- all consonants
| | {{Автомобильные номера Азии|Восточный Тимор}}[[Категория:Машинный перевод]] |
| local cons7='кгхчжшщ'; -- consonants requiring -и
| |
| local adjends={['ой']='ые',['ый']='ые',['ий']='ие',['ое']='ые',['ая']='ые',['яя']='ие',['ое']='ые',['ее']='ие'};
| |
| local specpl={
| |
| ["человек"]="люди",
| |
| ['мать']='матери',
| |
| ['дочь']='дочери',
| |
| ['брат']='братья',
| |
| ['сын']='сыновья',
| |
| ['дерево']='деревья',
| |
| ['чудо']='чудеса',
| |
| ['ребёнок']='дети',
| |
| ['дитя']='дети',
| |
| ['край'] = 'края',
| |
| ['перо']='перья',
| |
| ['знамя']='знамёна',
| |
| ['грузин']='грузины',
| |
| ['татарин']='татары',
| |
| ['болгарин']='болгары',
| |
| ['боярин']='бояре',
| |
| ['цыган']='цыгане',
| |
| ['друг']='друзья',
| |
| ['веко']='веки',
| |
| ['день']='дни',
| |
| ['век']='века',
| |
| ['директор']='директора',
| |
| ['доктор']='доктора',
| |
| ['инспектор']='инспектора',
| |
| ['город']='города',
| |
| ['вес']='веса',
| |
| ['поезд']='поезда',
| |
| ['звезда']='звёзды',
| |
| ['список']='списки',
| |
| ['церковь']='церкви'
| |
| }; -- table of some common special plural cases | |
|
| |
| function M.pl(p) -- множественное число, 2-й аргумент 0 (нескл.), 1, 2, 3 или a (adjective - прилагательное)
| |
| --Поддержка словосочетаний планируется потом
| |
| local word = p.args[1];
| |
| if specpl[word] then return specpl[word] end;
| |
| local d=p.args[2];
| |
| if d==nil then d=M.guessdecl(p) end;
| |
| if d=='0' then return word
| |
| elseif d=='a' then
| |
| if mw.ustring.match(word,'['..cons7..']..$') then
| |
| return mw.ustring.sub(word,1,-3)..'ие'
| |
| else return mw.ustring.sub(word,1,-3)..adjends[mw.ustring.sub(word,-2)]
| |
| end
| |
| elseif d=='1' then
| |
| if mw.ustring.sub(word,-1)=='я' or mw.ustring.match(word,'['..cons7..']а$')
| |
| then return mw.ustring.sub(word,1,-2)..'и'
| |
| else return mw.ustring.sub(word,1,-2)..'ы' end
| |
| elseif d=='2' then
| |
| if mw.ustring.match(word,'о$') then return mw.ustring.sub(word,1,-2)..'а'
| |
| elseif mw.ustring.match(word,'е$') then return mw.ustring.sub(word,1,-2)..'я'
| |
| elseif mw.ustring.match(word,'[ьй]$') then return mw.ustring.sub(word,1,-2)..'и'
| |
| elseif mw.ustring.match(word,'онок$') then return mw.ustring.sub(word,1,-5)..'ата'
| |
| elseif mw.ustring.match(word,'ёнок$') then return mw.ustring.sub(word,1,-5)..'ята'
| |
| elseif mw.ustring.match(word,'анин$') then return mw.ustring.sub(word,1,-5)..'ане'
| |
| elseif mw.ustring.match(word,'янин$') then return mw.ustring.sub(word,1,-5)..'яне'
| |
| elseif mw.ustring.match(word,'ец$') and not mw.ustring.match(word,'['..cons7..']['..cons7..']ец$') then -- !!неправильно для этнохоронимов на -ец типа "ньюйоркцы"
| |
| if mw.ustring.match(word,'лец$') then return mw.ustring.sub(word,1,-3)..'ьцы'
| |
| elseif mw.ustring.match(word,'[аоуыэяёюие]ец$') then return mw.ustring.sub(word,1,-3)..'ьцы'
| |
| else return mw.ustring.sub(word,1,-3)..'цы'
| |
| end
| |
| elseif mw.ustring.match(word,'['..cons7..']$') then return word..'и'
| |
| else return word..'ы'
| |
| end
| |
| elseif d=='3' then
| |
| if mw.ustring.match(word,'мя$') then return mw.ustring.sub(word,1,-3)..'ена'
| |
| else return mw.ustring.sub(word,1,-2)..'и'
| |
| end
| |
| else return "<span class=error>Wrong declesion '"..d.."' in RuGrammar::pl()</span>"
| |
| end
| |
| end
| |
|
| |
| function M.guessdecl(p) -- угадывает тип склонения
| |
| local word=p.args[1];
| |
| if mw.ustring.match(word,'['..cons..'][оыи]й$')
| |
| or mw.ustring.match(word,'['..cons..'][ая]я$')
| |
| or mw.ustring.match(word,'['..cons..'][ое]е$')
| |
| then return 'a' --sometimes wrong
| |
| elseif mw.ustring.match(word,'['..cons..'][оеь]?$') then return '2' --but mb 3, can't guess w/o dict
| |
| elseif mw.ustring.match(word,'['..cons..'][ая]$') then
| |
| if mw.ustring.match(word,'[^'..cons..']мя$') then return '3' else return '1' end
| |
| else return '0'
| |
| end
| |
| end
| |
|
| |
| function M.locative(p) -- Возможно, будет когда-то заменено на функционал mw.language('ru'):grammar(), которого пока не хватает
| |
| local word=p.args[1];
| |
| local locend={['а']='е', ['я']='е', ['й']='е', ['ы']="ах", ['ь']='и'}; -- the last is disputed, most Russian cities on -ь are 3 declesion but some foreign a 2 and thus -е
| |
| local ec=mw.ustring.sub(word,-1);
| |
| if mw.ustring.match(word,'ия$') then return mw.ustring.sub(word,1,-2)..'и'
| |
| elseif mw.ustring.match(word,'['..cons..']ль$') or mw.ustring.sub(word,-4)=='поль' then return mw.ustring.sub(word,1,-2)..'е'
| |
| elseif locend[ec] then return mw.ustring.sub(word,1,-2)..locend[ec]
| |
| elseif ec=='я' then return mw.ustring.sub(word,1,-2)..'е'
| |
| elseif mw.ustring.match(ec,'['..cons..']') then return word..'е'
| |
| elseif ec=='о' then
| |
| if mw.ustring.match(word,'[оеё]во$') then return mw.ustring.sub(word,1,-2)..'е'
| |
| else return word
| |
| end
| |
| else return word end
| |
| end;
| |
|
| |
| return M
| |