Jump to content

Module:IPA/category documentation: Difference between revisions

From Wikipedia, the free encyclopedia
Content deleted Content added
No edit summary
refactor
Line 47: Line 47:
end
end
local isCollective = name:find(' languages$') and true
local isCollective = name:find(' languages$') and true
local link = lect and (lect.link or lect.generatedLink or lect.extLink) or
local link = lect and (lect.link or lect.generatedLink or lect.extLink)
parent and (parent.link or parent.generatedLink or parent.extLink) or
or parent and (parent.link or parent.generatedLink or parent.extLink)
isCollective and name or
or isCollective and name
name .. ' language'
or name .. ' language'
if not mw.title.new(link).exists then
if not mw.title.new(link).exists then
link = mLang._name_from_tag({ code, link = 'yes' })
link = mLang._name_from_tag({ code, link = 'yes' })
Line 65: Line 65:
end
end
end
end
local parentName = args.parent or
local parentName = args.parent
parent and (parent.name or mLang._name_from_tag({ parent.code, raw = 'yes' })) or
or parent and (parent.name or mLang._name_from_tag({ parent.code, raw = 'yes' }))
code and code:find('-') and mLang._name_from_tag({ code:gsub('%-.*', ''), raw = 'yes' })
or code and code:find('-') and mLang._name_from_tag({ code:gsub('%-.*', ''), raw = 'yes' })
if parentName == name or
if parentName == name or parentName and parentName:find('^<span') then
parentName and parentName:find('^<span')
then
parentName = nil
parentName = nil
end
end
local cat = args.cat ~= 'no' and (
local cat = args.cat ~= 'no' and (
parentName and 'Pages with ' .. parentName .. ' IPA' or
parentName and 'Pages with ' .. parentName .. ' IPA' or 'Pages with IPA'
'Pages with IPA'
)
)
local sortkey = args.sort or
local sortkey = args.sort or name:find('^[ %l]+$') and ' ' .. name or name
name:find('^[ %l]+$') and ' ' .. name or
name
local ret = {}
local ret = {}
table.insert(ret, frame:expandTemplate({ title = 'Tracking category' }))
table.insert(ret, frame:expandTemplate({ title = 'Tracking category' }))

Revision as of 10:09, 29 December 2024

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
	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