モジュール:Lang/data

----------------------------------------------------------------------------
primary table of tables that decode:
	lang -> language tags and names
	script -> ISO 15924 script tags
	region -> ISO 3166 region tags
	variant -> iana registered variant tags
	suppressed -> map of scripts tags and their associated language tags
	
all of these data come from separate modules that are derived from the IANA language-subtag-registry file
key_to_lower() avoids the metatable trap and sets all keys in the subtables to lowercase.  Many language codes
have multiple associated names; Module:lang is only concerned with the first name so key_to_lower() only fetches
the first name.
TODO: instead of returning:
	"key" = {"name"}
where each table has only one name, return
	"key" = "name"
requires changes in Module:Lang.
local function key_to_lower (module, src_type)
	local out = {};
	local source = (('variants' == src_type) and require (module)) or mw.loadData (module);		-- fetch data from this module; require() avoids metatable trap for variant data
	if 'variants' == src_type then
		for k, v in pairs (source) do
			outk:lower() = v;													-- for variant, everything is needed
		end
	elseif 'lang' == src_type and source.active then							-- for ~/iana_languages (active)
		for k, v in pairs (source.active) do
			outk:lower() = {v1};											-- ignore multiple names; take first name only
		end
	elseif 'lang_dep' == src_type and source.deprecated then					-- for ~/iana_languages (deprecated)
		for k, v in pairs (source.deprecated) do
			outk:lower() = {v1};											-- ignore multiple names; take first name only
		end
	else																		-- here for all other sources
		for k, v in pairs (source) do
			outk:lower() = {v1};											-- ignore multiple names; take first name only
		end
	end
	return out;
end
local lang_name_table = {
	lang = key_to_lower ('Module:Language/data/iana languages', 'lang'),
	lang_dep = key_to_lower ('Module:Language/data/iana languages', 'lang_dep'),
	script = key_to_lower ('Module:Language/data/iana scripts'),				-- script keys are capitalized; set to lower
	region = key_to_lower ('Module:Language/data/iana regions'),				-- region keys are uppercase; set to lower
	variant = key_to_lower ('Module:Language/data/iana variants', 'variants'),
	suppressed = key_to_lower ('Module:Language/data/iana suppressed scripts'),	-- script keys are capitalized; set to lower
	}
------------------------------------------------------------------------------------------
Language codes and names in this table override the BCP47 names in lang_name_table.
indexes in this table shall always be lower case
local override = {
------------------------------------------------------------------------------------------
	"ca-valencia" = {"バレンシア語"},
	"cu" = {"教会スラヴ語"},													-- 2nd IANA name;
	"de-at" = {"オーストリアドイツ語"},										-- these code-region and code-variant tags to match en.wiki article names
	"de-ch" = {"スイスドイツ語"},
	"en-au" = {"オーストラリア英語"},
	"en-ca" = {"カナダ英語"},
	"en-emodeng" = {"初期近代英語"},
	"en-gb" = {"イギリス英語"},
	"en-ie" = {"アイルランド英語"},
	"en-in" = {"インド英語"},
	"en-nz" = {"ニュージーランド英語"},
	"en-us" = {"アメリカ英語"},
	"en-za" = {"南アフリカ英語"},
	"fy" = {"西フリジア語"},													-- Western Frisian
	"mo" = {"モルドバ語"},													-- Moldavian (deprecated code); to match en.wiki article title
	"oc-provenc" = {"オック語"},
	"ps" = {"パシュトー語"},													-- Pushto
	"tw-asante" = {"アサンテ方言"},
-- these ISO 639-1 language-name overrides imported from Module:Language/data/wp_languages
----
		"av" = {"アヴァル語"},												-- Avaric
		"bo" = {"チベット語"},												-- Tibetan
		"el" = {"ギリシア語"},												-- Modern Greek
--		"en-SA" = {"South African English"},									-- English; no; SA is not South Africa it Saudi Arabia;  ZA is South Africa
		"ff" = {"フラニ語"},													-- Fulah
		"ht" = {"ハイチ語"},													-- Haitian
		"hz" = {"ヘレロ語"},													-- Herero
		"ii" = {"四川彝語"},													-- Sichuan Yi
		"ki" = {"キクユ語"},													-- Kikuyu
		"kl" = {"グリーンランド語"},											-- Kalaallisut
		"ky" = {"キルギス語"},												-- Kirghiz
		"lg" = {"ガンダ語"},													-- Ganda
		"li" = {"リンブルフ語"},												-- Limburgan
		"mi" = {"マオリ語"},													-- Maori
		"na" = {"ナウル語"},													-- Nauru
		"nb" = {"ブークモール"},												-- Norwegian Bokmål
		"nd" = {"北ンデベレ語"},												-- North Ndebele
		"nn" = {"ニーノシュク"},												-- Norwegian Nynorsk
		"nr" = {"南ンデベレ語"},												-- South Ndebele
		"ny" = {"チェワ語"},													-- Nyanja
		"oj" = {"オジブワ語"},												-- Ojibwa
		"or" = {"オリヤー語"},												-- Oriya
		"pa" = {"パンジャーブ語"},											-- Panjabi
		"rn" = {"ルンディ語"},												-- Rundi
		"sl" = {"スロベニア語"},												-- Slovenian
		"ss" = {"スワジ語"},													-- Swati
		"st" = {"ソト語"},													-- Southern Sotho
		"to" = {"トンガ語"},													-- Tonga
----
----------------------------------------------------------------------------
	"arc" = {"Aramaic"},														-- Official Aramaic (700-300 BCE), Imperial Aramaic (700-300 BCE);
	"art" = {"constructed"},													-- to match en.wiki article; lowercase for category name
	"bhd" = {"Bhadarwahi"},													-- Bhadrawahi; to match en.wiki article title
	"bla" = {"Blackfoot"},													-- Siksika; to match en.wiki article title
	"bua" = {"Buryat"},														-- Buriat; this is a macro language; these four use wp preferred transliteration;
	"bxm" = {"Mongolian Buryat"},												-- Mongolia Buriat; these three all redirect to Buryat
	"bxr" = {"Russian Buryat"},												-- Russia Buriat;
	"bxu" = {"Chinese Buryat"},												-- China Buriat;
	"byr" = {"Yipma"},														-- Baruya, Yipma
	"egy" = {"Ancient Egyptian"},												-- Egyptian (Ancient); distinguish from contemporary arz: Egyptian Arabic 
	"frr" = {"North Frisian"},												-- Northern Frisian
	"frs" = {"East Frisian Low Saxon"},										-- Eastern Frisian
	"ilo" = {"Ilocano"},														-- Iloko; to match en.wiki article title
	"jam" = {"Jamaican Patois"},												-- Jamaican Creole English
	"mhr" = {"Meadow Mari"},													-- Eastern Mari
	"mid" = {"Modern Mandaic"},												-- Mandaic
	"mla" = {"Tamambo"},														-- Malo
	'mte' = {"Mono-Alu"},														-- Mono (Solomon Islands)
	"nan-tw" = {"Taiwanese Hokkien"},											-- make room for IANA / 639-3 nan Min Nan Chinese; match en.wiki article title
	"nrf" = {"Norman"},														-- not quite a collective - IANA name: Jèrriais; categorizes to Norman-language text
	"nzi" = {"Nzema"},														-- Nzima; to match en.wiki article title
	"orv" = {"Old East Slavic"},												-- Old Russian
	"pfl" = {"Palatine German"},												-- Pfaelzisch; to match en.wiki article
	"pms" = {"Piedmontese"},													-- Piemontese; to match en.wiki article title
	"pnb" = {"Punjabi (Western)"},											-- Western Panjabi; dab added to override import from ~/wp languages and distinguish pnb from pa in reverse look up tag_from_name()
	"stq" = {"Saterland Frisian"},											-- Saterfriesisch
	"und" = {"undetermined"},													-- capitalization to match existing category
	"wrg" = {"Warrongo"},														-- Warungu
	"xal-ru" = {"Kalmyk"},													-- to match en.wiki article title
	"xgf" = {"Tongva"},														-- ISO 639-3 is Gabrielino-Fernandeño
-- these ISO 639-2, -3 language-name overrides imported from Module:Language/data/wp_languages
----
		"ace" = {"Acehnese"},													-- Achinese
		"aec" = {"Sa'idi Arabic"},											-- Saidi Arabic
		"akl" = {"Aklan"},													-- Aklanon
		"alt" = {"Altay"},													-- Southern Altai
		"apm" = {"Mescalero-Chiricahua"},										-- Mescalero-Chiricahua Apache
		"bal" = {"Balochi"},													-- Baluchi
		"bcl" = {"Central Bicolano"},											-- Central Bikol
		"bin" = {"Edo"},														-- Bini
		"bpy" = {"Bishnupriya Manipuri"},										-- Bishnupriya
		"chg" = {"Chagatay"},													-- Chagatai
		"ckb" = {"Sorani Kurdish"},											-- Central Kurdish
		"cnu" = {"Shenwa"},													-- Chenoua
		"coc" = {"Cocopah"},													-- Cocopa
		"diq" = {"Zazaki"},													-- Dimli
		"fit" = {"Meänkieli"},												-- Tornedalen Finnish
		"fkv" = {"Kven"},														-- Kven Finnish
		"frk" = {"Old Frankish"},												-- Frankish
		"gez" = {"Ge'ez"},													-- Geez
		"gju" = {"Gujari"},													-- Gujari
		"gsw" = {"Alemannic German"},											-- Swiss German
		"gul" = {"Gullah"},													-- Sea Island Creole English
		"hak" = {"Hakka"},													-- Hakka Chinese
		"hbo" = {"Biblical Hebrew"},											-- Ancient Hebrew
		"hnd" = {"Hindko"},													-- Southern Hindko
--		"ikt" = {"Inuvialuk"},												-- Inuinnaqtun
		"kaa" = {"Karakalpak"},												-- Kara-Kalpak
		"khb" = {"Tai Lü"},													-- Lü
		"kmr" = {"Kurmanji Kurdish"},											-- Northern Kurdish
		"kpo" = {"Kposo"},													-- Ikposo
		"krj" = {"Kinaray-a"},												-- Kinaray-A
		"ktz" = {"Juǀ'hoan"},													-- Juǀʼhoan
		"lez" = {"Lezgian"},													-- Lezghian
		"liv" = {"Livonian"},													-- Liv
		"lng" = {"Lombardic"},												-- Langobardic
		"mia" = {"Miami-Illinois"},											-- Miami
		"miq" = {"Miskito"},													-- Mískito
		"mix" = {"Mixtec"},													-- Mixtepec Mixtec
		"mni" = {"Meitei"},													-- Manipuri
		"mrj" = {"Hill Mari"},												-- Western Mari
		"mww" = {"White Hmong"},												-- Hmong Daw
		"nds-nl" = {"Dutch Low Saxon"},										-- Low German
		"new" = {"Nepal Bhasa"},												-- Newari
		"nso" = {"Northern Sotho"},											-- Pedi
		"nwc" = {"Classical Nepal Bhasa"},									-- Classical Newari
		"ood" = {"O'odham"},													-- Tohono O'odham
		"otk" = {"Old Turkic"},												-- Old Turkish
		"pal" = {"Middle Persian"},											-- Pahlavi
		"pam" = {"Kapampangan"},												-- Pampanga
		"phr" = {"Potwari"},													-- Pahari-Potwari
		"pka" = {"Jain Prakrit"},												-- Ardhamāgadhī Prākrit
--		"pnb" = {"Punjabi"},													-- Western Panjabi
		"psu" = {"Shauraseni"},												-- Sauraseni Prākrit
		"rap" = {"Rapa Nui"},													-- Rapanui
		"rar" = {"Cook Islands Māori"},										-- Rarotongan
		"rmu" = {"Scandoromani"},												-- Tavringer Romani
		"rom" = {"Romani"},													-- Romany
		"rup" = {"Aromanian"},												-- Macedo-Romanian
		"ryu" = {"Okinawan"},													-- Central Okinawan
		"sdc" = {"Sassarese"},												-- Sassarese Sardinian
		"sdn" = {"Gallurese"},												-- Gallurese Sardinian
		"shp" = {"Shipibo"},													-- Shipibo-Conibo
		"src" = {"Logudorese"},												-- Logudorese Sardinian
		"sro" = {"Campidanese"},												-- Campidanese Sardinian
		"tkl" = {"Tokelauan"},												-- Tokelau
		"tvl" = {"Tuvaluan"},													-- Tuvalu
		"tyv" = {"Tuvan"},													-- Tuvinian
		"vls" = {"West Flemish"},												-- Vlaams
		"wep" = {"Westphalian"},												-- Westphalien
		"xal" = {"Oirat"},													-- Kalmyk
		"xcl" = {"Old Armenian"},												-- Classical Armenian
		"yua" = {"Yucatec Maya"},												-- Yucateco
----
----------------------------------------------------------------------------
	"cel-x-proto" = {"Proto-Celtic"},											-- cel in IANA is Celtic languages
	"gem-x-proto" = {"Proto-Germanic"},										-- gem in IANA is Germanic languages
	"grc-x-aeolic" = {"Aeolic Greek"},										-- these grc-x-... codes are preferred alternates to the non-standard catchall code grc-gre
	"grc-x-attic" = {"Attic Greek"},
	"grc-x-biblical" = {"Biblical Greek"},
	"grc-x-byzant" = {"Byzantine Greek"},
	"grc-x-classic" = {"Classical Greek"},
	"grc-x-doric" = {"Doric Greek"},
	"grc-x-hellen" = {"Hellenistic Greek"},
	"grc-x-ionic" = {"Ionic Greek"},
	"grc-x-koine" = {"コイネー・ギリシア語"},
	"grc-x-medieval" = {"Medieval Greek"},
	"grc-x-patris" = {"Patristic Greek"},
	"grk-x-proto" = {"Proto-Greek"},											-- grk in IANA is Greek languages
	"iir-x-proto" = {"Proto-Indo-Iranian"},									-- iir in IANA is Indo-Iranian Languages
	"ira-x-proto" = {"Proto-Iranian"},										-- ira in IANA is Iranian languages
	"itc-x-proto" = {"Proto-Italic"},											-- itc in IANA is Italic languages
	"ksh-x-colog" = {"Colognian"},											-- en.wiki article is Colognian; ksh (Kölsch) redirects there
	"mis-x-ripuar" = {"Ripuarian"},											-- replaces improper use of ksh in wp_languages
	"sla-x-proto" = {"Proto-Slavic"},											-- sla in IANA is Slavic languages
	"yuf-x-hav" = {"Havasupai"},												-- IANA name for these three is Havasupai-Walapai-Yavapai
	"yuf-x-wal" = {"Walapai"},
	"yuf-x-yav" = {"Yavapai"},
	}
----------------------------------------------------------------------------------
for those rare occasions when article titles don't fit with the normal '-language', this table
maps language code to article title.  Use of this table should be avoided and the use of redirects preferred as
that is the long-standing method of handling article names that don't fit with the normal pattern
local article_name = {
	"lij" = {"Ligurian (Romance language)"},									-- Ligurian; see Template_talk:Lang#Ligurian_dab
	'mnh' = {"Mono language (Congo)"},										-- Mono (Democratic Republic of Congo); see Template_talk:Lang#Mono_languages
	'mnr' = {"Mono language (California)"},									-- Mono (USA)
	'mru' = {"Mono language (Cameroon)"},										-- Mono (Cameroon)
	"xlg" = {"Ligurian (ancient language)"},									-- see Template_talk:Lang#Ligurian_dab
	}
--=---------------------------------------------------------------------------------
ISO 15924 scripts that are written right-to-left.  Data in this table taken from ISO 15924#List of codes
last update to this list: 2017-12-24
**
local rtl_scripts = {
	'adlm', 'arab', 'aran', 'armi', 'avst', 'cprt', 'egyd', 'egyh', 'hatr', 'hebr',
	'hung', 'inds', 'khar', 'lydi', 'mand', 'mani', 'mend', 'merc', 'mero', 'narb',
	'nbat', 'nkoo', 'orkh', 'palm', 'phli', 'phlp', 'phlv', 'phnx', 'prti', 'rohg',
	'samr', 'sarb', 'sogd', 'sogo', 'syrc', 'syre', 'syrj', 'syrn', 'thaa', 'wole',
	};
--std= parameter value is provided.
local translit_title_table = {
	'ahl' = {
		'default' = 'Academy of the Hebrew Language transliteration',
		},
	'ala' = {
		'default' = 'American Library Association – Library of Congress transliteration',
		},
	'ala-lc' = {
		'default' = 'American Library Association – Library of Congress transliteration',
		},
	'batr' = {
		'default' = 'Bikdash Arabic Transliteration Rules',
		},
	'bgn/pcgn' = {
		'default' = 'Board on Geographic Names / Permanent Committee on Geographical Names transliteration',
		},
	'din' = {
		'ar' = 'DIN 31635 Arabic',
		'fa' = 'DIN 31635 Arabic',
		'ku' = 'DIN 31635 Arabic',
		'ps' = 'DIN 31635 Arabic',
		'tg' = 'DIN 31635 Arabic',
		'ug' = 'DIN 31635 Arabic',
		'ur' = 'DIN 31635 Arabic',
		'arab' = 'DIN 31635 Arabic',
		'default' = 'DIN transliteration',
		},
	'eae' = {
		'default' = 'Encyclopaedia Aethiopica transliteration',
		},
	'hepburn' = {
		'default' = 'Hepburn transliteration',
		},
	'hunterian' = {
		'default' = 'Hunterian transliteration',
		},
	'iast' = {
		'default' = 'International Alphabet of Sanskrit transliteration',
		},
	'iso' = {																	-- when a transliteration standard is supplied
		'ab' = 'ISO 9 Cyrillic',
		'ba' = 'ISO 9 Cyrillic',
		'be' = 'ISO 9 Cyrillic',
		'bg' = 'ISO 9 Cyrillic',
		'kk' = 'ISO 9 Cyrillic',
		'ky' = 'ISO 9 Cyrillic',
		'mn' = 'ISO 9 Cyrillic',
		'ru' = 'ISO 9 Cyrillic',
		'tg' = 'ISO 9 Cyrillic',
		'uk' = 'ISO 9 Cyrillic',
		'bua' = 'ISO 9 Cyrillic',
		'sah' = 'ISO 9 Cyrillic',
		'tut' = 'ISO 9 Cyrillic',
		'xal' = 'ISO 9 Cyrillic',
		'cyrl' = 'ISO 9 Cyrillic',
		'ar' = 'ISO 233 Arabic',
		'ku' = 'ISO 233 Arabic',
		'ps' = 'ISO 233 Arabic',
		'ug' = 'ISO 233 Arabic',
		'ur' = 'ISO 233 Arabic',
		'arab' = 'ISO 233 Arabic',
		'he' = 'ISO 259 Hebrew',
		'yi' = 'ISO 259 Hebrew',
		'hebr' = 'ISO 259 Hebrew',
		'el' = 'ISO 843 Greek',
		'grc' = 'ISO 843 Greek',
		'ja' = 'ISO 3602 Japanese',
		'hira' = 'ISO 3602 Japanese',
		'hrkt' = 'ISO 3602 Japanese',
		'jpan' = 'ISO 3602 Japanese',
		'kana' = 'ISO 3602 Japanese',
		'zh' = 'ISO 7098 Chinese',
		'chi' = 'ISO 7098 Chinese',
		'pny' = 'ISO 7098 Chinese',
		'zho' = 'ISO 7098 Chinese',
--		'han' = 'ISO 7098 Chinese',											-- unicode alias of Hani? doesn't belong here? should be Hani?
		'hans' = 'ISO 7098 Chinese',
		'hant' = 'ISO 7098 Chinese',
		'ka' = 'ISO 9984 Georgian',
		'kat' = 'ISO 9984 Georgian',
		'arm' = 'ISO 9985 Armenian',
		'hy' = 'ISO 9985 Armenian',
		'th' = 'ISO 11940 Thai',
		'tha' = 'ISO 11940 Thai',
		'ko' = 'ISO 11941 Korean',
		'kor' = 'ISO 11941 Korean',
		'awa' = 'ISO 15919 Indic',
		'bho' = 'ISO 15919 Indic',
		'bn' = 'ISO 15919 Indic',
		'bra' = 'ISO 15919 Indic',
		'doi' = 'ISO 15919 Indic',
		'dra' = 'ISO 15919 Indic',
		'gon' = 'ISO 15919 Indic',
		'gu' = 'ISO 15919 Indic',
		'hi' = 'ISO 15919 Indic',
		'inc' = 'ISO 15919 Indic',
		'kn' = 'ISO 15919 Indic',
		'kok' = 'ISO 15919 Indic',
		'ks' = 'ISO 15919 Indic',
		'mag' = 'ISO 15919 Indic',
		'mai' = 'ISO 15919 Indic',
		'ml' = 'ISO 15919 Indic',
		'mr' = 'ISO 15919 Indic',
		'ne' = 'ISO 15919 Indic',
		'new' = 'ISO 15919 Indic',
		'or' = 'ISO 15919 Indic',
		'pa' = 'ISO 15919 Indic',
		'raj' = 'ISO 15919 Indic',
		'sa' = 'ISO 15919 Indic',
		'sat' = 'ISO 15919 Indic',
		'sd' = 'ISO 15919 Indic',
		'si' = 'ISO 15919 Indic',
		'ta' = 'ISO 15919 Indic',
		'tcy' = 'ISO 15919 Indic',
		'te' = 'ISO 15919 Indic',
		'beng' = 'ISO 15919 Indic',
		'brah' = 'ISO 15919 Indic',
		'deva' = 'ISO 15919 Indic',
		'gujr' = 'ISO 15919 Indic',
		'guru' = 'ISO 15919 Indic',
		'knda' = 'ISO 15919 Indic',
		'mlym' = 'ISO 15919 Indic',
		'orya' = 'ISO 15919 Indic',
		'sinh' = 'ISO 15919 Indic',
		'taml' = 'ISO 15919 Indic',
		'telu' = 'ISO 15919 Indic',
		'default' = 'ISO transliteration',
		},
	'jyutping' = {
		'default' = 'Jyutping transliteration',
		},
	'mr' = {
		'default' = 'McCune–Reischauer transliteration',
		},
	'nihon-shiki' = {
		'default' = 'Nihon-shiki transliteration',
		},
	'no_std' = {																-- when no transliteration standard is supplied
		'akk' = 'Semitic transliteration',
		'sem' = 'Semitic transliteration',
		'phnx' = 'Semitic transliteration',
		'xsux' = 'Cuneiform transliteration',
		},
	'pinyin' = {
		'default' = 'Pinyin transliteration',
		},
	'rr' = {
		'default' = 'Revised Romanization of Korean transliteration',
		},
	'rtgs' = {
		'default' = 'Royal Thai General System of Transcription',
		},
	
	'satts' = {
		'default' = 'Standard Arabic Technical Transliteration System transliteration',
		},
	'ungegn' = {
		'default' = 'United Nations Group of Experts on Geographical Names transliteration',
		},
	'wadegile' = {
		'default' = 'Wade–Giles transliteration',
		},
	'wehr' = {
		'default' = 'Hans Wehr transliteration',
		},
	};
return
	{
	article_name = article_name,
	lang_name_table = lang_name_table,
	override = override,
	rtl_scripts = rtl_scripts,
	translit_title_table = translit_title_table,
	};