Mô đun:IPA symbol

local data = mw.loadData('Module:IPA symbol/data').data
local p = {}

local gsub = mw.ustring.gsub
local len = mw.ustring.len
local sub = mw.ustring.sub

local function reverseLook(t, s)
	local ret
	for i = 1, len(s) - 1 do
		-- Look for 2-char matches first
		ret = t[sub(s, i, i + 1)] or t[sub(s, i, i)]
		if ret then
			return ret
		end
	end
	ret = t[sub(s, -1)] -- Last character
	if ret then
		return ret
	end
end

local function returnData(s, dataType)
	for _, v in ipairs(data.univPatterns) do
		s = gsub(s, v.pat, v.rep)
	end
	local key = s
	for _, v in ipairs(data.keyPatterns) do
		key = gsub(key, v.pat, v.rep)
	end
	local ret = data.sounds[key] or data.diacritics[key]
		or reverseLook(data.diacritics, s)
	if ret and dataType then
		if ret[dataType] then
			ret = ret[dataType]
		else
			error(string.format('Invalid data type "%s"', dataType))
		end
	end
	return ret
end

local function returnErrorCat()
	return require('Module:Category handler').main{
		'[[Category:International Phonetic Alphabet pages needing attention]]',
		other = ''
	}
end

local function returnError(s)
	return string.format(
		'<span class="error">Error using {{[[Template:IPA symbol|IPA symbol]]}}: "%s" not found in list</span>%s',
		s, returnErrorCat())
end

function p._main(s, errorText, output)
	return returnData(s, output or 'article') or errorText or returnError(s)
end

function p.main(frame)
	local args = {}
	for k, v in pairs(frame.args) do
		args[k] = v ~= '' and v
	end
	if not args.symbol then
		return '' -- Exit early
	end
	if args.errortext == 'blank' then
		args.errortext = ''
	end
	return p._main(args.symbol, args.errortext, args.output)
end

function p._link(s, displayText, prefix, suffix, audio, addSpan, errorText)
	local t = returnData(s)
	if t then
		s = string.format('%s[[:%s|%s]]%s',
			prefix or '', t.article, displayText or s, suffix or '')
		if addSpan ~= 'no' then
			local span = mw.html.create('span'):addClass('IPA'):attr('lang', 'und-fonipa')
			if prefix or suffix then
				span:addClass('nowrap'):attr('title',
					'Representation in the International Phonetic Alphabet (IPA)')
			end
			s = tostring(span:wikitext(s))
		end
		if audio then
			audio = require('Module:Yesno')(audio, audio)
			audio = audio == true and t.audio or audio
			if audio ~= '' then
				audio = mw.getCurrentFrame():expandTemplate{
					title = 'Template:Audio',
					args = { audio, 'listen', help = 'no' }
				}
				audio = ' <span class="nowrap" style="font-size:85%">(' .. audio
					.. ')</span>'
			end
		else
			audio = ''
		end
		return s .. audio
	 else
		return errorText or returnError(s)
	end
end

function p.link(frame)
	local args = {}
	for k, v in pairs(frame.args) do
		args[k] = v ~= '' and v
	end
	if not args.symbol then
		return '' -- Exit early
	end
	if args.errortext == 'blank' then
		args.errortext = ''
	end
	return p._link(args.symbol, args.text, args.prefix, args.suffix, args.audio,
		args.span, args.errortext)
end

return p
Chúng tôi bán
Bài viết liên quan
Sống đời bình yên lại còn được trả phí khi đến đảo của Ireland
Sống đời bình yên lại còn được trả phí khi đến đảo của Ireland
Mỗi người dân khi chuyển đến những vùng đảo theo quy định và sinh sống ở đó sẽ được nhận khoản tiền trợ cấp là 92.000 USD
Công thức làm lẩu ếch măng cay
Công thức làm lẩu ếch măng cay
Lẩu ếch măng cay là một trong những món ngon trứ danh với hương vị hấp dẫn, được rất nhiều người yêu thích, cuốn hút người sành ăn
Đại cương về sát thương trong Genshin Impact
Đại cương về sát thương trong Genshin Impact
Các bạn có bao giờ đặt câu hỏi tại sao Xiangling 4 sao với 1300 damg có thể gây tới 7k4 damg lửa từ gấu Gouba
Review sách
Review sách "Thiên thần và ác quỷ"- Dan Brown: khi ác quỷ cũng nằm trong thiên thần!
Trước hết là đọc sách của Dan dễ bị thu hút bởi lối dẫn dắt khiến người đọc vô cùng tò mò mà không dứt ra được