Dokumentation [visa] [redigera] [historik] [rensa sidcachen]


local wikidata = require('Modul:Wikidata2').formatStatementsFromLua
local Ortsfaktarat = require('Modul:Ortsfakta').rat
local HjalpSverige = require('Modul:Ortsfakta Sverige WD2').hjalp
local namnversalisering = require('Modul:Textformatering').namnversalisering
-- local SCBnykod = require('Modul:Sandlådan/Larske/Testmodul20').SCBnykod

p = {}

function p.ort( entity, args )
	local ill_kat = ''
	local a = {}
	table.insert(a, "{{Geobox\n| Settlement")
	
	local ortnamn = args.ortnamn 
	if not ortnamn or ortnamn == '' then
		if entity.labels and entity.labels.sv then
			ortnamn = entity.labels.sv.value
		else
			ortnamn = mw.title.getCurrentTitle().text
		end
	end
	table.insert(a, "\n| name = " .. ortnamn)
	if args.alternativnamn then
		table.insert(a, "\n| other_name = " .. (args.alternativnamn or ''))
	end
	local form = args.form or 'Ort'
	if mw.ustring.lower(form) == 'tätort' then
		form = '[[Tätort]]'
	elseif mw.ustring.lower(form) == 'småort' then
		form = '[[Småort]]'
	end
	if not form or form == '' then
		form = "Ort"
	end
	table.insert(a, "\n| category = " .. form)
	
	if args.smeknamn then
		table.insert(a, "\n| nickname      = " .. args.smeknamn)
		table.insert(a, "\n| nickname_type = Smeknamn")
	else
		v = wikidata({entity = entity, property = 'P1449', raw = 'true'})
		if v and #v > 0 then
			local s = {}
			for i, j in pairs(v) do
				table.insert(s, j.value .. j.ref)
			end
			table.insert(a, "\n| nickname      = " .. table.concat(s, ", "))
			table.insert(a, "\n| nickname_type = Smeknamn")
		end
	end	
	if args.slogan then
		table.insert(a, "\n| motto      = " .. args.slogan)
		table.insert(a, "\n| motto_type = Slogan")
	end

	local bild = args.bild
	local bildtext = args.bildtext
	local bildstorlek = args.bildstorlek
	if not bild then
		local data = wikidata({entity = entity, property = 'P18', raw = 'true', noref='true', enbarten = 'true', langpref = 'sv'})
		if data and #data >0 then
			bild = data[1].value
			bildtext = data[1].bildtext or data[1].motiv
		end
	end
	if bild and bild ~= '' then
		table.insert(a, "\n| image         = " .. (bild or ''))
		if bildtext then
			table.insert(a, "\n| image_caption = " .. (bildtext or ''))
		end
		if bildstorlek then
			table.insert(a, "\n| image_size    = " .. bildstorlek)
		end
	else
		local c = {['Uppsala'] = true,	['Kalmar'] = true, ['Blekinge'] = true, ['Skåne'] = true, ['Örebro'] = true}
		local lan = lankod2lan(lankod(entity))
		ill_kat = '[[Kategori:Illustrationsbehov-'..lan
		if not c[lan] then ill_kat = ill_kat .. 's' end 
		ill_kat = ill_kat .. ' län]]'
	end
	
	if ortnamn == "Lödöse" or ortnamn == "Hinken och spaden" or ortnamn == 'Fjällbacka' then
		if args.vapen then
			table.insert(a, "\n| symbol      = " .. args.vapen)
			if args.vapennamn then
				table.insert(a, "\n| symbol_type = " .. args.vapennamn)
			else
				table.insert(a, "\n| symbol_type = Vapen")
			end
		else
			local data = wikidata({entity = entity, property = 'P94', raw = 'true', noref='true', enbarten = 'true'})
			local data2 = wikidata({entity = entity, property = 'P237', raw = 'true', noref='true', enbarten = 'true', label = 'Vapen'})
			if data and #data > 0 then
				table.insert(a, "\n| symbol = " .. data[1].value)
				if data2 and #data2 > 0 then
					table.insert(a, "\n| symbol_type = " .. data2[1].value)
				else
					table.insert(a, "\n| symbol_type = Vapen")
				end
			end
		end
	end

	table.insert(a, "\n| country       = Sverige")
	table.insert(a, "\n| country_flag  = Flag of Sweden.svg")

	local landskap = args.landskap or args.landskap1
	local landskap2 = args.landskap2 or ''
	local landskap3 = args.landskap3 or ''
	if not landskap then
		local v = harva(entity, 'Q127448', 'Q193556', 99)
		landskap =  indexera(v, 1)
		landskap2 = indexera(v, 2)
		landskap3 = indexera(v, 3)
	end
	if landskap and landskap ~= '' then
		table.insert(a, "\n| state  = " .. landskap)
		if landskap2 and landskap2 ~= '' then
			table.insert(a, "\n| state1 = " .. landskap2)
			if landskap3 and landskap3 ~= '' then
				table.insert(a, "\n| state2 = " .. landskap3)
			end
		end
		table.insert(a, "\n| state_type            = [[Landskap i Sverige|Landskap]]")
		table.insert(a, "\n| state_label           = Landskap orten ligger i")
	end
	local lan = args['län'] or args['län1'] 
	local lan2 = args['län2'] 
	local lan3 = args['län3'] 
	if not lan then
		local v = harva(entity, 'Q127448', 'Q200547', 99)
		lan = indexera(v, 1) 
		lan2 = indexera(v, 2)
		lan3 = indexera(v, 3)
	end
	if lan and lan ~= ''  then
		table.insert(a, "\n| region  = " .. lan)
		if lan2 and lan2 ~= ''  then
			table.insert(a, "\n| region1 = " .. lan2)
			if lan3 and lan3 ~= ''  then
				table.insert(a, "\n| region2 = " .. lan3)
			end
		end
		table.insert(a, "\n| region_type            = [[Sveriges län|Län]]")
		table.insert(a, "\n| region_label           = Län orten ligger i")
	end

	local comiqs = {}
	local antalkommuner = 0
	local kommun = args['kommun'] or args['kommun1']
	local kommun2 = args['kommun2']
	local kommun3 = args['kommun3']
	local kommun4 = args['kommun4']
	local kommun5 = args['kommun5']
	local kommun6 = args['kommun6']
	local kommun7 = args['kommun7']
	local kommun8 = args['kommun8']
	local kommun9 = args['kommun9']
	local kommun10 = args['kommun10']
	local kommun11 = args['kommun11']
	local kommun12 = args['kommun12']
	local kommun13 = args['kommun13']
	local kommun14 = args['kommun14']
	local kommun15 = args['kommun15']
	if not kommun then
		local v = harva(entity, 'Q127448', 'Q127448', 99)
		kommun   = indexera(v, 1)
		kommun2  = indexera(v, 2)
		kommun3  = indexera(v, 3)
		kommun4  = indexera(v, 4)
		kommun5  = indexera(v, 5)
		kommun6  = indexera(v, 6)
		kommun7  = indexera(v, 7)
		kommun8  = indexera(v, 8)
		kommun9  = indexera(v, 9)
		kommun10 = indexera(v, 10)
		kommun11 = indexera(v, 11)
		kommun12 = indexera(v, 12)
		kommun13 = indexera(v, 13)
		kommun14 = indexera(v, 14)
		kommun15 = indexera(v, 15)
	end
	
	if kommun and kommun ~= '' then
		table.insert(a, "\n| municipality = " .. kommun)
		antalkommuner = 1
		if kommun2 and kommun2 ~= '' then
			table.insert(a, "\n| municipality1 = " .. kommun2)
			antalkommuner = 2
			if kommun3 and kommun3 ~= '' then
				table.insert(a, "\n| municipality2 = " .. kommun3)
				antalkommuner = 3
				if kommun4 and kommun4 ~= '' then
					table.insert(a, "\n| municipality3 = " .. kommun4)
					antalkommuner = 4
					if kommun5 and kommun5 ~= '' then
						table.insert(a, "\n| municipality4 = " .. kommun5)
						antalkommuner = 5
						if kommun6 and kommun6 ~= '' then
							table.insert(a, "\n| municipality5 = " .. kommun6)
							antalkommuner = 6
							if kommun7 and kommun7 ~= '' then
								table.insert(a, "\n| municipality6 = " .. kommun7)
								antalkommuner = 7
								if kommun8 and kommun8 ~= '' then
									table.insert(a, "\n| municipality7 = " .. kommun8)
									antalkommuner = 8
									if kommun9 and kommun9 ~= '' then
										table.insert(a, "\n| municipality8 = " .. kommun9)
										antalkommuner = 9
										if kommun10 and kommun10 ~= '' then
											table.insert(a, "\n| municipality9 = " .. kommun10)
											antalkommuner = 10
											if kommun11 and kommun11 ~= '' then
												table.insert(a, "\n| municipality10 = " .. kommun11)
												antalkommuner = 11
												if kommun12 and kommun12 ~= '' then
													table.insert(a, "\n| municipality11 = " .. kommun12)
													antalkommuner = 12
													if kommun13 and kommun13 ~= '' then
														table.insert(a, "\n| municipality12 = " .. kommun13)
														antalkommuner = 13
														if kommun14 and kommun14 ~= '' then
															table.insert(a, "\n| municipality13 = " .. kommun14)
															antalkommuner = 14
															if kommun15 and kommun15 ~= '' then
																table.insert(a, "\n| municipality14 = " .. kommun15)
																antalkommuner = 15
															end
														end
													end
												end
											end
										end
									end
								end
							end
						end
					end
				end							
			end
		end
		if kommun2 and kommun2 ~= '' then
			table.insert(a, "\n| municipality_type = [[Sveriges kommuner|Kommuner]]")
			table.insert(a, "\n| municipality_label    = Kommuner orten ligger i")
		else
			table.insert(a, "\n| municipality_type = [[Sveriges kommuner|Kommun]]")
			table.insert(a, "\n| municipality_label    = Kommun orten ligger i")
		end
	end	

	
	
	local distrikt = args.distrikt or args.distrikt1
	local distrikt2 = args.distrikt2
	local distrikt3 = args.distrikt3
	local distrikt4 = args.distrikt4
	local distrikt5 = args.distrikt5
	local distrikt6 = args.distrikt6
	local distrikt7 = args.distrikt7
	if not distrikt then
		local v = harva(entity, 'Q18333556', 'Q18333556', 99)
		distrikt = indexera(v, 1)
		distrikt2 = indexera(v, 2)
		distrikt3 = indexera(v, 3)
		distrikt4 = indexera(v, 4)
		distrikt5 = indexera(v, 5)
		distrikt6 = indexera(v, 6)
		distrikt7 = indexera(v, 7)
		distrikt8 = indexera(v, 8)
		distrikt9 = indexera(v, 9)
		distrikt10 = indexera(v,10)
	end
	if distrikt and distrikt ~= '' then
		table.insert(a, "\n| parish = " .. distrikt)
		if distrikt2 and distrikt2 ~= '' then
			table.insert(a, "\n| parish1 = " .. distrikt2)
			if distrikt3 and distrikt3 ~= '' then
				table.insert(a, "\n| parish2 = " .. distrikt3)
				if distrikt4 and distrikt4 ~= '' then
					table.insert(a, "\n| parish3 = " .. distrikt4)
					if distrikt5 and distrikt5 ~= '' then
						table.insert(a, "\n| parish4 = " .. distrikt5)
						if distrikt6 and distrikt6 ~= '' then
							table.insert(a, "\n| parish5 = " .. distrikt6)
							if distrikt7 and distrikt7 ~= '' then
								table.insert(a, "\n| parish6 = " .. distrikt7)
								if distrikt8 and distrikt8 ~= '' then
									table.insert(a, "\n| parish7 = " .. distrikt8)
									if distrikt9 and distrikt9 ~= '' then
										table.insert(a, "\n| parish8 = " .. distrikt9)
										if distrikt10 and distrikt10 ~= '' then
											table.insert(a, "\n| parish9 = " .. distrikt10)
										end
									end
								end
							end
						end
					end
				end
			end
		end
		table.insert(a, "\n| parish_type           = [[Sveriges distrikt|Distrikt]]")
		table.insert(a, "\n| parish_label          = Distrikt orten ligger i")
	end
	
	if args.koordinat then
		table.insert(a, "\n| location = " .. args.koordinat)
	end
	
	local elevation = args['höjdläge'] 
	if elevation then
		table.insert(a, "\n| elevation = " .. elevation)
	else
		local v = wikidata({entity=entity, property='P2044', enbarten = 'true', raw = 'true', convertunit='Q11573', noref='noimport'})
		if v and #v > 0 then
			v = v[1]
			if tonumber(v.amount) then
				table.insert(a, "\n| elevation = " .. math.abs( tonumber(v.amount)) )
				if tonumber(v.amount) < 0 then
					table.insert(a, "\n| elevation_unit = muh" )
				else
					table.insert(a, "\n| elevation_unit = möh" )
				end
				if v.ref and v.ref ~= '' then
					table.insert(a, "\n| elevation_note = " .. v.ref)
				end
			end
		end
	end

	local highest = args['högsta punkt namn'] 

	if highest then
		table.insert(a, "\n| highest = " .. highest )
		local highest_elevation = args['högsta punkt meter'] 
		if highest_elevation then
			table.insert(a, "\n| highest_elevation = " .. highest_elevation )
		end
	else
		local v = wikidata({entity=entity, property='P610', enbarten = 'true', raw = 'true'})
		if v and #v > 0 then
			table.insert(a, "\n| highest = " .. v[1].value .. v[1].ref)
			local v2 = wikidata({entityId=v[1].item, property='P2044', enbarten = 'true', raw = 'true', convertunit='Q11573', noref='noimport'})
			if v2 and #v2 > 0 then
				if tonumber(v2[1].amount) then
					table.insert(a, "\n| highest_elevation = " .. math.abs( tonumber(v2[1].amount)) )
					if tonumber(v2[1].amount) < 0 then
						table.insert(a, "\n| highest_elevation_unit = muh" )
					else
						table.insert(a, "\n| highest_elevation_unit = möh" )
					end
					table.insert(a, "\n| highest_elevation_note = " .. v2[1].ref)
				end
			end
			v2 = wikidata({entityId=v[1].item, property='P625', enbarten = 'true', raw = 'true', noref = 'true', nogeodataparser = 'true'})
			if v2 and #v2 > 0 then
				v2 = Ortsfaktarat(v2[1], 'sekund')
				table.insert(a, "\n| highest_lat_d   = " .. (v2.lat_g or ''))
				table.insert(a, "\n| highest_lat_m   = " .. (v2.lat_m or ''))
				table.insert(a, "\n| highest_lat_s   = " .. (v2.lat_s or ''))
				table.insert(a, "\n| highest_lat_NS  = " .. (v2.lat_NS or ''))
				table.insert(a, "\n| highest_long_d  = " .. (v2.long_g or ''))
				table.insert(a, "\n| highest_long_m  = " .. (v2.long_m or ''))
				table.insert(a, "\n| highest_long_s  = " .. (v2.long_s or ''))
				table.insert(a, "\n| highest_long_EW = " .. (v2.long_EW or ''))
			end
		end
	end


	local lowest = args['lägsta punkt namn'] 
	if lowest then
		table.insert(a, "\n| lowest = " .. lowest )
		local lowest_elevation = args['lägsta punkt meter'] 
		if lowest_elevation then
			table.insert(a, "\n| lowest_elevation = " .. lowest_elevation )
		end
	else
		local v = wikidata({entity=entity, property='P1589', enbarten = 'true', raw = 'true'})
		if v and #v > 0 then
			table.insert(a, "\n| lowest = " .. v[1].value .. v[1].ref)
			local v2 = wikidata({entityId=v[1].item, property='P2044', enbarten = 'true', raw = 'true', convertunit='Q11573', noref='noimport'})
			if v2 and #v2 > 0 then
				if tonumber(v2[1].amount) then
					table.insert(a, "\n| lowest_elevation = " .. math.abs( tonumber(v2[1].amount)) )
					if tonumber(v2[1].amount) < 0 then
						table.insert(a, "\n| lowest_elevation_unit = muh" )
					else
						table.insert(a, "\n| lowest_elevation_unit = möh" )
					end
					table.insert(a, "\n| lowest_elevation_note = " .. v2[1].ref)
				end
			end
			v2 = wikidata({entityId=v[1].item, property='P625', enbarten = 'true', raw = 'true', noref = 'true', nogeodataparser = 'true'})
			if v2 and #v2 > 0 then
				v2 = Ortsfaktarat(v2[1], 'sekund')
				table.insert(a, "\n| lowest_lat_d   = " .. (v2.lat_g or ''))
				table.insert(a, "\n| lowest_lat_m   = " .. (v2.lat_m or ''))
				table.insert(a, "\n| lowest_lat_s   = " .. (v2.lat_s or ''))
				table.insert(a, "\n| lowest_lat_NS  = " .. (v2.lat_NS or ''))
				table.insert(a, "\n| lowest_long_d  = " .. (v2.long_g or ''))
				table.insert(a, "\n| lowest_long_m  = " .. (v2.long_m or ''))
				table.insert(a, "\n| lowest_long_s  = " .. (v2.long_s or ''))
				table.insert(a, "\n| lowest_long_EW = " .. (v2.long_EW or ''))
			end
		end
	
	end

	local nordligt = nil
	if args.lat_dec or args.lat_g then
		nordligt = tonumber(args.lat_dec or args.lat_g)
		table.insert(a, "\n| lat_d   = " .. (args.lat_dec or args.lat_g))
		table.insert(a, "\n| lat_m   = " .. (args.lat_m or ''))
		table.insert(a, "\n| lat_s   = " .. (args.lat_s or ''))
		table.insert(a, "\n| lat_NS  = " .. (args.lat_NS or ''))
		table.insert(a, "\n| long_d  = " .. (args.long_dec or args.long_g or ''))
		table.insert(a, "\n| long_m  = " .. (args.long_m or ''))
		table.insert(a, "\n| long_s  = " .. (args.long_s or ''))
		table.insert(a, "\n| long_EW = " .. (args.long_EW or ''))
	elseif not args.koordinat then
		local v = wikidata({entity = entity, property = 'P625', raw = 'true', noref='true', enbarten = 'true', nogeodataparser = 'true'})
		if v and #v > 0 then
			v = Ortsfaktarat(v[1], 'sekund')
			if v then
				nordligt = tonumber(v.lat_g)
				table.insert(a, "\n| lat_d   = " .. (v.lat_g or ''))
				table.insert(a, "\n| lat_m   = " .. (v.lat_m or ''))
				table.insert(a, "\n| lat_s   = " .. (v.lat_s or ''))
				table.insert(a, "\n| lat_NS  = " .. (v.lat_NS or ''))
				table.insert(a, "\n| long_d  = " .. (v.long_g or ''))
				table.insert(a, "\n| long_m  = " .. (v.long_m or ''))
				table.insert(a, "\n| long_s  = " .. (v.long_s or ''))
				table.insert(a, "\n| long_EW = " .. (v.long_EW or ''))
			end
		end
	end
	a = HjalpSverige(entity, a, args, antalkommuner, ortnamn, "Sverige")
	
	if args.grundades then
		table.insert(a, "\n| established = " .. args.grundades)
	else
		local v = wikidata({entity = entity, property = 'P571', conjunction = '<br/>', separator = '<br/>', som = 'true'})
		if v and v ~= '' then
			table.insert(a, "\n| established = " .. v)
		end
	end
	
	table.insert(a, '\n| timezone     = [[Centraleuropeisk tid|CET]] | utc_offset = +1 | timezone_type = [[Tidszon]]')
	table.insert(a, '\n| timezone_DST = [[Centraleuropeisk tid|CEST]]| utc_offset_DST = +2')
	
	if args.postort then
		table.insert(a, '\n| postal_town = ' .. namnversalisering(args.postort))
		table.insert(a, '\n| postal_town_type = [[Postort]]')
		if args.postort_not then
			table.insert(a, '\n| postal_town_note = ' .. args.postort_not)
		end
	end
	
	if args.postnummer then
		table.insert(a, '\n| postal_code = ' .. args.postnummer)
		table.insert(a, '\n| postal_code_type = [[Postnummer i Sverige|Postnummer]]')
	else
		local v = wikidata({entity = entity, property = 'P281'})
		if v and v ~= '' then
			table.insert(a, '\n| postal_code = ' .. v)
			table.insert(a, '\n| postal_code_type = [[Postnummer i Sverige|Postnummer]]')
		end	
	end

	if args.riktnummer then
		table.insert(a, '\n| area_code = ' .. args.riktnummer)
		table.insert(a, '\n| area_code_type = [[Riktnummer]]')
	else
		local v = wikidata({entity = entity, property = 'P473'})
		if v and v ~= '' then
			table.insert(a, '\n| area_code = ' .. v)
			table.insert(a, '\n| area_code_type = [[Riktnummer]]')
		end	
	end
	
	if args['tätortskod'] or args['tätortskod1'] then
		table.insert(a, '\n| code_type = [[Tätortskod]]')
		if args['tätortskod'] then
			table.insert(a, '\n| code      = ' .. args['tätortskod'])
		end
		if args['tätortskod1'] then
			table.insert(a, '\n| codea      = ' .. args['tätortskod1'])
			table.insert(a, '\n| codea_type = ' .. args['tätortskod1_text'])
			if args['tätortskod2'] then
				table.insert(a, '\n| codeb      = ' .. args['tätortskod2'])
				table.insert(a, '\n| codeb_type = ' .. args['tätortskod2_text'])
				if args['tätortskod3'] then
					table.insert(a, '\n| codec      = ' .. args['tätortskod3'])
					table.insert(a, '\n| codec_type = ' .. args['tätortskod3_text'])
				end
			end
		end
	else
		local v = wikidata({entity = entity, property = 'P775', withintervall = 'yes', modifyqualifiertime = 'Y', separator = '<br/>', conjunction = '<br/>', rank = 'valid' })
		if v then
			table.insert(a, '\n| code_type = [[Tätortskod]]')
			table.insert(a, '\n| code      = ' .. v)
		end
	end
	if args['småortskod'] or args['småortskod1'] then
		table.insert(a, '\n| code1_type = [[Småortskod]]')
		if args['småortskod'] then
			table.insert(a, '\n| code1      = ' .. args['småortskod'])
		end
		if args['småortskod1'] then
			table.insert(a, '\n| code1a      = ' .. args['småortskod1'])
			table.insert(a, '\n| code1a_type = ' .. (args['småortskod1_text'] or ''))
			if args['småortskod2'] then
				table.insert(a, '\n| code1b      = ' .. args['småortskod2'])
				table.insert(a, '\n| code1b_type = ' .. args['småortskod2_text'])
				if args['småortskod3'] then
					table.insert(a, '\n| code1c      = ' .. args['småortskod3'])
					table.insert(a, '\n| code1c_type = ' .. args['småortskod3_text'])
				end
			end
		end
	else
		local v = wikidata({entity = entity, property = 'P776', withintervall = 'yes', modifyqualifiertime = 'Y', separator = '<br/>', conjunction = '<br/>', rank = 'valid' })
		if v then
			table.insert(a, '\n| code1_type = [[Småortskod]]')
			table.insert(a, '\n| code1      = ' .. v)
		end
	end
	if args['fritidshusområdeskod'] then
		table.insert(a, '\n| code2       = ' .. args['fritidshusområdeskod'])
		table.insert(a, '\n| code2_type  = [[Fritidshusområde|Fritidshusomr.kod]]')
	else
		local v = wikidata({entity = entity, property = 'P980', withintervall = 'yes', modifyqualifiertime = 'Y', separator = '<br/>', conjunction = '<br/>' })
		if v then 
			table.insert(a, '\n| code2       = ' .. v)
			table.insert(a, '\n| code2_type  = [[Fritidshusområde|Fritidshusomr.kod]]')
		end
	end
	local v = wikidata({entity = entity, property = 'P10708', withintervall = 'yes', sortbytime = 'inverted', modifyqualifiertime = 'Y', separator = '<br/>', conjunction = '<br/>' })
	if v then
		table.insert(a, '\n| code3 = ' .. v)
		table.insert(a, '\n| code3_type = [[Bebyggelseområdeskod|Beb.områdeskod]]')
	end
	if args.statistikkod then
		table.insert(a, '\n| code4      = ' .. args.statistikkod)
		table.insert(a, '\n| code4_type = Statistikkod')
	end
	
	if args.geonames then
		table.insert(a, '\n| geonames = ' .. args.geonames)
	end

	if args.positionskarta then
		table.insert(a, '\n| map           = ' .. (args.positionskartnamn or ''))
		table.insert(a, '\n| map_caption   = ' .. (args.karttext or ''))
		table.insert(a, '\n| map_size      = ' .. (args.kartstorlek or ''))
		if args['prickpos x'] then
			table.insert(a, '\n| map_locator_x = ' .. (args['prickpos x'] or ''))
			table.insert(a, '\n| map_locator_y = ' .. (args['prickpos y'] or ''))
		elseif args.positionskarta then
			table.insert(a, '\n| map_locator   = ' .. args.positionskarta)
		end
	elseif args['prickpos x'] then
		table.insert(a, '\n| map           = Sverigekarta infobox.svg')
		table.insert(a, '\n| map_caption   = ' .. (args.karttext or ''))
		table.insert(a, '\n| map_size      = ' .. (args.kartstorlek or ''))
		table.insert(a, '\n| map_locator_x = ' .. (args['prickpos x'] or ''))
		table.insert(a, '\n| map_locator_y = ' .. (args['prickpos y'] or ''))
	else
		local s1 = positionskartnamn(entity)
		local s2 = positionskarta(entity)
		table.insert(a, '\n| map           = ' .. s1)
		local c = {['Uppsala'] = true,	['Kalmar'] = true, ['Blekinge'] = true, ['Skåne'] = true, ['Örebro'] = true}
		
		if s2 == '' then
			table.insert(a, '\n| map_caption   = Ortens läge i Sverige')
			s2 = 'Sverige'
		elseif c[s2] then
			table.insert(a, '\n| map_caption   = Ortens läge i ' .. s2 .. ' län')
		else
			table.insert(a, '\n| map_caption   = Ortens läge i ' .. s2 .. 's län')
		end
		table.insert(a, '\n| map_locator   = ' .. s2)
	end

	if args.karta then
		table.insert(a, '\n| map2            = ' .. args.karta)
		if args.karttext2 then
			table.insert(a, '\n| map2_caption  = ' .. args.karttext2)
		end
		if args.kartstorlek2 then
			table.insert(a, '\n| map2_size     = ' .. args.kartstorlek2)
		end
		if args.karttyp then
			table.insert(a, '\n| map2_type     = ' .. args.karttyp)
		end
	end
	local kmlfaktaruta = require('Modul:KML faktaruta').main
	local k = kmlfaktaruta(entity)
	if k then
		table.insert(a, '\n| KML                   = ' .. k)
	end
	
	if args.fotnot and args.fotnot ~= '' then
		table.insert(a, '\n| footnotes         = ' .. args.fotnot .. '<br />' .. reginalink() .. '<br />[[d:'.. entity.id .. '|Redigera Wikidata]]')
	else
		table.insert(a, '\n| footnotes         = ' .. reginalink() .. '<br />[[d:'.. entity.id .. '|Redigera Wikidata]]')
	end

	if args.commons then
		table.insert(a, '\n| commons               = ' .. args.commons)
	else
		table.insert(a, '\n| commons               = ' .. Comcat(entity))
	end

	table.insert(a, '\n}}')
	return mw.getCurrentFrame():preprocess(table.concat(a)) --..ill_kat (deaktiverar tillsviddare)
end		

function reginalink()
-- länk till ReginaWeb (geodata.scb.se) för den tätort eller småort som är angiven. 
-- funktionen klarar i nuvarande form bara av att hantera en tätortskod och en småortskod.
-- länken går till alla generationer av den aktuella orten, skulle kunna förfinas genom att analysera startdatum och slutdatum för alla P31-uttalanden och bara länka till den senaste
    local res = ''

-- från oktober 2021 har SCB inför nya koder för tätorter och småorter. 
-- kartfunktionen klarar för tillfället inte de gamla koderna för tätorter och småorter varför det krävs att gamla koder översätt till nya koder innan reginawebmap anropas för att man ska komma till rätt karta.

-- Uppdatering 2024-09-15. Alla orter med P776 eller P775 har nu P10708 i sina Wikidataobjekt, så functionen SCBnykod, som översatte från gammal till ny kod, behövs inte längre
--	local tkod = wikidata({entity = entity, property = 'P775', enbarten = 'ja', noref = 'true', avoidstringpattern = 'X'})
--	tkod = SCBnykod({args = {gammalkod=tkod}})
--	local skod = wikidata({entity = entity, property = 'P776', enbarten = 'ja', noref = 'true'})
--	skod = SCBnykod({args = {gammalkod=skod}})
	local okod = wikidata({entity = entity, property = 'P10708', enbarten = 'ja', sortbytime = 'chronological', noref = 'true'})
--    if tkod and tkod ~= '' and okod == nil then
--		res = '[http://geodata.scb.se/reginawebmap/main/webapp/?typ=tatort&t=' .. tkod .. ' SCB:s tätortsavgränsning]'	
--    end
--	if skod and skod ~= '' and okod == nil then 
--		if tkod and tkod ~= '' then
--			res = res .. '<br />'
--		end 
--		res = res .. '[http://geodata.scb.se/reginawebmap/main/webapp/?typ=smaort&s=' .. skod .. ' SCB:s småortsavgränsning]'
--	end
	if okod and okod ~= '' then
--		if skod and skod ~= '' or tkod and tkod ~= '' then
----			res = res .. '<br />'	
--		end
		if string.find(okod,'T') == 5 then
			typ = 'tatort&t='
		elseif string.find(okod,'S') == 5 then
			typ = 'smaort&s='
		else
			typ = ''  -- hit ska man inte komma sålänge det bara finns P10708 för småorter (S) och tätorter (T) i Wikidata
		end
		if typ ~= '' then
			res = res .. '[http://geodata.scb.se/reginawebmap/main/webapp/?typ=' .. typ .. okod .. ' SCB:s bebyggelseområdesavgränsning]'
		end
	end
	return res
end

function indexera(v, i)
	if v and #v >= i then
		return v[i].value
	end
	return ''
end

function kommunqids(v)
	local s = {}
	for i, j in pairs(v) do
		table.insert(s, v.item)
	end
	return s
end

function lankod2lan(lankod)
local lan = ''
if lankod == '01' then lan = 'Stockholm'
	elseif lankod == '03' then lan = 'Uppsala'
	elseif lankod == '04' then lan = 'Södermanland'
	elseif lankod == '05' then lan = 'Östergötland'
	elseif lankod == '06' then lan = 'Jönköping'
	elseif lankod == '07' then lan = 'Kronoberg'
	elseif lankod == '08' then lan = 'Kalmar'
	elseif lankod == '09' then lan = 'Gotland'
	elseif lankod == '10' then lan = 'Blekinge'	
    elseif lankod == '12' then lan = 'Skåne'
    elseif lankod == '13' then lan = 'Halland'
	elseif lankod == '14' then lan = 'Västra Götaland'
	elseif lankod == '17' then lan = 'Värmland'
	elseif lankod == '18' then lan = 'Örebro'
	elseif lankod == '19' then lan = 'Västmanland'
	elseif lankod == '20' then lan = 'Dalarna'
	elseif lankod == '21' then lan = 'Gävleborg'
	elseif lankod == '22' then lan = 'Västernorrland'
	elseif lankod == '23' then lan = 'Jämtland'
	elseif lankod == '24' then lan = 'Västerbotten'
	elseif lankod == '25' then lan = 'Norrbotten'
	else lan = ''
end
return lan
end

function lankod(entity) -- hämtar länskod från i första hand det län, i andra hand den kommun som objektet ingår i och i tredje hand det distrikt som objektet ingår i
	local INOM_ADMINISTRATIVT_OMRADE = 'P131'
	local               SVERIGES_LAN = 'Q200547'
	local          SVERIGES_KOMMUNER = 'Q127448'
	local                    LANSKOD = 'P507'
	local        KOMMUNKOD_I_SVERIGE = 'P525'
	local          SVERIGES_DISTRIKT = 'Q18333556'
	local t = {}
	t = wikidata({entity = entity, property=INOM_ADMINISTRATIVT_OMRADE,noref='true',nolink='ja',getonly=SVERIGES_LAN,raw='ja'}) -- hämta län som objektet ingår i 
	if t and t[1] then 
    	return wikidata({property=LANSKOD,noref='ja',nolink='ja',entityId=t[1].item}) -- returnera länskoden 
	end
	t = wikidata({entity = entity, property=INOM_ADMINISTRATIVT_OMRADE,noref='true',nolink='ja',getonly=SVERIGES_KOMMUNER,raw='ja',avoidqualifier='P582'}) -- hämta kommun om län ej var angivet
	if t and t[1] then
		return mw.ustring.sub(wikidata({property=KOMMUNKOD_I_SVERIGE,noref='true',nolink='ja',entityId=t[1].item,avoidqualifier='P582'}),1,2) -- returnera de två första siffrorna i kommunkoden	
	end
	t = wikidata({entity = entity, property=INOM_ADMINISTRATIVT_OMRADE,noref='true',nolink='ja',getonly=SVERIGES_DISTRIKT,raw='ja',avoidqualifier='P582'}) -- hämta distrikt om varken län eller kommun var angivna
    if t and t[1] then
    	tt = wikidata({entityId = t[1].item,property=INOM_ADMINISTRATIVT_OMRADE,noref='true',nolink='ja',getonly=SVERIGES_KOMMUNER,raw='ja',avoidqualifier='P582'}) -- hämta kommun från distriktet
    	if tt and tt[1] then
    		return mw.ustring.sub(wikidata({property=KOMMUNKOD_I_SVERIGE,noref='true',nolink='ja',entityId=tt[1].item,avoidqualifier='P582'}),1,2) -- returnera de två första siffrorna i kommunkoden	
    	end
    end
	return ''
end

function positionskartnamn(frame) -- kartbild för länet som objektet tillhör. används av till exempel mallen "Ortsfakta Sverige WD"
   return mw.getCurrentFrame():preprocess('{{Kartposition Sverige '..lankod2lan(lankod(frame))..'|bild}}')
end 

function positionskarta(frame) -- kartlokalisering (Geolocator) för länet som objektet tillhör. används av till exempel mallen "Ortsfakta Sverige WD"
	return lankod2lan(lankod(frame))
end

function harva(entity, first, second, limit)
	local s = {}
	local l = wikidata({entity = entity, property = "P131", noref='true', avoidqualifier='P582', getonly=second, raw = 'true', getsimpleproperty = '15px', getproperty = 'P94', getenbarten = 'true', rank = 'valid'})
	if l and #l > limit then 
		return {}
	end
	if l and #l > 0 then
		return l
	else 
		l = wikidata({entity = entity, property = "P131", noref='true', avoidqualifier='P582', getonly=first, raw = 'true', getsimpleproperty = '15px', getproperty = 'P94', getenbarten = 'true'})
		if l and #l > limit then 
			return {}
		end
		local b = {}
		if l then
			for i3, j3 in pairs(l) do
				l2 = wikidata({entityId = j3.item, property = "P131", noref='true', avoidqualifier='P582', getonly=second, raw = 'true', getsimpleproperty = '15px', getproperty = 'P94', getenbarten = 'true'})
				for i, j in pairs(l2) do
					local f = false
					for i2, j2 in pairs(b) do
						if j.item == j2.item then
							f = true
						end
					end
					if not f then
						table.insert(b, j)
					end
				end
			end
		end
		if #b > limit then 
			return {}
		else
			return b
		end
	end
	return {}
end

function Comcat(entity)
	if not entity or not entity.claims or not entity.claims.P373 then
		return ''
	else
		if entity.claims.P373[1].mainsnak.snaktype ~= 'value' then
			return ''
		else
			return entity.claims.P373[1].mainsnak.datavalue.value
		end
	end
end


return p