Jump to content

Module:IPA/category documentation

Permanently protected module
From Wikipedia, the free encyclopedia
This is an old revision of this page, as edited by Gonnym (talk | contribs) at 13:29, 27 October 2024 (changing how an incorrect category (error) is handled. Now it just produces an error message and places the category in the error category as the rest of the text is not relevant here. Also adding in the template call to the module so all code is in one place). The present address (URL) is a permanent link to this revision, which may differ significantly from the current revision.

require('strict')

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

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
		for _, lect2 in ipairs(lects) do
			if (lect2.name or lect2.extName) == name then
				lect = lect2
				parent = lect.parent
				code = lect.code
				break
			end
		end
	end
	if not code then
		code = mLang._tag_from_name({ name })
		if code:find('^<span') then
			code = nil
		else
			local regionCode = code:match('-(.+)')
			if regionCode and regionCode:sub(1, 2) ~= 'x-' then
				code = code:sub(1, #code - #regionCode) .. regionCode:upper()
			end
			for _, lect2 in ipairs(lects) do
				if lect2.code == code then
					lect = lect2
					parent = lect.parent
					break
				end
			end
		end
	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'
	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 parent.extName) or
		code and code:find('-') and mLang._name_from_tag({ code:gsub('%-.*', '') })
	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 then
		table.insert(ret, string.format(
			'The %s are a language collective. Please replace the code%s with those of more specific languages where possible.',
			name,
			code and ' (' .. code .. ')' or ''
		))
	end
	if not code and args.container ~= 'yes' then
		local layout = {}
		local error_message = string.format('language code for "%s" not found. Please see [[Template talk:IPA]] for assistance.', name)
		table.insert(layout, string.format('<span style="font-size: 100%%; font-style: normal;" class="error">Error: %s</span>', error_message))
		table.insert(layout, "[[Category:IPA template errors]]")
		return table.concat(layout)
	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