Изменения

Перейти к навигации Перейти к поиску
Полностью удалено содержимое страницы
Строка 1: Строка 1: −
--[[ Модуль для работы с языками ISO 639
  −
  Наверное его надо целиком переписать, это только proof of concept
  −
]]
     −
-- загрузка модуля данных с таблицей языков
  −
local languages = mw.loadData("Module:Languages/data")
  −
local p = {}
  −
  −
-- вспомогательная функция, удаляет пробелы
  −
local function trimstr(s)
  −
  return (s:gsub("^%s*(.-)%s*$", "%1"))
  −
end
  −
  −
-- получает код языка, возвращает ссылку и нормализованный код языка (или пустые строки)
  −
local function get_lang_data(code)
  −
    local l = languages[code];
  −
    if l ~= nil then
  −
        return "[[" .. l[2] .. "|" .. l[1] .. "]]", code
  −
    elseif code ~= "" then
  −
        return code, ""
  −
    else
  −
        return "", ""
  −
    end
  −
end
  −
  −
function p.getRefHtmlFrame( frame )
  −
return p.getRefHtml( trimstr( frame.args[1] ) )
  −
end
  −
  −
function p.getRefHtml( wikidataItemId )
  −
local codeByItemId = mw.loadData( "Module:Wikidata/Language-codes" )
  −
local code = codeByItemId[ wikidataItemId ];
  −
if code == nil then
  −
mw.log( 'Language code not found for ' .. wikidataItemId )
  −
return ""
  −
else
  −
    local l = languages[code];
  −
if l == nil then
  −
mw.log( 'Language description for code ' .. code .. ' not found' )
  −
        return ""
  −
    else
  −
        return '<span class="ref-info" title="' .. l[ 2 ] .. '" style="font-size:85%; cursor:help; color:#888;">(' .. l[ 1 ] .. ')</span>'
  −
    end
  −
end
  −
end
  −
  −
-- принимает zh|我|tt|мин, возвращает список через запятую
  −
function p.list(frame)
  −
    local curr_lang = nil
  −
    local result = nil
  −
  −
    for n, v in frame:argumentPairs() do
  −
      local trimmed = trimstr(v)
  −
      if curr_lang == nil then
  −
          if trimmed ~= '' then
  −
              -- если язык пропущен, оставим прошлый
  −
              curr_lang = trimstr(v)
  −
          end
  −
      else
  −
          if trimmed ~= '' then
  −
              local link, lang_code = get_lang_data(curr_lang)
  −
              local list_item
  −
              if lang_code ~= '' then
  −
                  list_item = link .. "&nbsp;<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
  −
              -- Пустой текст — значит, текущий язык совпадает с следующим
  −
              local link, lang_code = get_lang_data(curr_lang)
  −
              if result == nil then
  −
                  result = link
  −
              else
  −
                  result = result .. ", " .. link
  −
              end
  −
          end
  −
         
  −
          curr_lang = nil
  −
      end
  −
    end
  −
   
  −
    -- просто #invoke:Languages|list|yue должно возвращать всё же ссылку без текста
  −
    if curr_lang ~= nil then
  −
        local link, lang_code = get_lang_data(curr_lang)
  −
        if result ~= nil then
  −
            result = result .. ", " .. link
  −
        else
  −
            result = link
  −
        end
  −
    end
  −
    return result
  −
end
  −
  −
return p
 
Анонимный участник

Реклама:

Навигация