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/category documentation

Permanently protected module
From Wikipedia, the free encyclopedia

require('strict')

local p = {}
local lects = mw.loadData('Module:IPA/data/export')
local mLang = require('Module:Lang')

function p.lookup_name( name )
	for _, lect in ipairs(lects) do
		if (lect.name or lect.extName) == name then
			return lect.code, lect, lect.parent
		end
	end

	local code = mLang._tag_from_name({ name })
	if not code:find('^<span') then
		local regionCode = code:match('-(.+)')
		if regionCode and regionCode:sub(1, 2) ~= 'x-' then
			code = code:sub(1, #code - #regionCode) .. regionCode:upper()
		end
		for _, lect in ipairs(lects) do
			if lect.code == code then
				return code, lect, lect.parent
			end
		end
		return code, nil, nil
	end

	return nil, nil, nil
end

function p.main(frame)
	local args = {}
	for k, v in pairs(frame:getParent().args) do
		if v ~= '' then
			args[k] = v
		end
	end
	local name = mw.title.getCurrentTitle().text:sub(12, -5)
	local lect, parent
	local code = args.code
	if not code then
		code, lect, parent = p.lookup_name( name )
	end
	if not code and args.container ~= 'yes' then
		return frame:expandTemplate({ title = 'Hidden category' }) .. string.format('<span class="error" style="font-size: 100%%; font-style: normal;">Error: language code for "%s" not found. Please see [[Template talk:IPA]] for assistance.</span>[[Category:IPA template errors]]', name)
	end
	local isCollective = name:find(' languages$') and true
	local link = lect and (lect.link or lect.generatedLink or lect.extLink)
		or parent and (parent.link or parent.generatedLink or parent.extLink)
		or isCollective and name
		or name .. ' language'
	if not mw.title.new(link).exists then
		link = mLang._name_from_tag({ code, link = 'yes' })
			:match('^%[%[([^|%]]+)')
	end
	local key = lect and lect.key or parent and parent.key
	local langCat, langCatCount
	if code then
		langCat = mLang._category_from_tag({ code })
		if langCat:find('^<span') then
			langCat = nil
		else
			langCatCount = mw.site.stats.pagesInCategory(langCat:sub(10), 'pages')
		end
	end
	local parentName = args.parent
		or parent and (parent.name or mLang._name_from_tag({ parent.code, raw = 'yes' }))
		or code and code:find('-') and mLang._name_from_tag({ code:gsub('%-.*', ''), raw = 'yes' })
	if parentName == name or parentName and parentName:find('^<span') then
		parentName = nil
	end
	local cat = args.cat ~= 'no' and (
		parentName and 'Pages with ' .. parentName .. ' IPA' or 'Pages with IPA'
	)
	local sortkey = args.sort or name:find('^[ %l]+$') and ' ' .. name or name
	local ret = {}
	table.insert(ret, frame:expandTemplate({ title = 'Tracking category' }))
	table.insert(ret, string.format(
		'The following pages contain [[International Phonetic Alphabet|IPA]] transcriptions of [[%s|%s]] using %s. This category should never be added manually.',
		link,
		name,
		code
			and string.format('<code>{{[[Template:IPA|IPA]]|%s|...}}</code>', code)
			or '[[Template:IPA]]'
	))
	if key then
		table.insert(ret, string.format(
			'By default, the transcriptions are linked to the [[%s]] key. Transcriptions that do not adhere to the conventions of the key must have <code>|generic=yes</code>.',
			key
		))
	end
	if isCollective or args.collective == 'yes' then
		table.insert(ret, string.format(
			'%s a language collective. Please replace the code%s with those of more specific languages where possible.',
			isCollective and string.format('The %s are', name) or string.format('%s is', name),
			code and ' (' .. code .. ')' or ''
		))
	end
	if args.content then
		table.insert(ret, args.content)
	end
	if langCat and langCatCount ~= 0 then
		table.insert(ret, string.format(
			'==See also==\n*[[:%s]] (%s)',
			langCat,
			mw.language.new('en'):formatNum(langCatCount)
		))
	end
	if cat then
		table.insert(ret, string.format('[[Category:%s|%s]]', cat, sortkey))
	end
	return table.concat(ret, '\n\n')
end

return p