Hoppa till innehållet

Modul:Gemeindeschlüssel

Från Wikipedia

Dokumentationen för denna modul kan skapas på Modul:Gemeindeschlüssel/dok

p = {}

-- function Gemeindeschlussel, formatering av tyska kommunkoder
 
function p.Gemeindeschlussel(frame)
   local kod = frame.args['kommunkod']
   local kod_len = mw.ustring.len(kod)
   if not (kod_len == 5 or kod_len == 7 or kod_len == 8 or kod_len == 9) or mw.ustring.find(kod,"%D")~=nil then return "Felaktig kommunkod" end
   resultat = mw.ustring.sub(kod,1,2).." "..mw.ustring.sub(kod,3,3).." "..mw.ustring.sub(kod,4,5)
   if kod_len >=7 then resultat = resultat.." "..mw.ustring.sub(kod,6,kod_len) end
   return resultat
end


-- function Regionalschlussel, formatering av tyska regionalkoder

function p.Regionalschlussel(frame)
   function getRegionalCode(id)
      id = mw.ustring.match((id or ''),'[Qq]%d+') or mw.wikibase.getEntityIdForCurrentPage()
      id = (tonumber(mw.ustring.sub(id,2)) < 2 ^ 31) and id or mw.wikibase.getEntityIdForCurrentPage()
      id = mw.wikibase.entityExists(id) and id or mw.wikibase.getEntityIdForCurrentPage()
      resultat = ''
      local t = mw.wikibase.getAllStatements(id,'P1388')
      for i,v in ipairs(t) do
         local s = v.mainsnak.datavalue.value
         if mw.ustring.len(s) > mw.ustring.len(resultat) and not (v.qualifiers and v.qualifiers.P582) then resultat = s end
      end
      if mw.ustring.len(resultat) > 0 then return resultat end
      t = mw.wikibase.getAllStatements(id,'P439')
      for i,v in ipairs(t) do
         local s = v.mainsnak.datavalue.value
         if mw.ustring.len(s) > mw.ustring.len(resultat) and mw.ustring.len(s) == 8 and not (v.qualifiers and v.qualifiers.P582) then resultat = s end
      end
      if mw.ustring.len(resultat) == 8 then
         t = mw.wikibase.getAllStatements(id,'P31')
         for i,v in ipairs(t) do
            if v.mainsnak.datavalue.value.id == 'Q15974311' and not (v.qualifiers and v.qualifiers.P582) then
               resultat = mw.ustring.sub(resultat,1,5)..'9'..mw.ustring.sub(resultat,6,8)..mw.ustring.sub(resultat,6,8)
               return resultat
            end
         end
         resultat = ''
      end
      return resultat
   end
   local kod = frame.args['regionalkod'] or getRegionalCode(frame.args['q'])
   local kod_len = mw.ustring.len(kod)
   local min_len = tonumber(frame.args['minimilängd']) or (mw.ustring.sub(kod,6,6) == '5') and 12 or 9
   local rel_len = tonumber(frame.args['relevanslängd']) or 1
   if min_len < 2 then min_len = 2 end
   if min_len > 5 and min_len < 9 then min_len = 5 end
   if min_len > 9 and min_len < 12 then min_len = 9 end
   if min_len > 12 then min_len = 12 end
   rel_len = (rel_len > min_len) and min_len or rel_len
   if kod_len < rel_len then return "" end
   if kod_len < min_len then return "Felaktig regionalkod" end
   if not (kod_len == 2 or kod_len == 3 or kod_len == 4 or kod_len == 5 or kod_len == 9 or kod_len == 12) or mw.ustring.find(kod,"%D")~=nil then return "Felaktig regionalkod" end
   resultat = mw.ustring.sub(kod,1,2)
   if kod_len == 2 then return resultat end
   resultat_br = min_len == 2 and resultat.."<br/>" or ""
   resultat = resultat.."&nbsp;"..mw.ustring.sub(kod,3,3)
   if kod_len == 3 then return resultat_br..resultat end
   resultat_br = resultat_br..(min_len == 3 and resultat.."<br/>" or "")
   resultat = resultat.."&nbsp;"..mw.ustring.sub(kod,4,4)
   if kod_len == 4 then return resultat_br..resultat end
   resultat_br = resultat_br..(min_len == 4 and resultat.."<br/>" or "")
   resultat = resultat..mw.ustring.sub(kod,5,5)
   if kod_len == 5 then return resultat_br..resultat end
   resultat_br = resultat_br..(min_len <= 5 and resultat.."<br/>" or "")
   resultat = resultat.."&nbsp;"..mw.ustring.sub(kod,6,9)
   if kod_len == 9 then return resultat_br..resultat end
   resultat_br = resultat_br..(min_len <= 9 and resultat.."<br/>" or "")
   resultat = resultat.."&nbsp;"..mw.ustring.sub(kod,10,12)
   return resultat_br..resultat
end


return p