Edge Rewrite
// HTMLRewriter · presentation

This page was redesigned at the edge.

Cloudflare fetched the original article and streamed it through HTMLRewriter to apply an entirely new visual system without rebuilding the source page.

Jump to content

Module:IPA/data/export

Permanently protected module
From Wikipedia, the free encyclopedia

require('strict')

local rawData = mw.title.getCurrentTitle().subpageText == 'sandbox'
	and mw.loadData('Module:IPA/data/sandbox')
	or mw.loadData('Module:IPA/data')
local data = {}

local function getNameAndLink(code)
	local res = require('Module:Lang')._name_from_tag({ code, link = 'yes' })
	local name = res:match('([^%[|%]]+)%]%]$')
	local link = res:match('^%[%[([^|%]]+)')
	return name, link
end

local function augmentData(lect)
	if lect.name and not lect.link then
		lect.generatedLink = lect.name:find(' languages$')
			and lect.name
			or lect.name .. ' language'
	end
	lect.extName, lect.extLink = getNameAndLink(lect.code)
end

for code, lang in pairs(rawData.langs) do
	local langData = {
		code = code,
		name = lang.name,
		text = lang.text,
		link = lang.link,
		key = lang.key
	}
	augmentData(langData)
	table.insert(data, langData)
	if lang.dialects then
		local aliases = {}
		for diaCode, dialect in pairs(lang.dialects) do
			if dialect.aliasOf then
				aliases[dialect.aliasOf] = aliases[dialect.aliasOf] or {}
				table.insert(aliases[dialect.aliasOf], diaCode)
			end
		end
		for _, t in pairs(aliases) do
			table.sort(t)
		end
		for diaCode, dialect in pairs(lang.dialects) do
			if not dialect.aliasOf then
				local diaAliases = aliases[diaCode]
				if dialect.isVariant then
					diaCode = diaCode:lower()
				end
				local diaData = {
					code = code .. '-' .. diaCode,
					aliases = diaAliases,
					name = dialect.name,
					text = dialect.text,
					link = dialect.link,
					key = dialect.key,
					parent = langData
				}
				augmentData(diaData)
				table.insert(data, diaData)
			end
		end
	end
end

table.sort(data, function (a, b) return a.code < b.code end)

return data