模块:中华人民共和国各地级行政区

local getArgs = require('Module:Arguments').getArgs
local p = {}

local data = {
	['河北'] = {
		['suffix'] = '省',
		['divisions'] = {
			['地级市'] = {'石家庄', '唐山', '秦皇岛', '邯郸', '邢台', '保定', '张家口', '承德', '沧州', '廊坊', '衡水'},
		},
	},
	['山西'] = {
		['suffix'] = '省',
		['divisions'] = {
			['地级市'] = {'太原', '大同', '阳泉', '长治', '晋城', '朔州', '晋中', '运城', '忻州', '临汾', '吕梁'},
		},
	},
	['内蒙古'] = {
		['suffix'] = '自治区',
		['divisions'] = {
			['地级市'] = {'呼和浩特', '包头', '乌海', '赤峰', '通辽', '鄂尔多斯', '呼伦贝尔', '巴彦淖尔', '乌兰察布'},
			['盟'] = {'兴安', '锡林郭勒', '阿拉善'},
		},
	},
	['辽宁'] = {
		['suffix'] = '省',
		['divisions'] = {
			['副省级市'] = {'沈阳', '大连'},
			['地级市'] = {'鞍山', '抚顺', '本溪', '丹东', '锦州', '辽阳', '营口', '阜新', '盘锦', '铁岭', '朝阳', '葫芦岛'},
		},
	},
	['吉林'] = {
		['suffix'] = '省',
		['divisions'] = {
			['副省级市'] = {'长春'},
			['地级市'] = {'吉林', '四平', '辽源', '通化', '白山', '松原', '白城'},
			['自治州'] = {'延边朝鲜族'},
		},
	},
	['黑龙江'] = {
		['suffix'] = '省',
		['divisions'] = {
			['副省级市'] = {'哈尔滨'},
			['地级市'] = {'齐齐哈尔', '鸡西', '鹤岗', '双鸭山', '大庆', '伊春', '佳木斯', '七台河', '牡丹江', '黑河', '绥化'},
			['地区'] = {'大兴安岭'},
		},
	},
	['江苏'] = {
		['suffix'] = '省',
		['divisions'] = {
			['副省级市'] = {'南京'},
			['地级市'] = {'无锡', '徐州', '常州', '苏州', '南通', '连云港', '淮安', '盐城', '扬州', '镇江', '泰州', '宿迁'},
		},
	},
	['浙江'] = {
		['suffix'] = '省',
		['divisions'] = {
			['副省级市'] = {'杭州', '宁波'},
			['地级市'] = {'温州', '嘉兴', '湖州', '绍兴', '金华', '衢州', '舟山', '台州', '丽水'},
		},
	},
	['安徽'] = {
		['suffix'] = '省',
		['divisions'] = {
			['地级市'] = {'合肥', '淮北', '亳州', '宿州', '蚌埠', '阜阳', '淮南', '滁州', '六安', '马鞍山', '芜湖', '宣城', '铜陵', '池州', '安庆', '黄山'},
		},
	},
	['福建'] = {
		['suffix'] = '省',
		['divisions'] = {
			['副省级市'] = {'厦门'},
			['地级市'] = {'福州', '莆田', '三明', '泉州', '漳州', '南平', '龙岩', '宁德'},
		},
	},
	['江西'] = {
		['suffix'] = '省',
		['divisions'] = {
			['地级市'] = {'南昌', '景德镇', '萍乡', '九江', '新余', '鹰潭', '赣州', '吉安', '宜春', '抚州', '上饶'},
		},
	},
	['山东'] = {
		['suffix'] = '省',
		['divisions'] = {
			['副省级市'] = {'济南', '青岛'},
			['地级市'] = {'淄博', '枣庄', '东营', '烟台', '潍坊', '济宁', '泰安', '威海', '日照', '临沂', '德州', '聊城', '滨州', '菏泽'},
		},
	},
	['河南'] = {
		['suffix'] = '省',
		['divisions'] = {
			['地级市'] = {'郑州', '开封', '洛阳', '平顶山', '安阳', '鹤壁', '新乡', '焦作', '濮阳', '许昌', '漯河', '三门峡', '南阳', '商丘', '信阳', '周口', '驻马店'},
		},
	},
	['湖北'] = {
		['suffix'] = '省',
		['divisions'] = {
			['副省级市'] = {'武汉'},
			['地级市'] = {'黄石', '十堰', '宜昌', '襄阳', '鄂州', '荆门', '孝感', '荆州', '黄冈', '咸宁', '随州'},
			['自治州'] = {'恩施土家族苗族'},
		},
	},
	['湖南'] = {
		['suffix'] = '省',
		['divisions'] = {
			['地级市'] = {'长沙', '株洲', '湘潭', '衡阳', '邵阳', '岳阳', '常德', '张家界', '益阳', '郴州', '永州', '怀化', '娄底'},
			['自治州'] = {'湘西土家族苗族'},
		},
	},
	['广东'] = {
		['suffix'] = '省',
		['divisions'] = {
			['副省级市'] = {'广州', '深圳'},
			['地级市'] = {'韶关', '珠海', '汕头', '佛山', '江门', '湛江', '茂名', '肇庆', '惠州', '梅州', '汕尾', '河源', '阳江', '清远', '东莞', '中山', '潮州', '揭阳', '云浮'},
		},
	},
	['广西'] = {
		['suffix'] = '壮族自治区',
		['divisions'] = {
			['地级市'] = {'南宁', '柳州', '桂林', '梧州', '北海', '防城港', '钦州', '贵港', '玉林', '百色', '贺州', '河池', '来宾', '崇左'},
		},
	},
	['海南'] = {
		['suffix'] = '省',
		['divisions'] = {
			['地级市'] = {'海口', '三亚', '三沙', '儋州'},
		},
	},
	['四川'] = {
		['suffix'] = '省',
		['divisions'] = {
			['副省级市'] = {'成都'},
			['地级市'] = {'自贡', '攀枝花', '泸州', '德阳', '绵阳', '广元', '遂宁', '内江', '乐山', '南充', '眉山', '宜宾', '广安', '达州', '雅安', '巴中', '资阳'},
			['自治州'] = {'阿坝藏族羌族', '甘孜藏族', '凉山彝族'},
		},
	},
	['贵州'] = {
		['suffix'] = '省',
		['divisions'] = {
			['地级市'] = {'贵阳', '六盘水', '遵义', '安顺', '毕节', '铜仁'},
			['自治州'] = {'黔西南布依族苗族', '黔东南苗族侗族', '黔南布依族苗族'},
		},
	},
	['云南'] = {
		['suffix'] = '省',
		['divisions'] = {
			['地级市'] = {'昆明', '曲靖', '玉溪', '保山', '昭通', '丽江', '普洱', '临沧'},
			['自治州'] = {'楚雄彝族', '红河哈尼族彝族', '文山壮族苗族', '西双版纳傣族', '大理白族', '德宏傣族景颇族', '怒江傈僳族', '迪庆藏族'},
		},
	},
	['西藏'] = {
		['suffix'] = '自治区',
		['divisions'] = {
			['地级市'] = {'拉萨', '日喀则', '昌都', '林芝', '山南', '那曲'},
			['地区'] = {'阿里'},
		},
	},
	['陕西'] = {
		['suffix'] = '省',
		['divisions'] = {
			['副省级市'] = {'西安'},
			['地级市'] = {'铜川', '宝鸡', '咸阳', '渭南', '延安', '汉中', '榆林', '安康', '商洛'},
		},
	},
	['甘肃'] = {
		['suffix'] = '省',
		['divisions'] = {
			['地级市'] = {'兰州', '嘉峪关', '金昌', '白银', '天水', '武威', '张掖', '平凉', '酒泉', '庆阳', '定西', '陇南'},
			['自治州'] = {'临夏回族', '甘南藏族'},
		},
	},
	['青海'] = {
		['suffix'] = '省',
		['divisions'] = {
			['地级市'] = {'西宁', '海东'},
			['自治州'] = {'海北藏族', '黄南藏族', '海南藏族', '果洛藏族', '玉树藏族', '海西蒙古族藏族'},
		},
	},
	['宁夏'] = {
		['suffix'] = '回族自治区',
		['divisions'] = {
			['地级市'] = {'银川', '石嘴山', '吴忠', '固原', '中卫'},
		},
	},
	['新疆'] = {
		['suffix'] = '维吾尔自治区',
		['divisions'] = {
			['地级市'] = {'乌鲁木齐', '克拉玛依', '吐鲁番', '哈密'},
			['自治州'] = {'昌吉回族', '博尔塔拉蒙古', '巴音郭楞蒙古', '克孜勒苏柯尔克孜', '伊犁哈萨克'},
			['地区'] = {'阿克苏', '喀什', '和田', '塔城', '阿勒泰'},
		},
	},
}

-- 为与现存行政区划模板兼容
local organMap = {
	['党委'] = '委员会',
	['立法机关'] = '人民代表大会',
	['行政机关'] = '人民政府',
	['监察机关'] = '监察委员会',
	['审判机关'] = '中级人民法院',
	['检察机关'] = '人民检察院',
}

function link(name, division, organ, body)
    if division == '副省级市' or division == '地级市' then division = '市' end
    if organMap[organ] ~= nil then
    	organ = organMap[organ]
    end
	return '[[' .. body .. name .. division .. organ .. '|' .. name .. division .. ']]'
end

function p.title(frame)
	local args = getArgs(frame)
	local prov, organ, body = args[1], args[2], args[3]
	if prov == nil or data[prov] == nil then
		error('未知省级行政区')
	else
		prov = '[[' .. prov .. data[prov]['suffix'] .. ']]'
	end
	if organ == nil then organ = '' end
    if body == nil then
    	body = ''
    else
    	body = '[[' .. body .. ']]'
    end
	return body .. prov .. '各[[地级行政区]]' .. organ
end

function p.group(frame)
	local args = getArgs(frame)
	local prov, division = args[1], args['division']
	if data[prov]['divisions'][division] == nil then
		return nil
	end
	return division
end

function p.list(frame)
	local args = getArgs(frame)
	local prov, organ, body, division = args[1], args[2], args[3], args['division']
	if organ == nil then organ = '' end
    if body == nil then body = '' end
	local names = data[prov]['divisions'][division]
	if names == nil then
		return nil
	end
	list = ''
	for _, name in ipairs(names) do
    	list = list .. '*' .. link(name, division, organ, body) .. '\n'
	end
	return list
end

return p