Изменения

Перейти к навигации Перейти к поиску
снова пока откат из-за повсеместных ошибок
Строка 6: Строка 6:  
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
    
-- получает код языка, возвращает ссылку и нормализованный код языка (или пустые строки)
 
-- получает код языка, возвращает ссылку и нормализованный код языка (или пустые строки)
Строка 11: Строка 16:  
     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, ""
Строка 22: Строка 27:  
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)
          elseif n==1 then
  −
              curr_lang='en'
   
           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
                   and string.format( "%s <span lang='%s'>%s</span>", link, lang_code, trimmed )
+
              if lang_code ~= '' then
                   or  string.format( "%s <span class='unknown-foreign-lang'>%s</span>", link, trimmed )
+
                   list_item = link .. " <span lang='" .. lang_code .. "'>" .. trimmed .. "</span>"
 +
              else
 +
                   list_item = link .. " <span class='unknown-foreign-lang'>" .. trimmed .. "</span>"
 +
              end
 
            
 
            
               table.insert(result, list_item)
+
               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)
               table.insert(result, link)
+
               if result == nil then
 +
                  result = link
 +
              else
 +
                  result = result .. ", " .. link
 +
              end
 
           end
 
           end
 
            
 
            
Строка 52: Строка 66:  
      
 
      
 
     -- просто #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)
         table.insert(result, link)
+
         if result ~= nil then
    end
+
            result = result .. ", " .. link
    return table.concat(result,', ')
+
         else
end
+
             result = link
 
  −
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
   
         end
 
         end
        return ln..' языке'
  −
    else
  −
        return 'языке '..ln
   
     end
 
     end
 +
    return result
 
end
 
end
 
+
 
return p
 
return p
Анонимный участник

Реклама:

Навигация