local U = mw.ustring.char  
-- Diacritics, from the Combining Diacritical Marks block.
local grave = U(0x300)
local acute = U(0x301)
local circumflex = U(0x302)
local tilde = U(0x303)
local macron = U(0x304)
local breve = U(0x306)
local dot = U(0x307)
local diaeresis = U(0x308)
local double_acute = U(0x30B)
local caron = U(0x30C)
local double_grave = U(0x30F)
local invbreve = U(0x311)
local dot_below = U(0x323)
local undertie = U(0x35C)  
---  
This is a table of Wiktionary language codes with data belonging to them.
Name is the "canonical name" used on Wiktionary.
Article is the Wikipedia article.
Script is the ISO 15924 code.  
local data = {
["languages"] = {
["aaq"] = {
["name"] = "Penobscot",
},
["ab"] = {
["name"] = "Abkhaz",
},
["abe"] = {
["name"] = "Abenaki",
},
["ang"] = {
["name"] = "Old English",
["article"] = {"Old English"},
-- Remove macrons, acutes, and overdots
["replacements"] = {
decompose = true,
from = { "[" .. macron .. acute .. dot .. "]" },
},
},
["ar"] = {
["name"] = "அரபி",
["article"] = "அரபி மொழி",
["direction"] = "rtl", -- Should be in the script data module.
["replacements"] = {
-- ālif with wasla is replaced by ālif;
[U(0x0671)] = U(0x0627),
-- taṭwīl, fatḥatan, ḍammatan, kasratan,
-- fatḥa, ḍamma, kasra,
-- shadda, sukūn, and superscript (dagger) ālif are removed.
["["..U(0x0640)..U(0x064B)..U(0x064C)..U(0x064D)
..U(0x064E)..U(0x064F)..U(0x0650)
..U(0x0651)..U(0x0652)..U(0x0670).."]"] = "",
},
},
["ara"] = {
["name"] = "Arabic",
["article"] = "Arabic language",
["direction"] = "rtl", -- Should be in the script data module.
["replacements"] = {
-- ālif with wasla is replaced by ālif;
[U(0x0671)] = U(0x0627),
-- taṭwīl, fatḥatan, ḍammatan, kasratan,
-- fatḥa, ḍamma, kasra,
-- shadda, sukūn, and superscript (dagger) ālif are removed.
["["..U(0x0640)..U(0x064B)..U(0x064C)..U(0x064D)
..U(0x064E)..U(0x064F)..U(0x0650)
..U(0x0651)..U(0x0652)..U(0x0670).."]"] = "",
},
},
["arb"] = {
["name"] = "Modern Standard Arabic",
["article"] = "Modern Standard Arabic",
["direction"] = "rtl", -- Should be in the script data module.
["replacements"] = {
-- ālif with wasla is replaced by ālif;
[U(0x0671)] = U(0x0627),
-- taṭwīl, fatḥatan, ḍammatan, kasratan,
-- fatḥa, ḍamma, kasra,
-- shadda, sukūn, and superscript (dagger) ālif are removed.
["["..U(0x0640)..U(0x064B)..U(0x064C)..U(0x064D)
..U(0x064E)..U(0x064F)..U(0x0650)
..U(0x0651)..U(0x0652)..U(0x0670).."]"] = "",
},
},
["apc"] = {
["name"] = "North Levantine Arabic",
["article"] = "North Levantine Arabic",
["direction"] = "rtl", -- Should be in the script data module.
["replacements"] = {
-- ālif with wasla is replaced by ālif;
[U(0x0671)] = U(0x0627),
-- taṭwīl, fatḥatan, ḍammatan, kasratan,
-- fatḥa, ḍamma, kasra,
-- shadda, sukūn, and superscript (dagger) ālif are removed.
["["..U(0x0640)..U(0x064B)..U(0x064C)..U(0x064D)
..U(0x064E)..U(0x064F)..U(0x0650)
..U(0x0651)..U(0x0652)..U(0x0670).."]"] = "",
},
},
["ajp"] = {
["name"] = "South Levantine Arabic",
["article"] = "South Levantine Arabic",
["direction"] = "rtl", -- Should be in the script data module.
["replacements"] = {
-- ālif with wasla is replaced by ālif;
[U(0x0671)] = U(0x0627),
-- taṭwīl, fatḥatan, ḍammatan, kasratan,
-- fatḥa, ḍamma, kasra,
-- shadda, sukūn, and superscript (dagger) ālif are removed.
["["..U(0x0640)..U(0x064B)..U(0x064C)..U(0x064D)
..U(0x064E)..U(0x064F)..U(0x0650)
..U(0x0651)..U(0x0652)..U(0x0670).."]"] = "",
},
},
["arz"] = {
["name"] = "Egyptian Arabic",
["article"] = "Egyptian Arabic",
["direction"] = "rtl", -- Should be in the script data module.
["replacements"] = {
-- ālif with wasla is replaced by ālif;
[U(0x0671)] = U(0x0627),
-- taṭwīl, fatḥatan, ḍammatan, kasratan,
-- fatḥa, ḍamma, kasra,
-- shadda, sukūn, and superscript (dagger) ālif are removed.
["["..U(0x0640)..U(0x064B)..U(0x064C)..U(0x064D)
..U(0x064E)..U(0x064F)..U(0x0650)
..U(0x0651)..U(0x0652)..U(0x0670).."]"] = "",
},
},
["av"] = {
["name"] = "Avar"
},
["be"] = {
["article"] = "Belarusian language",
["replacements"] = { [acute] = "", },
},
["bn"] = {
["name"] = "Bengali",
["article"] = "Bengali language",
},
["bua"] = {
["name"] = "Buryat",
},
["cel-pro"] = { -- Incorrect tag
["name"] = "Proto-Celtic",
["Wikipedia_code"] = "cel-x-proto",
},
["cel-x-proto"] = {
["name"] = "Proto-Celtic",
},
["cel-bry-pro"] = { -- Incorrect tag
["name"] = "Proto-Brythonic",
["article"] = "Common Brittonic",
["type"] = "reconstructed",
},
["com"] = {
["name"] = "Comanche",
["article"] = "Comanche language",
},
["cu"] = {
["name"] = "Old Church Slavonic",
["article"] = "Old Church Slavonic",
},
["de"] = {
["name"] = "German",
["article"] = "German language",
},
["en"] = {
["name"] = "ஆங்கிலம்",
["article"] = "ஆங்கிலம்",
},
["es"] = {
["name"] = "Spanish",
["article"] = "Spanish language",
},
["egy"] = {
["name"] = "Egyptian",
},
["evn"] = {
["name"] = "Evenki",
["article"] = "Evenki language",
},
["fr"] = {
["name"] = "French",
["article"] = "French language",
},
["frm"] = {
["name"] = "Middle French",
["article"] = "Middle French",
},
["frp"] = {
["name"] = "Franco-Provençal",
},
["ff"] = {
["name"] = "Fula",
},
["gem-pro"] = { -- Incorrect tag
["name"] = "Proto-Germanic",
["article"] = "Proto-Germanic language",
["type"] = "reconstructed",
["replacements"] = {},
["Wikipedia_code"] = "gem-x-proto",
},
["gem-x-proto"] = {
["name"] = "Proto-Germanic",
["article"] = "Proto-Germanic language",
["type"] = "reconstructed",
["replacements"] = {},
},
["gml"] = {
["name"] = "Middle Low German",
},
["gmw-ecg"] = {
["name"] = "East Central German",
},
["gmw-x-proto"] = {
["name"] = "Proto-West Germanic",
["article"] = "Proto-West Germanic language",
["type"] = "reconstructed",
["replacements"] = {},
},
["gmq-x-gut"] = {
["name"] = "Gutnish",
["article"] = "Gutnish",
},
["goh"] = {
["replacements"] = {
decompose = true,
from = {
"[" .. macron .. circumflex .. diaeresis .. "]",
},
},
},
["got"] = {
["name"] = "Gothic",
["article"] = "Gothic language",
["replacements"] = {
-- Latin to Gothic since people will not want to have to copy
-- and paste Gothic letters in
["[AÁaáĀā]"] = "𐌰",
["[Bb]"] = "𐌱",
["[Gg]"] = "𐌲",
["[Dd]"] = "𐌳",
["[EeĒē]"] = "𐌴",
["[Qq]"] = "𐌵",
["[Zz]"] = "𐌶",
["[Hh]"] = "𐌷",
["[Þþ]"] = "𐌸",
["[IiÍí]"] = "𐌹",
["[Kk]"] = "𐌺",
["[Ll]"] = "𐌻",
["[Mm]"] = "𐌼",
["[Nn]"] = "𐌽",
["[Jj]"] = "𐌾",
["[UuÚúŪū]"] = "𐌿",
["[Pp]"] = "𐍀",
["[Rr]"] = "𐍂",
["[Ss]"] = "𐍃",
["[Tt]"] = "𐍄",
["[WwYy]"] = "𐍅",
["[Ff]"] = "𐍆",
["[Xx]"] = "𐍇",
["[Ƕƕ]"] = "𐍈", -- Not sure if "hw" and "hv" can safely be converted
["[OoŌō]"] = "𐍉",
},
},
["gsw"] = {
["name"] = "Alemannic German",
},
["grc"] = {
["name"] = "Ancient Greek",
["article"] = "Ancient Greek",
["replacements"] = {
decompose = true,
from = {
-- Replace variant letterforms with standard ones.
"ϐ", "ϵ", "ϑ", "ϰ", "ϱ", "ϲ", "ϕ",
-- Remove macrons and breves.
"[" .. macron .. breve .. undertie .. "]"
},
to = {
"β", "ε", "θ", "κ", "ρ", "σ", "φ",
}
},
},
["grk-pro"] = { -- Incorrect tag
["name"] = "Proto-Hellenic",
["Wikipedia_name"] = "Proto-Greek",
["article"] = "Proto-Greek language",
["type"] = "reconstructed",
["replacements"] = {},
["Wikipedia_code"] = "grk-x-proto",
},
["grk-x-proto"] = {
["name"] = "Proto-Hellenic",
["Wikipedia_name"] = "Proto-Greek",
["article"] = "Proto-Greek language",
["type"] = "reconstructed",
["replacements"] = {},
},
["grt"] = {
["name"] = "Garo",
},
["ha"] = {
["name"] = "Hausa",
-- remove tilde, grave, acute, macron, circumflex
["replacements"] = {
decompose = true,
from = { "[" .. grave .. circumflex .. macron .. acute .. tilde .. "]" },
},
},
["hi"] = {
["name"] = "Hindi",
["article"] = "Hindi",
},
["ilo"] = {
["name"] = "Ilocano",
["article"] = "Ilocano language",
},
["ine-bsl-pro"] = {
["name"] = "Proto-Balto-Slavic",
["article"] = "Proto-Balto-Slavic language",
["type"] = "reconstructed",
},
["ine-pro"] = { -- Incorrect tag
["name"] = "Proto-Indo-European",
["article"] = "Proto-Indo-European language",
["type"] = "reconstructed",
["replacements"] = {},