Module:Respell

From the Science Archives, the open-project database of science information
Jump to navigation Jump to search

Documentation for this module may be created at Module:Respell/doc

local p = {}
local getArgs = require('Module:Arguments').getArgs

function p._main(args)
	local ret = {}
	local hasUnsc = {}
	local j = 0
	
	for i, v in ipairs(args) do
		-- Compatibility: Ignore arguments that only contain an apostrophe
		if v and v ~= '' and v ~= "'" then
			hasUnsc[i] = mw.ustring.find(v, '_')
			if hasUnsc[i] then
				v = mw.ustring.gsub(v, '_', ' ')
			else
				if mw.ustring.find(v, '%u') and v == mw.ustring.upper(v) then
					local span = mw.html.create('span')
						:css('font-size', '90%')
						:wikitext(v)
					v = tostring(span)
				end
				if i ~= 1 and not hasUnsc[i - 1] and v ~= '-' then
					table.insert(ret, '-')
				end
			end
			table.insert(ret, v)
		end
		j = i
	end
	
	-- Create <i title="...">...</i>
	local italic = mw.html.create('i')
		:attr('title', 'English pronunciation respelling')
		:wikitext(table.concat(ret))
	ret = tostring(italic)
	
	-- For documentation: Disable linking by adding a blank parameter at the end
	if args[j] ~= '' then 
		ret = string.format('[[Help:Pronunciation respelling key|%s]]', ret)
	end
	
	return ret
end

function p.main(frame)
	local args = getArgs(frame, {removeBlanks = false})
	return p._main(args)
end

return p