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
Lý do không ai có thể đoán được thị trường
Lý do không ai có thể đoán được thị trường
Thực tế có nhiều ý kiến trái chiều về chủ đề này, cũng vì thế mà sinh ra các trường phái đầu tư khác nhau
Thấy gì qua Upstream (2024) của Từ Tranh
Thấy gì qua Upstream (2024) của Từ Tranh
Theo số liệu của Trung tâm Nghiên cứu Việc làm mới của Trung Quốc, mức thu nhập trung bình của các tài xế loanh quanh 7000 NDT, tương ứng với 30 đơn giao mỗi ngày trong 10 ca làm 10 giờ liên tục
Hướng dẫn build đồ cho Citlali trong Genshin Impact
Hướng dẫn build đồ cho Citlali trong Genshin Impact
Hầu hết các kỹ năng của Citlali đều có scale cơ bản theo chỉ số tấn công, nhưng chỉ số tấn công cơ bản của cô hiện đang thấp thứ hai game
Cách Zoom Tăng Tỉ Lệ Chuyển Đổi Chỉ Với 1 Thay Đổi Trong Design
Cách Zoom Tăng Tỉ Lệ Chuyển Đổi Chỉ Với 1 Thay Đổi Trong Design
Bạn có thể sử dụng Zoom miễn phí (max 40p cho mỗi video call) hoặc mua gói Pro/Business dành cho doanh nghiệp.