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
The Lobster 2015 - Khi “Ế” chính là một cái tội
The Lobster 2015 - Khi “Ế” chính là một cái tội
The Lobster là một bộ phim viễn tưởng hài hước đen siêu thực năm 2015 do Yorgos Lanthimos đạo diễn, đồng biên kịch và đồng sản xuất
Viết cho những chông chênh tuổi 30
Viết cho những chông chênh tuổi 30
Nếu vẫn ở trong vòng bạn bè với các anh lớn tuổi mà trước đây tôi từng chơi cùng, thì có lẽ giờ tôi vẫn hạnh phúc vì nghĩ mình còn bé lắm
Chiều cao của các nhân vật trong Tensei Shitara Slime Datta Ken
Chiều cao của các nhân vật trong Tensei Shitara Slime Datta Ken
Thực sự mà nói, Rimuru lẫn Millim đều là những nấm lùn chính hiệu, có điều trên anime lẫn manga nhiều khi không thể hiện được điều này.
Visual Novel Bishoujo Mangekyou 1 Việt hóa
Visual Novel Bishoujo Mangekyou 1 Việt hóa
Onogami Shigehiko, 1 giáo viên dạy nhạc ở trường nữ sinh, là 1 người yêu thích tất cả các cô gái trẻ (đa phần là học sinh nữ trong trường), xinh đẹp và cho đến nay, anh vẫn đang cố gắng giữ bí mât này.