Moduł:Lang

Z GastroWiki
Przejdź do nawigacji Przejdź do wyszukiwania

local lang = {}

local data = mw.loadData( 'Module:lang/data' )

function lang.istnieje(frame)

   local languageCode = frame.args[1]
   if data[languageCode] then
       return languageCode
   else
       return nil
   end

end

function lang.kursywa(frame)

   local languageCode = frame.args[1]
   if languageCode then

local languageData = data[languageCode] if languageData and (languageData.kursywa == false) then return "" end

   end

return "" end

lang["hasło"] = function(frame)

   local languageCode = frame.args[1]
   assert(languageCode, "Brak kodu języka")
   local languageData = data[languageCode]
   assert(languageData, "Nieznany kod języka")
   return languageData['hasło']

end

lang["skrót"] = function(frame)

   local languageCode = frame.args[1]
   assert(languageCode, "Brak kodu języka")
   local languageData = data[languageCode]
   assert(languageData, "Nieznany kod języka")
   return languageData['skrót'] or languageData['mianownik']

end

function lang.mianownik(frame)

   local languageCode = frame.args[1]
   assert(languageCode, "Brak kodu języka")
   local languageData = data[languageCode]
   assert(languageData, "Nieznany kod języka")
   return languageData['mianownik']

end

lang["dopełniacz"] = function(frame)

   local languageCode = frame.args[1]
   assert(languageCode, "Brak kodu języka")
   local languageData = data[languageCode]
   assert(languageData, "Nieznany kod języka")
   return languageData['dopełniacz']

end

function lang.miejscownik(frame)

   local languageCode = frame.args[1]
   assert(languageCode, "Brak kodu języka")
   local languageData = data[languageCode]
   assert(languageData, "Nieznany kod języka")
   return languageData['miejscownik']

end

function list(frame, multi)

   -- konwersja kodów języków na kod wiki text opisujący kody
   local items = {}       -- tabela na skonwertowane kody
   local invalid = false  -- flaga informująca, że na liście znajduje się nieznany kod języka
   local warning = false  -- flaga informująca, że na liście znajduje się kod języka z listy częstych błędów
   local lang = mw.getContentLanguage() -- język wiki
   
   local args = frame.args;
   if not args[1] then
       -- brak argumentów sugeruje wywołanie z szablonu
       local parent = frame:getParent()
       if parent then
           args = parent.args
       end
   end
   if not args[1] then
       return "Błąd! Brak kodu języka."
   end
   
   local formatItem = function(languageCode)
       assert(#languageCode > 0, "Pusty kod języka")
       local languageData = data[languageCode]
       
       if languageData then
           if string.match("ee|am|an|ang|kr|se|si", languageCode) then
               warning = true
           end

           local skrot = languageData['skrót'] or languageData['mianownik']
           local nativeName = mw.language.fetchLanguageName(languageCode)
           if nativeName and #nativeName > 0 and languageCode ~= "pl" then
               table.insert(items, string.format("%s", languageData['hasło'], languageData['miejscownik'], nativeName, skrot))
           else
               table.insert(items, string.format("%s", languageData['hasło'],  languageData['miejscownik'], skrot))
           end
       elseif #languageCode == 0 then
           if #items == 0 then
               -- pierwszy kod nie może być pusty, reszta może, bo jest przekazywana jako pusta w szablonach cytowania
               invalid = true
               table.insert(items, "Błąd! Brak kodu języka.")
           end
       else
           invalid = true
           table.insert(items, string.format("Błąd! Nieznany kod języka: %s. Sprawdź listę kodów.", languageCode))
       end
   end
   
   if args[2] or multi then
       -- wiele argumentów sugeruje przekazywnie każdego kodu języka w oddzielnych argumentach
       for i, v in ipairs(args) do
           if #v > 0 then
               formatItem(lang:lc(v))
           end
       end
   else
       -- jeden argument pozwala także wysłać wszystkie kody oddzielone spacją
       for languageCode in string.gmatch(lang:lc(args[1]), "%S+") do
           formatItem(languageCode)
       end
   end
   
   if #items == 0 then
       -- pusta lista kodów
       invalid = true
       table.insert(items, "Błąd! Brak kodu języka.")
   end
   -- ostateczne formatowanie wyniku
   local result = {}
   table.insert(result, "(")
   table.insert(result, table.concat(items, " • "))
   table.insert(result, ")")
   if mw.title.getCurrentTitle().namespace == 0 then
       if warning then
           table.insert(result, "")
       end
       if invalid then
           table.insert(result, "")
       end
   end
   return table.concat(result, "")

end

function lang.lang(frame) return list(frame, true) end

lang["język"] = function(frame) return list(frame, false) end

return lang