blueapple8259/wikipedia-ko huggingface dataset:
name = '생바르텔레미',
	top = 17.9875,
	bottom = 17.8625,
	left = -62.9625,
	right = -62.7625,
	image = 'Saint-Barthélemy collectivity location map with quartiers.svg',
	image1 = 'Saint-Barthélemy collectivity relief location map.jpg',
	image2 = 'Saint-Barthélemy collectivity location map.svg'
name = 'Europe',
	x = '36.2918 + 116.767*( cos( $1*pi/180 )*sin( ($2-10.5542)*pi/180 ) ) * ( ((1 + sin( $1*pi/180 )*sin( 56.0858*pi/180 ) + cos( $1*pi/180 )*cos( 56.0858*pi/180 )*cos( ($2-10.5542)*pi/180 ) ) *0.5)^ -0.5)',
	y = '50.5859 - 136.823*( cos( 56.0858* pi/180)*sin( $1*pi/180 ) - sin( 56.0858*pi/180 )*cos( $1*pi/180 )*cos( ($2-10.5542)*pi/180 ) ) * ( ((1 + sin( $1*pi/180 )*sin( 56.0858*pi/180 ) + cos( $1*pi/180 )*cos( 56.0858*pi/180 )*cos( ($2-10.5542)*pi/180 ) ) *0.5)^ -0.5)',
	image = 'Europe position map 4.svg',
	image1 = 'Europe_relief_map_4.png'
name = 'Racha-Lechkhumi and Kvemo Svaneti',
	top = 43.000581341,
	bottom = 42.333946352,
	left = 42.313112165,
	right = 43.990764467,
	image = 'Georgia Racha-Lechkhumi and Kvemo Svaneti location map.svg',
	image1 = 'Georgia Racha-Lechkhumi and Kvemo Svaneti relief location map.svg'
name = 'CFU',
	x = '( (50.67894037 + 100 * 0.4330374692 * cos($1*pi/180) * sin(($2-(-90))*pi/180) * ( (( 1 + cos(($1-20)*pi/180) + cos($1*pi/180) * cos(20*pi/180) * (cos(($2-(-90))*pi/180)- 1) )*0.5)^ -0.5 ))- 52.73069680 ) * 3.54',
	y = '( (50.8714553 - 100 * 0.383328363 * ( sin(($1-20)*pi/180) - cos($1*pi/180) * sin(20*pi/180) * (cos(($2-(-90))*pi/180)- 1) ) * ( (( 1 + cos(($1-20)*pi/180) + cos($1*pi/180) * cos(20*pi/180) * (cos(($2-(-90))*pi/180)- 1) )*0.5)^ -0.5 )) - 40 ) * 4.615384615',
	image = 'CFU countries location map.png',
name = 'CanadaGeo',
	image = 'Canada_geopolitical_map_trim.jpg',
	x = '43.337724969237172 - 2.056739941370653*($1 - 90.076056288799123)*sin(0.014911471311070*($2 - ($2 > 0)*360 + 94.820677904662404))',
	y = '0.309016119058895 - 2.056739941370653*($1 - 90.076056288799123)*cos(0.014911471311070*($2 - ($2 > 0)*360 + 94.820677904662404))'
name = '프리볼시스키 연방관구',
	y = '53.84615367 - 440.7367655 * (0.699567535 - (1.659498624 - ($1*pi / 180)) * cos(0.818777804 * ($2 - 52) * pi / 180))',
	x = '50 + 440.7367655 * (1.659498624 - ($1*pi / 180)) * sin(0.818777804 * ($2 - 52) * pi / 180) * 0.9885',
	image = 'Outline Map of Volga Federal District.svg',
	image1 = 'Relief Map of Volga Federal District.jpg'
name = 'Western Prešov Region',
	top = 49.5659722,
	bottom = 48.7266436,
	left = 19.4259259,
	right = 21.6737967,
	image = 'Prešov Region (West) - outline map.svg',
	image1 = 'Prešov Region (West) - physical map.png',
	image2 = 'Prešov Region (West) - background map.png'
name = '앨버타주',
	x = '(47.8062 + 6.31607*($2+115) + 0.033133*($1-55) -0.163349*($1-55)*($2+115) + 0.0101163*($2+115)*($2+115) -0.00888419*($1-55)*($1-55))',
	y = '(45.9081 -0.0512779*($2+115) -8.84793*($1-55) + 0.0102564*($1-55)*($2+115) -0.0167721*($2+115)*($2+115) + 0.0226062*($1-55)*($1-55))',
	image = 'Alberta municipal districts.png',
name = 'Canada',
	image = 'Canada topo.jpg',
	x = '51.3688770752693 - 2.08993734501698*($1 - 89.1948328371273)*sin(0.0146738856952723*($2 - ($2 > 0)*360 + 88.6496582505060))',
	y = '-6.11618556585059 - 2.08993734501698*($1 - 89.1948328371273)*cos(0.0146738856952723*($2 - ($2 > 0)*360 + 88.6496582505060))'
name = 'Eastern Prešov Region',
	top = 49.5418060,
	bottom = 48.6655172,
	left = 20.4210526,
	right = 22.6465969,
	image = 'Prešov Region (East) - outline map.svg',
	image1 = 'Prešov Region (East) - physical map.png',
	image2 = 'Prešov Region (East) - background map.png'
function p.main(frame)
	local map = mw.loadData(string.gsub)
	local retval =
[=[{| class="wikitable" style="text-align:center; margin-top:0;"

]=]
	if map.top then
		retval = retval ..
[=[!rowspan="4"|경계좌표
		if map.right > 180 then
			retval = retval .. ' (' .. map.right - 360 .. ')'
		end
		retval = retval .. '\n' .. [=[
		local width = (map.right - map.left) % 360
		if width == 0 then
			width = 360
		end
		local center = (map.left + width/2) % 360
		if center >= 180 then
			center = center - 360
		end
		retval = retval .. frame:expandTemplate{title = 'coord', args = { (map.top + map.bottom)/2, center }}
		retval = retval .. '\n' .. [=[
	end
	if map.x then
		retval = retval .. '\n' .. [=[
	end
	retval = retval .. '\n' .. [=[
	local i = 0
	while map['image' .. (i+1)] or map['image' .. (i+2)] do
		i = i + 1
		if map['image' .. i] then
			retval = retval .. '\n' .. [=[
		end
	end
	if map.skew then
		retval = retval .. '\n' .. [=[
	end
	if map.lat_skew then
		retval = retval .. '\n' .. [=[
	end
	if map.mark then
		retval = retval .. '\n' .. [=[
	end
	if map.marksize then
		retval = retval .. '\n' .. [=[
	end
	retval = retval .. '\n|}'
	return retval
end
name = 'the US',
	x = '50.0 + 124.03149777329222 * ((1.9694462586094064-($1 * pi / 180)) * sin(0.6010514667026994 * ($2 + 96) * pi / 180))',
	y = '50.0 + 1.6155950752393982 * 124.03149777329222 * ( 0.02613325650382181 - (1.3236744353715044 - (1.9694462586094064 - ($1 * pi / 180)) * cos(0.6010514667026994 * ($2 + 96) * pi / 180)))',
	image = 'Usa edcp (+HI +AL) location map.svg',
	image1 = 'Usa edcp (+HI +AL) relief location map.svg'
name = 'Arkhangelsk Oblast',
	y = '79.842 - 267.15 * (0.4554782742524 - (1.58994228804871 - ($1*pi/180)) * cos(0.921243387637383 * ($2 - 50) * pi/180))',
	x = '52.565 + 466.74 * (1.58994228804871 - ($1*pi/180)) * sin(0.921243387637383 * ($2 - 50) * pi/180) ',
	image = 'Outline-Archangelskaya.png',
	image1 = 'Relief-Archangelskaya.png'
〈**D'yer Mak'er**〉는 1973년 음반 Houses of the Holy의 영국의 록 밴드인 레드 제플린의 곡이다. 제목은 영어 사투리로 말할 때 "자메이카"라는 단어의 희곡이다.

## 개요
이 노래는 1970년대 초 자메이카에서 등장한 레게와 그것의 "덥" 파생상품을 모방하기 위한 것이었다. 그 기원은 1972년 레드 제플린의 스타그로브스 리허설에서 드러머 존 본햄이 1950년대 두왑과 비슷한 박자로 시작하다가 그것을 약간 오프 비트 템포로 비틀면서 레게의 영향력이 나타났던 것으로 추정된다. 이 독특한 드럼 소리는 3개의 마이크를 본햄의 드럼에서 아주 멀리 떨어진 곳에 배치함으로써 만들어졌다.
**진도군**은 대한민국의 옛 국회의원 선거구이다. 당시 전라남도 진도군 지역을 관할했다.

## 역사
제헌 국회의원 선거를 앞두고 진도군 전 지역을 관할하는 선거구로 신설되었다.

제9대 국회의원 선거를 앞두고 해남군 선거구와 통합되면서 해남군·진도군 선거구를 이루게 됨에 따라 폐지되었다.
name = 'Moravian-Silesian Region',
	top = 50.42,
	bottom = 49.3733,
	left = 17.0696,
	right = 18.91,
	image = 'Moravian-Silesian Region - outline map.svg',
	image1 = 'Moravian-Silesian Region - physical map.png',
	image2 = 'Moravian Silesian Region - background map.png'
name = 'UNCAF and CFU',
	x = '( (50.67894037 + 100 * 0.4330374692 * cos($1*pi/180) * sin(($2-(-90))*pi/180) * ( (( 1 + cos(($1-20)*pi/180) + cos($1*pi/180) * cos(20*pi/180) * (cos(($2-(-90))*pi/180)- 1) )*0.5)^ -0.5 ))- 46.17702448 ) * 2.911184211',
	y = '( (50.8714553 - 100 * 0.383328363 * ( sin(($1-20)*pi/180) - cos($1*pi/180) * sin(20*pi/180) * (cos(($2-(-90))*pi/180)- 1) ) * ( (( 1 + cos(($1-20)*pi/180) + cos($1*pi/180) * cos(20*pi/180) * (cos(($2-(-90))*pi/180)- 1) )*0.5)^ -0.5 )) - 40 ) * 4.777070064',
	image = 'UNCAF and CFU countries location map.png',
name = 'Western Canada',
	x = '(( 0.43865313653137 + (1 - ($1 - 63.31)*(0.034717103369757 + 0.000003525145*($1 - 63.31)*($1 - 63.31)))*($2 + 94.94)*( 0.0089116793548638 - 0.000000361163*($2 + 94.94)*($2 + 94.94)))*1048 - 1)/555*100',
	y = '((-0.14714022140221 + (1 - ($1 - 63.31)*(0.034717103369757 + 0.000003525145*($1 - 63.31)*($1 - 63.31)))*( 0.57149446494465 - 0.000069482763*($2 + 94.94)*($2 + 94.94)))*920*1.17826087 - 354)/455*100',
	image = 'Western Canada location map.svg'
name = 'European USSR',
	x = '50 + 213.4825 * cos($1*0.01745329252)*sin(($2-42.5)*0.01745329252) *' ..
		'( ((1 + sin($1*0.01745329252)*sin(57.5*0.01745329252)' ..
 '+ cos($1*0.01745329252)*cos(57.5*0.01745329252)*cos(($2-42.5)*0.01745329252) ) *0.5)^ -0.5)',
	y = '100 - 49.1327 - 161.4897*(cos(57.5*0.01745329252 )*sin($1*0.01745329252)' ..
 '- sin(57.5*0.01745329252)*cos($1*0.01745329252)*cos(($2-42.5)*0.01745329252) ) * ' ..
		'( ((1 + sin( $1*0.01745329252)*sin(57.5*0.01745329252)' ..
 '+ cos($1*0.01745329252)*cos(57.5*0.01745329252)*cos(($2-42.5)*0.01745329252) ) *0.5)^ -0.5)',
	image = 'European Soviet Union laea location map.svg'
name = 'Western Union',
	y = '55.11 - 153.610*( cos( 52* pi/180)*sin( $1*pi/180 ) - sin( 52*pi/180 )*cos( $1*pi/180 )*cos( ($2-10)*pi/180 ) ) * ( ((1 + sin( $1*pi/180 )*sin( 52*pi/180 ) + cos( $1*pi/180 )*cos( 52*pi/180 )*cos( ($2-10)*pi/180 ) ) *0.5)^ -0.5)',
	x = '131.579*( cos( $1*pi/180 )*sin( ($2-10)*pi/180 ) ) * ( ((1 + sin( $1*pi/180 )*sin( 52*pi/180 ) + cos( $1*pi/180 )*cos( 52*pi/180 )*cos( ($2-10)*pi/180 ) ) *0.5)^ -0.5) - (-36.388)',
	image = 'Western Union.svg',
name = 'Lewis & Clark College campus',
	top = 45.4538,
	bottom = 45.4438,
	left = -122.6837,
	right = -122.6651,
	image = 'USA - Oregon - Portland - Lewis & Clark College campus - OpenSteetMap.png',
	image1 = 'USA - Oregon - Portland - Lewis & Clark College campus - OpenSteetMap.png'
**해남군·진도군**은 대한민국의 옛 국회의원 선거구이다. 당시 전라남도 해남군, 진도군 지역을 관할했다.

## 역사
제9대 국회의원 선거를 앞두고 해남군 선거구와 진도군 선거구가 통합됨에 따라 신설되었다.

제13대 국회의원 선거를 앞두고 소선거구제가 시행되었다. 이에 해남군·진도군 선거구는 관할 구역을 유지하면서 1인 선거구로 개편되었다.
name = 'North Slave, Northwest Territories',
	x = '46 + 645 * 0.5 * ln( ( 1 + cos($1*(pi/180))*sin(($2+112)*(pi/180)) ) / ( 1 - cos($1*(pi/180))*sin(($2+112)*(pi/180)) ) )',
	y = '1261 - 1080*(atan(tan($1*(pi/180))/cos(($2+112)*(pi/180)))+0)',
	image = 'NWT North Slave Region Map.svg'
border-spacing:0;
 margin:0;
 font-size:100%;
 line-height:100%;
 border-collapse:separate;
 width:auto;
table.clade table.clade {
 width:100%;

table.clade td.clade-label { /* the cell with the label */
 width:0.7em; /* was only used for first leaf but shouldn't matter for others */
 padding:0 0.15em;
 vertical-align:bottom;
 text-align:center;
 border-left:1px solid; /* don't set default colour, helps with green on black monotype skin */
 border-bottom:1px solid;
 white-space:nowrap;
table.clade td.clade-fixed-width {
 overflow:hidden;
 text-overflow:ellipsis;
table.clade td.clade-fixed-width:hover {
	overflow:visible;
table.clade td.clade-label.first {
	border-left:none;
	border-right:none;
table.clade td.clade-label.reverse {
	border-left:none;
	border-right:1px solid;
table.clade td.clade-slabel { /* the cell with the sublabel; only use if there is a label */
 padding:0 0.15em;
 vertical-align:top;
 text-align:center;
 border-left: 1px solid;
 white-space:nowrap;
table.clade td.clade-slabel:hover {
	overflow:visible;
table.clade td.clade-slabel.last {
	border-left:none;
	border-right:none;
table.clade td.clade-slabel.reverse {
	border-left:none;
	border-right:1px solid;

table.clade td.clade-bar { /* the cell with the bar label or group label */
 vertical-align:middle;
 text-align:left;
 padding:0 0.5em;
 position:relative;
table.clade td.clade-bar.reverse {
 text-align:right;
 position:relative;

table.clade td.clade-leaf { /* the cell with the leaf content (rowspan=2) */
 border:0;
 padding:0;
 text-align:left;
table.clade td.clade-leafR { /* the cell with the leaf content (rowspan=2) */
 border:0;
 padding:0;
 text-align:right;
table.clade td.clade-leaf.reverse { /* the cell with the leaf content (rowspan=2) */
 text-align:right;

table.clade:hover span.linkA {
 background-color: yellow;
table.clade:hover span.linkB {
 background-color: green;
name = 'Subantarctic (Indian Ocean)',
	x = '50 + (100*0.853799)*( cos( $1*0.01745329252 )*sin( ($2-(100))*0.01745329252 ) )*( ((1+sin($1*0.01745329252 )*sin(-50*0.01745329252 ) + cos($1*0.01745329252)*cos(-50*0.01745329252 )*cos( ($2-(100))*0.01745329252))*0.5)^ -0.5)',
	y = '33.33333 - (100*0.9696459)*( cos( -50*0.01745329252 )*sin( $1*0.01745329252 ) - sin( -50*0.01745329252 )*cos( $1*0.01745329252 )*cos( ($2-(100))*0.01745329252 ) ) * ( ((1 + sin( $1*0.01745329252 )*sin( -50*0.01745329252 ) + cos( $1*0.01745329252 )*cos( -50*0.01745329252 )*cos( ($2-(100))*0.01745329252 ) ) *0.5)^ -0.5)',
	image = 'Subantarctic (Indian Ocean).png'
name = 'Alberta',
	x = '50 + 796 * 0.5 * ln( ( 1 + cos($1*(pi/180))*sin(($2+115)*(pi/180)) ) / ( 1 - cos($1*(pi/180))*sin(($2+115)*(pi/180)) ) )',
	y = '516.2 - 489*(atan(tan($1*(pi/180))/cos(($2+115)*(pi/180)))+0)',
	image = 'Alberta County Point Locator.svg'
name = 'Megaregions of the United States',
	x = '50.0 + 124.03149777329222 * ((1.9694462586094064-($1 * pi / 180)) * sin(0.6010514667026994 * ($2 + 96) * pi / 180))',
	y = '50.0 + 1.6155950752393982 * 124.03149777329222 * ( 0.02613325650382181 - (1.3236744353715044 - (1.9694462586094064 - ($1 * pi / 180)) * cos(0.6010514667026994 * ($2 + 96) * pi / 180)))',
	image = 'MapofEmergingUSMegaregions.png'
name = 'Sahtu, Northwest Territories',
	x = '50 + 840 * 0.5 * ln( ( 1 + cos($1*(pi/180))*sin(($2+124)*(pi/180)) ) / ( 1 - cos($1*(pi/180))*sin(($2+124)*(pi/180)) ) )',
	y = '1085 - 910*(atan(tan($1*(pi/180))/cos(($2+124)*(pi/180)))+0)',
	image = 'NWT Sahtu Region Map.svg'
function p._trim(s)
	if s then
		if s:match([[^(['"]).*%1$]]) then return p._trim(string.sub) else return s end
	else
		return ""
	end
end

function p.trim(frame)
	local s = (frame.args['s'] or frame.args[1]) or (frame:getParent.args['s'] or frame:getParent.args[1])
	return p._trim(s)
end
-- This module implements . is a high-use template, sometimes
-- with thousands of transclusions on a page. This module optimises the
-- template's performance by reducing the number of parameters called from
-- wikitext, while still allowing all the features provided by
-- Module:UserLinks. It is about twice as fast as the version of 
-- that called the template from wikitext.
--]=]

local mUserLinks = require('Module:UserLinks')
local mShared = require('Module:UserLinks/shared')
local yesno = require('Module:Yesno')

local p = {}

local function validateArg(arg)
	-- Validates one argument. Whitespace is stripped, and blank arguments
	-- are treated as nil.
	if not arg then
		return nil
	end
	arg = arg:match('^%s*(.-)%s*$')
	if arg ~= '' then
		return arg
	else
		return nil
	end
end

function p.main(frame)
	-- Grab the user, project and lang args from wikitext.
	local argKeys = {
		user = {
			1,
			'User',
			'user',
			'사용자'
		project = {
			2,
			'Project',
			'project',
			'프로젝트'
		lang = {
			3,
			'Lang',
			'lang',
			'언어'
	local origArgs = frame:getParent.args
	local args = {}
	for argKey, t in pairs(argKeys) do
		for i, origArgKey in ipairs(t) do
			local value = origArgs[origArgKey]
			value = validateArg(value)
			if value then
				args[argKey] = value
				-- If we have found a value, break the loop. For the average
				-- invocation this saves two argument lookups.
				break
			end
		end
	end
	
	-- Generate options. Some of these need wikitext args also.
	local options = {
		span = false,
		separator = validateArg(origArgs.separator) or 'dot',
		isDemo = yesno(validateArg(origArgs.demo))
	
	-- Input the codes directly. This saves two argument lookups for each
	-- invocation.
	local codes = {'t', 'c'}
	
	-- Plug the data into Module:UserLinks.
	local snippets = mUserLinks.getSnippets(args)
	local links = mUserLinks.getLinks(snippets)
	local success, result = pcall
	if success then
		return result
	else
		return mShared.makeWikitextError
	end
end
function p.lua_main(frame)
	local s = frame.args[1]
	
	if frame.args[3] then
		local args = {}
		
		for i, v in ipairs(frame.args) do
			if i >= 2 then
				args[#args+1] = v
			end
		end
		
		args['style'] = 'display: inline'
		args['list_style'] = 'display: inline'
		args['item1_style'] = 'display: inline'
		
		h = mw.html.create('div')
		h:wikitext(s)
		--h:tag('br') -- h:newline is not working for some reason
		h:wikitext('의 ')
		h:wikitext
		
		return h
	elseif frame.args[2] then
		s = s .. '의 ' .. frame.args[2]
		return s
	end
	
	return s
end

function p.main(frame)
	return p.lua_main(frame:getParent)
end
**해남군·진도군**은 대한민국의 옛 국회의원 선거구이다. 당시 전라남도 해남군, 진도군 지역을 관할했다.

## 역사
제13대 국회의원 선거를 앞두고 소선거구제가 실시되었다. 이에 해남군·진도군 선거구가 관할 구역을 유지하면서 1인 선거구로 개편되었다.

제18대 국회의원 선거를 앞두고 선거구 개편이 일어나면서 완도군을 편입해 해남군·완도군·진도군 선거구를 이루게 됨에 따라 폐지되었다.
-- configuration, to make it easier to port this module to another wiki.
local cfg = {} -- Do not edit this line.

-- The successIndicator and failureIndicator are in the first column of the
-- wikitable produced as output and indicate whether the test passed. These two
-- strings are preprocessed by frame.preprocess.
-- successIndicator: if the test passes
-- failureIndicator: if the test fails
cfg.successIndicator = ""
cfg.failureIndicator = ""

-- The names of the columns Name, Expected and Actual 
cfg.nameString = "이름"
cfg.expectedString = "예측치"
cfg.actualString = "실제치"

-- The string at the top used to indicate all tests passed.
cfg.successSummary = "모든 테스트 통과."
-- The string at the top used to indicate one or more tests failed. $1 is
-- replaced by the number of tests that failed. This string is preprocessed by
-- frame.preprocess.
cfg.failureSummary = "**$1 테스트 실패**."

-- Format string for a short display of the tests in displayResultsAsShort.
-- This format string is passed directly to string.format.
cfg.shortResultsFormat = "성공: %d, 오류: %d, 건너뜀: %d"

-- Category added to pages that fail one or more tests. Set to nil to disable
-- categorisation of pages that fail one or more tests.
cfg.failureCategory = "분류:ScribuntoUnit 테스트 실패"

-- Finally, return the configuration table.
name = 'Northwest Territories',
	x = '33 + 50 + 409 * 0.5 * ln( ( 1 + cos($1*(pi/180))*sin(($2+106)*(pi/180)) ) / ( 1 - cos($1*(pi/180))*sin(($2+106)*(pi/180)) ) )',
	y = '406.5 - 294.5*(atan(tan($1*(pi/180))/cos(($2+106)*(pi/180)))+0)',
	image = 'NWT All Region Locator.svg'
name = 'Northern and Central Europe',
	x = '((131.579*( cos( $1*pi/180 )*sin( ($2-10)*pi/180 ) ) * ( ((1 + sin( $1*pi/180 )*sin( 52*pi/180 ) + cos( $1*pi/180 )*cos( 52*pi/180 )*cos( ($2-10)*pi/180 ) ) *0.5)^ -0.5) - (-36.388))*14.0134-200)/7.8',
	y = '((55.11 - 153.610*( cos( 52* pi/180)*sin( $1*pi/180 ) - sin( 52*pi/180 )*cos( $1*pi/180 )*cos( ($2-10)*pi/180 ) ) * ( ((1 + sin( $1*pi/180 )*sin( 52*pi/180 ) + cos( $1*pi/180 )*cos( 52*pi/180 )*cos( ($2-10)*pi/180 ) ) *0.5)^ -0.5))*11.9834-174.92)/7.5',
	image = 'Northern and Central Europe 2 location map.svg'
position: absolute;

.locmap .id {
	position: absolute;
	line-height: 0;

.locmap .l0 {
	font-size: 0;
	position: absolute;

.locmap .pv {
	line-height: 110%;
	position: absolute;
	text-align: center;

.locmap .pl {
	line-height: 110%;
	position: absolute;
	top: -0.75em;
	text-align: right;

.locmap .pr {
	line-height: 110%;
	position: absolute;
	top: -0.75em;
	text-align: left;

.locmap .pv > div {
	display: inline;
	padding: 1px;

.locmap .pl > div {
	display: inline; /* inline does not impact floated elements */
	padding: 1px;
	float: right;

.locmap .pr > div {
	display: inline; /* inline does not impact floated elements */
	padding: 1px;
	float: left;
name = 'Northern Saskatchewan Administration District',
	x = '50 + 840 * 0.5*ln( ( 1 + cos($1*(pi/180))*sin(($2+105)*(pi/180)) ) / ( 1 - cos($1*(pi/180))*sin(($2+105)*(pi/180)) ) )',
	y = '1085 - 910 *(atan(tan($1*(pi/180))/cos(($2+105)*(pi/180)))+0)',
	image = 'Northern Saskatchewan Administration District coloured map.svg'
local mTemplateInvocation = require('Module:Template invocation')

local p = {}

function p._main
	frame = frame or mw.getCurrentFrame

	-- Get the invocation arguments.
	local name = args[1]
	if not name then
		error
	end
	local invArgs = {}
	for k, v in pairs(args) do
		if k ~= 1 then
			if type(k) == 'number' then
				invArgs[k - 1] = v
			else
				local num = k:match('^n([1-9][0-9]*)$')
				if num then
					invArgs[args[k]] = args['v' .. num]
				end
			end
		end
	end

	local invocation = mTemplateInvocation.invocation
	local gives = args.gives or mw.language.getContentLanguage:getArrow('forwards')
	local result = frame:preprocess(mTemplateInvocation.invocation)
	
	return string.format
end

function p.main(frame)
	return p._main
end
local function main
	local args, pargs = frame.args, ( frame:getParent or {} ).args or {}
	local makeTitle=args.makeTitle or pargs.makeTitle
	local namespace=args.namespace or pargs.namespace or ""
	local fragment=args.fragment or pargs.fragment or ""
	local interwiki=args.interwiki or pargs.interwiki or ""
	local page=args.page or args[1] or pargs.page or pargs[1] or ""
	local id= tonumber( args.id or pargs.id )
	local pn = {}
	local title -- holds the result of the mw.title.xxx call

	for i = 1,9 do pn[i] = args['p'..i] or pargs['p'..i] end
	if not id and not mw.ustring.match then page = nil end

	if id then
		title = callAssert
	elseif not page then
		title = callAssert
	elseif makeTitle then
		title = callAssert
	else
		title = callAssert
	end

	local result = title[field]
	if type(result) == "function" then
		result = result(title, unpack(pn))
	end

	return tostring(result or "")
end

-- handle all errors in main
main = require('Module:Protect')(main)

local p = {}

-- main function does all the work
local meta = {}
function meta.__index
	return function(frame)
		return main
	end
end
setmetatable

function p.getContent(frame)
	local args, pargs = frame.args, ( frame:getParent or {} ).args or {}
	local fmt = args.as or pargs.as or "pre"
	local text = main

	fmt = mw.text.split

	for _, how in ipairs( fmt ) do
		if how == "pre" then
			text = table.concat{ "" }
		elseif how == "expand" then
			text = frame:preprocess(text)
		elseif how == "nowiki" then
			text = mw.text.nowiki(text)
		end
	end

	return text
end
return {...}, select
end

local function mapArray
	local result = {}
	for i = 1, count or #array do
		result[i] = func(array[i])
	end
	return result
end

local function quote(value)
	if type(value) == 'string' then
		return (string.gsub(string.format, '\\\n', '\\n')) -- Outer parentheses remove second value returned by gsub
	end
	local str = tostring(value)
	if type(value) == 'table' and str ~= 'table' then
		return '{' .. str .. '}'
	end
	return str
end

local function callAssert
	local result, resultCount = pack(func(...))
	if not result[1] then
		local args, argsCount = pack(...)
		args = mapArray
		local message = mw.ustring.format(
			'%s(%s) 실패',
			funcName,
			table.concat
		)
		error
	end
	return unpack
end
if not success then
		local message = tostring(... or '(메시지 없음)')
		if options.removeLocation then
			message = string.gsub(message, '^(Module|모듈):[^:]+:%d+: ', '', 1)
		end
		return string.format
	end
	return ...
end

local function protect
	if type(errFormat) == 'table' then
		options = options or errFormat
		errFormat = nil
	end
	options = mw.clone(options) or {}
	options.errFormat = errFormat or options.errFormat or '오류: %s'
	if not options.raw then
		options.errFormat = ''
	end
	options.removeLocation = options.removeLocation == nil or options.removeLocation
	
	return function (...)
		return processResult(options, pcall)
	end
end
-- See Halfwidth and fullwidth forms for an explanation of half- and full-width characters.

-- @todo FIXME: Needs more characters adding, needs support for diacritic marks.

local data = mw.loadData( 'Module:Convert character width/data' )

local p = {}

-- Converts one half-width character to one full-width character.
local function getFull( s )
 return data[ s ] or s
end

-- Converts one full-width character to one half-width character.
local function getHalf( s )
 for half, full in pairs( data ) do
 if s == full then
 return half
 end
 end
 return s
end

-- Converts multiple half-width characters to full-width characters.
function p.full( frame )
 local s = type( frame ) == 'table' and frame.args and frame.args[ 1 ] or frame
 s = type( s ) == 'number' and tostring( s ) or s
 if type( s ) ~= 'string' then return end
 return ( mw.ustring.gsub )
end

-- Converts multiple full-width characters to half-width characters.
function p.half( frame )
 local s = type( frame ) == 'table' and frame.args and frame.args[ 1 ] or frame
 s = type( s ) == 'number' and tostring( s ) or s
 if type( s ) ~= 'string' then return end
 return ( mw.ustring.gsub )
end