Изменения
Перейти к навигации
Перейти к поиску
Строка 6:
Строка 6:
+
+
+
+
+
Строка 11:
Строка 16:
− +
Строка 22:
Строка 27:
− +
− +
− +
− +
− +
− elseif n==1 then
− curr_lang='en'
− +
− and string.format( "%s <span lang='%s'>%s</span>", link, lang_code, trimmed ) +
− or string.format( "%s <span class='unknown-foreign-lang'>%s</span>", link, trimmed ) +
+
+
+
− table.insert(result, list_item) +
+
+
+
+
− +
− table.insert(result, link) +
+
+
+
+
Строка 52:
Строка 66:
− +
− table.insert(result, link) +
− end+
− return table.concat(result,', ')+
− end+
−
− function p.lnprep(f)-- выводит название языка в предложном падеже со словом "язык", должно работать
− local lc=f.args[1]
− if languages[lc][3] then return languages[lc][3] end;
− local ln = mw.ustring.lower(
− languages[lc] and languages[lc][2] -- Я хотел в другом порядке, но для sco выводится без уточнения
− or mw.language.fetchLanguageName(lc,'ru')
− ):gsub('%s+язык%s+', ' '):gsub('%s*%(?язык%)?%s*', '')
− if not ln then return f.args[2] or 'языке '..lc..' (?)' end
− if ln:match('.*лингва$') then return ln:gsub('а$','е') end--иначе тавтология
− if mw.ustring.match(ln,'[сц]кий$') or ln:match('ный$') or mw.ustring.match(ln,'[сц]кий%s%b()$') or ln:match('ный%s%b()$')
− then
− ln = mw.ustring.gsub(
− mw.ustring.gsub(ln, 'н([ыи])й(%A)', function(y,s) return (y=='ы' and 'ном' or 'нем')..s end)
− :gsub('ный$', 'ном'),
− '([сц]к)ий(%A)', '%1ом%2'
− ):gsub('ский$', 'ском'):gsub('цкий$', 'цком');
− if ln:match('%)$') and not (ln:match('ом%)$') or ln:match('нем%)$')) -- «языке» перед уточнением, если оно не склоняется
− then
− local r,s=ln:gsub('(%s)(%b())$','%1языке%1%2');
− if s==1 then return r end
− return ln..' языке'
− else
− return 'языке '..ln
+
− +
снова пока откат из-за повсеместных ошибок
local languages = mw.loadData("Module:languages/data")
local languages = mw.loadData("Module:languages/data")
local p = {}
local p = {}
-- вспомогательная функция, удаляет пробелы
local function trimstr(s)
return (s:gsub("^%s*(.-)%s*$", "%1"))
end
-- получает код языка, возвращает ссылку и нормализованный код языка (или пустые строки)
-- получает код языка, возвращает ссылку и нормализованный код языка (или пустые строки)
local l = languages[code];
local l = languages[code];
if l ~= nil then
if l ~= nil then
return string.format("[[%s|%s]]", l[2], l[1]), code
return "[[" .. l[2] .. "|" .. l[1] .. "]]", code
elseif code ~= "" then
elseif code ~= "" then
return code, ""
return code, ""
function p.list(frame)
function p.list(frame)
local curr_lang = nil
local curr_lang = nil
local result = {}
local result = nil
for n, v in ipairs(frame:getParent().args) do
for n, v in frame:argumentPairs() do
local trimmed = mw.text.trim(v)
local trimmed = trimstr(v)
if not curr_lang then
if curr_lang == nil then
if trimmed ~= '' then
if trimmed ~= '' then
-- если язык пропущен, оставим прошлый
-- если язык пропущен, оставим прошлый
curr_lang = trimmed
curr_lang = trimstr(v)
end
end
else
else
if trimmed ~= '' then
if trimmed ~= '' then
local link, lang_code = get_lang_data(curr_lang)
local link, lang_code = get_lang_data(curr_lang)
local list_item = lang_code ~= ''
local list_item
if lang_code ~= '' then
list_item = link .. " <span lang='" .. lang_code .. "'>" .. trimmed .. "</span>"
else
list_item = link .. " <span class='unknown-foreign-lang'>" .. trimmed .. "</span>"
end
if result == nil then
result = list_item
else
result = result .. ", " .. list_item
end
else
else
-- Пустой текст — значит, текущий язык совпадает со следующим
-- Пустой текст — значит, текущий язык совпадает с следующим
local link, lang_code = get_lang_data(curr_lang)
local link, lang_code = get_lang_data(curr_lang)
if result == nil then
result = link
else
result = result .. ", " .. link
end
end
end
-- просто #invoke:Languages|list|yue должно возвращать всё же ссылку без текста
-- просто #invoke:Languages|list|yue должно возвращать всё же ссылку без текста
if curr_lang then
if curr_lang ~= nil then
local link, lang_code = get_lang_data(curr_lang)
local link, lang_code = get_lang_data(curr_lang)
if result ~= nil then
result = result .. ", " .. link
else
result = link
end
end
end
end
return result
end
end
return p
return p